#ifndef DUSK_CONFIG_H #define DUSK_CONFIG_H #include #include "dusk/config_var.hpp" namespace dusk { using namespace config; enum class BloomMode : int { Off = 0, Classic = 1, Dusk = 2, }; enum class DepthOfFieldMode : int { Off = 0, Classic = 1, Dusk = 2, }; enum class Resampler : int { Bilinear = 0, Area = 1, }; enum class GameLanguage : u8 { English = OS_LANGUAGE_ENGLISH, German = OS_LANGUAGE_GERMAN, French = OS_LANGUAGE_FRENCH, Spanish = OS_LANGUAGE_SPANISH, Italian = OS_LANGUAGE_ITALIAN, }; enum class DiscVerificationState : u8 { Unknown = 0, Success, HashMismatch, }; enum class GyroMode : u8 { Sensor = 0, Mouse = 1, }; enum class FrameInterpMode : u8 { Off = 0, Capped = 1, Unlimited = 2, }; enum class MenuScaling : u8 { GameCube = 0, Wii = 1, Dusklight = 2, }; namespace config { template <> struct ConfigEnumRange { static constexpr auto min = BloomMode::Off; static constexpr auto max = BloomMode::Dusk; }; template <> struct ConfigEnumRange { static constexpr auto min = DepthOfFieldMode::Off; static constexpr auto max = DepthOfFieldMode::Dusk; }; template <> struct ConfigEnumRange { static constexpr auto min = Resampler::Bilinear; static constexpr auto max = Resampler::Area; }; template <> struct ConfigEnumRange { static constexpr auto min = GameLanguage::English; static constexpr auto max = GameLanguage::Italian; }; template <> struct ConfigEnumRange { static constexpr auto min = DiscVerificationState::Unknown; static constexpr auto max = DiscVerificationState::HashMismatch; }; template <> struct ConfigEnumRange { static constexpr auto min = GyroMode::Sensor; static constexpr auto max = GyroMode::Mouse; }; template <> struct ConfigEnumRange { static constexpr auto min = FrameInterpMode::Off; static constexpr auto max = FrameInterpMode::Unlimited; }; template <> struct ConfigEnumRange { static constexpr auto min = MenuScaling::GameCube; static constexpr auto max = MenuScaling::Dusklight; }; } // namespace config // Persistent user settings struct UserSettings { // Program settings struct { // Video ConfigVar enableFullscreen; ConfigVar enableVsync; ConfigVar lockAspectRatio; ConfigVar enableFpsOverlay; ConfigVar fpsOverlayCorner; ConfigVar maxFrameRate; } video; struct { // Audio ConfigVar masterVolume; ConfigVar mainMusicVolume; ConfigVar subMusicVolume; ConfigVar soundEffectsVolume; ConfigVar fanfareVolume; ConfigVar enableReverb; ConfigVar enableHrtf; ConfigVar menuSounds; } audio; // Game settings struct { ConfigVar language; // QoL ConfigVar enableQuickTransform; ConfigVar hideTvSettingsScreen; 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; ConfigVar autoSave; ConfigVar enhancedMapMenus; // Preferences ConfigVar enableMirrorMode; ConfigVar minimalHUD; ConfigVar pauseOnFocusLost; ConfigVar enableLinkDollRotation; ConfigVar enableAchievementToasts; ConfigVar enableControllerToasts; ConfigVar enableDiscordPresence; ConfigVar menuScalingMode; // Graphics ConfigVar bloomMode; ConfigVar bloomMultiplier; ConfigVar depthOfFieldMode; ConfigVar disableWaterRefraction; ConfigVar enableTextureReplacements; ConfigVar enableFrameInterpolation; ConfigVar internalResolutionScale; ConfigVar shadowResolutionMultiplier; ConfigVar resampler; ConfigVar enableMapBackground; ConfigVar disableCutscenePillarboxing; // Audio ConfigVar noLowHpSound; ConfigVar midnasLamentNonStop; // Input ConfigVar gyroMode; 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 invertFirstPersonXAxis; ConfigVar invertFirstPersonYAxis; ConfigVar freeCameraSensitivity; ConfigVar debugFlyCam; ConfigVar debugFlyCamLockEvents; ConfigVar allowBackgroundInput; // Cheats ConfigVar infiniteHearts; ConfigVar infiniteArrows; ConfigVar infiniteSeeds; ConfigVar infiniteBombs; ConfigVar infiniteOil; ConfigVar infiniteOxygen; ConfigVar infiniteRupees; ConfigVar enableIndefiniteItemDrops; ConfigVar moonJump; ConfigVar superClawshot; ConfigVar alwaysGreatspin; ConfigVar enableFastIronBoots; ConfigVar canTransformAnywhere; ConfigVar fastRoll; ConfigVar fastSpinner; ConfigVar freeMagicArmor; ConfigVar invincibleEnemies; // Technical ConfigVar restoreWiiGlitches; // Controls ConfigVar enableTurboKeybind; ConfigVar enableResetKeybind; // Tools ConfigVar speedrunMode; ConfigVar liveSplitEnabled; ConfigVar showSpeedrunRTATimer; ConfigVar recordingMode; // Misc ConfigVar removeQuestMapMarkers; ConfigVar showInputViewer; ConfigVar showInputViewerGyro; } game; struct { ConfigVar isoPath; ConfigVar isoVerification; ConfigVar graphicsBackend; ConfigVar skipPreLaunchUI; ConfigVar showPipelineCompilation; ConfigVar wasPresetChosen; ConfigVar checkForUpdates; ConfigVar cardFileType; ConfigVar enableAdvancedSettings; } backend; // Arrays of size 4 for 4 ports struct { std::array firstPersonCamera; std::array callMidna; std::array openDusklightMenu; std::array turboSpeedButton; } actionBindings; }; 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