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.
2.5 KiB
Native world and billiards update
All game code in this update is x86 MASM. Python only packs artwork and checks framebuffers. Existing C# launchers are packaging utilities, not the game engine.
Street
- The camera walks on the north pavement after crossing from the alley.
- Traffic waits for the crossing and continues from its stopped position.
- Only the two entrance guards remain. Road objects no longer use guard sprites.
- The avenue continues through an intersection into staggered city blocks. No distant building spans the entire road.
- Per-pixel depth of distant buildings survives foreground depth preparation.
- Seven storeys share one roof/texture projection and taller floor spacing.
- Walking pedestrians, benches, hydrant, mailbox, newspaper box, bollards, planter, parking meter and fence use separate depth-tested sprites.
Casino
- The bar can be activated from its entire serving edge, but not from staff space.
- Highball, red cocktail and water use separate preparation and drinking frames.
- Cabaret has physical stage sides, back curtain, wings, steps and a truss. Its former full-stage billboard is not drawn. Players cannot enter the stage.
- Native regression checks verify visitor anchors are not inside map walls.
Billiards
- Click or drag on the cloth to aim; left/right arrows refine the direction.
- Click or drag the force slider, or use up/down arrows, before shooting.
- Space or the Shot button uses the selected power without wrapping its value.
- The aim guide uses Q16.16 consistently with the cue and physics positions.
- Balls are captured only within visible 8-pixel pocket mouths. Corner jaws and cushion openings agree with these mouths; outer bounds prevent escaped balls.
- Potted balls visibly sink, then remain in a tray. A scratched cue is placed through the normal ball-in-hand mode instead of being silently discarded.
- A break eight is re-spotted with full ball-diameter clearance.
Offline validation
tools/tests/world_regression.inc exercises the complete camera/car route,
front/staff bar access, stage collision, six pocket approaches, force input and
100 different-angle/different-force breaks through actual native functions.
tools/tests/check_hall_frames.py checks new packs and sixteen native frames,
including three distinct drinks. Screenshots are in build/actions.
Art
Built-in image_gen generated the versioned sources in assets/sprites/hall.
Prompts: assets/sprites/hall/prompts-v4.json. Observed atlas gutters, true alpha,
common scales and foot anchors are normalized by pack_world_v4.py.