Add classic HUD, auto reload, furniture pathfinding and death flatline
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# Classic HUD, automatic reload, furniture navigation, death audio
|
||||
|
||||
## HUD
|
||||
|
||||
`scripts/game_hud.gd` replaces the debug-style text block with translucent black
|
||||
panels and amber classic-FPS typography. Health and magazine numbers are large,
|
||||
low health (<=25) and low ammo (<=5) turn red. Reload status is explicit; wave,
|
||||
score and grenade cooldown are compact at top center. Panels are above touch
|
||||
controls; every HUD Control ignores mouse events so the Web start gesture works.
|
||||
Desktop instructions are hidden in touch mode. `30 / 30` means loaded/max magazine,
|
||||
not a fictional reserve-ammo counter (reloads remain unlimited).
|
||||
|
||||
## Automatic reload
|
||||
|
||||
The last shot triggers `start_reload()` immediately. An empty magazine detected in
|
||||
physics also triggers it. Guarded against duplicate requests, full magazines and
|
||||
death. Existing duration1.57s and reload sounds remain; no refill after death.
|
||||
Manual R and touch reload are unchanged.
|
||||
|
||||
## Shared grid navigation on the room's XZ floor
|
||||
|
||||
`scripts/room_navigation.gd` builds a shared35x35 AStarGrid2D with0.5m cells.
|
||||
Obstacles come from `office_props` box collisions transformed into world-space
|
||||
XZ rectangles (including rotated chairs). Rectangles are expanded0.60m to protect
|
||||
the zombie capsule radius0.35m plus grid/edge margin. Diagonals are allowed only
|
||||
when both adjacent cells are free. Grid setup calls update BEFORE solid flags,
|
||||
since update clears them.
|
||||
|
||||
Targets/start cells inside expanded obstacles are snapped to the nearest free
|
||||
cell. Each zombie caches direct visibility or an A* route, refreshing approximately
|
||||
every0.55–0.67s with staggered intervals rather than every physics frame. Clear
|
||||
routes use direct pursuit; blocked routes follow waypoints. Entry window tween,
|
||||
animations, gravity, attack range and corpse behavior remain unchanged.
|
||||
Melee also checks a world-geometry ray below desk-top height: chest-high rays can
|
||||
pass over tables even when the actors cannot physically approach each other.
|
||||
|
||||
This map is for static furniture: moved/new props require rebuilding it. Existing
|
||||
body collisions still separate zombies, but this is not a full crowd avoidance
|
||||
solver. No mobile FPS guarantee is made. The algorithm uses the existing simple
|
||||
flat room and does not require runtime navmesh baking or native extensions.
|
||||
|
||||
Reference: https://docs.godotengine.org/en/stable/classes/class_astargrid2d.html
|
||||
|
||||
## Death sound
|
||||
|
||||
Copied the ORIGINAL local Half-Life `valve/sound/fvox/flatline.wav` to
|
||||
`assets/audio/fvox/flatline.wav`, no source modification. SHA256:
|
||||
`6fc00ca83a1310b8ff373a77ff895c5396c35416c00a974a0fa55b3fb14bd772`.
|
||||
Duration3.994s, mono11025Hz. Played once at-9dB on death alongside the existing
|
||||
player vocal; nonpositional so it remains audible through the camera fall.
|
||||
|
||||
## Verification
|
||||
|
||||
`tools/test_gameplay_improvements.gd`: HUD values/colors/touch hints, immediate
|
||||
last-shot reload, duplicate-request guard, physical pursuits around both desks,
|
||||
chairs (including rotated chair) and barrel, blocked melee through desk,
|
||||
idempotent flatline and no refill after death. Passed headless and with real
|
||||
PulseAudio output. All eight prior test suites pass. Touch screenshot of new HUD
|
||||
inspected via test_office_atmosphere --screenshot --touch.
|
||||
Existing test-shutdown resource-in-use warnings remain. Device touch feel and
|
||||
smartphone performance still need real-device validation.
|
||||
Reference in New Issue
Block a user