Commit Graph

507 Commits

Author SHA1 Message Date
Brian Fertig 5f9f7c8bd8 feat: add Spire Climb single-player roguelike deckbuilder
Implement a complete Slay-the-Spire inspired game with:

- **Core engine** (`SpireClimbLogic.js`): Turn-based combat state machine,
  seeded RNG, map generation, enemy AI, relic hooks, and a headless verifier
  (`verifySpireClimb.js`) that auto-plays 1,000+ combats across both classes.

- **Game scene** (`SpireClimbGame.js`): Phaser UI for class select, branching
  map, animated combat (card fly-in, health-bar drain, enemy lunge/buff FX),
  rewards, shop, events, and treasure nodes.

- **Content** (`SpireClimbData.js`): Two classes (Warrior, Rogue), 30+ cards
  with upgrades, relics, potions, 10 enemies/elites/bosses, events, and map
  tuning.

- **Art pipeline**: Procedural rendering by default with drop-in sprite sheets
  (`spireclimb-creatures.png`, `spireclimb-cards.png`) wired through
  `spireclimb-artwork.json`. Includes a Node script to regenerate the creature
  spritesheet and a full art spec (`sprites.md`).
2026-06-26 20:30:36 -06:00
Brian Fertig 63ffa35aa4 feat(risk): add portrait emotions for attacks, conquests, and army losses
- Add portraitHappy/portraitUpset helpers to react to game events
- Track army snapshotted counts on attack phase entry
- Trigger upset emotion when a player loses >8 armies in a turn
- Show happy emotion on continent capture or defeating 5+ defender armies
- Show happy on successful card trades (human and AI)
- Enable opponent portrait intros in Risk
- Remove deprecated setPortraitThinking method

feat(paigow): widen card spread in comparison modal

- Add MODAL_CARD_SPREAD constant (55px) for clearer card visibility
- Use modal spread in slotX calculation for comparison display
- Move Next Round button up 200px for better centering

feat(opponents): add Jerry conversation audio references

- Add "convo" array to Jerry's opponent entry
- Reference maurice and mario conversation audio files
2026-06-25 22:57:50 -06:00
Brian Fertig 0be58058b4 Fixed outline issue in Pai Gow 2026-06-23 21:41:59 -06:00
Brian Fertig e0b48a6285 feat(paigow): add animated hand-return and modal comparison sequence
- Animate player's split cards back to seat with split layout on submit
- Replace showComparisons with step-by-step modal comparison overlay
- Modal shows dealer cards, then each player's cards sequentially
- Display high/low hand arrows (red=dealer wins, green=player wins)
- Show verdict text (WIN/PUSH/LOSE) with sound effects and emotions
- Animate cards and result text back to seat between players
- Clear drag highlights when hiding hand-set panel
- Swap chips/cards depth values in z-ordering constant
2026-06-23 21:39:02 -06:00
Brian Fertig 2f4a89fd3f feat: animate cards from dealt position to hand-setting panel
Add a smooth tween animation when opening the hand-setting panel,
transitioning the 7 dealt cards from their seat positions to the
panel's source area instead of snapping them into place. This
improves the visual flow between the dealing and setting phases.
2026-06-23 20:06:01 -06:00
Brian Fertig 0435ad7c38 feat: add Pai Gow Poker game with AI opponents and hand-setting UI
- Implement complete Pai Gow Poker game using Phaser with drag-and-drop
  hand-setting panel for splitting 7 cards into 5-card high and 2-card low
- Add pure logic module (PaiGowPokerLogic.js) with full hand evaluation
  supporting Joker substitution, 9 hand ranks including Five Aces, foul
  detection, house way splitting, and commission-based resolution
- Add AI bet sizing module (PaiGowPokerAI.js) for opponent betting
- Register game in server registry (casino category, 1-6 players)
- Register scene in main.js and GameRoomScene slug dispatch
- Add comprehensive test suite (verifyPaiGowPoker.js) covering deck,
  evaluation, comparison, foul detection, house way, state management,
  chip math (wins/losses/pushes/fouls/copy rule), and AI betting
- Update StrategoGame to trigger portrait emotions on piece captures
- Update game-icons sprite sheet
2026-06-23 19:58:11 -06:00
Brian Fertig 280169d40d feat(yatzi): add AI emotional reactions to score outcomes
- AI portraits now play 'happy' or 'upset' animations based on score magnitude
- Adjust scorecard vertical positioning (SC_TOP: 60 → 110)
- Mute vibrant accent colors across all colored playfield schemes for better visual consistency
2026-06-22 23:20:20 -06:00
Brian Fertig d7b00c8bd5 feat: add dynamic color scheme support for colored playfields
Introduce runtime-generated canvas textures for colored playfields, allowing
players to select from predefined base/accent color combinations via a UI
dropdown. The selected scheme is persisted to localStorage and the dropdown
is shown/hidden contextually based on the active playfield type. Includes
proper DOM cleanup when clearing layers.
2026-06-22 22:53:43 -06:00
Brian Fertig 7e82de37c6 feat(bookwork): add playfield backgrounds, tile multipliers, and enhanced refill animations
- Add customizable playfield backgrounds with localStorage persistence
- Display multiplier labels on gold (1.5x) and diamond (2x) tiles
- Replace simple fade-in refill with Bejeweled-style falling tile animations
- Swap SUBMIT and CLEAR button positions for better UX
- Add new opponents (Gerome, Fireball, Natasha) with voice lines and convo files
- Reduce conversation interval from 60-300s to 20-200s
- Enable DEBUG_CONVOS for development
2026-06-22 20:49:28 -06:00
Brian Fertig 6a4d42f8b7 Added Conversations 2026-06-21 19:26:03 -06:00
Brian Fertig 153ec819b9 Added 5 new characters 2026-06-20 21:42:27 -06:00
Brian Fertig 4e222a89bb feat: add Bookwork word-battle game with 20-level campaign
Introduce Bookwork, a single-player word puzzle game where players
battle opponents by forming words from a 5×5 letter grid. Features:

- 20 levels with unique opponents, escalating difficulty, and special
  tile drops (fire, poison) via AI-driven attack system
- Grid mechanics: adjacent tile selection, word validation, damage
  calculation with gold/diamond multipliers, and fire tile self-damage
- Progression system with HP milestones, potion unlock, and server-
  persisted level completion
- Polished battle UI with animated word submission, fireworks, HP bars,
  portrait system, and victory/defeat overlays
- Full test suite (verifyBookwork.js) covering grid generation, damage
  formulas, refill logic, AI probabilities, and level data validation
2026-06-20 15:51:55 -06:00
Brian Fertig e4c12e91bd feat: enhance Bejeweled sound effects and Yatzi dice animations
- Replace generic sci-fi sounds with gem-themed audio (match, chain, drop, big drop)
- Add context-aware match sounds based on special gems (hyper, flame) and match size
- Improve Yatzi dice roll with bezier curve trajectories, rotation, and bounce
- Restructure dice rendering to use containers for consistent transforms
- Add new gem sound assets and SFX constants
2026-06-20 14:33:52 -06:00
Brian Fertig 5632dbae9b feat: enhance Bejeweled sound effects and Yatzi dice animations
- Replace generic sci-fi sounds with gem-themed audio (match, chain, drop, big drop)
- Add context-aware match sounds based on special gems (hyper, flame) and match size
- Improve Yatzi dice roll with bezier curve trajectories, rotation, and bounce
- Restructure dice rendering to use containers for consistent transforms
- Add new gem sound assets and SFX constants
2026-06-20 11:47:34 -06:00
Brian Fertig d22f6ff902 feat: add best-of-3 match mode, countdown sequences, and new audio
Genius Square:
- Best-of-3 match mode with round tracking and score pips
- Inter-round overlay with "Next Round" button
- Match-end overlay with Play Again / Menu options
- Round display showing "ROUND X OF 3" at top

Wordle:
- 3-2-1-GO countdown before AI starts
- Adjusted AI delay timings (slower across all skill levels)
- Added victory/round win sound feedback
- Changed tile flip sound to UI_ACTIVATE

Audio:
- New countdown tick and go sound effects
- 3 new music tracks (Bryan Adams, The Midnight, Khruangbin)

Boggle:
- Minor button position adjustment
2026-06-20 10:42:28 -06:00
Brian Fertig 02fda99f87 Updates to visibility 2026-06-20 09:43:20 -06:00
Brian Fertig b7821c3bd8 feat: add piece rotation/flip animations and UI sound feedback
Enhance Genius Square and Katamino with:
- Smooth piece rotation and flip animations (scale + rotate tweens)
- Pulsing outline glow on ghost piece preview
- New UI sound effects: pick, activate, flip, place, chime
- Music player support in both games
- Win chime with delayed overlay for better feedback
- Move Reset/Leave buttons to bottom in Katamino
2026-06-20 09:31:04 -06:00
Brian Fertig 762792f9f5 feat: add Katamino single-player pentomino puzzle game
Implement Katamino, a 5×N grid tiling puzzle using the 12 standard
pentominoes. Players select a grid width (3-12) and solve puzzles by
placing all chosen pieces to fill the board.

Key features:
- Three-screen flow: penta select → set select → play
- Scrollable puzzle card grid with completion progress tracking
- Piece rotation (R), flip (F), and lift-to-reposition
- Pre-generated puzzle bank (katamino.json) with all valid tilings
- Offline generator script (genKatamino.js) using backtracking solver
- Progress saved to localStorage per puzzle
- Registration in server registry and scene dispatchers
2026-06-20 08:26:23 -06:00
Brian Fertig e3fc11d13a feat: add Genius Square single-player game with AI opponent
Implement Genius Square, a 6x6 grid puzzle game where players place 9
polyomino pieces to fill the board around randomly placed blockers.

Key features:
- Pure JS game logic (GeniusSquareLogic.js) with backtracking solver
- AI opponent with 5 skill levels using pre-computed solutions
- Phaser-based UI with piece tray, grid rendering, and animations
- Dice-based blocker placement using zone partitioning for balanced boards
- Orientation support: rotate (R), flip (F), and piece lifting
- Win/loss overlay with play again and menu options
- Register game in server registry and scene dispatchers
2026-06-20 00:16:34 -06:00
Brian Fertig e3fb356520 feat: enhance craps UI and improve ghost AI skill scaling
- Replace Righteous font with JqkasWild for craps title, puck, and number labels
- Refactor zone label rendering into dedicated methods for cleaner code
- Add payout information display on craps number boxes (6→SIX, 9→NINE)
- Redesign Field zone with styled number circles (accent for 2/12)
- Update Don't Pass/Don't Come zones with bar text and red accent borders
- Add common words trie for Ghost AI to target on skill ≤3
- Make lower-skill Ghost AI play more human-like by preferring common word continuations
- Fallback to off-dictionary play when no common word path available
2026-06-19 21:54:04 -06:00
Brian Fertig ea135b35ed refactor(forbidden-island): replace global priorities with per-player direction system
Replace the single global priority buttons (focus treasure, regroup, defend)
with per-player direction assignments accessible via clickable pills on each
player's HUD. Each player can now be directed to: Auto, focus a specific
treasure (Earth/Wind/Fire/Ocean), Regroup, or Defend Temples.

- Remove old priority toggle buttons and renderPriorities()
- Add direction pills on partner HUDs and portrait panels
- Implement dropdown menu for selecting directions
- Convert direction choices to priority objects for AI execution
- Increase chat panel height to accommodate new layout
- Add click consumption guard on trade modal trigger
2026-06-19 21:10:01 -06:00
Brian Fertig 41818f7a4a refactor(minimotorways): improve roundabout visuals and traffic flow
- Redesign roundabout rendering with concentric rings (outer border, road
  surface, inner border, central island) for clearer visual distinction
- Increase ROUNDABOUT_CAP from 2 to 4 to allow more cars simultaneously
- Add stuck detection (stuckMs) with FORCE_ADVANCE_MS (6s) timeout to
  prevent cars from remaining permanently blocked
- Implement "don't block the box" logic: cars won't enter bare junctions
  if their exit cell is occupied, reducing gridlock
2026-06-19 20:38:56 -06:00
Brian Fertig fc7f5f83ca fix: improve road pathfinding junction quality in Mini Motorways
- Add stop-at-road mode to A*: snap to nearest road cell on approach
  instead of routing along the road to the cursor, producing clean T-
  and L-junctions without diagonal shortcuts from unexpected angles
- Tighten diagonal suppression rule: block diagonals when EITHER
  orthogonal intermediary is a road (previously required BOTH),
  preventing spurious diagonal shortcuts at T-junctions that would
  cause perpendicular approaches to fan out to three connections
- Refactor A* path reconstruction into shared helper and add early
  termination to avoid post-search state scanning
2026-06-19 18:06:43 -06:00
Brian Fertig 44b837676c feat: implement click-and-draw road routing in Mini Motorways
- Replace drag-to-draw mode with click-and-drag path drawing
- Add A* pathfinding for drawing roads between points
- Support drawing roads along passable terrain (land without obstacles)
- Add visual preview of planned path with cost-based color coding
- Update UI hints to reflect new interaction model
- Cancel drawing with ESC without changing tool state
2026-06-19 17:05:47 -06:00
Brian Fertig e608c5b205 feat: overhaul PuddingMonsters visuals with new jello-themed assets
- Add jello-items spritesheet for wall and spike decorations
- Replace solid-color floor with checkerboard pattern using new palette
- Add pulsing animation to target squares
- Implement animated beacon rings around targets on level start
- Redesign walls and spikes to use sprite frames instead of drawn graphics
- Adjust UI text positioning in MahjongMatch, Zuma, and Shift games
- Reposition Shift game buttons to bottom-right corner with consistent sizing
- Load jello-items spritesheet in PreloadScene
2026-06-19 16:44:51 -06:00
Brian Fertig 4f23a8470a feat(puddingmonsters): add eye animations and squash/stretch blob effects
- Introduce animated eye pupils that periodically shift direction per monster
- Replace single monster graphics with per-blob containers for independent squash-and-stretch pulse animations
- Add 4 new sound effects: squish, squash, woosh, jello-monsters
- Update move animations with woosh sound, merge with squash jiggle, and victory with jello-monsters fanfare
- Adjust HUD positioning for moves and stars text
- Refactor nudgeInvalid to work with per-blob container system
2026-06-19 15:37:38 -06:00
Brian Fertig 54a1ba2280 feat: add 8-bit sound effects and improve Battleship impact visuals
- Add 4 new 8-bit sound effects (select, activate, action, move) to SFX system
- Wire 8-bit sounds to Risk attack, fortify, and movement animations
- Add visual impact markers for hits and misses in Battleship
- Fix Battleship portrait texture key reference
- Improve ship drag hit area with geometric rectangle
- Add phase guard and tween cancellation on ship drag start
2026-06-18 23:36:01 -06:00
Brian Fertig 546e1de240 feat(risk): enhance UI, add card visuals, battle portraits, and phase announcements
- Add visual card stack in side panel with clickable modal to view/trade cards
- Redesign cards modal with chip-style selection and trade/dismiss buttons
- Add animated phase announcements (Reinforce/Attack/Fortify) that slide from map to panel
- Introduce static portraits for attacker/defender in battle scene with avatar support
- Enhance move modal with optional +/-10 buttons for large army ranges
- Improve fortify flow with animation and proper busy state handling
- Add 3 new music tracks to game soundtrack
- Adjust UI font sizes, spacing, and button positioning throughout
- Deduplicate phase announcements using _lastAnnouncedPhase tracking
2026-06-18 21:39:33 -06:00
Brian Fertig cb506696a6 feat(risk): add rich combat animations and enhanced move modal
- Add animated attack arrows with quadratic bezier curves from attacker to defender
- Implement battle modal that zooms from battlefield to center, shows animated dice rolling, and resolves pair-by-pair with colored arrows
- Add conquest animation with straight-line arrow and floating +/- army count text
- Store attacker/defender seat info in lastBattle for proper color theming
- Add Min/Max quick-select buttons to army deployment modal
- Ensure busy state is held during conquest animations to prevent input conflicts
2026-06-18 19:40:19 -06:00
Brian Fertig 036947885d feat(risk): redesign panel UI and add default opponent configuration
- Redesign Risk panel layout with player portraits, colored rings, and
  inline name/stats display (territories, armies)
- Add active player gold ring highlight on portrait
- Support custom playfield background images with fallback color
- Refactor button/hint positioning for cleaner control rendering
- Add defaultOpponents configuration to game registry
- Default Risk to 3 opponents on seat selection
- Update game-icons asset files
2026-06-17 21:01:40 -06:00
Brian Fertig ae30299838 feat: add Risk board game with AI opponents
Implement the classic Risk board game with full game logic, AI players
with adjustable skill levels (1-5), and Phaser-based rendering.

New files:
- RiskData.js: map data, adjacency graph, continent bonuses, card deck
- RiskLogic.js: pure game engine (reinforce, attack, fortify phases)
- RiskAI.js: heuristic AI with 5 skill tiers and configurable behavior
- RiskGame.js: Phaser scene with combat animations and UI
- tutorial.md: in-game tutorial ("A Field Manual by General Ironside")
- verifyRisk.js: headless fixture and self-play verification script

Integrates with existing game framework via registry, game room dispatch,
and preload scene. Includes board image and updated pawn sprites.
2026-06-17 20:30:14 -06:00
Brian Fertig 2a22bdbcde Adjustments to Word Games 2026-06-16 19:28:56 -06:00
Brian Fertig 1e153b34ef **Fix: Increase Monopoly popup dialog height and padding**
Adjust the popup dialog dimensions in MonopolyGame.js to improve content visibility and spacing. Increases maximum height from 620px to 800px and bottom padding from 20px to 48px.
2026-06-16 18:10:26 -06:00
Brian Fertig 833a214c24 Canasta, and Cribbage updates. Added 3 new AI opponents. 2026-06-16 00:33:36 -06:00
Brian Fertig 8a79b6909d feat: add Gin Rummy card game with AI opponents
Implement a fully playable Gin Rummy game with Phaser-based UI,
pure logic engine, and heuristic AI (skill levels 1-5).

Features:
- Complete Gin Rummy rules: draw, discard, knock, gin, layoff, scoring
- Meld detection with optimal deadwood minimization
- 2-4 player support with AI opponents
- Drag-to-reorder hand, visual meld highlights, turn indicators
- Round and game-over overlays with score tracking
- Headless verification script with unit tests and self-play simulation

Files added:
- public/src/games/ginrummy/GinRummyData.js (card helpers, layout, constants)
- public/src/games/ginrummy/GinRummyLogic.js (deterministic game engine)
- public/src/games/ginrummy/GinRummyAI.js (AI decision making)
- public/src/games/ginrummy/GinRummyGame.js (Phaser scene)
- server/scripts/verifyGinRummy.js (headless test harness)

Also updates game-icons/opponents assets and registers the game
in the server registry and game room scene dispatcher.
2026-06-14 20:51:15 -06:00
Brian Fertig 6927b148f2 feat(rummikub): add rack reordering with insert indicator and improve layout
- Implement drag-and-drop rack reordering with animated slot indicator
  showing where a tile will be inserted
- Preserve manual rack ordering across turn resets and draw actions
- Support dynamic table layout with proper margins for side opponents
- Reposition player portraits, buttons, and UI elements for 3-4 player
  configurations
- Add point value labels below valid committed sets containing staged
  tiles
- Scale up tiles slightly when picked up for drag feedback
2026-06-14 19:33:28 -06:00
Brian Fertig f2da9bfb20 fix: correct container hitbox double-shift in Canasta & Cribbage
Fix hitbox misalignment where Phaser's Container displayOrigin already
centers bounds, causing manual Rectangle offsets to double-shift.

feat: add Rummikub game with AI, immutable engine, and solver

- Implement full Rummikub gameplay: drag & drop, sets/runs, jokers,
  table manipulation, opening meld rule, and scoring
- Add immutable game engine (RummikubLogic) following existing patterns
- Add rules solver (RummikubSolver) for set validation and AI planning
- Implement 5-level heuristic AI (RummikubAI) with configurable delay
- Register game in registry and routing, include tutorial markdown
- Add headless verification script (fixture tests + AI self-play)
2026-06-14 16:23:44 -06:00
Brian Fertig f395f208ae feat: add Nadia and Smasher opponents with full media assets
- Add sprite images, speech audio, and animation videos for Nadia and
  The Smasher opponents
- Update opponents.json with new character definitions and speech cues
- Fix 2048 UI: reposition buttons and add Leave button
2026-06-14 14:32:41 -06:00
Brian Fertig a8e21a3bc6 refactor: overhaul 2048 merge animation and swap sound effects
- Replace PIECE_CLICK with alternating MASTERMIND_GLITCH sounds
- Refactor merge animation: redraw all tiles before merge phase instead
  of skipping merged positions
- Hide spawn tile early to prevent flash before spawn animation
- Simplify merge destination setup by removing redundant alpha reset
- Extract runMergePhase callback for cleaner merge/no-merge flow
2026-06-14 12:55:14 -06:00
Brian Fertig 4b78bf047f refine 2048 animations and enhance Dot Link sound effects
2048:
- Improve tile slide animations with distance-proportional timing
- Refactor merge transitions: scale down source tiles before showing merged result
- Extract _paintTile helper to reduce code duplication
- Simplify spawnTile logic by removing unnecessary mergedAt/moves fields

Dot Link:
- Add dynamic pitch variation to path-drawing sounds using plink/plonk SFX
- Rate scales with path length for more engaging audio feedback
- Preload new scifi-plink and scifi-plonk audio assets
2026-06-14 11:55:47 -06:00
Brian Fertig 24678602f4 feat: add 2048 single-player puzzle game
- Implement complete 2048 game with Phaser.js scene and game logic
- Add customizable theme picker with multiple color schemes
- Include smooth tile slide, merge, and spawn animations
- Add sound effects (scifi-plink, scifi-plonk) and particle effects
- Track best score in localStorage
- Register game in server registry with icon frame 67
- Update Wordle name to "Wordle Race"
2026-06-14 10:26:44 -06:00
Brian Fertig 2b224ff62b feat(jewelquest): spell chaining and combat animations
- Allow spell chaining within a turn (Puzzle Quest rule): casting a spell
  no longer ends your turn, enabling multiple casts per turn followed by a
  gem swap to pass play.
- Add procedural spell-icon textures (shield, swords, bolt, flame, meteor,
  thorn, poison, dagger, banner, leaf) for visual spell feedback.
- Implement combat animations: skull-match convergence strike, spell damage
  fly-in, spell heal burst with particle ring, HP bar flash, and floating
  damage/heal numbers.
- Refactor HP and mana updates into separate `updateHpBar` and `updateManaBar`
  methods so mana reacts immediately while HP drains at animation climax.
- Defer stun application until the caster's turn actually ends.
- Update tutorial and verification tests to match the new turn-passing rules.
2026-06-14 05:18:45 -06:00
Brian Fertig 59ee3eca0c feat: add Dot Link puzzle game
Introduce Dot Link, a Flow-Free-style single-player puzzle game where players connect matching colored dots to fill the grid. Includes:
- Pure JS puzzle engine with deterministic board generation, DFS solver, and win validation (`DotLinkLogic.js`)
- Phaser 3 UI scene featuring a cyberpunk/synthwave theme, level select, daily runs, hint system, and smooth path-drawing mechanics
- Deterministic bank of 100 hand-tuned puzzles (`dotlink.json`)
- Node scripts for puzzle generation and verification
- Full integration into the app's preload, routing, and game registry
2026-06-14 05:18:03 -06:00
Brian Fertig f5b0c545f4 feat: add Cribbage and Canasta single-player card games
- Implement full game logic, scoring, and UI scenes for Cribbage and Canasta
- Add heuristic AI opponents with 5 skill levels and reaction delays for both games
- Cribbage: race-to-121 track, pegging, crib scoring, and cut mechanics
- Canasta: 108-card shoe, partnership melding, canastas, frozen/blocked piles, and go-out rules
- Include headless verification scripts (fixture + self-play tests) for both games
- Register new games in server registry and update scene routing
- Add tutorial markdown files and update game icon assets
2026-06-13 21:54:20 -06:00
Brian Fertig fc7ae2c53d feat: add themed tutorials and overhaul Monopoly AI trading
- Add new tutorials for Labyrinth and Mexican Train with unique character voices
- Redesign Battleship and Mahjong tutorials with narrative themes and assets
- Implement AI-initiated trade proposals and counter-offer system in Monopoly
- Add AI-to-AI trading with rate-limited proposals and mutual benefit validation
- Enable tutorial flags for Labyrinth and Mexican Train in game registry
- Add new character assets and tutorial videos
2026-06-13 19:30:12 -06:00
Brian Fertig b2e33f6bdf feat: add slot game artwork assets for fruit-frenzy and liberty-belle
- Add sprite images for Liberty Belle slot game (bell, diamond, heart, horseshoe, spade, star)
- Add sprite images for Fruit Frenzy slot game (bell, cherry, lemon, melon, orange, plum)
- Update slots-artwork.json to reference the new image assets
2026-06-13 15:47:47 -06:00
Brian Fertig b59e805614 feat: add slot game assets and update tutorial style
- Add new image assets for Gold Rush slot game (bandit, dynamite, pickaxe, saloon, sheriff, wagon)
- Add new image assets for Sugar Spin slot game (bear, berry, cane, chocolate, jelly, lollipop, mint, rainbow)
- Add cabinet and card artwork for all slot games (Liberty Belle, Fruit Frenzy,Lucky Sevens,Sugar Spin)
- Update slots-artwork.json with paths for all new and existing slot assets
- Modernize Mastermind tutorial language with casual/colloquial tone
2026-06-13 15:00:37 -06:00
Brian Fertig 980dae5374 feat(slots): add artwork assets for dragons-hoard slot game
Add sprite images and UI elements for the dragons-hoard slot game:
- Symbol sprites (dragon, gem, knight, castle, chest)
- Cabinet and card background images
- Update slots-artwork.json with image paths for all symbols

This completes the visual asset integration for the dragons-hoard game theme.
2026-06-13 13:11:44 -06:00
Brian Fertig 519dd617d2 feat(farkel): overhaul turn scoring with combined cycle logic and explain panel
- Replace turn.kept running sum with priorKept + selectionScore model so the
  banked total always reflects all set-aside dice in the current cycle, enabling
  higher N-of-a-kind bonuses when extending sets.
- Update bestScoring and hasScoring to consider setAsideDice; use brute-force
  subset search (feasible for ≤6 dice) instead of greedy strategy for correctness.
- Add breakdownScoring helper to decompose a combined dice set into labeled groups.
- Add updateExplainPanel showing "Prior rolls", scoring groups, and total with
  "(need 500)" note when off-board requirement isn't met; format scores >999 as K,DDD.
- Refactor selectionScore/selectionValid to score the combined set (setAsideDice + selection).
- Use bestScoring(rolled, setAsideDice) in onScoreAll and AI for optimal picks.
- Fix scratch paper preview to use priorKept + selectionScore consistently.
- Add hot dice handling: carry cycle score into priorKept and reset setAsideDice.
- Slots: guard card artwork loading to avoid errors when texture is missing; adjust bulb positions accordingly.
2026-06-13 12:25:25 -06:00
Brian Fertig d82a8d676f fix: correct score display and selection logic in FarkelGame
- Fix turn score display to show kept dice separately from selected dice
- Update selection scoring to only evaluate currently selected dice, not combined with set aside dice
- Add validation check for empty selections
2026-06-13 11:34:36 -06:00