Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions src/OpenSHC/Audio/mss/SoundSystem/endSoundStream.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#include "../SoundSystem.func.hpp"

#include "OpenSHC/OS.func.hpp"

#include "OpenSHC/Globals/DAT_SoundEffectsHelperData1.hpp"

namespace OpenSHC {
namespace Audio {
namespace MSS {

// FUNCTION: STRONGHOLDCRUSADER 0x004799A0
void SoundSystem::endSoundStream(SHC_SoundStreamInt sndStreamIndex)
{
if (!this->waveOutOpenUnk_0x8) {
return;
}

if (sndStreamIndex == enums::SND_STR_MUSIC) {
this->streamActiveUnk_0x20[0] = 0;
DAT_SoundEffectsHelperData1::ptr->field14_0x54 = true;
if (this->musicSampleFileHandleUnk_0x174 != -1) {
AIL_end_sample(this->musicSampleUnk_0x170);
MACRO_CALL(OS_Func::_ucrt_close)(this->musicSampleFileHandleUnk_0x174);
}
if (this->musicFileHandle_0x178 != -1) {
MACRO_CALL(OS_Func::_ucrt_close)(this->musicFileHandle_0x178);
}
this->musicFileHandle_0x178 = -1;
this->musicSampleFileHandleUnk_0x174 = -1;
this->mbr_0x188 = 1;
DAT_SoundEffectsHelperData1::ptr->field14_0x54 = false;
this->sec_Section1055_0x3274 = 0;
return;
}

if (!this->streamActiveUnk_0x20[sndStreamIndex]) {
return;
}

if (this->streamFlagsUnkAndLoopCount_0x34[sndStreamIndex].uninterruptable
&& 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;
}

}
}
}
16 changes: 16 additions & 0 deletions src/OpenSHC/Audio/mss/SoundSystem/stopMusicPlayback.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#include "../SoundSystem.func.hpp"
namespace OpenSHC {
namespace Audio {
namespace MSS {

// FUNCTION: STRONGHOLDCRUSADER 0x00467810
void 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;
}

}
}
}
141 changes: 141 additions & 0 deletions src/OpenSHC/OS/OS.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
// disable deprecation warnings, since we use the old calls on purpose
#pragma warning(disable : 4996)

#include "../OS.func.hpp"

#include "float.h"
#include "io.h"

// NOTE: Activating them in DLL mode currently results in heap corruption

