ScribblaZ Runbook

Use the normal Funday play route to exercise the same Svelte entry point and authoritative Nakama match that players use.

FieldValue
Play routehttps://funday.gg/play/scribblaz
Client entrygames/scribblaz/src/ScribblaZGame.svelte
Match handlergames/scribblaz/server/match_handler.ts
Runtimescribblaz_ts_match, 5 Hz
Active player range2–12

Docs: Hub · Architecture · Game design · Opcodes · Verification · Nakama Multiplayer · Games Catalog

Open the game

  1. Open https://funday.gg/play/scribblaz.
  2. Confirm that the mounted client is src/ScribblaZGame.svelte, the manifest’s configured entryPoint (funday-plugin.json:3-45).
  3. Create or join a lobby. The host needs at least two connected, ready players before REQUEST_START can begin a match (server/match_handler.ts:451-457, :1034-1041).

Stored-match rejoin

On funday:match-joined, the root stores scribblaz_matchId, assigns the controller’s match ID, and sends REQUEST_SYNC with the local canvas event count (ScribblaZGame.svelte:431-436). On mount, it reads scribblaz_matchId; if there is no initial match ID, it asks the platform to join that stored match and begins a 3-second watchdog (:520-540). Socket reconnect also requests the same resync (:456-464).

To manually check existing behavior, join a real match, reload the tab, and confirm a joined/state event returns the client to that match. The source-visible current-cycle watchdog removes an unconfirmed stored ID, enters solo free draw, and restores the saved drawing (ScribblaZGame.svelte:506-518); do not record a bogus-ID fallback as verified until it is exercised in a browser. The underlying solo fallback enters drawing with no countdown (ScribblaZController.svelte.ts:319-335).

Word-pick reconnect

  1. Use two active players and start a match.
  2. Make one player the drawer; wait for the three word choices.
  3. Reload or reconnect the drawer before choosing.
  4. Confirm the drawer sends REQUEST_SYNC with { lastStrokeIndex } after reconnect.
  5. Confirm the server answers a drawer in word_pick with GAME_STATE, settings, and the original opaque IDs plus plaintext options (server/match_handler.ts:1060-1077).
  6. Choose an option and confirm ROUND_START moves the match to drawing.

The re-send branch is visible in the current handler. Treat the end-to-end “picker remains visible” interaction as pending until this exercise is captured.

Low-player lobby reset

  1. Start a two-player match and reach drawing.
  2. Disconnect the non-drawer.
  3. Expect one system chat message: Not enough players — returning to lobby.
  4. Confirm the phase becomes waiting, readiness resets, and the remaining host can ready/start again with another player.

The server code contains this quorum branch before the drawer-disconnect end-round path (server/match_handler.ts:933-954). Its real-match proof remains pending.

On ROUND_END, the root’s current source privately saves the drawer’s structured canvas events with { word, drawerName, lines, isPublic: false } (ScribblaZGame.svelte:178-187). The server RPC writes public drawings to the system gallery owner and scribblaz_get_gallery lists that owner (server/rpc.ts:3-69).

The explicit Publish action and Public Gallery overlay are current-cycle presentation work. Verify them as follows:

  1. Finish a round as the drawer and inspect the private save request for isPublic: false.
  2. Select Publish once; inspect one public save request with isPublic: true.
  3. Open Public Gallery; verify loading, empty, error/retry, and populated states.
  4. Verify thumbnail keyboard activation with Enter and Space.

Do not claim this UI flow as production-verified until it passes in the play route.

Source-only checks

Use Opcodes to compare wire payloads with the match handler. Use Verification to mark manual evidence, rather than treating source presence as live-service proof.

Ask Docs

AI assistant to help answer questions about the documentation. Answers are read-only and cite docs/source.

Hi! How can I help you with the documentation today? Answers are read-only and cite docs/source.

Ctrl+Enter to send