diff --git a/src/Ryujinx.HLE/HOS/Horizon.cs b/src/Ryujinx.HLE/HOS/Horizon.cs index 7af8711c7..b63f4f28a 100644 --- a/src/Ryujinx.HLE/HOS/Horizon.cs +++ b/src/Ryujinx.HLE/HOS/Horizon.cs @@ -265,13 +265,25 @@ namespace Ryujinx.HLE.HOS HorizonFsClient fsClient = new(this); ServiceTable = new ServiceTable(); - IEnumerable services = ServiceTable.GetServices(new HorizonOptions - (Device.Configuration.IgnoreMissingServices, + + IEnumerable services = ServiceTable.GetServices(new HorizonOptions( +#if DEBUG + Device.Configuration.IgnoreMissingServices, LibHacHorizonManager.BcatClient, fsClient, AccountManager, Device.AudioDeviceDriver, - TickSource)); + TickSource +#else + LibHacHorizonManager.BcatClient, + fsClient, + AccountManager, + Device.AudioDeviceDriver, + TickSource +#endif + )); + + foreach (ServiceEntry service in services) { diff --git a/src/Ryujinx.HLE/HOS/Services/IpcService.cs b/src/Ryujinx.HLE/HOS/Services/IpcService.cs index 1fa8d7842..8c9c56e84 100644 --- a/src/Ryujinx.HLE/HOS/Services/IpcService.cs +++ b/src/Ryujinx.HLE/HOS/Services/IpcService.cs @@ -135,7 +135,8 @@ namespace Ryujinx.HLE.HOS.Services int commandId = (int)context.RequestData.ReadInt64(); bool serviceExists = service.CmifCommands.TryGetValue(commandId, out MethodInfo processRequest); - + +#if DEBUG if (context.Device.Configuration.IgnoreMissingServices || serviceExists) { ResultCode result = ResultCode.Success; @@ -181,6 +182,39 @@ namespace Ryujinx.HLE.HOS.Services throw new ServiceNotImplementedException(service, context, dbgMessage); } +#else + if (serviceExists) + { + context.ResponseData.BaseStream.Seek(_isDomain ? 0x20 : 0x10, SeekOrigin.Begin); + + Logger.Trace?.Print(LogClass.KernelIpc, $"{service.GetType().Name}: {processRequest.Name}"); + + ResultCode result = (ResultCode)processRequest.Invoke(service, [context]); + + if (_isDomain) + { + foreach (int id in context.Response.ObjectIds) + { + context.ResponseData.Write(id); + } + + context.ResponseData.BaseStream.Seek(0, SeekOrigin.Begin); + + context.ResponseData.Write(context.Response.ObjectIds.Count); + } + + context.ResponseData.BaseStream.Seek(_isDomain ? 0x10 : 0, SeekOrigin.Begin); + + context.ResponseData.Write(IpcMagic.Sfco); + context.ResponseData.Write((long)result); + } + else + { + string dbgMessage = $"{service.GetType().FullName}: {commandId}"; + + throw new ServiceNotImplementedException(service, context, dbgMessage); + } +#endif } public void CallTipcMethod(ServiceCtx context) @@ -189,6 +223,7 @@ namespace Ryujinx.HLE.HOS.Services bool serviceExists = TipcCommands.TryGetValue(commandId, out MethodInfo processRequest); +#if DEBUG if (context.Device.Configuration.IgnoreMissingServices || serviceExists) { ResultCode result = ResultCode.Success; @@ -221,6 +256,26 @@ namespace Ryujinx.HLE.HOS.Services throw new ServiceNotImplementedException(this, context, dbgMessage); } +#else + if (serviceExists) + { + context.ResponseData.BaseStream.Seek(0x4, SeekOrigin.Begin); + + Logger.Debug?.Print(LogClass.KernelIpc, $"{GetType().Name}: {processRequest.Name}"); + + ResultCode result = (ResultCode)processRequest.Invoke(this, [context]); + + context.ResponseData.BaseStream.Seek(0, SeekOrigin.Begin); + + context.ResponseData.Write((uint)result); + } + else + { + string dbgMessage = $"{GetType().FullName}: {commandId}"; + + throw new ServiceNotImplementedException(this, context, dbgMessage); + } +#endif } protected void MakeObject(ServiceCtx context, IpcService obj) diff --git a/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs b/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs index af511af29..4785e58df 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs @@ -102,11 +102,13 @@ namespace Ryujinx.HLE.HOS.Services.Sm } else { +#if DEBUG if (context.Device.Configuration.IgnoreMissingServices) { Logger.Warning?.Print(LogClass.Service, $"Missing service {name} ignored"); } else +#endif { throw new NotImplementedException(name); } diff --git a/src/Ryujinx.HLE/HleConfiguration.cs b/src/Ryujinx.HLE/HleConfiguration.cs index 97835033e..f81b9277a 100644 --- a/src/Ryujinx.HLE/HleConfiguration.cs +++ b/src/Ryujinx.HLE/HleConfiguration.cs @@ -137,12 +137,14 @@ namespace Ryujinx.HLE /// public MemoryManagerMode MemoryManagerMode { internal get; set; } +#if DEBUG /// /// Control the initial state of the ignore missing services setting. /// If this is set to true, when a missing service is encountered, it will try to automatically handle it instead of throwing an exception. /// /// TODO: Update this again. - public bool IgnoreMissingServices { internal get; set; } + public bool IgnoreMissingServices { get; set; } +#endif /// /// Aspect Ratio applied to the renderer window by the SurfaceFlinger service. @@ -207,7 +209,9 @@ namespace Ryujinx.HLE long systemTimeOffset, string timeZone, MemoryManagerMode memoryManagerMode, +#if DEBUG bool ignoreMissingServices, +#endif AspectRatio aspectRatio, float audioVolume, bool useHypervisor, @@ -232,7 +236,9 @@ namespace Ryujinx.HLE SystemTimeOffset = systemTimeOffset; TimeZone = timeZone; MemoryManagerMode = memoryManagerMode; +#if DEBUG IgnoreMissingServices = ignoreMissingServices; +#endif AspectRatio = aspectRatio; AudioVolume = audioVolume; UseHypervisor = useHypervisor; diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index df5b48103..2ea630b48 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -4,6 +4,7 @@ using Ryujinx.Audio.Backends.CompatLayer; using Ryujinx.Audio.Integration; using Ryujinx.Common; using Ryujinx.Common.Configuration; +using Ryujinx.Common.Logging; using Ryujinx.Graphics.Gpu; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS; @@ -83,6 +84,11 @@ namespace Ryujinx.HLE UpdateVSyncInterval(); #pragma warning restore IDE0055 + +#if DEBUG + if (Configuration.IgnoreMissingServices) + Logger.Notice.Print(LogClass.Emulation, "Ignore Missing Services is enabled.", nameof(Switch)); +#endif Shared = this; } diff --git a/src/Ryujinx.Horizon/HorizonOptions.cs b/src/Ryujinx.Horizon/HorizonOptions.cs index a24ce7f61..6c7943f53 100644 --- a/src/Ryujinx.Horizon/HorizonOptions.cs +++ b/src/Ryujinx.Horizon/HorizonOptions.cs @@ -8,7 +8,9 @@ namespace Ryujinx.Horizon { public readonly struct HorizonOptions { +#if DEBUG public bool IgnoreMissingServices { get; } +#endif public bool ThrowOnInvalidCommandIds { get; } public HorizonClient BcatClient { get; } @@ -18,14 +20,18 @@ namespace Ryujinx.Horizon public ITickSource TickSource { get; } public HorizonOptions( +#if DEBUG bool ignoreMissingServices, +#endif HorizonClient bcatClient, IFsClient fsClient, IEmulatorAccountManager accountManager, IHardwareDeviceDriver audioDeviceDriver, ITickSource tickSource) { +#if DEBUG IgnoreMissingServices = ignoreMissingServices; +#endif ThrowOnInvalidCommandIds = true; BcatClient = bcatClient; FsClient = fsClient; diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServiceDispatchTableBase.cs b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServiceDispatchTableBase.cs index f2292feff..65a30e362 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServiceDispatchTableBase.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServiceDispatchTableBase.cs @@ -39,6 +39,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif if (!entries.TryGetValue((int)commandId, out CommandHandler commandHandler)) { +#if DEBUG if (HorizonStatic.Options.IgnoreMissingServices) { // If ignore missing services is enabled, just pretend that everything is fine. @@ -49,8 +50,10 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif Logger.Warning?.Print(LogClass.Service, $"Missing service {objectName} (command ID: {commandId}) ignored"); return Result.Success; - } - else if (HorizonStatic.Options.ThrowOnInvalidCommandIds) + } +#endif + + if (HorizonStatic.Options.ThrowOnInvalidCommandIds) { throw new NotImplementedException($"{objectName} command ID: {commandId} is not implemented"); } diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index dd6b7ee88..e3c476171 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -5247,31 +5247,6 @@ "zh_TW": "" } }, - { - "ID": "SettingsTabSystemIgnoreMissingServices", - "Translations": { - "ar_SA": "تجاهل الخدمات المفقودة", - "de_DE": "Ignoriere fehlende Dienste", - "el_GR": "Αγνόηση υπηρεσιών που λείπουν", - "en_US": "Ignore Missing Services", - "es_ES": "Ignorar servicios no implementados", - "fr_FR": "Ignorer les services manquants", - "he_IL": "התעלם משירותים חסרים", - "it_IT": "Ignora servizi mancanti", - "ja_JP": "未実装サービスを無視する", - "ko_KR": "누락된 서비스 무시", - "no_NO": "Ignorer manglende tjenester", - "pl_PL": "Ignoruj Brakujące Usługi", - "pt_BR": "Ignorar Serviços Ausentes", - "ru_RU": "Игнорировать отсутствующие службы", - "sv_SE": "Ignorera saknade tjänster", - "th_TH": "เมินเฉยบริการที่หายไป", - "tr_TR": "Eksik Servisleri Görmezden Gel", - "uk_UA": "Ігнорувати відсутні служби", - "zh_CN": "忽略缺失的服务", - "zh_TW": "忽略缺少的模擬器功能" - } - }, { "ID": "SettingsTabSystemIgnoreControllerApplet", "Translations": { @@ -16647,31 +16622,6 @@ "zh_TW": "利用另一種 MemoryMode 配置來模仿 Switch 開發模式。\n\n這僅對高解析度紋理套件或 4K 解析度模組有用。不會提高效能。\n\n如果不確定,請設定為 4GiB。" } }, - { - "ID": "IgnoreMissingServicesTooltip", - "Translations": { - "ar_SA": "يتجاهل خدمات نظام هوريزون غير المنفذة. قد يساعد هذا في تجاوز الأعطال عند تشغيل ألعاب معينة.\n\nاتركه معطلا إذا كنت غير متأكد.", - "de_DE": "Durch diese Option werden nicht implementierte Dienste der Switch-Firmware ignoriert. Dies kann dabei helfen, Abstürze beim Starten bestimmter Spiele zu umgehen.\n\nIm Zweifelsfall AUS lassen.", - "el_GR": "Ενεργοποίηση ή απενεργοποίηση της αγνοώησης για υπηρεσίες που λείπουν", - "en_US": "Ignores unimplemented Horizon OS services. This may help in bypassing crashes when booting certain games.\n\nLeave OFF if unsure.", - "es_ES": "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.", - "fr_FR": "Ignore les services Horizon OS non-intégrés. Cela peut aider à contourner les plantages lors du démarrage de certains jeux.\n\nLaissez désactivé en cas d'incertitude.", - "he_IL": "מתעלם מפעולות שלא קיבלו מימוש במערכת ההפעלה Horizon OS. זה עלול לעזור לעקוף קריסות של היישום במשחקים מסויימים.\n\nמוטב להשאיר כבוי אם לא בטוחים.", - "it_IT": "Ignora i servizi non implementati del sistema operativo Horizon. Può aiutare ad aggirare gli arresti anomali che si verificano avviando alcuni giochi.\n\nNel dubbio, lascia l'opzione disattivata.", - "ja_JP": "未実装の Horizon OS サービスを無視します. 特定のゲームにおいて起動時のクラッシュを回避できる場合があります.\n\nよくわからない場合はオフのままにしてください.", - "ko_KR": "구현되지 않은 Horizon OS 서비스는 무시됩니다. 특정 게임을 부팅할 때, 발생하는 충돌을 우회하는 데 도움이 될 수 있습니다.\n\n모르면 끔으로 두세요.", - "no_NO": "Ignorerer ikke implementerte Horisont OS-tjenester. Dette kan hjelpe med å omgå krasj ved oppstart av enkelte spill.\n\nLa AV hvis du er usikker.", - "pl_PL": "Ignoruje niezaimplementowane usługi Horizon OS. Może to pomóc w ominięciu awarii podczas uruchamiania niektórych gier.\n\nW razie wątpliwości pozostaw WYŁĄCZONE.", - "pt_BR": "Ignora serviços não implementados do Horizon OS. Isso pode ajudar a contornar travamentos ao inicializar certos jogos.\n\nDeixe OFF se não tiver certeza.", - "ru_RU": "Игнорирует нереализованные сервисы Horizon в новых прошивках. Эта настройка поможет избежать вылеты при запуске определенных игр.\n\nРекомендуется оставить выключенным.", - "sv_SE": "Ignorerar Horizon OS-tjänster som inte har implementerats. Detta kan avhjälpa krascher när vissa spel startar upp.\n\nLämna AV om du är osäker.", - "th_TH": "ละเว้นบริการ Horizon OS ที่ยังไม่ได้ใช้งาน วิธีนี้อาจช่วยในการหลีกเลี่ยงข้อผิดพลาดเมื่อบูตเกมบางเกม\n\nปล่อยให้ปิดหากคุณไม่แน่ใจ", - "tr_TR": "Henüz programlanmamış Horizon işletim sistemi servislerini görmezden gelir. Bu seçenek belirli oyunların açılırken çökmesinin önüne geçmeye yardımcı olabilir.\n\nEmin değilseniz devre dışı bırakın.", - "uk_UA": "Ігнорує нереалізовані служби Horizon OS. Це може допомогти в обході збоїв під час завантаження певних ігор.\n\nЗалиште вимкненим якщо не впевнені.", - "zh_CN": "开启后,游戏会忽略未实现的系统服务,从而继续运行。\n少部分新发布的游戏由于使用了新的未知系统服务,可能需要此选项来避免闪退。\n模拟器更新完善系统服务之后,则无需开启此选项。\n\n如果不确定,请保持关闭状态。", - "zh_TW": "忽略未實現的 Horizon OS 服務。這可能有助於在啟動某些遊戲時避免崩潰。\n\n如果不確定,請保持關閉狀態。" - } - }, { "ID": "IgnoreControllerAppletTooltip", "Translations": { diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index 751a86571..20f793cd0 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -314,6 +314,7 @@ namespace Ryujinx.Headless private static Switch InitializeEmulationContext(WindowBase window, IRenderer renderer, Options options) => new( +#if DEBUG new HleConfiguration( options.DramSize, options.SystemLanguage, @@ -338,6 +339,31 @@ namespace Ryujinx.Headless string.Empty, options.CustomVSyncInterval ) +#else + new HleConfiguration( + options.DramSize, + options.SystemLanguage, + options.SystemRegion, + options.VSyncMode, + !options.DisableDockedMode, + !options.DisablePTC, + options.EnableInternetAccess, + !options.DisableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None, + options.FsGlobalAccessLogMode, + options.SystemTimeOffset, + options.SystemTimeZone, + options.MemoryManagerMode, + options.AspectRatio, + options.AudioVolume, + options.UseHypervisor ?? true, + options.MultiplayerLanInterfaceId, + Common.Configuration.Multiplayer.MultiplayerMode.Disabled, + false, + string.Empty, + string.Empty, + options.CustomVSyncInterval + ) +#endif .Configure( _virtualFileSystem, _libHacHorizonManager, diff --git a/src/Ryujinx/Headless/Options.cs b/src/Ryujinx/Headless/Options.cs index 8305cd311..79bc938c5 100644 --- a/src/Ryujinx/Headless/Options.cs +++ b/src/Ryujinx/Headless/Options.cs @@ -145,9 +145,6 @@ namespace Ryujinx.Headless if (NeedsOverride(nameof(DramSize))) DramSize = configurationState.System.DramSize; - if (NeedsOverride(nameof(IgnoreMissingServices))) - IgnoreMissingServices = configurationState.System.IgnoreMissingServices; - if (NeedsOverride(nameof(IgnoreControllerApplet))) IgnoreControllerApplet = configurationState.System.IgnoreControllerApplet; @@ -408,8 +405,10 @@ namespace Ryujinx.Headless [Option("dram-size", Required = false, Default = MemoryConfiguration.MemoryConfiguration4GiB, HelpText = "Set the RAM amount on the emulated system.")] public MemoryConfiguration DramSize { get; set; } +#if DEBUG [Option("ignore-missing-services", Required = false, Default = false, HelpText = "Enable ignoring missing services.")] public bool IgnoreMissingServices { get; set; } +#endif [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; } diff --git a/src/Ryujinx/Systems/AppHost.cs b/src/Ryujinx/Systems/AppHost.cs index 455afaf45..6369f7eac 100644 --- a/src/Ryujinx/Systems/AppHost.cs +++ b/src/Ryujinx/Systems/AppHost.cs @@ -194,7 +194,6 @@ namespace Ryujinx.Ava.Systems _defaultCursorWin = CreateArrowCursor(); } - ConfigurationState.Instance.System.IgnoreMissingServices.Event += UpdateIgnoreMissingServicesState; ConfigurationState.Instance.Graphics.AspectRatio.Event += UpdateAspectRatioState; ConfigurationState.Instance.System.EnableDockedMode.Event += UpdateDockedModeState; ConfigurationState.Instance.System.AudioVolume.Event += UpdateAudioVolumeState; @@ -487,14 +486,6 @@ namespace Ryujinx.Ava.Systems Exit(); } - private void UpdateIgnoreMissingServicesState(object sender, ReactiveEventArgs args) - { - if (Device != null) - { - Device.Configuration.IgnoreMissingServices = args.NewValue; - } - } - private void UpdateAspectRatioState(object sender, ReactiveEventArgs args) { if (Device != null) @@ -608,9 +599,7 @@ namespace Ryujinx.Ava.Systems { if (Device.Processes != null) MainWindowViewModel.UpdateGameMetadata(Device.Processes.ActiveApplication.ProgramIdText); - - - ConfigurationState.Instance.System.IgnoreMissingServices.Event -= UpdateIgnoreMissingServicesState; + ConfigurationState.Instance.Graphics.AspectRatio.Event -= UpdateAspectRatioState; ConfigurationState.Instance.System.EnableDockedMode.Event -= UpdateDockedModeState; ConfigurationState.Instance.System.AudioVolume.Event -= UpdateAudioVolumeState; diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs index c5315ab12..51a63d5cc 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs @@ -294,11 +294,6 @@ namespace Ryujinx.Ava.Systems.Configuration /// public MemoryConfiguration DramSize { get; set; } - /// - /// Enable or disable ignoring missing services - /// - public bool IgnoreMissingServices { get; set; } - /// /// Used to toggle columns in the GUI /// diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs index b10cc3926..86a3d9d35 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs @@ -100,7 +100,6 @@ namespace Ryujinx.Ava.Systems.Configuration System.AudioVolume.Value = cff.AudioVolume; System.MemoryManagerMode.Value = cff.MemoryManagerMode; System.DramSize.Value = cff.DramSize; - System.IgnoreMissingServices.Value = cff.IgnoreMissingServices; System.IgnoreControllerApplet.Value = cff.IgnoreApplet; System.UseHypervisor.Value = cff.UseHypervisor; diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs index b52c624e3..6b54a16ae 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs @@ -3,6 +3,7 @@ using Gommon; using LibHac.Tools.FsSystem; using Ryujinx.Ava.Systems.Configuration.System; using Ryujinx.Ava.Systems.Configuration.UI; +using Ryujinx.Ava.Utilities; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; @@ -379,11 +380,6 @@ namespace Ryujinx.Ava.Systems.Configuration /// Defines the amount of RAM available on the emulated system, and how it is distributed /// public ReactiveObject DramSize { get; private set; } - - /// - /// Enable or disable ignoring missing services - /// - public ReactiveObject IgnoreMissingServices { get; private set; } /// /// Ignore Controller Applet @@ -427,8 +423,6 @@ namespace Ryujinx.Ava.Systems.Configuration MemoryManagerMode.LogChangesToValue(nameof(MemoryManagerMode)); DramSize = new ReactiveObject(); DramSize.LogChangesToValue(nameof(DramSize)); - IgnoreMissingServices = new ReactiveObject(); - IgnoreMissingServices.LogChangesToValue(nameof(IgnoreMissingServices)); IgnoreControllerApplet = new ReactiveObject(); IgnoreControllerApplet.LogChangesToValue(nameof(IgnoreControllerApplet)); AudioVolume = new ReactiveObject(); @@ -835,6 +829,7 @@ namespace Ryujinx.Ava.Systems.Configuration } public HleConfiguration CreateHleConfiguration() => +#if DEBUG new( System.DramSize, System.Language.Value.ToHLE(), @@ -852,7 +847,7 @@ namespace Ryujinx.Ava.Systems.Configuration : System.SystemTimeOffset, System.TimeZone, System.MemoryManagerMode, - System.IgnoreMissingServices, + CommandLineState.IgnoreMissingServices, Graphics.AspectRatio, System.AudioVolume, System.UseHypervisor, @@ -863,5 +858,34 @@ namespace Ryujinx.Ava.Systems.Configuration Instance.Multiplayer.GetLdnServer(), Instance.Graphics.CustomVSyncInterval, Instance.Hacks.ShowDirtyHacks ? Instance.Hacks.EnabledHacks : null); +#else + new( + System.DramSize, + System.Language.Value.ToHLE(), + System.Region.Value.ToHLE(), + Graphics.VSyncMode, + System.EnableDockedMode, + System.EnablePtc, + System.EnableInternetAccess, + System.EnableFsIntegrityChecks + ? IntegrityCheckLevel.ErrorOnInvalid + : IntegrityCheckLevel.None, + System.FsGlobalAccessLogMode, + System.MatchSystemTime + ? 0 + : System.SystemTimeOffset, + System.TimeZone, + System.MemoryManagerMode, + Graphics.AspectRatio, + System.AudioVolume, + System.UseHypervisor, + Multiplayer.LanInterfaceId, + Multiplayer.Mode, + Multiplayer.DisableP2p, + Multiplayer.LdnPassphrase, + Instance.Multiplayer.GetLdnServer(), + Instance.Graphics.CustomVSyncInterval, + Instance.Hacks.ShowDirtyHacks ? Instance.Hacks.EnabledHacks : null); +#endif } } diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.cs index 6fe35c744..75d2c3cde 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.cs @@ -79,7 +79,6 @@ namespace Ryujinx.Ava.Systems.Configuration AudioVolume = System.AudioVolume, MemoryManagerMode = System.MemoryManagerMode, DramSize = System.DramSize, - IgnoreMissingServices = System.IgnoreMissingServices, IgnoreApplet = System.IgnoreControllerApplet, UseHypervisor = System.UseHypervisor, GuiColumns = new GuiColumns @@ -203,7 +202,6 @@ namespace Ryujinx.Ava.Systems.Configuration System.AudioVolume.Value = 1; System.MemoryManagerMode.Value = MemoryManagerMode.HostMappedUnsafe; System.DramSize.Value = MemoryConfiguration.MemoryConfiguration4GiB; - System.IgnoreMissingServices.Value = false; System.IgnoreControllerApplet.Value = false; System.UseHypervisor.Value = true; Multiplayer.LanInterfaceId.Value = "0"; diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index a092e97f2..77fce9ac2 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -208,7 +208,6 @@ namespace Ryujinx.Ava.UI.ViewModels public bool EnableLowPowerPptc { get; set; } public bool EnableInternetAccess { get; set; } public bool EnableFsIntegrityChecks { get; set; } - public bool IgnoreMissingServices { get; set; } public MemoryConfiguration DramSize { get; set; } public bool EnableShaderCache { get; set; } public bool EnableTextureRecompression { get; set; } @@ -584,7 +583,6 @@ namespace Ryujinx.Ava.UI.ViewModels VSyncMode = config.Graphics.VSyncMode; EnableFsIntegrityChecks = config.System.EnableFsIntegrityChecks; DramSize = config.System.DramSize; - IgnoreMissingServices = config.System.IgnoreMissingServices; IgnoreApplet = config.System.IgnoreControllerApplet; // CPU @@ -686,7 +684,6 @@ namespace Ryujinx.Ava.UI.ViewModels config.System.SystemTimeOffset.Value = Convert.ToInt64((CurrentDate.ToUnixTimeSeconds() + CurrentTime.TotalSeconds) - DateTimeOffset.Now.ToUnixTimeSeconds()); config.System.EnableFsIntegrityChecks.Value = EnableFsIntegrityChecks; config.System.DramSize.Value = DramSize; - config.System.IgnoreMissingServices.Value = IgnoreMissingServices; config.System.IgnoreControllerApplet.Value = IgnoreApplet; // CPU diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml index a52fe5fbe..3fbee29d5 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml @@ -313,11 +313,6 @@ Margin="10,0,0,0" HorizontalAlignment="Stretch" Orientation="Vertical"> - - - diff --git a/src/Ryujinx/Utilities/CommandLineState.cs b/src/Ryujinx/Utilities/CommandLineState.cs index 33017756d..aace6d224 100644 --- a/src/Ryujinx/Utilities/CommandLineState.cs +++ b/src/Ryujinx/Utilities/CommandLineState.cs @@ -26,6 +26,9 @@ namespace Ryujinx.Ava.Utilities public static bool StartFullscreenArg { get; private set; } public static bool HideAvailableUpdates { get; private set; } +#if DEBUG + public static bool IgnoreMissingServices { get; private set; } +#endif public static void ParseArguments(string[] args) { @@ -185,6 +188,11 @@ namespace Ryujinx.Ava.Utilities case "--hide-updates": HideAvailableUpdates = true; break; +#if DEBUG + case "--ignore-missing-services": + IgnoreMissingServices = true; + break; +#endif case "--software-gui": OverrideHardwareAcceleration = false; break;