namespace OpenSHC {
namespace OS {

// STUB: STRONGHOLDCRUSADER 0x0047C5D0
BOOLEnum isEqualGUID(GUID* param_1, GUID* param_2)
{
return static_cast<BOOLEnum>(IsEqualGUID(*param_1, *param_2));
}

// Very likely just default function call, using time64_t and localtime64 behind
// STUB: STRONGHOLDCRUSADER 0x0057F5FE
tm* _localtime(time_t* _Time) { return localtime(_Time); }

// STUB: STRONGHOLDCRUSADER 0x0057F622
__time64_t __time64(__time64_t* _Time) { return _time64(_Time); }

// STUB: STRONGHOLDCRUSADER 0x0057F660
void* _memset(void* _Dst, int _Val, size_t _Size) { return memset(_Dst, _Val, _Size); }

// STUB: STRONGHOLDCRUSADER 0x0057F6DA
int _sprintf(char* _Dest, char* _Format, ...)
{
// needed for proxy
va_list args;
va_start(args, _Format);
int result = vsprintf(_Dest, _Format, args);
va_end(args);
return result;
}

// STUB: STRONGHOLDCRUSADER 0x0057F8EE
int __stricmp(char* _Str1, char* _Str2) { return _stricmp(_Str1, _Str2); }

// STUB: STRONGHOLDCRUSADER 0x0057FA62
int _atexit(void* param_1) { return atexit(reinterpret_cast<void(__cdecl*)()>(param_1)); }

// This seems to be the games main free function
// STUB: STRONGHOLDCRUSADER 0x0057FA74
void __cdecl _free_base(void* _Memory) { free(_Memory); }

// STUB: STRONGHOLDCRUSADER 0x0057FC19
int __cdecl __tolower(int _C) { return tolower(_C); };

// STUB: STRONGHOLDCRUSADER 0x0057FCB2
int _fclose(FILE* _File) { return fclose(_File); }

// STUB: STRONGHOLDCRUSADER 0x0057FFCA
void _fread(void* dstBuffer, size_t elSize, size_t count, FILE* file) { fread(dstBuffer, elSize, count, file); }

// STUB: STRONGHOLDCRUSADER 0x00580034
void* _malloc(size_t _Size) { return malloc(_Size); }

// STUB: STRONGHOLDCRUSADER 0x0058028F
long _ftell(FILE* _File) { return ftell(_File); }

// STUB: STRONGHOLDCRUSADER 0x00580384
int __cdecl _fseek(FILE* _File, long _Offset, DWORD _Origin) { return fseek(_File, _Offset, _Origin); }

// STUB: STRONGHOLDCRUSADER 0x005804CD
FILE* _fopen(char* _Filename, char* _Mode) { return fopen(_Filename, _Mode); }

// STUB: STRONGHOLDCRUSADER 0x00580577
int __vswprintf(wchar_t* _Dest, wchar_t* _Format, va_list _Args) { return _vswprintf(_Dest, _Format, _Args); }

// STUB: STRONGHOLDCRUSADER 0x00580735
wint_t _fgetwc(FILE* _File) { return fgetwc(_File); }

// STUB: STRONGHOLDCRUSADER 0x0058099B
size_t _fwrite(void* _Str, size_t _Size, size_t _Count, FILE* _File) { return fwrite(_Str, _Size, _Count, _File); }

// STUB: STRONGHOLDCRUSADER 0x00580A1D
wchar_t* _wcsncpy(wchar_t* _Dest, wchar_t* _Source, size_t _Count) { return wcsncpy(_Dest, _Source, _Count); }

// STUB: STRONGHOLDCRUSADER 0x00580B69
int __wcsicmp(wchar_t* _Str1, wchar_t* _Str2) { return _wcsicmp(_Str1, _Str2); }

// Only jumps to _free in game version
// STUB: STRONGHOLDCRUSADER 0x00580DC1
void __cdecl _free(void* _Memory) { free(_Memory); }

// STUB: STRONGHOLDCRUSADER 0x00580DC6
errno_t _memcpy_s(void* _Dst, rsize_t _DstSize, void* _Src, rsize_t _MaxCount)
{
return memcpy_s(_Dst, _DstSize, _Src, _MaxCount);
}

// Only jumps to _free
// STUB: STRONGHOLDCRUSADER 0x00580E9C
void __cdecl _free_cpp(void* _Memory) { free(_Memory); }

// STUB: STRONGHOLDCRUSADER 0x00580F38
int _ucrt_close(int fileDescriptor) { return _close(fileDescriptor); }

// STUB: STRONGHOLDCRUSADER 0x005815C6
int _ucrt_read(int fileDescriptor, void* destination, size_t size)
{
return _read(fileDescriptor, destination, size);
}

// STUB: STRONGHOLDCRUSADER 0x005816C3
int _ucrt_open(char* _Filename, OpenFlagInt _OpenFlag, int _PMode) { return _open(_Filename, _OpenFlag, _PMode); }

// STUB: STRONGHOLDCRUSADER 0x005816FB
int _rand() { return rand(); }

// STUB: STRONGHOLDCRUSADER 0x005818EB
char* __strlwr(char* string) { return _strlwr(string); }

// STUB: STRONGHOLDCRUSADER 0x00581F6F
undefined4 _ucrt_write(int fileDescriptor, void* src, uint size) { return _write(fileDescriptor, src, size); }

// STUB: STRONGHOLDCRUSADER 0x00582050
void* _memcpy(void* _Dst, void* _Src, size_t _Size) { return memcpy(_Dst, _Src, _Size); }

// STUB: STRONGHOLDCRUSADER 0x005824CD
int __cdecl __toupper(int _C) { return toupper(_C); }

// STUB: STRONGHOLDCRUSADER 0x0058277E
int _ucrt_lseek(int fileDescriptor, long lDistanceToMove, DWORD moveMethod)
{
return _lseek(fileDescriptor, lDistanceToMove, moveMethod);
}

// STUB: STRONGHOLDCRUSADER 0x005835BB
int __strnicmp(char* _Str1, char* _Str2, size_t _MaxCount) { return _strnicmp(_Str1, _Str2, _MaxCount); }

// STUB: STRONGHOLDCRUSADER 0x00583D55
void _exit(int _Code) { exit(_Code); }

}
}
79 changes: 20 additions & 59 deletions status/addresses-SHC-3BB0A8C1.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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% | Reimplemented
SHC_3BB0A8C1_0x00467830 | 100.0% | Reimplemented
SHC_3BB0A8C1_0x00467850 | 0.0% | Pending
SHC_3BB0A8C1_0x00467890 | 0.0% | Pending
Expand Down Expand Up @@ -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 | 100.0% | Reimplemented
SHC_3BB0A8C1_0x00479A60 | 100.0% | Reimplemented
SHC_3BB0A8C1_0x00479AB0 | 100.0% | Reimplemented
SHC_3BB0A8C1_0x00479AF0 | 100.0% | Reimplemented
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -41921,6 +41879,9 @@ 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_0x00ED312C | 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
Expand Down