diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json
index 00e31dd33..aaf80bbc9 100644
--- a/src/Ryujinx/Assets/locales.json
+++ b/src/Ryujinx/Assets/locales.json
@@ -5297,6 +5297,31 @@
"zh_TW": "忽略控制器小程式"
}
},
+ {
+ "ID": "SettingsTabSystemSkipUserProfilesManager",
+ "Translations": {
+ "ar_SA": "",
+ "de_DE": "",
+ "el_GR": "",
+ "en_US": "Skip dialog 'User Profiles Manager'",
+ "es_ES": "",
+ "fr_FR": "",
+ "he_IL": "",
+ "it_IT": "",
+ "ja_JP": "",
+ "ko_KR": "",
+ "no_NO": "",
+ "pl_PL": "",
+ "pt_BR": "",
+ "ru_RU": "",
+ "sv_SE": "",
+ "th_TH": "",
+ "tr_TR": "",
+ "uk_UA": "",
+ "zh_CN": "",
+ "zh_TW": ""
+ }
+ },
{
"ID": "SettingsTabGraphics",
"Translations": {
@@ -16697,6 +16722,31 @@
"zh_TW": "在模擬應用程式時如果遊戲手柄中斷連線則不會顯示控制器小程式。\n\n如果不確定,請保持關閉狀態。"
}
},
+ {
+ "ID": "SkipUserProfilesTooltip",
+ "Translations": {
+ "ar_SA": "",
+ "de_DE": "",
+ "el_GR": "",
+ "en_US": "This option skips the 'User Profile Manager' dialog during gameplay, using a pre-selected profile.\n\nProfile switching is found in 'Options' - 'Manager User Profiles'. Select the desired profile before loading the game.",
+ "es_ES": "",
+ "fr_FR": "",
+ "he_IL": "",
+ "it_IT": "",
+ "ja_JP": "",
+ "ko_KR": "",
+ "no_NO": "",
+ "pl_PL": "",
+ "pt_BR": "",
+ "ru_RU": "",
+ "sv_SE": "",
+ "th_TH": "",
+ "tr_TR": "",
+ "uk_UA": "",
+ "zh_CN": "",
+ "zh_TW": ""
+ }
+ },
{
"ID": "GraphicsBackendThreadingTooltip",
"Translations": {
diff --git a/src/Ryujinx/Headless/Options.cs b/src/Ryujinx/Headless/Options.cs
index 8305cd311..539df2568 100644
--- a/src/Ryujinx/Headless/Options.cs
+++ b/src/Ryujinx/Headless/Options.cs
@@ -150,7 +150,10 @@ namespace Ryujinx.Headless
if (NeedsOverride(nameof(IgnoreControllerApplet)))
IgnoreControllerApplet = configurationState.System.IgnoreControllerApplet;
-
+
+ if (NeedsOverride(nameof(SkipUserProfilesManager)))
+ SkipUserProfilesManager = configurationState.System.SkipUserProfilesManager;
+
return;
bool NeedsOverride(string argKey) => originalArgs.None(arg => arg.TrimStart('-').EqualsIgnoreCase(OptionName(argKey)));
@@ -414,6 +417,9 @@ namespace Ryujinx.Headless
[Option("ignore-controller-applet", Required = false, Default = false, HelpText = "Enable ignoring the controller applet when your game loses connection to your controller.")]
public bool IgnoreControllerApplet { get; set; }
+ [Option("skip-User-Profiles-Manager", Required = false, Default = false, HelpText = "Enable...")]
+ public bool SkipUserProfilesManager { get; set; }
+
// Values
[Value(0, MetaName = "input", HelpText = "Input to load.", Required = true)]
diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs
index c5315ab12..5727fbd95 100644
--- a/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs
+++ b/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs
@@ -15,7 +15,7 @@ namespace Ryujinx.Ava.Systems.Configuration
///
/// The current version of the file format
///
- public const int CurrentVersion = 68;
+ public const int CurrentVersion = 69;
///
/// Version of the configuration file format
@@ -187,6 +187,11 @@ namespace Ryujinx.Ava.Systems.Configuration
///
public bool IgnoreApplet { get; set; }
+ ///
+ /// Skip user profiles manager dialog during gameplay(the used profile in the configuration will be selected)
+ ///
+ public bool SkipUserProfiles { get; set; }
+
///
/// Enables or disables save window size, position and state on close.
///
diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs
index b10cc3926..11f83e716 100644
--- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs
+++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs
@@ -102,6 +102,7 @@ namespace Ryujinx.Ava.Systems.Configuration
System.DramSize.Value = cff.DramSize;
System.IgnoreMissingServices.Value = cff.IgnoreMissingServices;
System.IgnoreControllerApplet.Value = cff.IgnoreApplet;
+ System.SkipUserProfilesManager.Value = cff.SkipUserProfiles;
System.UseHypervisor.Value = cff.UseHypervisor;
UI.GuiColumns.FavColumn.Value = shouldLoadFromFile ? cff.GuiColumns.FavColumn : UI.GuiColumns.FavColumn.Value;
@@ -438,9 +439,12 @@ namespace Ryujinx.Ava.Systems.Configuration
(64, static cff => cff.LoggingEnableAvalonia = false),
(65, static cff => cff.UpdateCheckerType = cff.CheckUpdatesOnStart ? UpdaterType.PromptAtStartup : UpdaterType.Off),
(66, static cff => cff.DisableInputWhenOutOfFocus = false),
- (67, static cff => cff.FocusLostActionType = cff.DisableInputWhenOutOfFocus ? FocusLostType.BlockInput : FocusLostType.DoNothing)
- // 68 was the version that added per-game configs; the file structure did not change
- // the version was increased so external tools could know that your Ryujinx version has per-game config capabilities.
+ (67, static cff => cff.FocusLostActionType = cff.DisableInputWhenOutOfFocus ? FocusLostType.BlockInput : FocusLostType.DoNothing),
+
+ // 68 was the version that added per-game configs; the file structure did not change
+ // the version was increased so external tools could know that your Ryujinx version has per-game config capabilities.
+ (69, static cff => cff.SkipUserProfiles = false)
+
);
}
}
diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs
index b52c624e3..fec543d5b 100644
--- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs
+++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs
@@ -390,6 +390,11 @@ namespace Ryujinx.Ava.Systems.Configuration
///
public ReactiveObject IgnoreControllerApplet { get; private set; }
+ ///
+ /// Skip User Profiles Manager
+ ///
+ public ReactiveObject SkipUserProfilesManager { get; private set; }
+
///
/// Uses Hypervisor over JIT if available
///
@@ -431,6 +436,8 @@ namespace Ryujinx.Ava.Systems.Configuration
IgnoreMissingServices.LogChangesToValue(nameof(IgnoreMissingServices));
IgnoreControllerApplet = new ReactiveObject();
IgnoreControllerApplet.LogChangesToValue(nameof(IgnoreControllerApplet));
+ SkipUserProfilesManager = new ReactiveObject();
+ SkipUserProfilesManager.LogChangesToValue(nameof(SkipUserProfilesManager));
AudioVolume = new ReactiveObject();
AudioVolume.LogChangesToValue(nameof(AudioVolume));
UseHypervisor = new ReactiveObject();
diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.cs
index 6fe35c744..ac660107b 100644
--- a/src/Ryujinx/Systems/Configuration/ConfigurationState.cs
+++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.cs
@@ -81,6 +81,7 @@ namespace Ryujinx.Ava.Systems.Configuration
DramSize = System.DramSize,
IgnoreMissingServices = System.IgnoreMissingServices,
IgnoreApplet = System.IgnoreControllerApplet,
+ SkipUserProfiles = System.SkipUserProfilesManager,
UseHypervisor = System.UseHypervisor,
GuiColumns = new GuiColumns
{
@@ -205,6 +206,7 @@ namespace Ryujinx.Ava.Systems.Configuration
System.DramSize.Value = MemoryConfiguration.MemoryConfiguration4GiB;
System.IgnoreMissingServices.Value = false;
System.IgnoreControllerApplet.Value = false;
+ System.SkipUserProfilesManager.Value = false;
System.UseHypervisor.Value = true;
Multiplayer.LanInterfaceId.Value = "0";
Multiplayer.Mode.Value = MultiplayerMode.Disabled;
diff --git a/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml.cs b/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml.cs
index babd8e5ee..606a865a1 100644
--- a/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml.cs
+++ b/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml.cs
@@ -3,6 +3,7 @@ using Avalonia.Controls;
using Avalonia.Input;
using FluentAvalonia.UI.Controls;
using Ryujinx.Ava.Common.Locale;
+using Ryujinx.Ava.Systems.Configuration;
using Ryujinx.Ava.UI.Controls;
using Ryujinx.Ava.UI.Helpers;
using Ryujinx.Ava.UI.ViewModels;
@@ -78,6 +79,13 @@ namespace Ryujinx.Ava.UI.Applet
public static async Task<(UserId Id, bool Result)> ShowInputDialog(ProfileSelectorDialogViewModel viewModel)
{
+
+ if (ConfigurationState.Instance.System.SkipUserProfilesManager)
+ {
+ UserId defaultId = viewModel.SelectedUserId;
+ return (defaultId, true);
+ }
+
ContentDialog contentDialog = new()
{
Title = LocaleManager.Instance[LocaleKeys.UserProfileWindowTitle],
diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs
index a092e97f2..55507f3d8 100644
--- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs
+++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs
@@ -132,6 +132,7 @@ namespace Ryujinx.Ava.UI.ViewModels
public bool EnableDiscordIntegration { get; set; }
public bool ShowConfirmExit { get; set; }
public bool IgnoreApplet { get; set; }
+ public bool SkipUserProfiles { get; set; }
public bool RememberWindowState { get; set; }
public bool ShowOldUI { get; set; }
public int HideCursor { get; set; }
@@ -586,6 +587,7 @@ namespace Ryujinx.Ava.UI.ViewModels
DramSize = config.System.DramSize;
IgnoreMissingServices = config.System.IgnoreMissingServices;
IgnoreApplet = config.System.IgnoreControllerApplet;
+ SkipUserProfiles = config.System.SkipUserProfilesManager;
// CPU
EnablePptc = config.System.EnablePtc;
@@ -688,6 +690,7 @@ namespace Ryujinx.Ava.UI.ViewModels
config.System.DramSize.Value = DramSize;
config.System.IgnoreMissingServices.Value = IgnoreMissingServices;
config.System.IgnoreControllerApplet.Value = IgnoreApplet;
+ config.System.SkipUserProfilesManager.Value = SkipUserProfiles;
// CPU
config.System.EnablePtc.Value = EnablePptc;
diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml
index a52fe5fbe..dbe4433dd 100644
--- a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml
+++ b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml
@@ -328,6 +328,11 @@
ToolTip.Tip="{ext:Locale SettingsTabSystemEnableCustomVSyncIntervalTooltip}">
+
+
+