Veit F. a07117efaf fix: implement correct Texas Hold'em betting rules and game flow
Rewrite core game logic to fix 10 critical bugs violating poker rules:

- Add betMatched flag to separate chip tracking from bet-matching state
- Implement last-aggressor tracking for proper betting round completion
- Rewrite all action functions with validation enforcement
- Add side pot support for multi-level all-in scenarios
- Replace nested setTimeout AI turns with async promise chain
- Add aiActing guard to prevent race conditions during AI play
- Fix currentTurn advancement to always land on active players
2026-05-17 18:46:08 +02:00

37 lines
2.5 KiB
Markdown

## Why
The current poker game logic contains multiple critical bugs that violate Texas Hold'em rules, causing rounds to skip, bets to calculate incorrectly, and chips to disappear. The game needs a complete rewrite of its core game flow to produce legitimate, playable poker.
## What Changes
- **Fix `applyCheck`**: Remove phantom chip assignment that corrupts call calculations and round completion
- **Fix betting round completion**: Exclude all-in players from "all matched" check so active players aren't skipped
- **Fix game loop state management**: Always apply returned state from `completeBettingRound` instead of discarding it when rounds don't advance
- **Implement side pot support**: Create and distribute side pots when players go all-in at different levels
- **Enforce minimum raise validation**: Call `validateAction` before applying any action, reject illegal raises
- **Fix fold validation**: Allow folding in all situations per Texas Hold'em rules
- **Fix pot distribution**: Award remainder chips to first winner instead of losing them
- **Add input guardrails**: Disable player controls during AI turns to prevent race conditions
- **Rewrite turn advancement**: Properly track last aggressor and end betting rounds when action returns correctly
## Capabilities
### New Capabilities
- `side-pots`: Handle all-in scenarios by creating main pot and side pots with correct chip distribution among eligible players
- `betting-round-flow`: Complete rewrite of betting round completion logic with proper last-aggressor tracking, all-in handling, and turn advancement
- `game-loop-integrity`: Unified game state machine that prevents race conditions, always applies state transitions, and disables controls during AI turns
### Modified Capabilities
<!-- No existing specs to modify — this is a bug fix for fundamental game rules -->
## Impact
- `src/lib/game/actions.ts` — Complete rewrite of check, call, raise, fold, all-in functions
- `src/lib/game/betting-round.ts` — Rewrite completion logic with side pot awareness and last-aggressor tracking
- `src/lib/game/state.ts` — Add last aggressor tracking, side pot structures to GameState
- `src/lib/types/game-state.ts` — Extend with `lastAggressor`, `sidePots`, betting round metadata
- `src/lib/game/showdown.ts` — Fix pot distribution, handle side pots at showdown
- `src/lib/game/validation.ts` — Fix fold validation, enforce minimum raise rules
- `src/routes/+page.svelte` — Add input disabling during AI turns, proper state machine flow
- `src/lib/game/turn.ts` — Rewrite turn advancement logic