PRINT IT! · Dev log

Production
PRINT IT!
Day
1
Date
Time
08:35 ET
Gate
A fight against three extras feels good, and a packaged build runs

Day 1, part 1 of 3: The first playable

PRINT IT! is a fight picture you direct and star in. By Thursday morning a placeholder cast fights fairly, calls Cut!, prints takes, and the game cuts them together with a camera that swings around the action.

Part 1 of 3 for Thursday: from midnight to the first packaged build.

The game

PRINT IT! You’re the director and star of a cheap 1970s martial-arts picture, shot on a studio lot that’s running out of money. Every fight is a shot. Call “Cut!”, go again, and print the take you love. At the end of each scene the game edits your printed takes into the Director’s Cut and plays it back.

Overnight: the first playable

The jam opened at midnight. A scheduled Claude Code session started at 00:01 ET, wrote a plan, and committed it at 00:04. Then it built:

  • Combat on a fixed clock of 60 frames a second, with every move as data: its frames, where its hit lands, how far it pushes, and when it chains.
  • Extras who attack one or two at a time, “per their contract”.
  • The shoot: a slate, “Rolling… speed… Action!”, film stock, a shot list of beats, and the CUT! and PRINT IT! stamps.
  • A recorder that keeps every frame of a take, so Cut! can rewind it like film.
  • An auto-editor that cuts each printed take into the Director’s Cut.
  • Three greybox soundstages, the menus, the premiere and the critics.

It was done by about 01:25 ET. Everything on screen is a placeholder made of engine shapes.

Six frames from the finale: the co-star fighting, calling Double!, PRINT IT!, the Dailies and the premiere marquee
The overnight run's finale, played by a test bot. The co-star calls "Double!" and a stunt double tags in; the take is printed; then the Dailies, and the premiere marquee for Fists of the Back Lot.

The morning: playing it

The first hands-on session found two things straight away.

  • Left and right were swapped. The stick was read in world space, but the camera looks at the stage from the front.
  • The jump felt floaty. I picked the snappier of three options: same 192 cm peak, 36 frames in the air instead of 46.

Lessons from my old engine

Before the jam I built a beat ’em up engine of my own. The rules don’t let its code or content into the game, but they don’t stop me knowing things. So a separate Claude session reads that engine and writes plain-language briefs, and the sessions building PRINT IT! read only the briefs. Two arrived at 04:15 ET: how its enemies decide, and how I tuned moves.

Claude split them into two tracks that touched no file in common, and ran them in parallel sessions.

Track one: a gym for tuning

Moves now get tuned in a gym: the star against one dummy, with pause, single-frame steps, half and quarter speed, and readouts. The readouts show the move’s phases, each hit’s frame data and who can act first, why the last button press did or didn’t come out, the input, and the combo, including why it dropped.

The gym: the star hitting a dummy, with readouts along the bottom, a combo counter at the top left and a settings panel on the right
The gym. Top left, the combo and why it dropped ("the dummy was free 12 frames before hit 4"). Along the bottom, the move with its current phase in brackets, the last hit's frame data, the why line and the input. Right, the settings panel.

The gym earned its keep at once.

  • Mashing whiffed. A buffered press cancelled the jab before its hit was even tested. Now hits are tested first. A pinned check mashes for 40 seconds: with the old order 0 of 22 jabs and crosses landed; now every one does (34 of 34 on the last run).
  • The star crept on its own. My resting gamepad stick read (0.063, 0.031), enough to walk the star at about 30 cm a second. The stick has a dead zone now.

Track two: extras that fight fair

The extras’ brains are now data the tuning can reach. Each one strikes only on an opening it has noticed, never into a hit you’re already reeling from. The crowd posts itself by role, and its pressure rises if you stand still and mash.

Over a bot’s test fights:

  • extras started 0 attacks on a star who was still reacting to a hit
  • at most one extra attacked at a time
  • a bot that mashed took 142 damage a minute; one that moved took 94
The finale's first shot with an AI overlay listing each extra's role, intention, post and token
The AI overlay in the finale's first shot. Each extra shows its role (Pressure, Hunter), its intention and target, its post, and whether it holds an attack token. The crowd's pressure is at 1.00: "They're improvising!" is the rush.

The camera that swings

I asked for the Director’s Cut to stop being all sharp cuts. Now the camera sometimes swings from one shot to the next around the fight, drifts, zooms and sways like a handheld camera. Each take’s finisher gets a 90 degree swing around the action. The choices come from the take itself, so the same take always cuts the same way and a new one surprises. Scene 1’s cut came out at 26 shots, 11 of them swings. Each shot also carries an intensity number that the music will follow later.

Four frames from the Dailies, each from a slightly different camera position around the same fight
Four frames from Scene 1's Dailies, 0.35 seconds apart: the camera travels around the fight instead of cutting.

The build

The merged build packaged for Windows in 270 seconds, ran from a clean folder, and zipped to 622.8 MB, under the 1 GB limit.

The packaged game: Scene 1, shot 2, with the shot list, film stock and the star's health
The packaged build, run from a clean folder on Thursday morning: Scene 1, shot 2, "Through the window", with the bot at the controls.

What broke

  • The disk filled up. At 1.6 GB free, the engine’s cache refused to write and test runs hung. The editor had pip-installed a 5 GB machine-learning package nobody uses, once in each parallel session’s folder.
  • The first package failed. One of the new AI files used a function that only exists in the editor. Every check had compiled the editor build, so none caught it.

Next

The real gate is whether the fight feels good, and that’s mine to judge in the gym. Then the characters, which another agent is starting in OpenAI Astra from a concept package (three directions for the star, prompts for every extra and prop), the animation packs, and sound. Parts 2 and 3 follow later today.

Tools in this entryClaude CodeUnreal Engine 5.9