Add native Durak, poker, blackjack, roulette, Buckshot and billiards scenes with animation assets and regression tests. Improve arrival, city, hall, profiles, shops, audio and exit handling; remove the portable C game core and refresh shipping executables.
54 lines
2.9 KiB
Markdown
54 lines
2.9 KiB
Markdown
# Native Card Exit and Exterior Lighting
|
||
|
||
Runtime implementation is MASM x86 only. Python is used solely to inspect test
|
||
framebuffers. Existing packaging launchers remain C#, not assembly.
|
||
|
||
## Leaving a Table
|
||
|
||
Poker and blackjack now expose a permanent `В холл` button in the top right.
|
||
Escape also requests departure, before the engine's generic pause handler.
|
||
Idle and settled tables return immediately. An unfinished hand instead opens a
|
||
confirmation with `Продолжить` selected by default. Escape/N cancels; arrows or
|
||
Tab select an action, Enter/Space applies it, Y leaves directly. Both buttons
|
||
can also be clicked.
|
||
|
||
While confirmation is open, the card handlers do not advance dealing, AI,
|
||
dealer draws, chip animation, money or RNG. Cancelling preserves the hand.
|
||
Confirmed departure settles a player fold in poker or a loss in blackjack,
|
||
retaining the already deducted stake. Existing settlement routines save that
|
||
result and guard against paying it twice. Re-entering starts at an idle table.
|
||
No graphical table launches the legacy console.
|
||
|
||
## Exterior Lighting
|
||
|
||
`city_lighting.inc` builds a static 512x256 map at eight samples per world unit,
|
||
using 512 KiB. Ground lamps are taken from the actual registered lamp props.
|
||
Warm window spill is limited to lit facade materials and the casino entrance.
|
||
Dark windows do not cast window light. The falloff reaches zero smoothly at
|
||
the edge; the map stays fixed in world coordinates as the camera moves.
|
||
|
||
The exterior floor shader tints the sampled pavement/asphalt rather than
|
||
drawing screen-space circles. Bright warm window panes and lantern glass retain
|
||
their emissive brightness instead of receiving the full distance darkness.
|
||
Indoor floor shading is unchanged. The sky, cigarette smoke and gameplay RNG
|
||
are independent of the map. This is basic baked ground illumination, not
|
||
ray-traced shadows, moving headlights or physically accurate reflections.
|
||
|
||
## Verification
|
||
|
||
`tools/tests/test_casino_actions.ps1 -SkipPreview` compiles and executes the
|
||
production handlers with a headless framebuffer and test-only profile fixtures.
|
||
`card_exit_test.inc` checks every active poker and blackjack state, cancellation,
|
||
mouse/header controls, the old paused state, repeat departure and re-entry.
|
||
`city_lighting_test.inc` checks map bounds, emitted window colors, disabled
|
||
lighting, unchanged money/RNG and matched lights-on/lights-off snapshots.
|
||
|
||
`tools/tests/check_city_lighting.py` checks native images, modal geometry and
|
||
localized warm illumination, and reports headless render time with lighting
|
||
enabled/disabled. These timings are not a full interactive FPS benchmark.
|
||
|
||
`test_city_light_probe.ps1` also links a tiny assembly probe directly against the
|
||
shipping object and checks signed color differences (green/blue surfaces must
|
||
not become warm emitters). `check_card_exit_build.py` compares decoded card
|
||
handlers and engine dispatch in the test and shipping objects, accounting for
|
||
symbol relocations and internal call addresses.
|