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.
75 lines
3.8 KiB
Markdown
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.
|