Implement 32x32 BFS visitor navigation and daily contracts system with companion .npc journals; add native assembly scenes for Clover slots, Pyramid cards, Blackjack Party and Russian Party; package animation and sprite packs; add comprehensive offline test suites and rebuild shipping binaries.
63 lines
3.7 KiB
Markdown
63 lines
3.7 KiB
Markdown
# Native European roulette
|
|
|
|
The graphical roulette table stays inside the MASM game window. It uses a
|
|
generated first-person felt/table view and a matching close-up of the same bowl.
|
|
The 37-pocket rotor is a separate precision asset, inverse-sampled and
|
|
projected onto the bowl ellipse by assembly code. Upright screen-space numerals
|
|
are drawn separately in MASM so the perspective never squashes or rotates their
|
|
glyphs. Close-up labels use a crisp 3x5 font at 2x scale; the distant betting
|
|
view uses 1x scale. A settled pocket has a gold outline and its result is also
|
|
displayed in the wheel centre. Frame timing, counter-rotating
|
|
ball motion, camera transition, betting, input and payouts are also assembly.
|
|
Python only packs art and validates offline fixtures; it is not the runtime.
|
|
|
|
## Betting and rounds
|
|
|
|
Click a number, including the single zero, or an outside bet. The felt's top,
|
|
middle and bottom rows are 3/2/1. Supported bets are straight numbers, red/black,
|
|
even/odd, 1-18/19-36, three dozens and three columns. Split, street, corner and
|
|
six-line bets are not implemented. Gross multipliers are 36, 2 and 3 respectively;
|
|
zero loses every outside bet. Chip size is $50 to $1,000,000, adjustable with the
|
|
plus/minus controls or W/S. Clear/Backspace resets a draft without charging it.
|
|
Spin/Space charges the complete stake once and starts a 4.2-second spin.
|
|
|
|
The winning number is not printed during the spin. The rotor and ball slow down,
|
|
the ball moves into the selected pocket, and result/payout stay on screen until
|
|
BETS, Space or Enter returns to a fresh betting layout. Results cannot be
|
|
charged or settled again by repeated updates. Escape/EXIT leaves a draft/result
|
|
immediately; during a spin it queues departure until settlement. Missing art
|
|
blocks a paid spin and never opens a console fallback.
|
|
|
|
## Assets and checks
|
|
|
|
- Generated sources: `assets/sprites/wheel/{table,closeup}-v1.png`.
|
|
- Built-in image generation/edit prompts: `assets/sprites/wheel/prompts-v1.json`.
|
|
- ANM1 packs: `assets/animations/wheel/{table,closeup}-v1.bin` and `rotor-v2.bin`.
|
|
- Offline packer: `tools/generators/pack_european_wheel.py`.
|
|
- Native assertions: `tools/tests/wheel_scene_test.inc`, called by the action suite.
|
|
- Asset/frame/shipping checks: `tools/tests/check_european_wheel.py --parity`.
|
|
|
|
Native assertions exercise all 37 results with all 49 supported bets, one-time
|
|
settlement, every numbered cell's input mapping, monotonic millisecond easing,
|
|
queued departure and result persistence. Six framebuffer captures cover draft,
|
|
launch, fast/slow rotation, landing and result. The shipping loader probe also
|
|
loads/frees wheel packs from both the project root and TEMP.
|
|
|
|
Additional native captures cover all 37 settled results and isolated distant
|
|
and rotating labels. The offline checker compares every foreground digit pixel
|
|
with an independent font mask, verifies the large central result, and checks
|
|
that labels never overlap at any of the 512 rotation angles. Small labels write
|
|
physical framebuffer pixels directly; they do not use the coarser UI grid.
|
|
|
|
The dealer background is currently a static pose. This is a native animated
|
|
wheel/table scene, not a complete animated croupier performance or a physical
|
|
simulation of a freely rolling ball.
|
|
|
|
## Exterior scale fixes
|
|
|
|
Two former stationary indoor-guest sprites near the entrance now use outdoor
|
|
walking frames and independent curb routes. All six walkers use reduced world
|
|
dimensions; entrance guards are smaller too. Routes are sampled against the
|
|
actual exterior map and must remain in empty cells. Indoor guest art is forbidden
|
|
in the city prop registry. Existing hall tables are about eleven percent smaller;
|
|
cabinet dimensions, station IDs and saved progress are unchanged.
|