From db35be690f5ca69b9766f2fa75b374e727e3b3eb Mon Sep 17 00:00:00 2001 From: blackfa765 Date: Sun, 26 Oct 2025 18:43:02 -0500 Subject: [PATCH] Basic custom settings functionality Co-authored-by: KeatonTheBot --- .../Configuration/ConfigurationFileFormat.cs | 13 +- .../Configuration/ConfigurationState.cs | 45 +-- ...omSettingsMetadataJsonSerializerContext.cs | 11 + .../Helper/CustomSettingsHelper.cs | 97 ++++++ .../Helper/DownloadableContentsHelper.cs | 6 +- .../Helper/TitleUpdatesHelper.cs | 3 +- .../Models/CustomSettingsModel.cs | 32 ++ src/Ryujinx/AppHost.cs | 86 ++--- src/Ryujinx/Assets/Locales/ar_SA.json | 22 +- src/Ryujinx/Assets/Locales/de_DE.json | 22 +- src/Ryujinx/Assets/Locales/el_GR.json | 22 +- src/Ryujinx/Assets/Locales/en_US.json | 20 +- src/Ryujinx/Assets/Locales/es_ES.json | 24 +- src/Ryujinx/Assets/Locales/fr_FR.json | 22 +- src/Ryujinx/Assets/Locales/he_IL.json | 22 +- src/Ryujinx/Assets/Locales/it_IT.json | 26 +- src/Ryujinx/Assets/Locales/ja_JP.json | 22 +- src/Ryujinx/Assets/Locales/ko_KR.json | 22 +- src/Ryujinx/Assets/Locales/pl_PL.json | 22 +- src/Ryujinx/Assets/Locales/pt_BR.json | 22 +- src/Ryujinx/Assets/Locales/ru_RU.json | 22 +- src/Ryujinx/Assets/Locales/th_TH.json | 22 +- src/Ryujinx/Assets/Locales/tr_TR.json | 22 +- src/Ryujinx/Assets/Locales/uk_UA.json | 22 +- src/Ryujinx/Assets/Locales/zh_CN.json | 22 +- src/Ryujinx/Assets/Locales/zh_TW.json | 22 +- src/Ryujinx/Headless/Options.cs | 2 +- src/Ryujinx/Ryujinx.csproj | 11 + .../UI/Controls/ApplicationContextMenu.axaml | 8 + .../Controls/ApplicationContextMenu.axaml.cs | 65 ++++ .../UI/ViewModels/CustomSettingsViewModel.cs | 294 ++++++++++++++++++ .../UI/ViewModels/SettingsViewModel.cs | 138 ++++---- .../Settings/CustomSettingsCPUView.axaml | 76 +++++ .../Settings/CustomSettingsCPUView.axaml.cs | 12 + .../Settings/CustomSettingsGraphicsView.axaml | 153 +++++++++ .../CustomSettingsGraphicsView.axaml.cs | 12 + .../Settings/CustomSettingsSystemView.axaml | 192 ++++++++++++ .../CustomSettingsSystemView.axaml.cs | 12 + .../Views/Settings/SettingsGraphicsView.axaml | 34 +- .../UI/Views/Settings/SettingsInputView.axaml | 9 +- .../Views/Settings/SettingsSystemView.axaml | 28 +- src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 52 +++- .../UI/Windows/CustomSettingsWindow.axaml | 114 +++++++ .../UI/Windows/CustomSettingsWindow.axaml.cs | 108 +++++++ src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 2 +- 45 files changed, 1683 insertions(+), 332 deletions(-) create mode 100644 src/Ryujinx.UI.Common/Configuration/CustomSettingsMetadataJsonSerializerContext.cs create mode 100644 src/Ryujinx.UI.Common/Helper/CustomSettingsHelper.cs create mode 100644 src/Ryujinx.UI.Common/Models/CustomSettingsModel.cs create mode 100644 src/Ryujinx/UI/ViewModels/CustomSettingsViewModel.cs create mode 100644 src/Ryujinx/UI/Views/Settings/CustomSettingsCPUView.axaml create mode 100644 src/Ryujinx/UI/Views/Settings/CustomSettingsCPUView.axaml.cs create mode 100644 src/Ryujinx/UI/Views/Settings/CustomSettingsGraphicsView.axaml create mode 100644 src/Ryujinx/UI/Views/Settings/CustomSettingsGraphicsView.axaml.cs create mode 100644 src/Ryujinx/UI/Views/Settings/CustomSettingsSystemView.axaml create mode 100644 src/Ryujinx/UI/Views/Settings/CustomSettingsSystemView.axaml.cs create mode 100644 src/Ryujinx/UI/Windows/CustomSettingsWindow.axaml create mode 100644 src/Ryujinx/UI/Windows/CustomSettingsWindow.axaml.cs diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs index 995523d1d..6d78540bf 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs @@ -34,14 +34,9 @@ namespace Ryujinx.UI.Common.Configuration 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. + /// Resolution Scale. A float value containing the resolution scale. /// - 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; } + public float ResScale { get; set; } /// /// Max Anisotropy. Values range from 0 - 16. Set to -1 to let the game decide. @@ -264,7 +259,7 @@ namespace Ryujinx.UI.Common.Configuration /// Enables or disables low-power profiled translation cache persistency loading /// public bool EnableLowPowerPtc { get; set; } - + /// /// Clock tick scalar, in percent points (100 = 1.0). /// @@ -473,7 +468,7 @@ namespace Ryujinx.UI.Common.Configuration /// Uses Hypervisor over JIT if available /// public bool UseHypervisor { get; set; } - + /// /// Enables or disables the GDB stub /// diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs index 66fef998b..9f9aa8936 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs @@ -340,7 +340,7 @@ namespace Ryujinx.UI.Common.Configuration /// /// Enables or disables profiled translation cache persistency /// - public ReactiveObject EnablePtc { get; private set; } + public ReactiveObject EnablePptc { get; private set; } /// /// Clock tick scalar, in percent points (100 = 1.0). @@ -350,7 +350,7 @@ namespace Ryujinx.UI.Common.Configuration /// /// Enables or disables low-power profiled translation cache persistency loading /// - public ReactiveObject EnableLowPowerPtc { get; private set; } + public ReactiveObject EnableLowPowerPptc { get; private set; } /// /// Enables or disables guest Internet access @@ -401,7 +401,7 @@ namespace Ryujinx.UI.Common.Configuration /// Skip User Profiles Manager /// public ReactiveObject SkipUserProfilesManager { get; private set; } - + /// /// Uses Hypervisor over JIT if available /// @@ -418,10 +418,10 @@ namespace Ryujinx.UI.Common.Configuration MatchSystemTime.Event += static (_, e) => LogValueChange(e, nameof(MatchSystemTime)); EnableDockedMode = new ReactiveObject(); EnableDockedMode.Event += static (_, e) => LogValueChange(e, nameof(EnableDockedMode)); - EnablePtc = new ReactiveObject(); - EnablePtc.Event += static (_, e) => LogValueChange(e, nameof(EnablePtc)); - EnableLowPowerPtc = new ReactiveObject(); - EnableLowPowerPtc.Event += static (_, e) => LogValueChange(e, nameof(EnableLowPowerPtc)); + EnablePptc = new ReactiveObject(); + EnablePptc.Event += static (_, e) => LogValueChange(e, nameof(EnablePptc)); + EnableLowPowerPptc = new ReactiveObject(); + EnableLowPowerPptc.Event += static (_, e) => LogValueChange(e, nameof(EnableLowPowerPptc)); TickScalar = new ReactiveObject(); TickScalar.Event += static (_, e) => LogValueChange(e, nameof(TickScalar)); TickScalar.Event += static (_, e) => @@ -513,14 +513,9 @@ namespace Ryujinx.UI.Common.Configuration public ReactiveObject AspectRatio { get; private set; } /// - /// Resolution Scale. An integer scale applied to applicable render targets. Values 1-4, or -1 to use a custom floating point scale instead. + /// Resolution Scale. A float value containing the resolution scale. /// - public ReactiveObject ResScale { get; private set; } - - /// - /// Custom Resolution Scale. A custom floating point scale applied to applicable render targets. Only active when Resolution Scale is -1. - /// - public ReactiveObject ResScaleCustom { get; private set; } + public ReactiveObject ResScale { get; private set; } /// /// Directory to save the game shaders. @@ -611,10 +606,8 @@ namespace Ryujinx.UI.Common.Configuration { BackendThreading = new ReactiveObject(); BackendThreading.Event += static (_, e) => LogValueChange(e, nameof(BackendThreading)); - ResScale = new ReactiveObject(); + ResScale = new ReactiveObject(); ResScale.Event += static (_, e) => LogValueChange(e, nameof(ResScale)); - ResScaleCustom = new ReactiveObject(); - ResScaleCustom.Event += static (_, e) => LogValueChange(e, nameof(ResScaleCustom)); MaxAnisotropy = new ReactiveObject(); MaxAnisotropy.Event += static (_, e) => LogValueChange(e, nameof(MaxAnisotropy)); AspectRatio = new ReactiveObject(); @@ -824,7 +817,6 @@ namespace Ryujinx.UI.Common.Configuration BackendThreading = Graphics.BackendThreading, EnableFileLog = Logger.EnableFileLog, ResScale = Graphics.ResScale, - ResScaleCustom = Graphics.ResScaleCustom, MaxAnisotropy = Graphics.MaxAnisotropy, AspectRatio = Graphics.AspectRatio, AntiAliasing = Graphics.AntiAliasing, @@ -864,8 +856,8 @@ namespace Ryujinx.UI.Common.Configuration EnableTextureRecompression = Graphics.EnableTextureRecompression, EnableMacroHLE = Graphics.EnableMacroHLE, EnableColorSpacePassthrough = Graphics.EnableColorSpacePassthrough, - EnablePtc = System.EnablePtc, - EnableLowPowerPtc = System.EnableLowPowerPtc, + EnablePtc = System.EnablePptc, + EnableLowPowerPtc = System.EnableLowPowerPptc, TickScalar = System.TickScalar, EnableInternetAccess = System.EnableInternetAccess, EnableFsIntegrityChecks = System.EnableFsIntegrityChecks, @@ -953,8 +945,7 @@ namespace Ryujinx.UI.Common.Configuration { Logger.EnableFileLog.Value = true; Graphics.BackendThreading.Value = BackendThreading.Auto; - Graphics.ResScale.Value = 1; - Graphics.ResScaleCustom.Value = 1.0f; + Graphics.ResScale.Value = 1.0f; Graphics.MaxAnisotropy.Value = -1.0f; Graphics.AspectRatio.Value = AspectRatio.Fixed16x9; Graphics.GraphicsBackend.Value = DefaultGraphicsBackend(); @@ -995,7 +986,7 @@ namespace Ryujinx.UI.Common.Configuration Graphics.AntiAliasing.Value = AntiAliasing.None; Graphics.ScalingFilter.Value = ScalingFilter.Bilinear; Graphics.ScalingFilterLevel.Value = 80; - System.EnablePtc.Value = true; + System.EnablePptc.Value = true; System.EnableInternetAccess.Value = false; System.EnableFsIntegrityChecks.Value = true; System.FsGlobalAccessLogMode.Value = 0; @@ -1208,8 +1199,7 @@ namespace Ryujinx.UI.Common.Configuration { Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 11."); - configurationFileFormat.ResScale = 1; - configurationFileFormat.ResScaleCustom = 1.0f; + configurationFileFormat.ResScale = 1.0f; configurationFileUpdated = true; } @@ -1807,7 +1797,6 @@ namespace Ryujinx.UI.Common.Configuration Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog; Graphics.ResScale.Value = configurationFileFormat.ResScale; - Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom; Graphics.MaxAnisotropy.Value = configurationFileFormat.MaxAnisotropy; Graphics.AspectRatio.Value = configurationFileFormat.AspectRatio; Graphics.ShadersDumpPath.Value = configurationFileFormat.GraphicsShadersDumpPath; @@ -1850,8 +1839,8 @@ namespace Ryujinx.UI.Common.Configuration Graphics.EnableTextureRecompression.Value = configurationFileFormat.EnableTextureRecompression; Graphics.EnableMacroHLE.Value = configurationFileFormat.EnableMacroHLE; Graphics.EnableColorSpacePassthrough.Value = configurationFileFormat.EnableColorSpacePassthrough; - System.EnablePtc.Value = configurationFileFormat.EnablePtc; - System.EnableLowPowerPtc.Value = configurationFileFormat.EnableLowPowerPtc; + System.EnablePptc.Value = configurationFileFormat.EnablePtc; + System.EnableLowPowerPptc.Value = configurationFileFormat.EnableLowPowerPtc; System.TickScalar.Value = configurationFileFormat.TickScalar; System.EnableInternetAccess.Value = configurationFileFormat.EnableInternetAccess; System.EnableFsIntegrityChecks.Value = configurationFileFormat.EnableFsIntegrityChecks; diff --git a/src/Ryujinx.UI.Common/Configuration/CustomSettingsMetadataJsonSerializerContext.cs b/src/Ryujinx.UI.Common/Configuration/CustomSettingsMetadataJsonSerializerContext.cs new file mode 100644 index 000000000..70840ebb8 --- /dev/null +++ b/src/Ryujinx.UI.Common/Configuration/CustomSettingsMetadataJsonSerializerContext.cs @@ -0,0 +1,11 @@ +using Ryujinx.UI.Common.Models; +using System.Text.Json.Serialization; + +namespace Ryujinx.Common.Configuration +{ + [JsonSourceGenerationOptions(WriteIndented = true)] + [JsonSerializable(typeof(CustomSettingsModel))] + public partial class CustomSettingsMetadataJsonSerializerContext : JsonSerializerContext + { + } +} diff --git a/src/Ryujinx.UI.Common/Helper/CustomSettingsHelper.cs b/src/Ryujinx.UI.Common/Helper/CustomSettingsHelper.cs new file mode 100644 index 000000000..4c9184511 --- /dev/null +++ b/src/Ryujinx.UI.Common/Helper/CustomSettingsHelper.cs @@ -0,0 +1,97 @@ +using Ryujinx.Common.Configuration; +using Ryujinx.Common.Logging; +using Ryujinx.Common.Utilities; +using Ryujinx.HLE; +using Ryujinx.UI.Common.Configuration; +using Ryujinx.UI.Common.Configuration.System; +using System.IO; +using CustomSettingsModel = Ryujinx.UI.Common.Models.CustomSettingsModel; +using Path = System.IO.Path; + +namespace Ryujinx.UI.Common.Helper +{ + public static class CustomSettingsHelper + { + private static readonly CustomSettingsMetadataJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions()); + + public static CustomSettingsModel LoadCustomSettingsJson(string customSettingsJsonPath) + { + var customSettingsModel = new CustomSettingsModel(); + + if (!File.Exists(customSettingsJsonPath)) + { + return customSettingsModel; + } + + try + { + Logger.Info?.Print(LogClass.Configuration, $"Found custom settings data for application at {customSettingsJsonPath}"); + customSettingsModel = JsonHelper.DeserializeFromFile(customSettingsJsonPath, _serializerContext.CustomSettingsModel); + return customSettingsModel; + } + catch + { + Logger.Error?.Print(LogClass.Configuration, $"Failed to deserialize custom settings data for application at {customSettingsJsonPath}"); + return customSettingsModel; + } + } + + public static void SaveCustomSettingsJson(string customSettingsJsonPath, CustomSettingsModel customSettingsModel) + { + if (!File.Exists(customSettingsJsonPath)) + { + string directoryPath = Path.GetDirectoryName(customSettingsJsonPath); + + if (!string.IsNullOrEmpty(directoryPath)) + { + Directory.CreateDirectory(directoryPath); + } + } + + JsonHelper.SerializeToFile(customSettingsJsonPath, customSettingsModel, _serializerContext.CustomSettingsModel); + } + + public static bool HasCustomSettings(string customSettingsJsonPath) + { + return File.Exists(customSettingsJsonPath); + } + + public static void DeleteCustomSettings(string customSettingsJsonPath) + { + FileInfo file = new(customSettingsJsonPath); + + if (file.Exists) + { + file.Delete(); + } + } + + public static void OverrideSettings(CustomSettingsModel customSettingsModel) + { + ConfigurationState.Instance.System.EnableDockedMode.Value = customSettingsModel.EnableDockedMode; + ConfigurationState.Instance.System.Language.Value = (Language)customSettingsModel.SystemLanguage; + ConfigurationState.Instance.System.Region.Value = (Region)customSettingsModel.SystemRegion; + ConfigurationState.Instance.Graphics.VSyncMode.Value = (VSyncMode)customSettingsModel.VSyncMode; + ConfigurationState.Instance.System.DramSize.Value = (MemoryConfiguration)customSettingsModel.DramSize; + ConfigurationState.Instance.System.EnableFsIntegrityChecks.Value = customSettingsModel.EnableFsIntegrityChecks; + ConfigurationState.Instance.System.IgnoreMissingServices.Value = customSettingsModel.IgnoreMissingServices; + ConfigurationState.Instance.System.EnableLowPowerPptc.Value = customSettingsModel.EnableLowPowerPptc; + ConfigurationState.Instance.System.MemoryManagerMode.Value = (MemoryManagerMode)customSettingsModel.MemoryManagerMode; + ConfigurationState.Instance.System.UseHypervisor.Value = customSettingsModel.UseHypervisor; + ConfigurationState.Instance.Graphics.GraphicsBackend.Value = (GraphicsBackend)customSettingsModel.GraphicsBackend; + ConfigurationState.Instance.Graphics.PreferredGpu.Value = customSettingsModel.PreferredGpu; + ConfigurationState.Instance.Graphics.EnableShaderCache.Value = customSettingsModel.EnableShaderCache; + ConfigurationState.Instance.Graphics.EnableTextureRecompression.Value = customSettingsModel.EnableTextureRecompression; + ConfigurationState.Instance.Graphics.EnableMacroHLE.Value = customSettingsModel.EnableMacroHLE; + ConfigurationState.Instance.Graphics.EnableColorSpacePassthrough.Value = customSettingsModel.EnableColorSpacePassthrough; + ConfigurationState.Instance.Graphics.ResScale.Value = customSettingsModel.ResScale; + ConfigurationState.Instance.Graphics.MaxAnisotropy.Value = customSettingsModel.MaxAnisotropy; + ConfigurationState.Instance.Graphics.BackendThreading.Value = (BackendThreading)customSettingsModel.BackendThreading; + } + + public static string PathToGameSettingsJson(ulong applicationIdBase) + { + return Path.Combine(AppDataManager.GamesDirPath, applicationIdBase.ToString("x16"), "settings.json"); + } + } +} diff --git a/src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs b/src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs index 8d4fd5492..557109fed 100644 --- a/src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs +++ b/src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs @@ -31,13 +31,13 @@ namespace Ryujinx.UI.Common.Helper try { - List downloadableContentContainerList = JsonHelper.DeserializeFromFile(downloadableContentJsonPath, - _serializerContext.ListDownloadableContentContainer); + Logger.Info?.Print(LogClass.Configuration, $"Found downloadable content data for {applicationIdBase:x16} at {downloadableContentJsonPath}"); + List downloadableContentContainerList = JsonHelper.DeserializeFromFile(downloadableContentJsonPath,_serializerContext.ListDownloadableContentContainer); return LoadDownloadableContents(vfs, downloadableContentContainerList); } catch { - Logger.Error?.Print(LogClass.Configuration, "Downloadable Content JSON failed to deserialize."); + Logger.Error?.Print(LogClass.Configuration, $"Failed to deserialize downloadable content data for {applicationIdBase:x16} at {downloadableContentJsonPath}"); return []; } } diff --git a/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs b/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs index a54542427..fdcb8a6ec 100644 --- a/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs +++ b/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs @@ -39,12 +39,13 @@ namespace Ryujinx.UI.Common.Helper try { + Logger.Info?.Print(LogClass.Application, $"Found title updates data for {applicationIdBase:x16} at {titleUpdatesJsonPath}"); TitleUpdateMetadata titleUpdateWindowData = JsonHelper.DeserializeFromFile(titleUpdatesJsonPath, _serializerContext.TitleUpdateMetadata); return LoadTitleUpdates(vfs, titleUpdateWindowData, applicationIdBase); } catch { - Logger.Warning?.Print(LogClass.Application, $"Failed to deserialize title update data for {applicationIdBase:x16} at {titleUpdatesJsonPath}"); + Logger.Error?.Print(LogClass.Application, $"Failed to deserialize title updates data for {applicationIdBase:x16} at {titleUpdatesJsonPath}"); return []; } } diff --git a/src/Ryujinx.UI.Common/Models/CustomSettingsModel.cs b/src/Ryujinx.UI.Common/Models/CustomSettingsModel.cs new file mode 100644 index 000000000..598cdbb38 --- /dev/null +++ b/src/Ryujinx.UI.Common/Models/CustomSettingsModel.cs @@ -0,0 +1,32 @@ +using Ryujinx.Common.Configuration; +using Ryujinx.HLE; +using Ryujinx.UI.Common.Configuration; + +namespace Ryujinx.UI.Common.Models +{ + // NOTE: most consuming code relies on this model being value-comparable + public record CustomSettingsModel() + { + public bool HasCustomSettings { get; set; } + public bool EnableDockedMode { get; set; } + public int SystemLanguage { get; set; } + public int SystemRegion { get; set; } + public int VSyncMode { get; set; } + public int DramSize { get; set; } + public bool EnableFsIntegrityChecks { get; set; } + public bool IgnoreMissingServices { get; set; } + public bool EnablePptc { get; set; } + public bool EnableLowPowerPptc { get; set; } + public int MemoryManagerMode { get; set; } + public bool UseHypervisor { get; set; } + public int GraphicsBackend { get; set; } + public string PreferredGpu { get; set; } + public bool EnableShaderCache { get; set; } + public bool EnableTextureRecompression { get; set; } + public bool EnableMacroHLE { get; set; } + public bool EnableColorSpacePassthrough { get; set; } + public float ResScale { get; set; } + public float MaxAnisotropy { get; set; } + public int BackendThreading { get; set; } + } +} diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index e40f8319d..5d0fe455a 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -43,6 +43,7 @@ using Ryujinx.UI.App.Common; using Ryujinx.UI.Common; using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Helper; +using Ryujinx.UI.Common.Models; using Silk.NET.Vulkan; using SkiaSharp; using SPB.Graphics.Exceptions; @@ -84,6 +85,7 @@ namespace Ryujinx.Ava private readonly AccountManager _accountManager; private readonly UserChannelPersistence _userChannelPersistence; + private readonly CustomSettingsModel _customSettingsModel; private readonly InputManager _inputManager; private readonly MainWindowViewModel _viewModel; @@ -181,6 +183,12 @@ namespace Ryujinx.Ava _chrono = new Stopwatch(); _ticksPerFrame = Stopwatch.Frequency / TargetFps; + if (CustomSettingsHelper.HasCustomSettings(CustomSettingsHelper.PathToGameSettingsJson(applicationId))) + { + CustomSettingsModel customSettings = CustomSettingsHelper.LoadCustomSettingsJson(CustomSettingsHelper.PathToGameSettingsJson(applicationId)); + CustomSettingsHelper.OverrideSettings(customSettings); + } + if (ApplicationPath.StartsWith("@SystemContent")) { ApplicationPath = VirtualFileSystem.SwitchPathToSystemPath(ApplicationPath); @@ -476,7 +484,7 @@ namespace Ryujinx.Ava public void Start() { - ARMeilleure.Optimizations.EcoFriendly = ConfigurationState.Instance.System.EnableLowPowerPtc; + ARMeilleure.Optimizations.EcoFriendly = ConfigurationState.Instance.System.EnableLowPowerPptc; if (OperatingSystem.IsWindows()) { @@ -959,45 +967,45 @@ namespace Ryujinx.Ava Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend Threading ({threadingMode}): {isGALThreaded}"); - // Initialize Configuration. - MemoryConfiguration memoryConfiguration = ConfigurationState.Instance.System.DramSize.Value; + CustomSettingsModel customSettingsModel = CustomSettingsHelper.LoadCustomSettingsJson(CustomSettingsHelper.PathToGameSettingsJson(ApplicationId)); - HLEConfiguration configuration = new(VirtualFileSystem, - _viewModel.LibHacHorizonManager, - ContentManager, - _accountManager, - _userChannelPersistence, - renderer, - InitializeAudio(), - memoryConfiguration, - _viewModel.UiHandler, - (SystemLanguage)ConfigurationState.Instance.System.Language.Value, - (RegionCode)ConfigurationState.Instance.System.Region.Value, - ConfigurationState.Instance.Graphics.VSyncMode, - ConfigurationState.Instance.System.EnableDockedMode, - ConfigurationState.Instance.System.EnablePtc, - ConfigurationState.Instance.System.TickScalar, - ConfigurationState.Instance.System.EnableInternetAccess, - ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None, - ConfigurationState.Instance.System.FsGlobalAccessLogMode, - ConfigurationState.Instance.System.MatchSystemTime - ? 0 - : ConfigurationState.Instance.System.SystemTimeOffset, - ConfigurationState.Instance.System.TimeZone, - ConfigurationState.Instance.System.MemoryManagerMode, - ConfigurationState.Instance.System.IgnoreMissingServices, - ConfigurationState.Instance.Graphics.AspectRatio, - ConfigurationState.Instance.System.AudioVolume, - ConfigurationState.Instance.System.UseHypervisor, - ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value, - ConfigurationState.Instance.Multiplayer.Mode, - ConfigurationState.Instance.Multiplayer.DisableP2p, - ConfigurationState.Instance.Multiplayer.LdnPassphrase, - ConfigurationState.Instance.Multiplayer.LdnServer, - ConfigurationState.Instance.Debug.EnableGdbStub, - ConfigurationState.Instance.Debug.GdbStubPort, - ConfigurationState.Instance.Debug.DebuggerSuspendOnStart, - ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value); + HLEConfiguration configuration = new( + VirtualFileSystem, + _viewModel.LibHacHorizonManager, + ContentManager, + _accountManager, + _userChannelPersistence, + renderer, + InitializeAudio(), + customSettingsModel.HasCustomSettings ? (MemoryConfiguration)customSettingsModel.DramSize : ConfigurationState.Instance.System.DramSize.Value, + _viewModel.UiHandler, + (SystemLanguage)ConfigurationState.Instance.System.Language.Value, + (RegionCode)ConfigurationState.Instance.System.Region.Value, + ConfigurationState.Instance.Graphics.VSyncMode, + ConfigurationState.Instance.System.EnableDockedMode, + ConfigurationState.Instance.System.EnablePptc, + ConfigurationState.Instance.System.TickScalar, + ConfigurationState.Instance.System.EnableInternetAccess, + ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None, + ConfigurationState.Instance.System.FsGlobalAccessLogMode, + ConfigurationState.Instance.System.MatchSystemTime + ? 0 + : ConfigurationState.Instance.System.SystemTimeOffset, + ConfigurationState.Instance.System.TimeZone, + ConfigurationState.Instance.System.MemoryManagerMode, + ConfigurationState.Instance.System.IgnoreMissingServices, + ConfigurationState.Instance.Graphics.AspectRatio, + ConfigurationState.Instance.System.AudioVolume, + ConfigurationState.Instance.System.UseHypervisor, + ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value, + ConfigurationState.Instance.Multiplayer.Mode, + ConfigurationState.Instance.Multiplayer.DisableP2p, + ConfigurationState.Instance.Multiplayer.LdnPassphrase, + ConfigurationState.Instance.Multiplayer.LdnServer, + ConfigurationState.Instance.Debug.EnableGdbStub, + ConfigurationState.Instance.Debug.GdbStubPort, + ConfigurationState.Instance.Debug.DebuggerSuspendOnStart, + ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value); Device = new Switch(configuration); } diff --git a/src/Ryujinx/Assets/Locales/ar_SA.json b/src/Ryujinx/Assets/Locales/ar_SA.json index 01a78af61..d6b633d3f 100644 --- a/src/Ryujinx/Assets/Locales/ar_SA.json +++ b/src/Ryujinx/Assets/Locales/ar_SA.json @@ -66,6 +66,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "يفتح نافذة إدارة تحديث اللُعبة", "GameListContextMenuManageDlc": "إدارة المحتوي الإضافي", "GameListContextMenuManageDlcToolTip": "يفتح نافذة إدارة المحتوي الإضافي", + "GameListContextMenuManageCustomSettings": "إدارة ملف الإعدادات المخصصة", + "GameListContextMenuManageCustomSettingsToolTip": "إدارة الإعدادات المخصصة للتطبيق المحدد", + "GameListContextMenuCustomSettingsOpen": "فتح دليل الإعدادات المخصصة", + "GameListContextMenuCustomSettingsOpenToolTip": "فتح الدليل الذي يحتوي على الإعدادات المخصصة للتطبيق", "GameListContextMenuCacheManagement": "إدارة ذاكرة التخزين المؤقت", "GameListContextMenuCacheManagementPurgePptc": "قائمة انتظار إعادة بناء الـ‫PPTC", "GameListContextMenuCacheManagementPurgePptcToolTip": "تنشيط ‫PPTC لإعادة البناء في وقت الإقلاع عند بدء تشغيل اللعبة التالي", @@ -172,11 +176,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8x", "SettingsTabGraphicsAnisotropicFiltering16x": "16x", "SettingsTabGraphicsResolutionScale": "مقياس الدقة", - "SettingsTabGraphicsResolutionScaleCustom": "مخصص (لا ينصح به)", - "SettingsTabGraphicsResolutionScaleNative": "الأصل ‫(720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (لا ينصح به)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "نسبة الارتفاع إلى العرض:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -207,8 +212,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "الكل", "SettingsTabLoggingEnableDebugLogs": "تمكين سجلات التصحيح", "SettingsTabInput": "الإدخال", - "SettingsTabInputEnableDockedMode": "تركيب بالمنصة", + "SettingsTabSystemEnableDockedMode": "تركيب بالمنصة", "SettingsTabInputDirectKeyboardAccess": "الوصول المباشر للوحة المفاتيح", + "SettingsButtonDelete": "حذف", "SettingsButtonSave": "حفظ", "SettingsButtonClose": "إغلاق", "SettingsButtonOk": "موافق", @@ -487,9 +493,10 @@ "DialogProfileDeleteProfileTitle": "حذف الملف الشخصي", "DialogProfileDeleteProfileMessage": "هذا الإجراء لا رجعة فيه، هل أنت متأكد من أنك تريد المتابعة؟", "DialogWarning": "تحذير", + "DialogCustomSettingsDeleteMessage": "أنت على وشك حذف الإعدادات المخصصة لـ:\n\n{0}\n\nهل أنت متأكد من أنك تريد المتابعة؟", "DialogPPTCDeletionMessage": "أنت على وشك الإنتظار لإعادة بناء ذاكرة التخزين المؤقت للترجمة المستمرة (PPTC) عند الإقلاع التالي لـ:\n\n{0}\n\nأمتأكد من رغبتك في المتابعة؟", "DialogPPTCDeletionErrorMessage": "خطأ خلال تنظيف ذاكرة التخزين المؤقت للترجمة المستمرة (PPTC) في {0}: {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "أنت على وشك حذف جميع بيانات PPTC من:\n\n{0}\n\nهل أنت متأكد من أنك تريد المتابعة؟", "DialogShaderDeletionMessage": "أنت على وشك حذف ذاكرة المظللات المؤقتة ل:\n\n{0}\n\nهل انت متأكد انك تريد المتابعة؟", "DialogShaderDeletionErrorMessage": "حدث خطأ أثناء تنظيف ذاكرة المظللات المؤقتة في {0}: {1}", "DialogRyujinxErrorMessage": "واجه ريوجينكس خطأ", @@ -528,7 +535,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "الرجاء إيقاف المحاكاة أو إغلاق المحاكي قبل بدء لعبة أخرى.", "DialogUpdateAddUpdateErrorMessage": "الملف المحدد لا يحتوي على تحديث للعنوان المحدد!", "DialogSettingsBackendThreadingWarningTitle": "تحذير - خلفية متعددة المسارات", - "DialogSettingsBackendThreadingWarningMessage": "يجب إعادة تشغيل ريوجينكس بعد تغيير هذا الخيار حتى يتم تطبيقه بالكامل. اعتمادا على النظام الأساسي الخاص بك، قد تحتاج إلى تعطيل تعدد المسارات الخاص ببرنامج الرسومات التشغيل الخاص بك يدويًا عند استخدام الخاص بريوجينكس.", "DialogModManagerDeletionWarningMessage": "أنت على وشك حذف التعديل: {0}\n\nهل انت متأكد انك تريد المتابعة؟", "DialogModManagerDeletionAllWarningMessage": "أنت على وشك حذف كافة التعديلات لهذا العنوان.\n\nهل انت متأكد انك تريد المتابعة؟", "SettingsTabGraphicsFeaturesOptions": "المميزات", diff --git a/src/Ryujinx/Assets/Locales/de_DE.json b/src/Ryujinx/Assets/Locales/de_DE.json index 02e6b17a3..8fd0be212 100644 --- a/src/Ryujinx/Assets/Locales/de_DE.json +++ b/src/Ryujinx/Assets/Locales/de_DE.json @@ -67,6 +67,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "Öffnet den Spiel-Update-Manager", "GameListContextMenuManageDlc": "Verwalten von DLC", "GameListContextMenuManageDlcToolTip": "Öffnet den DLC-Manager", + "GameListContextMenuManageCustomSettings": "Benutzerdefinierte Einstellungsdatei verwalten", + "GameListContextMenuManageCustomSettingsToolTip": "Verwalten Sie die benutzerdefinierten Einstellungen für die ausgewählte Anwendung", + "GameListContextMenuCustomSettingsOpen": "Verzeichnis der benutzerdefinierten Einstellungen öffnen", + "GameListContextMenuCustomSettingsOpenToolTip": "Öffnen Sie das Verzeichnis, das die benutzerdefinierten Einstellungen der Anwendung enthält", "GameListContextMenuCacheManagement": "Cache-Verwaltung", "GameListContextMenuCacheManagementPurgePptc": "PPTC als ungültig markieren", "GameListContextMenuCacheManagementPurgePptcToolTip": "Markiert den PPTC als ungültig, sodass dieser beim nächsten Spielstart neu erstellt wird", @@ -173,11 +177,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8x", "SettingsTabGraphicsAnisotropicFiltering16x": "16x", "SettingsTabGraphicsResolutionScale": "Auflösungsskalierung:", - "SettingsTabGraphicsResolutionScaleCustom": "Benutzerdefiniert (nicht empfohlen)", - "SettingsTabGraphicsResolutionScaleNative": "Nativ (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (Nicht empfohlen)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "Bildseitenverhältnis:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -208,8 +213,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "Alle", "SettingsTabLoggingEnableDebugLogs": "Aktiviere Debug-Log", "SettingsTabInput": "Eingabe", - "SettingsTabInputEnableDockedMode": "Angedockter Modus", + "SettingsTabSystemEnableDockedMode": "Angedockter Modus", "SettingsTabInputDirectKeyboardAccess": "Direkter Tastaturzugriff", + "SettingsButtonDelete": "Löschen", "SettingsButtonSave": "Speichern", "SettingsButtonClose": "Schließen", "SettingsButtonOk": "OK", @@ -488,9 +494,10 @@ "DialogProfileDeleteProfileTitle": "Profil löschen", "DialogProfileDeleteProfileMessage": "Diese Aktion kann nicht rückgängig gemacht werden. Wirklich fortfahren?", "DialogWarning": "Warnung", + "DialogCustomSettingsDeleteMessage": "Sie sind dabei, benutzerdefinierte Einstellungen zu löschen für:\n\n{0}\n\nSind Sie sicher, dass Sie fortfahren möchten?", "DialogPPTCDeletionMessage": "Du bist dabei den PPTC für das folgende Spiel als ungültig zu markieren:\n\n{0}\n\nWirklich fortfahren?", "DialogPPTCDeletionErrorMessage": "Fehler bei der Löschung des PPTC Caches bei {0}: {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "Sie sind dabei, alle PPTC-Daten zu löschen von:\n\n{0}\n\nSind Sie sicher, dass Sie fortfahren möchten?", "DialogShaderDeletionMessage": "Du bist dabei, den Shader Cache zu löschen für :\n\n{0}\n\nWirklich fortfahren?", "DialogShaderDeletionErrorMessage": "Es ist ein Fehler bei der Löschung des Shader Caches bei {0}: {1} aufgetreten", "DialogRyujinxErrorMessage": "Ein Fehler ist aufgetreten", @@ -529,7 +536,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Bitte beende die Emulation oder schließe den Emulator, vor dem Starten eines neuen Spiels", "DialogUpdateAddUpdateErrorMessage": "Die angegebene Datei enthält keine Updates für den ausgewählten Titel!", "DialogSettingsBackendThreadingWarningTitle": "Warnung - Render Threading", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx muss muss neu gestartet werden, damit die Änderungen wirksam werden. Abhängig von dem Betriebssystem muss möglicherweise das Multithreading des Treibers manuell deaktiviert werden, wenn Ryujinx verwendet wird.", "DialogModManagerDeletionWarningMessage": "Du bist dabei, diesen Mod zu lösche. {0}\n\nMöchtest du wirklich fortfahren?", "DialogModManagerDeletionAllWarningMessage": "Du bist dabei, alle Mods für diesen Titel zu löschen.\n\nMöchtest du wirklich fortfahren?", "SettingsTabGraphicsFeaturesOptions": "Erweiterungen", diff --git a/src/Ryujinx/Assets/Locales/el_GR.json b/src/Ryujinx/Assets/Locales/el_GR.json index 89fc0b1cd..f0ff9b2b9 100644 --- a/src/Ryujinx/Assets/Locales/el_GR.json +++ b/src/Ryujinx/Assets/Locales/el_GR.json @@ -66,6 +66,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "Ανοίγει το παράθυρο διαχείρισης Ενημερώσεων Παιχνιδιού", "GameListContextMenuManageDlc": "Διαχείριση DLC", "GameListContextMenuManageDlcToolTip": "Ανοίγει το παράθυρο διαχείρισης DLC", + "GameListContextMenuManageCustomSettings": "Διαχείριση Αρχείου Προσαρμοσμένων Ρυθμίσεων", + "GameListContextMenuManageCustomSettingsToolTip": "Διαχειριστείτε τις προσαρμοσμένες ρυθμίσεις για την επιλεγμένη Εφαρμογή", + "GameListContextMenuCustomSettingsOpen": "Άνοιγμα Καταλόγου Προσαρμοσμένων Ρυθμίσεων", + "GameListContextMenuCustomSettingsOpenToolTip": "Ανοίξτε τον κατάλογο που περιέχει τις προσαρμοσμένες ρυθμίσεις της Εφαρμογής", "GameListContextMenuCacheManagement": "Διαχείριση Προσωρινής Μνήμης", "GameListContextMenuCacheManagementPurgePptc": "Εκκαθάριση Προσωρινής Μνήμης PPTC", "GameListContextMenuCacheManagementPurgePptcToolTip": "Διαγράφει την προσωρινή μνήμη PPTC της εφαρμογής", @@ -172,11 +176,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8x", "SettingsTabGraphicsAnisotropicFiltering16x": "16x", "SettingsTabGraphicsResolutionScale": "Κλίμακα Ανάλυσης:", - "SettingsTabGraphicsResolutionScaleCustom": "Προσαρμοσμένο (Δεν συνιστάται)", - "SettingsTabGraphicsResolutionScaleNative": "Εγγενής (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (Not recommended)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "Αναλογία Απεικόνισης:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -207,8 +212,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "Όλα", "SettingsTabLoggingEnableDebugLogs": "Ενεργοποίηση Αρχείων Καταγραφής Εντοπισμού Σφαλμάτων", "SettingsTabInput": "Χειρισμός", - "SettingsTabInputEnableDockedMode": "Ενεργοποίηση Docked Mode", + "SettingsTabSystemEnableDockedMode": "Ενεργοποίηση Docked Mode", "SettingsTabInputDirectKeyboardAccess": "Άμεση Πρόσβαση στο Πληκτρολόγιο", + "SettingsButtonDelete": "Διαγραφή", "SettingsButtonSave": "Αποθήκευση", "SettingsButtonClose": "Κλείσιμο", "SettingsButtonOk": "ΟΚ", @@ -487,9 +493,10 @@ "DialogProfileDeleteProfileTitle": "Διαγραφή Προφίλ", "DialogProfileDeleteProfileMessage": "Αυτή η ενέργεια είναι μη αναστρέψιμη, είστε βέβαιοι ότι θέλετε να συνεχίσετε;", "DialogWarning": "Προειδοποίηση", + "DialogCustomSettingsDeleteMessage": "Πρόκειται να διαγράψετε τις προσαρμοσμένες ρυθμίσεις για:\n\n{0}\n\nΕίστε βέβαιοι ότι θέλετε να συνεχίσετε;", "DialogPPTCDeletionMessage": "Πρόκειται να διαγράψετε την προσωρινή μνήμη PPTC για :\n\n{0}\n\nΕίστε βέβαιοι ότι θέλετε να συνεχίσετε;", "DialogPPTCDeletionErrorMessage": "Σφάλμα κατά την εκκαθάριση προσωρινής μνήμης PPTC στο {0}: {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "Πρόκειται να διαγράψετε όλα τα δεδομένα PPTC από:\n\n{0}\n\nΕίστε βέβαιοι ότι θέλετε να συνεχίσετε;", "DialogShaderDeletionMessage": "Πρόκειται να διαγράψετε την προσωρινή μνήμη Shader για :\n\n{0}\n\nΕίστε βέβαιοι ότι θέλετε να συνεχίσετε;", "DialogShaderDeletionErrorMessage": "Σφάλμα κατά την εκκαθάριση προσωρινής μνήμης Shader στο {0}: {1}", "DialogRyujinxErrorMessage": "Το Ryujinx αντιμετώπισε σφάλμα", @@ -528,7 +535,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Σταματήστε την εξομοίωση ή κλείστε τον εξομοιωτή πριν ξεκινήσετε ένα άλλο παιχνίδι.", "DialogUpdateAddUpdateErrorMessage": "Το αρχείο δεν περιέχει ενημέρωση για τον επιλεγμένο τίτλο!", "DialogSettingsBackendThreadingWarningTitle": "Προειδοποίηση - Backend Threading", - "DialogSettingsBackendThreadingWarningMessage": "Το Ryujinx πρέπει να επανεκκινηθεί αφού αλλάξει αυτή η επιλογή για να εφαρμοστεί πλήρως. Ανάλογα με την πλατφόρμα σας, μπορεί να χρειαστεί να απενεργοποιήσετε με μη αυτόματο τρόπο το multithreading του ίδιου του προγράμματος οδήγησης όταν χρησιμοποιείτε το Ryujinx.", "DialogModManagerDeletionWarningMessage": "You are about to delete the mod: {0}\n\nAre you sure you want to proceed?", "DialogModManagerDeletionAllWarningMessage": "You are about to delete all mods for this title.\n\nAre you sure you want to proceed?", "SettingsTabGraphicsFeaturesOptions": "Χαρακτηριστικά", diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index 6dda3382c..f9bddc6f4 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -71,6 +71,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "Opens the Title Update management window", "GameListContextMenuManageDlc": "Manage DLC", "GameListContextMenuManageDlcToolTip": "Opens the DLC management window", + "GameListContextMenuManageCustomSettings": "Manage Custom Settings", + "GameListContextMenuManageCustomSettingsToolTip": "Opens the Custom Settings management windows", + "GameListContextMenuCustomSettingsOpen": "Open Custom Settings Directory", + "GameListContextMenuCustomSettingsOpenToolTip": "Open the directory which contains Application's custom settings", "GameListContextMenuCacheManagement": "Cache Management", "GameListContextMenuCacheManagementPurgePptc": "Queue PPTC Rebuild", "GameListContextMenuCacheManagementPurgePptcToolTip": "Trigger PPTC to rebuild at boot time on the next game launch", @@ -197,11 +201,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8x", "SettingsTabGraphicsAnisotropicFiltering16x": "16x", "SettingsTabGraphicsResolutionScale": "Resolution Scale:", - "SettingsTabGraphicsResolutionScaleCustom": "Custom (Not recommended)", - "SettingsTabGraphicsResolutionScaleNative": "Native (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (Not recommended)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "Aspect Ratio:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -238,8 +243,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "All", "SettingsTabLoggingEnableDebugLogs": "Enable Debug Logs", "SettingsTabInput": "Input", - "SettingsTabInputEnableDockedMode": "Docked Mode", + "SettingsTabSystemEnableDockedMode": "Docked Mode", "SettingsTabInputDirectKeyboardAccess": "Direct Keyboard Access", + "SettingsButtonDelete": "Delete", "SettingsButtonSave": "Save", "SettingsButtonClose": "Close", "SettingsButtonOk": "OK", @@ -523,6 +529,7 @@ "DialogProfileDeleteProfileTitle": "Deleting Profile", "DialogProfileDeleteProfileMessage": "This action is irreversible, are you sure you want to continue?", "DialogWarning": "Warning", + "DialogCustomSettingsDeleteMessage": "You are about to delete custom settings for:\n\n{0}\n\nAre you sure you want to proceed?", "DialogPPTCDeletionMessage": "You are about to queue a PPTC rebuild on the next boot of:\n\n{0}\n\nAre you sure you want to proceed?", "DialogPPTCDeletionErrorMessage": "Error purging PPTC cache at {0}: {1}", "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", @@ -564,7 +571,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Please stop emulation or close the emulator before launching another game.", "DialogUpdateAddUpdateErrorMessage": "The specified file does not contain an update for the selected title!", "DialogSettingsBackendThreadingWarningTitle": "Warning - Backend Threading", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx must be restarted after changing this option for it to apply fully. Depending on your platform, you may need to manually disable your driver's own multithreading when using Ryujinx's.", "DialogModManagerDeletionWarningMessage": "You are about to delete the mod: {0}\n\nAre you sure you want to proceed?", "DialogModManagerDeletionAllWarningMessage": "You are about to delete all mods for this title.\n\nAre you sure you want to proceed?", "SettingsTabGraphicsFeaturesOptions": "Features", diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index a79d9cf70..9b0c180c6 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -66,6 +66,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "Abrir la ventana de gestión de actualizaciones de esta aplicación", "GameListContextMenuManageDlc": "Gestionar DLC", "GameListContextMenuManageDlcToolTip": "Abrir la ventana de gestión del DLC", + "GameListContextMenuManageCustomSettings": "Gestionar Archivo de Configuración Personalizada", + "GameListContextMenuManageCustomSettingsToolTip": "Gestionar la configuración personalizada para la Aplicación seleccionada", + "GameListContextMenuCustomSettingsOpen": "Abrir Directorio de Configuración Personalizada", + "GameListContextMenuCustomSettingsOpenToolTip": "Abrir el directorio que contiene la configuración personalizada de la Aplicación", "GameListContextMenuCacheManagement": "Gestión de caché ", "GameListContextMenuCacheManagementPurgePptc": "Reconstruir PPTC en cola", "GameListContextMenuCacheManagementPurgePptcToolTip": "Elimina la caché de PPTC de esta aplicación", @@ -172,11 +176,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "x8", "SettingsTabGraphicsAnisotropicFiltering16x": "x16", "SettingsTabGraphicsResolutionScale": "Escala de resolución:", - "SettingsTabGraphicsResolutionScaleCustom": "Personalizada (no recomendado)", - "SettingsTabGraphicsResolutionScaleNative": "Nativa (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "x2 (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "x3 (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (no recomendado)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "Relación de aspecto:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -207,8 +212,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "Todo", "SettingsTabLoggingEnableDebugLogs": "Habilitar registros de debug", "SettingsTabInput": "Entrada", - "SettingsTabInputEnableDockedMode": "Modo dock/TV", + "SettingsTabSystemEnableDockedMode": "Modo dock/TV", "SettingsTabInputDirectKeyboardAccess": "Acceso directo al teclado", + "SettingsButtonDelete": "Eliminar", "SettingsButtonSave": "Guardar", "SettingsButtonClose": "Cerrar", "SettingsButtonOk": "Aceptar", @@ -487,9 +493,10 @@ "DialogProfileDeleteProfileTitle": "Eliminando perfil", "DialogProfileDeleteProfileMessage": "Esta acción es irreversible, ¿estás seguro de querer continuar?", "DialogWarning": "Advertencia", + "DialogCustomSettingsDeleteMessage": "Está a punto de eliminar la configuración personalizada para:\n\n{0}\n\n¿Está seguro de que desea continuar?", "DialogPPTCDeletionMessage": "Vas a borrar la caché de PPTC para:\n\n{0}\n\n¿Estás seguro de querer continuar?", "DialogPPTCDeletionErrorMessage": "Error purgando la caché de PPTC en {0}: {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "Está a punto de eliminar todos los datos PPTC de:\n\n{0}\n\n¿Está seguro de que desea continuar?", "DialogShaderDeletionMessage": "Vas a borrar la caché de sombreadores para:\n\n{0}\n\n¿Estás seguro de querer continuar?", "DialogShaderDeletionErrorMessage": "Error purgando la caché de sombreadores en {0}: {1}", "DialogRyujinxErrorMessage": "Ryujinx ha encontrado un error", @@ -528,7 +535,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Por favor, detén la emulación o cierra el emulador antes de iniciar otro juego.", "DialogUpdateAddUpdateErrorMessage": "¡Ese archivo no contiene una actualización para el título seleccionado!", "DialogSettingsBackendThreadingWarningTitle": "Advertencia - multihilado de gráficos", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx debe reiniciarse para aplicar este cambio. Dependiendo de tu plataforma, puede que tengas que desactivar manualmente la optimización enlazada de tus controladores gráficos para usar el multihilo de Ryujinx.", "DialogModManagerDeletionWarningMessage": "Estás a punto de eliminar el mod: {0}\n\n¿Estás seguro de que quieres continuar?", "DialogModManagerDeletionAllWarningMessage": "Estás a punto de eliminar todos los Mods para este título.\n\n¿Estás seguro de que quieres continuar?", "SettingsTabGraphicsFeaturesOptions": "Funcionalidades", @@ -597,7 +603,7 @@ "MemoryManagerSoftwareTooltip": "Usa una tabla de paginación de software para traducir direcciones. Ofrece la precisión más exacta pero el rendimiento más lento.", "MemoryManagerHostTooltip": "Mapea la memoria directamente en la dirección de espacio del host. Compilación y ejecución JIT mucho más rápida.", "MemoryManagerUnsafeTooltip": "Mapea la memoria directamente, pero no enmascara la dirección dentro del espacio de dirección del guest antes del acceso. El modo más rápido, pero a costa de seguridad. La aplicación guest puede acceder a la memoria desde cualquier parte en Ryujinx, así que ejecuta solo programas en los que confíes cuando uses este modo.", - "UseHypervisorTooltip": "Usar Hypervisor en lugar de JIT. Mejora enormemente el rendimiento cuando está disponible, pero puede ser inestable en su estado actual.", + "UseHypervisorTooltip": "Usar Hypervisor en lugar de JIT. Mejora enormemente el rendimiento cuando está disponible, pero puede ser inestable en su estado actual.", "DRamTooltip": "Expande la memoria DRAM del sistema emulado de 4GiB a 6GiB.\n\nUtilizar solo con packs de texturas HD o mods de resolución 4K. NO mejora el rendimiento.\n\nDesactívalo si no sabes qué hacer.", "IgnoreMissingServicesTooltip": "Hack para ignorar servicios no implementados del Horizon OS. Esto puede ayudar a sobrepasar crasheos cuando inicies ciertos juegos.\n\nDesactívalo si no sabes qué hacer.", "GraphicsBackendThreadingTooltip": "Ejecuta los comandos del motor gráfico en un segundo hilo. Acelera la compilación de sombreadores, reduce los tirones, y mejora el rendimiento en controladores gráficos que no realicen su propio procesamiento con múltiples hilos. Rendimiento ligeramente superior en controladores gráficos que soporten múltiples hilos.\n\nSelecciona \"Auto\" si no sabes qué hacer.", diff --git a/src/Ryujinx/Assets/Locales/fr_FR.json b/src/Ryujinx/Assets/Locales/fr_FR.json index cc3b3469b..0c56f40bc 100644 --- a/src/Ryujinx/Assets/Locales/fr_FR.json +++ b/src/Ryujinx/Assets/Locales/fr_FR.json @@ -66,6 +66,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "Ouvre la fenêtre de gestion des mises à jour du jeu", "GameListContextMenuManageDlc": "Gérer les DLC", "GameListContextMenuManageDlcToolTip": "Ouvre la fenêtre de gestion des DLC", + "GameListContextMenuManageCustomSettings": "Gérer les paramètres personnalisés", + "GameListContextMenuManageCustomSettingsToolTip": "Gérer les paramètres personnalisés pour l'Application sélectionnée", + "GameListContextMenuCustomSettingsOpen": "Ouvrir le Répertoire des Paramètres Personnalisés", + "GameListContextMenuCustomSettingsOpenToolTip": "Ouvrir le répertoire contenant les paramètres personnalisés de l'Application", "GameListContextMenuCacheManagement": "Gestion des caches", "GameListContextMenuCacheManagementPurgePptc": "Reconstruction du PPTC", "GameListContextMenuCacheManagementPurgePptcToolTip": "Effectuer une reconstruction du PPTC au prochain démarrage du jeu", @@ -174,11 +178,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "x8", "SettingsTabGraphicsAnisotropicFiltering16x": "x16", "SettingsTabGraphicsResolutionScale": "Échelle de résolution:", - "SettingsTabGraphicsResolutionScaleCustom": "Personnalisée (Non recommandée)", - "SettingsTabGraphicsResolutionScaleNative": "Natif (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "x2 (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "x3 (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (Non recommandé)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "Format d'affichage :", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -209,8 +214,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "Tout", "SettingsTabLoggingEnableDebugLogs": "Activer les journaux de debug", "SettingsTabInput": "Contrôles", - "SettingsTabInputEnableDockedMode": "Active le mode station d'accueil", + "SettingsTabSystemEnableDockedMode": "Active le mode station d'accueil", "SettingsTabInputDirectKeyboardAccess": "Accès direct au clavier", + "SettingsButtonDelete": "Supprimer", "SettingsButtonSave": "Enregistrer", "SettingsButtonClose": "Fermer", "SettingsButtonOk": "OK", @@ -489,9 +495,10 @@ "DialogProfileDeleteProfileTitle": "Supprimer le profil", "DialogProfileDeleteProfileMessage": "Cette action est irréversible, êtes-vous sûr de vouloir continuer ?", "DialogWarning": "Avertissement", + "DialogCustomSettingsDeleteMessage": "Vous êtes sur le point de supprimer les paramètres personnalisés pour :\n\n{0}\n\nÊtes-vous sûr de vouloir continuer ?", "DialogPPTCDeletionMessage": "Vous êtes sur le point de mettre en file d'attente une reconstruction PPTC au prochain démarrage de :\n\n{0}\n\nÊtes-vous sûr de vouloir continuer ?", "DialogPPTCDeletionErrorMessage": "Erreur lors de la purge du cache PPTC à {0}: {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "Vous êtes sur le point de supprimer toutes les données PPTC de :\n\n{0}\n\nÊtes-vous sûr de vouloir continuer ?", "DialogShaderDeletionMessage": "Vous êtes sur le point de supprimer le cache du Shader pour :\n\n{0}\n\nÊtes-vous sûr de vouloir continuer ?", "DialogShaderDeletionErrorMessage": "Erreur lors de la purge du cache du Shader à {0}: {1}", "DialogRyujinxErrorMessage": "Ryujinx a rencontré une erreur", @@ -530,7 +537,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Veuillez arrêter l'émulation ou fermer l'émulateur avant de lancer un autre jeu.", "DialogUpdateAddUpdateErrorMessage": "Le fichier spécifié ne contient pas de mise à jour pour le titre sélectionné !", "DialogSettingsBackendThreadingWarningTitle": "Avertissement - Backend Threading ", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx doit être redémarré après avoir changé cette option pour qu'elle s'applique complètement. Selon votre plate-forme, vous devrez peut-être désactiver manuellement le multithreading de votre pilote lorsque vous utilisez Ryujinx.", "DialogModManagerDeletionWarningMessage": "Vous êtes sur le point de supprimer le mod : {0}\n\nÊtes-vous sûr de vouloir continuer ?", "DialogModManagerDeletionAllWarningMessage": "Vous êtes sur le point de supprimer tous les mods pour ce titre.\n\nÊtes-vous sûr de vouloir continuer ?", "SettingsTabGraphicsFeaturesOptions": "Fonctionnalités", diff --git a/src/Ryujinx/Assets/Locales/he_IL.json b/src/Ryujinx/Assets/Locales/he_IL.json index 33c6b3372..2277d8b93 100644 --- a/src/Ryujinx/Assets/Locales/he_IL.json +++ b/src/Ryujinx/Assets/Locales/he_IL.json @@ -66,6 +66,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "פותח את חלון מנהל עדכוני המשחקים", "GameListContextMenuManageDlc": "מנהל הרחבות", "GameListContextMenuManageDlcToolTip": "פותח את חלון מנהל הרחבות המשחקים", + "GameListContextMenuManageCustomSettings": "נהל קובץ הגדרות מותאמות אישית", + "GameListContextMenuManageCustomSettingsToolTip": "נהל הגדרות מותאמות אישית עבור האפליקציה שנבחרה", + "GameListContextMenuCustomSettingsOpen": "פתח תיקיית הגדרות מותאמות אישית", + "GameListContextMenuCustomSettingsOpenToolTip": "פתח את התיקייה המכילה את הגדרות מותאמות אישית של האפליקציה", "GameListContextMenuCacheManagement": "ניהול מטמון", "GameListContextMenuCacheManagementPurgePptc": "הוסף PPTC לתור בנייה מחדש", "GameListContextMenuCacheManagementPurgePptcToolTip": "גרום ל-PPTC להבנות מחדש בפתיחה הבאה של המשחק", @@ -172,11 +176,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8x", "SettingsTabGraphicsAnisotropicFiltering16x": "16x", "SettingsTabGraphicsResolutionScale": "קנה מידה של רזולוציה:", - "SettingsTabGraphicsResolutionScaleCustom": "מותאם אישית (לא מומלץ)", - "SettingsTabGraphicsResolutionScaleNative": "מקורי (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (לא מומלץ)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "יחס גובה-רוחב:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -207,8 +212,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "הכל", "SettingsTabLoggingEnableDebugLogs": "אפשר רישום ניפוי באגים", "SettingsTabInput": "קלט", - "SettingsTabInputEnableDockedMode": "מצב עגינה", + "SettingsTabSystemEnableDockedMode": "מצב עגינה", "SettingsTabInputDirectKeyboardAccess": "גישה ישירה למקלדת", + "SettingsButtonDelete": "מחק", "SettingsButtonSave": "שמירה", "SettingsButtonClose": "סגירה", "SettingsButtonOk": "אישור", @@ -487,9 +493,10 @@ "DialogProfileDeleteProfileTitle": "מוחק פרופיל", "DialogProfileDeleteProfileMessage": "פעולה זו היא בלתי הפיכה, האם אתם בטוחים שברצונכם להמשיך?", "DialogWarning": "אזהרה", + "DialogCustomSettingsDeleteMessage": "אתה עומד למחוק הגדרות מותאמות אישית עבור:\n\n{0}\n\nהאם אתה בטוח שברצונך להמשיך?", "DialogPPTCDeletionMessage": "אם תמשיכו אתם עומדים לגרום לבנייה מחדש של מטמון ה-PPTC עבור:\n\n{0}", "DialogPPTCDeletionErrorMessage": "שגיאה בטיהור מטמון PPTC ב-{0}: {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "אתה עומד למחוק את כל נתוני PPTC מ:\n\n{0}\n\nהאם אתה בטוח שברצונך להמשיך?", "DialogShaderDeletionMessage": "אם תמשיכו אתם עומדים למחוק את מטמון ההצללות עבור:\n\n{0}", "DialogShaderDeletionErrorMessage": "שגיאה בניקוי מטמון ההצללות ב-{0}: {1}", "DialogRyujinxErrorMessage": "ריוג'ינקס נתקלה בשגיאה", @@ -528,7 +535,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "אנא הפסק את האמולציה או סגור את האמולטור לפני הפעלת משחק אחר.", "DialogUpdateAddUpdateErrorMessage": "הקובץ שצוין אינו מכיל עדכון עבור המשחק שנבחר!", "DialogSettingsBackendThreadingWarningTitle": "אזהרה - ריבוי תהליכי רקע", - "DialogSettingsBackendThreadingWarningMessage": "יש להפעיל מחדש את ריוג'ינקס לאחר שינוי אפשרות זו כדי שהיא תחול במלואה. בהתאם לפלטפורמה שלך, ייתכן שיהיה עליך להשבית ידנית את ריבוי ההליכים של ההתקן שלך בעת השימוש ב-ריוג'ינקס.", "DialogModManagerDeletionWarningMessage": "אתה עומד למחוק את המוד: {0}\nהאם אתה בטוח שאתה רוצה להמשיך?", "DialogModManagerDeletionAllWarningMessage": "אתה עומד למחוק את כל המודים בשביל משחק זה.\n\nהאם אתה בטוח שאתה רוצה להמשיך?", "SettingsTabGraphicsFeaturesOptions": "אפשרויות", diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Ryujinx/Assets/Locales/it_IT.json index 70be561a1..2e083f51d 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Ryujinx/Assets/Locales/it_IT.json @@ -70,6 +70,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "Apre la finestra di gestione aggiornamenti del gioco", "GameListContextMenuManageDlc": "Gestisci DLC", "GameListContextMenuManageDlcToolTip": "Apre la finestra di gestione dei DLC", + "GameListContextMenuManageCustomSettings": "Gestisci le impostazioni personalizzate", + "GameListContextMenuManageCustomSettingsToolTip": "Gestisci le impostazioni personalizzate per l'Applicazione selezionata", + "GameListContextMenuCustomSettingsOpen": "Apri Directory Impostazioni Personalizzate", + "GameListContextMenuCustomSettingsOpenToolTip": "Apri la directory che contiene le impostazioni personalizzate dell'Applicazione", "GameListContextMenuCacheManagement": "Gestione della cache", "GameListContextMenuCacheManagementPurgePptc": "Accoda rigenerazione della cache PPTC", "GameListContextMenuCacheManagementPurgePptcToolTip": "Esegue la rigenerazione della cache PPTC al prossimo avvio del gioco", @@ -195,11 +199,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8x", "SettingsTabGraphicsAnisotropicFiltering16x": "16x", "SettingsTabGraphicsResolutionScale": "Scala della risoluzione:", - "SettingsTabGraphicsResolutionScaleCustom": "Personalizzata (Non raccomandata)", - "SettingsTabGraphicsResolutionScaleNative": "Nativa (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (Non consigliato)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "Rapporto d'aspetto:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -230,8 +235,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "Tutto", "SettingsTabLoggingEnableDebugLogs": "Attiva log di debug", "SettingsTabInput": "Comandi", - "SettingsTabInputEnableDockedMode": "Attiva modalità TV", + "SettingsTabSystemEnableDockedMode": "Attiva modalità TV", "SettingsTabInputDirectKeyboardAccess": "Accesso diretto alla tastiera", + "SettingsButtonDelete": "Elimina", "SettingsButtonSave": "Salva", "SettingsButtonClose": "Chiudi", "SettingsButtonOk": "OK", @@ -515,10 +521,11 @@ "DialogProfileDeleteProfileTitle": "Eliminazione profilo", "DialogProfileDeleteProfileMessage": "Quest'azione è irreversibile, sei sicuro di voler continuare?", "DialogWarning": "Avviso", - "DialogPPTCDeletionMessage": "Stai per accodare la rigenerazione della cache PPTC al prossimo avvio per:\n\n{0}\n\nSei sicuro di voler proseguire?", + "DialogCustomSettingsDeleteMessage": "Stai per eliminare le impostazioni personalizzate per:\n\n{0}\n\nSei sicuro di voler procedere?", + "DialogPPTCDeletionMessage": "Stai per accodare la rigenerazione della cache PPTC al prossimo avvio per:\n\n{0}\n\nSei sicuro di voler procedere?", "DialogPPTCDeletionErrorMessage": "Errore nell'eliminazione della cache PPTC a {0}: {1}", - "DialogPPTCNukeMessage": "Stai per eliminare i tutti i dati della cache PPTC da:\n\n{0}\n\nSei sicuro di voler proseguire?", - "DialogShaderDeletionMessage": "Stai per eliminare la cache degli shader per:\n\n{0}\n\nSei sicuro di voler proseguire?", + "DialogPPTCNukeMessage": "Stai per eliminare tutti i dati PPTC da:\n\n{0}\n\nSei sicuro di voler procedere?", + "DialogShaderDeletionMessage": "Stai per eliminare la cache degli shader per:\n\n{0}\n\nSei sicuro di voler procedere?", "DialogShaderDeletionErrorMessage": "Errore nell'eliminazione della cache degli shader a {0}: {1}", "DialogRyujinxErrorMessage": "Ryujinx ha riscontrato un errore", "DialogInvalidTitleIdErrorMessage": "Errore UI: Il gioco selezionato non ha un ID titolo valido", @@ -556,7 +563,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Ferma l'emulazione o chiudi l'emulatore prima di avviare un altro gioco.", "DialogUpdateAddUpdateErrorMessage": "Il file specificato non contiene un aggiornamento per il titolo selezionato!", "DialogSettingsBackendThreadingWarningTitle": "Avviso - Backend Threading", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx deve essere riavviato dopo aver cambiato questa opzione per applicarla completamente. A seconda della tua piattaforma, potrebbe essere necessario disabilitare manualmente il multithreading del driver quando usi quello di Ryujinx.", "DialogModManagerDeletionWarningMessage": "Stai per eliminare la mod: {0}\n\nConfermi di voler procedere?", "DialogModManagerDeletionAllWarningMessage": "Stai per eliminare tutte le mod per questo titolo.\n\nVuoi davvero procedere?", "SettingsTabGraphicsFeaturesOptions": "Funzionalità", diff --git a/src/Ryujinx/Assets/Locales/ja_JP.json b/src/Ryujinx/Assets/Locales/ja_JP.json index 4a9fc950e..612a0d65b 100644 --- a/src/Ryujinx/Assets/Locales/ja_JP.json +++ b/src/Ryujinx/Assets/Locales/ja_JP.json @@ -66,6 +66,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "タイトルのアップデート管理ウインドウを開きます", "GameListContextMenuManageDlc": "DLCを管理", "GameListContextMenuManageDlcToolTip": "DLC管理ウインドウを開きます", + "GameListContextMenuManageCustomSettings": "カスタム設定ファイルを管理", + "GameListContextMenuManageCustomSettingsToolTip": "選択したアプリケーションのカスタム設定を管理します", + "GameListContextMenuCustomSettingsOpen": "カスタム設定ディレクトリを開く", + "GameListContextMenuCustomSettingsOpenToolTip": "アプリケーションのカスタム設定を含むディレクトリを開きます", "GameListContextMenuCacheManagement": "キャッシュ管理", "GameListContextMenuCacheManagementPurgePptc": "PPTC を再構築", "GameListContextMenuCacheManagementPurgePptcToolTip": "次回のゲーム起動時に PPTC を再構築します", @@ -172,11 +176,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8x", "SettingsTabGraphicsAnisotropicFiltering16x": "16x", "SettingsTabGraphicsResolutionScale": "解像度:", - "SettingsTabGraphicsResolutionScaleCustom": "カスタム (非推奨)", - "SettingsTabGraphicsResolutionScaleNative": "ネイティブ (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (非推奨)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "アスペクト比:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -207,8 +212,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "すべて", "SettingsTabLoggingEnableDebugLogs": "デバッグログを有効にする", "SettingsTabInput": "入力", - "SettingsTabInputEnableDockedMode": "ドッキングモード", + "SettingsTabSystemEnableDockedMode": "ドッキングモード", "SettingsTabInputDirectKeyboardAccess": "キーボード直接アクセス", + "SettingsButtonDelete": "削除", "SettingsButtonSave": "セーブ", "SettingsButtonClose": "閉じる", "SettingsButtonOk": "OK", @@ -487,9 +493,10 @@ "DialogProfileDeleteProfileTitle": "プロファイルを削除中", "DialogProfileDeleteProfileMessage": "このアクションは元に戻せません. 本当に続けてよろしいですか?", "DialogWarning": "警告", + "DialogCustomSettingsDeleteMessage": "次のカスタム設定を削除しようとしています:\n\n{0}\n\n続行してもよろしいですか?", "DialogPPTCDeletionMessage": "次回起動時に PPTC を再構築します:\n\n{0}\n\n実行してよろしいですか?", "DialogPPTCDeletionErrorMessage": "PPTC キャッシュ破棄エラー {0}: {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "次のすべてのPPTCデータを削除しようとしています:\n\n{0}\n\n続行してもよろしいですか?", "DialogShaderDeletionMessage": "シェーダーキャッシュを破棄しようとしています:\n\n{0}\n\n実行してよろしいですか?", "DialogShaderDeletionErrorMessage": "シェーダーキャッシュ破棄エラー {0}: {1}", "DialogRyujinxErrorMessage": "エラーが発生しました", @@ -528,7 +535,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "別のゲームを起動する前に, エミュレーションを中止またはエミュレータを閉じてください.", "DialogUpdateAddUpdateErrorMessage": "選択されたファイルはこのタイトル用のアップデートではありません!", "DialogSettingsBackendThreadingWarningTitle": "警告 - バックエンドスレッディング", - "DialogSettingsBackendThreadingWarningMessage": "このオプションの変更を完全に適用するには Ryujinx の再起動が必要です. プラットフォームによっては, Ryujinx のものを使用する前に手動でドライバ自身のマルチスレッディングを無効にする必要があるかもしれません.", "DialogModManagerDeletionWarningMessage": "以下のModを削除しようとしています: {0}\n\n続行してもよろしいですか?", "DialogModManagerDeletionAllWarningMessage": "このタイトルの Mod をすべて削除しようとしています.\n\n続行してもよろしいですか?", "SettingsTabGraphicsFeaturesOptions": "機能", diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index d3647d139..fc85f2776 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -68,6 +68,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "타이틀 업데이트 관리 창 열기", "GameListContextMenuManageDlc": "DLC 관리", "GameListContextMenuManageDlcToolTip": "DLC 관리 창 열기", + "GameListContextMenuManageCustomSettings": "사용자 지정 설정 파일 관리", + "GameListContextMenuManageCustomSettingsToolTip": "선택한 애플리케이션에 대한 사용자 지정 설정을 관리합니다", + "GameListContextMenuCustomSettingsOpen": "사용자 지정 설정 디렉토리 열기", + "GameListContextMenuCustomSettingsOpenToolTip": "애플리케이션의 사용자 지정 설정이 포함된 디렉토리를 엽니다", "GameListContextMenuCacheManagement": "캐시 관리", "GameListContextMenuCacheManagementPurgePptc": "대기열 PPTC 재구성", "GameListContextMenuCacheManagementPurgePptcToolTip": "다음 게임 시작에서 부팅 시 PPTC가 다시 빌드하도록 트리거", @@ -175,11 +179,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8배", "SettingsTabGraphicsAnisotropicFiltering16x": "16배", "SettingsTabGraphicsResolutionScale": "해상도 배율 :", - "SettingsTabGraphicsResolutionScaleCustom": "사용자 정의(권장하지 않음)", - "SettingsTabGraphicsResolutionScaleNative": "원본(720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2배(1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3배(2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (권장하지 않음)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "종횡비 :", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -210,8 +215,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "모두", "SettingsTabLoggingEnableDebugLogs": "디버그 로그 활성화", "SettingsTabInput": "입력", - "SettingsTabInputEnableDockedMode": "도킹 모드", + "SettingsTabSystemEnableDockedMode": "도킹 모드", "SettingsTabInputDirectKeyboardAccess": "직접 키보드 접속", + "SettingsButtonDelete": "삭제", "SettingsButtonSave": "저장", "SettingsButtonClose": "닫기", "SettingsButtonOk": "확인", @@ -490,9 +496,10 @@ "DialogProfileDeleteProfileTitle": "프로필 삭제", "DialogProfileDeleteProfileMessage": "이 작업은 되돌릴 수 없습니다. 계속하겠습니까?", "DialogWarning": "경고", + "DialogCustomSettingsDeleteMessage": "다음에 대한 사용자 지정 설정을 삭제하려고 합니다:\n\n{0}\n\n계속 진행하시겠습니까?", "DialogPPTCDeletionMessage": "다음 부팅 시, PPTC 재구축을 대기열에 추가 :\n\n{0}\n\n계속하겠습니까?", "DialogPPTCDeletionErrorMessage": "{0}에서 PPTC 캐시 삭제 오류 : {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "다음에서 모든 PPTC 데이터를 삭제하려고 합니다:\n\n{0}\n\n계속 진행하시겠습니까?", "DialogShaderDeletionMessage": "다음에 대한 셰이더 캐시 삭제 :\n\n{0}\n\n계속하겠습니까?", "DialogShaderDeletionErrorMessage": "{0}에서 셰이더 캐시 제거 오류 : {1}", "DialogRyujinxErrorMessage": "Ryujinx에 오류 발생", @@ -531,7 +538,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "다른 게임을 시작하기 전에 에뮬레이션을 중지하거나 에뮬레이터를 닫으세요.", "DialogUpdateAddUpdateErrorMessage": "지정된 파일에 선택한 제목에 대한 업데이트가 포함되어 있지 않습니다!", "DialogSettingsBackendThreadingWarningTitle": "경고 - 후단부 스레딩", - "DialogSettingsBackendThreadingWarningMessage": "변경 사항을 완전히 적용하려면 이 옵션을 변경한 후, Ryujinx를 다시 시작해야 합니다. 플랫폼에 따라 Ryujinx를 사용할 때 드라이버 자체의 멀티스레딩을 수동으로 비활성화해야 할 수도 있습니다.", "DialogModManagerDeletionWarningMessage": "해당 Mod를 삭제하려고 합니다: {0}\n\n정말로 삭제하시겠습니까?", "DialogModManagerDeletionAllWarningMessage": "해당 타이틀에 대한 모든 Mod들을 삭제하려고 합니다.\n\n정말로 삭제하시겠습니까?", "SettingsTabGraphicsFeaturesOptions": "기능", diff --git a/src/Ryujinx/Assets/Locales/pl_PL.json b/src/Ryujinx/Assets/Locales/pl_PL.json index 78a4e5f24..eb45eb84d 100644 --- a/src/Ryujinx/Assets/Locales/pl_PL.json +++ b/src/Ryujinx/Assets/Locales/pl_PL.json @@ -66,6 +66,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "Otwiera okno zarządzania aktualizacjami danej aplikacji", "GameListContextMenuManageDlc": "Zarządzaj dodatkową zawartością (DLC)", "GameListContextMenuManageDlcToolTip": "Otwiera okno zarządzania dodatkową zawartością", + "GameListContextMenuManageCustomSettings": "Zarządzaj Plikiem Ustawień Niestandardowych", + "GameListContextMenuManageCustomSettingsToolTip": "Zarządzaj ustawieniami niestandardowymi dla wybranej Aplikacji", + "GameListContextMenuCustomSettingsOpen": "Otwórz Katalog Ustawień Niestandardowych", + "GameListContextMenuCustomSettingsOpenToolTip": "Otwórz katalog zawierający ustawienia niestandardowe Aplikacji", "GameListContextMenuCacheManagement": "Zarządzanie Cache", "GameListContextMenuCacheManagementPurgePptc": "Zakolejkuj rekompilację PPTC", "GameListContextMenuCacheManagementPurgePptcToolTip": "Zainicjuj Rekompilację PPTC przy następnym uruchomieniu gry", @@ -172,11 +176,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8x", "SettingsTabGraphicsAnisotropicFiltering16x": "16x", "SettingsTabGraphicsResolutionScale": "Skalowanie rozdzielczości:", - "SettingsTabGraphicsResolutionScaleCustom": "Niestandardowa (Niezalecane)", - "SettingsTabGraphicsResolutionScaleNative": "Natywna (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (niezalecane)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "Format obrazu:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -207,8 +212,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "Wszystko", "SettingsTabLoggingEnableDebugLogs": "Włącz dzienniki zdarzeń do debugowania", "SettingsTabInput": "Sterowanie", - "SettingsTabInputEnableDockedMode": "Tryb zadokowany", + "SettingsTabSystemEnableDockedMode": "Tryb zadokowany", "SettingsTabInputDirectKeyboardAccess": "Bezpośredni dostęp do klawiatury", + "SettingsButtonDelete": "Usuń", "SettingsButtonSave": "Zapisz", "SettingsButtonClose": "Zamknij", "SettingsButtonOk": "OK", @@ -487,9 +493,10 @@ "DialogProfileDeleteProfileTitle": "Usuwanie Profilu", "DialogProfileDeleteProfileMessage": "Ta czynność jest nieodwracalna, czy na pewno chcesz kontynuować?", "DialogWarning": "Uwaga", + "DialogCustomSettingsDeleteMessage": "Zamierzasz usunąć ustawienia niestandardowe dla:\n\n{0}\n\nCzy na pewno chcesz kontynuować?", "DialogPPTCDeletionMessage": "Masz zamiar umieścić w kolejce rekompilację PPTC przy następnym uruchomieniu:\n\n{0}\n\nCzy na pewno chcesz kontynuować?", "DialogPPTCDeletionErrorMessage": "Błąd czyszczenia cache PPTC w {0}: {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "Zamierzasz usunąć wszystkie dane PPTC z:\n\n{0}\n\nCzy na pewno chcesz kontynuować?", "DialogShaderDeletionMessage": "Zamierzasz usunąć cache Shaderów dla :\n\n{0}\n\nNa pewno chcesz kontynuować?", "DialogShaderDeletionErrorMessage": "Błąd czyszczenia cache Shaderów w {0}: {1}", "DialogRyujinxErrorMessage": "Ryujinx napotkał błąd", @@ -528,7 +535,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Zatrzymaj emulację lub zamknij emulator przed uruchomieniem innej gry.", "DialogUpdateAddUpdateErrorMessage": "Określony plik nie zawiera aktualizacji dla wybranego tytułu!", "DialogSettingsBackendThreadingWarningTitle": "Ostrzeżenie — Wątki Backend", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx musi zostać ponownie uruchomiony po zmianie tej opcji, aby działał w pełni. W zależności od platformy może być konieczne ręczne wyłączenie sterownika wielowątkowości podczas korzystania z Ryujinx.", "DialogModManagerDeletionWarningMessage": "Zamierzasz usunąć modyfikacje: {0}\n\nCzy na pewno chcesz kontynuować?", "DialogModManagerDeletionAllWarningMessage": "Zamierzasz usunąć wszystkie modyfikacje dla wybranego tytułu: {0}\n\nCzy na pewno chcesz kontynuować?", "SettingsTabGraphicsFeaturesOptions": "Funkcje", diff --git a/src/Ryujinx/Assets/Locales/pt_BR.json b/src/Ryujinx/Assets/Locales/pt_BR.json index cd6ef41f8..7a540e05c 100644 --- a/src/Ryujinx/Assets/Locales/pt_BR.json +++ b/src/Ryujinx/Assets/Locales/pt_BR.json @@ -68,6 +68,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "Abre a janela de gerenciamento de atualizações", "GameListContextMenuManageDlc": "Gerenciar DLCs", "GameListContextMenuManageDlcToolTip": "Abre a janela de gerenciamento de DLCs", + "GameListContextMenuManageCustomSettings": "Gerenciar Arquivo de Configurações Personalizadas", + "GameListContextMenuManageCustomSettingsToolTip": "Gerenciar as configurações personalizadas para a Aplicação selecionada", + "GameListContextMenuCustomSettingsOpen": "Abrir Diretório de Configurações Personalizadas", + "GameListContextMenuCustomSettingsOpenToolTip": "Abrir o diretório que contém as configurações personalizadas da Aplicação", "GameListContextMenuCacheManagement": "Gerenciamento de cache", "GameListContextMenuCacheManagementPurgePptc": "Limpar cache PPTC", "GameListContextMenuCacheManagementPurgePptcToolTip": "Deleta o cache PPTC armazenado em disco do jogo", @@ -175,11 +179,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8x", "SettingsTabGraphicsAnisotropicFiltering16x": "16x", "SettingsTabGraphicsResolutionScale": "Escala de resolução:", - "SettingsTabGraphicsResolutionScaleCustom": "Customizada (não recomendado)", - "SettingsTabGraphicsResolutionScaleNative": "Nativa (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (não recomendado)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "Proporção:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -210,8 +215,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "Todos", "SettingsTabLoggingEnableDebugLogs": "Habilitar logs de depuração", "SettingsTabInput": "Controle", - "SettingsTabInputEnableDockedMode": "Habilitar modo TV", + "SettingsTabSystemEnableDockedMode": "Habilitar modo TV", "SettingsTabInputDirectKeyboardAccess": "Acesso direto ao teclado", + "SettingsButtonDelete": "Excluir", "SettingsButtonSave": "Salvar", "SettingsButtonClose": "Fechar", "SettingsButtonOk": "OK", @@ -490,9 +496,10 @@ "DialogProfileDeleteProfileTitle": "Apagando perfil", "DialogProfileDeleteProfileMessage": "Essa ação é irreversível, tem certeza que deseja continuar?", "DialogWarning": "Alerta", + "DialogCustomSettingsDeleteMessage": "Você está prestes a excluir as configurações personalizadas para:\n\n{0}\n\nTem certeza de que deseja continuar?", "DialogPPTCDeletionMessage": "Você está prestes a apagar o cache PPTC para :\n\n{0}\n\nTem certeza que deseja continuar?", "DialogPPTCDeletionErrorMessage": "Erro apagando cache PPTC em {0}: {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "Você está prestes a excluir todos os dados PPTC de:\n\n{0}\n\nTem certeza de que deseja continuar?", "DialogShaderDeletionMessage": "Você está prestes a apagar o cache de Shader para :\n\n{0}\n\nTem certeza que deseja continuar?", "DialogShaderDeletionErrorMessage": "Erro apagando o cache de Shader em {0}: {1}", "DialogRyujinxErrorMessage": "Ryujinx encontrou um erro", @@ -531,7 +538,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Por favor, pare a emulação ou feche o emulador antes de abrir outro jogo.", "DialogUpdateAddUpdateErrorMessage": "O arquivo especificado não contém atualizações para o título selecionado!", "DialogSettingsBackendThreadingWarningTitle": "Alerta - Threading da API gráfica", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx precisa ser reiniciado após mudar essa opção para que ela tenha efeito. Dependendo da sua plataforma, pode ser preciso desabilitar o multithreading do driver de vídeo quando usar o Ryujinx.", "DialogModManagerDeletionWarningMessage": "You are about to delete the mod: {0}\n\nAre you sure you want to proceed?", "DialogModManagerDeletionAllWarningMessage": "You are about to delete all mods for this title.\n\nAre you sure you want to proceed?", "SettingsTabGraphicsFeaturesOptions": "Recursos", diff --git a/src/Ryujinx/Assets/Locales/ru_RU.json b/src/Ryujinx/Assets/Locales/ru_RU.json index 82c6ce8a4..9ce08f585 100644 --- a/src/Ryujinx/Assets/Locales/ru_RU.json +++ b/src/Ryujinx/Assets/Locales/ru_RU.json @@ -70,6 +70,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "Открывает окно управления обновлениями приложения", "GameListContextMenuManageDlc": "Управление DLC", "GameListContextMenuManageDlcToolTip": "Открывает окно управления DLC", + "GameListContextMenuManageCustomSettings": "Управление файлом пользовательских настроек", + "GameListContextMenuManageCustomSettingsToolTip": "Управление пользовательскими настройками для выбранного приложения", + "GameListContextMenuCustomSettingsOpen": "Открыть каталог пользовательских настроек", + "GameListContextMenuCustomSettingsOpenToolTip": "Открыть каталог, содержащий пользовательские настройки приложения", "GameListContextMenuCacheManagement": "Управление кэшем", "GameListContextMenuCacheManagementPurgePptc": "Перестроить очередь PPTC", "GameListContextMenuCacheManagementPurgePptcToolTip": "Запускает перестройку PPTC во время следующего запуска игры.", @@ -194,11 +198,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8x", "SettingsTabGraphicsAnisotropicFiltering16x": "16x", "SettingsTabGraphicsResolutionScale": "Масштабирование:", - "SettingsTabGraphicsResolutionScaleCustom": "Пользовательское (не рекомендуется)", - "SettingsTabGraphicsResolutionScaleNative": "Нативное (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (не рекомендуется)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "Соотношение сторон:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -229,8 +234,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "Всё", "SettingsTabLoggingEnableDebugLogs": "Включить журнал отладки", "SettingsTabInput": "Управление", - "SettingsTabInputEnableDockedMode": "Стационарный режим", + "SettingsTabSystemEnableDockedMode": "Стационарный режим", "SettingsTabInputDirectKeyboardAccess": "Прямой ввод клавиатуры", + "SettingsButtonDelete": "Удалить", "SettingsButtonSave": "Сохранить", "SettingsButtonClose": "Закрыть", "SettingsButtonOk": "Ок", @@ -514,9 +520,10 @@ "DialogProfileDeleteProfileTitle": "Удаление профиля", "DialogProfileDeleteProfileMessage": "Это действие необратимо. Вы уверены, что хотите продолжить?", "DialogWarning": "Внимание", + "DialogCustomSettingsDeleteMessage": "Вы собираетесь удалить пользовательские настройки для:\n\n{0}\n\nВы уверены, что хотите продолжить?", "DialogPPTCDeletionMessage": "Вы собираетесь перестроить кэш PPTC при следующем запуске для:\n\n{0}\n\nВы уверены, что хотите продолжить?", "DialogPPTCDeletionErrorMessage": "Ошибка очистки кэша PPTC в {0}: {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "Вы собираетесь удалить все данные PPTC из:\n\n{0}\n\nВы уверены, что хотите продолжить?", "DialogShaderDeletionMessage": "Вы собираетесь удалить кэш шейдеров для:\n\n{0}\n\nВы уверены, что хотите продолжить?", "DialogShaderDeletionErrorMessage": "Ошибка очистки кэша шейдеров в {0}: {1}", "DialogRyujinxErrorMessage": "Ryujinx обнаружил ошибку", @@ -555,7 +562,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Пожалуйста, остановите эмуляцию или закройте эмулятор перед запуском другой игры.", "DialogUpdateAddUpdateErrorMessage": "Указанный файл не содержит обновлений для выбранного приложения", "DialogSettingsBackendThreadingWarningTitle": "Предупреждение: многопоточность в бэкенде", - "DialogSettingsBackendThreadingWarningMessage": "Для применения этой настройки необходимо перезапустить Ryujinx. В зависимости от используемой вами операционной системы вам может потребоваться вручную отключить многопоточность драйвера при использовании Ryujinx.", "DialogModManagerDeletionWarningMessage": "Вы сейчас удалите мод: {0}\n\nВы уверены, что хотите продолжить?", "DialogModManagerDeletionAllWarningMessage": "Вы сейчас удалите все выбранные моды для этой игры.\n\nВы уверены, что хотите продолжить?", "SettingsTabGraphicsFeaturesOptions": "Функции & Улучшения", diff --git a/src/Ryujinx/Assets/Locales/th_TH.json b/src/Ryujinx/Assets/Locales/th_TH.json index 72312be21..0630cb3f0 100644 --- a/src/Ryujinx/Assets/Locales/th_TH.json +++ b/src/Ryujinx/Assets/Locales/th_TH.json @@ -66,6 +66,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "เปิดหน้าต่างการจัดการการอัพเดตหัวข้อ", "GameListContextMenuManageDlc": "จัดการ DLC", "GameListContextMenuManageDlcToolTip": "เปิดหน้าต่างจัดการ DLC", + "GameListContextMenuManageCustomSettings": "จัดการไฟล์การตั้งค่าที่กำหนดเอง", + "GameListContextMenuManageCustomSettingsToolTip": "จัดการการตั้งค่าที่กำหนดเองสำหรับแอปพลิเคชันที่เลือก", + "GameListContextMenuCustomSettingsOpen": "เปิดไดเรกทอรีการตั้งค่าที่กำหนดเอง", + "GameListContextMenuCustomSettingsOpenToolTip": "เปิดไดเรกทอรีที่มีการตั้งค่าที่กำหนดเองของแอปพลิเคชัน", "GameListContextMenuCacheManagement": "จัดการ แคช", "GameListContextMenuCacheManagementPurgePptc": "เพิ่มเข้าคิวงาน PPTC ที่สร้างใหม่", "GameListContextMenuCacheManagementPurgePptcToolTip": "ทริกเกอร์ PPTC ให้สร้างใหม่ในเวลาบูตเมื่อเปิดตัวเกมครั้งถัดไป", @@ -172,11 +176,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8x", "SettingsTabGraphicsAnisotropicFiltering16x": "16x", "SettingsTabGraphicsResolutionScale": "อัตราส่วนความละเอียด:", - "SettingsTabGraphicsResolutionScaleCustom": "กำหนดเอง (ไม่แนะนำ)", - "SettingsTabGraphicsResolutionScaleNative": "พื้นฐานของระบบ (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (ไม่แนะนำ)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "อัตราส่วนภาพ:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -207,8 +212,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "ทั้งหมด", "SettingsTabLoggingEnableDebugLogs": "เปิดใช้งาน ประวัติแก้ไขข้อบกพร่อง", "SettingsTabInput": "ป้อนข้อมูล", - "SettingsTabInputEnableDockedMode": "ด็อกโหมด", + "SettingsTabSystemEnableDockedMode": "ด็อกโหมด", "SettingsTabInputDirectKeyboardAccess": "เข้าถึงคีย์บอร์ดโดยตรง", + "SettingsButtonDelete": "ลบ", "SettingsButtonSave": "บันทึก", "SettingsButtonClose": "ปิด", "SettingsButtonOk": "ตกลง", @@ -487,9 +493,10 @@ "DialogProfileDeleteProfileTitle": "กำลังลบโปรไฟล์", "DialogProfileDeleteProfileMessage": "การดำเนินการนี้ไม่สามารถย้อนกลับได้ คุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อหรือไม่?", "DialogWarning": "คำเตือน", + "DialogCustomSettingsDeleteMessage": "คุณกำลังจะลบการตั้งค่าที่กำหนดเองสำหรับ:\n\n{0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?", "DialogPPTCDeletionMessage": "คุณกำลังจะจัดคิวการสร้าง PPTC ใหม่ในการบูตครั้งถัดไป:\n\n{0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อหรือไม่?", "DialogPPTCDeletionErrorMessage": "มีข้อผิดพลาดในการล้างแคช PPTC {0}: {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "คุณกำลังจะลบข้อมูล PPTC ทั้งหมดจาก:\n\n{0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?", "DialogShaderDeletionMessage": "คุณกำลังจะลบ เชเดอร์แคช:\n\n{0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อหรือไม่?", "DialogShaderDeletionErrorMessage": "เกิดข้อผิดพลาดในการล้าง เชเดอร์แคช {0}: {1}", "DialogRyujinxErrorMessage": "รียูจินซ์ พบข้อผิดพลาด", @@ -528,7 +535,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "โปรดหยุดการจำลอง หรือปิดโปรแกรมจำลองก่อนที่จะเปิดเกมอื่น", "DialogUpdateAddUpdateErrorMessage": "ไฟล์ที่ระบุไม่มีการอัพเดตสำหรับชื่อเรื่องที่เลือก!", "DialogSettingsBackendThreadingWarningTitle": "คำเตือน - การทำเธรดแบ็กเอนด์", - "DialogSettingsBackendThreadingWarningMessage": "รียูจินซ์ ต้องรีสตาร์ทหลังจากเปลี่ยนตัวเลือกนี้จึงจะใช้งานได้อย่างสมบูรณ์ คุณอาจต้องปิดการใช้งาน มัลติเธรด ของไดรเวอร์ของคุณด้วยตนเองเมื่อใช้ รียูจินซ์ ทั้งนี้ขึ้นอยู่กับแพลตฟอร์มของคุณ", "DialogModManagerDeletionWarningMessage": "คุณกำลังจะลบ ม็อด: {0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?", "DialogModManagerDeletionAllWarningMessage": "คุณกำลังจะลบม็อดทั้งหมดสำหรับชื่อนี้\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?", "SettingsTabGraphicsFeaturesOptions": "คุณสมบัติ", diff --git a/src/Ryujinx/Assets/Locales/tr_TR.json b/src/Ryujinx/Assets/Locales/tr_TR.json index b7bedeadf..856759b3f 100644 --- a/src/Ryujinx/Assets/Locales/tr_TR.json +++ b/src/Ryujinx/Assets/Locales/tr_TR.json @@ -66,6 +66,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "Oyun Güncelleme Yönetim Penceresini Açar", "GameListContextMenuManageDlc": "DLC'leri Yönet", "GameListContextMenuManageDlcToolTip": "DLC yönetim penceresini açar", + "GameListContextMenuManageCustomSettings": "Özel Ayarlar Dosyasını Yönet", + "GameListContextMenuManageCustomSettingsToolTip": "Seçilen Uygulama için özel ayarları yönetin", + "GameListContextMenuCustomSettingsOpen": "Özel Ayarlar Dizinini Aç", + "GameListContextMenuCustomSettingsOpenToolTip": "Uygulamanın özel ayarlarını içeren dizini açın", "GameListContextMenuCacheManagement": "Önbellek Yönetimi", "GameListContextMenuCacheManagementPurgePptc": "PPTC Yeniden Yapılandırmasını Başlat", "GameListContextMenuCacheManagementPurgePptcToolTip": "Oyunun bir sonraki açılışında PPTC'yi yeniden yapılandır", @@ -172,11 +176,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8x", "SettingsTabGraphicsAnisotropicFiltering16x": "16x", "SettingsTabGraphicsResolutionScale": "Çözünürlük Ölçeği:", - "SettingsTabGraphicsResolutionScaleCustom": "Özel (Tavsiye Edilmez)", - "SettingsTabGraphicsResolutionScaleNative": "Yerel (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (Tavsiye Edilmez)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "En-Boy Oranı:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -207,8 +212,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "Hepsi", "SettingsTabLoggingEnableDebugLogs": "Hata Ayıklama Loglarını Etkinleştir", "SettingsTabInput": "Giriş Yöntemi", - "SettingsTabInputEnableDockedMode": "Docked Modu Etkinleştir", + "SettingsTabSystemEnableDockedMode": "Docked Modu Etkinleştir", "SettingsTabInputDirectKeyboardAccess": "Doğrudan Klavye Erişimi", + "SettingsButtonDelete": "Sil", "SettingsButtonSave": "Kaydet", "SettingsButtonClose": "Kapat", "SettingsButtonOk": "Tamam", @@ -487,9 +493,10 @@ "DialogProfileDeleteProfileTitle": "Profil Siliniyor", "DialogProfileDeleteProfileMessage": "Bu eylem geri döndürülemez, devam etmek istediğinizden emin misiniz?", "DialogWarning": "Uyarı", + "DialogCustomSettingsDeleteMessage": "Şunun için özel ayarları silmek üzeresiniz:\n\n{0}\n\nDevam etmek istediğinizden emin misiniz?", "DialogPPTCDeletionMessage": "Belirtilen PPTC cache silinecek :\n\n{0}\n\nDevam etmek istediğinizden emin misiniz?", "DialogPPTCDeletionErrorMessage": "Belirtilen PPTC cache temizlenirken hata {0}: {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "Şuradan tüm PPTC verilerini silmek üzeresiniz:\n\n{0}\n\nDevam etmek istediğinizden emin misiniz?", "DialogShaderDeletionMessage": "Belirtilen Shader cache silinecek :\n\n{0}\n\nDevam etmek istediğinizden emin misiniz?", "DialogShaderDeletionErrorMessage": "Belirtilen Shader cache temizlenirken hata {0}: {1}", "DialogRyujinxErrorMessage": "Ryujinx bir hata ile karşılaştı", @@ -528,7 +535,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Lütfen yeni bir oyun açmadan önce emülasyonu durdurun veya emülatörü kapatın.", "DialogUpdateAddUpdateErrorMessage": "Belirtilen dosya seçilen oyun için güncelleme içermiyor!", "DialogSettingsBackendThreadingWarningTitle": "Uyarı - Backend Threading", - "DialogSettingsBackendThreadingWarningMessage": "Bu seçeneğin tamamen uygulanması için Ryujinx'in kapatıp açılması gerekir. Kullandığınız işletim sistemine bağlı olarak, Ryujinx'in multithreading'ini kullanırken driver'ınızın multithreading seçeneğini kapatmanız gerekebilir.", "DialogModManagerDeletionWarningMessage": "You are about to delete the mod: {0}\n\nAre you sure you want to proceed?", "DialogModManagerDeletionAllWarningMessage": "You are about to delete all mods for this title.\n\nAre you sure you want to proceed?", "SettingsTabGraphicsFeaturesOptions": "Özellikler", diff --git a/src/Ryujinx/Assets/Locales/uk_UA.json b/src/Ryujinx/Assets/Locales/uk_UA.json index 0af1a1fb3..0f924472d 100644 --- a/src/Ryujinx/Assets/Locales/uk_UA.json +++ b/src/Ryujinx/Assets/Locales/uk_UA.json @@ -68,6 +68,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "Відкриває вікно керування оновленням заголовка", "GameListContextMenuManageDlc": "Керування DLC", "GameListContextMenuManageDlcToolTip": "Відкриває вікно керування DLC", + "GameListContextMenuManageCustomSettings": "Керувати файлом користувацьких налаштувань", + "GameListContextMenuManageCustomSettingsToolTip": "Керувати користувацькими налаштуваннями для вибраного застосунку", + "GameListContextMenuCustomSettingsOpen": "Відкрити каталог користувацьких налаштувань", + "GameListContextMenuCustomSettingsOpenToolTip": "Відкрити каталог, що містить користувацькі налаштування застосунку", "GameListContextMenuCacheManagement": "Керування кешем", "GameListContextMenuCacheManagementPurgePptc": "Очистити кеш PPTC", "GameListContextMenuCacheManagementPurgePptcToolTip": "Видаляє кеш PPTC програми", @@ -175,11 +179,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8x", "SettingsTabGraphicsAnisotropicFiltering16x": "16x", "SettingsTabGraphicsResolutionScale": "Роздільна здатність:", - "SettingsTabGraphicsResolutionScaleCustom": "Користувацька (не рекомендовано)", - "SettingsTabGraphicsResolutionScaleNative": "Стандартний (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2x (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3x (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (Не рекомендується)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "Співвідношення сторін:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -210,8 +215,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "Все", "SettingsTabLoggingEnableDebugLogs": "Увімкнути журнали налагодження", "SettingsTabInput": "Введення", - "SettingsTabInputEnableDockedMode": "Режим док-станції", + "SettingsTabSystemEnableDockedMode": "Режим док-станції", "SettingsTabInputDirectKeyboardAccess": "Прямий доступ з клавіатури", + "SettingsButtonDelete": "Видалити", "SettingsButtonSave": "Зберегти", "SettingsButtonClose": "Закрити", "SettingsButtonOk": "Гаразд", @@ -490,9 +496,10 @@ "DialogProfileDeleteProfileTitle": "Видалення профілю", "DialogProfileDeleteProfileMessage": "Цю дію неможливо скасувати. Ви впевнені, що бажаєте продовжити?", "DialogWarning": "Увага", + "DialogCustomSettingsDeleteMessage": "Ви збираєтеся видалити користувацькі налаштування для:\n\n{0}\n\nВи впевнені, що хочете продовжити?", "DialogPPTCDeletionMessage": "Ви збираєтеся видалити кеш PPTC для:\n\n{0}\n\nВи впевнені, що бажаєте продовжити?", "DialogPPTCDeletionErrorMessage": "Помилка очищення кешу PPTC на {0}: {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "Ви збираєтеся видалити всі дані PPTC з:\n\n{0}\n\nВи впевнені, що хочете продовжити?", "DialogShaderDeletionMessage": "Ви збираєтеся видалити кеш шейдерів для:\n\n{0}\n\nВи впевнені, що бажаєте продовжити?", "DialogShaderDeletionErrorMessage": "Помилка очищення кешу шейдерів на {0}: {1}", "DialogRyujinxErrorMessage": "У Ryujinx сталася помилка", @@ -531,7 +538,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Зупиніть емуляцію або закрийте емулятор перед запуском іншої гри.", "DialogUpdateAddUpdateErrorMessage": "Зазначений файл не містить оновлення для вибраного заголовка!", "DialogSettingsBackendThreadingWarningTitle": "Попередження - потокове керування сервером", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx потрібно перезапустити після зміни цього параметра, щоб він застосовувався повністю. Залежно від вашої платформи вам може знадобитися вручну вимкнути власну багатопотоковість драйвера під час використання Ryujinx.", "DialogModManagerDeletionWarningMessage": "Ви збираєтесь видалити модифікацію: {0}\n\nВи дійсно бажаєте продовжити?", "DialogModManagerDeletionAllWarningMessage": "Ви збираєтесь видалити всі модифікації для цього Додатка.\n\nВи дійсно бажаєте продовжити?", "SettingsTabGraphicsFeaturesOptions": "Особливості", diff --git a/src/Ryujinx/Assets/Locales/zh_CN.json b/src/Ryujinx/Assets/Locales/zh_CN.json index f2737e77d..c0443a270 100644 --- a/src/Ryujinx/Assets/Locales/zh_CN.json +++ b/src/Ryujinx/Assets/Locales/zh_CN.json @@ -68,6 +68,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "打开游戏更新管理窗口", "GameListContextMenuManageDlc": "管理 DLC", "GameListContextMenuManageDlcToolTip": "打开 DLC 管理窗口", + "GameListContextMenuManageCustomSettings": "管理自定义设置文件", + "GameListContextMenuManageCustomSettingsToolTip": "管理所选应用程序的自定义设置", + "GameListContextMenuCustomSettingsOpen": "打开自定义设置目录", + "GameListContextMenuCustomSettingsOpenToolTip": "打开包含应用程序自定义设置的目录", "GameListContextMenuCacheManagement": "缓存管理", "GameListContextMenuCacheManagementPurgePptc": "清除 PPTC 缓存文件", "GameListContextMenuCacheManagementPurgePptcToolTip": "删除游戏的 PPTC 缓存文件,下次启动游戏时重新编译生成 PPTC 缓存文件", @@ -175,11 +179,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8x", "SettingsTabGraphicsAnisotropicFiltering16x": "16x", "SettingsTabGraphicsResolutionScale": "分辨率缩放:", - "SettingsTabGraphicsResolutionScaleCustom": "自定义(不推荐)", - "SettingsTabGraphicsResolutionScaleNative": "原生 (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2 倍 (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3 倍 (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4 倍 (2880p/4320p) (不推荐)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "宽高比:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -210,8 +215,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "全部", "SettingsTabLoggingEnableDebugLogs": "启用调试日志", "SettingsTabInput": "输入", - "SettingsTabInputEnableDockedMode": "主机模式", + "SettingsTabSystemEnableDockedMode": "主机模式", "SettingsTabInputDirectKeyboardAccess": "直通键盘控制", + "SettingsButtonDelete": "删除", "SettingsButtonSave": "保存", "SettingsButtonClose": "关闭", "SettingsButtonOk": "确定", @@ -490,9 +496,10 @@ "DialogProfileDeleteProfileTitle": "删除配置文件", "DialogProfileDeleteProfileMessage": "删除后不可恢复,确认删除吗?", "DialogWarning": "警告", + "DialogCustomSettingsDeleteMessage": "您即将删除以下项目的自定义设置:\n\n{0}\n\n您确定要继续吗?", "DialogPPTCDeletionMessage": "您即将删除:\n\n{0} 的 PPTC 缓存文件\n\n确定吗?", "DialogPPTCDeletionErrorMessage": "清除 {0} 的 PPTC 缓存文件时出错:{1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "您即将清除以下项目的所有 PPTC 数据:\n\n{0}\n\n您确定要继续吗?", "DialogShaderDeletionMessage": "您即将删除:\n\n{0} 的着色器缓存文件\n\n确定吗?", "DialogShaderDeletionErrorMessage": "清除 {0} 的着色器缓存文件时出错:{1}", "DialogRyujinxErrorMessage": "Ryujinx 模拟器发生错误", @@ -531,7 +538,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "请停止模拟或关闭模拟器,再启动另一个游戏。", "DialogUpdateAddUpdateErrorMessage": "选择的文件不是当前游戏的更新!", "DialogSettingsBackendThreadingWarningTitle": "警告 - 图形引擎多线程", - "DialogSettingsBackendThreadingWarningMessage": "更改此选项后,必须重启 Ryujinx 模拟器才能生效。\n\n当启用图形引擎多线程时,根据显卡不同,您可能需要手动禁用显卡驱动程序自身的多线程(线程优化)。", "DialogModManagerDeletionWarningMessage": "您即将删除 MOD:{0} \n\n确定吗?", "DialogModManagerDeletionAllWarningMessage": "您即将删除该游戏的所有 MOD,\n\n确定吗?", "SettingsTabGraphicsFeaturesOptions": "功能", diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Ryujinx/Assets/Locales/zh_TW.json index 42b69100a..0a5a6c297 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Ryujinx/Assets/Locales/zh_TW.json @@ -68,6 +68,10 @@ "GameListContextMenuManageTitleUpdatesToolTip": "開啟遊戲更新管理視窗", "GameListContextMenuManageDlc": "管理 DLC", "GameListContextMenuManageDlcToolTip": "開啟 DLC 管理視窗", + "GameListContextMenuManageCustomSettings": "管理自訂設定檔案", + "GameListContextMenuManageCustomSettingsToolTip": "管理所選應用程式的自訂設定", + "GameListContextMenuCustomSettingsOpen": "開啟自訂設定目錄", + "GameListContextMenuCustomSettingsOpenToolTip": "開啟包含應用程式自訂設定的目錄", "GameListContextMenuCacheManagement": "快取管理", "GameListContextMenuCacheManagementPurgePptc": "佇列 PPTC 重建", "GameListContextMenuCacheManagementPurgePptcToolTip": "下一次啟動遊戲時,觸發 PPTC 進行重建", @@ -175,11 +179,12 @@ "SettingsTabGraphicsAnisotropicFiltering8x": "8 倍", "SettingsTabGraphicsAnisotropicFiltering16x": "16 倍", "SettingsTabGraphicsResolutionScale": "解析度比例:", - "SettingsTabGraphicsResolutionScaleCustom": "自訂 (不建議使用)", - "SettingsTabGraphicsResolutionScaleNative": "原生 (720p/1080p)", - "SettingsTabGraphicsResolutionScale2x": "2 倍 (1440p/2160p)", - "SettingsTabGraphicsResolutionScale3x": "3 倍 (2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4 倍 (2880p/4320p) (不建議使用)", + "SettingsTabGraphicsResolutionScale05x": "0.5x (360p/540p)", + "SettingsTabGraphicsResolutionScale075x": "0.75x (540p/810p)", + "SettingsTabGraphicsResolutionScale10x": "1.0x (720p/1080p)", + "SettingsTabGraphicsResolutionScale20x": "2.0x (1440p/2160p)", + "SettingsTabGraphicsResolutionScale30x": "3.0x (2160p/3240p)", + "SettingsTabGraphicsResolutionScale40x": "4.0x (2880p/4320p)", "SettingsTabGraphicsAspectRatio": "顯示長寬比例:", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", @@ -210,8 +215,9 @@ "SettingsTabLoggingGraphicsBackendLogLevelAll": "全部", "SettingsTabLoggingEnableDebugLogs": "啟用偵錯日誌", "SettingsTabInput": "輸入", - "SettingsTabInputEnableDockedMode": "底座模式", + "SettingsTabSystemEnableDockedMode": "底座模式", "SettingsTabInputDirectKeyboardAccess": "鍵盤直接存取", + "SettingsButtonDelete": "刪除", "SettingsButtonSave": "儲存", "SettingsButtonClose": "關閉", "SettingsButtonOk": "確定", @@ -490,9 +496,10 @@ "DialogProfileDeleteProfileTitle": "刪除設定檔", "DialogProfileDeleteProfileMessage": "此動作不可復原,您確定要繼續嗎?", "DialogWarning": "警告", + "DialogCustomSettingsDeleteMessage": "您即將刪除以下項目的自訂設定:\n\n{0}\n\n您確定要繼續嗎?", "DialogPPTCDeletionMessage": "您將在下一次啟動時佇列重建以下遊戲的 PPTC:\n\n{0}\n\n您確定要繼續嗎?", "DialogPPTCDeletionErrorMessage": "在 {0} 清除 PPTC 快取時出錯: {1}", - "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "DialogPPTCNukeMessage": "您即將清除以下項目的所有 PPTC 資料:\n\n{0}\n\n您確定要繼續嗎?", "DialogShaderDeletionMessage": "您將刪除以下遊戲的著色器快取:\n\n{0}\n\n您確定要繼續嗎?", "DialogShaderDeletionErrorMessage": "在 {0} 清除著色器快取時出錯: {1}", "DialogRyujinxErrorMessage": "Ryujinx 遇到錯誤", @@ -531,7 +538,6 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "請停止模擬或關閉模擬器,然後再啟動另一款遊戲。", "DialogUpdateAddUpdateErrorMessage": "指定檔案不包含所選遊戲的更新!", "DialogSettingsBackendThreadingWarningTitle": "警告 - 後端執行緒處理中", - "DialogSettingsBackendThreadingWarningMessage": "變更此選項後,必須重新啟動 Ryujinx 才能完全生效。使用 Ryujinx 的多執行緒功能時,可能需要手動停用驅動程式本身的多執行緒功能,這取決於您的平台。", "DialogModManagerDeletionWarningMessage": "您將刪除模組: {0}\n\n您確定要繼續嗎?", "DialogModManagerDeletionAllWarningMessage": "您即將刪除此遊戲的所有模組。\n\n您確定要繼續嗎?", "SettingsTabGraphicsFeaturesOptions": "功能", diff --git a/src/Ryujinx/Headless/Options.cs b/src/Ryujinx/Headless/Options.cs index 28eec3f07..7282caea5 100644 --- a/src/Ryujinx/Headless/Options.cs +++ b/src/Ryujinx/Headless/Options.cs @@ -28,7 +28,7 @@ namespace Ryujinx.Headless HideCursorMode = configurationState.HideCursor; if (NeedsOverride(nameof(DisablePTC))) - DisablePTC = !configurationState.System.EnablePtc; + DisablePTC = !configurationState.System.EnablePptc; if (NeedsOverride(nameof(EnableInternetAccess))) EnableInternetAccess = configurationState.System.EnableInternetAccess; diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index f2f144b28..d7df7b621 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -168,4 +168,15 @@ + + + CustomSettingsSystemView.axaml + + + CustomSettingsGraphicsView.axaml + + + CustomSettingsWindow.axaml + + diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml index c0d02d176..6ef6232da 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml @@ -42,6 +42,10 @@ Click="OpenDownloadableContentManager_Click" Header="{locale:Locale GameListContextMenuManageDlc}" ToolTip.Tip="{locale:Locale GameListContextMenuManageDlcToolTip}" /> + + _gpuIds = []; + + private int ComputePreferredGpuIndex(string PreferredGpu) + { + return _gpuIds.Contains(PreferredGpu) ? _gpuIds.IndexOf(PreferredGpu) : 0; + } + + private string ComputePreferredGpu(int PreferredGpuIndex) + { + return _gpuIds.ElementAtOrDefault(PreferredGpuIndex); + } + + private int ComputeResScaleIndex(float ResScale) + { + if (ResScale <= 0.5f) + { + return 0; + } + else if (ResScale <= 0.75f) + { + return 1; + } + else + { + return (int)Math.Ceiling(ResScale) + 1; + } + } + + private float ComputeResScale(int ResScaleIndex) + { + switch (ResScaleIndex) + { + case 0: + return 0.5f; + case 1: + return 0.75f; + case 2: + return 1.0f; + case 3: + return 2.0f; + case 4: + return 3.0f; + case 5: + return 4.0f; + default: + return 1.0f; + } + } + + private int ComputeMaxAnisotropyIndex(float MaxAnisotropy) + { + return MaxAnisotropy == -1.0f ? 0 : (int)(MathF.Log2(MaxAnisotropy)); + } + + private float ComputeMaxAnisotropy(int MaxAnisotropyIndex) + { + switch (MaxAnisotropyIndex) + { + case 0: + return -1.0f; + case 1: + return 2.0f; + case 2: + return 4.0f; + case 3: + return 8.0f; + case 4: + return 16.0f; + default: + return 2.0f; + } + } + + public bool IsMacOS => OperatingSystem.IsMacOS(); + public bool IsOpenGLAvailable => !OperatingSystem.IsMacOS(); + public bool IsHypervisorAvailable => OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64; + public ulong ApplicationIdBase { get; set; } + public string ApplicationName { get; set; } + public Bitmap GameIcon { get; set; } + public ObservableCollection AvailableGpus { get; set; } + public CustomSettingsModel CustomSettingsModel { get; set; } + public event Action CloseWindow; + + // System settings + public bool EnableDockedMode { get; set; } + public int SystemLanguage { get; set; } + public int SystemRegion { get; set; } + public int DramSize { get; set; } + public bool EnableFsIntegrityChecks { get; set; } + public bool IgnoreMissingServices { get; set; } + public bool EnablePptc { get; set; } + public bool EnableLowPowerPptc { get; set; } + public int MemoryManagerMode { get; set; } + public bool UseHypervisor { get; set; } + + // Graphics settings + public int VSyncMode { get; set; } + public int GraphicsBackend { get; set; } + public int PreferredGpuIndex { get; set; } + public bool EnableShaderCache { get; set; } + public bool EnableTextureRecompression { get; set; } + public bool EnableMacroHLE { get; set; } + public bool EnableColorSpacePassthrough { get; set; } + public bool ColorSpacePassthroughAvailable => IsMacOS; + public int ResScaleIndex { get; set; } + public int MaxAnisotropyIndex { get; set; } + public int BackendThreading { get; set; } + + public CustomSettingsViewModel(string titleId, byte[] icon, string titleName) + { + AvailableGpus = []; + ApplicationIdBase = ulong.Parse(titleId, NumberStyles.HexNumber); + CustomSettingsModel = CustomSettingsHelper.LoadCustomSettingsJson(CustomSettingsHelper.PathToGameSettingsJson(ApplicationIdBase)); + + if (icon is { Length: > 0 }) + { + using MemoryStream ms = new(icon); + GameIcon = new Bitmap(ms); + } + + if (Program.PreviewerDetached) + { + Task.Run(LoadAvailableGpus); + LoadCurrentConfiguration(); + } + } + + private async Task LoadAvailableGpus() + { + AvailableGpus.Clear(); + + var devices = VulkanRenderer.GetPhysicalDevices(); + + if (devices.Length == 0) + { + IsVulkanAvailable = false; + GraphicsBackend = 1; + } + else + { + foreach (var device in devices) + { + await Dispatcher.UIThread.InvokeAsync(() => + { + _gpuIds.Add(device.Id); + + AvailableGpus.Add(new ComboBoxItem { Content = $"{device.Name} {(device.IsDiscrete ? "(dGPU)" : "")}" }); + }); + } + } + + // GPU configuration needs to be loaded during the async method or it will always return 0. + PreferredGpuIndex = ComputePreferredGpuIndex(ConfigurationState.Instance.Graphics.PreferredGpu.Value); + + Dispatcher.UIThread.Post(() => OnPropertyChanged(nameof(PreferredGpuIndex))); + } + public void LoadCurrentConfiguration() + { + ConfigurationState config = ConfigurationState.Instance; + + if (!CustomSettingsHelper.HasCustomSettings(CustomSettingsHelper.PathToGameSettingsJson(ApplicationIdBase))) + { + // Load all settings from global configuration + EnableDockedMode = config.System.EnableDockedMode.Value; + SystemLanguage = (int)config.System.Language.Value; + SystemRegion = (int)config.System.Region.Value; + VSyncMode = (int)config.Graphics.VSyncMode.Value; + DramSize = (int)config.System.DramSize.Value; + EnableFsIntegrityChecks = config.System.EnableFsIntegrityChecks.Value; + IgnoreMissingServices = config.System.IgnoreMissingServices.Value; + EnablePptc = config.System.EnablePptc.Value; + EnableLowPowerPptc = config.System.EnableLowPowerPptc.Value; + MemoryManagerMode = (int)config.System.MemoryManagerMode.Value; + UseHypervisor = config.System.UseHypervisor.Value; + GraphicsBackend = (int)config.Graphics.GraphicsBackend.Value; + PreferredGpuIndex = ComputePreferredGpuIndex(config.Graphics.PreferredGpu.Value); + EnableShaderCache = config.Graphics.EnableShaderCache.Value; + EnableTextureRecompression = config.Graphics.EnableTextureRecompression.Value; + EnableMacroHLE = config.Graphics.EnableMacroHLE.Value; + EnableColorSpacePassthrough = config.Graphics.EnableColorSpacePassthrough.Value; + ResScaleIndex = ComputeResScaleIndex(config.Graphics.ResScale); + MaxAnisotropyIndex = ComputeMaxAnisotropyIndex(config.Graphics.MaxAnisotropy); + BackendThreading = (int)config.Graphics.BackendThreading.Value; + } + else + { + // Load all settings from custom configuration + EnableDockedMode = CustomSettingsModel.EnableDockedMode; + SystemLanguage = CustomSettingsModel.SystemLanguage; + SystemRegion = CustomSettingsModel.SystemRegion; + VSyncMode = CustomSettingsModel.VSyncMode; + DramSize = CustomSettingsModel.DramSize; + EnableFsIntegrityChecks = CustomSettingsModel.EnableFsIntegrityChecks; + IgnoreMissingServices = CustomSettingsModel.IgnoreMissingServices; + EnablePptc = CustomSettingsModel.EnablePptc; + EnableLowPowerPptc = CustomSettingsModel.EnableLowPowerPptc; + MemoryManagerMode = CustomSettingsModel.MemoryManagerMode; + UseHypervisor = CustomSettingsModel.UseHypervisor; + GraphicsBackend = CustomSettingsModel.GraphicsBackend; + PreferredGpuIndex = ComputePreferredGpuIndex(CustomSettingsModel.PreferredGpu); + EnableShaderCache = CustomSettingsModel.EnableShaderCache; + EnableTextureRecompression = CustomSettingsModel.EnableTextureRecompression; + EnableMacroHLE = CustomSettingsModel.EnableMacroHLE; + EnableColorSpacePassthrough = CustomSettingsModel.EnableColorSpacePassthrough; + ResScaleIndex = ComputeResScaleIndex(CustomSettingsModel.ResScale); + MaxAnisotropyIndex = ComputeMaxAnisotropyIndex(CustomSettingsModel.MaxAnisotropy); + BackendThreading = CustomSettingsModel.BackendThreading; + } + } + + public void DeleteSettings() + { + if (CustomSettingsHelper.HasCustomSettings(CustomSettingsHelper.PathToGameSettingsJson(ApplicationIdBase))) + { + CustomSettingsHelper.DeleteCustomSettings(CustomSettingsHelper.PathToGameSettingsJson(ApplicationIdBase)); + } + } + + public void SaveSettings() + { + CustomSettingsModel.HasCustomSettings = true; + CustomSettingsModel.EnableDockedMode = EnableDockedMode; + CustomSettingsModel.SystemLanguage = SystemLanguage; + CustomSettingsModel.SystemRegion = SystemRegion; + CustomSettingsModel.VSyncMode = VSyncMode; + CustomSettingsModel.DramSize = DramSize; + CustomSettingsModel.EnableFsIntegrityChecks = EnableFsIntegrityChecks; + CustomSettingsModel.IgnoreMissingServices = IgnoreMissingServices; + CustomSettingsModel.EnablePptc = EnablePptc; + CustomSettingsModel.EnableLowPowerPptc = EnableLowPowerPptc; + CustomSettingsModel.MemoryManagerMode = MemoryManagerMode; + CustomSettingsModel.UseHypervisor = UseHypervisor; + CustomSettingsModel.GraphicsBackend = GraphicsBackend; + CustomSettingsModel.PreferredGpu = ComputePreferredGpu(PreferredGpuIndex); + CustomSettingsModel.EnableShaderCache = EnableShaderCache; + CustomSettingsModel.EnableTextureRecompression = EnableTextureRecompression; + CustomSettingsModel.EnableMacroHLE = EnableMacroHLE; + CustomSettingsModel.ResScale = ComputeResScale(ResScaleIndex); + CustomSettingsModel.MaxAnisotropy = ComputeMaxAnisotropy(MaxAnisotropyIndex); + CustomSettingsModel.BackendThreading = BackendThreading; + CustomSettingsHelper.SaveCustomSettingsJson(CustomSettingsHelper.PathToGameSettingsJson(ApplicationIdBase), CustomSettingsModel); + } + + public async void DeleteButton() + { + UserResult result = await ContentDialogHelper.CreateLocalizedConfirmationDialog( + LocaleManager.Instance[LocaleKeys.DialogWarning], + LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogCustomSettingsDeleteMessage, ApplicationName) + ); + + if (result == UserResult.Yes) + { + DeleteSettings(); + CloseWindow?.Invoke(); + } + } + + public void CancelButton() + { + CloseWindow?.Invoke(); + } + + public void SaveButton() + { + SaveSettings(); + CloseWindow?.Invoke(); + } + } +} diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 2a40470f0..41bfa8483 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -20,6 +20,7 @@ using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS.Services.Time.TimeZone; +using Ryujinx.HLE.HOS.SystemState; using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Configuration.System; using System; @@ -47,8 +48,6 @@ namespace Ryujinx.Ava.UI.ViewModels private readonly Dictionary _networkInterfaces; - private int _resolutionScale; - [ObservableProperty] private bool _isVulkanAvailable = true; @@ -69,51 +68,79 @@ namespace Ryujinx.Ava.UI.ViewModels private bool _enableGDBStub; - public int ResolutionScale + private int ComputePreferredGpuIndex(string PreferredGpu) { - get => _resolutionScale; - set - { - _resolutionScale = value; + return _gpuIds.Contains(PreferredGpu) ? _gpuIds.IndexOf(PreferredGpu) : 0; + } - OnPropertyChanged(nameof(CustomResolutionScale)); - OnPropertyChanged(nameof(IsCustomResolutionScaleActive)); + private string ComputePreferredGpu(int PreferredGpuIndex) + { + return _gpuIds.ElementAtOrDefault((int)PreferredGpuIndex); + } + + private int ComputeResScaleIndex(float ResScale) + { + if (ResScale <= 0.5f) + { + return 0; + } + else if (ResScale <= 0.75f) + { + return 1; + } + else + { + return (int)Math.Ceiling(ResScale) + 1; } } - public int GraphicsBackendMultithreadingIndex + private float ComputeResScale(int ResScaleIndex) { - get; - set + switch (ResScaleIndex) { - field = value; - - if (field != (int)ConfigurationState.Instance.Graphics.BackendThreading.Value) - { - Dispatcher.UIThread.InvokeAsync(() => - ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogSettingsBackendThreadingWarningMessage], - "", - "", - LocaleManager.Instance[LocaleKeys.InputDialogOk], - LocaleManager.Instance[LocaleKeys.DialogSettingsBackendThreadingWarningTitle]) - ); - } - - OnPropertyChanged(); + case 0: + return 0.5f; + case 1: + return 0.75f; + case 2: + return 1.0f; + case 3: + return 2.0f; + case 4: + return 3.0f; + case 5: + return 4.0f; + default: + return 1.0f; } } - public float CustomResolutionScale + private int ComputeMaxAnisotropyIndex(float MaxAnisotropy) { - get; - set - { - field = value; + return MaxAnisotropy == -1.0f ? 0 : (int)(MathF.Log2(MaxAnisotropy)); + } - OnPropertyChanged(); + private float ComputeMaxAnisotropy(int MaxAnisotropyIndex) + { + switch (MaxAnisotropyIndex) + { + case 0: + return -1.0f; + case 1: + return 2.0f; + case 2: + return 4.0f; + case 3: + return 8.0f; + case 4: + return 16.0f; + default: + return 2.0f; } } + public bool IsMacOS => OperatingSystem.IsMacOS(); + public bool IsOpenGLAvailable => !OperatingSystem.IsMacOS(); public bool IsHypervisorAvailable => OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64; @@ -140,8 +167,6 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public bool IsMacOS => OperatingSystem.IsMacOS(); - public bool EnableDiscordIntegration { get; set; } public bool CheckUpdatesOnStart { get; set; } public bool ShowConfirmExit { get; set; } @@ -260,10 +285,9 @@ namespace Ryujinx.Ava.UI.ViewModels public bool IsSoundIoEnabled { get; set; } public bool IsSDL3Enabled { get; set; } public bool IsAudioToolboxEnabled { get; set; } - public bool IsCustomResolutionScaleActive => _resolutionScale == 4; public bool IsScalingFilterActive => _scalingFilter == (int)Ryujinx.Common.Configuration.ScalingFilter.Fsr; - public bool IsVulkanSelected => GraphicsBackendIndex == 0; + public bool IsVulkanSelected => GraphicsBackend == 0; public bool UseHypervisor { get; set; } public bool DisableP2P { get; set; } @@ -292,8 +316,10 @@ namespace Ryujinx.Ava.UI.ViewModels public int Region { get; set; } public int FsGlobalAccessLogMode { get; set; } public int AudioBackend { get; set; } - public int MaxAnisotropy { get; set; } + public int ResScaleIndex { get; set; } + public int MaxAnisotropyIndex { get; set; } public int AspectRatio { get; set; } + public int BackendThreading { get; set; } public int AntiAliasingEffect { get; set; } public string ScalingFilterLevelText => ScalingFilterLevel.ToString("0"); @@ -312,7 +338,7 @@ namespace Ryujinx.Ava.UI.ViewModels public int MemoryMode { get; set; } public int BaseStyleIndex { get; set; } - public int GraphicsBackendIndex + public int GraphicsBackend { get; set @@ -484,7 +510,7 @@ namespace Ryujinx.Ava.UI.ViewModels if (devices.Length == 0) { IsVulkanAvailable = false; - GraphicsBackendIndex = 1; + GraphicsBackend = 1; } else { @@ -500,8 +526,7 @@ namespace Ryujinx.Ava.UI.ViewModels } // GPU configuration needs to be loaded during the async method or it will always return 0. - PreferredGpuIndex = _gpuIds.Contains(ConfigurationState.Instance.Graphics.PreferredGpu) ? - _gpuIds.IndexOf(ConfigurationState.Instance.Graphics.PreferredGpu) : 0; + PreferredGpuIndex = ComputePreferredGpuIndex(ConfigurationState.Instance.Graphics.PreferredGpu.Value); Dispatcher.UIThread.Post(() => OnPropertyChanged(nameof(PreferredGpuIndex))); } @@ -618,24 +643,23 @@ namespace Ryujinx.Ava.UI.ViewModels SkipUserProfiles = config.System.SkipUserProfilesManager; // CPU - EnablePptc = config.System.EnablePtc; - EnableLowPowerPptc = config.System.EnableLowPowerPtc; + EnablePptc = config.System.EnablePptc; + EnableLowPowerPptc = config.System.EnableLowPowerPptc; MemoryMode = (int)config.System.MemoryManagerMode.Value; UseHypervisor = config.System.UseHypervisor; TurboMultiplier = config.System.TickScalar; // Graphics - GraphicsBackendIndex = (int)config.Graphics.GraphicsBackend.Value; + GraphicsBackend = (int)config.Graphics.GraphicsBackend.Value; // Physical devices are queried asynchronously hence the preferred index config value is loaded in LoadAvailableGpus(). EnableShaderCache = config.Graphics.EnableShaderCache; EnableTextureRecompression = config.Graphics.EnableTextureRecompression; EnableMacroHLE = config.Graphics.EnableMacroHLE; EnableColorSpacePassthrough = config.Graphics.EnableColorSpacePassthrough; - ResolutionScale = config.Graphics.ResScale == -1 ? 4 : config.Graphics.ResScale - 1; - CustomResolutionScale = config.Graphics.ResScaleCustom; - MaxAnisotropy = config.Graphics.MaxAnisotropy == -1 ? 0 : (int)(MathF.Log2(config.Graphics.MaxAnisotropy)); + ResScaleIndex = ComputeResScaleIndex(config.Graphics.ResScale); + MaxAnisotropyIndex = ComputeMaxAnisotropyIndex(config.Graphics.MaxAnisotropy); AspectRatio = (int)config.Graphics.AspectRatio.Value; - GraphicsBackendMultithreadingIndex = (int)config.Graphics.BackendThreading.Value; + BackendThreading = (int)config.Graphics.BackendThreading.Value; ShaderDumpPath = config.Graphics.ShadersDumpPath; TextureDumpPath = config.Graphics.TexturesDumpPath.Value; TextureDumpFormatIndex = (int)config.Graphics.TexturesDumpFileFormat.Value; @@ -738,33 +762,31 @@ namespace Ryujinx.Ava.UI.ViewModels config.System.SkipUserProfilesManager.Value = SkipUserProfiles; // CPU - config.System.EnablePtc.Value = EnablePptc; - config.System.EnableLowPowerPtc.Value = EnableLowPowerPptc; + config.System.EnablePptc.Value = EnablePptc; + config.System.EnableLowPowerPptc.Value = EnableLowPowerPptc; config.System.MemoryManagerMode.Value = (MemoryManagerMode)MemoryMode; config.System.UseHypervisor.Value = UseHypervisor; - config.System.TickScalar.Value = TurboMultiplier; // Graphics - config.Graphics.GraphicsBackend.Value = (GraphicsBackend)GraphicsBackendIndex; + config.Graphics.GraphicsBackend.Value = (GraphicsBackend)GraphicsBackend; config.Graphics.PreferredGpu.Value = _gpuIds.ElementAtOrDefault(PreferredGpuIndex); config.Graphics.EnableShaderCache.Value = EnableShaderCache; config.Graphics.EnableTextureRecompression.Value = EnableTextureRecompression; config.Graphics.EnableMacroHLE.Value = EnableMacroHLE; config.Graphics.EnableColorSpacePassthrough.Value = EnableColorSpacePassthrough; - config.Graphics.ResScale.Value = ResolutionScale == 4 ? -1 : ResolutionScale + 1; - config.Graphics.ResScaleCustom.Value = CustomResolutionScale; - config.Graphics.MaxAnisotropy.Value = MaxAnisotropy == 0 ? -1 : MathF.Pow(2, MaxAnisotropy); + config.Graphics.ResScale.Value = ComputeResScale(ResScaleIndex); + config.Graphics.MaxAnisotropy.Value = ComputeMaxAnisotropy(MaxAnisotropyIndex); config.Graphics.AspectRatio.Value = (AspectRatio)AspectRatio; config.Graphics.AntiAliasing.Value = (AntiAliasing)AntiAliasingEffect; config.Graphics.ScalingFilter.Value = (ScalingFilter)ScalingFilter; config.Graphics.ScalingFilterLevel.Value = ScalingFilterLevel; - if (ConfigurationState.Instance.Graphics.BackendThreading != (BackendThreading)GraphicsBackendMultithreadingIndex) + if (ConfigurationState.Instance.Graphics.BackendThreading != (BackendThreading)BackendThreading) { - DriverUtilities.ToggleOGLThreading(GraphicsBackendMultithreadingIndex == (int)BackendThreading.Off); + DriverUtilities.ToggleOGLThreading(BackendThreading == (int)Ryujinx.Common.Configuration.BackendThreading.Off); } - config.Graphics.BackendThreading.Value = (BackendThreading)GraphicsBackendMultithreadingIndex; + config.Graphics.BackendThreading.Value = (BackendThreading)BackendThreading; config.Graphics.ShadersDumpPath.Value = ShaderDumpPath; config.Graphics.TexturesDumpPath.Value = TextureDumpPath; config.Graphics.TexturesDumpFileFormat.Value = (TextureFileFormat)TextureDumpFormatIndex; diff --git a/src/Ryujinx/UI/Views/Settings/CustomSettingsCPUView.axaml b/src/Ryujinx/UI/Views/Settings/CustomSettingsCPUView.axaml new file mode 100644 index 000000000..007319f90 --- /dev/null +++ b/src/Ryujinx/UI/Views/Settings/CustomSettingsCPUView.axaml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Views/Settings/CustomSettingsCPUView.axaml.cs b/src/Ryujinx/UI/Views/Settings/CustomSettingsCPUView.axaml.cs new file mode 100644 index 000000000..616618f86 --- /dev/null +++ b/src/Ryujinx/UI/Views/Settings/CustomSettingsCPUView.axaml.cs @@ -0,0 +1,12 @@ +using Avalonia.Controls; + +namespace Ryujinx.Ava.UI.Views.Settings +{ + public partial class CustomSettingsCPUView : UserControl + { + public CustomSettingsCPUView() + { + InitializeComponent(); + } + } +} diff --git a/src/Ryujinx/UI/Views/Settings/CustomSettingsGraphicsView.axaml b/src/Ryujinx/UI/Views/Settings/CustomSettingsGraphicsView.axaml new file mode 100644 index 000000000..5bd84c409 --- /dev/null +++ b/src/Ryujinx/UI/Views/Settings/CustomSettingsGraphicsView.axaml @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Views/Settings/CustomSettingsGraphicsView.axaml.cs b/src/Ryujinx/UI/Views/Settings/CustomSettingsGraphicsView.axaml.cs new file mode 100644 index 000000000..3a15b05ee --- /dev/null +++ b/src/Ryujinx/UI/Views/Settings/CustomSettingsGraphicsView.axaml.cs @@ -0,0 +1,12 @@ +using Avalonia.Controls; + +namespace Ryujinx.Ava.UI.Views.Settings +{ + public partial class CustomSettingsGraphicsView : UserControl + { + public CustomSettingsGraphicsView() + { + InitializeComponent(); + } + } +} diff --git a/src/Ryujinx/UI/Views/Settings/CustomSettingsSystemView.axaml b/src/Ryujinx/UI/Views/Settings/CustomSettingsSystemView.axaml new file mode 100644 index 000000000..a44a90af8 --- /dev/null +++ b/src/Ryujinx/UI/Views/Settings/CustomSettingsSystemView.axaml @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Views/Settings/CustomSettingsSystemView.axaml.cs b/src/Ryujinx/UI/Views/Settings/CustomSettingsSystemView.axaml.cs new file mode 100644 index 000000000..5bbb8b67d --- /dev/null +++ b/src/Ryujinx/UI/Views/Settings/CustomSettingsSystemView.axaml.cs @@ -0,0 +1,12 @@ +using Avalonia.Controls; + +namespace Ryujinx.Ava.UI.Views.Settings +{ + public partial class CustomSettingsSystemView : UserControl + { + public CustomSettingsSystemView() + { + InitializeComponent(); + } + } +} diff --git a/src/Ryujinx/UI/Views/Settings/SettingsGraphicsView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsGraphicsView.axaml index 68d269863..3b22dc27b 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsGraphicsView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsGraphicsView.axaml @@ -36,7 +36,7 @@ + SelectedIndex="{Binding GraphicsBackend}"> @@ -45,7 +45,7 @@ Content="OpenGL" /> - + - + Content="{locale:Locale SettingsTabGraphicsResolutionScale05x}" /> + Content="{locale:Locale SettingsTabGraphicsResolutionScale075x}" /> + Content="{locale:Locale SettingsTabGraphicsResolutionScale10x}" /> + Content="{locale:Locale SettingsTabGraphicsResolutionScale20x}" /> + Content="{locale:Locale SettingsTabGraphicsResolutionScale30x}" /> + - - @@ -241,7 +231,7 @@ + SelectedIndex="{Binding BackendThreading}"> - - - @@ -59,4 +52,4 @@ - \ No newline at end of file + diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml index a5010d99e..62216ea1f 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml @@ -158,18 +158,21 @@ Width="350" ToolTip.Tip="{locale:Locale TimeTooltip}" /> - + - - - + ToolTip.Tip="{locale:Locale MatchTimeTooltip}" /> + + + + + + + - - - + { + if (e.Property.Name == nameof(PlatformImpl) && PlatformImpl != null) + { + ForceDarkTitleBar(); + } + }; + } + + // Backup: Try it even when the window is active + this.Activated += (_, _) => ForceDarkTitleBar(); + } + + private void ForceDarkTitleBar() + { + try + { + var handleField = PlatformImpl?.GetType().GetProperty("Handle")?.GetValue(PlatformImpl); + if (handleField?.GetType().GetProperty("Handle")?.GetValue(handleField) is IntPtr hwnd && hwnd != IntPtr.Zero) + { + int dark = 1; + DwmSetWindowAttribute(hwnd, 20, ref dark, sizeof(int)); // Modern Windows + DwmSetWindowAttribute(hwnd, 19, ref dark, sizeof(int)); // Older Windows 10 + } + } + catch + { + // Silent fail + } + } + public void Save() { if (NoCheatsFound) diff --git a/src/Ryujinx/UI/Windows/CustomSettingsWindow.axaml b/src/Ryujinx/UI/Windows/CustomSettingsWindow.axaml new file mode 100644 index 000000000..00485120c --- /dev/null +++ b/src/Ryujinx/UI/Windows/CustomSettingsWindow.axaml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +