Commit Graph

83 Commits

Author SHA1 Message Date
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 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 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 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 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 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 7eaf0183e2 Forbidden Island Initial Commit 2026-06-01 20:36:18 -06:00
Brian Fertig 9dda7f4487 feat: add Mini Crossword game (5x5 curated puzzles, single-player)
- Frontend: Phaser scene for grid/clue rendering, keyboard navigation, win detection, and difficulty selection.
- Logic: Pure helpers for slot mapping, cell validation, and answer checking.
- Backend: Puzzle engine, JSON bank of 15 puzzles across 3 difficulties, API route, and game registry.
- Integrates into existing game menu and routing.
2026-06-01 18:27:50 -06:00
Brian Fertig 50292b4a69 feat: add Spelling Bee solo word puzzle game
- Implement client-side Phaser scene and pure scoring/rank logic for the honeycomb-style word game.
- Add server-side puzzle generation engine with difficulty bands (easy/normal/hard) and dictionary pre-filtering.
- Register game metadata, frontend scene routing, and backend API endpoint (`/words/spellingbee/start`).
- Implements NYT-style rules: 7 letters (1 required center), 4+ length words, pangram bonus, and tiered rank progression.
2026-05-31 21:00:18 -06:00
Brian Fertig aa9a3a0f6c feat: add Blokus board game with heuristic AI and Phaser UI
- Implement pure state engine for Blokus rules, move generation, and scoring
- Add board geometry, polyomino definitions, and orientation transforms
- Integrate heuristic single-ply AI with 5 skill levels (configurable noise/blunders)
- Create Phaser scene for board rendering, piece tray, ghost placement, and HUD
- Register game in server registry and update client routing/dispatch
2026-05-31 20:16:21 -06:00
Brian Fertig 57c0a55710 feat: use sprite sheet for Old Maid card rendering
- Replace custom-drawn Old Maid card with sprite frame (frame 13)
- Load oldmaid-cards.png spritesheet in PreloadScene
- Rename GOFISH_CARD_FRAME to OLDMAID_CARD_FRAME for clarity
2026-05-31 19:21:09 -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 588925e564 feat: add Connect 4 game and image support to tutorial modal
- Register Connect 4 in server registry and frontend game config
- Add Connect 4 to slug dispatch and opponent select skill controls
- Update TutorialModal markdown parser to render embedded images
2026-05-31 13:39:00 -06:00
Brian Fertig 81d3a28195 fix: exclude Mastermind and Battleship from playfield selection
Prevents the playfield option section from appearing for Mastermind and Battleship games, which do not utilize playfield tiles in the same way as other games.
2026-05-31 12:52:16 -06:00
Brian Fertig 0bb32359b2 feat(mastermind): add Exact Placement scoring mode
Introduces a per-peg feedback system where each marker corresponds to the specific slot's result (exact, partial, or none) instead of aggregate counts. Added `scoreGuessPerPeg` logic, updated UI rendering and sound triggers to handle per-peg data, and added a scene toggle for switching between Standard and Exact Placement modes.
2026-05-31 12:44:38 -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 b0d6817c54 Rounded Tutorial Buttons 2026-05-31 08:24:35 -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 618d3d31c4 feat: add Othello and Go games with AI and Phaser UI
- Implement pure game logic for Othello (8x8) and Go (9x9)
- Add configurable AI opponents (skill 1-5) using heuristic look-ahead and alpha-beta minimax
- Build Phaser scenes with polished UI, stone/disc rendering, capture/flip animations, territory scoring, and end-game panels
- Register games in server registry and update client routing, opponent selection, and scene registration
2026-05-30 18:59:48 -06:00
Brian Fertig 8ccb100678 feat: add single-player Sudoku game with hints and scoring
- Implement Phaser UI and client-side logic for gameplay
- Add server-side puzzle generator with 5 difficulty levels
- Register game in frontend router and backend registry
- Include hint system, score calculation, and notebook-themed design
2026-05-30 18:05:40 -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
Brian Fertig 8222b61f0a feat: upgrade Ticket to Ride UI with card sprites and improved layout
- Replace procedural card drawing with spritesheet images for better visuals
- Rotate cards to landscape orientation and adjust right-panel dimensions
- Reorganize opponent panels into a two-column grid for better screen utilization
- Add circular score badges above player and opponent portraits
- Display actual top card on discard pile instead of generic face-down graphic
- Move game log to bottom-right corner
- Update PreloadScene to load new card assets
2026-05-30 12:05:20 -06:00
Brian Fertig 975d40b4b0 refactor: overhaul game menu layout, enhance Button component, and adjust Dominion AI
- Replace column-based game list with a tabbed category interface and grid layout
- Add active state management to tabs and refactor Button component for consistent visual states
- Increase Dominion AI Platinum purchase threshold from 5 to 9 coins in Colony games
- Add Ticket to Ride card assets
2026-05-30 10:47:50 -06:00
Brian Fertig 2dbcb83754 feat: add single-player Hangman game with difficulty levels
- Implement Hangman game scene using Phaser with a sketch/paper-style UI
- Add pure logic module for word masking, wrong guess tracking, and win/loss conditions
- Create backend `/api/words/hangman/start` endpoint with curated word pools for easy, medium, and hard difficulties
- Register game in scene manager and route dispatcher for seamless menu integration
- Add score tracking and basic game state management
2026-05-30 08:50:44 -06:00
Brian Fertig d9a68de8e4 feat: add Ticket to Ride (USA edition) game
Implement a fully playable Ticket to Ride game featuring a pure logic engine,
heuristic AI opponent, and Phaser UI scene.

Key additions:
- Board geometry, route definitions, destination tickets, and train card data
- State management, turn flow, payment validation, and scoring (routes, tickets, longest path bonus)
- AI decision-making for claiming routes, drawing cards/tickets, and endgame strategy
- Frontend integration (scene registration, opponent count default, slug dispatch)
- Server game registry configuration (supports 2-5 players)

Follows the existing architecture separating data, logic, AI, and rendering.
2026-05-30 08:01:02 -06:00
Brian Fertig 9dbf3feae4 feat(catan): implement Seafarers expansion features (gold hexes, ships, fog)
- Add gold hex resource picking phase with AI support
- Implement ship building mechanics and update build costs UI
- Introduce fog tiles that reveal terrain when roads/ships are built adjacent
- Replace robber token with pirate ship graphic
- Persist random tile frames for consistent hex visuals
- Update game state machine to handle gold pick queue and phase transitions
- Adjust UI layout (card positions, build panel) to accommodate Seafarers elements
2026-05-29 16:13:53 -06:00
Brian Fertig c5f34b7c28 feat(catan): implement Seafarers expansion and dynamic board architecture
- Decouple static board geometry from game state by introducing a board registry and `geoFor(state)` accessor. All AI and logic functions now dynamically resolve topology.
- Add support for Seafarers scenarios (New Shores, Four Islands, Oceania, Fog Island) with scenario-specific setup rules and victory conditions.
- Implement ship mechanics: players build maritime routes on coastal/sea edges that count toward the longest road.
- Introduce sea, gold, and fog terrain types. Update hex rendering, AI pathfinding, and placement rules to respect land vs. water constraints.
- Add pirate token rendering and logic, plus expansion scoring hooks for bonus victory points.
- Update lobby UI to allow expansion and scenario selection, passing configuration through to the game scene.
- Refactor `CatanBoard.js` geometry generation for O(1) edge lookups and dynamic port assignment.
2026-05-29 15:06:20 -06:00
Brian Fertig 2c95e76b00 Added Prosperity 2026-05-29 10:29:13 -06:00
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 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 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