The tower is 100 floors — 10 zones of 10 — and the Void Apex continues it to 120. Each floor is cleared by winning a streak of consecutive battles; a single loss resets the streak to zero. Difficulty pressure comes from that reset, not from resource attrition.
Clear condition
- Win a streak of consecutive battles on a floor to open the portal to the next floor. The wins each floor takes are authored per floor (
floors.csv, column Wins_To_Clear); floors 1–100 follow ceil(floor^0.65) (1 win on floor 1, 5 on floor 10, 13 on floor 50, 20 on floor 99), the Apex grind floors take a flat 30.
- Losing a battle resets the streak to zero. You are not removed from the floor — the team stays put and rebuilds. No forced exit, no floor lock, no return to floor-select.
- Leaving a floor resets the streak to zero — INTENDED (D ruling, reaffirmed 2026-08-03). The streak is a property of the floor you are standing on, not a running total you carry. Any change of floor clears it: ascending, descending, the death-descent, and the floor selector alike. The only case that keeps it is a move that lands you back on the floor you started on. In code the streak survives exactly when
floorNum is unchanged (streak:(prev.floorNum!==target?0:prev.streak) in the travel path).
- The consequence is deliberate: stepping off a partly-cleared new floor forfeits that progress and it must be rebuilt from zero. Reported as a bug (report #17, closed wontfix) — it is the design. The pressure in this game comes from the reset, and a streak that banked across floors would let a player accumulate wins on trivial floors and spend them on hard ones.
- Above floor 100 the formula does not apply. In the Void Apex postgame zone (floors 101–120) every grind floor takes a flat 30 wins to open the boss room above it, and the odd/even alternation replaces the every-10th boss rule. LIVE on release since 0.48 (2026-08-13) —
floors.csv authors 30 on every Apex grind floor and the client gates the boss room on it through winsToClear().
- Boss floors (10, 20 … 100, and every even Apex floor) have no streak — the floor is the boss room, one fight, entered with that zone's boss key (see Bosses). Which floors are boss floors is authored in
floors.csv (Is_Boss), not an “every tenth” rule.
- Full HP is restored after every battle, win or lose. Healing items were removed entirely; attrition exists only within a single battle.
Threshold by floor
| Floor | Wins to clear | Floor | Wins to clear |
Numbers read live from floors.csv. Boss floors (10, 20, … 100) have no streak: one boss fight.
Streak counter
After every battle a compact rectangle shows X / Y (wins / threshold). On a win, X scrolls up and the text pops briefly; on a loss, the rectangle cracks and X rolls back down to 0. It only appears on floors not yet cleared, and it can be switched off under Settings › Battle & Autoplay › Streak Counter (on by default).
Autoplay behaviour
Auto-Advance Floors
When the threshold is met and the portal opens, advance automatically (on by default). Off → keep farming the current floor. Autoplay never auto-enters boss rooms.
Stop Advancing After a Loss
Off by default. On, a lost battle switches Auto-Advance Floors off until you turn it back on — the streak reset becomes a pause, not a slide.
On Death
Stay — remain on the floor and rebuild the streak. Go Down (default) — drop one floor and continue there. A boss loss never descends: the boss room is left, not the floor.
Implementation notes
- The clear is the server’s count (server-authority run, 2026-10-22; on release since 0.89). Each credited win on an uncleared floor advances a per-floor count kept on the account, the clear is
count ≥ Wins_To_Clear, and the victory screen adopts the server’s streak / cleared / justCleared when the answer lands. The game client predicts the same numbers from its own counter so the screen never waits.
- The client’s counter resets to 0 on a loss and on a floor change. The server’s count is reset only by a credited win on another floor — a loss is never reported to it — so after a loss the next win shows the server’s figure again. The rule the game intends is the one in Clear condition; where the two disagree the server’s figure is the one that clears the floor.
- Both sides read
floors.csv; ceil(floor^0.65) is kept in code only as the fallback for a floor the sheet has not loaded.
Changelog
- 2026-11-03 — codex review (dfmc-client lane codexreview-a; D 2026-11-03 “review the codex…”). WIKI ONLY. The threshold is written down as authored data (
floors.csv Wins_To_Clear, the formula only as what floors 1–100 follow); the table reads the sheet through csv-bind; boss floors are the authored Is_Boss rows with no streak, not “every tenth”; the Streak Counter setting, Stop Advancing After a Loss and the Go Down default are listed; an Implementation notes section records the server-owned count of 2026-10-22 and how the client’s loss reset relates to it.
- 2026-09-09 — the stale “not yet implemented” marker on the Void Apex text above is flipped (D). WIKI ONLY. Verified against the data and the client:
floors.csv authors 30 wins on every Apex grind floor and winsToClear() gates the boss room on it. The Apex has been on release since 0.48 (2026-08-13); the sentence had been telling readers otherwise for four weeks. DESCRIPTIVE ONLY: no game behaviour changes.
- 2026-08-10 — the Void Apex threshold override written down. Floors 101–120 use a flat 30 wins per grind floor instead of
ceil(floor^0.65), with bosses on every even floor rather than every tenth. Rules and data live on Void Apex. Design only — no code yet.
- 2026-08-03 — the reset is now told to the player in-game (LIVE on release since 2026-08-08 (0.42)). The between-floors loading screen carries a rotating tip pool (
LOADING_TIPS, surfaced by transitTip() as the transit subtitle); its first line is "Changing floors resets your streak." The pick is stable for the life of one transit so it cannot reshuffle mid-fade. D spec 2026-08-02.
- 2026-08-03 — the floor-change streak reset written down. It was always the intent and always the behaviour, but no page said so, so it was raised as a defect (report #17) and re-proposed as work. Closed wontfix on D's ruling and documented here with the code condition, so the next reader does not have to ask again.
Wild creature levels scale with floor (floor ±3, bell-distributed), and floor equals level — so the streak threshold and the enemy levels both climb together as you ascend. Which advancement stage appears in the wild is governed per line by
advancement levels, not by floor bands.