KB convention: bindings.txt grammar is a compatibility surface (player customizations must survive upgrades)

This commit is contained in:
arcattack
2026-07-24 12:07:45 -05:00
parent ef9a648c89
commit a235e2464d
+17
View File
@@ -97,6 +97,23 @@ mech turning after release). Fix: per-binding previous-value arrays (`previousP
the #24 rule, axis edition: disconnect-while-deflected releases direct channels (Throttle
keeps the last lever position -- freeze beats all-stop mid-fight).
## CONVENTION: bindings.txt format is a COMPATIBILITY SURFACE (2026-07-24)
Players customize `contentindings.txt` (keys, pad, joystick/HOTAS rows) and the file is
NOT shipped in the zip (untracked -> survives extract-over-top upgrades). That only works if
the grammar stays stable across versions, so:
- **Never rename or repurpose** existing verbs (`key`/`pad`/`padaxis`/`joydev`/`joyaxis`/
`joybutton`/`joyhat`), channel names (`Throttle`/`JoystickX`/`JoystickY`/`LeftPedal`/
`RightPedal`/`Turn`), pad/axis token names, or option words (`invert`/`slew`/`deflect`/
`set`/`deadzone`). A parse change that rejects a previously-valid line silently breaks a
player's setup mid-upgrade.
- **New features = NEW row types or NEW trailing options** (the parser already skips unknown
lines with a logged warning -- old builds degrade gracefully on newer files too).
- Semantics of existing rows must stay put (e.g. deflect = spring, slew = lever, direct pad
axis = outside-deadzone-owns + release edge). If a semantic MUST change, gate it behind a
new option word and keep the bare form as-was.
- The BT_JOYCONFIG wizard writes only between its `# >>> BT_JOYCONFIG` markers -- keep that
contract so hand edits and wizard reruns coexist.
## Generic joysticks / HOTAS / pedals -- DirectInput 8 layer (2026-07-23) [T2 rig-verified; awaiting stick hardware]
Tester ask: configure non-Xbox controllers. **`L4JOY.cpp/.h`** (all builds, lazy-init): DI8
enumeration of every non-XInput game device (up to 4), `c_dfDIJoystick2` polling with