Reapply settings changes on top of #209

This commit is contained in:
Max Roncace
2026-04-05 17:34:18 -04:00
committed by PJB3005
parent 3eb843cc80
commit b098577ab9
26 changed files with 216 additions and 200 deletions
+54 -46
View File
@@ -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<bool> enableFullscreen;
}
struct UserSettings {
// Program settings
namespace audio {
extern ConfigVar<int> masterVolume;
extern ConfigVar<int> mainMusicVolume;
extern ConfigVar<int> subMusicVolume;
extern ConfigVar<int> soundEffectsVolume;
extern ConfigVar<int> fanfareVolume;
extern ConfigVar<bool> enableReverb;
}
struct {
// Video
ConfigVar<bool> enableFullscreen;
} video;
namespace game {
// QoL
extern ConfigVar<bool> enableQuickTransform;
extern ConfigVar<bool> hideTvSettingsScreen;
extern ConfigVar<bool> biggerWallets;
extern ConfigVar<bool> noReturnRupees;
extern ConfigVar<bool> disableRupeeCutscenes;
extern ConfigVar<bool> noSwordRecoil;
extern ConfigVar<int> damageMultiplier;
extern ConfigVar<bool> instantDeath;
extern ConfigVar<bool> fastClimbing;
extern ConfigVar<bool> fastTears;
extern ConfigVar<bool> noMissClimbing;
struct {
// Audio
ConfigVar<int> masterVolume;
ConfigVar<int> mainMusicVolume;
ConfigVar<int> subMusicVolume;
ConfigVar<int> soundEffectsVolume;
ConfigVar<int> fanfareVolume;
ConfigVar<bool> enableReverb;
} audio;
// Preferences
extern ConfigVar<bool> enableMirrorMode;
extern ConfigVar<bool> invertCameraXAxis;
// Game settings
// Graphics
extern ConfigVar<bool> enableBloom;
extern ConfigVar<bool> useWaterProjectionOffset;
struct {
// QoL
ConfigVar<bool> enableQuickTransform;
ConfigVar<bool> hideTvSettingsScreen;
ConfigVar<bool> biggerWallets;
ConfigVar<bool> noReturnRupees;
ConfigVar<bool> disableRupeeCutscenes;
ConfigVar<bool> noSwordRecoil;
ConfigVar<int> damageMultiplier;
ConfigVar<bool> instantDeath;
ConfigVar<bool> fastClimbing;
ConfigVar<bool> noMissClimbing;
ConfigVar<bool> fastTears;
// Audio
extern ConfigVar<bool> noLowHpSound;
extern ConfigVar<bool> midnasLamentNonStop;
// Preferences
ConfigVar<bool> enableMirrorMode;
ConfigVar<bool> invertCameraXAxis;
// Cheats
extern ConfigVar<bool> enableFastIronBoots;
extern ConfigVar<bool> canTransformAnywhere;
// Graphics
ConfigVar<bool> enableBloom;
ConfigVar<bool> useWaterProjectionOffset;
// Technical
extern ConfigVar<bool> restoreWiiGlitches;
// Audio
ConfigVar<bool> noLowHpSound;
ConfigVar<bool> midnasLamentNonStop;
// Controls
extern ConfigVar<bool> enableTurboKeybind;
}
// Cheats
ConfigVar<bool> enableFastIronBoots;
ConfigVar<bool> canTransformAnywhere;
void Register();
// Technical
ConfigVar<bool> restoreWiiGlitches;
}
// Controls
ConfigVar<bool> enableTurboKeybind;
} game;
};
UserSettings& getSettings();
void registerSettings();
namespace dusk {
// Transient settings
struct CollisionViewSettings {
+2 -2
View File
@@ -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;
+1 -1
View File
@@ -157,7 +157,7 @@ void Z2AudioMgr::zeldaGFrameWork() {
processBgmFramework();
#if TARGET_PC
if (!dusk::settings::game::noLowHpSound) {
if (!dusk::getSettings().game.noLowHpSound) {
processHeartGaugeSound();
}
#else
+1 -1
View File
@@ -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;
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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;
}
+12 -12
View File
@@ -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
+1 -1
View File
@@ -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
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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
+4 -4
View File
@@ -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);
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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))
+20 -20
View File
@@ -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");
+6 -6
View File
@@ -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();
}
+1 -1
View File
@@ -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();
}
+4
View File
@@ -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) {
+85 -81
View File
@@ -1,95 +1,99 @@
#include "dusk/settings.h"
#include "dusk/config.hpp"
namespace dusk::settings {
namespace video {
ConfigVar<bool> 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<int> masterVolume("audio.masterVolume", 80);
ConfigVar<int> mainMusicVolume("audio.mainMusicVolume", 100);
ConfigVar<int> subMusicVolume("audio.subMusicVolume", 100);
ConfigVar<int> soundEffectsVolume("audio.soundEffectsVolume", 100);
ConfigVar<int> fanfareVolume("audio.fanfareVolume", 100);
ConfigVar<bool> enableReverb("audio.enableReverb", true);
}
namespace game {
// Quality of Life
ConfigVar<bool> enableQuickTransform("game.enableQuickTransform", false);
ConfigVar<bool> hideTvSettingsScreen("game.hideTvSettingsScreen", false);
ConfigVar<bool> biggerWallets("game.biggerWallets", false);
ConfigVar<bool> noReturnRupees("game.noReturnRupees", false);
ConfigVar<bool> disableRupeeCutscenes("game.disableRupeeCutscenes", false);
ConfigVar<bool> noSwordRecoil("game.noSwordRecoil", false);
ConfigVar<int> damageMultiplier("game.damageMultiplier", 1);
ConfigVar<bool> instantDeath("game.instantDeath", false);
ConfigVar<bool> fastClimbing("game.fastClimbing", false);
ConfigVar<bool> fastTears("game.fastTears", false);
ConfigVar<bool> noMissClimbing("game.noMissClimbing", false);
// Preferences
ConfigVar<bool> enableMirrorMode("game.enableMirrorMode", false);
ConfigVar<bool> invertCameraXAxis("game.invertCameraXAxis", false);
// Graphics
ConfigVar<bool> enableBloom("game.enableBloom", true);
ConfigVar<bool> useWaterProjectionOffset("game.useWaterProjectionOffset", false);
// Audio
ConfigVar<bool> noLowHpSound("game.noLowHpSound", false);
ConfigVar<bool> midnasLamentNonStop("game.midnasLamentNonStop", false);
// Cheats
ConfigVar<bool> enableFastIronBoots("game.enableFastIronBoots", false);
ConfigVar<bool> canTransformAnywhere("game.canTransformAnywhere", false);
// Technical
ConfigVar<bool> restoreWiiGlitches("game.restoreWiiGlitches", false);
// Controls
ConfigVar<bool> 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
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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;