From 4a94b6fa9d1bc7b41ebf0c7594dbac175247d273 Mon Sep 17 00:00:00 2001 From: TheRedDaemon <66257843+TheRedDaemon@users.noreply.github.com> Date: Tue, 7 Jul 2026 22:32:43 +0200 Subject: [PATCH] reimplement: SHC_3BB0A8C1_0x00471720 100% --- .../playResourceLackSFX.cpp | 57 +++++++++++++++++++ status/addresses-SHC-3BB0A8C1.txt | 2 +- 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 src/OpenSHC/Audio/MissingResourceState/playResourceLackSFX.cpp diff --git a/src/OpenSHC/Audio/MissingResourceState/playResourceLackSFX.cpp b/src/OpenSHC/Audio/MissingResourceState/playResourceLackSFX.cpp new file mode 100644 index 0000000..a67bb3d --- /dev/null +++ b/src/OpenSHC/Audio/MissingResourceState/playResourceLackSFX.cpp @@ -0,0 +1,57 @@ +#include "../MissingResourceState.func.hpp" + +#include "OpenSHC/Audio/MSS/SoundSystem.func.hpp" +#include "OpenSHC/Audio/SFX/SFXState.func.hpp" +#include "OpenSHC/Global.func.hpp" +#include "OpenSHC/Random/RNG.func.hpp" + +#include "OpenSHC/Globals/DAT_SFXState.hpp" +#include "OpenSHC/Globals/DAT_SoundSystemState.hpp" +#include "OpenSHC/Globals/SEC_RNG.hpp" + +namespace OpenSHC { +namespace Audio { + + // FUNCTION: STRONGHOLDCRUSADER 0x00471720 + void MissingResourceState::playResourceLackSFX(int resourceTextElement, ResourceLackSFX resourceType) + { + MACRO_CALL(Global_Func::ActivateGameSpeedAndResourceLackDisplayElementUnk)( + (UI::Enums::DisplayElementID)(resourceTextElement + UI::Enums::DEID_IN_GAME_CHAT_Unk), resourceType, 5000); + if (MACRO_CALL_MEMBER(MSS::SoundSystem_Func::shouldSoundXNotBePlaying, DAT_SoundSystemState::ptr)()) { + return; + } + + int _randomIndex = SEC_RNG::instance.currentNumber1 % 10; + if (3 < _randomIndex) { + _randomIndex = 0; + } + MACRO_CALL_MEMBER(Random::RNG_Func::nextRandomNumber1, SEC_RNG::ptr)(); + switch (resourceType) { + case SFX::RLSFX_IRON: + MACRO_CALL_MEMBER(SFX::SFXState_Func::PlaySpeechSFX, DAT_SFXState::ptr)( + (SFX::SpeechEffectID)(_randomIndex + SFX::SEID_RESOURCE_NEED8)); + break; + case SFX::RLSFX_PITCH: + MACRO_CALL_MEMBER(SFX::SFXState_Func::PlaySpeechSFX, DAT_SFXState::ptr)( + (SFX::SpeechEffectID)(_randomIndex + SFX::SEID_RESOURCE_NEED12)); + break; + case SFX::RLSFX_GOLD: + MACRO_CALL_MEMBER(SFX::SFXState_Func::PlaySpeechSFX, DAT_SFXState::ptr)( + (SFX::SpeechEffectID)(_randomIndex + SFX::SEID_RESOURCE_NEED16)); + break; + case SFX::RLSFX_PARTIAL_STONEUnk: + MACRO_CALL_MEMBER(SFX::SFXState_Func::PlaySpeechSFX, DAT_SFXState::ptr)(SFX::SEID_RESOURCE_NEED20); + break; + case SFX::RLSFX_WOOD: + MACRO_CALL_MEMBER(SFX::SFXState_Func::PlaySpeechSFX, DAT_SFXState::ptr)( + (SFX::SpeechEffectID)(_randomIndex + SFX::SEID_RESOURCE_NEED21)); + break; + case SFX::RLSFX_STONE: + MACRO_CALL_MEMBER(SFX::SFXState_Func::PlaySpeechSFX, DAT_SFXState::ptr)( + (SFX::SpeechEffectID)(_randomIndex + SFX::SEID_RESOURCE_NEED25)); + break; + } + } + +} +} diff --git a/status/addresses-SHC-3BB0A8C1.txt b/status/addresses-SHC-3BB0A8C1.txt index bf59bb0..4131085 100644 --- a/status/addresses-SHC-3BB0A8C1.txt +++ b/status/addresses-SHC-3BB0A8C1.txt @@ -10468,7 +10468,7 @@ SHC_3BB0A8C1_0x00471610 | 0.0% | Pending SHC_3BB0A8C1_0x00471670 | 0.0% | Pending SHC_3BB0A8C1_0x00471690 | 0.0% | Pending SHC_3BB0A8C1_0x004716D0 | 0.0% | Pending -SHC_3BB0A8C1_0x00471720 | 0.0% | Pending +SHC_3BB0A8C1_0x00471720 | 100.0% | Reimplemented SHC_3BB0A8C1_0x004717F0 | 0.0% | Pending SHC_3BB0A8C1_0x004717F4 | 0.0% | Pending SHC_3BB0A8C1_0x004717F8 | 0.0% | Pending