diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index c0ac79e449..0a7d838aa2 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -50,6 +50,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
/// Custom Keybindings
var/list/key_bindings = list()
+ /// List with a key string associated to a list of keybindings. Unlike key_bindings, this one operates on raw key, allowing for binding a key that triggers regardless of if a modifier is depressed as long as the raw key is sent.
+ var/list/modless_key_bindings = list()
var/tgui_fancy = TRUE
@@ -1098,6 +1100,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
Input mode is the closest thing to the old input system.
\
IMPORTANT: While in input mode's non hotkey setting (tab toggled), Ctrl + KEY will send KEY to the keybind system as the key itself, not as Ctrl + KEY. This means Ctrl + T/W/A/S/D/all your familiar stuff still works, but you \
won't be able to access any regular Ctrl binds.
"
+ dat += "
Modifier-Independent binding - This is a singular bind that works regardless of if Ctrl/Shift/Alt are held down. For example, if combat mode is bound to C in modifier-independent binds, it'll trigger regardless of if you are \
+ holding down shift for sprint. Each keybind can only have one independent binding, and each key can only have one keybind independently bound to it."
// Create an inverted list of keybindings -> key
var/list/user_binds = list()
for (var/key in key_bindings)
@@ -1110,21 +1114,23 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/datum/keybinding/kb = GLOB.keybindings_by_name[name]
kb_categories[kb.category] += list(kb)
- dat += "