diff --git a/cmake/openshc-sources.txt b/cmake/openshc-sources.txt index e69de29..d57a14b 100644 --- a/cmake/openshc-sources.txt +++ b/cmake/openshc-sources.txt @@ -0,0 +1,2 @@ +src/OpenSHC/Audio/mss/SoundSystem/stopMusicPlayback.cpp +src/OpenSHC/Audio/mss/SoundSystem/endSoundStream.cpp diff --git a/src/OpenSHC/Audio/mss/FakeDigDriver.hpp b/src/OpenSHC/Audio/mss/FakeDigDriver.hpp deleted file mode 100644 index 3d1cd80..0000000 --- a/src/OpenSHC/Audio/mss/FakeDigDriver.hpp +++ /dev/null @@ -1,24 +0,0 @@ -/** - THIS FILE IS AUTO GENERATED - Communicate changes to the dev team (e.g. via a Pull Request). - Changes get lost otherwise. - - path: 'OpenSHC/Audio/mss/FakeDigDriver.hpp' -*/ - -#pragma once - -namespace OpenSHC { -namespace Audio { - namespace mss { - -#pragma pack(push, 1) - // SIZE: 0x00000000 - typedef struct FakeDigDriver { - - } FakeDigDriver; -#pragma pack(pop) - - } // namespace mss -} // namespace Audio -} // namespace OpenSHC diff --git a/src/OpenSHC/Audio/mss/FakeSample.hpp b/src/OpenSHC/Audio/mss/FakeSample.hpp deleted file mode 100644 index deb8307..0000000 --- a/src/OpenSHC/Audio/mss/FakeSample.hpp +++ /dev/null @@ -1,24 +0,0 @@ -/** - THIS FILE IS AUTO GENERATED - Communicate changes to the dev team (e.g. via a Pull Request). - Changes get lost otherwise. - - path: 'OpenSHC/Audio/mss/FakeSample.hpp' -*/ - -#pragma once - -namespace OpenSHC { -namespace Audio { - namespace mss { - -#pragma pack(push, 1) - // SIZE: 0x00000000 - typedef struct FakeSample { - - } FakeSample; -#pragma pack(pop) - - } // namespace mss -} // namespace Audio -} // namespace OpenSHC diff --git a/src/OpenSHC/Audio/mss/FakeStream.hpp b/src/OpenSHC/Audio/mss/FakeStream.hpp deleted file mode 100644 index ddeaa85..0000000 --- a/src/OpenSHC/Audio/mss/FakeStream.hpp +++ /dev/null @@ -1,24 +0,0 @@ -/** - THIS FILE IS AUTO GENERATED - Communicate changes to the dev team (e.g. via a Pull Request). - Changes get lost otherwise. - - path: 'OpenSHC/Audio/mss/FakeStream.hpp' -*/ - -#pragma once - -namespace OpenSHC { -namespace Audio { - namespace mss { - -#pragma pack(push, 1) - // SIZE: 0x00000000 - typedef struct FakeStream { - - } FakeStream; -#pragma pack(pop) - - } // namespace mss -} // namespace Audio -} // namespace OpenSHC diff --git a/src/OpenSHC/Audio/mss/HDIGDRIVER.hpp b/src/OpenSHC/Audio/mss/HDIGDRIVER.hpp deleted file mode 100644 index 425f749..0000000 --- a/src/OpenSHC/Audio/mss/HDIGDRIVER.hpp +++ /dev/null @@ -1,21 +0,0 @@ -/** - THIS FILE IS AUTO GENERATED - Communicate changes to the dev team (e.g. via a Pull Request). - Changes get lost otherwise. - - path: 'OpenSHC/Audio/mss/HDIGDRIVER.hpp' -*/ - -#pragma once - -#include "OpenSHC/Audio/mss/FakeDigDriver.hpp" -namespace OpenSHC { -namespace Audio { - namespace mss { - - using OpenSHC::Audio::mss::FakeDigDriver; - - typedef FakeDigDriver* HDIGDRIVER; - } // namespace mss -} // namespace Audio -} // namespace OpenSHC diff --git a/src/OpenSHC/Audio/mss/HSAMPLE.hpp b/src/OpenSHC/Audio/mss/HSAMPLE.hpp deleted file mode 100644 index 211d054..0000000 --- a/src/OpenSHC/Audio/mss/HSAMPLE.hpp +++ /dev/null @@ -1,21 +0,0 @@ -/** - THIS FILE IS AUTO GENERATED - Communicate changes to the dev team (e.g. via a Pull Request). - Changes get lost otherwise. - - path: 'OpenSHC/Audio/mss/HSAMPLE.hpp' -*/ - -#pragma once - -#include "OpenSHC/Audio/mss/FakeSample.hpp" -namespace OpenSHC { -namespace Audio { - namespace mss { - - using OpenSHC::Audio::mss::FakeSample; - - typedef FakeSample* HSAMPLE; - } // namespace mss -} // namespace Audio -} // namespace OpenSHC diff --git a/src/OpenSHC/Audio/mss/HSTREAM.hpp b/src/OpenSHC/Audio/mss/HSTREAM.hpp deleted file mode 100644 index 4bcf87b..0000000 --- a/src/OpenSHC/Audio/mss/HSTREAM.hpp +++ /dev/null @@ -1,21 +0,0 @@ -/** - THIS FILE IS AUTO GENERATED - Communicate changes to the dev team (e.g. via a Pull Request). - Changes get lost otherwise. - - path: 'OpenSHC/Audio/mss/HSTREAM.hpp' -*/ - -#pragma once - -#include "OpenSHC/Audio/mss/FakeStream.hpp" -namespace OpenSHC { -namespace Audio { - namespace mss { - - using OpenSHC::Audio::mss::FakeStream; - - typedef FakeStream* HSTREAM; - } // namespace mss -} // namespace Audio -} // namespace OpenSHC diff --git a/src/OpenSHC/Audio/mss/SoundSystem.func.hpp b/src/OpenSHC/Audio/mss/SoundSystem.func.hpp index 98370bc..8eafdb2 100644 --- a/src/OpenSHC/Audio/mss/SoundSystem.func.hpp +++ b/src/OpenSHC/Audio/mss/SoundSystem.func.hpp @@ -29,7 +29,7 @@ namespace Audio { void (SoundSystem::*)(), false, Address::SHC_3BB0A8C1_0x00467830, &SoundSystem::endSoundStreamsUnk) endSoundStreamsUnk; - MACRO_FUNCTION_RESOLVER(void (SoundSystem::*)(SHC_SoundStreamInt), false, Address::SHC_3BB0A8C1_0x004799A0, + MACRO_FUNCTION_RESOLVER(void (SoundSystem::*)(SHC_SoundStreamInt), true, Address::SHC_3BB0A8C1_0x004799A0, &SoundSystem::endSoundStream) endSoundStream; diff --git a/src/OpenSHC/Audio/mss/SoundSystem.hpp b/src/OpenSHC/Audio/mss/SoundSystem.hpp index 094aeef..4476580 100644 --- a/src/OpenSHC/Audio/mss/SoundSystem.hpp +++ b/src/OpenSHC/Audio/mss/SoundSystem.hpp @@ -8,9 +8,7 @@ #pragma once -#include "OpenSHC/Audio/mss/HDIGDRIVER.hpp" -#include "OpenSHC/Audio/mss/HSAMPLE.hpp" -#include "OpenSHC/Audio/mss/HSTREAM.hpp" +#include "Mss32.h" #include "OpenSHC/Audio/mss/UnkSoundFlagsAndLoopCount.hpp" #include "OpenSHC/Audio/mss/_enums/SHC_SoundStreamInt.hpp" #include "OpenSHC/DE/SHCDE/eMusicIDsInt.hpp" @@ -21,9 +19,6 @@ namespace OpenSHC { namespace Audio { namespace mss { - using OpenSHC::Audio::mss::HDIGDRIVER; - using OpenSHC::Audio::mss::HSAMPLE; - using OpenSHC::Audio::mss::HSTREAM; using OpenSHC::Audio::mss::UnkSoundFlagsAndLoopCount; using OpenSHC::Audio::mss::_enums::SHC_SoundStreamInt; using OpenSHC::DE::SHCDE::eMusicIDsInt; diff --git a/src/OpenSHC/Audio/mss/SoundSystem/endSoundStream.cpp b/src/OpenSHC/Audio/mss/SoundSystem/endSoundStream.cpp new file mode 100644 index 0000000..700e366 --- /dev/null +++ b/src/OpenSHC/Audio/mss/SoundSystem/endSoundStream.cpp @@ -0,0 +1,64 @@ +#include "OpenSHC/Audio/mss/SoundSystem.hpp" + +#include "OpenSHC/Audio/mss/_enums/AILStatus.hpp" +#include "OpenSHC/Audio/mss/_enums/SHC_SoundStream.hpp" + +#include "Mss32.h" + +#include + +#include "OpenSHC/Globals/DAT_00df3844.hpp" + +// TODO: +// - DAT_00df3844 did not exist before and is therefore wrongly sorted into the status file +// - the mss types need to use the mss32 header, not the Ghidra exported one (how to handle this?) +// - "_close" is treaded like an OFFSET function and reduces the score of reccmp +// - "UnkSoundFlagsAndLoopCount" plays not nice with any number-like operation, the more likely thing therefore are +// either a union, which allows to access the different parts separately, but this would likely compile to WORD +// operations, or a bitfield, maybe like this: +// int loopCount : 16; +// int reserved : 13; +// int unknownFlag1 : 1; +// int unknownFlag2 : 1; +// int uninterruptable : 1; // ? +// In a test in the current file it compiled to "& 0x80000000" properly when using the specific field, but no idea if +// this works for multifield checks or assigns + +// FUNCTION: STRONGHOLDCRUSADER 0x004799A0 +void OpenSHC::Audio::mss::SoundSystem::endSoundStream(SHC_SoundStreamInt sndStreamIndex) +{ + if (!this->waveOutOpenUnk_0x8) { + return; + } + + if (sndStreamIndex == _enums::SND_STR_MUSIC) { + this->streamActiveUnk_0x20[0] = 0; + *DAT_00df3844::ptr = 1; + if (this->musicSampleFileHandleUnk_0x174 != -1) { + AIL_end_sample(this->musicSampleUnk_0x170); + _close(this->musicSampleFileHandleUnk_0x174); + } + if (this->musicFileHandle_0x178 != -1) { + _close(this->musicFileHandle_0x178); + } + this->musicFileHandle_0x178 = -1; + this->musicSampleFileHandleUnk_0x174 = -1; + this->mbr_0x188 = 1; + *DAT_00df3844::ptr = 0; + this->sec_Section1055_0x3274 = 0; + return; + } + + if (!this->streamActiveUnk_0x20[sndStreamIndex]) { + return; + } + + // flag seems to indicate an "uninterruptable" stream; if it is set, a playing stream can not be ended + if ((*reinterpret_cast(&this->streamFlagsUnkAndLoopCount_0x34[sndStreamIndex]) & 0x80000000) + && (AIL_stream_status(this->stream_0xc[sndStreamIndex]) == SMP_PLAYING)) { + return; + } + AIL_close_stream(this->stream_0xc[sndStreamIndex]); + this->streamActiveUnk_0x20[sndStreamIndex] = 0; + this->stream_0xc[sndStreamIndex] = 0x0; +} diff --git a/src/OpenSHC/Audio/mss/SoundSystem/stopMusicPlayback.cpp b/src/OpenSHC/Audio/mss/SoundSystem/stopMusicPlayback.cpp new file mode 100644 index 0000000..1f6958b --- /dev/null +++ b/src/OpenSHC/Audio/mss/SoundSystem/stopMusicPlayback.cpp @@ -0,0 +1,12 @@ +#include "OpenSHC/Audio/mss/SoundSystem.hpp" + +#include "OpenSHC/Audio/mss/SoundSystem.func.hpp" +#include "OpenSHC/Audio/mss/_enums/SHC_SoundStream.hpp" + +// FUNCTION: STRONGHOLDCRUSADER 0x00467810 +void OpenSHC::Audio::mss::SoundSystem::stopMusicPlayback() +{ + MACRO_CALL_MEMBER(OpenSHC::Audio::mss::SoundSystem_Func::endSoundStream, this)(_enums::SND_STR_MUSIC); + this->mbr_0x154 = 0; + this->sec_Section1055_0x3274 = 0; +} diff --git a/src/OpenSHC/Globals/DAT_00df3844.hpp b/src/OpenSHC/Globals/DAT_00df3844.hpp new file mode 100644 index 0000000..b938028 --- /dev/null +++ b/src/OpenSHC/Globals/DAT_00df3844.hpp @@ -0,0 +1,14 @@ +/** + THIS FILE IS AUTO GENERATED + Communicate changes to the dev team (e.g. via a Pull Request). + Changes get lost otherwise. + + path: 'OpenSHC/Globals/DAT_00df3844.hpp' +*/ + +#pragma once + +namespace OpenSHC { + +MACRO_STRUCT_RESOLVER(undefined4, false, Address::SHC_3BB0A8C1_0x00df3844) DAT_00df3844; +} // namespace OpenSHC diff --git a/src/precomp/addresses-SHC-3BB0A8C1.hpp b/src/precomp/addresses-SHC-3BB0A8C1.hpp index bac4186..458e0b4 100644 --- a/src/precomp/addresses-SHC-3BB0A8C1.hpp +++ b/src/precomp/addresses-SHC-3BB0A8C1.hpp @@ -98103,6 +98103,7 @@ enum { // location: // type: /byte[1708] SHC_3BB0A8C1_0x02490954 = 0x02490954, - + // type: /undefined4 + SHC_3BB0A8C1_0x00df3844 = 0x00df3844, }; } diff --git a/status/addresses-SHC-3BB0A8C1.txt b/status/addresses-SHC-3BB0A8C1.txt index f1a6853..e9317a1 100644 --- a/status/addresses-SHC-3BB0A8C1.txt +++ b/status/addresses-SHC-3BB0A8C1.txt @@ -9831,7 +9831,7 @@ SHC_3BB0A8C1_0x00467780 | 0.0% | Pending SHC_3BB0A8C1_0x00467790 | 0.0% | Pending SHC_3BB0A8C1_0x004677A0 | 0.0% | Pending SHC_3BB0A8C1_0x004677E0 | 0.0% | Pending -SHC_3BB0A8C1_0x00467810 | 0.0% | Pending +SHC_3BB0A8C1_0x00467810 | 100.0% | DONE SHC_3BB0A8C1_0x00467830 | 0.0% | Pending SHC_3BB0A8C1_0x00467850 | 0.0% | Pending SHC_3BB0A8C1_0x00467890 | 0.0% | Pending @@ -10880,7 +10880,7 @@ SHC_3BB0A8C1_0x00479369 | 0.0% | Pending SHC_3BB0A8C1_0x00479400 | 0.0% | Pending SHC_3BB0A8C1_0x00479540 | 0.0% | Pending SHC_3BB0A8C1_0x00479790 | 0.0% | Pending -SHC_3BB0A8C1_0x004799A0 | 0.0% | Pending +SHC_3BB0A8C1_0x004799A0 | 96.36% | "_close" is seen as unknown offset call by reccmp SHC_3BB0A8C1_0x00479A60 | 0.0% | Pending SHC_3BB0A8C1_0x00479AB0 | 0.0% | Pending SHC_3BB0A8C1_0x00479AF0 | 0.0% | Pending @@ -34649,9 +34649,19 @@ SHC_3BB0A8C1_0x0059E80C | 0.0% | Pending SHC_3BB0A8C1_0x0059E818 | 0.0% | Pending SHC_3BB0A8C1_0x0059E81C | 0.0% | Pending SHC_3BB0A8C1_0x0059E830 | 0.0% | Pending +SHC_3BB0A8C1_0x0059E840 | 0.0% | Pending +SHC_3BB0A8C1_0x0059E848 | 0.0% | Pending +SHC_3BB0A8C1_0x0059E850 | 0.0% | Pending +SHC_3BB0A8C1_0x0059E858 | 0.0% | Pending +SHC_3BB0A8C1_0x0059E860 | 0.0% | Pending SHC_3BB0A8C1_0x0059E868 | 0.0% | Pending +SHC_3BB0A8C1_0x0059E870 | 0.0% | Pending +SHC_3BB0A8C1_0x0059E878 | 0.0% | Pending +SHC_3BB0A8C1_0x0059E880 | 0.0% | Pending +SHC_3BB0A8C1_0x0059E888 | 0.0% | Pending +SHC_3BB0A8C1_0x0059E890 | 0.0% | Pending SHC_3BB0A8C1_0x0059E898 | 0.0% | Pending -SHC_3BB0A8C1_0x0059E89F | 0.0% | Pending +SHC_3BB0A8C1_0x0059E8A0 | 0.0% | Pending SHC_3BB0A8C1_0x0059E8B8 | 0.0% | Pending SHC_3BB0A8C1_0x0059E8D0 | 0.0% | Pending SHC_3BB0A8C1_0x0059E8E4 | 0.0% | Pending @@ -37892,6 +37902,7 @@ SHC_3BB0A8C1_0x005ACE38 | 0.0% | Pending SHC_3BB0A8C1_0x005ACE40 | 0.0% | Pending SHC_3BB0A8C1_0x005ACE48 | 0.0% | Pending SHC_3BB0A8C1_0x005ACE50 | 0.0% | Pending +SHC_3BB0A8C1_0x005ACE5A | 0.0% | Pending SHC_3BB0A8C1_0x005AE4A0 | 0.0% | Pending SHC_3BB0A8C1_0x005AE4A8 | 0.0% | Pending SHC_3BB0A8C1_0x005AE4B0 | 0.0% | Pending @@ -39969,76 +39980,23 @@ SHC_3BB0A8C1_0x005B3F68 | 0.0% | Pending SHC_3BB0A8C1_0x005B3F88 | 0.0% | Pending SHC_3BB0A8C1_0x005B3FA8 | 0.0% | Pending SHC_3BB0A8C1_0x005B3FC8 | 0.0% | Pending +SHC_3BB0A8C1_0x005B41AC | 0.0% | Pending +SHC_3BB0A8C1_0x005B41B0 | 0.0% | Pending +SHC_3BB0A8C1_0x005B41D0 | 0.0% | Pending SHC_3BB0A8C1_0x005B41D4 | 0.0% | Pending -SHC_3BB0A8C1_0x005B41D8 | 0.0% | Pending -SHC_3BB0A8C1_0x005B41DC | 0.0% | Pending -SHC_3BB0A8C1_0x005B41E0 | 0.0% | Pending -SHC_3BB0A8C1_0x005B41E4 | 0.0% | Pending SHC_3BB0A8C1_0x005B41E8 | 0.0% | Pending -SHC_3BB0A8C1_0x005B41EC | 0.0% | Pending -SHC_3BB0A8C1_0x005B41F0 | 0.0% | Pending -SHC_3BB0A8C1_0x005B41F4 | 0.0% | Pending -SHC_3BB0A8C1_0x005B41F8 | 0.0% | Pending SHC_3BB0A8C1_0x005B41FC | 0.0% | Pending -SHC_3BB0A8C1_0x005B4200 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4204 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4208 | 0.0% | Pending -SHC_3BB0A8C1_0x005B420C | 0.0% | Pending SHC_3BB0A8C1_0x005B4210 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4214 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4218 | 0.0% | Pending -SHC_3BB0A8C1_0x005B421C | 0.0% | Pending -SHC_3BB0A8C1_0x005B4220 | 0.0% | Pending SHC_3BB0A8C1_0x005B4224 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4228 | 0.0% | Pending -SHC_3BB0A8C1_0x005B422C | 0.0% | Pending -SHC_3BB0A8C1_0x005B4230 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4234 | 0.0% | Pending SHC_3BB0A8C1_0x005B4238 | 0.0% | Pending -SHC_3BB0A8C1_0x005B423C | 0.0% | Pending -SHC_3BB0A8C1_0x005B4240 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4244 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4248 | 0.0% | Pending SHC_3BB0A8C1_0x005B424C | 0.0% | Pending -SHC_3BB0A8C1_0x005B4250 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4254 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4258 | 0.0% | Pending -SHC_3BB0A8C1_0x005B425C | 0.0% | Pending SHC_3BB0A8C1_0x005B4260 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4264 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4268 | 0.0% | Pending -SHC_3BB0A8C1_0x005B426C | 0.0% | Pending -SHC_3BB0A8C1_0x005B4270 | 0.0% | Pending SHC_3BB0A8C1_0x005B4274 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4278 | 0.0% | Pending -SHC_3BB0A8C1_0x005B427C | 0.0% | Pending -SHC_3BB0A8C1_0x005B4280 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4284 | 0.0% | Pending SHC_3BB0A8C1_0x005B4288 | 0.0% | Pending -SHC_3BB0A8C1_0x005B428C | 0.0% | Pending -SHC_3BB0A8C1_0x005B4290 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4294 | 0.0% | Pending -SHC_3BB0A8C1_0x005B4298 | 0.0% | Pending SHC_3BB0A8C1_0x005B429C | 0.0% | Pending -SHC_3BB0A8C1_0x005B42A0 | 0.0% | Pending -SHC_3BB0A8C1_0x005B42A4 | 0.0% | Pending -SHC_3BB0A8C1_0x005B42A8 | 0.0% | Pending -SHC_3BB0A8C1_0x005B42AC | 0.0% | Pending SHC_3BB0A8C1_0x005B42B0 | 0.0% | Pending -SHC_3BB0A8C1_0x005B42B4 | 0.0% | Pending -SHC_3BB0A8C1_0x005B42B8 | 0.0% | Pending -SHC_3BB0A8C1_0x005B42BC | 0.0% | Pending -SHC_3BB0A8C1_0x005B42C0 | 0.0% | Pending SHC_3BB0A8C1_0x005B42C4 | 0.0% | Pending -SHC_3BB0A8C1_0x005B42C8 | 0.0% | Pending -SHC_3BB0A8C1_0x005B42CC | 0.0% | Pending -SHC_3BB0A8C1_0x005B42D0 | 0.0% | Pending -SHC_3BB0A8C1_0x005B42D4 | 0.0% | Pending SHC_3BB0A8C1_0x005B42D8 | 0.0% | Pending -SHC_3BB0A8C1_0x005B42DC | 0.0% | Pending -SHC_3BB0A8C1_0x005B42E0 | 0.0% | Pending -SHC_3BB0A8C1_0x005B42E4 | 0.0% | Pending -SHC_3BB0A8C1_0x005B42E8 | 0.0% | Pending SHC_3BB0A8C1_0x005B4300 | 0.0% | Pending SHC_3BB0A8C1_0x005B4304 | 0.0% | Pending SHC_3BB0A8C1_0x005B4308 | 0.0% | Pending @@ -41921,6 +41879,8 @@ SHC_3BB0A8C1_0x00ED311C | 0.0% | Pending SHC_3BB0A8C1_0x00ED3120 | 0.0% | Pending SHC_3BB0A8C1_0x00ED3124 | 0.0% | Pending SHC_3BB0A8C1_0x00ED3128 | 0.0% | Pending +SHC_3BB0A8C1_0x00ED3138 | 0.0% | Pending +SHC_3BB0A8C1_0x00ED313C | 0.0% | Pending SHC_3BB0A8C1_0x00ED3144 | 0.0% | Pending SHC_3BB0A8C1_0x00ED3148 | 0.0% | Pending SHC_3BB0A8C1_0x00ED314C | 0.0% | Pending @@ -42982,3 +42942,4 @@ SHC_3BB0A8C1_0x02490916 | 0.0% | Pending SHC_3BB0A8C1_0x02490930 | 0.0% | Pending SHC_3BB0A8C1_0x02490936 | 0.0% | Pending SHC_3BB0A8C1_0x02490954 | 0.0% | Pending +SHC_3BB0A8C1_0x00df3844 | 0.0% | Pending