diff --git a/panel/src/lib/useGameRoom.ts b/panel/src/lib/useGameRoom.ts index 1941ebe..b9aef8e 100644 --- a/panel/src/lib/useGameRoom.ts +++ b/panel/src/lib/useGameRoom.ts @@ -60,6 +60,7 @@ export function useGameRoom(roomId: string, userId: string, role?: string, prefe break; case "GAME_STATE": + // Authoritative player view — sent directly to this player setState(prev => ({ ...prev, gameState: msg.state, @@ -68,11 +69,18 @@ export function useGameRoom(roomId: string, userId: string, role?: string, prefe break; case "GAME_STARTED": - setState(prev => ({ ...prev, gameState: msg.state, roomStatus: "playing" })); + // Broadcast with spectator view — only use for state if we're a spectator + // (players get their own GAME_STATE via direct send) + setState(prev => ({ + ...prev, + gameState: prev.isSpectator ? msg.state : prev.gameState, + roomStatus: "playing", + })); break; case "GAME_UPDATE": - setState(prev => ({ ...prev, gameState: msg.state })); + // Broadcast with spectator view — only update state for spectators + setState(prev => prev.isSpectator ? { ...prev, gameState: msg.state } : prev); break; case "PLAYER_JOINED":