COOL ANIMALS
An original browser platform fighter. Twelve animal fighters on a treetop arena, and every fight replays frame for frame.
Live testing exposed movement faults that multiplied: twelve fighters sharing transition and velocity logic meant one shared fault looked like dozens of move bugs. I reset to the last provable baseline and rebuilt combat around interaction contracts, a fixed-step deterministic simulation where any fight reproduces from an initial state and an input log.
The stage is an animated-feature diorama with layered depth, drifting leaves, and procedural audio built in code.
Stack
- TypeScript, Canvas 2D at native 1080p, zero runtime dependencies
- A fixed 60 Hz deterministic simulation with snapshots, input replay, and final-state hashes
- Sprite atlases processed from action plates
- Vitest
- Warpyard
Decisions
- One motion owner per frame. Ten invariants govern every interaction, a single authoritative action state, a defender-only escape buffer, a combo ladder with damage floors, invulnerability on ledge grab.
- Determinism as tooling. An in-page combat lab steps one frame at a time and shows frame advantage, buffered intent, and ledge ownership; sixty-seven tests replay recorded fights against expected hashes.
- All twelve fighters alias one of two proven combat kernels while keeping their own identity, art, and rival, so no combat logic is duplicated per fighter.
Lessons
- Automated tournaments expose unfinished matches that unit tests miss, but they cannot judge whether knockback and recovery feel right. Human feel remains the decisive gate.
- A 3D-first asset plan was abandoned when the bakeoff could not produce a coherent pair of fighters at target quality. The 2.5D plate pipeline could.