Introduce a complete Craps implementation featuring a Phaser-based UI,
deterministic game logic, and heuristic AI players.
Key changes:
- CrapsLogic.js: Pure-state rules engine handling Pass/Don't Pass, Place,
Come/Don't Come, Field bets, odds, and full resolution logic.
- CrapsAI.js: Stateless AI personalities (conservative, balanced, aggressive,
gambler) derived from player names to drive betting behavior.
- CrapsGame.js: Phaser scene with animated dice rolls, chip tray, dynamic
bet zones, portrait-based opponents, and persistence via profile API.
- Wire Craps into the game registry, main scene loader, and GameRoom dispatcher.
- Add a "Matches so far" panel to the HUD that tracks paired ranks and remaining matches.
- Introduce `animateRefill` to visually animate cards flying from the pool to an empty hand.
- Refactor turn flow to use `playRefillsThenFinish` for sequential refill animations after pairing or empty-hand draws.
- Update `GoFishLogic` to capture refill events in `lastAsk.refills` for the animation system.
- GoFish: Display animated banners when players are dealt starting pairs at the beginning of the game.
- Parchisi: Add pulsing glow and expanding ripple visual cues to indicate movable pawns.
- Parchisi: Implement click-outside dismissal for pawn selection highlights to improve interaction clarity.
- Remove Socket.IO dependency, server multiplayer logic (lobby, room management), and client-side socket service
- Replace multiplayer-only flow with single-player AI gameplay; add `OpponentSelectScene` for AI configuration
- Simplify game registry to use `minOpponents`/`maxOpponents` instead of `supportsMultiplayer`/`multiplayerOnly`
- Update game registration to remove multiplayer flags and adjust `games` table schema to hardcode `supports_multiplayer = 0`
- Remove `SOCKET_IO_CORS_ORIGIN` from environment configuration
- Update documentation to reflect single-player architecture and simplified game creation process
- Fix minor UI issues: add width to buttons in auth scenes, fix auth listener cleanup in LandingScene, restore DOM layer visibility in Modal
- Update `handleLogEffects` to accept an `onDone` callback, ensuring post-state logic (unblocking input, updating UI) only executes after visual effects complete.
- Introduce `animateForcedDraw` to display a prominent "+N" banner and animate card draws with custom timing parameters.
- Refactor `animateBatchDraw` to support configurable `flyDuration` and `stagger` via a `timing` object.
- Apply the new callback pattern across all move execution paths (`playCard`, `drawCard`, AI moves) to prevent race conditions and ensure consistent animation flow.
- Create a red "X" overlay that animates onto the portrait of a skipped opponent
- Implement `showSkipOverlay` to render the effect using Phaser DOM objects
- Trigger the overlay when a player is skipped to provide clearer visual feedback
- Add opponent emotion reactions (upset/happy) for specific game events like skips, draws, and wild card plays
- Differentiate animation durations and effects between local player and opponents
- Implement showcase animation for opponent's played cards with a grow/shrink effect
- Adjust card fly and stagger timings for opponent animations to improve visual clarity
- Add visual highlight for discard zone when card is dragged over it
- Implement logic to detect valid plays against current discard pile
- Trigger play execution (including wild color picker) when dropped on discard
- Refactor `endCardDrag` to handle both reordering and playing paths
- Add `pointermove`, `pointerup`, and `pointerdown` handlers for smooth card dragging
- Implement visual feedback including card tilt, scale, and insertion slot indicators
- Update hand array order and re-render layout upon drop completion
- Refactor hover/click logic to support both interaction modes
- Import and register UnoGame in the frontend client
- Add Uno to the game slug dispatch mapping in GameRoomScene
- Register Uno in the server game registry with card game configuration
- Use existing card sprites for target hand animations to prevent duplicates
- Respect `handFaceUp` layout setting when flipping target cards
- Calculate precise destination coordinates for drawn cards based on hand axis and index
- Simplify `animateFishDraw` signature to accept explicit destination coordinates
- Fix tween completion logic to properly trigger callbacks
- Pass live sprites from `animateAsk` to `animatePairedCards` to prevent premature destruction.
- Update `animateAsk` to fan collected cards into the asker's show zone instead of hiding them.
- Update `animatePairedCards` to accept pre-existing sprites for seamless pair animation.
- Remove `canAsk` check in `applyAsk` to ensure turn advances correctly after any ask.
Refactor the ask sequence in GoFishGame.js to introduce a visual fishing line
animation between the asker and target before revealing the result.
Key changes:
- Extract target slot/layout calculations outside conditional blocks for clarity.
- Add `animateFishingLine` method to draw a dynamic hook arc with barb that
extends from asker to target over 1 second.
- Reorganize animation timing: reveal asker's card first, then cast fishing line,
then handle catch/fail outcomes.
- Simplify catch/fail logic by unifying post-line animation flows.
- Improve visual feedback with staggered card appearances and smoother transitions.
When the local player picks a card from the scattered pool, the card is now flipped face-up in place for 700ms before flying to their hand. This provides visual feedback on the drawn card. AI draws remain hidden and fly directly to the hand.
Replace the static deck pile with a scattered pool of face-down cards in the center of the table. When a player goes fishing, the game now pauses in a 'pick' phase, allowing the local player to click a card or the AI to randomly select one. This adds visual variety and interactive gameplay to the go-fish mechanic.
- Implement round-robin card dealing animation from the pool to player hands.
- Add visual feedback for collecting pairs with card placement animations.
- Integrate fireworks particle effects when new pairs are formed.
- Update game logic to track paired cards for animation purposes.
- Improve game flow with staggered animations and delayed state updates.
- Implement Go Fish game logic in GoFishLogic.js with state management, turn handling, and pair scoring
- Create GoFishAI.js with memory-based opponent that tracks card distribution and makes strategic decisions
- Build GoFishGame.js scene with Phaser UI including card rendering, seat layouts, animations, and game flow
- Register Go Fish in gameRegistry with 'cards' category and multiplayer support (1-4 players)
- Update GameMenuScene to display 'Cards' column for card games
- Wire up GoFishGame in GameRoomScene slug dispatch and main.js scene registry
- Implement complete game logic (ChineseCheckersLogic.js) with hex board,
move generation (steps/jump chains), and rule enforcement.
- Add single-ply heuristic AI (ChineseCheckersAI.js) that prioritizes pulling
laggard pegs forward and entering the target triangle.
- Build Phaser-based UI (ChineseCheckersGame.js) with radial portraits,
animated peg moves, and turn indicators.
- Register the game in the server registry and frontend routing.
- Introduce `MusicPlayer` class for in-game music with shuffle, skip, and mute controls
- Add `MenuMusic` utility for background music in menu scenes
- Load music tracks and metadata via `music.json`
- Implement drag-and-drop for SkipBo cards with visual feedback
- Add card flight animations for Phase 10 AI actions and player draws
- Update Phase 10 AI turn timing and reduce delays for smoother gameplay
- Extract button creation and destruction into `_createStagingButtons` and `_destroyStagingButtons`.
- Ensure buttons are properly destroyed when staging is cleared, submitted, or when turn conditions change.
- Prevent memory leaks and stale UI state by centralizing button lifecycle management.
- Add piece click sound effect in Backgammon on landing.
- Remove the hardcoded "Lay Down Phase" button and `findLaydown` auto-complete.
- Add a dynamic staging area at the bottom of the screen that renders empty slots for each phase group.
- Enable drag-and-drop of hand cards into staging slots to manually build phases.
- Add "Submit Phase" and "Clear" buttons to commit or reset the staged layout.
- Implement validation using `validateLaydown` before submitting.
- Fix Button hit area coordinates to ensure reliable click detection.
- Update status text rendering with a background graphic for better visibility.
- Update `laidStart` coordinates for top, bottom, left, and right slots to reposition laid cards
- Changes aim to improve card visibility and spacing during gameplay
- Update portrait and nameLabel coordinates for top, bottom, left, and right slots to improve layout alignment
- Adjust chip positions for left and right slots to better fit the new UI design
- Add chipRotation property to left and right slot layouts to rotate phase chips appropriately
- Apply chip rotation in makeSeatChip when layout.chipRotation is defined
- Allow dragging local hand cards to discard pile or valid hit targets.
- Add visual feedback with action highlights for discard (red) and hit (gold) zones.
- Handle drag state transitions, including settling cards and animating to target.
- Support 'skip' card drag with immediate modal opening.
- Refactor drop target detection and group center calculation for reuse.
- Adjust portrait and button positions for better layout alignment.
- Implement pointer-based drag handlers for Phase10 player hand.
- Add visual feedback including card scaling, rotation tilt, shadow, and slot indicators during drag.
- Reorder hand array and animate cards to new positions on drop.
- Prevent conflicts by ending active drags during scene transitions or state updates.
- Implement pointer-based drag handlers for Phase10 player hand.
- Add visual feedback including card scaling, rotation tilt, shadow, and slot indicators during drag.
- Reorder hand array and animate cards to new positions on drop.
- Prevent conflicts by ending active drags during scene transitions or state updates.
- Introduce `Sounds.js` utility and load new audio assets (dice, cards, chips, casino).
- Play appropriate sound effects in Backgammon, Blackjack, Holdem, Parchisi, Phase10, SkipBo, and Yatzi.
- Add `background-casino.png` and `background-room.png` to PreloadScene.
- Update OpponentSelectScene with new backgrounds, styled title/subtitle pills, and improved Start/Back buttons.
- Enhance opponent selection with gradient backgrounds and shadows via `applyOpponentStyle`.
- Implement `highlightTile` for better visual feedback in option selectors.
- Randomly select a card back for card games in OpponentSelectScene.
- Add `isPlayerStuck` and `applyAutoPass` logic to SkipBoLogic.
- Handle stuck players by automatically passing their turn.
- Detect draw conditions when all players are stuck consecutively.
- Update UI to display appropriate messages for auto-passes and draws.
- Pass subtitle text to `showGameOverPanel` for clearer win/loss/draw context.
- Add pointerdown listener to clear selectedSource and highlights when clicking empty space.
- Improves UX by allowing players to easily cancel card selection.
- Shift stock, discard, hand, portrait, and label positions for 'bottom' and 'top' slots in `slotLayout`.
- Ensures elements are correctly centered and spaced on the game board.
- Update Phase10Game and SkipBoGame to use sprite textures for card backs when available, falling back to graphics drawing otherwise.
- Add outline rotation to SkipBo stock and discard piles for better visual alignment with card orientation.
- Update color palette to warm vintage tones (gold, cream, dark brown) in config.js
- Apply 'Righteous' and 'Julius Sans One' fonts across all game scenes and UI components
- Redesign Parchisi game logic: switch to counter-clockwise movement, update entry/home positions, and add bonus chip indicator
- Improve Parchisi UI: reposition dice and buttons, add turn indicator movement with callbacks, and fix AI turn timing
- Enhance LandingScene with animated logo, avatar support, and improved layout
- Update Button component with rounded corners, shadow effects, and hover states
- Add background image and main title asset loading in PreloadScene
- Extend auth service to include displayName and avatarPath in session user data
- Update CSS to match new theme and load custom fonts
- Implement core Parchisi logic (ParchisiLogic.js) including board rules,
move validation, and state management.
- Add Minimax-based AI (ParchisiAI.js) with heuristic evaluation for move
selection, supporting up to 3 AI opponents.
- Create full Phaser game scene (ParchisiGame.js) with animated board,
pawns, dice, and UI elements.
- Register new game assets (fonts, images, video animations).
- Update game registry to support 1-4 players with 3 AI opponents.
- Integrate Parchisi into the main scene loader and game room dispatch.
- Add animated betting prompts with pulsing chip buttons and text overlay
- Implement delayed start for betting animations after 5 seconds
- Refactor chip buttons to use containers for proper hit detection
- Update Button component to ensure interactive events work on all child objects
- Improve betting UI visibility management with proper show/hide states
- Add depth management for betting prompts and chip buttons
Refactors `animateSingleCard` to accept a specific card object instead of seat/index parameters, simplifying the logic for determining hand position and card index. Updates hit actions for both player and AI to animate the new card individually, revealing its face-up state at the destination upon completion. This replaces the previous bulk `renderSeatCards` call with a more granular visual update.
- Introduce BlackjackGame as a new playable game in the client
- Register Blackjack in the server game registry with updated player limits (1-5 players, 0-4 opponents)
- Wire up Blackjack in main.js and GameRoomScene for routing
- Fix OpponentSelectScene to handle games with minOpponents=0
- Remove incomplete ParchisiLogic.js implementation
- Update HoldemLogic.js: reduce blind level interval to 5 minutes, fix single-pot split logic, and apply minor formatting/whitespace changes.
- Add new ParchisiLogic.js file implementing pure game logic for the Parchisi board game, including path definition, player entry points, safe squares, and home columns.
- Add new assets: gerome.png, ethel video animations (happy/idle/upset), gerome/jeff video animations (happy/idle/upset), and update opponents.png/psd.