Game runs during countdown-in phase — pieces controllable before BREAK! (gameplay correctness) #110
Labels
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/cellblock#110
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Behavior (operator playtest 2026-06-22, deployed round-18)
During the "Lockdown... BREAK!" countdown-in phase before a game starts, the pieces are already active and the player can control them (move, rotate, drop). The game effectively runs during what should be a pre-game-start freeze period.
Severity: substantive
Gameplay-correctness bug. The countdown phase exists specifically to give the player a moment to focus before the game starts; if pieces are already active, the countdown serves no functional purpose and may give players whose reaction time aligns with the countdown an unintended advantage in versus mode.
Fix-direction (Shipwright lane)
Probe-first: locate the game-tick / input-dispatch handler; identify which phase guard determines "is the player allowed to control pieces"; ensure that guard returns false during countdown-in phase.
Likely options:
state.phase === 'playing'(NOT 'countdown' or similar)Acceptance criteria
Cross-refs
Anchor
2026-06-22 operator playtest of round-18. Discovered during multi-AC verification session.
AC-tick (pre-merge — PR #112)
Per the close-keyword ruling: this issue closes via
Closes #110in PR #112, with the AC2(b) server-side portion explicitly deferred to #111 (the architectural split surfaced by the probe — the countdown is a client-local cosmetic overlay; server-backed gravity is engine-room polish).'countdown'phase is never server-emitted (verifiednet.tsmatched→playing+server/grep +proto.ts); the overlay is the client-localcountdownStarttimer.inCountdown()(keyboard game-input, touchdispatchGameAction,softDropTick, mock gravity tick).?mock-solo (mock-tick gated → complete freeze). Server-backed gravity-hold deferred to #111 (Engineer engine-room). Honest ceiling: for real play (solo #38 + versus) server gravity still advances ~2-3 rows during the 3s window until #111 lands.COUNTDOWN_MS(the overlay-end ≡ input-unlock single-source-of-truth bound); verified by the positive-control test half.!inCountdown()guard → locked-input assertion reds) with a negative half + positive control +countdownLockprecondition guard.Reported harm (the unfair input head-start) is closed by PR #112; #111 carries the deferred server-side tick-freeze to actual closure.