diff --git a/BepInEx5Plugins.Ash.Alisa.ControlScheme/BepInEx5Plugins.Ash.Alisa.ControlScheme.csproj b/BepInEx5Plugins.Ash.Alisa.ControlScheme/BepInEx5Plugins.Ash.Alisa.ControlScheme.csproj
new file mode 100644
index 0000000..0912bee
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.ControlScheme/BepInEx5Plugins.Ash.Alisa.ControlScheme.csproj
@@ -0,0 +1,33 @@
+
+
+
+ net35
+ BepInEx5Plugins.Ash.Alisa.ControlScheme
+ ControlScheme
+ 1.0.0
+ true
+ 9.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\lib\SteamRelease\Assembly-CSharp.dll
+ false
+
+
+
+
+
+
+
diff --git a/BepInEx5Plugins.Ash.Alisa.ControlScheme/NuGet.Config b/BepInEx5Plugins.Ash.Alisa.ControlScheme/NuGet.Config
new file mode 100644
index 0000000..1864ded
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.ControlScheme/NuGet.Config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BepInEx5Plugins.Ash.Alisa.ControlScheme/Plugin.cs b/BepInEx5Plugins.Ash.Alisa.ControlScheme/Plugin.cs
new file mode 100644
index 0000000..96aa16d
--- /dev/null
+++ b/BepInEx5Plugins.Ash.Alisa.ControlScheme/Plugin.cs
@@ -0,0 +1,300 @@
+using BepInEx;
+using BepInEx.Configuration;
+using System;
+using UnityEngine;
+
+namespace BepInEx5Plugins.Ash.Alisa.ControlScheme
+{
+ //[DefaultExecutionOrder(1000)]
+ [BepInPlugin(PluginInfo.PLUGIN_GUID, PluginInfo.PLUGIN_NAME, PluginInfo.PLUGIN_VERSION)]
+ public class Plugin : BaseUnityPlugin
+ {
+ public bool isActive;
+
+ public ConfigEntry IdleOnStart;
+
+ public ConfigEntry UseDpad;
+
+ public ConfigEntry ActionKeyboardShortcut;
+ public ConfigEntry CancelKeyboardShortcut;
+ public ConfigEntry SprintKeyboardShortcut;
+ public ConfigEntry SwitchWeaponKeyboardShortcut;
+ public ConfigEntry AimKeyboardShortcut;
+ public ConfigEntry SubmitKeyboardShortcut;
+ public ConfigEntry SelectKeyboardShortcut;
+ public ConfigEntry ReloadKeyboardShortcut;
+ public ConfigEntry SpecialKeyboardShortcut;
+ public ConfigEntry UpKeyboardShortcut;
+ public ConfigEntry DownKeyboardShortcut;
+ public ConfigEntry LeftKeyboardShortcut;
+ public ConfigEntry RightKeyboardShortcut;
+
+ public ConfigEntry ActionJoystickShortcut;
+ public ConfigEntry CancelJoystickShortcut;
+ public ConfigEntry SprintJoystickShortcut;
+ public ConfigEntry SwitchWeaponJoystickShortcut;
+ public ConfigEntry AimJoystickShortcut;
+ public ConfigEntry SubmitJoystickShortcut;
+ public ConfigEntry SelectJoystickShortcut;
+ public ConfigEntry ReloadJoystickShortcut;
+ public ConfigEntry SpecialJoystickShortcut;
+ public ConfigEntry UpJoystickShortcut;
+ public ConfigEntry DownJoystickShortcut;
+ public ConfigEntry LeftJoystickShortcut;
+ public ConfigEntry RightJoystickShortcut;
+
+ private Settings _settings;
+
+ public Settings settings
+ {
+ get
+ {
+ if (!_settings)
+ {
+ _settings = GameObject.Find("ScenePersistenceManager")?.GetComponent();
+ }
+
+ return _settings;
+ }
+ }
+
+ private Plugin()
+ {
+ IdleOnStart = Config.Bind("Shortcuts", "Idle on Start", false, "If true, controls are overriden only when pressing controls on a different control scheme. Otherwise, the plugin will override controls as soon as any input is pressed.");
+ UseDpad = Config.Bind("Shortcuts", "Use D-Pad", false, "If true, use the D-Pad instead of the left stick.");
+
+ ActionKeyboardShortcut = Config.Bind("Shortcuts", "Keyboard Action", new KeyboardShortcut(KeyCode.LeftControl));
+ CancelKeyboardShortcut = Config.Bind("Shortcuts", "Keyboard Cancel", new KeyboardShortcut(KeyCode.Backspace));
+ SprintKeyboardShortcut = Config.Bind("Shortcuts", "Keyboard Sprint", new KeyboardShortcut(KeyCode.LeftShift));
+ SwitchWeaponKeyboardShortcut = Config.Bind("Shortcuts", "Keyboard SwitchWeapon", new KeyboardShortcut(KeyCode.Tab));
+ AimKeyboardShortcut = Config.Bind("Shortcuts", "Keyboard Aim", new KeyboardShortcut(KeyCode.Space));
+ SubmitKeyboardShortcut = Config.Bind("Shortcuts", "Keyboard Submit", new KeyboardShortcut(KeyCode.Return));
+ SelectKeyboardShortcut = Config.Bind("Shortcuts", "Keyboard Select", new KeyboardShortcut(KeyCode.Escape));
+ ReloadKeyboardShortcut = Config.Bind("Shortcuts", "Keyboard Reload", new KeyboardShortcut(KeyCode.R));
+ SpecialKeyboardShortcut = Config.Bind("Shortcuts", "Keyboard Special", new KeyboardShortcut(KeyCode.CapsLock));
+ UpKeyboardShortcut = Config.Bind("Shortcuts", "Keyboard Up", new KeyboardShortcut(KeyCode.UpArrow));
+ DownKeyboardShortcut = Config.Bind("Shortcuts", "Keyboard Down", new KeyboardShortcut(KeyCode.DownArrow));
+ LeftKeyboardShortcut = Config.Bind("Shortcuts", "Keyboard Left", new KeyboardShortcut(KeyCode.LeftArrow));
+ RightKeyboardShortcut = Config.Bind("Shortcuts", "Keyboard Right", new KeyboardShortcut(KeyCode.RightArrow));
+
+ ActionJoystickShortcut = Config.Bind("Shortcuts", "Joystick Action", new KeyboardShortcut(KeyCode.JoystickButton0));
+ CancelJoystickShortcut = Config.Bind("Shortcuts", "Joystick Cancel", new KeyboardShortcut(KeyCode.JoystickButton1));
+ SprintJoystickShortcut = Config.Bind("Shortcuts", "Joystick Sprint", new KeyboardShortcut(KeyCode.JoystickButton2));
+ SwitchWeaponJoystickShortcut = Config.Bind("Shortcuts", "Joystick SwitchWeapon", new KeyboardShortcut(KeyCode.JoystickButton3));
+ AimJoystickShortcut = Config.Bind("Shortcuts", "Joystick Aim", new KeyboardShortcut(KeyCode.JoystickButton5));
+ SubmitJoystickShortcut = Config.Bind("Shortcuts", "Joystick Submit", new KeyboardShortcut(KeyCode.JoystickButton7));
+ SelectJoystickShortcut = Config.Bind("Shortcuts", "Joystick Select", new KeyboardShortcut(KeyCode.JoystickButton6));
+ ReloadJoystickShortcut = Config.Bind("Shortcuts", "Joystick Reload", new KeyboardShortcut(KeyCode.None));
+ SpecialJoystickShortcut = Config.Bind("Shortcuts", "Joystick Special", new KeyboardShortcut(KeyCode.None));
+ UpJoystickShortcut = Config.Bind("Shortcuts", "Joystick Up", new KeyboardShortcut(KeyCode.None));
+ DownJoystickShortcut = Config.Bind("Shortcuts", "Joystick Down", new KeyboardShortcut(KeyCode.None));
+ LeftJoystickShortcut = Config.Bind("Shortcuts", "Joystick Left", new KeyboardShortcut(KeyCode.None));
+ RightJoystickShortcut = Config.Bind("Shortcuts", "Joystick Right", new KeyboardShortcut(KeyCode.None));
+ }
+
+ private void Awake()
+ {
+ Logger.LogInfo($"Plugin {PluginInfo.PLUGIN_GUID} is loaded!");
+ }
+
+ private void Update()
+ {
+ try
+ {
+ if (!settings)
+ {
+ return;
+ }
+
+ var forceCheck = false;
+
+ if (!isActive
+ && !IdleOnStart.Value)
+ {
+ forceCheck = true;
+ }
+
+ if (forceCheck || settings.buttonMapping == 0)
+ {
+ var axis = Input.GetAxis(settings.customHorizontalAxis);
+
+ if (axis < -0.5f || axis > 0.5f)
+ {
+ UseJoystickMapping();
+ return;
+ }
+
+ axis = Input.GetAxis(settings.customVerticalAxis);
+
+ if (axis < -0.5f || axis > 0.5f)
+ {
+ UseJoystickMapping();
+ return;
+ }
+
+ if (Input.GetKeyDown(ActionJoystickShortcut.Value.MainKey)
+ || Input.GetKeyDown(CancelJoystickShortcut.Value.MainKey)
+ || Input.GetKeyDown(SprintJoystickShortcut.Value.MainKey)
+ || Input.GetKeyDown(SwitchWeaponJoystickShortcut.Value.MainKey)
+ || Input.GetKeyDown(AimJoystickShortcut.Value.MainKey)
+ || Input.GetKeyDown(SubmitJoystickShortcut.Value.MainKey)
+ || Input.GetKeyDown(SelectJoystickShortcut.Value.MainKey)
+ || Input.GetKeyDown(ReloadJoystickShortcut.Value.MainKey)
+ || Input.GetKeyDown(SpecialJoystickShortcut.Value.MainKey)
+ || Input.GetKeyDown(UpJoystickShortcut.Value.MainKey)
+ || Input.GetKeyDown(DownJoystickShortcut.Value.MainKey)
+ || Input.GetKeyDown(LeftJoystickShortcut.Value.MainKey)
+ || Input.GetKeyDown(RightJoystickShortcut.Value.MainKey))
+ {
+ UseJoystickMapping();
+ return;
+ }
+ }
+
+ if (forceCheck || settings.buttonMapping == 1)
+ {
+ if (settings.keyboardAlt > 0)
+ {
+ var axis = Input.GetAxis("Horizontal_WASD");
+
+ if (axis < -0.1f || axis > 0.1f)
+ {
+ UseKeyboardMapping();
+ return;
+ }
+
+ axis = Input.GetAxis("Vertical_WASD");
+
+ if (axis < -0.1f || axis > 0.1f)
+ {
+ UseKeyboardMapping();
+ return;
+ }
+ }
+ else if (settings.keyboardAlt < 0)
+ {
+ var axis = Input.GetAxis("Horizontal_ZQSD");
+
+ if (axis < -0.1f || axis > 0.1f)
+ {
+ UseKeyboardMapping();
+ return;
+ }
+
+ axis = Input.GetAxis("Vertical_ZQSD");
+
+ if (axis < -0.1f || axis > 0.1f)
+ {
+ UseKeyboardMapping();
+ return;
+ }
+ }
+
+ if (Input.GetKeyDown(ActionKeyboardShortcut.Value.MainKey)
+ || Input.GetKeyDown(CancelKeyboardShortcut.Value.MainKey)
+ || Input.GetKeyDown(SprintKeyboardShortcut.Value.MainKey)
+ || Input.GetKeyDown(SwitchWeaponKeyboardShortcut.Value.MainKey)
+ || Input.GetKeyDown(AimKeyboardShortcut.Value.MainKey)
+ || Input.GetKeyDown(SubmitKeyboardShortcut.Value.MainKey)
+ || Input.GetKeyDown(SelectKeyboardShortcut.Value.MainKey)
+ || Input.GetKeyDown(ReloadKeyboardShortcut.Value.MainKey)
+ || Input.GetKeyDown(SpecialKeyboardShortcut.Value.MainKey)
+ || Input.GetKeyDown(UpKeyboardShortcut.Value.MainKey)
+ || Input.GetKeyDown(DownKeyboardShortcut.Value.MainKey)
+ || Input.GetKeyDown(LeftKeyboardShortcut.Value.MainKey)
+ || Input.GetKeyDown(RightKeyboardShortcut.Value.MainKey))
+ {
+ UseKeyboardMapping();
+ return;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex);
+ }
+ }
+
+ public void UseKeyboardMapping()
+ {
+ Console.WriteLine("Changing control scheme to keyboard type.");
+
+ isActive = true;
+
+ settings.buttonMapping = 0;
+
+ settings.keys["Action"] = ActionKeyboardShortcut.Value.MainKey;
+ settings.keys["Cancel"] = CancelKeyboardShortcut.Value.MainKey;
+ settings.keys["Sprint"] = SprintKeyboardShortcut.Value.MainKey;
+ settings.keys["SwitchWeapon"] = SwitchWeaponKeyboardShortcut.Value.MainKey;
+ settings.keys["Aim"] = AimKeyboardShortcut.Value.MainKey;
+ settings.keys["Submit"] = SubmitKeyboardShortcut.Value.MainKey;
+ settings.keys["Select"] = SelectKeyboardShortcut.Value.MainKey;
+ settings.keys["Reload"] = ReloadKeyboardShortcut.Value.MainKey;
+ settings.keys["Special"] = SpecialKeyboardShortcut.Value.MainKey;
+ settings.keys["Up"] = UpKeyboardShortcut.Value.MainKey;
+ settings.keys["Down"] = DownKeyboardShortcut.Value.MainKey;
+ settings.keys["Left"] = LeftKeyboardShortcut.Value.MainKey;
+ settings.keys["Right"] = RightKeyboardShortcut.Value.MainKey;
+
+ settings.SaveSettings();
+ }
+
+ public void UseJoystickMapping()
+ {
+ Console.WriteLine("Changing control scheme to joystick type.");
+
+ isActive = true;
+
+ settings.buttonMapping = 1;
+
+ if (Application.platform != RuntimePlatform.OSXPlayer)
+ {
+ settings.keys["Action"] = ActionJoystickShortcut.Value.MainKey;
+ settings.keys["Cancel"] = CancelJoystickShortcut.Value.MainKey;
+ settings.keys["Sprint"] = SprintJoystickShortcut.Value.MainKey;
+ settings.keys["SwitchWeapon"] = SwitchWeaponJoystickShortcut.Value.MainKey;
+ settings.keys["Aim"] = AimJoystickShortcut.Value.MainKey;
+ settings.keys["Submit"] = SubmitJoystickShortcut.Value.MainKey;
+ settings.keys["Select"] = SelectJoystickShortcut.Value.MainKey;
+ settings.keys["Reload"] = ReloadJoystickShortcut.Value.MainKey;
+ settings.keys["Special"] = SpecialJoystickShortcut.Value.MainKey;
+ settings.keys["Up"] = UpJoystickShortcut.Value.MainKey;
+ settings.keys["Down"] = DownJoystickShortcut.Value.MainKey;
+ settings.keys["Left"] = LeftJoystickShortcut.Value.MainKey;
+ settings.keys["Right"] = RightJoystickShortcut.Value.MainKey;
+
+ if (settings.horizontalAxis == 0 || settings.verticalAxis == 0)
+ {
+ if (UseDpad.Value)
+ {
+ SetDpad();
+ }
+ else
+ {
+ SetAnalog();
+ }
+ }
+ }
+
+ settings.SaveSettings();
+ }
+
+ public void SetDpad()
+ {
+ if (Application.platform != RuntimePlatform.OSXPlayer)
+ {
+ settings.horizontalAxis = 6;
+ settings.verticalAxis = 7;
+ settings.WhatAxis();
+ }
+ }
+
+ public void SetAnalog()
+ {
+ settings.horizontalAxis = 1;
+ settings.verticalAxis = -2;
+ settings.WhatAxis();
+ }
+ }
+}