Skip to content

fix(career): preserve MatchWin music across Escape - #33

Merged
hzqst merged 1 commit into
mainfrom
fix/career-matchwin-escape
Oct 26, 2026
Merged

hzqst merged 1 commit into
mainfrom
fix/career-matchwin-escape

Conversation

@hzqst

@hzqst hzqst commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

Career match victory music restarted after each Escape/GameUI round trip in Condition Zero. MatchEnd inherited Frame's generic close handling, which entered native match completion and faded the track, resetting its identity. When the completed server match resent MATCH, the native same-track guard could no longer suppress playback. The existing RoundEnd fix did not cover MatchEnd.

Apply the same Escape and exact case-insensitive Close/Cancel guards to MatchEnd's own vtable, sharing the forwarding helpers with RoundEnd. Preserve native business commands and all other keys, and roll back/remove all six hooks together. Add the two required MatchEnd gamedata records to the manifest and document the v20261026a catalog requirement. No shared Frame, music or server implementation is patched.

Fixes MetaHookSv/MetaHookSv#957

Dependency: GoldSrc_VibeSignatures v20261026a, fulfilling upstream symbol request #409.

Validation:

  • Normal MSVC x86 Release build with gamedata synchronization enabled; official sync/prune and manifest validation passed for all 23 snapshots.
  • All 10 CTests and 11 Python tests passed; pinned clang-format checked 72 files with no differences; git diff --check passed.
  • Windows czero engine 10210: six Escape round trips left actual MatchWin playback at one call. MATCH updates and StartTrack entries repeated, but currentTrack remained 5 and the native guard suppressed playback. A second victory followed by four switches after the 29.28-second track duration also produced no extra play call.
  • Native defeat Retry forwarded career_restart; victory Enter forwarded disconnect and returned to the Career map. All six vtable slots restored to native functions at shutdown; task processes exited with code 0.
  • Restored 44 original game files and verified their SHA256 hashes. Runtime evidence and backups remain local and ignored.

Limits: playback commands were instrumented; audio output and stream position were not captured. Credits and RoundEnd choice/default-button/surrender branches were not reached in live verification. Windows 8684 has catalog validation and Linux has static analysis only; neither has runtime qualification.

Guard MatchEnd Escape and generic close commands through its own vtable,
sharing input forwarding with RoundEnd and preserving native business actions.
Require the published v20261026a symbols and add regression coverage.

Fixes MetaHookSv/MetaHookSv#957

Co-Authored-By: Codex <codex@openai.com>
@hzqst
hzqst merged commit e49121f into main Oct 26, 2026
3 checks passed
@hzqst
hzqst deleted the fix/career-matchwin-escape branch October 26, 2026 08:19
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.

[VGUI2Extension][czero] Career 最终胜利后 Esc 切出再切回反复触发 MatchWin 音乐

1 participant