Commit Graph

95 Commits

Author SHA1 Message Date
Brian Fertig 3cd0f2b2e7 feat: add Bejeweled Blitz and Mini Motorways games
- Implement Phaser scenes and pure JS logic modules for both games
- Register games in server registry and scene routing
- Add headless verification scripts for Bejeweled and Mini Motorways logic
- Update game-icons sprite sheet
2026-06-12 13:52:27 -06:00
Brian Fertig d51d026352 feat: add Zuma marble-shooter game with 20 levels
Implement a complete Zuma-style puzzle game featuring:

- Pure game engine (`ZumaLogic.js`) with Catmull-Rom path animation,
  segment-based chain physics, match-3 popping, and power-ups (slow,
  reverse, accuracy, explosion)
- Phaser scene (`ZumaGame.js`) with procedural textures, laser sight,
  and full UI (level select, overlays, scoring)
- 20 hand-designed levels across 6 path shapes (s-curve, horseshoe,
  spiral, zigzag, double-loop, figure-eight) with calibrated difficulty
- Level generator (`genZuma.js`) and verification suite (`verifyZuma.js`)
  for path geometry, parameter ranges, and engine correctness
- Platform integration: game registry, scene dispatch, preload asset
2026-06-12 00:15:51 -06:00
Brian Fertig c74fc88e04 feat(jewelquest): enhance battle visuals and add sword SFX
- Add dedicated battle background image, separate from non-battle screens
- Move felt background to render after textures are loaded
- Fix callout text z-ordering so it always renders above jewels/FX
- Play sword-hit SFX on skull matches, sword-slice on damage
- Register new audio assets and sound constants
2026-06-11 21:06:36 -06:00
Brian Fertig d01a2917b1 feat: add Jewel Quest game and fix Portrait memory leaks
- Register new Jewel Quest game across client and server
- Update game icons spritesheet with new frame (59)
- Fix memory leaks in Portrait components by implementing proper
  cleanup with double-destruction guards and returning destroy function
