Charles
Games

COOL ANIMALS

An original browser platform fighter. Twelve animal fighters on a treetop arena, and every fight replays frame for frame.

Status
Liveplaytest
When
Jul 2026
Category
Games
Links

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.

Fighter select. Twelve animals, two proven combat kernels.
Fighter select. Twelve animals, two proven combat kernels.
The title screen.
The title screen.
A match on the treetop arena.
A match on the treetop arena.
Mid-fight, layered depth and drifting leaves.
Mid-fight, layered depth and drifting leaves.

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

  1. 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.
  2. 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.
  3. 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

  1. 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.
  2. 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.