fix(audio): portal cues fire on the sequencer's sound events, not the tunnel visuals
Slice A4 hung UI_EnterPortal on TeleportAnimEvent.EnterTunnel — the first tunnel-family frame — so the cue landed a whole TunnelFadeIn after retail plays it. Retail's site is gmSmartBoxUI::BeginTeleportAnimation @0x004D638E, i.e. Begin(), which the sequencer already marks as TeleportAnimEvent.PlayEnterSound. That event has existed since the R6 portal-space work, complete with a 'Begin(): sound_ui_enter_portal' comment, and no consumer has ever handled it — the switch in LocalPlayerTeleportController had cases for Place, EnterTunnel, PlayExitSound and FireLoginComplete only, so the sequencer emitted PlayEnterSound into nothing. A4 filled the gap in the wrong place rather than filling it. Both cues now go through named presentation methods driven by the matching events: PlayEnterCue on PlayEnterSound, PlayExitCue on PlayExitSound (the TunnelFadeOut -> WorldFadeIn edge, @0x004D7405, the same tick the world viewport is revealed). EnterTunnel/ExitTunnel are visuals again. The exit cue was already firing at the right moment, since ExitTunnel was called from inside the PlayExitSound case — correct by accident, explicit now. Found by the user asking when the recall cues play. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
aa82ff7bf1
commit
2914e43aa9
3 changed files with 73 additions and 10 deletions
|
|
@ -351,6 +351,15 @@ to ~215 conformance tests written against byte-decoded values.
|
|||
`ExtractedUpdateOwners_DoNotRetainAnonymousCallbacks` rejected an
|
||||
`Action<float>` frame hook and forced the typed `IAmbientFramePhase`.
|
||||
|
||||
**A4 correction (2026-08-08, from a user question):** the enter cue was hung on the
|
||||
`EnterTunnel` event — the first tunnel-family frame — instead of the sequencer's
|
||||
`PlayEnterSound`, which is `Begin()` and is what retail's
|
||||
`BeginTeleportAnimation` @ `0x004D638E` plays. That delayed it by a whole
|
||||
TunnelFadeIn. Both cues now fire on the sequencer's own dedicated sound events
|
||||
(`PlayEnterSound` had been emitted and dropped by every consumer since R6), and
|
||||
`PortalCues_FireOnTheSequencersOwnSoundEvents_NotOnTheTunnelVisuals` pins the
|
||||
moments. The exit cue was already correct.
|
||||
|
||||
**Still owed:** the user listening gate (A2 falloff, A4 cues, A5 ambients) and
|
||||
the connected gates for A3/A4. Open rows: AP-173, AP-174, TS-64, TS-65, TS-66,
|
||||
TS-67, TS-9 (re-scoped), #321.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue