Fight Life is a procedurally animated boxing game, built from scratch in canvas. Every fighter, every punch, every knockdown rendered live. Plays in any modern browser, installs to your phone.
No sprite sheets. Every limb, every recoil, every smear-frame trail is drawn live from primitives. Means infinite character variation, zero memory cost.
A utility-based decision engine weighs nine factors — distance, stamina, ring position, your last fifty inputs. Pressure fighters swarm. Counter-punchers wait. Outfighters circle.
Each promotion has a distinct ring identity — mat colors, rope palette, turnbuckle posts, championship belt across three weight tiers. From underground PFA to elite Prime Fighters. Career mode lands next.
Drag any finger to move, tap to punch, hold still to block. All three at once across multiple fingers. Designed mobile-first. Browser-based, installs to your home screen.
Tight by design. Combat is single-axis (locked May 2026 after months of two-axis prototyping) — no diagonal
spacing math, no Y-drift exploits, no foot-shuffle stalemate. Three punches with hand-tuned tradeoffs. Block
drains stamina, doesn't restore it. Combos chain on tight windows. Every value here is a tunable constant in
src/data/combat.js.
Rear-hand strikes do 1.15× damage. Hit-grace window after taking a clean shot is 120ms — consume on next hit, not on a timer. Combos chain within an 800ms window for +2 damage and +1px knockback per step.
Defending costs you. A turtling fighter still bleeds — guard breaks at zero stamina into a 0.5-second stun, and the attacker punishes through it. Blocking is a tactical pause, not a free reset.
Dynamic threshold:
15 + totalDamage × 45. Fresh fighter drops at HP<15 only on a clean shot. Wounded fighter goes down at HP<37 — punches
earn weight as the fight wears on.
Each state is a discrete handler in
fighter/states/. The ref's count timer scales with total damage and current HP — fresh fighters beat the count fast,
wounded fighters don't make 9.
A utility-based AI — every tick, the opponent scores eight possible actions across nine factors and picks the highest. Each personality is a bias matrix layered on top of the universal scoring. They don't follow scripts. They read distance, stamina, your last fifty inputs, what round it is, where they are in the ring — and they choose.
Reaction time scales with distance — 100ms when close, 150ms at range. The AI commits to its decision; it doesn't peek the future. That's why a quick fake works.
Every fighter equips one technique. Visible in their dial UI, drives glove-particle motion during ignitions, modifies combat mechanics on charge / spend cycles. Each mechanic is structurally different — not a reskin of the same effect.
Three broadcast identities the exhibition editor lets you assign to any fight. The network decides everything about how the bout is presented — lighting palette, ring announcer, two-person commentary team, the suits in the booth, the language they use. Same fight on a different network is a genuinely different broadcast.



Promotions and networks aren't bound. The exhibition editor lets you pick any promotion on any network — same fight on FIGHT LIFE plays straight, on SENN reads premium, on PIRATE BROADCAST hypes wild. Three different broadcasts of the same fight.
From underground basement bouts to elite championship lights — each promotion has its own logo, ring identity (mat colors, ropes, posts, turnbuckle pads), championship belt design, and roster of named referees.






Each promotion ships with a four-ref pool. Skin tones, hair styles, ages distributed for variety. Picked at fight-create.
Procedural doesn't mean generic. Every fighter rolled by the chargen carries a full bio that the rest of the system reads — commentary calls out their record, narrative frames pick up their style, AI personality drives their decisions, motivation stack tunes their stats round-by-round. Here's an example using the champion above.
Example commentary lines a 35-year-old Argentine pressure fighter at 20-18 might trigger:
Every detail that makes a real boxing broadcast feel real — from the city the card is hosted in, to the eleven walkout themes, to the in-universe sponsors stamped across replay packages.
Every fight night under every promotion runs the same five-slot card structure. All five fights truly exist in simulation, not just the player's — the replay scene pulls real sibling-match data for the "Beyond Promotion" and "Promotion Highlights" cards. Career mode will use slot tiers for ranking-bias logic; Exhibition assigns uniformly.
Friday · Saturday · Sunday — weighted 2 / 6 / 1 per match seed.
Fictional brands — bloodwork, mouthguards, hand wraps, energy drinks, training gyms — that read at-home in a gritty boxing universe. Branded into the broadcast chrome of every replay.








Seven moments from a single Atlas Boxing card on SENN — pay-per-view title screen, arena reveal, matchup tale-of-the-tape, ring intros, champion showcase, exhibition editor. Every frame rendered live in canvas. No mockups, no concept art.
Plays in your browser. No download. No account. Save data lives on your device.
PLAY FIGHT LIFE →
A storytelling state machine, not a soundboard.
Stateful, not stateless. Pre-fight, the system reads both fighters' bios — record, age, origin, style, streak — and picks a narrative frame that the entire match plays against. Pre-fight predictions become threads the corner commentary calls back to. Post-fight pays them off, or subverts them.
Frame can shift mid-fight. A predicted technical-chess match becomes a war when both fighters open up in round three — and the frame shift itself becomes a story beat. "That's not the fight we expected, Bob."
Fifteen combat signals feed the picker each round: knockdowns, sweeps, cuts, comebacks, gassed fighters, dominant rounds, eye-closing damage, TKO warnings. Patterns gate on signals plus state — first knockdown of the fight reads different than third in this round.
Anti-repetition is global. Once a pattern fires, it's flagged for the rest of the match. No two fights sound the same, even in long sessions.
Eight narrative frames the system can land on: