KAZIK/docs/DARTS.md
Artvasil09 41ba8f46ed feat: add rooftop city and optimize native terrace rendering
Add rooftop elevator, lounge, volumetric city, river and animated traffic. Prune invisible mesh faces, clip CPU surfaces, streamline compositing and add automatic/F8 roof quality profiles with renderer diagnostics.

Include dartboard/reticle improvements, tracked fortune orb numerals and fate-session visuals, native regression tests, compatible jukebox IDs and updated shipping executables.
2026-10-26 23:20:35 +03:00

75 lines
3.8 KiB
Markdown

# Darts
The board is on the first-floor wall near the billiards area. It opens a native
MASM darts match against Max. No Python, browser, external engine or network is
required by the game.
## Match
- Both players start at 500. First to reach exactly zero wins.
- Three darts per visit. Visits alternate between the player and Max.
- Any scoring ring can finish. This is a custom 500-point straight-out format,
not tournament 501 double-out.
- A negative remainder is a bust: the entire visit is cancelled and play passes
to the other player. A remainder of one is valid.
- The casino bankroll and saved profile are not changed by this game.
## Controls
- Move the mouse to aim; the outlined cross marks the current hit point.
- Hold the left mouse button to draw back, release to throw.
- The hand and cross have the same smooth, mixed-phase sway. Holding the aim
longer than 1.2 seconds gradually increases fatigue, capped after 4 seconds.
Precise mouse motion is retained independently of the hall's 320px UI grid.
There is no extra
random scatter after releasing the button.
- The target sector appears beside the turn indicator (S, D or T).
- Tab opens/closes the live score sheet and pauses the current action.
- R or the lower-right button starts a new match. Escape returns to the hall.
## Visuals
The throwing line is 2700 board millimetres from the target. The initial lens
is adjusted so the board is only about 7 percent smaller on screen than the
previous 2370mm/900px view. Texture resolution and scoring geometry are preserved.
The v2 board keeps the same physical bounds and 512px pack dimensions,
but uses larger high-contrast numerals, supersampled wires and lower grain.
The reticle is a 7x7 footprint containing only nine one-pixel marks, with no thick
outline. Individual marks adapt to bright/dark sectors for readability.
Max watches the same moving aim point for a short release window;
he does not reroll a hit or bypass the sway.
The independent
scene camera follows one immutable parabolic trajectory, passes beside the
dart, returns behind it, pauses at the hit, then returns to the throwing line.
The small fading trail samples the same trajectory.
Whole-arm raster animation includes the elbow, draw-back, release and empty
follow-through. A single rigid canvas transform aligns the held dart with the
target; individual limb pieces are never stretched or assembled.
The flying dart uses sixteen detailed camera-relative raster views. Its needle
anchor is registered per view, so the tip meets the scored board coordinate.
It is not drawn from flat-colored geometric triangles.
The lounge has actual ray-projected front/side/back walls, floor and ceiling.
Chairs and the lamp table occupy fixed world planes, rather than turning to
face the camera. The wall chalkboard is rewritten with real scores and recent
visit history, including when seen from the moving camera.
## Assets And Checks
`tools/generators/pack_darts.py` is an offline asset packer. It builds the exact
20-sector board and packs the generated arm, dart views and lounge artwork.
Artwork provenance and prompts are in `assets/sprites/darts/prompts-v1.md`.
`C:/Python314/python.exe tools/tests/check_darts.py` compiles the actual MASM
scene into a native fixture and checks 67 scoring vectors, 20 complete bot
matches, busts, per-player score isolation, immutable hits, real mouse-release
events, fine high-resolution mouse input, sway/fatigue, board footprint, Tab
behavior, camera motion and profile isolation. It renders native
640x480 framebuffers, a contact sheet and a GIF under `build/darts/`.
`--parity` compares tested procedure instruction/relocation signatures to the
full shipping assembly object. The hall fixture additionally covers interaction
dispatch and the unchanged stairs, doors, bar and fortune room.