using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.UI.Common.Configuration.System; using Ryujinx.UI.Common.Configuration.UI; using System.Collections.Generic; using System.Text.Json.Nodes; namespace Ryujinx.UI.Common.Configuration { public class ConfigurationFileFormat { /// /// The current version of the file format /// public const int CurrentVersion = 50; /// /// Version of the configuration file format /// public int Version { get; set; } /// /// Enables or disables logging to a file on disk /// public bool EnableFileLog { get; set; } /// /// Whether or not backend threading is enabled. The "Auto" setting will determine whether threading should be enabled at runtime. /// public BackendThreading BackendThreading { get; set; } /// /// Resolution Scale. An integer scale applied to applicable render targets. Values 1-4, or -1 to use a custom floating point scale instead. /// public int ResScale { get; set; } /// /// Custom Resolution Scale. A custom floating point scale applied to applicable render targets. Only active when Resolution Scale is -1. /// public float ResScaleCustom { get; set; } /// /// Max Anisotropy. Values range from 0 - 16. Set to -1 to let the game decide. /// public float MaxAnisotropy { get; set; } /// /// Aspect Ratio applied to the renderer window. /// public AspectRatio AspectRatio { get; set; } /// /// Applies anti-aliasing to the renderer. /// public AntiAliasing AntiAliasing { get; set; } /// /// Sets the framebuffer upscaling type. /// public ScalingFilter ScalingFilter { get; set; } /// /// Sets the framebuffer upscaling level. /// public int ScalingFilterLevel { get; set; } /// /// Dumps shaders in this local directory /// public string GraphicsShadersDumpPath { get; set; } /// /// Enables printing debug log messages /// public bool LoggingEnableDebug { get; set; } /// /// Enables printing stub log messages /// public bool LoggingEnableStub { get; set; } /// /// Enables printing info log messages /// public bool LoggingEnableInfo { get; set; } /// /// Enables printing warning log messages /// public bool LoggingEnableWarn { get; set; } /// /// Enables printing error log messages /// public bool LoggingEnableError { get; set; } /// /// Enables printing trace log messages /// public bool LoggingEnableTrace { get; set; } /// /// Enables printing guest log messages /// public bool LoggingEnableGuest { get; set; } /// /// Enables printing FS access log messages /// public bool LoggingEnableFsAccessLog { get; set; } /// /// Controls which log messages are written to the log targets /// public LogClass[] LoggingFilteredClasses { get; set; } /// /// Change Graphics API debug log level /// public GraphicsDebugLevel LoggingGraphicsDebugLevel { get; set; } /// /// Change System Language /// public Language SystemLanguage { get; set; } /// /// Change System Region /// public Region SystemRegion { get; set; } /// /// Change System TimeZone /// public string SystemTimeZone { get; set; } /// /// Change System Time Offset in seconds /// public long SystemTimeOffset { get; set; } /// /// Enables or disables Docked Mode /// public bool DockedMode { get; set; } /// /// Enables or disables Discord Rich Presence /// public bool EnableDiscordIntegration { get; set; } /// /// Checks for updates when Ryujinx starts when enabled /// public bool CheckUpdatesOnStart { get; set; } /// /// Show "Confirm Exit" Dialog /// public bool ShowConfirmExit { get; set; } /// /// Enables hardware-accelerated rendering for Avalonia /// public bool EnableHardwareAcceleration { get; set; } /// /// Whether to hide cursor on idle, always or never /// public HideCursorMode HideCursor { get; set; } /// /// Enables or disables Vertical Sync /// public bool EnableVsync { get; set; } /// /// Enables or disables Shader cache /// public bool EnableShaderCache { get; set; } /// /// Enables or disables texture recompression /// public bool EnableTextureRecompression { get; set; } /// /// Enables or disables Macro high-level emulation /// public bool EnableMacroHLE { get; set; } /// /// Enables or disables color space passthrough, if available. /// public bool EnableColorSpacePassthrough { get; set; } /// /// Enables or disables profiled translation cache persistency /// public bool EnablePtc { get; set; } /// /// Enables or disables guest Internet access /// public bool EnableInternetAccess { get; set; } /// /// Enables integrity checks on Game content files /// public bool EnableFsIntegrityChecks { get; set; } /// /// Enables FS access log output to the console. Possible modes are 0-3 /// public int FsGlobalAccessLogMode { get; set; } /// /// The selected audio backend /// public AudioBackend AudioBackend { get; set; } /// /// The audio volume /// public float AudioVolume { get; set; } /// /// The selected memory manager mode /// public MemoryManagerMode MemoryManagerMode { get; set; } /// /// Expands the RAM amount on the emulated system from 4GiB to 6GiB /// public bool ExpandRam { get; set; } /// /// Enable or disable ignoring missing services /// public bool IgnoreMissingServices { get; set; } /// /// Used to toggle columns in the GUI /// public GuiColumns GuiColumns { get; set; } /// /// Used to configure column sort settings in the GUI /// public ColumnSort ColumnSort { get; set; } /// /// A list of directories containing games to be used to load games into the games list /// public List GameDirs { get; set; } /// /// A list of file types to be hidden in the games List /// public ShownFileTypes ShownFileTypes { get; set; } /// /// Main window start-up position, size and state /// public WindowStartup WindowStartup { get; set; } /// /// Language Code for the UI /// public string LanguageCode { get; set; } /// /// Enable or disable custom themes in the GUI /// public bool EnableCustomTheme { get; set; } /// /// Path to custom GUI theme /// public string CustomThemePath { get; set; } /// /// Chooses the base style // Not Used /// public string BaseStyle { get; set; } /// /// Chooses the view mode of the game list // Not Used /// public int GameListViewMode { get; set; } /// /// Show application name in Grid Mode // Not Used /// public bool ShowNames { get; set; } /// /// Sets App Icon Size // Not Used /// public int GridSize { get; set; } /// /// Sorts Apps in the game list // Not Used /// public int ApplicationSort { get; set; } /// /// Sets if Grid is ordered in Ascending Order // Not Used /// public bool IsAscendingOrder { get; set; } /// /// Start games in fullscreen mode /// public bool StartFullscreen { get; set; } /// /// Show console window /// public bool ShowConsole { get; set; } /// /// Enable or disable keyboard support (Independent from controllers binding) /// public bool EnableKeyboard { get; set; } /// /// Enable or disable mouse support (Independent from controllers binding) /// public bool EnableMouse { get; set; } /// /// Hotkey Keyboard Bindings /// public KeyboardHotkeys Hotkeys { get; set; } /// /// Legacy keyboard control bindings /// /// Kept for file format compatibility (to avoid possible failure when parsing configuration on old versions) /// TODO: Remove this when those older versions aren't in use anymore. public List KeyboardConfig { get; set; } /// /// Legacy controller control bindings /// /// Kept for file format compatibility (to avoid possible failure when parsing configuration on old versions) /// TODO: Remove this when those older versions aren't in use anymore. public List ControllerConfig { get; set; } /// /// Input configurations /// public List InputConfig { get; set; } /// /// Graphics backend /// public GraphicsBackend GraphicsBackend { get; set; } /// /// Preferred GPU /// public string PreferredGpu { get; set; } /// /// Multiplayer Mode /// public MultiplayerMode MultiplayerMode { get; set; } /// /// GUID for the network interface used by LAN (or 0 for default) /// public string MultiplayerLanInterfaceId { get; set; } /// /// Uses Hypervisor over JIT if available /// public bool UseHypervisor { get; set; } /// /// Loads a configuration file from disk /// /// The path to the JSON configuration file /// Parsed configuration file public static bool TryLoad(string path, out ConfigurationFileFormat configurationFileFormat) { try { configurationFileFormat = JsonHelper.DeserializeFromFile(path, ConfigurationFileFormatSettings.SerializerContext.ConfigurationFileFormat); return configurationFileFormat.Version != 0; } catch { configurationFileFormat = null; return false; } } /// /// Save a configuration file to disk /// /// The path to the JSON configuration file public void SaveConfig(string path) { JsonHelper.SerializeToFile(path, this, ConfigurationFileFormatSettings.SerializerContext.ConfigurationFileFormat); } } }