Skip to content

Conversation

@dpiers
Copy link

@dpiers dpiers commented Dec 2, 2025

Fixes #1063

Root Cause

AS_Init() dynamically allocates pMap. When snd_restart runs:

  1. S_Shutdown()AS_Free() sets aSets = NULL but leaves pMap intact
  2. S_Init()AS_Init() sees aSets == NULL, allocates a new empty pMap, discarding all soundset names cgame had registered
  3. AS_ParseSets() finds an empty pMap and loads nothing

The SP codebase already uses a static singleton for pMap (has since original Raven source), avoiding this issue.

Affected Sounds

All 166 ambient sound sets in sound/sound.txt: bmodel sounds (doors, platforms, elevators), general environmental ambience, and local positional sounds.

Fix

  • Use a static singleton for pMap in MP (matching SP implementation)
  • Call AS_ParseSets() in CL_Snd_Restart_f() to reload ambient sets after restart

Testing

  1. devmap mp/ffa5
  2. Verify door/ambient sounds work
  3. snd_restart
  4. Confirm sounds still play (previously went silent)

After snd_restart or EAX toggle, ambient sounds from doors, elevators,
and other brush model entities would go silent while other sounds
(music, weapons, footsteps) continued working. A vid_restart would
restore the sounds.

The ambient sound system requires a precache map (pMap) containing
soundset names that cgame registers during map load via
AS_AddPrecacheEntry(). When AS_ParseSets() runs, it only loads
soundsets that exist in pMap.

Root cause: When snd_restart calls S_Shutdown(), AS_Free() sets aSets
to NULL but leaves pMap intact. Then S_Init() calls AS_Init(), which
sees aSets is NULL and allocates a NEW empty pMap - discarding all the
soundset names that cgame had registered. The subsequent AS_ParseSets()
call finds an empty pMap and loads nothing.

Fix: Use a static singleton for pMap (matching the existing SP
implementation) so it persists across sound system restarts. Also call
AS_ParseSets() in CL_Snd_Restart_f() to reload the ambient sound
definitions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Ambient sound does not work after map change or audio reinitialization, but works if vid_restart

1 participant