Make board edges open instead of walled — blobs that slide off the
table fall and die, faithful to the original Pudding Monsters.
- Detect edge deaths in computeSlide (deathCause: 'edge')
- Animate blobs tumbling off the board with overshoot + fade
- Show 'Overboard!' death overlay for edge falls vs 'Splat!' for spikes
- Redesign board as a floating table with open edges (drop shadow, no rim)
- Regenerate all levels with walls added to every tier (walls are the
only terrain that stops a slide, so they're required from tier 1)
- Update UI copy to explain the new slide-and-fall rules
Track each monster's original index in cell data [x, y, m] so merged blobs
retain individual colors and faces. Replace uniform blob coloring with a
multi-pass silhouette renderer that blends adjacent monster colors and draws
eyes on every cell. Add squash-and-spring wobble tweens for merge impacts
and slide movements.
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
- 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
- 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
- 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.
- 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
- Add tutorial.md for Farkel (written by Gerome, ski-themed),
Forbidden Island (written by Balam, jaguar god), and Splendor
(written by Juliet, florist)
- Fix Holdem community card reveal: fly face-up cards with longer
delay, remove flip animation, and suppress new community cards
immediately after play action animation to prevent flash visibility
- Change deal sequence to match real blackjack rules: dealer hole card
face-down first, then player cards, dealer upcard face-up, then
second player cards
- Add renderAll() call to ensure card graphics exist before animation
- Update comments to reflect new deal order
- 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
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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
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.
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).
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
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.
- 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
- 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
- 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
- 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
- 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
- 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
- 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'.
- 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
- 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)
- 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
- Introduce portrait rendering for players and opponents via `buildPortraits`.
- Compact and right-align gem cells with updated sizing, spacing, and smaller fonts.
- Add divider and total row displaying combined bonus and token counts.
- Increase panel background opacity and fix reserved card interactivity checks.
- Add a dark background panel behind the token bank for better visual contrast.
- Introduce `animGemToSelection` and `animAITake` to animate gems flying from the bank to the selection bar and player panels.
- Update `onTokenClick` and `confirmTake` to trigger gem animations for human players.
- Integrate gem take animations into the AI turn sequence.
- Add `playerGemPos`/`humanGemPos` helpers for dynamic gem coordinate calculation.
- Adjust token count text, alignment, and depth layers in `drawBank` for cleaner 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.
- 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.
Introduce a visual transition where AI pieces fly from their opponent
portrait to the board upon placement. Human player placements remain
instant with a flash effect. Implemented animateAIPiece to handle the
tweening and temporary graphics rendering.
Integrate portrait avatars into the Blokus score panels by increasing
panel height and adjusting the layout. Added portrait graphics with
colored strokes and repositioned text elements to accommodate the new
visual components.
Adjust button coordinates in buildControls() to update the control tray layout.
Pass, Rotate, and Flip buttons are moved lower and centered relative to the tray,
while New and Leave buttons are positioned at the bottom right.
- 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
- Animate initial card deal with staggered fly-in effect and block input during playback
- Replace instant card placement with flip-and-fly animation for stock draws across variants
- Add automatic foundation completion when Klondike is effectively won (stock empty, all face-up, foundation-only path exists)
- Adjust Sudoku notebook spiral binding to top-only and refine title positioning
- Extract generic drag-and-drop logic to support both Klondike and new Three Shuffles leg
- Implement "Three Shuffles and a Draw" game rules: build tableau down in suit, shuffle up to 2x, then draw one buried card
- Update Three Shuffles engine to handle pile-based tableau and foundation clearing
- Add UI controls for shuffle and draw actions in the new leg
- 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
Switch tile interaction from a manual container hit area to an invisible
centered child rectangle. This resolves a hitbox offset issue where the
previous implementation caused the hit area to be misaligned up and left.
Update game-icons assets.
- 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.
- 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.
- 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
- 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
- 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
- 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
- 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.
- 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
Repositions ship pips and placement buttons to prevent overlap and improve visual alignment. Updates Y-coordinates for Randomize, Clear, and Ready buttons to fit within the game area, and shifts ship labels left for better spacing.
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.
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.
- 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
- 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.