Commit Graph

122 Commits

Author SHA1 Message Date
Brian Fertig 57eeb3bfee feat: add Word Search game and improve solo game flow
- Integrate Word Search game into client and server registries
- Add API endpoints for puzzle generation and theme listing
- Update GameMenuScene to skip opponent selection and stop menu music for solo-only games
2026-05-29 08:21:48 -06:00
Brian Fertig 47885bab01 Game updates 2026-05-28 21:01:28 -06:00
Brian Fertig 371724dc84 feat: add Ghost word game with server-side AI and skill profiles
- Implement client and server logic for Ghost game (`GhostGame`, `GhostLogic`, `GhostAI`, `ghostEngine`).
- Add perfect-play search and 5-tier skill system to the server-side dictionary engine.
- Register Ghost in the game registry and route it through `GameRoomScene`.
- Add `playIntro` option to `Portrait.js` and `skipIntro` to Wordle to control intro speeches on round restarts.
- Improve Scrabble rack reordering layout and gap handling during drag-and-drop.
- Expose Ghost API endpoints (`/ghost/judge`, `/ghost/ai-move`) in `wordRoutes.js`.
2026-05-28 19:05:36 -06:00
Brian Fertig dd384d6c15 New music tracks 2026-05-28 00:02:32 -06:00
Brian Fertig 95ff6f8de2 feat: add Scrabble game with client-server AI and Phaser UI
- Implement `ScrabbleGame` scene with drag-and-drop, rack management, and animated tile placement.
- Add pure JS modules for Scrabble rules, scoring, and tile data (`ScrabbleLogic`, `ScrabbleTiles`).
- Create server-side dictionary trie and DFS-based move generator for AI (`scrabbleEngine`).
- Register game routes for move validation and AI move requests (`wordRoutes`).
- Update game registry, opponent selection, and preload scenes to support Scrabble.
- Include custom font (`YummyCupcakes`) for the scorepad UI.
2026-05-27 23:54:02 -06:00
Brian Fertig 17133787c1 refine wordle AI balance, add Catan tutorial, fix opponent select layout, enable word category
- Adjust Wordle AI skill profiles to lower win rates and increase blunder chances for better difficulty curve
- Center Wordle player portrait vertically with the playfield
- Add Steve's humorous tutorial for Settlers of Catan (markdown + assets)
- Update OpponentSelectScene to hide playfield options for word games and adjust scroll height
- Fix migration script to temporarily disable foreign keys to allow schema changes
- Add migration to extend games.category to include 'word'
2026-05-27 23:22:15 -06:00
Brian Fertig 690d05b28d feat: add Wordle game support and word routes
- Register Wordle game in server registry under 'word' category
- Add `/api/words` API routes
- Update client to integrate WordleGame scene
- Adjust game menu layout to accommodate a new 'Word' category column
- Enable skill controls and game room dispatch for Wordle
2026-05-27 21:14:31 -06:00
Brian Fertig 33bbeff79b feat: enhance card animations and improve icon row fitting
- Add `_animPurchaseShowcase` for a dramatic card reveal with a dark overlay and animated comet border effect
- Refactor purchase and gain flows to use the new showcase animation before flying the card to its destination
- Update `addIconRow` to accept a width constraint, dynamically scale text/tokens, and fallback to colored bars when space is too limited
2026-05-27 19:33:30 -06:00
Brian Fertig ca38548700 feat(dominion): add animated deck/discard counters and refine turn SFX
- Track deck/discard pile counts during animations for real-time UI updates
- Implement animated discard pile countdown when shuffling
- Dynamically show/hide deck and discard piles based on animation state
- Replace generic card SFX with specific sounds for buying treasures, purchasing, and dealing
- Update Dominion card assets to align with new UI/audio feedback
2026-05-27 18:53:30 -06:00
Brian Fertig 0536a261f6 feat(dominion): add sparkle particles and coin sound to supply piles
- Add a particle emitter effect to supply pile cards using a generated sparkle texture.
- Include a `coins.mp3` sound effect for purchase interactions.
- Implement `_clearSupplyFx` to manage emitter lifecycle during render cycles.
2026-05-27 17:58:58 -06:00
Brian Fertig 41466e14f3 feat(dominion): add animated comet trails to playable hand cards
- Implement a visual effect using Phaser Graphics to draw animated "comet" trails along the perimeter of playable action and treasure cards.
- Add `perimPoint` helper to calculate coordinates along a rectangle's perimeter.
- Manage particle graphics and tweens via new `_handFxGraphics` and `_handFxTweens` arrays, ensuring proper cleanup during render cycles.
- Replace simple face highlighting with the new `_buildHandFxItem` method for enhanced visual feedback.
2026-05-27 17:32:58 -06:00
Brian Fertig 285d992915 ```
feat(dominion): add recommended kingdom presets and update deck mode UI

- Introduce four new recommended kingdom decks from the 2nd-edition rulebook: Size Distortion, Deck Top, Silver & Gold, and Helpful Actions.
- Refactor `kingdomFor` to use a `KINGDOM_PRESETS` mapping for cleaner extensibility.
- Update the Opponent Select Scene UI to display all deck mode options in a 3-column grid layout.
```
2026-05-27 17:29:11 -06:00
Brian Fertig 71d279c835 feat: add Checkers and Chess games with AI opponents and improve Dominion UX
- Implement Checkers and Chess with complete Phaser UI, pure logic modules, and alpha-beta minimax AI opponents featuring a 1-5 skill model.
- Extend opponent skill selector to support Checkers and Chess.
- Register new games in frontend routing and backend registry.
- Improve Dominion game UX: add persistent phase dials and turn arrow indicators, add confirmation prompts for ending actions/turns, and refine card animation timings.
- Update Dominion card asset files.
2026-05-26 23:52:05 -06:00
Brian Fertig 97d748b2f5 feat(dominion): add hand drag-and-drop and AI opponent animations
- Implement drag-and-drop reordering for the player's hand with a visual play drop zone.
- Add smooth, multi-phase animations for AI opponents (play, draw, cleanup, gain).
- Refactor hand rendering to preserve manual order and improve playability highlighting.
- Update card draw animations to target existing sprite coordinates directly.
2026-05-26 20:50:21 -06:00
Brian Fertig 7e3c7d8e3d feat(dominion): enhance discard pile UI and improve card animation flow
- Add visual discard pile with card sprite and count badge
- Center action buttons and remove redundant Play Treasures button
- Track in-play cards for accurate animation source positions
- Refactor `setState` to handle discard, gain, and draw animations sequentially
- Add multi-phase discard animation (fly face-up, fold, unfold face-down)
- Add gain card animation to deck or discard pile
- Improve animation queue handling with `_animating` and `_pendingAnimState`
2026-05-26 20:22:08 -06:00
Brian Fertig e6db79afbb feat(dominion): display opponent hand cards near portraits
- Add face-down mini card sprites for opponents below their portraits
- Implement layout logic to center and space cards based on hand size
- Update card asset textures
2026-05-26 19:50:53 -06:00
Brian Fertig 1196d3ba5b refactor(dominion): redesign card hover popup to show card face
- Replace text-only tooltip with a visual card preview popup
- Add background graphics and proper layout for card face and rules text
- Update popup dimensions and positioning logic
2026-05-26 19:12:39 -06:00
Brian Fertig c264cd9419 ```
feat(dominion): add card draw animations and visual deck pile

- Implement animation system for drawing cards from deck to hand
- Add input blocking and state queuing during animations to prevent race conditions
- Replace text-only deck counter with a visual card pile and count badge
- Support face-down card rendering for animation start positions
- Ensure all human actions respect animation state
```
2026-05-26 19:03:27 -06:00
Brian Fertig fccd8722c8 Merge branch 'new_opponents' into dominion 2026-05-25 22:13:42 -06:00
Brian Fertig 4b730f6127 feat: add Balam and Steve to opponents.json
- Introduce Balam (spriteIndex 16) and Steve (spriteIndex 17) as new opponents
- Include full speech configurations (intro, happy, upset, pick) for both characters
2026-05-25 22:10:05 -06:00
Brian Fertig 1fd5855ac7 fix(dominion): adjust UI layout and label formatting
- Relocate prompt banner and buttons downward (Y: 500→720, 560→825)
- Replace card suit emoji with text 'C' in value labels
- Update `promptButton` call to pass label string directly instead of a function placeholder
2026-05-25 21:27:43 -06:00
Brian Fertig 249b01fd45 Update opponents image assets (PNG and PSD) 2026-05-25 21:06:34 -06:00
Brian Fertig 5a4f8a1204 feat: add Dominion card game with AI and full UI
- Implement pure state engine (`DominionLogic.js`) with turn lifecycle, card effects queue, and pending decision resolution for complex interactions.
- Add card definitions and kingdom pool (`DominionCards.js`) supporting Standard and Random deck modes.
- Create AI logic (`DominionAI.js`) using Big Money/early engine strategies scaled by opponent skill.
- Build Phaser scene (`DominionGame.js`) with supply/hand rendering, turn drivers, modal prompts for pending decisions, and end-game scoring.
- Wire up game registry, routing, preload assets, and opponent selection UI to support the new mode.
2026-05-25 17:27:24 -06:00
Brian Fertig 0f347e3502 Added two new opponents: Michael and Kona 2026-05-25 14:57:11 -06:00
Brian Fertig 78466530a3 feat: add Baccarat casino game with AI opponents and cinematic reveals
- Implement core game logic in BaccaratLogic.js including shoe management,
  hand evaluation, and betting resolution with standard rules (5% banker
  commission, 8-to-1 tie payout).
- Create BaccaratGame.js Phaser scene with full UI: betting panel, chip
  selection, seat portraits, and animated card dealing.
- Add BaccaratAI.js for opponent bet sizing and type selection (weighted
  toward Banker).
- Introduce "Equation Ribbon" reveal sequence that walks through each card's
  value, sums them, and performs a mod-10 reduction with visual flair.
- Register Baccarat in the server game registry and frontend scene dispatch.
2026-05-25 14:15:53 -06:00
Brian Fertig e46cd1cc2f feat(bingo): add countdown timer, opponent match flash, and fullscreen fix
- Add a 10-second countdown timer between ball draws with a dedicated UI overlay
- Implement visual flash effect on opponent panels when their cards match the called number
- Play happy emotion animation on opponent portraits during matches
- Replace CASINO_WIN/LOSE sounds with CASINO_BLACKJACK for win/loss events
- Fix fullscreen toggle to properly handle exitFullscreen and requestFullscreen
- Add new video assets for opponent emotions (happy, idle, upset)
2026-05-25 13:21:26 -06:00
Brian Fertig 3022e0eb23 fix: play casino win sound on successful bingo mark
- Replace `playChipBet` with `playSound(this, SFX.CASINO_WIN)`
- Provides appropriate audio feedback when a human player successfully marks a square
2026-05-25 11:41:34 -06:00
Brian Fertig e1f7534853 feat: add bingo ball spinning sound effect
- Add `sfx-bingo-balls` audio asset and load it in PreloadScene
- Register `BINGO_BALLS` sound in the SFX constants
- Play the sound when the bingo ball spinning animation starts
2026-05-25 11:30:58 -06:00
Brian Fertig 3b113a1092 refactor: resize and reposition mini bingo card background
- Reduce mini card dimensions from 125x125 to 90x90 pixels
- Adjust positioning coordinates from (px+54.5, py+34.5) to (px+28, py+8)
- Improves visual alignment and spacing of opponent's bingo card in the UI
2026-05-25 11:19:25 -06:00
Brian Fertig 57c9d85864 fix(bingo): adjust visual styling and formatting
- Update player card background border radius from 5 to 15 for smoother corners
- Change called numbers board background color from cream to black for better contrast
- Remove unnecessary whitespace in `init()` and physics calculation lines (code cleanup)
2026-05-25 11:05:53 -06:00
Brian Fertig ebe387f5fe feat(bingo): add cream-colored backgrounds to game UI elements
- Add cream white background behind the player's bingo card
- Add cream white background behind opponent mini-cards
- Add cream white background behind the called numbers board
- Adjust player card header position (HEADER_Y, ROW0_Y) to accommodate new layout
2026-05-25 11:02:34 -06:00
Brian Fertig 166da6fd0d Narrow master called-numbers board columns
- Reduce column step width from 90px to 58px
- Reduce cell width from 84px to 44px
- Keeps cell height unchanged at 44px
2026-05-25 10:48:07 -06:00
Brian Fertig 00e6607a48 Adjust Bingo game layout positioning
- Move human card header up by 20px (HEADER_Y: 140 -> 120)
- Shift master called-numbers board letters left by 30px (CB_LETTER_X: 540 -> 510)
2026-05-25 10:44:35 -06:00
Brian Fertig 91dac1f2e3 feat: add Bingo game with AI opponents and physics-based drum
Introduce a new Bingo game featuring a physics-driven drum with Matter.js,
AI opponents that auto-daub and claim wins with suspenseful delays, and a
"claim race" mechanic where the human can beat AI to the punch. Includes
complete game logic, UI components (drum, card, opponent panels, called
numbers board), and server registration for the new game slug.
2026-05-25 10:38:08 -06:00
Brian Fertig 6508a80c94 feat(catan): enhance AI expansion logic and polish game visuals
- Improve Catan AI to evaluate 1-hop lookahead nodes and prioritize bridge connections for better road expansion.
- Add visual feedback for opponent Monopoly plays (resource text + fireworks).
- Redesign game-over screen with dynamic winner portraits (video for AI, avatar fallback for human) and fireworks.
- Add eliminated player panel in Hold'em with animated portrait transitions.
- Export `longestRoadFor` for use in AI logic.
2026-05-25 09:46:27 -06:00
Brian Fertig 0b2657b954 feat: add Jerry character with speech assets and fix seat order logic
- Add 12 new MP3 speech files for Jerry (intro, happy, upset, pick)
- Update opponents.json to include Jerry's speech configuration
- Fix HoldemLogic to exclude folded players from seat order calculation
2026-05-25 00:08:52 -06:00
Brian Fertig a05d8b6c96 feat(holdem): support up to 7 AI opponents with dynamic elliptical seating
- Update Holdem game configuration to allow 3-7 AI opponents (previously fixed at 3)
- Implement dynamic seat layout using an elliptical distribution for balanced positioning
- Add computeSeatLayout() to calculate positions based on opponent count, with special handling for side/diagonal corners
- Adjust portrait, card, and UI element positioning to adapt to different table sizes
- Update AI personality definitions to include 7 distinct profiles with varied aggression/bluff rates
- Modify AI decision logic to limp more frequently in unraised preflop scenarios
- Update hand summary modal to scale rows dynamically to fit 7+ players
- Update server game registry to reflect new max opponent count
2026-05-24 23:37:09 -06:00
Brian Fertig 24a48c13eb Added new opponents. Fixed styling issues. 2026-05-24 21:19:30 -06:00
Brian Fertig e7827cec05 fix: render action callouts as DOM elements to overlay opponent videos
- Switch `animateActionText` from Phaser text to DOM container to ensure it renders above opponent portrait videos (which are DOM-based and thus always on top of the Phaser canvas)
- Apply text-shadow via inline CSS for better cross-browser compatibility with DOM text
- Increase depth to `D.modal + 100` to guarantee visibility over all other layers
2026-05-24 16:26:17 -06:00
Brian Fertig 02d10faa2d feat: overhaul player turn order and add action callouts
- Replace left-to-right seat processing with clockwise PLAY_ORDER starting top-right
- Animate deal sequence to follow the new play order
- Add pulsing highlight ring for active player's portrait
- Show large animated action callouts (Hit/Stand/Double/Split) between player and cards
- Position action buttons dynamically relative to the active player's portrait
- Update result reveal order to match clockwise play order
- Move betting UI panel and adjust button depths for proper layering
- Remove unused `nextActiveSeat` import in favor of `nextPlaySeat` method
2026-05-24 16:21:44 -06:00
Brian Fertig 349d2736c9 Changed rotation on text 2026-05-24 15:48:30 -06:00
Brian Fertig b2ef3cecf7 ```text
feat(blackjack): expand player capacity to 7 and improve table visuals

- Increase maximum players from 5 to 7 (6 opponents) by updating seat positions, logic loops, and server registry.
- Add traditional felt table markings including curved text for rules ("Blackjack pays 3 to 2", "Insurance pays 2 to 1") and card/bet spot outlines.
- Refactor seat label rendering to use a consistent centered layout under portraits.
- Adjust bet circle positioning logic for the new seat layout.
```
2026-05-24 15:46:36 -06:00
Brian Fertig 1a7decfa0e feat(catan): enhance AI trading logic and add UI tooltips/fullscreen support
- Implement intelligent AI trade initiation (proposeTrade) and response logic (respondToTrade) that adjusts willingness based on the requester's victory points.
- Add hover tooltips for harbors, Longest Road, and Largest Army cards to improve user understanding of game mechanics.
- Add a generic info tooltip system for UI elements.
- Add fullscreen toggle button to Landing and Game Menu scenes.
- Fix AI trade animation and status messages for better feedback.
2026-05-24 15:15:51 -06:00
Brian Fertig 4198dd5757 feat(catan): add animated special cards and opponent dev card reveals
- Implement visual tracking for Longest Road and Largest Army cards with
  smooth transfer animations between players and the central display.
- Add audio feedback for special card ownership changes and opponent dev card plays.
- Display opponent development card details with a zoom-in animation when played.
- Update opponent panels to remove special card badges in favor of the new visual system.
- Add necessary spritesheet and audio assets to the preload scene.
- Minor fix to restore dice state in Parchisi logic after three-doubles penalty.
2026-05-24 12:53:38 -06:00
Brian Fertig c2fb49706f Added Favicons 2026-05-24 11:18:57 -06:00
Brian Fertig 307f3b7123 feat(games): implement configurable match size for Go Fish and enhance Nerts UI
- Go Fish: Add support for 2-card and 4-card match variants.
  - Update `GoFishGame` and `GoFishLogic` to use a configurable `matchSize` (default 4).
  - Add UI toggle in `OpponentSelectScene` to select match variant.
  - Update labels and logic to reflect 'Books' (4-card) vs 'Pairs' (2-card).
- Nerts: Improve AI and UI responsiveness.
  - Add 'Last Move' timer panel with Shuffle (60s) and Resign (90s) buttons.
  - Implement foundation cooldowns to prevent rapid-fire AI moves.
  - Add dynamic layout for foundations and opponent panels based on player count.
  - Show opponent Nerts, stock, and waste cards in opponent panels.
  - Add `reshuffleAllStocks` utility in `NertsLogic`.
2026-05-24 11:02:06 -06:00
Brian Fertig 7e022e8e9b Added Nerts 2026-05-24 00:50:46 -06:00
Brian Fertig f9e80eaedc fix(catan): improve AI resource management by prioritizing settlements over roads
The AI now waits to build a road until no settlement spots are immediately reachable. This prevents wasting resources on roads when a settlement could be built, ensuring more efficient resource accumulation for higher-cost structures.
2026-05-23 17:44:55 -06:00
Brian Fertig 58c4edf8fd feat(catan): add visual and audio feedback for card theft by robber
- Detect when the robber steals a resource from player 0 by comparing resource counts before and after the move.
- Display a temporary "CARD STOLEN" banner with the stolen resource name and robber's name.
- Play a lose sound effect to provide immediate audio feedback.
- Apply this notification logic consistently across all three locations where the robber is moved (AI turn, player turn, and initial setup).
2026-05-23 17:34:55 -06:00
Brian Fertig 67500636cb Played happy video and audio when purchasing a city or settlement 2026-05-23 17:28:14 -06:00