-
Mahmoud Aglan authored
- Eliminate double polling: removed game.js own poller, use match-session's single 2s poll via handleLivePollData callback (halves network requests) - Send last_move (from/to/san/promotion) in game_state so opponent gets exact move data — fixes castling, en passant, promotion animations - Opponent moves now animate (piece slides) instead of board snap - Capture particles now fire on opponent's captures too - Castling sound+haptic plays for opponent's castles - Draw flow: sender sees "sent" confirmation, receiver sees accept/deny dialog (30s timeout), both sides see result via game_state merge - Emote dedup: timestamp tracking prevents repeated display on same emote - Emotes use correct emoji lookup (getEmojiForKey) instead of 3 hardcoded - Polling runs even during player's turn (emotes + draws must arrive anytime) - Game end detection covers draw result ('draw' + 'aborted') Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
ed1fc3ce