From a501d2debe3025491075ce5734d668beea1e5a17 Mon Sep 17 00:00:00 2001 From: TheRedDaemon <66257843+TheRedDaemon@users.noreply.github.com> Date: Sun, 30 Aug 2026 19:55:37 +0200 Subject: [PATCH 1/2] reimplement: OpenSHC::Util::Timing::Stopwatch 100% --- .../Stopwatch/Constructor_Stopwatch.cpp | 17 ++++++++++++++++ src/OpenSHC/Util/Timing/Stopwatch/start.cpp | 16 +++++++++++++++ src/OpenSHC/Util/Timing/Stopwatch/stop.cpp | 20 +++++++++++++++++++ status/addresses-SHC-3BB0A8C1.txt | 4 ++-- 4 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/OpenSHC/Util/Timing/Stopwatch/Constructor_Stopwatch.cpp create mode 100644 src/OpenSHC/Util/Timing/Stopwatch/start.cpp create mode 100644 src/OpenSHC/Util/Timing/Stopwatch/stop.cpp diff --git a/src/OpenSHC/Util/Timing/Stopwatch/Constructor_Stopwatch.cpp b/src/OpenSHC/Util/Timing/Stopwatch/Constructor_Stopwatch.cpp new file mode 100644 index 000000000..e5cdf3128 --- /dev/null +++ b/src/OpenSHC/Util/Timing/Stopwatch/Constructor_Stopwatch.cpp @@ -0,0 +1,17 @@ +#include "../Stopwatch.func.hpp" + +namespace OpenSHC { +namespace Util { + namespace Timing { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046CEC0 + Stopwatch* Stopwatch::Constructor_Stopwatch() + { + this->running_0x4 = FALSE; + this->duration_0x0 = 0; + return this; + } + + } +} +} diff --git a/src/OpenSHC/Util/Timing/Stopwatch/start.cpp b/src/OpenSHC/Util/Timing/Stopwatch/start.cpp new file mode 100644 index 000000000..8f1feef1d --- /dev/null +++ b/src/OpenSHC/Util/Timing/Stopwatch/start.cpp @@ -0,0 +1,16 @@ +#include "../Stopwatch.func.hpp" + +namespace OpenSHC { +namespace Util { + namespace Timing { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046CED0 + void Stopwatch::start() + { + this->startTime_0x8 = timeGetTime(); + this->running_0x4 = TRUE; + } + + } +} +} diff --git a/src/OpenSHC/Util/Timing/Stopwatch/stop.cpp b/src/OpenSHC/Util/Timing/Stopwatch/stop.cpp new file mode 100644 index 000000000..9d3991d8c --- /dev/null +++ b/src/OpenSHC/Util/Timing/Stopwatch/stop.cpp @@ -0,0 +1,20 @@ +#include "../Stopwatch.func.hpp" + +namespace OpenSHC { +namespace Util { + namespace Timing { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046CEF0 + void Stopwatch::stop() + { + if (!this->running_0x4) { + return; + } + this->stopTime_0xc = timeGetTime(); + this->running_0x4 = FALSE; + this->duration_0x0 = this->stopTime_0xc - this->startTime_0x8; + } + + } +} +} diff --git a/status/addresses-SHC-3BB0A8C1.txt b/status/addresses-SHC-3BB0A8C1.txt index b80b8635f..17cfde3a0 100644 --- a/status/addresses-SHC-3BB0A8C1.txt +++ b/status/addresses-SHC-3BB0A8C1.txt @@ -20967,9 +20967,9 @@ SHC_3BB0A8C1_0x0046CEAC | 0.0% | Pending SHC_3BB0A8C1_0x0046CEB0 | 0.0% | Pending -SHC_3BB0A8C1_0x0046CEC0 | 0.0% | Pending +SHC_3BB0A8C1_0x0046CEC0 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046CED0 | 0.0% | Pending +SHC_3BB0A8C1_0x0046CED0 | 100.0% | Reimplemented SHC_3BB0A8C1_0x0046CEF0 | 0.0% | Pending From 41482ae94d31c8b5a495fe7934e3093c71cccfa9 Mon Sep 17 00:00:00 2001 From: TheRedDaemon <66257843+TheRedDaemon@users.noreply.github.com> Date: Sun, 30 Aug 2026 20:51:46 +0200 Subject: [PATCH 2/2] reimplement: OpenSHC::Util::WideCharMultiByteState 100% --- .../multiByteToWideCharWithSize.cpp | 19 +++++++++++++++++++ .../multiByteToWideCharacter.cpp | 17 +++++++++++++++++ .../singleMultiByteToWideChar.cpp | 16 ++++++++++++++++ .../singleWideCharToMultiByte.cpp | 16 ++++++++++++++++ .../wideCharToMultiByteComplete.cpp | 17 +++++++++++++++++ .../wideCharToMultiByteWithSize.cpp | 19 +++++++++++++++++++ status/addresses-SHC-3BB0A8C1.txt | 14 +++++++------- 7 files changed, 111 insertions(+), 7 deletions(-) create mode 100644 src/OpenSHC/Util/WideCharMultiByteState/multiByteToWideCharWithSize.cpp create mode 100644 src/OpenSHC/Util/WideCharMultiByteState/multiByteToWideCharacter.cpp create mode 100644 src/OpenSHC/Util/WideCharMultiByteState/singleMultiByteToWideChar.cpp create mode 100644 src/OpenSHC/Util/WideCharMultiByteState/singleWideCharToMultiByte.cpp create mode 100644 src/OpenSHC/Util/WideCharMultiByteState/wideCharToMultiByteComplete.cpp create mode 100644 src/OpenSHC/Util/WideCharMultiByteState/wideCharToMultiByteWithSize.cpp diff --git a/src/OpenSHC/Util/WideCharMultiByteState/multiByteToWideCharWithSize.cpp b/src/OpenSHC/Util/WideCharMultiByteState/multiByteToWideCharWithSize.cpp new file mode 100644 index 000000000..316bcaa93 --- /dev/null +++ b/src/OpenSHC/Util/WideCharMultiByteState/multiByteToWideCharWithSize.cpp @@ -0,0 +1,19 @@ +#include "../WideCharMultiByteState.func.hpp" + +#include "OpenSHC/Globals/DAT_TextManagerObject.hpp" + +namespace OpenSHC { +namespace Util { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046B140 + int WideCharMultiByteState::multiByteToWideCharWithSize( + LPWSTR lpWideCharStr, LPCSTR lpMultiByteStr, int numberOfSymbols) + { + int numberOfCharsWritten = MultiByteToWideChar(DAT_TextManagerObject::instance.codePage, MB_PRECOMPOSED, + lpMultiByteStr, numberOfSymbols, lpWideCharStr, numberOfSymbols); + lpWideCharStr[numberOfSymbols] = L'\0'; + return numberOfCharsWritten; + } + +} +} diff --git a/src/OpenSHC/Util/WideCharMultiByteState/multiByteToWideCharacter.cpp b/src/OpenSHC/Util/WideCharMultiByteState/multiByteToWideCharacter.cpp new file mode 100644 index 000000000..8157347a6 --- /dev/null +++ b/src/OpenSHC/Util/WideCharMultiByteState/multiByteToWideCharacter.cpp @@ -0,0 +1,17 @@ +#include "../WideCharMultiByteState.func.hpp" + +#include "OpenSHC/Globals/DAT_TextManagerObject.hpp" + +namespace OpenSHC { +namespace Util { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046B0D0 + int WideCharMultiByteState::multiByteToWideCharacter(LPWSTR lpWideCharStr, LPCSTR lpMultiByteStr) + { + int const numberOfBytes = strlen(lpMultiByteStr) + 1; // includes null terminator + return MultiByteToWideChar(DAT_TextManagerObject::instance.codePage, MB_PRECOMPOSED, lpMultiByteStr, + numberOfBytes, lpWideCharStr, numberOfBytes); + } + +} +} diff --git a/src/OpenSHC/Util/WideCharMultiByteState/singleMultiByteToWideChar.cpp b/src/OpenSHC/Util/WideCharMultiByteState/singleMultiByteToWideChar.cpp new file mode 100644 index 000000000..de5f99117 --- /dev/null +++ b/src/OpenSHC/Util/WideCharMultiByteState/singleMultiByteToWideChar.cpp @@ -0,0 +1,16 @@ +#include "../WideCharMultiByteState.func.hpp" + +namespace OpenSHC { +namespace Util { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046B1B0 + WCHAR WideCharMultiByteState::singleMultiByteToWideChar(char character) + { + WCHAR buffer[10]; + MACRO_CALL_MEMBER(OpenSHC::Util::WideCharMultiByteState_Func::multiByteToWideCharWithSize, this)( + buffer, &character, 1); + return buffer[0]; + } + +} +} diff --git a/src/OpenSHC/Util/WideCharMultiByteState/singleWideCharToMultiByte.cpp b/src/OpenSHC/Util/WideCharMultiByteState/singleWideCharToMultiByte.cpp new file mode 100644 index 000000000..d12a9b171 --- /dev/null +++ b/src/OpenSHC/Util/WideCharMultiByteState/singleWideCharToMultiByte.cpp @@ -0,0 +1,16 @@ +#include "../WideCharMultiByteState.func.hpp" + +namespace OpenSHC { +namespace Util { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046B170 + char WideCharMultiByteState::singleWideCharToMultiByte(WCHAR wideChar) + { + char _byteBuffer[12]; + MACRO_CALL_MEMBER(OpenSHC::Util::WideCharMultiByteState_Func::wideCharToMultiByteWithSize, this)( + _byteBuffer, &wideChar, 1); + return _byteBuffer[0]; + } + +} +} diff --git a/src/OpenSHC/Util/WideCharMultiByteState/wideCharToMultiByteComplete.cpp b/src/OpenSHC/Util/WideCharMultiByteState/wideCharToMultiByteComplete.cpp new file mode 100644 index 000000000..591dace1f --- /dev/null +++ b/src/OpenSHC/Util/WideCharMultiByteState/wideCharToMultiByteComplete.cpp @@ -0,0 +1,17 @@ +#include "../WideCharMultiByteState.func.hpp" + +#include "OpenSHC/Globals/DAT_TextManagerObject.hpp" + +namespace OpenSHC { +namespace Util { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046B080 + int WideCharMultiByteState::wideCharToMultiByteComplete(LPSTR charOut, LPCWSTR wideCharIn) + { + int numberOfWideChars = wcslen(wideCharIn) + 1; // +1 for null terminator + return WideCharToMultiByte(DAT_TextManagerObject::instance.codePage, NULL, wideCharIn, numberOfWideChars, + charOut, numberOfWideChars, NULL, NULL); + } + +} +} diff --git a/src/OpenSHC/Util/WideCharMultiByteState/wideCharToMultiByteWithSize.cpp b/src/OpenSHC/Util/WideCharMultiByteState/wideCharToMultiByteWithSize.cpp new file mode 100644 index 000000000..c5924f5d6 --- /dev/null +++ b/src/OpenSHC/Util/WideCharMultiByteState/wideCharToMultiByteWithSize.cpp @@ -0,0 +1,19 @@ +#include "../WideCharMultiByteState.func.hpp" + +#include "OpenSHC/Globals/DAT_TextManagerObject.hpp" + +namespace OpenSHC { +namespace Util { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046B110 + int WideCharMultiByteState::wideCharToMultiByteWithSize( + LPSTR lpMultiByteStr, LPWSTR lpWideCharStr, int numOfSymbols) + { + int const _numOfBytesWritten = WideCharToMultiByte(DAT_TextManagerObject::instance.codePage, NULL, + lpWideCharStr, numOfSymbols, lpMultiByteStr, numOfSymbols, NULL, NULL); + lpMultiByteStr[numOfSymbols] = '\0'; + return _numOfBytesWritten; + } + +} +} diff --git a/status/addresses-SHC-3BB0A8C1.txt b/status/addresses-SHC-3BB0A8C1.txt index 17cfde3a0..f9e104f98 100644 --- a/status/addresses-SHC-3BB0A8C1.txt +++ b/status/addresses-SHC-3BB0A8C1.txt @@ -20729,17 +20729,17 @@ SHC_3BB0A8C1_0x0046AE80 | 100.0% | Reimplemented SHC_3BB0A8C1_0x0046AEC0 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046B080 | 0.0% | Pending +SHC_3BB0A8C1_0x0046B080 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046B0D0 | 0.0% | Pending +SHC_3BB0A8C1_0x0046B0D0 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046B110 | 0.0% | Pending +SHC_3BB0A8C1_0x0046B110 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046B140 | 0.0% | Pending +SHC_3BB0A8C1_0x0046B140 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046B170 | 0.0% | Pending +SHC_3BB0A8C1_0x0046B170 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046B1B0 | 0.0% | Pending +SHC_3BB0A8C1_0x0046B1B0 | 100.0% | Reimplemented SHC_3BB0A8C1_0x0046B1F0 | 0.0% | Pending @@ -20971,7 +20971,7 @@ SHC_3BB0A8C1_0x0046CEC0 | 100.0% | Reimplemented SHC_3BB0A8C1_0x0046CED0 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046CEF0 | 0.0% | Pending +SHC_3BB0A8C1_0x0046CEF0 | 100.0% | Reimplemented SHC_3BB0A8C1_0x0046CF10 | 0.0% | Pending