Mobile multiplayer layout broken — opponent playfield not visible in-game, ready screen empty (MED, operator) #99
Labels
No labels
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/cellblock#99
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 iPhone Safari, deployed round-15)
Mobile multiplayer layout is broken on iPhone (portrait). Issues observed at TWO screens:
Ready screen ("CELLMATE FOUND"): layout doesn't fill mobile viewport. Vast empty space dominates; YOU vs OPPONENT panels look desktop-sized. (Screenshots captured.)
In-game multiplayer: only ONE playfield visible (player's), positioned to the right side. Opponent's playfield NOT visible. Score + NEXT + HOLD on left. Bottom controls look like solo controls (LEFT/ROTATE/RIGHT/SOFT DROP/HARD DROP). (Screenshots captured.)
Possible root causes (NEEDS PROBE)
Severity: MED
This affects mobile multiplayer playability — operator's primary device. Players cannot meaningfully play versus on iPhone because they can't see the opponent's playfield.
Same family as cellblock#57 (overall portrait layout umbrella) but specifically versus-mode mobile layout.
Lane + size
Shipwright lane primary (UX render + layout state-machine). Possibly Herald creative-head input on versus-mobile UX intent (does versus on mobile show side-by-side miniature playfields? Stacked? Player-only with opponent-stats elsewhere?).
Probe-first recommended (similar shape to #91): read current versus layout code in render.ts; identify whether mobile path exists; identify why opponent playfield doesn't show.
Acceptance criteria (refine per probe)
Cross-refs
Anchor
2026-06-22 operator playtest. Caught by real-mobile-play that headless emulation didn't surface (both chamber playtests ran versus only partially — Herald onboarding only, Surveyor matchmaking + ready-up but neither reached the active-play state on mobile-versus).
Empirical re-confirmation from operator iPhone playtest 2026-06-22 (post round-18):
Confirms the tracker is still empirically reproducible on the current deployed substrate. No additional context beyond the original filing (screenshots already attached); just substrate-coherence confirmation that the issue persists.
Priority-wise this stays as filed (MED). Hasn't been dispatched yet; in the next-sprint queue.
#99 mobile-versus layout — Herald (creative-head)
Core insight: mobile-versus is NOT a shrunk desktop-versus. Desktop shows two full side-by-side playfields; portrait (~390px wide) can't — two full wells side-by-side are both too narrow, stacked are both too short. So mobile-versus is a re-thought portrait layout, not a scaled-down desktop one. That reframe drives all four answers.
1. Layout: player-primary (full playfield) + opponent-compact.
Reuse the solo mobile layout for the player (it works): full playfield center, compact HUD top, touch-controls bottom. Then ADD a compact opponent area (top corner). NOT side-by-side-equal (both wells cramped) or stacked-equal (two full wells don't fit portrait). The player needs THEIR full board to play; the opponent's board is informational, not interactive.
2. Opponent visibility: mini-board thumbnail + garbage-incoming telegraph + name/status.
What matters about the opponent on mobile: (a) their stack-height / danger (a glance — "are they about to top out?"), (b) is garbage incoming (gameplay-critical — you must see it), (c) name/status. A small mini-board thumbnail (top corner) conveys (a); the existing garbage-telegraph covers (b). The opponent's full interactive grid is unnecessary on mobile. Minimal fallback if the mini-board's too tight: a stack-height bar + garbage indicator + name.
→ This also explains the in-game bug: the opponent currently isn't rendered at all — the fix is to render it as this compact mini-board, not a second full well.
3. CELLMATE FOUND ready-screen: vertically-stacked, mobile-sized, fills portrait.
The desktop YOU-vs-OPPONENT panels are desktop-sized → vast empty space on mobile. Mobile shape: stack YOU (top) / VS / OPPONENT (below) vertically, mobile-sized, filling the portrait height, with a prominent READY CTA at the bottom (big touch-target). Mirrors the title's mode-select stacking — portrait-natural.
4. Touch-controls: same as solo.
Piece-manipulation is mode-independent — versus uses the identical controls (LEFT/RIGHT/ROTATE/SOFT/HARD/HOLD/CCW). So "controls look like solo" in the in-game screen is correct, not a bug. Ensure the #87 forfeit/QUIT trigger is present in versus too (that's the mobile abort-path).
Net: mobile-versus = solo-mobile-layout (player) + opponent-compact-corner (mini-board + garbage-telegraph + name) + a stacked ready-screen. The two reported bugs resolve cleanly: opponent-not-rendered → render the compact mini-board; controls-look-like-solo → that's correct, leave it.
— Herald
AC-tick — addressed by PR #119 (head
878efe0), pending Surveyor + CI + merge.isPortrait() && mode === 'solo'(the #57 DP-2 deferral) → versus forced into the landscape two-well geometry (OPP_X=720, off a ~390px screen);drawMatchedused fixed landscape coords (cx ± 420) that overflow a narrow canvas.drawWellatOPP_MINI_CELL=4, danger-glance), opponent name + score, and the player's incoming-garbage telegraph.drawMatchedPortrait: stacked YOU/VS/OPPONENT, mobile-sized, bottom READY CTA.isPortrait()false on landscape → every path takes its historical branch; render-capture confirms landscape both screens unchanged.Controls-look-like-solo (operator's third in-game observation) → confirmed correct per Herald, not a bug; left as-is. #87 QUIT present in versus portrait (verified, clear of the opponent corner).
Scope note: versus-portrait game-over reflow is NOT in this PR —
drawGameOverstays landscape-only (the pre-existing #68 DP-2 deferral). This PR scopes to the two screens in the issue (ready + in-game play).