KAZIK/docs/FORTUNE_SESSION.md
Artvasil09 23dc40ee5c feat: implement native darts mini-game, AI observer mode, and fortune session assets
- Darts: native 500-point match against Max with sway/fatigue mouse aim, parabolic throw camera, raster arm animations, and 16 camera-relative flying dart views

- AI Observer: autonomous spectator mode for Hold'em, Blackjack, Durak, and Billiards with profile isolation and playback controls

- Fortune Session: raster sprite packs, mist/orb animations, tarot divination spreads, and pack tools

- Hall Integration: wall dartboard in lounge, observer terminal dispatch, and bot turn hooks

- Packaging & Verification: updated installer streaming hash, synchronized launcher, passing check suites and release smoke checks
2026-10-24 22:10:25 +03:00

58 lines
3.2 KiB
Markdown

# Seated Fortune Session
The room interaction opens a fixed first-person view across the table. No player
position, camera or bankroll state is modified. Escape or Exit returns to walking.
All runtime input, random card selection, state transitions and rendering are MASM
in `src_graphics/fortune_dialog.inc`; Python only compiles offline image assets.
## Tarot
Enter a question (up to 240 CP1251 characters), then Ask or Enter. The question
stays visible under the table for the entire reading and cannot change midway.
Three distinct major arcana are selected in assembly, each with an orientation.
The 22 symbolic illustrations have separately packed 180-degree reversed faces.
Sequence: shuffle 3.2 s; deal cards individually 1 s each; turn a card over 0.8 s;
show its name, orientation and honest unavailable explanation 3.6 s; repeat for
the next two cards; show the overall-answer placeholder; finish. Continue can
advance a completed speech, never skip a deal or a flip. Again clears the question
only after completion; Selection can return to the choice of scenes at any time.
Speech is composited beside the teller, not an OS window. Its border grows with
the visible text. Characters reveal every 28 ms with a short upward pop. Rendering
does not advance timers: the session updates from the game clock, with bounded
steps after stalls. No neural worker or algorithmic reading generator is called.
## Crystal Ball
The second selection raises a crystal ball and animates gloved hands with swirling
blue mist. It ends with an explicit unavailable-result line. There is no real
student grading, inference of merit, identity form or automated academic decision.
Again replays the visual sequence. This limitation is deliberate, not a hidden
random grade presented as a judgement.
## Assets
Generated source art and production prompts: `assets/sprites/fortune/`.
Offline packer: `tools/generators/pack_fortune_session.py`.
Runtime packs: `assets/animations/fortune/` (ANM1 format).
Forty authored poses are arranged on one shared anchored 8x5 sheet. Shared-canvas
in-betweens yield 64 shuffle, 32 deal, 32 gesture and 32 orb-hand frames. Sixteen
mist frames, 44 oriented card faces, a back and a 640x480 room complete the scene.
Art loads only when seated and all seven packs are freed on exit/shutdown. The
seated view is independent of the walking room's existing asset packs and map.
## Verification
Run `C:/Python314/python.exe tools/tests/check_hall_expansion.py` after packing.
The fresh native x86 harness exercises real WM_CHAR input, length/backspace,
empty/double submission, all stage transitions, card uniqueness, speech growth,
question persistence, crystal-ball stages, exit during animation, asset cleanup
and unchanged player position/bank. It writes actual framebuffer BMP/PNG captures
and a 64-frame shuffle GIF under `build/hall-expansion/`. Python additionally checks
native-frame differences, question pixels, pack integrity and reversed artwork.
`--parity` checks these tested procedures against the shipping game object.
The old multi-gigabyte neural ZIP is not rebuilt by this feature. Distributions
must include the new `assets/animations/fortune/` directory with the updated game.