From 1a855e5061b5dd1c7362737d5effc364dfb37de6 Mon Sep 17 00:00:00 2001
From: Verwex <34553484+Verwex@users.noreply.github.com>
Date: Thu, 7 Aug 2025 21:13:37 +0200
Subject: [PATCH] Freeplay Change Mode Keybind
The Co-Op Mode Switch has been given its own keybind, approved by Frakits.
FOR TRANSLATORS:
The translation string in Options.xml is category.ui.changeMode
---
assets/languages/en/Options.xml | 1 +
assets/languages/pl/Options.xml | 1 +
source/funkin/backend/system/Controls.hx | 6 ++++++
source/funkin/menus/FreeplayState.hx | 10 +++++++---
source/funkin/options/Options.hx | 3 +++
source/funkin/options/keybinds/KeybindsOptions.hx | 4 ++++
6 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/assets/languages/en/Options.xml b/assets/languages/en/Options.xml
index 48e4d88b..68862bac 100644
--- a/assets/languages/en/Options.xml
+++ b/assets/languages/en/Options.xml
@@ -42,6 +42,7 @@
Back
Reset
Pause
+ Change Mode
Engine
diff --git a/assets/languages/pl/Options.xml b/assets/languages/pl/Options.xml
index e70c6e16..d5fb2d34 100644
--- a/assets/languages/pl/Options.xml
+++ b/assets/languages/pl/Options.xml
@@ -38,6 +38,7 @@
Wstecz
Reset
Pauza
+ ZmieĆ Tryb
Silnik
diff --git a/source/funkin/backend/system/Controls.hx b/source/funkin/backend/system/Controls.hx
index 5f6f8f98..a7a540c2 100644
--- a/source/funkin/backend/system/Controls.hx
+++ b/source/funkin/backend/system/Controls.hx
@@ -22,6 +22,7 @@ enum Control
ACCEPT;
BACK;
PAUSE;
+ CHANGE_MODE;
//CHEAT;
SWITCHMOD;
@@ -145,6 +146,11 @@ class Controls extends FlxActionSet
@:pressed("reset") public var RESET_HOLD(get, set): Bool;
@:justReleased("reset") public var RESET_R(get, set): Bool;
+ @:gamepad([FlxGamepadInputID.BACK]) // select button
+ @:justPressed("change-mode") public var CHANGE_MODE(get, set): Bool;
+ @:pressed("change-mode") public var CHANGE_MODE_HOLD(get, set): Bool;
+ @:justReleased("change-mode") public var CHANGE_MODE_R(get, set): Bool;
+
//@:gamepad([])
//@:justPressed("cheat") public var CHEAT(get, set): Bool;
//@:pressed("cheat") public var CHEAT_HOLD(get, set): Bool;
diff --git a/source/funkin/menus/FreeplayState.hx b/source/funkin/menus/FreeplayState.hx
index 4b5b9115..e02c34aa 100644
--- a/source/funkin/menus/FreeplayState.hx
+++ b/source/funkin/menus/FreeplayState.hx
@@ -53,7 +53,7 @@ class FreeplayState extends MusicBeatState
public var diffText:FlxText;
/**
- * Text containing the current coop/opponent mode ([TAB] Co-Op mode)
+ * Text containing the current coop/opponent mode ([KEYBINDS] Co-Op mode)
*/
public var coopText:FlxText;
@@ -237,7 +237,7 @@ class FreeplayState extends MusicBeatState
if (canSelect) {
changeSelection((controls.UP_P ? -1 : 0) + (controls.DOWN_P ? 1 : 0) - FlxG.mouse.wheel);
changeDiff((controls.LEFT_P ? -1 : 0) + (controls.RIGHT_P ? 1 : 0));
- changeCoopMode((FlxG.keys.justPressed.TAB ? 1 : 0)); // TODO: make this configurable
+ changeCoopMode((controls.CHANGE_MODE ? 1 : 0)); // TODO: make this configurable
// putting it before so that its actually smooth
updateOptionsAlpha();
}
@@ -430,7 +430,11 @@ class FreeplayState extends MusicBeatState
updateScore();
- var key = "[TAB] "; // TODO: make this configurable
+ var coopBinds = [CoolUtil.keyToString(Options.P1_CHANGE_MODE[0]), CoolUtil.keyToString(Options.P2_CHANGE_MODE[0])].filter(x -> x != "---");
+ if (coopBinds.length == 2 && coopBinds[1] == coopBinds[0]) coopBinds.pop();
+ else if (coopBinds.length == 0) coopBinds.push("---");
+
+ var key = '[${coopBinds.join(" / ")}] ';
if (bothEnabled) {
coopText.text = key + coopLabels[curCoopMode];
diff --git a/source/funkin/options/Options.hx b/source/funkin/options/Options.hx
index 20432b55..c6c61a41 100644
--- a/source/funkin/options/Options.hx
+++ b/source/funkin/options/Options.hx
@@ -117,6 +117,7 @@ class Options
public static var P1_ACCEPT:Array = [ENTER];
public static var P1_BACK:Array = [BACKSPACE];
public static var P1_PAUSE:Array = [ENTER];
+ public static var P1_CHANGE_MODE:Array = [TAB];
// Misc
public static var P1_RESET:Array = [R];
@@ -148,6 +149,7 @@ class Options
public static var P2_ACCEPT:Array = [SPACE];
public static var P2_BACK:Array = [ESCAPE];
public static var P2_PAUSE:Array = [ESCAPE];
+ public static var P2_CHANGE_MODE:Array = [];
// Misc
public static var P2_RESET:Array = [];
@@ -179,6 +181,7 @@ class Options
public static var SOLO_ACCEPT(get, null):Array;
public static var SOLO_BACK(get, null):Array;
public static var SOLO_PAUSE(get, null):Array;
+ public static var SOLO_CHANGE_MODE(get, null):Array;
// Misc
public static var SOLO_RESET(get, null):Array;
diff --git a/source/funkin/options/keybinds/KeybindsOptions.hx b/source/funkin/options/keybinds/KeybindsOptions.hx
index c2edc5f3..0ae12058 100644
--- a/source/funkin/options/keybinds/KeybindsOptions.hx
+++ b/source/funkin/options/keybinds/KeybindsOptions.hx
@@ -97,6 +97,10 @@ class KeybindsOptions extends MusicBeatSubstate {
name: translate("ui.pause"),
control: 'PAUSE'
},
+ {
+ name: translate("ui.changeMode"),
+ control: 'CHANGE_MODE'
+ },
]
},
{