diff --git a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj index fb780c308..bcf3e414d 100644 --- a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj +++ b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj @@ -62,6 +62,7 @@ 4E80AA0A2CD6FAA800029585 /* Exceptions for "MeloNX" folder in "Embed Libraries" phase from "MeloNX" target */ = { isa = PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet; attributesByRelativePath = { + "Dependencies/Dynamic Libraries/Ryujinx.Headless.SDL2.dylib" = (CodeSignOnCopy, ); "Dependencies/Dynamic Libraries/libMoltenVK.dylib" = (CodeSignOnCopy, ); "Dependencies/Dynamic Libraries/libavcodec.dylib" = (CodeSignOnCopy, ); "Dependencies/Dynamic Libraries/libavutil.dylib" = (CodeSignOnCopy, ); @@ -81,6 +82,7 @@ "Dependencies/Dynamic Libraries/libavcodec.dylib", "Dependencies/Dynamic Libraries/libavutil.dylib", "Dependencies/Dynamic Libraries/libMoltenVK.dylib", + "Dependencies/Dynamic Libraries/Ryujinx.Headless.SDL2.dylib", Dependencies/XCFrameworks/libavcodec.xcframework, Dependencies/XCFrameworks/libavfilter.xcframework, Dependencies/XCFrameworks/libavformat.xcframework, @@ -558,6 +560,11 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.benlawrence.MeloNX; @@ -654,6 +661,11 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.benlawrence.MeloNX; diff --git a/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift b/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift index 951fe11ce..fb9663123 100644 --- a/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift +++ b/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift @@ -159,7 +159,7 @@ class Ryujinx { // Adding default args directly into additionalArgs if config.nintendoinput { - args.append("--correct-ons-controller") +// args.append("--correct-ons-controller") } if config.ryuLDN { diff --git a/src/Ryujinx.Headless.SDL2/Options.cs b/src/Ryujinx.Headless.SDL2/Options.cs index 4e2ad5b58..c026e1ec8 100644 --- a/src/Ryujinx.Headless.SDL2/Options.cs +++ b/src/Ryujinx.Headless.SDL2/Options.cs @@ -32,6 +32,9 @@ namespace Ryujinx.Headless.SDL2 // Input + [Option("correct-ons-controller", Required = false, Default = false, HelpText="Makes the on-screen controller (iOS) buttons correspond to what they show.")] + public bool OnScreenCorrespond { get; set; } + [Option("input-profile-1", Required = false, HelpText = "Set the input profile in use for Player 1.")] public string InputProfile1Name { get; set; } diff --git a/src/Ryujinx.Headless.SDL2/Program.cs b/src/Ryujinx.Headless.SDL2/Program.cs index ef9fbcf90..7fbf14619 100644 --- a/src/Ryujinx.Headless.SDL2/Program.cs +++ b/src/Ryujinx.Headless.SDL2/Program.cs @@ -135,8 +135,11 @@ namespace Ryujinx.Headless.SDL2 MVKInitialization.InitializeResolver(); } - Parser.Default.ParseArguments(args) - .WithParsed(Load) + var result = Parser.Default.ParseArguments(args) + .WithParsed(options => + { + Load(options); + }) .WithNotParsed(errors => errors.Output()); } @@ -172,7 +175,7 @@ namespace Ryujinx.Headless.SDL2 return ptr; } - private static InputConfig HandlePlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index) + private static InputConfig HandlePlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index, Options option) { if (inputId == null) { @@ -273,7 +276,8 @@ namespace Ryujinx.Headless.SDL2 } else { - bool isNintendoStyle = gamepadName.Contains("Nintendo"); + bool isAppleController = gamepadName.Contains("Apple") ? option.OnScreenCorrespond: false; + bool isNintendoStyle = gamepadName.Contains("Nintendo") || isAppleController; config = new StandardControllerInputConfig { @@ -469,9 +473,9 @@ namespace Ryujinx.Headless.SDL2 _enableKeyboard = option.EnableKeyboard; _enableMouse = option.EnableMouse; - static void LoadPlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index) + static void LoadPlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index, Options option) { - InputConfig inputConfig = HandlePlayerConfiguration(inputProfileName, inputId, index); + InputConfig inputConfig = HandlePlayerConfiguration(inputProfileName, inputId, index, option); if (inputConfig != null) { @@ -479,15 +483,15 @@ namespace Ryujinx.Headless.SDL2 } } - LoadPlayerConfiguration(option.InputProfile1Name, option.InputId1, PlayerIndex.Player1); - LoadPlayerConfiguration(option.InputProfile2Name, option.InputId2, PlayerIndex.Player2); - LoadPlayerConfiguration(option.InputProfile3Name, option.InputId3, PlayerIndex.Player3); - LoadPlayerConfiguration(option.InputProfile4Name, option.InputId4, PlayerIndex.Player4); - LoadPlayerConfiguration(option.InputProfile5Name, option.InputId5, PlayerIndex.Player5); - LoadPlayerConfiguration(option.InputProfile6Name, option.InputId6, PlayerIndex.Player6); - LoadPlayerConfiguration(option.InputProfile7Name, option.InputId7, PlayerIndex.Player7); - LoadPlayerConfiguration(option.InputProfile8Name, option.InputId8, PlayerIndex.Player8); - LoadPlayerConfiguration(option.InputProfileHandheldName, option.InputIdHandheld, PlayerIndex.Handheld); + LoadPlayerConfiguration(option.InputProfile1Name, option.InputId1, PlayerIndex.Player1, option); + LoadPlayerConfiguration(option.InputProfile2Name, option.InputId2, PlayerIndex.Player2, option); + LoadPlayerConfiguration(option.InputProfile3Name, option.InputId3, PlayerIndex.Player3, option); + LoadPlayerConfiguration(option.InputProfile4Name, option.InputId4, PlayerIndex.Player4, option); + LoadPlayerConfiguration(option.InputProfile5Name, option.InputId5, PlayerIndex.Player5, option); + LoadPlayerConfiguration(option.InputProfile6Name, option.InputId6, PlayerIndex.Player6, option); + LoadPlayerConfiguration(option.InputProfile7Name, option.InputId7, PlayerIndex.Player7, option); + LoadPlayerConfiguration(option.InputProfile8Name, option.InputId8, PlayerIndex.Player8, option); + LoadPlayerConfiguration(option.InputProfileHandheldName, option.InputIdHandheld, PlayerIndex.Handheld, option); if (_inputConfiguration.Count == 0) { @@ -648,7 +652,7 @@ namespace Ryujinx.Headless.SDL2 options.AudioVolume, options.UseHypervisor ?? true, options.MultiplayerLanInterfaceId, - Common.Configuration.Multiplayer.MultiplayerMode.Disabled, + Common.Configuration.Multiplayer.MultiplayerMode.LdnRyu, false, "", "",