From 8afebda1474c8d41f69027bf0685612c0477bf60 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Fri, 21 Nov 2025 12:48:58 -0600 Subject: [PATCH] feat(sound): add SI2::Init --- src/client/Client.cpp | 3 +- src/sound/CVarHandlers.cpp | 63 +++++++ src/sound/CVarHandlers.hpp | 30 ++++ src/sound/Interface.hpp | 6 + src/sound/SI2.cpp | 343 +++++++++++++++++++++++++++++++++++++ src/sound/SI2.hpp | 2 + 6 files changed, 446 insertions(+), 1 deletion(-) create mode 100644 src/sound/CVarHandlers.cpp create mode 100644 src/sound/CVarHandlers.hpp create mode 100644 src/sound/Interface.hpp diff --git a/src/client/Client.cpp b/src/client/Client.cpp index 87cdbd0..99aac18 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -14,6 +14,7 @@ #include "gx/Texture.hpp" #include "model/Model2.hpp" #include "net/Poll.hpp" +#include "sound/Interface.hpp" #include "ui/FrameScript.hpp" #include "ui/FrameXML.hpp" #include "world/World.hpp" @@ -496,9 +497,9 @@ void WowClientInit() { // LoadingScreenInitialize(); FrameScript_Initialize(0); + SI2::Init(0); // TODO - // SI2::Init(0); // sub_6F66B0(); FrameXML_RegisterDefault(); diff --git a/src/sound/CVarHandlers.cpp b/src/sound/CVarHandlers.cpp new file mode 100644 index 0000000..e8a971e --- /dev/null +++ b/src/sound/CVarHandlers.cpp @@ -0,0 +1,63 @@ +#include "sound/CVarHandlers.hpp" +#include "console/CVar.hpp" +#include "util/Unimplemented.hpp" + +bool EnableMicrophoneHandler(CVar* var, const char* oldValue, const char* value, void* arg) { + // TODO + WHOA_UNIMPLEMENTED(true); +} + +bool EnableReverbHandler(CVar* var, const char* oldValue, const char* value, void* arg) { + // TODO + WHOA_UNIMPLEMENTED(true); +} + +bool EnableVoiceChatHandler(CVar* var, const char* oldValue, const char* value, void* arg) { + // TODO + WHOA_UNIMPLEMENTED(true); +} + +bool InboundChatVolumeHandler(CVar* var, const char* oldValue, const char* value, void* arg) { + // TODO + WHOA_UNIMPLEMENTED(true); +} + +bool OutboundChatVolumeHandler(CVar* var, const char* oldValue, const char* value, void* arg) { + // TODO + WHOA_UNIMPLEMENTED(true); +} + +bool OutputDriverHandler(CVar* var, const char* oldValue, const char* value, void* arg) { + // TODO + WHOA_UNIMPLEMENTED(true); +} + +bool PushToTalkButtonHandler(CVar* var, const char* oldValue, const char* value, void* arg) { + // TODO + WHOA_UNIMPLEMENTED(true); +} + +bool SelfMuteHandler(CVar* var, const char* oldValue, const char* value, void* arg) { + // TODO + WHOA_UNIMPLEMENTED(true); +} + +bool VoiceActivationSensitivityHandler(CVar* var, const char* oldValue, const char* value, void* arg) { + // TODO + WHOA_UNIMPLEMENTED(true); +} + +bool VoiceChatInputDriverHandler(CVar* var, const char* oldValue, const char* value, void* arg) { + // TODO + WHOA_UNIMPLEMENTED(true); +} + +bool VoiceChatModeHandler(CVar* var, const char* oldValue, const char* value, void* arg) { + // TODO + WHOA_UNIMPLEMENTED(true); +} + +bool VoiceChatOutputDriverHandler(CVar* var, const char* oldValue, const char* value, void* arg) { + // TODO + WHOA_UNIMPLEMENTED(true); +} diff --git a/src/sound/CVarHandlers.hpp b/src/sound/CVarHandlers.hpp new file mode 100644 index 0000000..4ffd4ce --- /dev/null +++ b/src/sound/CVarHandlers.hpp @@ -0,0 +1,30 @@ +#ifndef SOUND_C_VAR_HANDLERS_HPP +#define SOUND_C_VAR_HANDLERS_HPP + +class CVar; + +bool EnableMicrophoneHandler(CVar* var, const char* oldValue, const char* value, void* arg); + +bool EnableReverbHandler(CVar* var, const char* oldValue, const char* value, void* arg); + +bool EnableVoiceChatHandler(CVar* var, const char* oldValue, const char* value, void* arg); + +bool InboundChatVolumeHandler(CVar* var, const char* oldValue, const char* value, void* arg); + +bool OutboundChatVolumeHandler(CVar* var, const char* oldValue, const char* value, void* arg); + +bool OutputDriverHandler(CVar* var, const char* oldValue, const char* value, void* arg); + +bool PushToTalkButtonHandler(CVar* var, const char* oldValue, const char* value, void* arg); + +bool SelfMuteHandler(CVar* var, const char* oldValue, const char* value, void* arg); + +bool VoiceActivationSensitivityHandler(CVar* var, const char* oldValue, const char* value, void* arg); + +bool VoiceChatInputDriverHandler(CVar* var, const char* oldValue, const char* value, void* arg); + +bool VoiceChatModeHandler(CVar* var, const char* oldValue, const char* value, void* arg); + +bool VoiceChatOutputDriverHandler(CVar* var, const char* oldValue, const char* value, void* arg); + +#endif diff --git a/src/sound/Interface.hpp b/src/sound/Interface.hpp new file mode 100644 index 0000000..9770829 --- /dev/null +++ b/src/sound/Interface.hpp @@ -0,0 +1,6 @@ +#ifndef SOUND_INTERFACE_HPP +#define SOUND_INTERFACE_HPP + +#include "sound/SI2.hpp" + +#endif diff --git a/src/sound/SI2.cpp b/src/sound/SI2.cpp index 7622510..b548e03 100644 --- a/src/sound/SI2.cpp +++ b/src/sound/SI2.cpp @@ -1,6 +1,349 @@ #include "sound/SI2.hpp" +#include "console/CVar.hpp" +#include "sound/CVarHandlers.hpp" #include "ui/FrameScript.hpp" +int32_t SI2::Init(int32_t a1) { + // TODO + // if (CmdLineGetBool(26)) { + // SI2::RegisterCVars(); + // + // // TODO + // // sub_4D1600(); + // + // return 17; + // } + + if (!a1) { + // TODO + // sub_4CB160(); + // sub_4CF990(); + // sub_4CECB0(); + // sub_4D0B70(); + // sub_4D04E0(); + + SI2::RegisterCVars(); + } + + // TODO + + return 0; +} + +void SI2::RegisterCVars() { + CVar::Register( + "StartTalkingDelay", + "", + 0x0, + "0.0", + nullptr, + DEFAULT, + false, + nullptr, + false + ); + + CVar::Register( + "StartTalkingTime", + "", + 0x0, + "1.0", + nullptr, + DEFAULT, + false, + nullptr, + false + ); + + CVar::Register( + "StopTalkingDelay", + "", + 0x0, + "0.0", + nullptr, + DEFAULT, + false, + nullptr, + false + ); + + CVar::Register( + "StopTalkingTime", + "", + 0x0, + "2.0", + nullptr, + DEFAULT, + false, + nullptr, + false + ); + + CVar::Register( + "OutboundChatVolume", + "The software amplification factor (0.0 - 2.0)", + 0x0, + "1.0", + &OutboundChatVolumeHandler, + DEFAULT, + false, + nullptr, + false + ); + + CVar::Register( + "InboundChatVolume", + "The volume of all other chat you hear (0.0 - 1.0)", + 0x0, + "1.0", + &InboundChatVolumeHandler, + DEFAULT, + false, + nullptr, + false + ); + + CVar::Register( + "VoiceChatMode", + "Push to talk(0) or voice activation(1)", + 0x0, + "0", + &VoiceChatModeHandler, + DEFAULT, + false, + nullptr, + false + ); + + CVar::Register( + "VoiceActivationSensitivity", + "Sensitivity of the microphone (0.0 - 1.0)", + 0x0, + "0.4", + &VoiceActivationSensitivityHandler, + DEFAULT, + false, + nullptr, + false + ); + + CVar::Register( + "EnableMicrophone", + "Enables the microphone so you can speak.", + 0x0, + "1", + &EnableMicrophoneHandler, + DEFAULT, + false, + nullptr, + false + ); + + CVar::Register( + "EnableVoiceChat", + "Enables the voice chat feature.", + 0x0, + "0", + &EnableVoiceChatHandler, + DEFAULT, + false, + nullptr, + false + ); + + CVar::Register( + "VoiceChatSelfMute", + "Turn off your ability to talk.", + 0x0, + "0", + &SelfMuteHandler, + DEFAULT, + false, + nullptr, + false + ); + + CVar::Register( + "PushToTalkButton", + "String representation of the Push-To-Talk button.", + 0x0, + "`", + &PushToTalkButtonHandler, + DEFAULT, + false, + nullptr, + false + ); + + CVar::Register( + "Sound_OutputQuality", + "sound quality, default 1 (medium)", + 0x0, + "1", + nullptr, + SOUND, + false, + nullptr, + false + ); + + CVar::Register( + "Sound_NumChannels", + "number of sound channels", + 0x0, + "32", + nullptr, + SOUND, + false, + nullptr, + false + ); + + CVar::Register( + "Sound_EnableReverb", + "", + 0x0, + "0", + &EnableReverbHandler, + SOUND, + false, + nullptr, + false + ); + + CVar::Register( + "Sound_EnableSoftwareHRTF", + "", + 0x0, + "0", + nullptr, + SOUND, + false, + nullptr, + false + ); + + CVar::Register( + "Sound_VoiceChatInputDriverIndex", + "", + 0x0, + "0", + &VoiceChatInputDriverHandler, + SOUND, + false, + nullptr, + false + ); + + CVar::Register( + "Sound_VoiceChatInputDriverName", + "", + 0, + "Primary Sound Capture Driver", + nullptr, + SOUND, + false, + nullptr, + false + ); + + CVar::Register( + "Sound_VoiceChatOutputDriverIndex", + "", + 0x0, + "0", + &VoiceChatOutputDriverHandler, + SOUND, + false, + nullptr, + false + ); + + CVar::Register( + "Sound_VoiceChatOutputDriverName", + "", + 0x0, + "Primary Sound Driver", + nullptr, + SOUND, + false, + nullptr, + false + ); + + CVar::Register( + "Sound_OutputDriverIndex", + "", + 0x0, + "0", + &OutputDriverHandler, + SOUND, + false, + nullptr, + false + ); + + CVar::Register( + "Sound_OutputDriverName", + "", + 0x0, + "Primary Sound Driver", + nullptr, + SOUND, + false, + nullptr, + false + ); + + CVar::Register( + "Sound_DSPBufferSize", + "sound buffer size, default 0", + 0x0, + "0", + nullptr, + SOUND, + false, + nullptr, + false + ); + + CVar::Register( + "Sound_EnableHardware", + "Enables Hardware", + 0x0, + "0", + nullptr, + SOUND, + false, + nullptr, + false + ); + + CVar::Register( + "Sound_EnableMode2", + "test", + 0x0, + "0", + nullptr, + SOUND, + false, + nullptr, + false + ); + + CVar::Register( + "Sound_EnableMixMode2", + "test", + 0x0, + "0", + nullptr, + SOUND, + false, + nullptr, + false + ); +} + void SI2::RegisterScriptFunctions() { for (int32_t i = 0; i < NUM_SCRIPT_FUNCTIONS_SI2; ++i) { FrameScript_RegisterFunction( diff --git a/src/sound/SI2.hpp b/src/sound/SI2.hpp index ec41703..ba4992e 100644 --- a/src/sound/SI2.hpp +++ b/src/sound/SI2.hpp @@ -11,6 +11,8 @@ class SI2 { static FrameScript_Method s_ScriptFunctions[NUM_SCRIPT_FUNCTIONS_SI2]; // Static functions + static int32_t Init(int32_t a1); + static void RegisterCVars(); static void RegisterScriptFunctions(); };