From 50f08761946ace305dfe00645cfd9b624753b26c Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 10 Dec 2025 14:54:25 -0500 Subject: [PATCH] Fakematch JASTrack::TList::seqMain (#2940) * Fakematch JASTrack::TList::seqMain * Add debug ifdef --- configure.py | 2 +- src/JSystem/JAudio2/JASTrack.cpp | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/configure.py b/configure.py index 34da0e9c68..49ea56e24b 100755 --- a/configure.py +++ b/configure.py @@ -1022,7 +1022,7 @@ config.libs = [ Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASProbe.cpp"), Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASReport.cpp"), Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASCmdStack.cpp"), - Object(NonMatching, "JSystem/JAudio2/JASTrack.cpp"), + Object(Equivalent, "JSystem/JAudio2/JASTrack.cpp"), # weak func order Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASTrackPort.cpp"), Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASRegisterParam.cpp"), Object(MatchingFor(ALL_GCN), "JSystem/JAudio2/JASSeqCtrl.cpp"), diff --git a/src/JSystem/JAudio2/JASTrack.cpp b/src/JSystem/JAudio2/JASTrack.cpp index 2d2e422c82..6f557f38e3 100644 --- a/src/JSystem/JAudio2/JASTrack.cpp +++ b/src/JSystem/JAudio2/JASTrack.cpp @@ -728,8 +728,8 @@ void JASTrack::TList::append(JASTrack* i_track) { Push_back(i_track); } -// NONMATCHING - missing load instruction (matches debug, equivalent) void JASTrack::TList::seqMain() { +#if DEBUG iterator it, it2; for (it = begin(); it != end(); it = it2) { it2 = it; @@ -742,6 +742,25 @@ void JASTrack::TList::seqMain() { } } } +#else + iterator it; + for (it = begin(); it != end();) { + // Fakematch: Debug shows that it2 should be declared outside the loop and then this line + // should use operator=, but that results in a missing load instruction for retail, so we + // use the copy constructor instead of the assignment operator, which fixes it for some + // reason. Might be related to the fakematch in the assignment operator? + iterator it2 = it; + ++it2; + int seqMainRes = it->seqMain(); + if (seqMainRes < 0) { + Remove(&*it); + if (it->mFlags.autoDelete) { + delete &*it; + } + } + it = it2; + } +#endif } JASTrack::TChannelMgr::TChannelMgr(JASTrack* i_track) : mSoundParams(NULL), mTrack(i_track) {