Visual bar
Painterly, high-contrast character presentation and impact effects.
AI-prompted 2D browser fighting game — case study
NYC Crashout is a browser-playable 2v2 tag-team fighting game with a 20-character roster, generated and assembled entirely from AI prompts. This is the executive readout: how it was built, how quality was verified, and what shipped.
01 / The starting point
The starting build already had working tag-team combat and character selection. What it lacked: a visual identity, professional-grade presentation, and a readable HUD. The bar was set high on purpose, and checked by blind comparison against top-tier genre benchmarks — not internal opinion.
Painterly, high-contrast character presentation and impact effects.
Readable HUD, weighted hits, combo feedback, tag-team pacing.
60fps at 1280×720, sustained through full-cast combat.
02 / The process
Work moved in two phases. First, straightforward feature build-out: character art, rebrand, roster. Then a repeatable loop for every major piece: build → capture → blind-judge → fix, until it actually won.
Roster integration, rebrand, full-body turnaround art wired into live combat, NYC arena catalog.
Continuity-based movement, three-phase strike animation, command buffering, depth cues.
Every fighter rebuilt around a 12-pose state vocabulary instead of one static turnaround.
An automated builder + blind 3-judge panel, scored against real reference footage, round after round until each piece won.
03 / The gauntlet loop
Once the game was playable, "looks good to me" stopped being good enough. Ten concrete pieces — HUD, KO moment, hit feedback, combo feedback, character scale, title screen, stage art, onboarding, character select, super FX — each went through the same loop: one targeted change, a deterministic capture, and a panel of three independently-prompted judges comparing it blind against real reference footage. A piece only counts as won on a majority verdict.
“Always look at the captured frame before judging — two KO fixes came from reading pixels, not verdicts.” — working rule that came out of the loop itself, after a coordinate-only fix once threw a punch away from the opponent while every number on paper looked correct.
04 / Evolution, in turning points
Eight fighters joined selection, HUD, and combat. NYC Clash became NYC Crashout, with Match Setup added before select.
A region-growing keyer replaced fragile smoothing. Across 54 source sprites, leftover backdrop fell from 34–52% to zero without eroding fighters.
Every fighter adopted the same readable state set. Nine pose-sheet batches became 108 transparent gameplay sprites.
HUD won 3/3. The K.O. won after 17 rounds, reducing clipping from 4.49% to 1.60% and recentering the action.
Live matches exposed mirrored attacks and guard stances that static review missed. The fixes were visually rechecked across the roster in both facings.
04.5 / Visual evolution
Every claim above has a paper trail of actual frames — captured deterministically by the same harness at every round, so a before/after comparison is real, not reconstructed from memory.





The shipped title screen leads. The supporting frames show how the composition moved from an early Times Square face-off into a focused Brooklyn Bridge cover, then became the playable menu with the finished NYC Crashout mark.
The chroma-key + region-growing matte pipeline turns one green-screen sheet into clean per-pose gameplay sprites with zero measured leftover backdrop — the same pipeline for every one of the 20 fighters, original roster and underground roster alike.
shipped logo — transparent master
green-key render
pink-key render
white overlay variantThe shipped transparent master leads. The green- and magenta-key passes show the extraction options used to protect every mark color, with a flat white variant retained for dark UI overlays.

Round 9 had no letterbox treatment or callout scale to speak of; round 14 added the full K.O. lockup but with a static pose; round 19 finally won by cutting near-white clipping from 4.49% to 1.60% and recentering the frame on the fallen fighter.

This is the literal comparison a judge saw, blind and unlabeled, when round 19 won 2 of 3 votes.
04.7 / The full cast
Ten fighters on the default select screen, ten more on a hidden second page — every one of them carries the full 12-state pose vocabulary (stance, walk, crouch, jump, jab, punch, kick, uppercut, hit, block, knockdown, victory), not just a single portrait. Hover a fighter for their full-body figure and stat line.
04.8 / Where it's set
Every stage is its own generated environment plate, not a shared backdrop with a palette swap — Times Square's screens, Coney Island's rides, the Met's colonnade and Grand Central's hall are each purpose-built for the fighter's scale and camera framing.
05 / The game today






06 / Where it stands
Nine of the ten gauntlet pieces now beat their reference bar on majority judge verdict. The tenth — hit-feedback on four specific characters — is a known, disclosed block: it needs regenerated hit-reaction art (their current sprites are upright stances with no recoil), and that generation step is gated on a manual login step outside this codebase. It's tracked, not hidden, with paste-ready prompts staged for whenever that's unblocked.
Static captures for deterministic comparison, then a real played match with genuine keyboard input, before anything is called done — because staged poses have bypassed real facing bugs before.
A lone judge's verdict flipped round to round on the same piece; a 3-judge panel with different lenses (craft, readability, physicality) caught a regression and killed a bad directive on its first use.
Text summaries of a judge's finding can omit or misstate what the reference frame actually shows — every fix in this project traces back to someone looking directly at the image.
This project is illustrative of process, not a client deliverable — all art, roster names, and copy shown are original to NYC Crashout. Full build documentation, the complete judge-verdict history, and the working code live in the parent project repository.
Read the full session handoff →07 / See it in motion
Hideki lands a punch, kick, and Flash Burst fireball against Fang. Aria’s Runway Rampage follows, before Hideki’s Kill Shot brings down Torta and ends on the NYC Crashout mark.
08 / Build facts
These are the figures preserved in the repository, handoff, and verification artifacts. Time and token telemetry was not instrumented during the original build, so it is disclosed as unavailable rather than reconstructed after the fact.