From dc97c09f4bdb2ceb99ad835183de299a7cef90cf Mon Sep 17 00:00:00 2001 From: TheRedDaemon <66257843+TheRedDaemon@users.noreply.github.com> Date: Fri, 15 May 2026 21:37:04 +0200 Subject: [PATCH 1/5] reimplement: SHC_3BB0A8C1_0x00479B70 100% --- .../Audio/SoundSystem/meth_0x479b70.cpp | 34 +++++++++++++++++++ status/addresses-SHC-3BB0A8C1.txt | 2 +- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp diff --git a/src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp b/src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp new file mode 100644 index 0000000..40d2536 --- /dev/null +++ b/src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp @@ -0,0 +1,34 @@ +#include "OpenSHC/Audio/mss/SoundSystem.func.hpp" + +namespace OpenSHC { +namespace Audio { + namespace MSS { + + // FUNCTION: STRONGHOLDCRUSADER 0x00479B70 + void SoundSystem::meth_0x479b70() + { + if (!this->waveOutOpenUnk_0x8) { + return; + } + + if ((*((unsigned int*)&this->streamFlagsUnkAndLoopCount_0x34[3]) & 0x20000000) + && this->streamActiveUnk_0x20[3] && AIL_stream_status(this->stream_0xc[3]) != SMP_PLAYING) { + unsigned int const copyWithoutFlag + = *((unsigned int*)&this->streamFlagsUnkAndLoopCount_0x34[3]) & 0xdfffffff; + this->streamFlagsUnkAndLoopCount_0x34[3] = *((UnkSoundFlagsAndLoopCount*)©WithoutFlag); + AIL_set_sample_volume( + this->musicSampleUnk_0x170, (this->streamVolume[0] * this->streamFileVolumeNextUnk_0x48[0]) / 100); + } + if ((*((unsigned int*)&this->streamFlagsUnkAndLoopCount_0x34[4]) & 0x20000000) + && this->streamActiveUnk_0x20[4] && AIL_stream_status(this->stream_0xc[4]) != SMP_PLAYING) { + unsigned int const copyWithoutFlag + = *((unsigned int*)&this->streamFlagsUnkAndLoopCount_0x34[4]) & 0xdfffffff; + this->streamFlagsUnkAndLoopCount_0x34[4] = *((UnkSoundFlagsAndLoopCount*)©WithoutFlag); + AIL_set_sample_volume( + this->musicSampleUnk_0x170, (this->streamVolume[0] * this->streamFileVolumeNextUnk_0x48[0]) / 100); + } + } + + } +} +} diff --git a/status/addresses-SHC-3BB0A8C1.txt b/status/addresses-SHC-3BB0A8C1.txt index 1a684d6..e607c1c 100644 --- a/status/addresses-SHC-3BB0A8C1.txt +++ b/status/addresses-SHC-3BB0A8C1.txt @@ -10884,7 +10884,7 @@ SHC_3BB0A8C1_0x004799A0 | 0.0% | Pending SHC_3BB0A8C1_0x00479A60 | 100.0% | Reimplemented SHC_3BB0A8C1_0x00479AB0 | 0.0% | Pending SHC_3BB0A8C1_0x00479AF0 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x00479B70 | 0.0% | Pending +SHC_3BB0A8C1_0x00479B70 | 100.0% | Reimplemented SHC_3BB0A8C1_0x00479C20 | 0.0% | Pending SHC_3BB0A8C1_0x00479C80 | 0.0% | Pending SHC_3BB0A8C1_0x00479CF0 | 100.0% | Reimplemented From 86deb84e474da53d1b4e64432d0804781c917232 Mon Sep 17 00:00:00 2001 From: TheRedDaemon <66257843+TheRedDaemon@users.noreply.github.com> Date: Fri, 15 May 2026 21:50:04 +0200 Subject: [PATCH 2/5] reimplement: SHC_3BB0A8C1_0x00479B70 experiment with bitfields --- src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp b/src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp index 40d2536..e98ea7e 100644 --- a/src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp +++ b/src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp @@ -11,19 +11,15 @@ namespace Audio { return; } - if ((*((unsigned int*)&this->streamFlagsUnkAndLoopCount_0x34[3]) & 0x20000000) - && this->streamActiveUnk_0x20[3] && AIL_stream_status(this->stream_0xc[3]) != SMP_PLAYING) { - unsigned int const copyWithoutFlag - = *((unsigned int*)&this->streamFlagsUnkAndLoopCount_0x34[3]) & 0xdfffffff; - this->streamFlagsUnkAndLoopCount_0x34[3] = *((UnkSoundFlagsAndLoopCount*)©WithoutFlag); + if (this->streamFlagsUnkAndLoopCount_0x34[3].unknownFlag1 && this->streamActiveUnk_0x20[3] + && AIL_stream_status(this->stream_0xc[3]) != SMP_PLAYING) { + this->streamFlagsUnkAndLoopCount_0x34[3].unknownFlag1 = false; AIL_set_sample_volume( this->musicSampleUnk_0x170, (this->streamVolume[0] * this->streamFileVolumeNextUnk_0x48[0]) / 100); } - if ((*((unsigned int*)&this->streamFlagsUnkAndLoopCount_0x34[4]) & 0x20000000) - && this->streamActiveUnk_0x20[4] && AIL_stream_status(this->stream_0xc[4]) != SMP_PLAYING) { - unsigned int const copyWithoutFlag - = *((unsigned int*)&this->streamFlagsUnkAndLoopCount_0x34[4]) & 0xdfffffff; - this->streamFlagsUnkAndLoopCount_0x34[4] = *((UnkSoundFlagsAndLoopCount*)©WithoutFlag); + if (this->streamFlagsUnkAndLoopCount_0x34[4].unknownFlag1 && this->streamActiveUnk_0x20[4] + && AIL_stream_status(this->stream_0xc[4]) != SMP_PLAYING) { + this->streamFlagsUnkAndLoopCount_0x34[4].unknownFlag1 = false; AIL_set_sample_volume( this->musicSampleUnk_0x170, (this->streamVolume[0] * this->streamFileVolumeNextUnk_0x48[0]) / 100); } From a4008e3bdc28f7b0727b681cbd56b657a3904c34 Mon Sep 17 00:00:00 2001 From: TheRedDaemon <66257843+TheRedDaemon@users.noreply.github.com> Date: Sat, 16 May 2026 20:38:55 +0200 Subject: [PATCH 3/5] reimplement: SHC_3BB0A8C1_0x00479B70 add usage notes --- src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp b/src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp index e98ea7e..6a43dce 100644 --- a/src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp +++ b/src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp @@ -4,6 +4,13 @@ namespace OpenSHC { namespace Audio { namespace MSS { + // NOTE: + // This functions seems to reset the 0 indexed stream, most likely the music stream + // Index 3 seems to be general NPC voices (at least) + // Assumption: + // The tested flag here ("unkownFlag1" currently) might indicate that playing this sample should lower the music + // volume, or that the music volume is currently lowered + // FUNCTION: STRONGHOLDCRUSADER 0x00479B70 void SoundSystem::meth_0x479b70() { From 1414b79405377cf46bfa08e1996a24aa962901cd Mon Sep 17 00:00:00 2001 From: TheRedDaemon <66257843+TheRedDaemon@users.noreply.github.com> Date: Sun, 17 May 2026 20:07:19 +0200 Subject: [PATCH 4/5] reimplement: reimpl/SHC_3BB0A8C1_0x00479B70 fix cpp position --- src/OpenSHC/Audio/{ => mss}/SoundSystem/meth_0x479b70.cpp | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/OpenSHC/Audio/{ => mss}/SoundSystem/meth_0x479b70.cpp (100%) diff --git a/src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp b/src/OpenSHC/Audio/mss/SoundSystem/meth_0x479b70.cpp similarity index 100% rename from src/OpenSHC/Audio/SoundSystem/meth_0x479b70.cpp rename to src/OpenSHC/Audio/mss/SoundSystem/meth_0x479b70.cpp From 116dd3c8ff35867f7beb7380d467811fb40edf28 Mon Sep 17 00:00:00 2001 From: TheRedDaemon <66257843+TheRedDaemon@users.noreply.github.com> Date: Mon, 8 Jun 2026 17:18:46 +0200 Subject: [PATCH 5/5] eimplement: reimpl/SHC_3BB0A8C1_0x00479B70 fix import --- src/OpenSHC/Audio/mss/SoundSystem/meth_0x479b70.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenSHC/Audio/mss/SoundSystem/meth_0x479b70.cpp b/src/OpenSHC/Audio/mss/SoundSystem/meth_0x479b70.cpp index 6a43dce..1d2d514 100644 --- a/src/OpenSHC/Audio/mss/SoundSystem/meth_0x479b70.cpp +++ b/src/OpenSHC/Audio/mss/SoundSystem/meth_0x479b70.cpp @@ -1,4 +1,4 @@ -#include "OpenSHC/Audio/mss/SoundSystem.func.hpp" +#include "../SoundSystem.func.hpp" namespace OpenSHC { namespace Audio {