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.
3.3 KiB
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.