Johan Alphonso Braga
Typing test⌘J
AboutProjectsReadingStackCraftDesignStatusResume

Utilities

Ask anything Typing test

Elsewhere

GitHub

All projects

Games / 2026 / Live in the browser

Downshift

A platformer with no jump and no walking. The only control is choosing which way is down, plus one flip in mid-air that comes back when you land. Ten rooms, each proven finishable by a replayed route.

Downshift

01

The problem

A gravity-flip game where flipping is the only input lives or dies on its rooms. A room that cannot be finished is easy to ship by accident, because the route depends on fall speed, saw timing and how long you wait before a second flip, none of which can be checked by eye.

02

How I approached it

Physics runs in fixed 1/120 s steps with per-axis tile collision, and saws are a pure function of the tick since your last respawn, so the same flips at the same ticks always give the same run. Sideways speed survives an air flip, so a grounded flip followed by an air flip draws a curve whose landing depends on the delay between them. Rooms are built from rectangle operations so they stay exactly 32 by 18. A breadth-first search over resting positions finds routes in static rooms, and a guided search over waits and air-flip delays handles the saw rooms. Every route is stored and replayed by the test suite through the same createRun, flip and step calls the game uses. The renderer interpolates between physics steps and adds the feedback: a screen kick toward the new down, squash scaled by landing speed, glowing landing faces, and Web Audio sounds synthesized at runtime.

03

The outcome

All ten rooms replay to the exit in the tests. The search caught two broken rooms during the build: one had its exit sealed in a closed box, and one had a saw running along the only lane, which no timing could pass. 12 tests with no dependencies cover the routes, air-flip recharge, momentum, chutes, flag respawns, shard loss on death and determinism.

downshift.johanthegoat.xyz Open in a new tab ↗
Next projectPressure Line →