New Acoustics system (globals/acoustics.gd):
- Occlusion: rays from listener to source collect up to 3 occluding bodies;
each surface's material adds transmission loss and lowers the lowpass
cutoff. A gunshot through wood stays warm (-8dB, 1.4kHz), brick muffles
hard (-15dB, 600Hz), concrete harder (-18dB, 450Hz), metal keeps more
highs (-11dB, 1kHz), glass barely muffles (-5dB, 2.6kHz). Applied via
each AudioStreamPlayer3D's attenuation filter.
- Early reflections: loud sounds (gunfire, explosions) probe 8 directions
for nearby walls; each close surface plays a quiet, delayed (path/343ms),
material-filtered copy from the mirror point — shots audibly slap back
off structures so players can triangulate. Sub-30ms echoes are skipped
(they perceptually merge with the direct sound).
- Surface classification: builder-set acoustic_material meta -> node-name
keywords -> metallic-material inference -> concrete default; cached.
Integration:
- AudioManager.play_3d applies occlusion at fire time and re-filters all
playing positional sounds every 0.12s (walking behind a wall mid-sound
audibly muffles it); flight loops opt in via "acoustic_occluded" group
- Remote players' gunshots were entirely SILENT — rpc_play_fire_effects now
plays the right weapon's shot at the shooter's position, occluded and
reflected like everything else
- Remote players' footsteps were also silent — now positional + occluded,
cadence scaled to their speed
- Test level tagged: brick arena walls, wooden platforms/obstacles, metal
wall-run corridor/rails/dash platforms; dust2 sandstone reads as brick
Tests: debug/acoustics_test.gd (12 checks: per-material loss ordering,
multi-wall stacking, reflection delay/filter, name classification) — all
pass; movement 11/11; smoke 0 failures.
Co-Authored-By: Claude Fable 5 <[email protected]>
Audio:
- All ballistic weapons now fire real firearm recordings (The Free Firearm
Sound Library, CC0): AK-47 uses actual AK-47 shots, M4=AR-15, MP7=PPSh,
AWP=Mosin Nagant, DMR=Savage 10, shotgun=Mossberg/Nova, nailgun=Ruger .22,
rocket/mortar layered with real booms. Plasma keeps its energy sound.
- Reload is real lever-action foley instead of interface clicks
- Projectile flight loops localized: unit_size 50->6, max_db 6->0,
max_distance 45 — no more mortar/rocket drone in every player's ear;
loops also got proper loop_end (was a zero-length loop)
- Flight loops lowpassed into soft whooshes instead of sci-fi engine drones
- Menu music converted to OGG with native full-track looping (47s seamless,
replaces the broken manual WAV loop points)
Animations (movement-shooter pass):
- Rebaked miku.glb with 4 new clips from the CC0 library: Grapple (swim
reach — reads as a swing), PistolIdle (armed idle with weapon up),
PistolShoot, PistolReload
- Armed idle: standing with a weapon now uses PistolIdle instead of
arms-at-sides
- Slide pose overhaul: legs kick out front (lead/trail thighs, knees
straighten) — feet-first slide instead of "sitting in a crouch"
- Wall run: forward drive pitch + inner arm reaches out to the wall
- Per-transition blend times: dash/hit/jump cut fast (0.05-0.08s),
locomotion cross-fades smoothly (0.2-0.25s); CrouchWalk speed-scales
Fixes:
- Third-person camera no longer renders the first-person viewmodel layer
(the gun/arms floated in front of the third-person view)
Verified: 11/11 movement tests, smoke test 0 failures (17 clips resolved),
third-person run screenshot shows grounded animated model, no floating gun.
Co-Authored-By: Claude Fable 5 <[email protected]>