Skip to content

feat(pacing): soft floor-readiness guidance — answer "how much Tetris?" - #21

Merged
FiddlyDigital merged 1 commit into
mainfrom
floorreadiness
Jul 28, 2026
Merged

feat(pacing): soft floor-readiness guidance — answer "how much Tetris?"#21
FiddlyDigital merged 1 commit into
mainfrom
floorreadiness

Conversation

@FiddlyDigital

Copy link
Copy Markdown
Owner

Players had no signal for how long to build a floor before descending. Add
advisory (never gating) guidance that scales with depth.

  • Each non-boss floor has a readiness target: baseTarget + (level-1)*perLevel
    blocks (all knobs in balance.json's new floorReadiness block). Later floors
    ask for more Tetris, so play naturally lengthens as the run deepens.

  • The HUD floor dial leads with readiness: "building 6/15" → a glowing "ripe"
    once the floor is built out → "linger" past target*lingerMult. One-time
    toasts fire at ripe ("descend when you are ready") and lingering ("the rift
    grows restless").

  • Descent stays entirely player-driven — the stairs are never locked.

  • Each descent banks a pieces/target pacing sample (non-boss floors only,
    stack-collapses count as staying to the limit). The seanchai in the mound
    reads the run's average and comments: leaving too soon, lingering too long,
    or judging it well (seanchaiEarlyRatio / seanchaiLateRatio).

  • balance.json + schema + balance.ts: floorReadiness block

  • types.ts: UIState.floorProgress.readiness

  • game.ts: readiness target/ceiling, ripe/linger detection, dial state,
    recordFloorPacing on both descent paths, pacingAdvice, per-floor reset

  • ui.ts + style.css: readiness dial segment (build/ripe/linger)

  • npcEncounters.ts: seanchai pacing line in the "your tale" recount

  • tests: target scaling, dial states, gating, ripe toast once, pacing tally,
    seanchai verdict bands

  • README: new "Floor readiness" system row

Pacing state (pacingRatioSum/Samples) round-trips through save/resume via the
generic scalar sweep. Verified live: the dial renders building/ripe/lingering
with no page errors.

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01V6kP5vUAcNbxLK5EnPKAhv

Players had no signal for how long to build a floor before descending. Add
advisory (never gating) guidance that scales with depth.

- Each non-boss floor has a readiness target: baseTarget + (level-1)*perLevel
  blocks (all knobs in balance.json's new floorReadiness block). Later floors
  ask for more Tetris, so play naturally lengthens as the run deepens.
- The HUD floor dial leads with readiness: "building 6/15" → a glowing "ripe"
  once the floor is built out → "linger" past target*lingerMult. One-time
  toasts fire at ripe ("descend when you are ready") and lingering ("the rift
  grows restless").
- Descent stays entirely player-driven — the stairs are never locked.
- Each descent banks a pieces/target pacing sample (non-boss floors only,
  stack-collapses count as staying to the limit). The seanchai in the mound
  reads the run's average and comments: leaving too soon, lingering too long,
  or judging it well (seanchaiEarlyRatio / seanchaiLateRatio).

- balance.json + schema + balance.ts: floorReadiness block
- types.ts: UIState.floorProgress.readiness
- game.ts: readiness target/ceiling, ripe/linger detection, dial state,
  recordFloorPacing on both descent paths, pacingAdvice, per-floor reset
- ui.ts + style.css: readiness dial segment (build/ripe/linger)
- npcEncounters.ts: seanchai pacing line in the "your tale" recount
- tests: target scaling, dial states, gating, ripe toast once, pacing tally,
  seanchai verdict bands
- README: new "Floor readiness" system row

Pacing state (pacingRatioSum/Samples) round-trips through save/resume via the
generic scalar sweep. Verified live: the dial renders building/ripe/lingering
with no page errors.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V6kP5vUAcNbxLK5EnPKAhv
@FiddlyDigital
FiddlyDigital merged commit a196da5 into main Jul 28, 2026
1 check passed
@FiddlyDigital
FiddlyDigital deleted the floorreadiness branch July 28, 2026 20:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants