Commit Graph

232 Commits

Author SHA1 Message Date
Brian Fertig 082007ac81 Added Speech for Beth and Blackwind 2026-06-09 20:43:51 -06:00
Brian Fertig 85f0079b2c feat: overhaul Pudding Monsters scoring and add opponent videos
- Replace star collection with target-square coverage for Pudding Monsters
- New 3-star medal system: min(targets covered, par-based efficiency)
- Add "Reset Progress" buttons to Pudding Monsters and Rush Hour level select
- Add reset API endpoint for puzzle progress
- Add Beth and Blackwind opponents with idle/happy/upset animations
- Update puddingmonsters.json levels with target squares instead of stars
2026-06-08 22:24:12 -06:00
Brian Fertig ea44758f7d feat: add Jell-o Monsters (Pudding Monsters) slide-and-merge puzzle game
Introduce a new single-player logic puzzle game where players flick jelly
blobs across a grid to slide and merge them into a single monster.

- PuddingMonstersLogic.js: pure slide-and-merge model with BFS solver,
  no Phaser/DOM dependencies; shared by client and generator
- PuddingMonstersGame.js: Phaser scene with drag-to-flick, arrow keys,
  undo/reset/hint, par tracking, star collection, death on spikes
- genPuddingMonsters.js: offline level generator using seeded RNG and
  BFS solver; produces 40 levels across 5 difficulty tiers
- puddingmonsters.json: generated level data (40 levels, 5–7 grid sizes)
- Update main.js, GameRoomScene.js, PreloadScene.js, registry.js to
  wire the new game into the app
- Update game-icons assets
2026-06-08 21:58:28 -06:00
Brian Fertig 147ef4b89b feat: add Hexsweeper logic game
- Register Hexsweeper game in server registry with icon frame 52
- Add HexsweeperGame import and scene configuration in main.js
- Add hexsweeper slug mapping in GameRoomScene.js
- Update game-icons sprite sheet with new icon
2026-06-08 19:09:40 -06:00
Brian Fertig c01027e6c5 style: stack Rush Hour buttons vertically on the left side
- Move Undo, Reset, Hint, and Levels buttons from horizontal bottom layout
  to a vertical stack centered on the left side of the screen
- Calculate button positions dynamically based on total height and gap
- Improve usability by grouping controls alongside the playfield
2026-06-08 18:32:50 -06:00
Brian Fertig 58f72e3d91 refactor: restructure game menu with two-row tab layout
- Split category tabs into two rows: row 1 (tabletop, cards, casino, word),
  row 2 (logic) for better screen real estate
- Move title text and adjust vertical positioning to accommodate tabs
- Center row 2 tabs independently based on active categories
- Update game grid top position to 370px for proper spacing
- Update game-icons and tab-icons assets for new layout
2026-06-08 18:26:42 -06:00
Brian Fertig 3d3d09a9fb feat: add Rush Hour puzzle game with logic category
- Register Rush Hour game in server registry (logic category, single-player)
- Add "Logic & Puzzle" tab to game menu
- Integrate RushHourGame scene in client-side main.js and GameRoomScene
- Load rushhour.json game data in PreloadScene
- Add puzzle API routes for server-side puzzle management
- Configure tab icon frame for new logic category
2026-06-08 17:57:24 -06:00
Brian Fertig 684f5ed7b2 feat(monopoly): add complete trade system with AI evaluation and drag-and-drop UI
- Add trade logic to MonopolyLogic: isTradeable, validateTrade, applyTrade
  - Properties with buildings (or in groups with buildings) cannot be traded
  - Validates ownership, cash affordability, and player activity
  - Handles two-way cash flows and property ownership transfers

- Add AI trade evaluation to MonopolyAI: evaluateTrade
  - Scores offers based on cash delta, asset value, group control changes
  - Detects set completions and control crossings (past 50%)
  - Vets breaking up completed monopolies
  - Applies skill-based thresholds and randomness
  - Returns acceptance decision with human-readable reason

- Add trade modal UI to MonopolyGame
  - Three-column layout: your properties, give/get lanes, opponent properties
  - Drag-and-drop property cards into trade lanes
  - Cash steppers for adding/requesting cash
  - Opponent tabs to switch counterparty
  - Hover cards for detailed property info
  - Visual feedback: pulsing hints when offer is empty, accept/reject messages
  - "Initiate Trade" button in end-turn menu
2026-06-08 16:43:54 -06:00
Brian Fertig ae2f3246dc feat: enhance Monopoly dice animations and player panel layout
- Add realistic dice throw animation with quadratic bezier arcs
- Implement perspective scaling and spin during dice animation
- Add impact bounce effect when dice land
- Randomize dice landing positions and angles for natural appearance
- Increase player portrait size and adjust panel layout for better readability
- Improve cash display font size and spacing in player panels
- Track dice positions and angles for consistent rendering between turns
2026-06-07 21:14:11 -06:00
Brian Fertig 4fbc868305 feat: add Freecell card game and improve Triominoes tile visibility
- Register Freecell game in server registry with card game configuration
- Import and configure FreecellGame in main.js and GameRoomScene
- Update game-icons sprite sheet with new icon frame for Freecell
- Fix Triominoes to dim all tiles when no legal moves are available
2026-06-07 20:31:46 -06:00
Brian Fertig 74d5470d11 **feat(triominoes): animate drawn tiles from pool to player portrait**
Add `animateDrawTile()` to tween a face-down triangle from the pool area to the drawing player's portrait over 1.2 seconds. Integrates the animation into both the human draw flow (`onPoolClick`) and the AI draw loop (`runAITurn`), ensuring visual feedback before the game state updates and the hand refreshes.
2026-06-07 19:05:04 -06:00
Brian Fertig a231d821ca **feat: add Tri-Ominoes game with AI opponents**
Introduce Tri-Ominoes, a triangular grid tile-placement game for 2–4 players. The implementation includes a pure rules engine (`TriominoesLogic`), triangular grid geometry and data (`TriominoesData`), a Phaser scene (`TriominoesGame`), and a heuristic AI with 5 skill levels (`TriominoesAI`).

Key features:
- Corner-matching tile placement on an equilateral triangular grid
- Scoring with pip sums, hexagon-closing bonuses, and going-out rewards
- Draw-from-pool and pass mechanics with forced pass when blocked
- Animated AI tile placement from opponent portraits
- Board panning and re-centering for large play areas
- Game-over modal with final scores and history posting

Also updates the game registry, scene dispatch, opponent select skill controls, and adds two new character portraits (beth, blackwind).
2026-06-07 18:59:57 -06:00
Brian Fertig 40a0f3235a Update to DB 2026-06-07 17:28:48 -06:00
Brian Fertig 1a7dcfe9a3 Moved Farkle to Cards and Dice 2026-06-07 17:26:50 -06:00
Brian Fertig c8dc0a05e0 feat(monopoly): add sound effects for payment and pawn animations
- Play sfx-monopoly-pay when rent/payment animation begins
- Play sfx-piece-click when pawn/token hop animation completes
- Load new audio asset and register in SFX constants
2026-06-07 17:17:22 -06:00
Brian Fertig 359740f4f7 feat(monopoly): add card deck visuals and rent/card animations
- Draw Chance and Community Chest card decks on the board center
- Add animated card draw with flip effect from deck position
- Add animated rent payment with money flying between players
- Integrate new Monopoly sound effects (purchase, expense, paid)
- Extract applyRent() to MonopolyLogic for cleaner state handling
- Update monopoly-cards spritesheet with new card art
2026-06-07 16:32:12 -06:00
Brian Fertig 0317d1c14f Fix video overlay 2026-06-07 15:23:53 -06:00
Brian Fertig e5c1021322 Purchase property routine 2026-06-07 15:15:16 -06:00
Brian Fertig 77e334e192 fix: outward pawn hop animation on bottom row
- Track `fromSpace` before incrementing position for arc direction logic
- Flip Bézier control point for spaces 20–29 so pawns hop outward (away from center)
- Fixes awkward inward arc that made pieces clip through the board on the bottom edge
2026-06-07 14:52:07 -06:00
Brian Fertig ec3ae78570 Purchase Shade on properties 2026-06-07 14:41:54 -06:00
Brian Fertig 10ac18ab6e feat: add Monopoly board game
- Add complete Monopoly implementation with pure state engine (MonopolyLogic.js),
  static data (MonopolyData.js), AI (MonopolyAI.js), and Phaser scene (MonopolyGame.js)
- Implement full game rules: property buying, auctions, building houses/hotels,
  mortgages, jail, chance/community chest cards, rent calculation, bankruptcy
- Add 5-level AI with configurable greed, blunder rate, and thinking delay
- Add spritesheet loading for monopoly pawns and cards with graceful fallbacks
- Register game in registry, main.js, and game room scene dispatcher
- Add spritesheet creation guide (sprites.md) and update game-icons.png
2026-06-07 14:37:06 -06:00
Brian Fertig 27635d166f Banked Animation for Kiitos 2026-06-07 12:15:10 -06:00
Brian Fertig f3939435c6 feat: add card flying animation to Kiitos game
- Animate cards flying from player's panel to center slot on play/deviate moves
- Use tweens with Cubic.easeOut for smooth card placement (1200ms)
- Refactor applyMove to handle pass as early return and compute animation destination upfront
- Extract _postMoveEvents helper for post-move event handling
- Simplify forced move flow by removing manual delay and slot position capture
- Clean up flyCard reference on scene cleanup to prevent memory leaks
2026-06-07 12:03:56 -06:00
Brian Fertig 4597b31f5c Final player position changes 2026-06-07 11:42:00 -06:00
Brian Fertig 87d0e5327a More adjustments to Kiitos UI 2026-06-07 11:38:21 -06:00
Brian Fertig cca6f54fa6 Kiitos Player Layout 2026-06-07 11:31:42 -06:00
Brian Fertig 1b7efd5107 refactor: rename Yatzi to Zahtzee and update category persistence
- Rename game from "Yatzi" to "Zahtzee" across UI and server registry
- Move game category from tabletop to cards
- Persist last selected menu category using _lastCategory
- Update game-icons asset files
2026-06-07 11:20:25 -06:00
Brian Fertig 8a69710946 feat: add Kiitos word game with 3-round progression and AI
- Implement Kiitos game logic: build-a-word mechanic with forced plays,
  deviations, and pass resolution when stuck
- Add 3-round progression escalating rules (4+ words, prepend, super-Kiitos
  insert-anywhere, double scoring)
- Create server-side dictionary engine with prefix trie, word validation,
  and skill-aware AI move selection
- Build cozy Nordic café-themed Phaser scene with drag-and-drop letter cards
- Support 1 human + up to 3 AI opponents with turn-based play
- Integrate Kiitos into game menu, room scene, and opponent selection
- Add game icon to game-icons sheet
2026-06-07 11:00:17 -06:00
Brian Fertig dfd4950eab Music Quality Updates 2026-06-07 10:20:55 -06:00
Brian Fertig 19898bf157 feat: add Stratego game with AI, setup phase, and battle animations
- Implement full Stratego rules, including hidden information, combat,
  and flag capture mechanics
- Add 5-level AI with heuristic evaluation, unknown enemy reasoning,
  and skill-scaled blunders/lookahead
- Create setup phase allowing piece swap and shuffle before battle
- Add detailed unit reference panel with scrollable ability notes
- Implement turn-based battle animations with sci-fi sound effects
- Integrate Stratego into game menu, room scene, and opponent selection
- Add spritesheet assets (stratego-pieces.png) and game menu icon
- Register Stratego in server game registry
2026-06-07 09:53:58 -06:00
Brian Fertig 701b4f75e6 feat: add visual animation when banking scores in Farkel
Refactor bank() to return bankable amount instead of mutating state,
enabling the UI layer to handle score updates and display a floating
+score animation that slides to the player's score pad. Applies to
both human and AI turns.
2026-06-06 20:29:58 -06:00
Brian Fertig 23c0804a54 feat(farkel): add set-aside dice support and improve score-all
- Extend selection scoring to include set-aside dice combined with
  currently selected dice
- Replace greedy score-all with exhaustive search over all subsets
  of rolled dice, finding the optimal combination with set-aside dice
- Update turn score display to correctly show combined points during
  pick phase
2026-06-06 20:13:09 -06:00
Brian Fertig 0849ea0446 Video Adjustment 2026-06-06 19:54:22 -06:00
Brian Fertig 3af768c8ce Added videos 2026-06-06 19:45:36 -06:00
Brian Fertig 72dea52f49 feat(farkel): add header/shelf panels and enhance score display
- Extract header into buildHeader() with black background panel and depth layering
- Add background panel to shelf area with accent border
- Adjust shelf dice positioning to align with new panel
- Show pending +selected score during awaitPick phase in scratch pad
2026-06-06 19:20:38 -06:00
Brian Fertig 6aa331cf97 fix: correct game spelling to "Farkle" and add Catan-style dice animation
- Rename "Farkel" to "Farkle" in UI title and server game registry
- Replace tumble animation with new animateDice method featuring:
  - Dice thrown from elevated position with arc trajectory
  - Random face cycling while airborne
  - Bounce landing with per-die staggered timing
  - Spin and scale animations
  - Squash-bounce effect on final die
- Refactor die rendering to use containers for transform animations
2026-06-06 18:44:25 -06:00
Brian Fertig 97edebab55 feat(videopoker): add 8-bit sound effects and update audio playback
- Load new 8-bit style sound assets (card deal, card show, casino win/lose)
- Replace SFX enum-based sound calls with direct sound key playback
- Use 8-bit sounds for card interactions and win/lose feedback in VideoPokerGame
2026-06-06 18:13:06 -06:00
Brian Fertig 246d60e2a9 feat: add Farkel game and update Video Poker CRT theme
- Add new Farkel dice game (2-4 players, tabletop category)
- Update Video Poker CRT screen from green phosphor to royal blue theme
- Refresh game-icons sprite sheet for new game assets
2026-06-06 18:01:50 -06:00
Brian Fertig 371833a0e6 Basic Video Poker 2026-06-06 17:17:36 -06:00
Brian Fertig 1c33302a13 Polish on Labyrinth 2026-06-06 16:47:50 -06:00
Brian Fertig 8f1e3faaec Labyrinth Initial framework and basic animation. 2026-06-06 16:00:49 -06:00
Brian Fertig ab84b32f1d Polish on Forbidden Island 2026-06-06 14:24:54 -06:00
Brian Fertig 88dcaf8e15 Refine audio feedback and add AI intro speech for Forbidden Island
- Replace generic card/place SFX with thematic water sounds (splash, sink, raise, dry)
- Preload new water sound effects in PreloadScene
- Introduce AI character speech via SpeechQueue on character reveal
- Clear speech queue when advancing past character selection
2026-06-06 12:45:26 -06:00
Brian Fertig 9d8366ac5b Improve trade modal layout and card draw animations
- Make trade modal panel height dynamic; wrap hand cards to second row if >4
- Refactor card fly animations to use Containers for correct border scaling
- Animate AI partner card placement to HUD thumbnails
- Add Waters Rise animation: card flies to meter, triggers water rise with segment fade and marker slide
2026-06-06 12:12:45 -06:00
Brian Fertig 49761bf264 feat(forbiddenisland): overhaul UI, animations, and card trading mechanics
- Introduce animated intro sequence, player role intros, and deck count displays.
- Replace direct treasure giving with a new Trade Modal for swapping cards between players.
- Add smooth Phaser animations for pawn movement, shore-ups, flood/treasure card draws, and card swaps.
- Improve state management during animations using immutable cloning and peek functions (`peekFloodDraw`, `peekTreasureDraw`).
- Update role definitions with detailed descriptions and remove 'messenger' from `ROLE_KEYS`.
- Change default difficulty to 'novice'.
2026-06-06 11:47:45 -06:00
Brian Fertig 9cb05f5f44 Crossword Changes and added Tectonic 2026-06-05 23:24:11 -06:00
Brian Fertig e07f48a85c profile location adjustments in Ticket to Ride. 2026-06-05 11:53:57 -06:00
Brian Fertig 25ccdb5da9 feat(splendor): add noble claiming animations, token interactions, and UI polish
- Implement cinematic noble claiming animation with fireworks and sound, shrinking to panel thumbnails
- Add hover ring highlight and gem sound effects for token selection zones
- Render claimed noble thumbnails in player panels with dynamic positioning
- Trigger happy emotion on player portraits when purchasing point cards
- Relocate Leave button to bottom-right and remove unused playIntro flag
- Exclude Splendor from card back selection in OpponentSelectScene
2026-06-04 22:32:33 -06:00
Brian Fertig aa6fce0f6c feat(splendor): improve reserve card hover preview, dynamic control bar, and sound effects
- Add 500ms hover-intent preview for reserve cards, temporarily hiding player portraits
- Dynamically calculate control bar panel height based on player count
- Adjust reserve button positioning and increase control bar background opacity
- Reposition turn label and remove redundant win condition subtitle
- Integrate audio feedback for card interactions (ui-attach) and achievement animations (firework)
2026-06-04 21:11:04 -06:00
Brian Fertig 6abcbfa32b feat(splendor): add buy/reserve card animations and bought-card thumbnails
- Implement card fly-to-center animation with fireworks for buy and reserve actions
- Add persistent bought-card thumbnails in player panels with automatic wrapping
- Build full card containers (costs, points, gem badges) for smooth scaling transitions
- Suppress reserve pills and buy animations in UI until transitions complete
- Apply animation triggers consistently for both human and AI turns
2026-06-04 20:02:42 -06:00