From da5c4ec60a6aa03d66b87a312f1f396916e82da5 Mon Sep 17 00:00:00 2001 From: TheRedDaemon <66257843+TheRedDaemon@users.noreply.github.com> Date: Tue, 7 Jul 2026 21:56:38 +0200 Subject: [PATCH] reimplement: SHC_3BB0A8C1_0x0057E160 100% --- src/OpenSHC/Audio/mss.func.hpp | 4 ++-- src/OpenSHC/Audio/mss.hpp | 2 +- .../Audio/mss/RegisterMilesAILShutdown.cpp | 22 +++++++++++++++++++ src/OpenSHC/OS.func.hpp | 4 ++-- src/OpenSHC/OS.hpp | 2 +- src/OpenSHC/OS/OS.cpp | 2 +- status/addresses-SHC-3BB0A8C1.txt | 2 +- 7 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 src/OpenSHC/Audio/mss/RegisterMilesAILShutdown.cpp diff --git a/src/OpenSHC/Audio/mss.func.hpp b/src/OpenSHC/Audio/mss.func.hpp index c099d2a6..7d585ab3 100644 --- a/src/OpenSHC/Audio/mss.func.hpp +++ b/src/OpenSHC/Audio/mss.func.hpp @@ -21,8 +21,8 @@ namespace Audio { Address::SHC_3BB0A8C1_0x0047B510, &OpenSHC::Audio::MSS::SndSystemTimeCallback) SndSystemTimeCallback; - MACRO_FUNCTION_RESOLVER(undefined4(__stdcall*)(), false, Address::SHC_3BB0A8C1_0x0057E160, - &OpenSHC::Audio::MSS::RegisterMilesAILShutdown) + MACRO_FUNCTION_RESOLVER( + int(__cdecl*)(), false, Address::SHC_3BB0A8C1_0x0057E160, &OpenSHC::Audio::MSS::RegisterMilesAILShutdown) RegisterMilesAILShutdown; } // namespace MSS_Func diff --git a/src/OpenSHC/Audio/mss.hpp b/src/OpenSHC/Audio/mss.hpp index 23db321b..faef4853 100644 --- a/src/OpenSHC/Audio/mss.hpp +++ b/src/OpenSHC/Audio/mss.hpp @@ -16,7 +16,7 @@ namespace Audio { void __stdcall SndSystemTimeCallback(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2); - undefined4 __stdcall RegisterMilesAILShutdown(); + int __cdecl RegisterMilesAILShutdown(); } // namespace MSS } // namespace Audio diff --git a/src/OpenSHC/Audio/mss/RegisterMilesAILShutdown.cpp b/src/OpenSHC/Audio/mss/RegisterMilesAILShutdown.cpp new file mode 100644 index 00000000..dfa7378a --- /dev/null +++ b/src/OpenSHC/Audio/mss/RegisterMilesAILShutdown.cpp @@ -0,0 +1,22 @@ +#include "../mss.func.hpp" + +#include "OpenSHC/OS.func.hpp" + +#include "Mss32.h" + +namespace OpenSHC { +namespace Audio { + namespace MSS { + + void __cdecl AIL_shutdown_proxy() { AIL_shutdown(); } + + // FUNCTION: STRONGHOLDCRUSADER 0x0057E160 + int __cdecl RegisterMilesAILShutdown() + { + MACRO_CALL(OS_Func::_atexit)(AIL_shutdown_proxy); + return 0; + } + + } +} +} diff --git a/src/OpenSHC/OS.func.hpp b/src/OpenSHC/OS.func.hpp index e1d376cc..fd574110 100644 --- a/src/OpenSHC/OS.func.hpp +++ b/src/OpenSHC/OS.func.hpp @@ -50,8 +50,8 @@ namespace OS_Func { Address::SHC_3BB0A8C1_0x0057F8EE, &OpenSHC::OS::__stricmp) __stricmp; - MACRO_FUNCTION_RESOLVER( - int(__cdecl*)(void* param_1), REIMPLEMENTED_CRT, Address::SHC_3BB0A8C1_0x0057FA62, &OpenSHC::OS::_atexit) + MACRO_FUNCTION_RESOLVER(int(__cdecl*)(void(__cdecl* func)()), REIMPLEMENTED_CRT, Address::SHC_3BB0A8C1_0x0057FA62, + &OpenSHC::OS::_atexit) _atexit; MACRO_FUNCTION_RESOLVER( diff --git a/src/OpenSHC/OS.hpp b/src/OpenSHC/OS.hpp index ca61c822..b9083ff3 100644 --- a/src/OpenSHC/OS.hpp +++ b/src/OpenSHC/OS.hpp @@ -37,7 +37,7 @@ namespace OS { int __cdecl __stricmp(char* _Str1, char* _Str2); - int __cdecl _atexit(void* param_1); + int __cdecl _atexit(void(__cdecl* func)()); void __cdecl _free_base(void* _Memory); diff --git a/src/OpenSHC/OS/OS.cpp b/src/OpenSHC/OS/OS.cpp index c4ba1e08..b8a7001f 100644 --- a/src/OpenSHC/OS/OS.cpp +++ b/src/OpenSHC/OS/OS.cpp @@ -42,7 +42,7 @@ namespace OS { int __stricmp(char* _Str1, char* _Str2) { return _stricmp(_Str1, _Str2); } // STUB: STRONGHOLDCRUSADER 0x0057FA62 - int _atexit(void* param_1) { return atexit(reinterpret_cast(param_1)); } + int _atexit(void(__cdecl* func)()) { return atexit(func); } // This seems to be the games main free function // STUB: STRONGHOLDCRUSADER 0x0057FA74 diff --git a/status/addresses-SHC-3BB0A8C1.txt b/status/addresses-SHC-3BB0A8C1.txt index bf59bb06..fe692bf4 100644 --- a/status/addresses-SHC-3BB0A8C1.txt +++ b/status/addresses-SHC-3BB0A8C1.txt @@ -32703,7 +32703,7 @@ SHC_3BB0A8C1_0x0057DFE0 | 0.0% | Pending SHC_3BB0A8C1_0x0057E020 | 0.0% | Pending SHC_3BB0A8C1_0x0057E120 | 0.0% | Pending SHC_3BB0A8C1_0x0057E158 | 0.0% | Pending -SHC_3BB0A8C1_0x0057E160 | 0.0% | Pending +SHC_3BB0A8C1_0x0057E160 | 100.0% | Reimplemented SHC_3BB0A8C1_0x0057E170 | 0.0% | Pending SHC_3BB0A8C1_0x0057E180 | 0.0% | Pending SHC_3BB0A8C1_0x0057E28F | 0.0% | Pending