KAZIK/docs/native-clover.md
Artvasil09 881a0061dc Add native NPC visitors with contracts, Clover slots, Pyramid, and party table scenes
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.
2026-10-13 09:47:33 +03:00

3.5 KiB

Native Clover 5x3

The runtime is MASM x86 only. native_clover.inc owns input, five timed reel strips, clipping, final-board evaluation, settlement, paid-combo selection and rendering. The original assembly EvaluateSlotCombos is reused directly; the console GameSlot, its sleeps, console output and payout functions are never called by this mode.

Rules

Fifteen final symbols are sampled once when the stake is debited. Symbol values: clover 3, lemon 2, cherries 2, bell 3, diamond 5, chest 5, seven 7. Each paid pattern contributes its factor times its symbol value. Contributions are added; a pattern entirely covered by earlier paid patterns is not paid again. Original order: jackpot, eye, sky/earth, up/down arrows, rows 5, rows 4, verticals, diagonals, rows 3. The jackpot is additive, matching the original game, not a replacement for the remaining matches.

Displayed multipliers and credited payouts include any returned stake. The separate net field is actual credit minus the frozen stake. A bank-cap-clipped payout displays only the money actually credited. The bank cap is 1,000,000,000. 777 uses the same gross/net convention, with neutral feedback for a stake refund, not victory feedback. Its unchanged strip/table has theoretical gross RTP 90.025% under independent uniform stop selection; this is not a guarantee for the actual pseudo-random generator or any individual session.

Interaction

Space/Enter spins, W/S or Up/Down change the idle stake, P opens/closes the pay table, Left/Right select an actually paid combo. All controls have clickable equivalents. Escape first closes the pay table; during a paid spin it queues leaving until settlement/save completes, otherwise it returns to the hall. No pause menu or console fallback is opened.

The result grid highlights the selected paid mask, with its type, multiplier, index/count, aggregate multiplier, gross payout and net separately. Only the middle line of the separate 777 machine pays; its payout panel says the stake is included.

Assets

Generated with the built-in image generator, then copied to assets/sprites/clover/cabinet-v1.png and symbols-v1.png. The cabinet is opaque 640x480, symbols seven alpha-tested 56x56 frames. pack_clover_assets.py is an offline packer, not a non-assembly game implementation.

Cabinet prompt: wide front-facing Clover machine in a richly furnished retro casino, emerald enamel/worn brass/crimson trim, crisp textured Doom-era pixel art; one large blank near-black rectangular reel bay, no baked symbols, dividers, letters or people, straight-on framing. Symbol prompt: transparent equal-cell 4x2 pixel-painted atlas, clover/lemon/ cherries/bell on top, diamond/chest/red seven below, final cell empty; isolated, centered, consistent apparent size and readable silhouettes, no grid/background.

Verification And Scope

Independent offline fixture oracle covers 553 boards, including all seven jackpots and each pattern. Native tests cover 500 paid spins at four update rates, frozen RNG/stake, exact final tape rows, monotonic stopping, queued exit, idempotent payout, bank cap, missing funds and six framebuffer captures. check_clover.py --parity checks assets, real framebuffer clipping, all fifteen complete cells, selected paid-mask changes and tested/shipping assembly code.

Native talisman modifiers and legacy console achievement/dance side effects are not ported by this change. NPC challenges count native slot rounds and classify only positive net results as wins. No claim of completing every legacy Clover feature or its balance is made.