From d1b2381fd5633a72e6ffecbe3484e71a8de49713 Mon Sep 17 00:00:00 2001 From: DV666 Date: Wed, 11 Feb 2026 21:30:04 +0100 Subject: [PATCH 1/7] Binding L3 + R3 --- .../Global/Booster/BoosterSlider.cs | 2 +- Assembly-CSharp/Global/Config/ConfigUI.cs | 170 +++++++++++++++++- Assembly-CSharp/Global/Control.cs | 2 + .../Global/Hono/HonoInputManager.cs | 53 ++++++ Assembly-CSharp/Global/Sound/SoundPlayer.cs | 2 +- .../Global/UI/UIKey/UIKeyTrigger.cs | 8 +- .../Memoria/Configuration/Access/Control.cs | 13 ++ .../Configuration/Structure/ControlSection.cs | 5 + .../Data/Text/LocalizationPatch.txt | 4 + 9 files changed, 248 insertions(+), 11 deletions(-) diff --git a/Assembly-CSharp/Global/Booster/BoosterSlider.cs b/Assembly-CSharp/Global/Booster/BoosterSlider.cs index 67ea659e1..674d4edff 100644 --- a/Assembly-CSharp/Global/Booster/BoosterSlider.cs +++ b/Assembly-CSharp/Global/Booster/BoosterSlider.cs @@ -281,7 +281,7 @@ public void SetBoosterState(Int32 currentCharacterStateIndex) } } - public void ShowWaringDialog(BoosterType type, Action callback = null) + public void ShowWarningDialog(BoosterType type, Action callback = null) { if (this.needComfirmType == BoosterType.None && (PersistenSingleton.Instance.IsPlayerControlEnable || PersistenSingleton.Instance.State == UIManager.UIState.Config) diff --git a/Assembly-CSharp/Global/Config/ConfigUI.cs b/Assembly-CSharp/Global/Config/ConfigUI.cs index d188cc503..047bb3420 100644 --- a/Assembly-CSharp/Global/Config/ConfigUI.cs +++ b/Assembly-CSharp/Global/Config/ConfigUI.cs @@ -70,7 +70,8 @@ public enum Configurator MovieVolume, VoiceVolume, ATBMode, - AutoText + AutoText, + ControllerBind } public enum ATBMode @@ -220,6 +221,11 @@ public enum ATBMode private Boolean helpEnable; + private Boolean isBindingMode = false; + private Int32 bindingStage = 0; + private Single bindingTimer = 0f; + private Dialog bindingDialog; + [NonSerialized] private Int32 fieldMessageConfigIndex = (Int32)Configurator.FieldMessage; public GameObject SliderMenuTemplate => ConfigList.GetChild(1).GetChild(0).GetChild(fieldMessageConfigIndex); @@ -733,6 +739,12 @@ public override Boolean OnKeyConfirm(GameObject go) ButtonGroupState.HoldActiveStateOnGroup(ConfigGroupButton); }); } + if (config?.Configurator == Configurator.ControllerBind) + { + FF9Sfx.FF9SFX_Play(103); + StartBindingSequence(); + return true; + } else if (config?.Configurator == Configurator.CombatTutorial) { if (PersistenSingleton.Instance.UnityScene == UIManager.Scene.Battle) @@ -813,7 +825,7 @@ private void OnBoosterPanelKeyConfirm(GameObject go) if (Configuration.Cheats.MasterSkill) { FF9Sfx.FF9SFX_Play(103); - PersistenSingleton.Instance.Booster.ShowWaringDialog(BoosterType.MasterSkill, AfterBoosterFinish); + PersistenSingleton.Instance.Booster.ShowWarningDialog(BoosterType.MasterSkill, AfterBoosterFinish); hitpointScreenButton.KeyCommand = Control.None; WarningDialogHitPoint.SetActive(true); } @@ -836,7 +848,7 @@ private void OnBoosterPanelKeyConfirm(GameObject go) if (Configuration.Cheats.LvMax) { FF9Sfx.FF9SFX_Play(103); - PersistenSingleton.Instance.Booster.ShowWaringDialog(BoosterType.LvMax, AfterBoosterFinish); + PersistenSingleton.Instance.Booster.ShowWarningDialog(BoosterType.LvMax, AfterBoosterFinish); hitpointScreenButton.KeyCommand = Control.None; WarningDialogHitPoint.SetActive(true); } @@ -851,7 +863,7 @@ private void OnBoosterPanelKeyConfirm(GameObject go) if (Configuration.Cheats.GilMax) { FF9Sfx.FF9SFX_Play(103); - PersistenSingleton.Instance.Booster.ShowWaringDialog(BoosterType.GilMax, AfterBoosterFinish); + PersistenSingleton.Instance.Booster.ShowWarningDialog(BoosterType.GilMax, AfterBoosterFinish); hitpointScreenButton.KeyCommand = Control.None; WarningDialogHitPoint.SetActive(true); } @@ -1298,7 +1310,7 @@ private void setConfigValue(GameObject configGameObject, Single value, Boolean i if (configField.Value == previousValue) playSound = false; } - else if (configField.Configurator != Configurator.Title && configField.Configurator != Configurator.QuitGame && configField.Configurator != Configurator.ControlTutorial && configField.Configurator != Configurator.CombatTutorial) + else if (configField.Configurator != Configurator.Title && configField.Configurator != Configurator.QuitGame && configField.Configurator != Configurator.ControlTutorial && configField.Configurator != Configurator.CombatTutorial && configField.Configurator != Configurator.ControllerBind) { GameObject child = configField.ConfigChoice[0].GetChild(0); GameObject child2 = configField.ConfigChoice[1].GetChild(0); @@ -1421,6 +1433,11 @@ private void Update() vib.VIB_actuatorReset(0); vib.VIB_actuatorReset(1); } + if (isBindingMode) + { + UpdateBindingLogic(); + return; + } } private GameObject CreateChoice(GameObject template, Configurator id, String choice1, String choice2, int siblingIndex) @@ -1508,6 +1525,139 @@ private void CreateATBModeSlider(GameObject template, Configurator id, int sibli slider.value = 0f; } + private void StartBindingSequence() + { + PersistenSingleton.Instance.IsBindingInput = true; + isBindingMode = true; + bindingStage = 1; + bindingTimer = Time.realtimeSinceStartup + 0.5f; + + string text = Localization.Get("ConfigBindL3"); // Don't refresh the text with dual language. + UpdateBindingDialogText(text); + + ButtonGroupState.DisableAllGroup(true); + } + + private void UpdateBindingDialogText(string newText) + { + if (bindingDialog != null) + Singleton.Instance.Close(bindingDialog.Id); + + bindingDialog = Singleton.Instance.AttachDialog( + newText, + 0, + 0, + Dialog.TailPosition.Center, + Dialog.WindowStyle.WindowStylePlain, + Vector2.zero, + Dialog.CaptionType.None + ); + } + + private void UpdateBindingLogic() + { + if (!isBindingMode || Time.realtimeSinceStartup < bindingTimer) return; + + if (Mathf.Abs(Input.GetAxis("Horizontal")) > 0.5f || Input.GetKey(KeyCode.Escape)) + { + FF9Sfx.FF9SFX_Play(102); + + if (bindingStage == 1) // L3 + { + Configuration.Control.SaveLeftStick(-1); + UpdateBindingDialogText(Localization.Get("ConfigBindL3DisabledThenR3")); // Don't refresh the text with dual language. + bindingStage = 2; + bindingTimer = Time.realtimeSinceStartup + 0.5f; + } + else if (bindingStage == 2) // R3 + { + Configuration.Control.SaveRightStick(-1); + EndBindingSequence(); + } + return; + } + + for (int i = 0; i < 20; i++) + { + KeyCode key = (KeyCode)((int)KeyCode.JoystickButton0 + i); + if (Input.GetKeyDown(key)) + { + FF9Sfx.FF9SFX_Play(1044); + int rawID = (int)key; + + if (bindingStage == 1) // L3 + { + Configuration.Control.SaveLeftStick(rawID); + UpdateBindingDialogText(Localization.Get("ConfigBindR3")); // Don't refresh the text with dual language. + bindingStage = 2; + bindingTimer = Time.realtimeSinceStartup + 0.5f; + } + else if (bindingStage == 2) + { + Configuration.Control.SaveRightStick(rawID); + EndBindingSequence(); + } + return; + } + } + } + + private void EndBindingSequence() + { + isBindingMode = false; + bindingStage = 0; + PersistenSingleton.Instance.IsBindingInput = false; + + if (bindingDialog != null) + { + Singleton.Instance.Close(bindingDialog.Id); + bindingDialog = null; + } + + ButtonGroupState.DisableAllGroup(false); + ButtonGroupState.ActiveGroup = ConfigGroupButton; + } + + private void CreateButtonFromExisting(Transform listParent, Configurator newId, String keyName, Configurator templateId, Configurator placeAfterId) + { + GameObject template = null; + int targetIndex = -1; + + for (int i = 0; i < listParent.childCount; i++) + { + var nav = listParent.GetChild(i).GetComponent(); + if (nav == null) continue; + + if (nav.ID == (int)templateId) + template = listParent.GetChild(i).gameObject; + + if (nav.ID == (int)placeAfterId) + targetIndex = i + 1; + } + + if (template != null && targetIndex != -1) + { + GameObject go = Instantiate(template); + go.name = $"{newId} Panel - Button"; + go.transform.SetParent(listParent, false); + go.transform.SetSiblingIndex(targetIndex); + + go.GetComponent().ID = (int)newId; + + UILabel lbl = go.GetComponentInChildren(); + if (lbl != null) + { + UILocalize loc = lbl.GetComponent(); + if (loc == null) loc = lbl.gameObject.AddComponent(); + loc.key = keyName; + } + } + else + { + Log.Error("[ConfigUI] Impossible de trouver le template ou l'index cible."); + } + } + private void Awake() { FadingComponent = ScreenFadeGameObject.GetComponent(); @@ -1528,6 +1678,12 @@ private void Awake() CreateATBModeSlider(sliderTemplate, Configurator.ATBMode, 9); + if (PersistenSingleton.Instance.IsControllerConnect) + { + Transform listParent = ConfigList.GetChild(1).GetChild(0).transform; + CreateButtonFromExisting(listParent, Configurator.ControllerBind, "MenuBoutonL3R3", Configurator.ControlTutorial, Configurator.Vibration); + } + foreach (Transform trans in ConfigList.GetChild(1).GetChild(0).transform) { ConfigField configField = new ConfigField(); @@ -1573,6 +1729,10 @@ private void Awake() combatTutorialGameObject = configTopObj; UIEventListener.Get(configTopObj).onClick += onClick; } + else if (configField.Configurator == Configurator.ControllerBind) + { + UIEventListener.Get(configTopObj).onClick += onClick; + } else if (configField.Configurator == Configurator.QuitGame) { quitGameGameObject = configTopObj; diff --git a/Assembly-CSharp/Global/Control.cs b/Assembly-CSharp/Global/Control.cs index 183af632f..49b78544b 100644 --- a/Assembly-CSharp/Global/Control.cs +++ b/Assembly-CSharp/Global/Control.cs @@ -9,6 +9,8 @@ // Then pressing the button Triangle triggers both the event script checks "IsButton(4096)" and "IsButton(131072)", which respectively check for the physical button "Triangle" and the logical button "Confirm" // The keyboard key's associated physical button also depends on the joystick configuration: pressing "A" triggers the same checks "IsButton(4096)" and "IsButton(131072)" +// [DV] L3 and R3 can be called with KeyCode.JoystickButton10 and KeyCode.JoystickButton11 (eg. Input.GetKeyDown(KeyCode.JoystickButton10) ) + public enum Control { Confirm, diff --git a/Assembly-CSharp/Global/Hono/HonoInputManager.cs b/Assembly-CSharp/Global/Hono/HonoInputManager.cs index 30c186060..d8e8af979 100644 --- a/Assembly-CSharp/Global/Hono/HonoInputManager.cs +++ b/Assembly-CSharp/Global/Hono/HonoInputManager.cs @@ -1141,6 +1141,59 @@ private Single GetRightAnalogVerticalNavigation() { return UnityXInput.Input.GetAxis(this.SpecificPlatformRightAnlogVerticalKey); } + public bool IsBindingInput { get; set; } = false; + public bool IsL3Pressed() + { + if (IsBindingInput) return false; + + if (Input.GetKeyDown((KeyCode)Configuration.Control.LeftStick)) + return true; + + return false; + } + + public bool IsR3Pressed() + { + if (IsBindingInput) return false; + + if (Input.GetKeyDown((KeyCode)Configuration.Control.RightStick)) + return true; + + return false; + } + + private void DebugControllerInput() // Debug to check input from joystick + { + for (int i = 0; i < 20; i++) + { + KeyCode key = KeyCode.JoystickButton0 + i; + if (UnityEngine.Input.GetKey(key)) + { + Log.Message("[DEBUG INPUT] Unity Key Pressed: " + key.ToString() + " (ID: " + (int)key + ")"); + } + } + + float triggerLeft = UnityEngine.Input.GetAxis("LeftTrigger"); // Nom défini dans l'Input Manager d'Unity + if (triggerLeft > 0.1f) + { + Log.Message("[DEBUG INPUT] Unity Axis LeftTrigger: " + triggerLeft); + } + + try + { + GamePadState state = XInputDotNetPure.GamePad.GetState(PlayerIndex.One); + + if (state.Buttons.LeftStick == ButtonState.Pressed) + Log.Message("[DEBUG INPUT] XInput: LeftStick (L3) PRESSED"); + + if (state.Buttons.RightStick == ButtonState.Pressed) + Log.Message("[DEBUG INPUT] XInput: RightStick (R3) PRESSED"); + + if (state.Triggers.Left > 0.0f) + Log.Message("[DEBUG INPUT] XInput: LeftTrigger (L2) Value: " + state.Triggers.Left); + } + catch { } + } public const Single TriggerThreshold = 0.19f; private const Single DownThreshold = 0.01f; diff --git a/Assembly-CSharp/Global/Sound/SoundPlayer.cs b/Assembly-CSharp/Global/Sound/SoundPlayer.cs index 9571cfe43..d70946bcf 100644 --- a/Assembly-CSharp/Global/Sound/SoundPlayer.cs +++ b/Assembly-CSharp/Global/Sound/SoundPlayer.cs @@ -47,7 +47,7 @@ public void FinalizePlugin() public static void StaticCreateSound(SoundProfile soundProfile) { - if (soundProfile.SoundID > 0) return; + //if (soundProfile.SoundID > 0) return; Int32 num = ISdLibAPIProxy.Instance.SdSoundSystem_CreateSound(soundProfile.BankID); if (num == 0) diff --git a/Assembly-CSharp/Global/UI/UIKey/UIKeyTrigger.cs b/Assembly-CSharp/Global/UI/UIKey/UIKeyTrigger.cs index b8091950a..d7b28d564 100644 --- a/Assembly-CSharp/Global/UI/UIKey/UIKeyTrigger.cs +++ b/Assembly-CSharp/Global/UI/UIKey/UIKeyTrigger.cs @@ -196,7 +196,7 @@ public void HandleBoosterButton(BoosterType triggerType = BoosterType.None) return; if (PersistenSingleton.Instance.State == UIManager.UIState.Title || PersistenSingleton.Instance.State == UIManager.UIState.PreEnding || (PersistenSingleton.Instance.State == UIManager.UIState.Ending || !MBG.IsNull && !MBG.Instance.IsFinishedForDisableBooster())) return; - if (UnityXInput.Input.GetKeyDown(KeyCode.F1) || triggerType == BoosterType.HighSpeedMode) + if (UnityXInput.Input.GetKeyDown(KeyCode.F1) || triggerType == BoosterType.HighSpeedMode || HonoInputManager.Instance.IsL3Pressed()) { if (!Configuration.Cheats.SpeedMode) { @@ -267,7 +267,7 @@ public void HandleBoosterButton(BoosterType triggerType = BoosterType.None) if (!FF9StateSystem.Settings.IsMasterSkill) { - PersistenSingleton.Instance.Booster.ShowWaringDialog(BoosterType.MasterSkill); + PersistenSingleton.Instance.Booster.ShowWarningDialog(BoosterType.MasterSkill); } else { @@ -284,7 +284,7 @@ public void HandleBoosterButton(BoosterType triggerType = BoosterType.None) return; } - PersistenSingleton.Instance.Booster.ShowWaringDialog(BoosterType.LvMax); + PersistenSingleton.Instance.Booster.ShowWarningDialog(BoosterType.LvMax); } if (UnityXInput.Input.GetKeyDown(KeyCode.F7) && (PersistenSingleton.Instance.State == UIManager.UIState.FieldHUD || PersistenSingleton.Instance.State == UIManager.UIState.WorldHUD || PersistenSingleton.Instance.State == UIManager.UIState.Pause)) { @@ -295,7 +295,7 @@ public void HandleBoosterButton(BoosterType triggerType = BoosterType.None) return; } - PersistenSingleton.Instance.Booster.ShowWaringDialog(BoosterType.GilMax); + PersistenSingleton.Instance.Booster.ShowWarningDialog(BoosterType.GilMax); } if (Configuration.Control.SoftReset && ((UnityXInput.Input.GetKeyDown(KeyCode.F8) && PersistenSingleton.Instance.IsPause) || SoftResetKeyPSXDown)) { // Soft Reset diff --git a/Assembly-CSharp/Memoria/Configuration/Access/Control.cs b/Assembly-CSharp/Memoria/Configuration/Access/Control.cs index d7a77f1c2..fa3dd6851 100644 --- a/Assembly-CSharp/Memoria/Configuration/Access/Control.cs +++ b/Assembly-CSharp/Memoria/Configuration/Access/Control.cs @@ -39,6 +39,19 @@ The PSX movement algorithm is different than the remaster's movement algorithm public static Boolean PSXMovementMethod => Instance._control.PSXMovementMethod; public static Boolean AlwaysCaptureGamepad => Instance._control.AlwaysCaptureGamepad; public static Boolean SwapConfirmCancel => Instance._control.SwapConfirmCancel; + public static Int32 LeftStick => Instance._control.KeyCodeLeftStick; + public static Int32 RightStick => Instance._control.KeyCodeRightStick; + public static void SaveLeftStick(Int32 id) + { + Instance._control.KeyCodeLeftStick.Value = id; + Configuration.SaveValue("Control", Instance._control.KeyCodeLeftStick); + } + + public static void SaveRightStick(Int32 id) + { + Instance._control.KeyCodeRightStick.Value = id; + Configuration.SaveValue("Control", Instance._control.KeyCodeRightStick); + } } } } diff --git a/Assembly-CSharp/Memoria/Configuration/Structure/ControlSection.cs b/Assembly-CSharp/Memoria/Configuration/Structure/ControlSection.cs index 7d5d5c8d2..5c6d2cbdd 100644 --- a/Assembly-CSharp/Memoria/Configuration/Structure/ControlSection.cs +++ b/Assembly-CSharp/Memoria/Configuration/Structure/ControlSection.cs @@ -1,5 +1,6 @@ using Memoria.Prime.Ini; using System; +using UnityEngine; namespace Memoria { @@ -38,6 +39,8 @@ private sealed class ControlSection : IniSection public readonly IniValue PSXMovementMethod; public readonly IniValue AlwaysCaptureGamepad; public readonly IniValue SwapConfirmCancel; + public readonly IniValue KeyCodeLeftStick; + public readonly IniValue KeyCodeRightStick; public ControlSection() : base(nameof(ControlSection), true) { @@ -52,6 +55,8 @@ public ControlSection() : base(nameof(ControlSection), true) PSXMovementMethod = BindBoolean(nameof(PSXMovementMethod), false); AlwaysCaptureGamepad = BindBoolean(nameof(AlwaysCaptureGamepad), true); SwapConfirmCancel = BindBoolean(nameof(SwapConfirmCancel), false); + KeyCodeLeftStick = BindInt32(nameof(KeyCodeLeftStick), 340); + KeyCodeRightStick = BindInt32(nameof(KeyCodeRightStick), 341); } } } diff --git a/Memoria.Patcher/StreamingAssets/Data/Text/LocalizationPatch.txt b/Memoria.Patcher/StreamingAssets/Data/Text/LocalizationPatch.txt index 61223ae08..07220b7a4 100644 --- a/Memoria.Patcher/StreamingAssets/Data/Text/LocalizationPatch.txt +++ b/Memoria.Patcher/StreamingAssets/Data/Text/LocalizationPatch.txt @@ -2,3 +2,7 @@ PCBasicControlTutorial0,"[STRT=310,13][IMME][IMME][FEED=10][YSUB=2][ICON=27]\n[YSUB=5][CENT=0][C8B040]Basic Controls : Controller\n\n[C8C8C8][XTAB=10]Confirm/Talk [XTAB=80]:[FEED=2][JCBT=CROSS] [XTAB=150]Pause [FEED=39][XTAB=230]:[FEED=2][JCBT=START]\n[XTAB=10]Cancel/Dash [FEED=2][XTAB=80]:[FEED=2][JCBT=CIRCLE] [XTAB=150]Toggle Help [FEED=9][XTAB=230]:[FEED=2][JCBT=SELECT]\n[XTAB=10]Menu [FEED=34][XTAB=80]:[FEED=2][JCBT=TRIANGLE] [XTAB=150]Cam Rotation [FEED=2][XTAB=230]:[FEED=2][JCBT=L1] ,[FEED=2][JCBT=R1] ,[FEED=2][ICON=645]\n[XTAB=10]Cards/Mog [XTAB=80]:[FEED=2][JCBT=SQUARE] [XTAB=150]Fix Camera[FEED=14][XTAB=230]:[FEED=2][JCBT=L2]\n[XTAB=10]Movement[FEED=51][XTAB=80]:[FEED=2][ICON=655] ,[FEED=2][ICON=262] [XTAB=150]Perspective [FEED=10][XTAB=230]:[FEED=2][JCBT=R2]\n[XTAB=10]Soft Reset[FEED=34][XTAB=70]:[FEED=2][JCBT=L1] +[FEED=2][JCBT=R1] +[FEED=2][JCBT=L2][XTAB=150]Escape Battle [XTAB=230]:[FEED=2][JCBT=L1] +[FEED=2][JCBT=R1]\n[XTAB=10][FEED=2][XTAB=70] [FEED=2][JCBT=R2] +[FEED=2][JCBT=START] +[FEED=2][JCBT=SELECT][XTAB=150]Auto-Battle [FEED=9][XTAB=230]:[FEED=2][JCBT=R2]\n\n[CENT=0]You can customize key assignment in\n[CENT=0]Menu ▸ Config ▸ Controls\n[ENDN]","[STRT=310,13][IMME][IMME][FEED=10][YSUB=2][ICON=27]\n[YSUB=5][CENT=0][C8B040]Basic Controls : Controller\n\n[C8C8C8][XTAB=10]Confirm/Talk [XTAB=80]:[FEED=2][JCBT=CROSS] [XTAB=150]Pause [FEED=39][XTAB=230]:[FEED=2][JCBT=START]\n[XTAB=10]Cancel/Dash [FEED=2][XTAB=80]:[FEED=2][JCBT=CIRCLE] [XTAB=150]Toggle Help [FEED=9][XTAB=230]:[FEED=2][JCBT=SELECT]\n[XTAB=10]Menu [FEED=34][XTAB=80]:[FEED=2][JCBT=TRIANGLE] [XTAB=150]Cam Rotation [FEED=2][XTAB=230]:[FEED=2][JCBT=L1] ,[FEED=2][JCBT=R1] ,[FEED=2][ICON=645]\n[XTAB=10]Cards/Mog [XTAB=80]:[FEED=2][JCBT=SQUARE] [XTAB=150]Fix Camera[FEED=14][XTAB=230]:[FEED=2][JCBT=L2]\n[XTAB=10]Movement[FEED=51][XTAB=80]:[FEED=2][ICON=655] ,[FEED=2][ICON=262] [XTAB=150]Perspective [FEED=10][XTAB=230]:[FEED=2][JCBT=R2]\n[XTAB=10]Soft Reset[FEED=34][XTAB=70]:[FEED=2][JCBT=L1] +[FEED=2][JCBT=R1] +[FEED=2][JCBT=L2][XTAB=150]Escape Battle [XTAB=230]:[FEED=2][JCBT=L1] +[FEED=2][JCBT=R1]\n[XTAB=10][FEED=2][XTAB=70] [FEED=2][JCBT=R2] +[FEED=2][JCBT=START] +[FEED=2][JCBT=SELECT][XTAB=150]Auto-Battle [FEED=9][XTAB=230]:[FEED=2][JCBT=R2]\n\n[CENT=0]You can customize key assignment in\n[CENT=0]Menu ▸ Config ▸ Controls\n[ENDN]","[STRT=310,13][IMME][IMME][FEED=10][YSUB=2][ICON=27]\n[YSUB=5][CENT=0][C8B040]コントローラ操作について\n\n[C8C8C8][XTAB=10]決定/話す [XTAB=85]:[FEED=2][JCBT=CIRCLE] [XTAB=150]一時停止 [FEED=39][XTAB=245]:[FEED=2][JCBT=START]\n[XTAB=10]キャンセル/走る [FEED=2][XTAB=85]:[FEED=2][JCBT=CROSS] [XTAB=150]ヘルプ表示 [FEED=9][XTAB=245]:[FEED=2][JCBT=SELECT]\n[XTAB=10]メニューを開く [FEED=34][XTAB=85]:[FEED=2][JCBT=TRIANGLE] [XTAB=150]視点を回す [FEED=2][XTAB=245]:[FEED=2][JCBT=L1] ,[FEED=2][JCBT=R1] ,[FEED=2][ICON=645]\n[XTAB=10]カード / 召喚クポ [XTAB=85]:[FEED=2][JCBT=SQUARE] [XTAB=150]視点固定 [FEED=14][XTAB=245]:[FEED=2][JCBT=L2]\n[XTAB=10]移動 [FEED=51][XTAB=70]:[FEED=2][ICON=655] ,[FEED=2][ICON=262] [XTAB=150]視点変更 [FEED=10][XTAB=245]:[FEED=2][JCBT=R2]\n[XTAB=10]ソフト再起動 [FEED=34][XTAB=70]:[FEED=2][JCBT=L1] +[FEED=2][JCBT=R1] +[FEED=2][JCBT=L2][XTAB=150] 戦闘から逃げる [XTAB=245]:[FEED=2][JCBT=L1] +[FEED=2][JCBT=R1]\n[XTAB=10][FEED=2][XTAB=70] [FEED=2][JCBT=R2] +[FEED=2][JCBT=START] +[FEED=2][JCBT=SELECT] [XTAB=150]オートバトル [FEED=9][XTAB=245]:[FEED=2][JCBT=R2]\n\n[CENT=0]キーアサインの変更\n[CENT=0]メニュー ▸ コンフィグ ▸ コントローラ\n[ENDN]","[STRT=310,13][IMME][IMME][FEED=10][YSUB=2][ICON=27]\n [YSUB=5][CENT=0][C8B040]Controles Básicos : Joystick\n \n [C8C8C8][XTAB=10]Aceptar/Hablar [XTAB=90]:[FEED=2][JCBT=CROSS] [XTAB=150]Pausa [FEED=39][XTAB=230]:[FEED=2][JCBT=START]\n [XTAB=10]Cancelar/Correr [FEED=2][XTAB=90]:[FEED=2][JCBT=CIRCLE] [XTAB=150]Ayuda [FEED=9][XTAB=230]:[FEED=2][JCBT=SELECT]\n [XTAB=10]Menú [FEED=34][XTAB=90]:[FEED=2][JCBT=TRIANGLE] [XTAB=150]Girar Cámara [FEED=2][XTAB=230]:[FEED=2][JCBT=L1] ,[FEED=2][JCBT=R1] ,[FEED=2][ICON=645]\n [XTAB=10]Cartas/Mog [XTAB=90]:[FEED=2][JCBT=SQUARE] [XTAB=150]Fijar Cámara[FEED=14][XTAB=230]:[FEED=2][JCBT=L2]\n [XTAB=10]Movimiento[FEED=51][XTAB=90]:[FEED=2][ICON=655] ,[FEED=2][ICON=262] [XTAB=150]Perspectiva [FEED=10][XTAB=230]:[FEED=2][JCBT=R2]\n [XTAB=10]Reinicio [FEED=34][XTAB=70]:[FEED=2][JCBT=L1] +[FEED=2][JCBT=R1] +[FEED=2][JCBT=L2][XTAB=150]Huir de la batalla[XTAB=240]:[FEED=2][JCBT=L1] +[FEED=2][JCBT=R1]\n [XTAB=10]Suave[FEED=2][XTAB=70] [FEED=2][JCBT=R2] +[FEED=2][JCBT=START] +[FEED=2][JCBT=SELECT][XTAB=150]Batalla automática [FEED=9][XTAB=240]:[FEED=2][JCBT=R2]\n \n [CENT=0]Puedes cambiar la asignación de teclas\n [CENT=0]en Menú ▸ Preferencias ▸ Config. mando\n [ENDN]","[STRT=310,13][IMME][IMME][FEED=10][YSUB=2][ICON=27]\n[YSUB=5][CENT=0][C8B040]Contrôles de base : Manette\n\n[C8C8C8][XTAB=10]Confirmer/Parler [XTAB=100]:[FEED=2][JCBT=CROSS] [XTAB=150]Pause [FEED=39][XTAB=230]:[FEED=2][JCBT=START]\n[XTAB=10]Annuler/Courir [FEED=2][XTAB=100]:[FEED=2][JCBT=CIRCLE] [XTAB=150]Afficher l’aide [FEED=9][XTAB=230]:[FEED=2][JCBT=SELECT]\n[XTAB=10]Menu [FEED=34][XTAB=100]:[FEED=2][JCBT=TRIANGLE] [XTAB=150]Mvts Caméra [FEED=2][XTAB=230]:[FEED=2][JCBT=L1] ,[FEED=2][JCBT=R1] ,[FEED=2][ICON=645]\n[XTAB=10]Cartes/Mog [XTAB=100]:[FEED=2][JCBT=SQUARE] [XTAB=150]Caméra fixe[FEED=14][XTAB=230]:[FEED=2][JCBT=L2]\n[XTAB=10]Mouvement[FEED=51][XTAB=80]:[FEED=2][ICON=655] ,[FEED=2][ICON=262] [XTAB=150]Angle [FEED=10][XTAB=230]:[FEED=2][JCBT=R2]\n[XTAB=10]Reset doux[FEED=34][XTAB=70]:[FEED=2][JCBT=L1] +[FEED=2][JCBT=R1] +[FEED=2][JCBT=L2][XTAB=150]Fuir [XTAB=230]:[FEED=2][JCBT=L1] +[FEED=2][JCBT=R1]\n[XTAB=10][FEED=2][XTAB=70] [FEED=2][JCBT=R2] +[FEED=2][JCBT=START] +[FEED=2][JCBT=SELECT][XTAB=150]Combat auto [FEED=9][XTAB=230]:[FEED=2][JCBT=R2]\n\n[CENT=0]Vous pouvez personnaliser l'attribution des touches dans\n[CENT=0]Menu ▸ Config ▸ Contrôles\n[ENDN]","[STRT=310,13][IMME][IMME][FEED=10][YSUB=2][ICON=27]\n[YSUB=5][CENT=0][C8B040]Grundsteuerung - Controller\n\n[C8C8C8][XTAB=10]OK/Reden [XTAB=115]:[FEED=2][JCBT=CROSS] [XTAB=150]Pause [FEED=39][XTAB=230]:[FEED=2][JCBT=START]\n[XTAB=10]Abbrechen/Rennen [FEED=2][XTAB=115]:[FEED=2][JCBT=CIRCLE] [XTAB=150]Hilfe anzeigen [FEED=9][XTAB=230]:[FEED=2][JCBT=SELECT]\n[XTAB=10]Menü aufrufen [FEED=34][XTAB=115]:[FEED=2][JCBT=TRIANGLE] [XTAB=150]Cam schwenken [FEED=2][XTAB=230]:[FEED=2][JCBT=L1] ,[FEED=2][JCBT=R1] ,[FEED=2][ICON=645]\n[XTAB=10]Karte/Mogry rufen [XTAB=115]:[FEED=2][JCBT=SQUARE] [XTAB=150]Cam Fest [FEED=14][XTAB=230]:[FEED=2][JCBT=L2]\n[XTAB=10]Bewegung [FEED=51][XTAB=80]:[FEED=2][ICON=655] ,[FEED=2][ICON=262] [XTAB=150]Perspektive [FEED=10][XTAB=230]:[FEED=2][JCBT=R2]\n[XTAB=10]Schnellstart [FEED=34][XTAB=70]:[FEED=2][JCBT=L1] +[FEED=2][JCBT=R1] +[FEED=2][JCBT=L2][XTAB=150]Fliehen! [XTAB=230]:[FEED=2][JCBT=L1] +[FEED=2][JCBT=R1]\n[XTAB=10][FEED=2][XTAB=70] [FEED=2][JCBT=R2] +[FEED=2][JCBT=START] +[FEED=2][JCBT=SELECT][XTAB=150]Auto-Kampf [FEED=9][XTAB=230]:[FEED=2][JCBT=R2]\n\n[CENT=0]Du kannst die Tastenzuordnung unter\n[CENT=0]Menü ▸ Optionen ▸ Controller ändern.\n[ENDN]","[STRT=310,13][IMME][IMME][FEED=10][YSUB=2][ICON=27]\n[YSUB=5][CENT=0][C8B040]Controlli di base : Controller\n\n[C8C8C8][XTAB=10]Conf./parla [XTAB=80]:[FEED=2][JCBT=CROSS] [XTAB=145]Pausa [FEED=39][XTAB=230]:[FEED=2][JCBT=START]\n[XTAB=10]Annulla/corri [FEED=2][XTAB=80]:[FEED=2][JCBT=CIRCLE] [XTAB=145]Aiuto [FEED=9][XTAB=230]:[FEED=2][JCBT=SELECT]\n[XTAB=10]Menu [FEED=34][XTAB=80]:[FEED=2][JCBT=TRIANGLE] [XTAB=145]Gira Vista [FEED=2][XTAB=230]:[FEED=2][JCBT=L1] ,[FEED=2][JCBT=R1] ,[FEED=2][ICON=645]\n[XTAB=10]Carte/moguri [XTAB=80]:[FEED=2][JCBT=SQUARE] [XTAB=145]Fissa Vista[FEED=14][XTAB=230]:[FEED=2][JCBT=L2]\n[XTAB=10]Movimento [FEED=51][XTAB=80]:[FEED=2][ICON=655] ,[FEED=2][ICON=262] [XTAB=145]Prospettiva [FEED=10][XTAB=230]:[FEED=2][JCBT=R2]\n[XTAB=10]Riavvio [FEED=34][XTAB=70]:[FEED=2][JCBT=L1] +[FEED=2][JCBT=R1] +[FEED=2][JCBT=L2][XTAB=145]Fuga [XTAB=230]:[FEED=2][JCBT=L1] +[FEED=2][JCBT=R1]\n[XTAB=10]Rapido [FEED=2][XTAB=70] [FEED=2][JCBT=R2] +[FEED=2][JCBT=START] +[FEED=2][JCBT=SELECT][XTAB=145]Auto-Battaglia [FEED=9][XTAB=230]:[FEED=2][JCBT=R2]\n\n[CENT=0]Puoi personalizzare l’assegnazione dei tasti in\n[CENT=0]Menu ▸ Configura ▸ Controlli\n[ENDN]" PCBasicControlTutorial1,"[STRT=310,13][IMME][IMME][FEED=10][YSUB=2][ICON=27]\n[YSUB=5][CENT=0][C8B040]Basic Controls : Controller\n\n[C8C8C8][XTAB=10]Confirm/Talk [XTAB=80]:[FEED=2][KCBT=CROSS] [XTAB=150]Pause [FEED=39][XTAB=230]:[FEED=2][KCBT=START]\n[XTAB=10]Cancel/Dash [FEED=2][XTAB=80]:[FEED=2][KCBT=CIRCLE] [XTAB=150]Toggle Help [FEED=9][XTAB=230]:[FEED=2][KCBT=SELECT]\n[XTAB=10]Menu [FEED=34][XTAB=80]:[FEED=2][KCBT=TRIANGLE] [XTAB=150]Cam Rotation [FEED=2][XTAB=230]:[FEED=2][KCBT=L1] ,[FEED=2][KCBT=R1]\n[XTAB=10]Cards/Mog [XTAB=80]:[FEED=2][KCBT=SQUARE] [XTAB=150]Fix Camera[FEED=14][XTAB=230]:[FEED=2][KCBT=L2]\n[XTAB=10]Movement[FEED=51][XTAB=80]:[FEED=2][KCBT=UP][FEED=2][KCBT=LEFT][FEED=2][KCBT=RIGHT][FEED=2][KCBT=DOWN] [XTAB=150]Perspective [FEED=10][XTAB=230]:[FEED=2][KCBT=R2]\n[XTAB=10][FEED=51][XTAB=80]:[FEED=2][ICON=632][FEED=2][ICON=633][FEED=2][ICON=634][FEED=2][ICON=635][XTAB=150]Escape Battle [XTAB=230]:[FEED=2][KCBT=L1] +[FEED=2][KCBT=R1]\n[XTAB=10][FEED=2][XTAB=70] [XTAB=150]Auto-Battle [FEED=9][XTAB=230]:[FEED=2][KCBT=R2]\n\n[CENT=0]You can customize key assignment in\n[CENT=0]Menu ▸ Config ▸ Controls\n[ENDN]","[STRT=310,13][IMME][IMME][FEED=10][YSUB=2][ICON=27]\n[YSUB=5][CENT=0][C8B040]Basic Controls : Controller\n\n[C8C8C8][XTAB=10]Confirm/Talk [XTAB=80]:[FEED=2][KCBT=CROSS] [XTAB=150]Pause [FEED=39][XTAB=230]:[FEED=2][KCBT=START]\n[XTAB=10]Cancel/Dash [FEED=2][XTAB=80]:[FEED=2][KCBT=CIRCLE] [XTAB=150]Toggle Help [FEED=9][XTAB=230]:[FEED=2][KCBT=SELECT]\n[XTAB=10]Menu [FEED=34][XTAB=80]:[FEED=2][KCBT=TRIANGLE] [XTAB=150]Cam Rotation [FEED=2][XTAB=230]:[FEED=2][KCBT=L1] ,[FEED=2][KCBT=R1]\n[XTAB=10]Cards/Mog [XTAB=80]:[FEED=2][KCBT=SQUARE] [XTAB=150]Fix Camera[FEED=14][XTAB=230]:[FEED=2][KCBT=L2]\n[XTAB=10]Movement[FEED=51][XTAB=80]:[FEED=2][KCBT=UP][FEED=2][KCBT=LEFT][FEED=2][KCBT=RIGHT][FEED=2][KCBT=DOWN] [XTAB=150]Perspective [FEED=10][XTAB=230]:[FEED=2][KCBT=R2]\n[XTAB=10][FEED=51][XTAB=80]:[FEED=2][ICON=632][FEED=2][ICON=633][FEED=2][ICON=634][FEED=2][ICON=635][XTAB=150]Escape Battle [XTAB=230]:[FEED=2][KCBT=L1] +[FEED=2][KCBT=R1]\n[XTAB=10][FEED=2][XTAB=70] [XTAB=150]Auto-Battle [FEED=9][XTAB=230]:[FEED=2][KCBT=R2]\n\n[CENT=0]You can customize key assignment in\n[CENT=0]Menu ▸ Config ▸ Controls\n[ENDN]","[STRT=310,13][IMME][IMME][FEED=10][YSUB=2][ICON=27]\n[YSUB=5][CENT=0][C8B040]コントローラ操作について\n\n[C8C8C8][XTAB=10]決定/話す [XTAB=85]:[FEED=2][KCBT=CIRCLE] [XTAB=150]一時停止 [FEED=39][XTAB=245]:[FEED=2][KCBT=START]\n[XTAB=10]キャンセル/走る [FEED=2][XTAB=85]:[FEED=2][KCBT=CROSS] [XTAB=150]ヘルプ表示 [FEED=9][XTAB=245]:[FEED=2][KCBT=SELECT]\n[XTAB=10]メニューを開く [FEED=34][XTAB=85]:[FEED=2][KCBT=TRIANGLE] [XTAB=150]視点を回す [FEED=2][XTAB=245]:[FEED=2][KCBT=L1] ,[FEED=2][KCBT=R1]\n[XTAB=10]カード / 召喚クポ [XTAB=85]:[FEED=2][KCBT=SQUARE] [XTAB=150]視点固定 [FEED=14][XTAB=245]:[FEED=2][KCBT=L2]\n[XTAB=10]移動 [FEED=51][XTAB=70]:[FEED=2][KCBT=UP][FEED=2][KCBT=LEFT][FEED=2][KCBT=RIGHT][FEED=2][KCBT=DOWN] [XTAB=150]視点変更 [FEED=10][XTAB=245]:[FEED=2][KCBT=R2]\n[XTAB=10][FEED=51][XTAB=70]:[FEED=2][ICON=632][FEED=2][ICON=633][FEED=2][ICON=634][FEED=2][ICON=635][XTAB=150] 戦闘から逃げる [XTAB=245]:[FEED=2][KCBT=L1] +[FEED=2][KCBT=R1]\n[XTAB=10][FEED=2][XTAB=70] [XTAB=150]オートバトル [FEED=9][XTAB=245]:[FEED=2][KCBT=R2]\n\n[CENT=0]キーアサインの変更\n[CENT=0]メニュー ▸ コンフィグ ▸ コントローラ\n[ENDN]","[STRT=310,13][IMME][IMME][FEED=10][YSUB=2][ICON=27]\n [YSUB=5][CENT=0][C8B040]Controles Básicos : Joystick\n \n [C8C8C8][XTAB=10]Aceptar/Hablar [XTAB=90]:[FEED=2][KCBT=CROSS] [XTAB=150]Pausa [FEED=39][XTAB=230]:[FEED=2][KCBT=START]\n [XTAB=10]Cancelar/Correr [FEED=2][XTAB=90]:[FEED=2][KCBT=CIRCLE] [XTAB=150]Ayuda [FEED=9][XTAB=230]:[FEED=2][KCBT=SELECT]\n [XTAB=10]Menú [FEED=34][XTAB=90]:[FEED=2][KCBT=TRIANGLE] [XTAB=150]Girar Cámara [FEED=2][XTAB=230]:[FEED=2][KCBT=L1] ,[FEED=2][KCBT=R1]\n [XTAB=10]Cartas/Mog [XTAB=90]:[FEED=2][KCBT=SQUARE] [XTAB=150]Fijar Cámara[FEED=14][XTAB=230]:[FEED=2][KCBT=L2]\n [XTAB=10]Movimiento[FEED=51][XTAB=80]:[FEED=2][KCBT=UP][FEED=2][KCBT=LEFT][FEED=2][KCBT=RIGHT][FEED=2][KCBT=DOWN] [XTAB=150]Perspectiva [FEED=10][XTAB=230]:[FEED=2][KCBT=R2]\n [XTAB=10][FEED=2][XTAB=70][FEED=51][XTAB=80]:[FEED=2][ICON=632][FEED=2][ICON=633][FEED=2][ICON=634][FEED=2][ICON=635][XTAB=150]Huir de la batalla[XTAB=245]:[FEED=2][KCBT=L1] +[FEED=2][KCBT=R1]\n [XTAB=10][XTAB=150]Batalla automática [FEED=9][XTAB=245]:[FEED=2][KCBT=R2]\n \n [CENT=0]Puedes cambiar la asignación de teclas\n [CENT=0]en Menú ▸ Preferencias ▸ Config. mando\n [ENDN]","[STRT=310,13][IMME][IMME][FEED=10][YSUB=2][ICON=27]\n[YSUB=5][CENT=0][C8B040]Contrôles de base : Manette\n\n[C8C8C8][XTAB=10]Confirmer/Parler [XTAB=100]:[FEED=2][KCBT=CROSS] [XTAB=150]Pause [FEED=39][XTAB=230]:[FEED=2][KCBT=START]\n[XTAB=10]Annuler/Courir [FEED=2][XTAB=100]:[FEED=2][KCBT=CIRCLE] [XTAB=150]Afficher l’aide [FEED=9][XTAB=230]:[FEED=2][KCBT=SELECT]\n[XTAB=10]Menu [FEED=34][XTAB=100]:[FEED=2][KCBT=TRIANGLE] [XTAB=150]Mvts Caméra [FEED=2][XTAB=230]:[FEED=2][KCBT=L1] ,[FEED=2][KCBT=R1]\n[XTAB=10]Cartes/Mog [XTAB=100]:[FEED=2][KCBT=SQUARE] [XTAB=150]Caméra fixe[FEED=14][XTAB=230]:[FEED=2][KCBT=L2]\n[XTAB=10]Mouvement[FEED=51][XTAB=80]:[FEED=2][KCBT=UP][FEED=2][KCBT=LEFT][FEED=2][KCBT=RIGHT][FEED=2][KCBT=DOWN] [XTAB=150]Angle [FEED=10][XTAB=230]:[FEED=2][KCBT=R2]\n[XTAB=10][FEED=51][XTAB=80]:[FEED=2][ICON=632][FEED=2][ICON=633][FEED=2][ICON=634][FEED=2][ICON=635] [XTAB=150]Fuir [XTAB=230]:[FEED=2][KCBT=L1] +[FEED=2][KCBT=R1]\n[XTAB=10][FEED=2][XTAB=70] [XTAB=150]Combat auto [FEED=9][XTAB=230]:[FEED=2][KCBT=R2]\n\n[CENT=0]Vous pouvez personnaliser l'attribution des touches dans\n[CENT=0]Menu ▸ Config ▸ Contrôles\n[ENDN]","[STRT=310,13][IMME][IMME][FEED=10][YSUB=2][ICON=27]\n[YSUB=5][CENT=0][C8B040]Grundsteuerung - Controller\n\n[C8C8C8][XTAB=10]OK/Reden [XTAB=115]:[FEED=2][KCBT=CROSS] [XTAB=150]Pause [FEED=39][XTAB=230]:[FEED=2][KCBT=START]\n[XTAB=10]Abbrechen/Rennen [FEED=2][XTAB=115]:[FEED=2][KCBT=CIRCLE] [XTAB=150]Hilfe anzeigen [FEED=9][XTAB=230]:[FEED=2][KCBT=SELECT]\n[XTAB=10]Menü aufrufen [FEED=34][XTAB=115]:[FEED=2][KCBT=TRIANGLE] [XTAB=150]Cam schwenken [FEED=2][XTAB=230]:[FEED=2][KCBT=L1] ,[FEED=2][KCBT=R1]\n[XTAB=10]Karte/Mogry rufen [XTAB=115]:[FEED=2][KCBT=SQUARE] [XTAB=150]Cam Fest [FEED=14][XTAB=230]:[FEED=2][KCBT=L2]\n[XTAB=10]Bewegung [FEED=51][XTAB=80]:[FEED=2][KCBT=UP][FEED=2][KCBT=LEFT][FEED=2][KCBT=RIGHT][FEED=2][KCBT=DOWN] [XTAB=150]Perspektive [FEED=10][XTAB=230]:[FEED=2][KCBT=R2]\n[XTAB=10][XTAB=150]Fliehen! [XTAB=230]:[FEED=2][KCBT=L1] +[FEED=2][KCBT=R1]\n[XTAB=10][FEED=2][XTAB=70][FEED=51][XTAB=115]:[FEED=2][ICON=632][FEED=2][ICON=633][FEED=2][ICON=634][FEED=2][ICON=635] [XTAB=150]Auto-Kampf [FEED=9][XTAB=230]:[FEED=2][KCBT=R2]\n\n[CENT=0]Du kannst die Tastenzuordnung unter\n[CENT=0]Menü ▸ Optionen ▸ Controller ändern.\n[ENDN]","[STRT=310,13][IMME][IMME][FEED=10][YSUB=2][ICON=27]\n[YSUB=5][CENT=0][C8B040]Controlli di base : Controller\n\n[C8C8C8][XTAB=10]Conf./parla [XTAB=80]:[FEED=2][KCBT=CROSS] [XTAB=145]Pausa [FEED=39][XTAB=230]:[FEED=2][KCBT=START]\n[XTAB=10]Annulla/corri [FEED=2][XTAB=80]:[FEED=2][KCBT=CIRCLE] [XTAB=145]Aiuto [FEED=9][XTAB=230]:[FEED=2][KCBT=SELECT]\n[XTAB=10]Menu [FEED=34][XTAB=80]:[FEED=2][KCBT=TRIANGLE] [XTAB=145]Gira Vista [FEED=2][XTAB=230]:[FEED=2][KCBT=L1] ,[FEED=2][KCBT=R1]\n[XTAB=10]Carte/moguri [XTAB=80]:[FEED=2][KCBT=SQUARE] [XTAB=145]Fissa Vista[FEED=14][XTAB=230]:[FEED=2][KCBT=L2]\n[XTAB=10]Movimento [FEED=51][XTAB=80]:[FEED=2][KCBT=UP][FEED=2][KCBT=LEFT][FEED=2][KCBT=RIGHT][FEED=2][KCBT=DOWN] [XTAB=145]Prospettiva [FEED=10][XTAB=230]:[FEED=2][KCBT=R2]\n[XTAB=10][FEED=2][XTAB=70][FEED=51][XTAB=80]:[FEED=2][ICON=632][FEED=2][ICON=633][FEED=2][ICON=634][FEED=2][ICON=635] [XTAB=145]Fuga [XTAB=230]:[FEED=2][KCBT=L1] +[FEED=2][KCBT=R1]\n[XTAB=10][XTAB=145]Auto-Battaglia [FEED=9][XTAB=230]:[FEED=2][KCBT=R2]\n\n[CENT=0]Puoi personalizzare l’assegnazione dei tasti in\n[CENT=0]Menu ▸ Configura ▸ Controlli\n[ENDN]" OrderTargetHelp,"Select same character twice to choose\n[A85038]front row or back row[383838] in battle.\nSelect two different characters to\n[A85038]switch places[383838].[ENDN]","Select same character twice to choose\n[A85038]front row or back row[383838] in battle.\nSelect two different characters to\n[A85038]switch places[383838].[ENDN]","キャラクタを選んでください。\n同じキャラクタで[A85038]前列/後列[383838]が\n別のキャラクタで[A85038]ならぶじゅんばん[383838]が\n変更されます。","Elige la misma posición para\ncambiar entre [A85038]vanguardia y\nretaguardia[383838], u otra para\nmover el personaje.","Choisissez un personnage.\nSi c’est le même, [A85038]il change de\nposition[383838]. Si c’en est un autre,\n[A85038]ils échangent leur place[383838].","Charakter wählen. Wiederholtes [CBTN=CROSS] \nverschiebt Charakter in [A85038]vordere[383838]\noder [A85038]hintere[383838] Reihe. Durch wählen\neines anderen Charakters werden\ndie [A85038]Positionen[383838] vertauscht.","Seleziona stessa posizione\nper cambiare fra [A85038]1a linea/2a\nlinea[383838] oppure un’altra posizione\nper [A85038]spostare il personaggio[383838]." +MenuBoutonL3R3,"Configure L3 & R3","Configure L3 & R3","L3・R3設定","Configurar L3 y R3","Configurer L3 & R3","L3 & R3 Konfig.","Configura L3 & R3" +ConfigBindL3,"[IMME]Press the button\n[FFFF00][CENT]>>> L3 <<<[ENDN]","[IMME]Press the button\n[FFFF00][CENT]>>> L3 <<<[ENDN]","[IMME]ボタンを押してください\n[FFFF00][CENT]>>> L3 <<<[ENDN]","[IMME]Pulsa el botón\n[FFFF00][CENT]>>> L3 <<<[ENDN]","[IMME]Appuyez sur le bouton\n[FFFF00][CENT]>>> L3 <<<[ENDN]","[IMME]Drücke die Taste\n[FFFF00][CENT]>>> L3 <<<[ENDN]","[IMME]Premi il tasto\n[FFFF00][CENT]>>> L3 <<<[ENDN]" +ConfigBindL3DisabledThenR3,"[IMME][FF0000][CENT]L3 Disabled.\n\n[C8C8C8][CENT]Press the button\n[FFFF00][CENT]>>> R3 <<<[ENDN]","[IMME][FF0000][CENT]L3 Disabled.\n\n[C8C8C8][CENT]Press the button\n[FFFF00][CENT]>>> R3 <<<[ENDN]","[IMME][FF0000][CENT]L3 Disabled.\n\n[C8C8C8][CENT]ボタンを押してください\n[FFFF00][CENT]>>> R3 <<<[ENDN]","[IMME][FF0000][CENT]L3 Desactivado.\n\n[C8C8C8][CENT]Pulsa el botón\n[FFFF00][CENT]>>> R3 <<<[ENDN]","[IMME][FF0000][CENT]L3 Désactivé.\n\n[C8C8C8][CENT]Appuyez sur le bouton\n[FFFF00][CENT]>>> R3 <<<[ENDN]","[IMME][FF0000][CENT]L3 Deaktiviert.\n\n[C8C8C8][CENT]Drücke die Taste\n[FFFF00][CENT]>>> R3 <<<[ENDN]","[IMME][FF0000][CENT]L3 Disattivato.\n\n[C8C8C8][CENT]Premi il tasto\n[FFFF00][CENT]>>> R3 <<<[ENDN]" +ConfigBindR3,"[IMME][CENT]L3 Saved!\n\n[C8C8C8][CENT]Press the button\n[FFFF00][CENT]>>> R3 <<<[ENDN]","[IMME][CENT]L3 Saved!\n\n[C8C8C8][CENT]Press the button\n[FFFF00][CENT]>>> R3 <<<[ENDN]","[IMME][CENT]L3 Saved!\n\n[C8C8C8][CENT]ボタンを押してください\n[FFFF00][CENT]>>> R3 <<<[ENDN]","[IMME][CENT]L3 Guardado!\n\n[C8C8C8][CENT]Pulsa el botón\n[FFFF00][CENT]>>> R3 <<<[ENDN]","[IMME][CENT]L3 Enregistré !\n\n[C8C8C8][CENT]Appuyez sur le bouton\n[FFFF00][CENT]>>> R3 <<<[ENDN]","[IMME][CENT]L3 Gespeichert!\n\n[C8C8C8][CENT]Drücke die Taste\n[FFFF00][CENT]>>> R3 <<<[ENDN]","[IMME][CENT]L3 Salvato!\n\n[C8C8C8][CENT]Premi il tasto\n[FFFF00][CENT]>>> R3 <<<[ENDN]" \ No newline at end of file From 94760bd2ac14a5e8d622e2c83ecb0fc88f2a6637 Mon Sep 17 00:00:00 2001 From: DV666 Date: Wed, 11 Feb 2026 21:31:51 +0100 Subject: [PATCH 2/7] KeyCodeLeftStick and KeyCodeRightStick disable by default ? --- .../Memoria/Configuration/Structure/ControlSection.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assembly-CSharp/Memoria/Configuration/Structure/ControlSection.cs b/Assembly-CSharp/Memoria/Configuration/Structure/ControlSection.cs index 5c6d2cbdd..dc706b749 100644 --- a/Assembly-CSharp/Memoria/Configuration/Structure/ControlSection.cs +++ b/Assembly-CSharp/Memoria/Configuration/Structure/ControlSection.cs @@ -55,8 +55,8 @@ public ControlSection() : base(nameof(ControlSection), true) PSXMovementMethod = BindBoolean(nameof(PSXMovementMethod), false); AlwaysCaptureGamepad = BindBoolean(nameof(AlwaysCaptureGamepad), true); SwapConfirmCancel = BindBoolean(nameof(SwapConfirmCancel), false); - KeyCodeLeftStick = BindInt32(nameof(KeyCodeLeftStick), 340); - KeyCodeRightStick = BindInt32(nameof(KeyCodeRightStick), 341); + KeyCodeLeftStick = BindInt32(nameof(KeyCodeLeftStick), -1); + KeyCodeRightStick = BindInt32(nameof(KeyCodeRightStick), -1); } } } From 9ee2621af5d465e1c4837eb9b4eb156f4ebab953 Mon Sep 17 00:00:00 2001 From: DV666 Date: Wed, 11 Feb 2026 21:44:52 +0100 Subject: [PATCH 3/7] Rollback SoundPlayer (not related for this PR) --- Assembly-CSharp/Global/Sound/SoundPlayer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assembly-CSharp/Global/Sound/SoundPlayer.cs b/Assembly-CSharp/Global/Sound/SoundPlayer.cs index d70946bcf..9571cfe43 100644 --- a/Assembly-CSharp/Global/Sound/SoundPlayer.cs +++ b/Assembly-CSharp/Global/Sound/SoundPlayer.cs @@ -47,7 +47,7 @@ public void FinalizePlugin() public static void StaticCreateSound(SoundProfile soundProfile) { - //if (soundProfile.SoundID > 0) return; + if (soundProfile.SoundID > 0) return; Int32 num = ISdLibAPIProxy.Instance.SdSoundSystem_CreateSound(soundProfile.BankID); if (num == 0) From bdb972c444a6632e4c01f5c8b80d3baddff4b1cb Mon Sep 17 00:00:00 2001 From: DV666 Date: Wed, 11 Feb 2026 21:54:31 +0100 Subject: [PATCH 4/7] Code cleaning. --- Assembly-CSharp/Global/Hono/HonoInputManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assembly-CSharp/Global/Hono/HonoInputManager.cs b/Assembly-CSharp/Global/Hono/HonoInputManager.cs index d8e8af979..1b01ce373 100644 --- a/Assembly-CSharp/Global/Hono/HonoInputManager.cs +++ b/Assembly-CSharp/Global/Hono/HonoInputManager.cs @@ -1173,7 +1173,7 @@ private void DebugControllerInput() // Debug to check input from joystick } } - float triggerLeft = UnityEngine.Input.GetAxis("LeftTrigger"); // Nom défini dans l'Input Manager d'Unity + float triggerLeft = UnityEngine.Input.GetAxis("LeftTrigger"); if (triggerLeft > 0.1f) { Log.Message("[DEBUG INPUT] Unity Axis LeftTrigger: " + triggerLeft); From dfdb57f0895de93a2f46535999807de59c6e5ad3 Mon Sep 17 00:00:00 2001 From: DV666 Date: Sat, 14 Feb 2026 16:29:58 +0100 Subject: [PATCH 5/7] Memoria.ini updated. --- Assembly-CSharp/Memoria/Configuration/Memoria.ini | 2 ++ Memoria.Launcher/Ini/Memoria.ini | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Assembly-CSharp/Memoria/Configuration/Memoria.ini b/Assembly-CSharp/Memoria/Configuration/Memoria.ini index d7204c71c..9f487ffb3 100644 --- a/Assembly-CSharp/Memoria/Configuration/Memoria.ini +++ b/Assembly-CSharp/Memoria/Configuration/Memoria.ini @@ -123,6 +123,8 @@ PSXScrollingMethod = 1 PSXMovementMethod = 1 AlwaysCaptureGamepad = 1 SwapConfirmCancel = 0 +KeyCodeLeftStick = -1 +KeyCodeRightStick = -1 [AnalogControl] ; StickThreshold (default 10) 0->100, threshold under which there is no movement diff --git a/Memoria.Launcher/Ini/Memoria.ini b/Memoria.Launcher/Ini/Memoria.ini index d7204c71c..9f487ffb3 100644 --- a/Memoria.Launcher/Ini/Memoria.ini +++ b/Memoria.Launcher/Ini/Memoria.ini @@ -123,6 +123,8 @@ PSXScrollingMethod = 1 PSXMovementMethod = 1 AlwaysCaptureGamepad = 1 SwapConfirmCancel = 0 +KeyCodeLeftStick = -1 +KeyCodeRightStick = -1 [AnalogControl] ; StickThreshold (default 10) 0->100, threshold under which there is no movement From 2f2bbd7e733c7a3d02f3581cc89458026a68628a Mon Sep 17 00:00:00 2001 From: DV666 Date: Sat, 14 Feb 2026 16:40:23 +0100 Subject: [PATCH 6/7] Fix a critical issue at the init --- Assembly-CSharp/Global/Hono/HonoInputManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assembly-CSharp/Global/Hono/HonoInputManager.cs b/Assembly-CSharp/Global/Hono/HonoInputManager.cs index 1b01ce373..a1a602a6c 100644 --- a/Assembly-CSharp/Global/Hono/HonoInputManager.cs +++ b/Assembly-CSharp/Global/Hono/HonoInputManager.cs @@ -1144,7 +1144,7 @@ private Single GetRightAnalogVerticalNavigation() public bool IsBindingInput { get; set; } = false; public bool IsL3Pressed() { - if (IsBindingInput) return false; + if (IsBindingInput || Configuration.Control.LeftStick == -1) return false; if (Input.GetKeyDown((KeyCode)Configuration.Control.LeftStick)) return true; @@ -1154,7 +1154,7 @@ public bool IsL3Pressed() public bool IsR3Pressed() { - if (IsBindingInput) return false; + if (IsBindingInput || Configuration.Control.RightStick == -1) return false; if (Input.GetKeyDown((KeyCode)Configuration.Control.RightStick)) return true; From 466eaaa94d98cfd15c868f236e87e86b128e2118 Mon Sep 17 00:00:00 2001 From: DV666 Date: Fri, 20 Feb 2026 19:26:09 +0100 Subject: [PATCH 7/7] R3 bind by default on TurboDialog --- Assembly-CSharp/Global/UI/UIKey/UIKeyTrigger.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assembly-CSharp/Global/UI/UIKey/UIKeyTrigger.cs b/Assembly-CSharp/Global/UI/UIKey/UIKeyTrigger.cs index d7b28d564..7f936eafc 100644 --- a/Assembly-CSharp/Global/UI/UIKey/UIKeyTrigger.cs +++ b/Assembly-CSharp/Global/UI/UIKey/UIKeyTrigger.cs @@ -351,7 +351,7 @@ public void HandleBoosterButton(BoosterType triggerType = BoosterType.None) SceneDirector.Replace("Title", SceneTransition.FadeOutToBlack_FadeIn, true); return; } - if (UnityXInput.Input.GetKeyDown(KeyCode.F9) && Configuration.Control.TurboDialog) + if ((UnityXInput.Input.GetKeyDown(KeyCode.F9) || HonoInputManager.Instance.IsR3Pressed()) && Configuration.Control.TurboDialog) { if (TurboKey) TurboKey = false;