Implement 32x32 BFS visitor navigation and daily contracts system with companion .npc journals; add native assembly scenes for Clover slots, Pyramid cards, Blackjack Party and Russian Party; package animation and sprite packs; add comprehensive offline test suites and rebuild shipping binaries.
59 lines
3.3 KiB
Markdown
59 lines
3.3 KiB
Markdown
# Native Russian Roulette: Multiple Opponents
|
|
|
|
## Rules
|
|
|
|
The existing one-opponent game remains the default. Ready-screen controls select
|
|
one, two or three opponents; Left/Right changes the selection. The existing
|
|
1/2/3 keys still choose the number of loaded cartridges. Mouse controls also
|
|
start the round, fire on the player's turn, and open the exit confirmation.
|
|
|
|
The round locks its participant count and player's stake at the start. In the
|
|
group variant, all participants use one cylinder in cyclic order. Each takes
|
|
their own turn; there is no selectable target. A live shot consumes that loaded
|
|
round and removes the current participant. Empty chambers pass to the next
|
|
remaining participant, skipping eliminated seats. The last surviving player
|
|
receives the initial stake times the initial participant count. Opponent stakes
|
|
are virtual casino stakes, not withdrawals from the player's account.
|
|
|
|
An exhausted cylinder is reloaded and spun without another payment. Reloading
|
|
does not restore eliminated opponents or change the locked pool. The player's
|
|
elimination preserves the existing glitch/dark/G-man/return sequence. The match
|
|
is recorded once for NPC challenges; intermediate opponent eliminations are
|
|
not extra paid wins. Confirmed early exit forfeits the already-paid stake.
|
|
|
|
Escape opens the shared leave/continue dialog in both solo and party modes;
|
|
the dialog freezes the scene and cylinder. Cancelling resumes the same turn.
|
|
Leaving after settlement does not make a second payout or challenge event.
|
|
|
|
## Graphics
|
|
|
|
Three distinct neutral seated opponents use six frames from
|
|
`assets/sprites/roulette/participants-v1.png`, generated with the built-in image
|
|
generator and packed offline into `assets/animations/roulette/participants-v1.bin`.
|
|
The active seat is named/highlighted; an eliminated seat fades and becomes empty.
|
|
The existing first-person player and cylinder animations are retained.
|
|
|
|
The party view passes the existing revolver along the tabletop. The opponents
|
|
currently have idle/conversational poses, not complete individual cinematic
|
|
firing animations. The attempted new firing-pose sheet was rejected by the
|
|
image tool and is not a shipped asset. No replacement has been disguised as a
|
|
full new shooting animation. One-opponent firing remains the existing scene.
|
|
|
|
Neutral sprite prompt: three waist-up adult casino guests, bald waistcoated
|
|
man, dark-haired charcoal-jacketed man, older gray-haired brown-jacketed man;
|
|
three columns by two rows, attentive idle and calm palm-up conversation;
|
|
same identity/scale/anchors, transparent background, crisp late-1990s pixel
|
|
sprites, amber light and crimson shadows; no objects, weapons, wounds or text.
|
|
|
|
## Verification
|
|
|
|
`russian_party_test.inc` covers 600 complete group matches at 16/50/250 ms
|
|
updates, 1..3 loaded rounds, elimination order, unchanged cylinder between
|
|
empty chambers, reload-without-payment, locked-pool settlement, render purity,
|
|
all active pre-result exit phases, zero bank and invalid bullet count.
|
|
The existing 2000 solo-round tests still run. Native captures and tested/shipping
|
|
procedure parity are checked by `check_russian_party.py --parity`.
|
|
|
|
The runtime remains MASM. Python only packs assets and checks captures;
|
|
the existing C# launcher remains packaging, not game code. Multiplayer poker
|
|
and Buckshot are still separate unfinished features.
|