← All projects

Case study

Early prototype

tekken8-browser

A very early prototype of a browser fighting game built around real frame data rather than feel — startup, active and recovery values drive the simulation, so matchups should behave the way the numbers say they should. Canvas 2D and plain JavaScript with no dependencies at all. Early: treat the netcode as a design that is not finished rather than something that works.

JavaScriptCanvasGame Dev

The idea

Fighting games are specified in frame data. Startup frames, active frames, recovery, hitbox positions — these are numbers, and they decide what actually happens in a match. Building the game off those numbers rather than off feel means the simulation is something you can reason about, which is the precondition for the netcode below.

Why rollback

Rollback-style netcode instead of delay-based. Rather than waiting for your opponent's input, each client simulates ahead on a prediction and rewinds when the real packet disagrees. It trades CPU for latency, which is the right way round for a fighting game. This is the intended design — it is not finished, and there is no working online match yet.

Zero dependencies

Canvas 2D and plain JavaScript, nothing from npm. For a real-time game that is deliberate: every dependency is latency, and the netcode is the part that has to be exactly right. Roughly 96% JavaScript, the rest CSS and HTML.

Honest status

This is the least finished thing in this list. The direction is sound and the reasoning is real, but there is a lot between here and a game you can sit down and play — locally or online.

What I learned

  • Deterministic simulation is what would make rollback possible; without it you cannot rewind to a state you can trust.
  • Frame data is a specification — once moves are numbers, a fighting game can be reasoned about instead of tuned by feel.

What it doesn't do yet

Listed deliberately — a project's limits are as useful to a reviewer as its features.

  • Very early prototype. Assume it is not playable yet.
  • The netcode is a design, not a working feature — no online match exists.
  • No live build; the repository is the only place it exists.
  • Single matchup and two characters at most.