#ifndef DUSK_CONFIG_H #define DUSK_CONFIG_H #include "dusk/config_var.hpp" namespace dusk { using namespace config; enum class BloomMode : int { Off = 0, Classic = 1, Dusk = 2, }; enum class GameLanguage : u8 { English = OS_LANGUAGE_ENGLISH, German = OS_LANGUAGE_GERMAN, French = OS_LANGUAGE_FRENCH, Spanish = OS_LANGUAGE_SPANISH, Italian = OS_LANGUAGE_ITALIAN, }; namespace config { template <> struct ConfigEnumRange { static constexpr auto min = BloomMode::Off; static constexpr auto max = BloomMode::Dusk; }; template <> struct ConfigEnumRange { static constexpr auto min = GameLanguage::English; static constexpr auto max = GameLanguage::Italian; }; } // Persistent user settings struct UserSettings { // Program settings struct { // Video ConfigVar enableFullscreen; ConfigVar enableVsync; ConfigVar lockAspectRatio; } video; struct { // Audio ConfigVar masterVolume; ConfigVar mainMusicVolume; ConfigVar subMusicVolume; ConfigVar soundEffectsVolume; ConfigVar fanfareVolume; ConfigVar enableReverb; } audio; // Game settings struct { ConfigVar language; // QoL ConfigVar enableQuickTransform; ConfigVar hideTvSettingsScreen; ConfigVar skipWarningScreen; ConfigVar biggerWallets; ConfigVar noReturnRupees; ConfigVar disableRupeeCutscenes; ConfigVar noSwordRecoil; ConfigVar damageMultiplier; ConfigVar noHeartDrops; ConfigVar instantDeath; ConfigVar fastClimbing; ConfigVar noMissClimbing; ConfigVar fastTears; ConfigVar no2ndFishForCat; ConfigVar instantSaves; ConfigVar instantText; ConfigVar sunsSong; // Preferences ConfigVar enableMirrorMode; ConfigVar disableMainHUD; ConfigVar pauseOnFocusLost; ConfigVar enableLinkDollRotation; ConfigVar enableAchievementNotifications; // Graphics ConfigVar bloomMode; ConfigVar bloomMultiplier; ConfigVar disableWaterRefraction; ConfigVar enableFrameInterpolation; ConfigVar internalResolutionScale; ConfigVar shadowResolutionMultiplier; ConfigVar enableDepthOfField; ConfigVar enableMapBackground; // Audio ConfigVar noLowHpSound; ConfigVar midnasLamentNonStop; // Input ConfigVar enableGyroAim; ConfigVar enableGyroRollgoal; ConfigVar gyroSensitivityX; ConfigVar gyroSensitivityY; ConfigVar gyroSensitivityRollgoal; ConfigVar gyroSmoothing; ConfigVar gyroDeadband; ConfigVar gyroInvertPitch; ConfigVar gyroInvertYaw; ConfigVar freeCamera; ConfigVar invertCameraXAxis; ConfigVar invertCameraYAxis; ConfigVar freeCameraSensitivity; // Cheats ConfigVar infiniteHearts; ConfigVar infiniteArrows; ConfigVar infiniteBombs; ConfigVar infiniteOil; ConfigVar infiniteOxygen; ConfigVar infiniteRupees; ConfigVar enableIndefiniteItemDrops; ConfigVar moonJump; ConfigVar superClawshot; ConfigVar alwaysGreatspin; ConfigVar enableFastIronBoots; ConfigVar canTransformAnywhere; ConfigVar fastSpinner; ConfigVar freeMagicArmor; // Technical ConfigVar restoreWiiGlitches; // Controls ConfigVar enableTurboKeybind; // Tools ConfigVar speedrunMode; ConfigVar liveSplitEnabled; } game; struct { ConfigVar isoPath; ConfigVar graphicsBackend; ConfigVar skipPreLaunchUI; ConfigVar showPipelineCompilation; ConfigVar wasPresetChosen; ConfigVar enableCrashReporting; ConfigVar duskMenuOpen; ConfigVar cardFileType; } backend; }; UserSettings& getSettings(); void registerSettings(); // Transient settings struct CollisionViewSettings { bool enableTerrainView; bool enableWireframe; bool enableAtView; bool enableTgView; bool enableCoView; float terrainViewOpacity; float colliderViewOpacity; float drawRange; }; struct TransientSettings { CollisionViewSettings collisionView; bool skipFrameRateLimit; bool moveLinkActive; bool stateShareLoadActive; }; TransientSettings& getTransientSettings(); } #endif // DUSK_CONFIG_H