diff --git a/include/dusk/settings.h b/include/dusk/settings.h index 68850a28d0..cf4d79f6ac 100644 --- a/include/dusk/settings.h +++ b/include/dusk/settings.h @@ -1,68 +1,76 @@ #ifndef DUSK_CONFIG_H #define DUSK_CONFIG_H -#include "config_var.hpp" +#include "dusk/config_var.hpp" + +namespace dusk { -namespace dusk::settings { using namespace config; // Persistent user settings -namespace video { -extern ConfigVar enableFullscreen; -} +struct UserSettings { + // Program settings -namespace audio { -extern ConfigVar masterVolume; -extern ConfigVar mainMusicVolume; -extern ConfigVar subMusicVolume; -extern ConfigVar soundEffectsVolume; -extern ConfigVar fanfareVolume; -extern ConfigVar enableReverb; -} + struct { + // Video + ConfigVar enableFullscreen; + } video; -namespace game { -// QoL -extern ConfigVar enableQuickTransform; -extern ConfigVar hideTvSettingsScreen; -extern ConfigVar biggerWallets; -extern ConfigVar noReturnRupees; -extern ConfigVar disableRupeeCutscenes; -extern ConfigVar noSwordRecoil; -extern ConfigVar damageMultiplier; -extern ConfigVar instantDeath; -extern ConfigVar fastClimbing; -extern ConfigVar fastTears; -extern ConfigVar noMissClimbing; + struct { + // Audio + ConfigVar masterVolume; + ConfigVar mainMusicVolume; + ConfigVar subMusicVolume; + ConfigVar soundEffectsVolume; + ConfigVar fanfareVolume; + ConfigVar enableReverb; + } audio; -// Preferences -extern ConfigVar enableMirrorMode; -extern ConfigVar invertCameraXAxis; + // Game settings -// Graphics -extern ConfigVar enableBloom; -extern ConfigVar useWaterProjectionOffset; + struct { + // QoL + ConfigVar enableQuickTransform; + ConfigVar hideTvSettingsScreen; + ConfigVar biggerWallets; + ConfigVar noReturnRupees; + ConfigVar disableRupeeCutscenes; + ConfigVar noSwordRecoil; + ConfigVar damageMultiplier; + ConfigVar instantDeath; + ConfigVar fastClimbing; + ConfigVar noMissClimbing; + ConfigVar fastTears; -// Audio -extern ConfigVar noLowHpSound; -extern ConfigVar midnasLamentNonStop; + // Preferences + ConfigVar enableMirrorMode; + ConfigVar invertCameraXAxis; -// Cheats -extern ConfigVar enableFastIronBoots; -extern ConfigVar canTransformAnywhere; + // Graphics + ConfigVar enableBloom; + ConfigVar useWaterProjectionOffset; -// Technical -extern ConfigVar restoreWiiGlitches; + // Audio + ConfigVar noLowHpSound; + ConfigVar midnasLamentNonStop; -// Controls -extern ConfigVar enableTurboKeybind; -} + // Cheats + ConfigVar enableFastIronBoots; + ConfigVar canTransformAnywhere; -void Register(); + // Technical + ConfigVar restoreWiiGlitches; -} + // Controls + ConfigVar enableTurboKeybind; + } game; +}; + +UserSettings& getSettings(); + +void registerSettings(); -namespace dusk { // Transient settings struct CollisionViewSettings { diff --git a/include/m_Do/m_Do_controller_pad.h b/include/m_Do/m_Do_controller_pad.h index f76a38cac8..e187efd17d 100644 --- a/include/m_Do/m_Do_controller_pad.h +++ b/include/m_Do/m_Do_controller_pad.h @@ -56,7 +56,7 @@ public: static s16 getStickAngle3D(u32 pad) { #if TARGET_PC - if (dusk::settings::game::enableMirrorMode) { + if (dusk::getSettings().game.enableMirrorMode) { return -getCpadInfo(pad).mMainStickAngle; } else { return getCpadInfo(pad).mMainStickAngle; @@ -68,7 +68,7 @@ public: static f32 getSubStickX3D(u32 pad) { #if TARGET_PC - if (dusk::settings::game::enableMirrorMode) { + if (dusk::getSettings().game.enableMirrorMode) { return -getCpadInfo(pad).mCStickPosX; } else { return getCpadInfo(pad).mCStickPosX; diff --git a/src/Z2AudioLib/Z2AudioMgr.cpp b/src/Z2AudioLib/Z2AudioMgr.cpp index 8c05678222..d6d78fb4b7 100644 --- a/src/Z2AudioLib/Z2AudioMgr.cpp +++ b/src/Z2AudioLib/Z2AudioMgr.cpp @@ -157,7 +157,7 @@ void Z2AudioMgr::zeldaGFrameWork() { processBgmFramework(); #if TARGET_PC - if (!dusk::settings::game::noLowHpSound) { + if (!dusk::getSettings().game.noLowHpSound) { processHeartGaugeSound(); } #else diff --git a/src/Z2AudioLib/Z2SoundObjMgr.cpp b/src/Z2AudioLib/Z2SoundObjMgr.cpp index 463040d692..19099c7675 100644 --- a/src/Z2AudioLib/Z2SoundObjMgr.cpp +++ b/src/Z2AudioLib/Z2SoundObjMgr.cpp @@ -109,7 +109,7 @@ void Z2SoundObjMgr::searchEnemy() { #if TARGET_PC if (Z2GetSeqMgr()->checkBgmIDPlaying(Z2BGM_MIDNA_SOS) && - dusk::settings::game::midnasLamentNonStop) + dusk::getSettings().game.midnasLamentNonStop) { Z2GetSeqMgr()->changeSubBgmStatus(0); return; diff --git a/src/d/actor/d_a_alink.cpp b/src/d/actor/d_a_alink.cpp index 993f78037b..48269ddc56 100644 --- a/src/d/actor/d_a_alink.cpp +++ b/src/d/actor/d_a_alink.cpp @@ -7510,7 +7510,7 @@ void daAlink_c::setBlendMoveAnime(f32 i_morf) { BOOL sp24 = checkEventRun(); BOOL sp20 = checkBootsMoveAnime(1); #if TARGET_PC - if (dusk::settings::game::enableFastIronBoots) { + if (dusk::getSettings().game.enableFastIronBoots) { sp20 = FALSE; } #endif @@ -9475,7 +9475,7 @@ void daAlink_c::setStickData() { mHeavySpeedMultiplier = mpHIO->mItem.mIronBoots.m.mInputFactor; } #if TARGET_PC - if (dusk::settings::game::enableFastIronBoots) { + if (dusk::getSettings().game.enableFastIronBoots) { mHeavySpeedMultiplier = 1.0f; } #endif @@ -9487,7 +9487,7 @@ void daAlink_c::setStickData() { mHeavySpeedMultiplier = mpHIO->mItem.mIronBoots.m.mWaterInputFactor; } #if TARGET_PC - if (dusk::settings::game::enableFastIronBoots) { + if (dusk::getSettings().game.enableFastIronBoots) { mHeavySpeedMultiplier = 1.0f; } #endif diff --git a/src/d/actor/d_a_alink_cut.inc b/src/d/actor/d_a_alink_cut.inc index 5928f7e891..8e61a262cb 100644 --- a/src/d/actor/d_a_alink_cut.inc +++ b/src/d/actor/d_a_alink_cut.inc @@ -372,7 +372,7 @@ BOOL daAlink_c::changeCutReverseProc(daAlink_c::daAlink_ANM i_anmID) { } #if TARGET_PC - if (dusk::settings::game::noSwordRecoil) { + if (dusk::getSettings().game.noSwordRecoil) { return FALSE; } #endif diff --git a/src/d/actor/d_a_alink_damage.inc b/src/d/actor/d_a_alink_damage.inc index 9bbe04206b..420011cfd6 100644 --- a/src/d/actor/d_a_alink_damage.inc +++ b/src/d/actor/d_a_alink_damage.inc @@ -153,8 +153,8 @@ f32 daAlink_c::damageMagnification(BOOL i_checkZoraMag, int param_1) { } #if TARGET_PC - base_mag *= dusk::settings::game::damageMultiplier; - if (dusk::settings::game::instantDeath) { + base_mag *= dusk::getSettings().game.damageMultiplier; + if (dusk::getSettings().game.instantDeath) { base_mag = 9999.0f; } #endif diff --git a/src/d/actor/d_a_alink_demo.inc b/src/d/actor/d_a_alink_demo.inc index c1c8c53bd2..aa77b24129 100644 --- a/src/d/actor/d_a_alink_demo.inc +++ b/src/d/actor/d_a_alink_demo.inc @@ -2233,7 +2233,7 @@ void daAlink_c::setGetSubBgm(int i_itemNo) { BOOL daAlink_c::checkTreasureRupeeReturn(int i_itemNo) const { #if TARGET_PC - if (dusk::settings::game::noReturnRupees) { + if (dusk::getSettings().game.noReturnRupees) { return FALSE; } #endif @@ -4307,7 +4307,7 @@ bool daAlink_c::checkAcceptWarp() { */ if (mLinkAcch.ChkGroundHit() && !checkModeFlg(MODE_PLAYER_FLY) #if TARGET_PC - && (dusk::settings::game::restoreWiiGlitches || !checkNoResetFlg0(FLG0_WATER_IN_MOVE)) + && (dusk::getSettings().game.restoreWiiGlitches || !checkNoResetFlg0(FLG0_WATER_IN_MOVE)) #elif VERSION != VERSION_WII_USA_R0 && !checkNoResetFlg0(FLG0_WATER_IN_MOVE) #endif @@ -4318,7 +4318,7 @@ bool daAlink_c::checkAcceptWarp() { */ if ( #if TARGET_PC - (dusk::settings::game::restoreWiiGlitches || !getSlidePolygon(&plane)) && + (dusk::getSettings().game.restoreWiiGlitches || !getSlidePolygon(&plane)) && #elif VERSION != VERSION_WII_USA_R0 !getSlidePolygon(&plane) && #endif diff --git a/src/d/actor/d_a_alink_dusk.cpp b/src/d/actor/d_a_alink_dusk.cpp index fdd309adae..95218268ac 100644 --- a/src/d/actor/d_a_alink_dusk.cpp +++ b/src/d/actor/d_a_alink_dusk.cpp @@ -5,7 +5,7 @@ #include "d/d_meter2_info.h" void daAlink_c::handleQuickTransform() { - if (!dusk::settings::game::enableQuickTransform) { + if (!dusk::getSettings().game.enableQuickTransform) { return; } diff --git a/src/d/actor/d_a_alink_hang.inc b/src/d/actor/d_a_alink_hang.inc index 73218f4b87..89f11fc940 100644 --- a/src/d/actor/d_a_alink_hang.inc +++ b/src/d/actor/d_a_alink_hang.inc @@ -15,8 +15,8 @@ f32 daAlink_c::getHangMoveAnmSpeed() { #if TARGET_PC return getAnmSpeedStickRate( - dusk::settings::game::fastClimbing ? 2.0f : mpHIO->mWallHang.mWallMove.m.mMinAnmSpeed, - dusk::settings::game::fastClimbing ? 2.0f : mpHIO->mWallHang.mWallMove.m.mMaxAnmSpeed + dusk::getSettings().game.fastClimbing ? 2.0f : mpHIO->mWallHang.mWallMove.m.mMinAnmSpeed, + dusk::getSettings().game.fastClimbing ? 2.0f : mpHIO->mWallHang.mWallMove.m.mMaxAnmSpeed ); #else return getAnmSpeedStickRate(mpHIO->mWallHang.mWallMove.m.mMinAnmSpeed, @@ -286,7 +286,7 @@ int daAlink_c::procHangStartInit() { if (checkHangFootWall()) { #if TARGET_PC - if (!is_prev_hangReady && cM_rnd() < 0.7f && !dusk::settings::game::noMissClimbing) { + if (!is_prev_hangReady && cM_rnd() < 0.7f && !dusk::getSettings().game.noMissClimbing) { #else if (!is_prev_hangReady && cM_rnd() < 0.7f) { #endif @@ -1221,7 +1221,7 @@ void daAlink_c::setLadderPos(int param_0) { f32 daAlink_c::getLadderMoveAnmSpeed() { return getAnmSpeedStickRate(mpHIO->mLadder.m.mMoveMinASpeed, #if TARGET_PC - dusk::settings::game::fastClimbing ? 1.575f : mpHIO->mLadder.m.mMoveMaxSpeed + dusk::getSettings().game.fastClimbing ? 1.575f : mpHIO->mLadder.m.mMoveMaxSpeed #else mpHIO->mLadder.m.mMoveMaxSpeed #endif @@ -1322,7 +1322,7 @@ int daAlink_c::procLadderUpStartInit() { setSingleAnimeBaseSpeed(ANM_LADDER_UP_START, #if TARGET_PC - dusk::settings::game::fastClimbing ? 1.8f : mpHIO->mLadder.m.mClimbUpStartASpeed, + dusk::getSettings().game.fastClimbing ? 1.8f : mpHIO->mLadder.m.mClimbUpStartASpeed, #else mpHIO->mLadder.m.mClimbUpStartASpeed, #endif @@ -1378,7 +1378,7 @@ int daAlink_c::procLadderUpEndInit(BOOL param_0) { setSingleAnimeBaseSpeed(anm_id, #if TARGET_PC - dusk::settings::game::fastClimbing ? 1.765f : mpHIO->mLadder.m.mClimbUpEndASpeed, + dusk::getSettings().game.fastClimbing ? 1.765f : mpHIO->mLadder.m.mClimbUpEndASpeed, #else mpHIO->mLadder.m.mClimbUpEndASpeed, #endif @@ -1443,7 +1443,7 @@ int daAlink_c::procLadderDownStartInit() { setSingleAnimeBaseSpeed(ANM_LADDER_DOWN_START, #if TARGET_PC - dusk::settings::game::fastClimbing ? 1.8f : mpHIO->mLadder.m.mClimbDownStartASpeed, + dusk::getSettings().game.fastClimbing ? 1.8f : mpHIO->mLadder.m.mClimbDownStartASpeed, #else mpHIO->mLadder.m.mClimbDownStartASpeed, #endif @@ -1505,7 +1505,7 @@ int daAlink_c::procLadderDownEndInit(BOOL param_0) { setSingleAnimeBaseSpeed(anm_id, #if TARGET_PC - dusk::settings::game::fastClimbing ? 1.8f : mpHIO->mLadder.m.mClimbDownEndASpeed, + dusk::getSettings().game.fastClimbing ? 1.8f : mpHIO->mLadder.m.mClimbDownEndASpeed, #else mpHIO->mLadder.m.mClimbDownEndASpeed, #endif @@ -1643,7 +1643,7 @@ int daAlink_c::procLadderMove() { f32 daAlink_c::getClimbMoveUpDownAnmSpeed() { return getAnmSpeedStickRate(mpHIO->mLadder.m.mWallVerticalMinAnmSpeed, #if TARGET_PC - dusk::settings::game::fastClimbing ? 1.875f : mpHIO->mLadder.m.mWallVerticalMaxAnmSpeed + dusk::getSettings().game.fastClimbing ? 1.875f : mpHIO->mLadder.m.mWallVerticalMaxAnmSpeed #else mpHIO->mLadder.m.mWallVerticalMaxAnmSpeed #endif @@ -1653,7 +1653,7 @@ f32 daAlink_c::getClimbMoveUpDownAnmSpeed() { f32 daAlink_c::getClimbMoveSideAnmSpeed() { return getAnmSpeedStickRate(mpHIO->mLadder.m.mWallHorizontalMinAnmSpeed, #if TARGET_PC - dusk::settings::game::fastClimbing ? 2.0f : mpHIO->mLadder.m.mWallHorizontalMaxAnmSpeed + dusk::getSettings().game.fastClimbing ? 2.0f : mpHIO->mLadder.m.mWallHorizontalMaxAnmSpeed #else mpHIO->mLadder.m.mWallHorizontalMaxAnmSpeed #endif @@ -2089,7 +2089,7 @@ int daAlink_c::procClimbUpStartInit(int param_0) { mNormalSpeed = 0.0f; #if TARGET_PC - if (param_0 || var_r29 || cM_rnd() < 0.3f || dusk::settings::game::noMissClimbing) { + if (param_0 || var_r29 || cM_rnd() < 0.3f || dusk::getSettings().game.noMissClimbing) { #else if (param_0 || var_r29 || cM_rnd() < 0.3f) { #endif @@ -2170,7 +2170,7 @@ int daAlink_c::procClimbDownStartInit(s16 param_0) { deleteEquipItem(TRUE, FALSE); #if TARGET_PC - if (cM_rnd() < 0.7f || dusk::settings::game::noMissClimbing) { + if (cM_rnd() < 0.7f || dusk::getSettings().game.noMissClimbing) { #else if (cM_rnd() < 0.7f) { #endif diff --git a/src/d/actor/d_a_alink_hvyboots.inc b/src/d/actor/d_a_alink_hvyboots.inc index fd9848d85c..6f7fa8da40 100644 --- a/src/d/actor/d_a_alink_hvyboots.inc +++ b/src/d/actor/d_a_alink_hvyboots.inc @@ -349,7 +349,7 @@ int daAlink_c::procMagneBootsFly() { */ if (dComIfG_Bgsp().ChkPolySafe(mPolyInfo2) #if TARGET_PC - && (dusk::settings::game::restoreWiiGlitches || checkEquipHeavyBoots()) + && (dusk::getSettings().game.restoreWiiGlitches || checkEquipHeavyBoots()) #elif PLATFORM_GCN || VERSION == VERSION_WII_KOR && checkEquipHeavyBoots() #endif diff --git a/src/d/actor/d_a_e_ym.cpp b/src/d/actor/d_a_e_ym.cpp index 0b87d419e3..758bec6269 100644 --- a/src/d/actor/d_a_e_ym.cpp +++ b/src/d/actor/d_a_e_ym.cpp @@ -1069,7 +1069,7 @@ void daE_YM_c::executeDown() { if (mAcch.ChkGroundHit()) { if (mFlyType != 1) { #if TARGET_PC - bckSet(6, 0, 0.0f, dusk::settings::game::fastTears && dComIfGp_event_getMode() == 0 ? 2.0f : 1.0f); + bckSet(6, 0, 0.0f, dusk::getSettings().game.fastTears && dComIfGp_event_getMode() == 0 ? 2.0f : 1.0f); #else bckSet(6, 0, 0.0f, 1.0f); #endif @@ -1093,7 +1093,7 @@ void daE_YM_c::executeDown() { mSound.startCreatureSound(Z2SE_CM_BODYFALL_WATER_M, 0, -1); mSound.startCreatureSound(Z2SE_EN_YM_MOGAKU, 0, -1); #if TARGET_PC - bckSet(6, 0, 0.0f, dusk::settings::game::fastTears && dComIfGp_event_getMode() == 0 ? 2.0f : 1.0f); + bckSet(6, 0, 0.0f, dusk::getSettings().game.fastTears && dComIfGp_event_getMode() == 0 ? 2.0f : 1.0f); #else bckSet(6, 0, 0.0f, 1.0f); #endif @@ -1115,7 +1115,7 @@ void daE_YM_c::executeDown() { || dComIfG_Bgsp().GetGroundCode(gnd_chk) == 5) { #if TARGET_PC - bckSet(6, 0, 0.0f, dusk::settings::game::fastTears && dComIfGp_event_getMode() == 0 ? 2.0f : 1.0f); + bckSet(6, 0, 0.0f, dusk::getSettings().game.fastTears && dComIfGp_event_getMode() == 0 ? 2.0f : 1.0f); #else bckSet(6, 0, 0.0f, 1.0f); #endif diff --git a/src/d/actor/d_a_midna.cpp b/src/d/actor/d_a_midna.cpp index a50a3cb1f7..c63f4e5251 100644 --- a/src/d/actor/d_a_midna.cpp +++ b/src/d/actor/d_a_midna.cpp @@ -3051,7 +3051,7 @@ BOOL daMidna_c::checkMetamorphoseEnableBase() { !dComIfGs_isEventBit(0xD04) || #if TARGET_PC (fopAcIt_Judge((fopAcIt_JudgeFunc)daMidna_searchNpc, &tmp) && - !dusk::settings::game::canTransformAnywhere) + !dusk::getSettings().game.canTransformAnywhere) #else fopAcIt_Judge((fopAcIt_JudgeFunc)daMidna_searchNpc, &tmp) #endif diff --git a/src/d/actor/d_a_obj_drop.cpp b/src/d/actor/d_a_obj_drop.cpp index 1fb93a4270..275a3d6e12 100644 --- a/src/d/actor/d_a_obj_drop.cpp +++ b/src/d/actor/d_a_obj_drop.cpp @@ -265,8 +265,8 @@ int daObjDrop_c::modeParentWait() { mModeAction = 1; #if TARGET_PC - mModeTimer = dusk::settings::game::fastTears && dComIfGp_event_getMode() == 0 ? 20 : 40; - if (dusk::settings::game::fastTears && dComIfGp_event_getMode() == 0) { + mModeTimer = dusk::getSettings().game.fastTears && dComIfGp_event_getMode() == 0 ? 20 : 40; + if (dusk::getSettings().game.fastTears && dComIfGp_event_getMode() == 0) { current.pos.y += 100.0f; } else { current.pos.y += 300.0f; @@ -285,7 +285,7 @@ int daObjDrop_c::modeParentWait() { case 2: createBodyEffect(); #if TARGET_PC - mModeTimer = dusk::settings::game::fastTears && dComIfGp_event_getMode() == 0 ? 5 : 45; + mModeTimer = dusk::getSettings().game.fastTears && dComIfGp_event_getMode() == 0 ? 5 : 45; #else mModeTimer = 45; #endif @@ -331,7 +331,7 @@ int daObjDrop_c::modeWait() { case 2: case 50: #if TARGET_PC - if (dusk::settings::game::fastTears && dComIfGp_event_getMode() == 0) { + if (dusk::getSettings().game.fastTears && dComIfGp_event_getMode() == 0) { f32 player_dist = current.pos.abs(daPy_getPlayerActorClass()->current.pos); f32 home_dist = current.pos.abs(home.pos); diff --git a/src/d/d_camera.cpp b/src/d/d_camera.cpp index a946d85220..b2a5709736 100644 --- a/src/d/d_camera.cpp +++ b/src/d/d_camera.cpp @@ -764,7 +764,7 @@ void dCamera_c::updatePad() { var_f31 = mDoCPd_c::getSubStickX3D(mPadID); #if TARGET_PC - if (dusk::settings::game::invertCameraXAxis) { + if (dusk::getSettings().game.invertCameraXAxis) { var_f31 *= -1.0f; } #endif diff --git a/src/d/d_kankyo.cpp b/src/d/d_kankyo.cpp index 8b6d197624..ec35ee8bc7 100644 --- a/src/d/d_kankyo.cpp +++ b/src/d/d_kankyo.cpp @@ -11381,7 +11381,7 @@ void dKy_bg_MAxx_proc(void* bg_model_p) { C_MTXLightPerspective(sp1D8, dComIfGd_getView()->fovy, camera_p->view.aspect, 1.0f, 1.0f, #if TARGET_PC - dusk::settings::game::useWaterProjectionOffset ? -0.01f : 0.0f, 0.0f); + dusk::getSettings().game.useWaterProjectionOffset ? -0.01f : 0.0f, 0.0f); #else -0.01f, 0.0f); #endif diff --git a/src/d/d_s_name.cpp b/src/d/d_s_name.cpp index df512d8cb2..735ce4d0ca 100644 --- a/src/d/d_s_name.cpp +++ b/src/d/d_s_name.cpp @@ -301,7 +301,7 @@ void dScnName_c::FileSelectMain() { void dScnName_c::FileSelectMainNormal() { #if TARGET_PC - mShowTvSettingsScreen = !dusk::settings::game::hideTvSettingsScreen; + mShowTvSettingsScreen = !dusk::getSettings().game.hideTvSettingsScreen; #endif switch(dFs_c->isSelectEnd()) { @@ -369,7 +369,7 @@ void dScnName_c::doPreLoadSetup() { mProc = dScnName_PROC_ChangeGameScene; #if TARGET_PC - if (dusk::settings::game::disableRupeeCutscenes) { + if (dusk::getSettings().game.disableRupeeCutscenes) { return; } #endif diff --git a/src/d/d_save.cpp b/src/d/d_save.cpp index e9977bc534..3289a49c64 100644 --- a/src/d/d_save.cpp +++ b/src/d/d_save.cpp @@ -114,19 +114,19 @@ u16 dSv_player_status_a_c::getRupeeMax() const { switch (mWalletSize) { case WALLET: #if TARGET_PC - return dusk::settings::game::biggerWallets ? 500 : 300; + return dusk::getSettings().game.biggerWallets ? 500 : 300; #else return 300; #endif case BIG_WALLET: #if TARGET_PC - return dusk::settings::game::biggerWallets ? 1000 : 600; + return dusk::getSettings().game.biggerWallets ? 1000 : 600; #else return 600; #endif case GIANT_WALLET: #if TARGET_PC - return dusk::settings::game::biggerWallets ? 2000 : 1000; + return dusk::getSettings().game.biggerWallets ? 2000 : 1000; #else return 1000; #endif diff --git a/src/dusk/imgui/ImGuiConsole.cpp b/src/dusk/imgui/ImGuiConsole.cpp index 95fb0d598f..fe5d3e7c9a 100644 --- a/src/dusk/imgui/ImGuiConsole.cpp +++ b/src/dusk/imgui/ImGuiConsole.cpp @@ -184,7 +184,7 @@ namespace dusk { m_isLaunchInitialized = true; } - getTransientSettings().skipFrameRateLimit = settings::game::enableTurboKeybind && ImGui::IsKeyDown(ImGuiKey_Tab); + getTransientSettings().skipFrameRateLimit = getSettings().game.enableTurboKeybind && ImGui::IsKeyDown(ImGuiKey_Tab); if ((ImGui::IsKeyDown(ImGuiKey_LeftCtrl) || ImGui::IsKeyDown(ImGuiKey_RightCtrl)) && ImGui::IsKeyPressed(ImGuiKey_R)) diff --git a/src/dusk/imgui/ImGuiMenuEnhancements.cpp b/src/dusk/imgui/ImGuiMenuEnhancements.cpp index 537539cd02..3fbd55a8f2 100644 --- a/src/dusk/imgui/ImGuiMenuEnhancements.cpp +++ b/src/dusk/imgui/ImGuiMenuEnhancements.cpp @@ -10,45 +10,45 @@ namespace dusk { void ImGuiMenuEnhancements::draw() { if (ImGui::BeginMenu("Enhancements")) { if (ImGui::BeginMenu("Quality of Life")) { - config::ImGuiCheckbox("Quick Transform (R+Y)", settings::game::enableQuickTransform); + config::ImGuiCheckbox("Quick Transform (R+Y)", getSettings().game.enableQuickTransform); - config::ImGuiCheckbox("Bigger Wallets", settings::game::biggerWallets); + config::ImGuiCheckbox("Bigger Wallets", getSettings().game.biggerWallets); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Wallet sizes are like in the HD version (500, 1000, 2000)"); } - config::ImGuiCheckbox("No Rupee Returns", settings::game::noReturnRupees); + config::ImGuiCheckbox("No Rupee Returns", getSettings().game.noReturnRupees); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Always collect Rupees even if your Wallet is too full"); } - config::ImGuiCheckbox("Disable Rupee Cutscenes", settings::game::disableRupeeCutscenes); + config::ImGuiCheckbox("Disable Rupee Cutscenes", getSettings().game.disableRupeeCutscenes); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Rupees won't play cutscenes after you've collected them the first time"); } - config::ImGuiCheckbox("No Sword Recoil", settings::game::noSwordRecoil); + config::ImGuiCheckbox("No Sword Recoil", getSettings().game.noSwordRecoil); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Link won't recoil when his sword hits walls"); } - config::ImGuiCheckbox("Faster Climbing", settings::game::fastClimbing); + config::ImGuiCheckbox("Faster Climbing", getSettings().game.fastClimbing); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Quicker climbing on ladders and vines like the HD version"); } - config::ImGuiCheckbox("No Climbing Miss Animation", settings::game::noMissClimbing); + config::ImGuiCheckbox("No Climbing Miss Animation", getSettings().game.noMissClimbing); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Prevents Link from playing a struggle animation\n" "when using the Clawshot on vines at a weird angle"); } - config::ImGuiCheckbox("Faster Tears of Light", settings::game::fastTears); + config::ImGuiCheckbox("Faster Tears of Light", getSettings().game.fastTears); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Tears of Light dropped by Shadow Insects pop out faster like the HD version"); } - config::ImGuiCheckbox("Hide TV Settings Screen", settings::game::hideTvSettingsScreen); + config::ImGuiCheckbox("Hide TV Settings Screen", getSettings().game.hideTvSettingsScreen); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Hides the TV calibration screen shown when loading a save"); } @@ -57,20 +57,20 @@ namespace dusk { } if (ImGui::BeginMenu("Preferences")) { - config::ImGuiCheckbox("Mirror Mode", settings::game::enableMirrorMode); + config::ImGuiCheckbox("Mirror Mode", getSettings().game.enableMirrorMode); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Mirrors the world, matching the Wii version of the game"); } - config::ImGuiCheckbox("Invert Camera X Axis", settings::game::invertCameraXAxis); + config::ImGuiCheckbox("Invert Camera X Axis", getSettings().game.invertCameraXAxis); ImGui::EndMenu(); } if (ImGui::BeginMenu("Graphics")) { - config::ImGuiCheckbox("Native Bloom", settings::game::enableBloom); + config::ImGuiCheckbox("Native Bloom", getSettings().game.enableBloom); - config::ImGuiCheckbox("Water Projection Offset", settings::game::useWaterProjectionOffset); + config::ImGuiCheckbox("Water Projection Offset", getSettings().game.useWaterProjectionOffset); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Adds GC-specific -0.01 transS offset\n" "that causes ~6px ghost artifacts in water reflections"); @@ -80,12 +80,12 @@ namespace dusk { } if (ImGui::BeginMenu("Audio")) { - config::ImGuiCheckbox("No Low HP Sound", settings::game::noLowHpSound); + config::ImGuiCheckbox("No Low HP Sound", getSettings().game.noLowHpSound); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Disable the beeping sound when having low health"); } - config::ImGuiCheckbox("Non-Stop Midna's Lament", settings::game::midnasLamentNonStop); + config::ImGuiCheckbox("Non-Stop Midna's Lament", getSettings().game.midnasLamentNonStop); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Prevents enemy music while Midna's Lament is playing"); } @@ -94,9 +94,9 @@ namespace dusk { } if (ImGui::BeginMenu("Cheats")) { - config::ImGuiCheckbox("Fast Iron Boots", settings::game::enableFastIronBoots); + config::ImGuiCheckbox("Fast Iron Boots", getSettings().game.enableFastIronBoots); - config::ImGuiCheckbox("Can Transform Anywhere", settings::game::canTransformAnywhere); + config::ImGuiCheckbox("Can Transform Anywhere", getSettings().game.canTransformAnywhere); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Allows you to transform even if NPCs are looking"); } @@ -105,9 +105,9 @@ namespace dusk { } if (ImGui::BeginMenu("Difficulty")) { - config::ImGuiSliderInt("Damage Multiplier", settings::game::damageMultiplier, 1, 8, "x%d"); + config::ImGuiSliderInt("Damage Multiplier", getSettings().game.damageMultiplier, 1, 8, "x%d"); - config::ImGuiCheckbox("Instant Death", settings::game::instantDeath); + config::ImGuiCheckbox("Instant Death", getSettings().game.instantDeath); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Any hit will instantly kill you"); } @@ -116,7 +116,7 @@ namespace dusk { } if (ImGui::BeginMenu("Technical")) { - config::ImGuiCheckbox("Restore Wii 1.0 Glitches", settings::game::restoreWiiGlitches); + config::ImGuiCheckbox("Restore Wii 1.0 Glitches", getSettings().game.restoreWiiGlitches); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Restores patched glitches from Wii USA 1.0,\n" "the first released version"); diff --git a/src/dusk/imgui/ImGuiMenuGame.cpp b/src/dusk/imgui/ImGuiMenuGame.cpp index ba872a3b86..b2ed26b20a 100644 --- a/src/dusk/imgui/ImGuiMenuGame.cpp +++ b/src/dusk/imgui/ImGuiMenuGame.cpp @@ -15,8 +15,8 @@ namespace dusk { void ImGuiMenuGame::ToggleFullscreen() { - settings::video::enableFullscreen.setValue(!settings::video::enableFullscreen); - VISetWindowFullscreen(settings::video::enableFullscreen); + getSettings().video.enableFullscreen.setValue(!getSettings().video.enableFullscreen); + VISetWindowFullscreen(getSettings().video.enableFullscreen); config::Save(); } @@ -40,8 +40,8 @@ namespace dusk { if (ImGui::BeginMenu("Audio")) { ImGui::Text("Master Volume"); - config::ImGuiSliderInt("##masterVolume", settings::audio::masterVolume, 0, 100); - config::ImGuiCheckbox("Enable Reverb", settings::audio::enableReverb); + config::ImGuiSliderInt("##masterVolume", getSettings().audio.masterVolume, 0, 100); + config::ImGuiCheckbox("Enable Reverb", getSettings().audio.enableReverb); /* // TODO: Implement additional settings ImGui::Text("Main Music Volume"); @@ -61,8 +61,8 @@ namespace dusk { } */ - audio::SetMasterVolume(settings::audio::masterVolume / 100.0f); - audio::EnableReverb = settings::audio::enableReverb; + audio::SetMasterVolume(getSettings().audio.masterVolume / 100.0f); + audio::EnableReverb = getSettings().audio.enableReverb; ImGui::EndMenu(); } diff --git a/src/dusk/imgui/ImGuiMenuTools.cpp b/src/dusk/imgui/ImGuiMenuTools.cpp index 754f9a72e7..6a2fc2ede0 100644 --- a/src/dusk/imgui/ImGuiMenuTools.cpp +++ b/src/dusk/imgui/ImGuiMenuTools.cpp @@ -51,7 +51,7 @@ namespace dusk { ImGui::MenuItem("Audio Debug", hotkeys::SHOW_AUDIO_DEBUG, &m_showAudioDebug); ImGui::MenuItem("OSReport Force", nullptr, &OSReportReallyForceEnable); ImGui::Separator(); - config::ImGuiMenuItem("Enable Turbo Key", hotkeys::TURBO, settings::game::enableTurboKeybind); + config::ImGuiMenuItem("Enable Turbo Key", hotkeys::TURBO, getSettings().game.enableTurboKeybind); ImGui::EndMenu(); } diff --git a/src/dusk/io.cpp b/src/dusk/io.cpp index f930c2ceaa..50b5cab5bd 100644 --- a/src/dusk/io.cpp +++ b/src/dusk/io.cpp @@ -11,7 +11,11 @@ using namespace dusk::io; #define fseek(a, b, c) _fseeki64(a, b, c) #else #define MODE_TYPE char +#if _MSVC_VER #define MODE(val) ##val +#else +#define MODE(val) val +#endif #endif static FILE* ThrowIfNotOpen(const FileStream& file) { diff --git a/src/dusk/settings.cpp b/src/dusk/settings.cpp index 6bfc057a90..278f783dbf 100644 --- a/src/dusk/settings.cpp +++ b/src/dusk/settings.cpp @@ -1,95 +1,99 @@ #include "dusk/settings.h" #include "dusk/config.hpp" -namespace dusk::settings { -namespace video { -ConfigVar enableFullscreen("video.enableFullscreen", false); +namespace dusk { + +UserSettings g_userSettings = { + .video = { + .enableFullscreen {"video.enableFullscreen", false}, + }, + + .audio = { + .masterVolume {"audio.masterVolume", 80}, + .mainMusicVolume {"audio.mainMusicVolume", 100}, + .subMusicVolume {"audio.subMusicVolume", 100}, + .soundEffectsVolume {"audio.soundEffectsVolume", 100}, + .fanfareVolume {"audio.fanfareVolume", 100}, + .enableReverb {"audio.enableReverb", true}, + }, + + .game = { + // Quality of Life + .enableQuickTransform {"game.enableQuickTransform", false}, + .hideTvSettingsScreen {"game.hideTvSettingsScreen", false}, + .biggerWallets {"game.biggerWallets", false}, + .noReturnRupees {"game.noReturnRupees", false}, + .disableRupeeCutscenes {"game.disableRupeeCutscenes", false}, + .noSwordRecoil {"game.noSwordRecoil", false}, + .damageMultiplier {"game.damageMultiplier", 1}, + .instantDeath {"game.instantDeath", false}, + .fastClimbing {"game.fastClimbing", false}, + .noMissClimbing {"game.noMissClimbing", false}, + .fastTears {"game.fastTears", false}, + + // Preferences + .enableMirrorMode {"game.enableMirrorMode", false}, + .invertCameraXAxis {"game.invertCameraXAxis", false}, + + // Graphics + .enableBloom {"game.enableBloom", true}, + .useWaterProjectionOffset {"game.useWaterProjectionOffset", false}, + + // Audio + .noLowHpSound {"game.noLowHpSound", false}, + .midnasLamentNonStop {"game.midnasLamentNonStop", false}, + + // Cheats + .enableFastIronBoots {"game.enableFastIronBoots", false}, + .canTransformAnywhere {"game.canTransformAnywhere", false}, + + // Technical + .restoreWiiGlitches {"game.restoreWiiGlitches", false}, + + // Controls + .enableTurboKeybind {"game.enableTurboKeybind", true}, + }, +}; + +UserSettings& getSettings() { + return g_userSettings; } -namespace audio { -ConfigVar masterVolume("audio.masterVolume", 80); -ConfigVar mainMusicVolume("audio.mainMusicVolume", 100); -ConfigVar subMusicVolume("audio.subMusicVolume", 100); -ConfigVar soundEffectsVolume("audio.soundEffectsVolume", 100); -ConfigVar fanfareVolume("audio.fanfareVolume", 100); -ConfigVar enableReverb("audio.enableReverb", true); -} - -namespace game { -// Quality of Life -ConfigVar enableQuickTransform("game.enableQuickTransform", false); -ConfigVar hideTvSettingsScreen("game.hideTvSettingsScreen", false); -ConfigVar biggerWallets("game.biggerWallets", false); -ConfigVar noReturnRupees("game.noReturnRupees", false); -ConfigVar disableRupeeCutscenes("game.disableRupeeCutscenes", false); -ConfigVar noSwordRecoil("game.noSwordRecoil", false); -ConfigVar damageMultiplier("game.damageMultiplier", 1); -ConfigVar instantDeath("game.instantDeath", false); -ConfigVar fastClimbing("game.fastClimbing", false); -ConfigVar fastTears("game.fastTears", false); -ConfigVar noMissClimbing("game.noMissClimbing", false); - -// Preferences -ConfigVar enableMirrorMode("game.enableMirrorMode", false); -ConfigVar invertCameraXAxis("game.invertCameraXAxis", false); - -// Graphics -ConfigVar enableBloom("game.enableBloom", true); -ConfigVar useWaterProjectionOffset("game.useWaterProjectionOffset", false); - -// Audio -ConfigVar noLowHpSound("game.noLowHpSound", false); -ConfigVar midnasLamentNonStop("game.midnasLamentNonStop", false); - -// Cheats -ConfigVar enableFastIronBoots("game.enableFastIronBoots", false); -ConfigVar canTransformAnywhere("game.canTransformAnywhere", false); - -// Technical -ConfigVar restoreWiiGlitches("game.restoreWiiGlitches", false); - -// Controls -ConfigVar enableTurboKeybind("game.enableTurboKeybind", true); -} - -void Register() { +void registerSettings() { // Video - Register(video::enableFullscreen); + Register(g_userSettings.video.enableFullscreen); // Audio - Register(audio::masterVolume); - Register(audio::mainMusicVolume); - Register(audio::subMusicVolume); - Register(audio::soundEffectsVolume); - Register(audio::fanfareVolume); - Register(audio::enableReverb); + Register(g_userSettings.audio.masterVolume); + Register(g_userSettings.audio.mainMusicVolume); + Register(g_userSettings.audio.subMusicVolume); + Register(g_userSettings.audio.soundEffectsVolume); + Register(g_userSettings.audio.fanfareVolume); + Register(g_userSettings.audio.enableReverb); // Game - Register(game::enableQuickTransform); - Register(game::hideTvSettingsScreen); - Register(game::biggerWallets); - Register(game::noReturnRupees); - Register(game::disableRupeeCutscenes); - Register(game::noSwordRecoil); - Register(game::damageMultiplier); - Register(game::instantDeath); - Register(game::fastClimbing); - Register(game::fastTears); - Register(game::enableMirrorMode); - Register(game::invertCameraXAxis); - Register(game::enableBloom); - Register(game::useWaterProjectionOffset); - Register(game::enableFastIronBoots); - Register(game::canTransformAnywhere); - Register(game::restoreWiiGlitches); - Register(game::noMissClimbing); - Register(game::noLowHpSound); - Register(game::midnasLamentNonStop); - Register(game::enableTurboKeybind); + Register(g_userSettings.game.enableQuickTransform); + Register(g_userSettings.game.hideTvSettingsScreen); + Register(g_userSettings.game.biggerWallets); + Register(g_userSettings.game.noReturnRupees); + Register(g_userSettings.game.disableRupeeCutscenes); + Register(g_userSettings.game.noSwordRecoil); + Register(g_userSettings.game.damageMultiplier); + Register(g_userSettings.game.instantDeath); + Register(g_userSettings.game.fastClimbing); + Register(g_userSettings.game.fastTears); + Register(g_userSettings.game.enableMirrorMode); + Register(g_userSettings.game.invertCameraXAxis); + Register(g_userSettings.game.enableBloom); + Register(g_userSettings.game.useWaterProjectionOffset); + Register(g_userSettings.game.enableFastIronBoots); + Register(g_userSettings.game.canTransformAnywhere); + Register(g_userSettings.game.restoreWiiGlitches); + Register(g_userSettings.game.noMissClimbing); + Register(g_userSettings.game.noLowHpSound); + Register(g_userSettings.game.midnasLamentNonStop); + Register(g_userSettings.game.enableTurboKeybind); } -} - -namespace dusk { // Transient settings diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index 7ee50fc0ea..a7a09a8d87 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -1163,7 +1163,7 @@ void mDoGph_gInf_c::bloom_c::remove() { void mDoGph_gInf_c::bloom_c::draw() { #if TARGET_PC - if (!dusk::settings::game::enableBloom) { + if (!dusk::getSettings().game.enableBloom) { return; } #endif @@ -2117,7 +2117,7 @@ int mDoGph_Painter() { #endif #if TARGET_PC - if (dusk::settings::game::enableMirrorMode) + if (dusk::getSettings().game.enableMirrorMode) #elif PLATFORM_WII if (data_8053a730) #endif diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index ffe6bb5ab6..632d696ae9 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -279,7 +279,7 @@ static const char* CalculateConfigPath() { // PC ENTRY POINT // ========================================================================= int game_main(int argc, char* argv[]) { - dusk::settings::Register(); + dusk::registerSettings(); dusk::config::FinishRegistration(); cxxopts::ParseResult parsed_arg_options;