Add rooftop elevator, lounge, volumetric city, river and animated traffic. Prune invisible mesh faces, clip CPU surfaces, streamline compositing and add automatic/F8 roof quality profiles with renderer diagnostics. Include dartboard/reticle improvements, tracked fortune orb numerals and fate-session visuals, native regression tests, compatible jukebox IDs and updated shipping executables.
123 lines
7.6 KiB
Markdown
123 lines
7.6 KiB
Markdown
# Rooftop Lounge "Vysota"
|
|
|
|
The terrace is an assembly-only walkable hall level (`HALL_ROOF = 4`), reached
|
|
by a real elevator cabin near the north wall to the right of the cabaret.
|
|
Existing games, basement stairs, scratch tickets and fortune room stay in place.
|
|
|
|
## Travel
|
|
|
|
Use E at the exterior call panel, then walk into the open cabin using the normal
|
|
movement keys. The inside panel offers the roof or the main hall depending on
|
|
the current landing. E starts a trip only when the player is fully inside.
|
|
Doors physically slide apart into projecting pockets. Movement is blocked during
|
|
closing/travel, while looking around remains possible. After one second of
|
|
closing and 3.2 seconds of travel the destination changes, doors open, and the
|
|
player walks out. Position, angle and standing height do not drift during travel.
|
|
|
|
An idle open door closes after 2.8 seconds away from the elevator. It reverses
|
|
if the player re-enters its approach, rather than shutting through them. Arrival
|
|
keeps the cabin coordinates and opens the other landing; there is no forced
|
|
camera path or automatic walking. The illuminated physical indicator changes
|
|
during travel and shows `1` or `R` at the landings.
|
|
|
|
## Terrace
|
|
|
|
- A fully volumetric Petersburg-inspired city, seen from a sixty-metre tower.
|
|
Only the sky is a painted texture; buildings, streets, roofs, parks, canal,
|
|
bridges, monuments, cars and boats are real world-space geometry.
|
|
- Finite HD decking, low railings and an open sky, rather than an indoor ceiling
|
|
or a floor extending to infinity beyond the roof edge.
|
|
- Three three-seat sofas, four armchairs, three bar stools and three stools at
|
|
a rail-side standing counter: 13 selectable furniture positions, 19 seat places.
|
|
- Seven coffee tables, eight potted trees, flowering troughs, eight varied guests,
|
|
two supported strings of lanterns, and a slatted pergola over a working bar.
|
|
- Sofas and chairs use closed native volumes with separate padded cushions.
|
|
Planter boxes contain soil and multiple foliage clusters at different depths.
|
|
Whole-object photographs are not pasted onto every furniture face.
|
|
- E at a railing eases into a leaning pose, with thirty-two hand/forearm frames
|
|
anchored to the actual rail height. E or movement releases the rail.
|
|
- While leaning, mouse, arrows and A/D can turn up to 73 degrees either way. The
|
|
rail contact is projected in world space so the hands do not follow head yaw.
|
|
- Guests walk on the terrace with collision checks, pauses and walking frames.
|
|
- In the open first-floor elevator, 1 selects sunset and 2 selects night.
|
|
- E sits/stands; walking forward/backward also stands and restores the approach
|
|
position. Stool views use bar height and rail-side stools face the city.
|
|
- The bar reuses the existing mixing/drinking system and prices (100/200/free
|
|
water). Its camera is temporarily positioned at the new counter and completely
|
|
restored after rendering. Drinks are the only new-location actions that spend
|
|
or save bankroll, through the existing purchase routine.
|
|
|
|
## Assets And Build
|
|
|
|
Generated sources are under `assets/sprites/rooftop/`; runtime ANM1 packs are under
|
|
`assets/animations/rooftop/`. Run `tools/generators/pack_rooftop.py` offline to pack
|
|
the sky, materials, semantic night-window textures, ground lighting, hands,
|
|
district layout and collision map. Run `pack_rooftop_gl.py` afterwards to build
|
|
the static city and moving vehicle triangle meshes. Python, Pillow, NumPy and
|
|
OpenCV are offline developer tools, not game dependencies.
|
|
|
|
The native MASM HD city renderer uses the Windows system OpenGL library, a
|
|
private hidden rendering context and an offscreen framebuffer up to 1280x960. It uses
|
|
textured mesh display lists, mipmaps, normals, directional dusk lighting,
|
|
distance fog and a separate emissive-window pass at night. The existing terrace,
|
|
hands and HUD are composited by direct native pixel copying into one DIB. Other games retain
|
|
their existing renderer. If the required GL capabilities are unavailable, the
|
|
assembly software city renderer remains the fallback. No C/C++ renderer, model
|
|
engine, browser runtime, cloud service or runtime downloader is introduced.
|
|
|
|
The eastern avenue is now a broad river with raised embankments, promenades,
|
|
trees, piers, three full-span bridges and further riverfront quarters. Water
|
|
texture flow and six moving boats keep it from being a static blue plane.
|
|
Street rectangles are clipped into disjoint junctions rather than coplanar,
|
|
overlapping strips. The terrace deck uses mipmapped HD geometry rather than
|
|
the unfiltered software floor when HD rendering is available. City, foreground
|
|
and HUD are composed into one offscreen DIB and copied to the window once;
|
|
there is no intermediate bare-city frame. glReadPixels supplies the required
|
|
readback synchronisation, without a redundant preceding glFinish.
|
|
|
|
## Rooftop Performance
|
|
|
|
- F8 cycles automatic, eco (640x480) and detailed (1280x960) city rendering.
|
|
Automatic starts at 960x720 and drops to eco after sustained frames over 34 ms.
|
|
Switching back to automatic retries 960x720. The scene, view distance, collisions
|
|
and gameplay do not change with the render profile; other rooms are unaffected.
|
|
- The offline mesh packer discards only triangles that face away from every
|
|
possible rooftop eye position. Runtime back-face culling handles head turns.
|
|
The static mesh now contains 35,386 triangles instead of 53,695.
|
|
- CPU foreground surfaces use projected screen bounds and camera-facing box
|
|
sides. The final frame avoids an extra GDI scaling/alpha-blending pass.
|
|
- Mipmap generation is optional on older OpenGL drivers. If hardware rendering
|
|
cannot initialise, the software ground renderer still draws roads and water,
|
|
including solid-colour fallback surfaces when a texture pack is absent.
|
|
- `runtime/roof-renderer.txt` records the local GL vendor, renderer, version,
|
|
initialisation stage, city-pack availability and render width. It contains no
|
|
personal data and is not sent anywhere. Stage 0 means successful initialisation.
|
|
|
|
Integrated Intel graphics use shared system memory; the small dedicated-memory
|
|
figure alone is not a useful rendering budget. Actual laptop performance must be
|
|
checked on that machine, not inferred from the desktop benchmark.
|
|
|
|
The art direction takes atmospheric inspiration from the rooftop reference:
|
|
https://www.loftprojectetagi.ru/visitors/krysha/ . It is an original game backdrop,
|
|
not an exact survey or reproduction of that venue. Generated source images are
|
|
preserved alongside the packer metadata. Older city panoramas and furniture
|
|
reference photographs remain source art, not the active city/furniture renderer.
|
|
|
|
Runtime sources: `src_graphics/rooftop*.inc` and the shared MASM city primitives.
|
|
The normal MASM build and root/bin publisher ship the feature. Rebuilding the
|
|
existing installer is separate from updating the ordinary game executable.
|
|
|
|
## Verification
|
|
|
|
`tools/tests/check_hall_expansion.py` compiles the real current MASM routines and
|
|
tests closed/open door collision, manual cabin entry/exit, both trips, timing,
|
|
camera/position/bankroll preservation, furniture/rail bounds, seating, automatic
|
|
closing, thirty repeated bar renders, asset loading/freeing and native screenshots.
|
|
|
|
It exports a 70x78 walk grid from actual `CanWalk3D` calls. Reachability checks
|
|
verify a connected route from the cabin to the bar, both sides of the terrace,
|
|
and every seating approach after the denser layout. Framebuffer captures are
|
|
written under `build/hall-expansion/roof-*.png`. `--parity` verifies tested
|
|
procedures against the full shipping object before publishing.
|
|
The native harness also checks all three resolution profiles, automatic downgrade,
|
|
F8 switching, and software roads/water with both present and missing city textures.
|