Appearance
PICO-8 jam post-mortem — Quiet Frame placed 14 of 186
Three weekends ago I made a small autobiographical platformer in PICO-8 for the Spring Jam on the Lexaloffle forums. Seventy-two hours of work, including sleep. The game ended up at 14/186 on the combined leaderboard, which is the best placing I have ever managed in a jam. This is the post that goes through everything that worked and everything that didn't.
What the game is
Quiet Frame is a single-screen platformer about my apartment. You play a small sprite walking around a flat that is roughly the layout of my actual flat in Kyoto, watching the light change through the windows as you move between rooms. There is no combat, no scoring, no fail state. You can leave the apartment through the front door, which ends the game.
It is exactly the size of game you can make in seventy-two hours if you are not trying to make a game.
What worked
Scope, twice
The first scope decision was the framing. "A platformer about your apartment" is a tight enough premise that you can hold the whole game in your head from minute one. There is no temptation to add a new mechanic at hour fifty because the genre rules out most new mechanics — this is a small platformer in a small space, and "what if combat?" obviously breaks it.
The second scope decision was on Saturday morning, when I cut a planned roof scene. The roof would have taken about twelve hours to draw and tune and would have added one extra room to an apartment that only really has four. I cut it without ceremony and added a sleeping cat in the bedroom instead, which was about ninety minutes of work and made every single playtester smile.
One sprite, animated
The protagonist is a single 16×16 sprite with a four-frame walk cycle. I draw badly under time pressure, so committing to one sprite for the whole game meant I could spend an hour polishing that one sprite instead of an hour each on five mediocre ones. The walk cycle reuses the standing frame as frames 1 and 3, so there are really only three drawings.
This is a trick I picked up from Daniel Linssen's jam games. Every Linssen game has one sprite that looks too good for the surrounding work, because he spent the time he saved elsewhere on it. I aim for that ratio.
Audio first
I wrote the music on Friday night before I had written a single line of code. PICO-8's tracker is fast enough that a usable two-minute loop takes about an hour, and writing the audio first commits you to a tone. Quiet Frame is a sad-but-warm game because the music decided it would be, and the rest of the game had to match. Without that constraint I would have spent forty hours iterating on tone and gotten there at hour seventy.
A bug as a feature
There is a moment in the game where, if you stand still in the kitchen for thirty seconds, the cat walks out from the bedroom and stands next to you. This was originally a bug — the cat's pathfinding broke if its target became unreachable, and "you" became unreachable when you stopped moving. I noticed it at hour sixty-two, decided it was charming, and built a small audio cue around it instead of fixing it. About a third of the comments on the jam page mentioned the cat.
What did not work
The sleeping room
The bedroom has a window with a slow day-night cycle visible through it. The window is the wrong scale — the sky takes up too much of the frame, which makes the room feel like a hotel room rather than a home. I knew this on Sunday afternoon and did not have time to fix it. In a jam, "I know it is wrong" is not enough; you have to be able to fix it. Next time I will rough in every room on day one with placeholder art and only commit to a frame once the rough-in works.
Token budget panic
PICO-8 has a hard limit of 8,192 tokens for code. I hit 8,000 at about hour fifty-five and spent the next four hours optimising token usage instead of finishing the game. The fix would have been to write the boring code first — the cutscene at the door, the pause menu, the basic level loader — so I knew how much budget I had to play with for the actual content. Instead I wrote the fun code first and then had a panic on Sunday morning.
End budget: 5,800 tokens after an aggressive minify. So in retrospect I had headroom, I just did not know it.
The end screen
The game ends when you walk through the front door. The screen fades to black, and then it shows a hard-coded "thanks for playing" message in white text. This is the part of the game that has aged worst. It feels like a placeholder because it was a placeholder, and I would have spent the cut roof time on a real ending if I had known how much that hurt the final impression.
The lesson is something I knew already but apparently forgot: the last fifteen seconds of a jam game does more for your placement than the middle ten minutes. Polish the bookends.
Mac retina rendering
PICO-8's web export renders at the native PICO-8 resolution (128×128) and scales up. On a retina Mac, the default scaling is bilinear, which makes the game look terrible. The fix is one line of CSS (image-rendering: pixelated) on the host page. I knew this; I forgot. About six of the comments on the jam page were about the game looking blurry, and they were all right.
What I would do next time
Three things.
Build the smallest playable thing in the first eight hours. Quiet Frame had a player walking around an empty room at hour twelve. That is too late. By hour eight you should have all the verbs working in a placeholder space, even if the space is one screen of flat colour. Everything after that is content.
Pick the soundtrack before the mechanic. This worked once and I will do it every time.
Schedule the polish window. I want at least eight hours at the end of any future jam dedicated entirely to polish — transitions, the menu, the ending, the title screen, the moment your mouse first touches the page. Not added features, not bug fixes. Polish.
Numbers
Final stats, if you like that kind of thing.
- Tokens used: 5,824 / 8,192
- Sprite sheet: 128 / 256 tiles
- Map: 64 / 128 cells
- Hours slept: 14
- Coffees: I lost count
- Jam placement: 14 / 186 combined; 8 / 64 on visuals
- Page views in the first week: 4,206
- Downloads of the source cart: 1,083
- Confirmed plays on Lexaloffle: 627
The source cart is up on the jam page under MIT, including the music. The game itself runs in any browser. It takes about five minutes to play through, and there is no scoring, so you cannot really lose.
I will probably make a slightly longer follow-up — a second apartment, a different city, the same character — sometime this autumn. If you want to know when that lands, the monthly newsletter is the place.