SPITEFALL

The unusual thing

The warning

Every trap that can kill you announces itself at least 100 milliseconds before it fires. That is not a design intention. It is a condition the build has to meet, and a level where it is not true does not get in.

What a warning is

A mark on the thing that is about to happen, in one colour that never means anything else, plus a sound that is unique within that room. The floor about to open grows a crack along the seam. Spikes about to rise put a glint on the tiles they will come through. A ceiling about to drop sheds dust. A saw about to cross hums.

There are nine marks and they are nine shapes, not one shape in nine colours. That distinction is the whole of the accessibility story: with the sound off, and with colour vision that does not separate teal from grey, they are still nine different things. The shapes are measured against each other under normal vision and under simulated protanopia and deuteranopia, and the test fails if any two get too close.

Why 100 milliseconds

Because a human reaction to something appearing on screen runs somewhere around 200 to 250 milliseconds, and a warning shorter than the reaction it is asking for is not a warning. 100 is the floor the data format enforces; what actually ships is far above it. The first world starts at 600 milliseconds and never goes below 320, and the number comes down as the game goes on.

The floor is checked against a bot rather than an opinion. A scripted player who has never seen the level, who reacts to nothing but the announcement, and who is given a deliberate 220 millisecond delay before it can move, has to finish every trap's test room.

And the other half, which is the half that makes the first half mean anything: a player who ignores the announcement has to die. A trap positioned where it never threatens anyone lets every bot through. The first version of this test happily reported twenty levels as having a comfortable margin at positions where the trap never fired at all.

When you die anyway

The game replays your attempt at about a third speed, with a ring around the announcement you missed, and a sentence: "The floor cracked 400 ms before it opened. You were still there 180 ms after."

It is a real replay, not an animation of one. The game records your input as one byte per tick and plays those bytes back into a second copy of the simulation, which lands in exactly the same place because the simulation is deterministic. A test replays 28 scripted deaths across 11 different traps and checks that every replay reaches the same tick, blames the same trap, and produces the same state as the attempt it came from.

One tap dismisses it. Holding jump through the death skips it entirely — it never appears. An explanation you cannot dismiss is a punishment, and this genre has enough of those.

What is actually checked, and where

These are conditions in the build, not claims on a page. Each one fails the whole test run if it stops being true.

ClaimWhat proves it
Every lethal trap has a warning, at least 100 ms ahead, visible from where the player is standing, with a sound unique in its room validate_tells.gd
Reacting to the warning is enough; ignoring it is fatal validate_tells.gd, the paired blind runs
The death replay names the trap that killed you, with the warning time and how late you were validate_replay.gd, 28 deaths over 11 traps
The replay reproduces the attempt exactly rather than approximating it validate_replay.gd, same tick, same culprit, same state
Nine warnings are nine distinguishable shapes, in normal vision and two kinds of colour blindness check_tells_visual.py
The ten warning sounds are distinguishable from each other on a phone speaker check_sounds.py
Turning the sound off changes nothing the game does validate_audio.gd
Every level can be finished, proved by replaying a recorded run of it validate_solutions.gd
No ads, no purchases, no account, no network, no analytics, no review prompt validate_promises.gd

The test suite is not public yet. When the game ships, this page will link to the parts of it that back each row.

What this does not claim

Not that the game is fair in some larger sense. A room can warn you properly and still be unpleasant, and no test catches that — the checks prove a level can be finished, never that it is fun. That part is played by hand.

Not that you will see the warning. It proves the warning is there, on screen, far enough ahead. Looking at the wrong side of the room is still on you, which is the point.