2026-06-11 19:07:43 -06:00
Brian Fertig bbb9c329c7 feat: add 4-player Hong Kong style Mahjong with AI opponents
- Implement pure logic engine for tile management, shanten calculation, claim resolution, and faan scoring.
- Add heuristic AI (5 skill levels) using shanten minimization, ukeire tiebreaking, and adaptive defense.
- Build Phaser UI with tile rendering, dynamic scoreboard, claim prompts, hand-end modals, and a scoring reference panel.
- Integrate into frontend routing, opponent selection, and backend registry.
- Include headless verification script for tile catalog, scoring fixtures, and AI self-play invariant checks.
- Update game icon assets and add in-game tutorial.
2026-06-11 18:18:45 -06:00
Brian Fertig dd749bc570 feat: add Mahjong Match solitaire game with 6 layouts and guaranteed-solvable deals
- Add complete Mahjong Match game (MahjongLogic.js + MahjongMatchGame.js) with pure board model and Phaser UI
- Implement 6 layouts: Garden, Crossroads, Pyramid, Butterfly, Fortress, and classic Turtle (up to 144 tiles)
- Generate guaranteed-solvable deals by simulating reverse removal of free pairs
- Add tile matching logic using half-tile coordinate system for proper layer overlap detection
- Include 38 tile face images (bamboo, circle, pinyin characters, winds, dragons, flowers, seasons)
- Add hint system, shuffle functionality, timer, best time tracking per layout
- Register game in server registry and scene dispatch tables
- Add headless verification script for face set validation and random self-play testing
2026-06-11 16:23:17 -06:00
Brian Fertig bf47c50dfa Added Block Fighter game 2026-06-11 10:03:22 -06:00
Brian Fertig c5971d8eb1 Added new game: Shift 2026-06-11 09:05:57 -06:00
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 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 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 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 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 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 e5c1021322 Purchase property routine 2026-06-07 15:15:16 -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 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 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 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 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 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 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 9b7bbe55c4 Updated Splendor Cards 2026-06-04 17:26:17 -06:00
Brian Fertig dd607a5815 feat(splendor): integrate gem spritesheet for polished token and badge rendering
- Add `splendor-gems` spritesheet (6 frames, 64×64) for gem icons.
- Introduce `gemFrame` helper to map gem colors to spritesheet indices.
- Update gem rendering in player bars, card badges, and cost pips to use sprites when available.
- Add `hasGems` flag to gracefully fallback to vector circles when art is missing.
- Register new asset in PreloadScene.
2026-06-02 21:56:03 -06:00
Brian Fertig e60387ec7c feat(blokus/splendor): refine tray UI and upgrade splendor spritesheet rendering
- Blokus: Adjust tray coordinates and add a background panel for improved layout separation.
- Splendor: Integrate a 28-frame spritesheet for development cards, nobles, and deck backs.
- Refactor frame mapping to calculate indices dynamically based on tier and bonus color.
- Unify card rendering pipeline: draw tinted background, overlay spritesheet art (when available), then render vector overlays.
- Add hover preview panel for reserved cards.
- Document spritesheet layout and update preload scene asset comments.
2026-06-02 21:35:14 -06:00
Brian Fertig 6a33bf500b feat: add Splendor board game support
- Register Splendor in server game registry with metadata
- Import and register SplendorGame in frontend main.js
- Map 'splendor' slug to SplendorGame in GameRoomScene
- Preload splendor-cards spritesheet in PreloadScene
- Update game-icons assets for the new game
2026-06-02 12:12:20 -06:00
Brian Fertig efb8842368 feat: add Forbidden Island card spritesheet and register Solitaire Tour game
- Implement visual card rendering for Forbidden Island using a new spritesheet with procedural fallback
- Register and wire up the new "Solitaire Tour" game across client, server, and preload scenes
- Update game icon and card asset bundles
2026-06-02 00:02:12 -06:00
Brian Fertig 6705f6bd15 `chore: update game icons sprite sheet and source file` 2026-06-01 21:35:50 -06:00
Brian Fertig 7eaf0183e2 Forbidden Island Initial Commit 2026-06-01 20:36:18 -06:00
Brian Fertig d6d7bc818b Game Icon Update 2026-05-31 20:39:55 -06:00
Brian Fertig 2c0c7d7145 Icons and Old Maid Updates 2026-05-31 19:41:57 -06:00
Brian Fertig 2bb4d14c97 feat: add Old Maid card game
- Implement core game logic, AI opponent with skill scaling, and Phaser UI
- Register game in server registry and wire into app routing
- Add card assets and sprites
2026-05-31 19:14:30 -06:00
Brian Fertig da0dc25cdd feat: add game icons to menu and animated dock arrows to Battleship
- Replace `gameicons` spritesheet with `game-icons` and load it in PreloadScene
- Add `iconFrame` support to game registry and render icons next to menu buttons
- Introduce animated dock arrows in Battleship to improve ship placement UI
- Clean up arrow lifecycle management in Battleship scene
2026-05-31 18:25:32 -06:00
Brian Fertig 63df39442c feat: add Boggle word game with AI opponents and board solver
- Implement full Boggle frontend using Phaser, featuring a wooden tray UI, player word sheet, opponent cards, and an animated hourglass timer.
- Add AI scheduling system that simulates opponent word finds based on configurable skill levels and word length/rarity weighting.
- Introduce pure game logic for adjacency validation, path checking, and classic scoring with duplicate-word resolution.
- Add backend board generation and exhaustive solver using a dictionary trie, exposing `/api/words/boggle/start` for board setup.
- Register Boggle in the game registry, scene router, and opponent selection UI.
- Include tutorial assets for Parchisi.
2026-05-31 15:17:00 -06:00
Brian Fertig f5e74d7970 Tutorials 2026-05-31 13:54:32 -06:00
Brian Fertig 2c5bcbd478 Backgammon Tutorial 2026-05-31 12:22:51 -06:00
Brian Fertig 0c416f362b feat(mastermind): improve UI layout and enhance peg reveal animation
- Relocate Leave button to the bottom of the game screen
- Extend peg reveal animation duration to 2.3s with smoother tick timing
- Introduce MASTERMIND_CALCULATE sound effect to play during the reveal
- Update audio preload and SFX registry to support the new sound
2026-05-31 10:19:42 -06:00
Brian Fertig 676a4d3106 feat: add Mastermind decryption duel game with 5 AI skill levels
- Introduce core game logic, AI engine, and Phaser UI for a cyberpunk-themed Mastermind implementation.
- AI features 5 difficulty tiers using random, consistent, and Knuth minimax strategies.
- Implement turn-based duel mechanics where player and AI race to crack each other's secret codes.
- Add neon visuals, peg-fly animations, staggered feedback reveals, and 7 custom sound effects.
- Register game in server registry, update menu/room scenes, preload assets, and include tutorial docs.
2026-05-31 09:53:37 -06:00
Brian Fertig 98e799bf25 feat: add tutorial modal system and register battleship game
- Introduce `hasTutorial` flag to game registry
- Add "?" button on game menu to open tutorial modals
- Implement shared hover tooltip on game menu
- Add tutorial modal CSS styling
- Register Battleship game with tutorial flag
- Load Battleship sound effects
2026-05-31 00:04:01 -06:00
Brian Fertig b6d85e30be feat: improve Go Fish AI with card sprites and turn exclusions
- Add custom card texture spritesheet and render cards using sprite frames
- Prevent AI from repeatedly asking for the same rank after a failed catch
- Track and exclude previously attempted (target, rank) pairs per turn to reduce redundant moves
- Load gofish-cards assets in preload scene
2026-05-30 19:28:48 -06:00
Brian Fertig fcc061e43d Added VP coins to Dominion 2026-05-30 17:18:37 -06:00
Brian Fertig eca8013fd4 feat: polish Ticket to Ride visuals and add animated game menu tabs
- Introduce muted palette and stroke outlines for unclaimed route segments so claimed routes pop
- Refactor busy state handling to toggle dim overlay and suppress hand render flicker during animations
- Improve modal layout using right-band centering, responsive font sizing, and word wrapping
- Block input briefly after modal close to prevent accidental clicks
- Add animated tab icons to the game menu with scale transitions and pulsing glow effects
- Load new tab-icons assets in the preload scene
2026-05-30 15:09:03 -06:00