# Native Card Tables ## Implemented The existing BLACKJACK, POKER and DURAK interaction targets now open native card tables in the same raycaster window. Neither table allocates a console or launches Python. Existing hall coordinates, camera, textures and legacy console game procedures are preserved. Both tables use a shuffled 52-card deck, fixed card identities, a shared bitmap felt/dealer scene, animated dealing and card flips. Poker also moves chips into the pot. Actions are edge-triggered, and mouse positions account for the 4:3 viewport and its black bars. During a paid hand ESC opens a frozen exit confirmation; after settlement ESC returns to the hall. Closing the game forfeits an unfinished hand: the deducted stake is saved, not refunded or replayed. Poker is heads-up no-limit Texas Hold'em against one dealer AI. It includes alternating button/blinds, the big blind's option, flop/turn/river with burn cards, check/call/raise/fold/all-in, minimum raises, unmatched all-in refunds, automatic board runout, and exact five-card ranking with kickers and ties. The opponent uses its own cards and the exposed board only. Its strategy is a deliberately lightweight heuristic, not an optimal poker solver. Blackjack uses one deck per hand, dealer stands on soft/hard 17, naturals pay 3:2, tied naturals push, and a player can double on the first two cards. Splitting and insurance are not implemented in this native version. Durak uses a 36-card deck against one AI, with podkidnoy/perevodnoy variants, fixed bout limits, taking, transfers, discard and attacker-first refills. See [Native Durak](native-durak.md) for rules, controls and verification. ## Controls - Tables: click the displayed buttons; +/- adjusts the next stake. - Poker: Space or C check/call, R raise, A all-in, F fold, Up/Down amount. - Blackjack: Space deal, H hit, S stand, D double, Up/Down next stake. - Durak: Left/Right select, Enter play, B take, T transfer, D finish attack; Page Up/Down changes the eight-card hand page; T switches variant when ready. - ESC exit confirmation/return; F11 toggles fullscreen without changing the table layout. ## Modules - `src_graphics/card_tables_data.inc`: card IDs, states and UI data. - `card_table_assets.inc`: loaders, shuffle and shared physical card/chip drawing. - `poker_evaluator.inc`: native prime-product lookup and best five of seven. - `native_poker.inc`: betting state machine and information-limited AI. - `native_blackjack.inc`: blackjack state machine and ace scoring. - `native_durak_data.inc`, `native_durak.inc`, `durak_render.inc`: native two-player Durak state, rules, asynchronous AI and animated presentation. - `card_tables_render.inc`: presentation only; no RNG or payouts. - `card_table_input.inc`: mouse commands and mode-specific paid-hand guards. ## Offline Assets `tools/generators/pack_card_tables.py` compiles the table artwork and the [Treys](https://github.com/ihendley/treys) 0.1.8 ranking tables to binary assets. Install the pinned offline dependency into `tools/vendor` with `python -m pip install --target tools/vendor --no-deps -r tools/generators/requirements-poker.txt`. The shipped game reads only `card-table.bin` and `poker-ranks.bin`. Include `docs/licenses/treys.txt` in future distributions. Rules reference: [PokerStars Hold'em](https://www.pokerstars.com/poker/games/texas-holdem/). Artwork: generated with the imagegen tool, stored as `assets/sprites/tables/card-table-v1.png`. Prompt: full 4:3 seated-player view of an emerald casino card table, burgundy padded near rail, brass trim, adult male dealer in white shirt/black vest at the far rail, blank felt for runtime cards/chips, crisp 1990s PC-game painted scene, no cards, chips, text or HUD in the artwork. The binary loader permits a simple felt fallback if the artwork is missing; missing rank data blocks poker rather than silently launching the console version. ## Verification And Remaining Work `tools/tests/test_casino_actions.ps1` executes the actual assembly renderer and handlers: 9021 five/six/seven-card rank vectors against Treys, 500 complete poker hands, 500 blackjack hands, money conservation, all-in runout/refund, odd-chip ties, dealer information boundaries, mouse coordinate mapping, duplicate rejection and render side-effect checks. Tests cannot write user saves. `check_card_table_frames.py` exports eight actual framebuffer images. Existing fullscreen, startup, audio, dice and 2000 roulette-round checks remain. This is not a completed migration of the whole casino. The implemented graphical games include the three card tables, Russian roulette, Buckshot, multi-bet casino roulette, coin, dice, skulls, skill checks and billiards. 777, CloverPit, online play, tower, terminal and observer still show native unavailable panels. Native profile data remains separate from legacy console account saves. The old installer is not refreshed by this change.