KAZIK/docs/BOWLING.md

63 lines
3.2 KiB
Markdown

# Bowling Lounge
The bowling lounge is a walkable room, not a player-controlled bowling minigame.
Enter through the wide opening in the north wall of the main casino, near the
slot-machine side of the hall. Walk through to enter or leave; no interaction
button or timed stair/elevator animation is used.
## Room
- Eight lanes with wooden approaches, gutters, ten pins and overhead displays.
- Three occupied lanes and five free lanes.
- Paired sofas, ball returns, dining booths, a staffed bar and circulating guests.
- All ten visitors use the shared character cast, including seated, drinking,
walking, pick-up, throwing and return animations. See `SHARED_CHARACTERS.md`.
- E sits on an available lounge seat or gets up. W/S also gets up.
- The bar uses the existing drink purchase flow and restores the room camera.
All room geometry, rendering, input, scoring and visitor simulation run in MASM.
Furniture is built from fixed world-space surfaces, not rotating room billboards.
Human sprites retain the game's existing 2.5D presentation.
## Simulation
Each occupied lane owns a timer, rack mask, two players, frame counters and roll
history. The sequence is pick-up, approach/release, ball travel, pin impact,
pinsetter sweep, return and a pause before the next attempt/player.
Scoreboards use native ten-frame bowling scoring, including strike/spare bonuses
and tenth-frame bonus balls. These exhibition games do not change the bankroll.
The room owns its random state; visitor games do not consume the casino RNG.
Simulation pauses when the player is in an unrelated room. Artwork is loaded on
the first visible entrance/visit, retained for subsequent visits and freed with
the other hall assets. No city mesh or rooftop OpenGL pass is used here.
## Sources And Rebuild
- `src_graphics/bowling*.inc`: native room and lane simulation.
- `tools/generators/pack_bowling.py`: offline atlas packing, frame normalization,
in-between frames and furniture/collision tables.
- `assets/sprites/bowling/`: retained image-generation sources.
- `assets/animations/bowling/`: packed shipping assets.
Image-generation source briefs: twelve bowling-room material swatches (maple,
teal/coral textile, acoustic panels, mural, marble, metal and ball-return front);
a whole-body male approach/underarm-release/pick-up sequence; the corresponding
female bowler sequence; four distinct seated adult visitors in idle and
conversation/drinking poses. The edited female sheet preserves transparency.
These are original generated assets, not extracted FNAF artwork.
Run the offline packer with Python, then build the MASM executable normally.
## Checks
`tools/tests/check_hall_expansion.py --bowling-only` compiles fresh assembly and
checks entrance visibility, walkable access, both room transitions, lane/furniture
collision, sitting/restoration, 600 simulated seconds of lane lifecycles, perfect
game/all-spare/open-frame score vectors, and captures room/throw screenshots.
The complete hall suite includes the same bowling checks alongside existing
stairs, doors, rooftop, fortune-room, bar and cabaret regressions. `--parity`
compares the tested procedures with the shipping assembly object.
Screenshots are native framebuffer captures, not a substitute for final manual
playtesting on the target laptop.