Files
BT411/docs/CONTROLS.md
T
CydandClaude Opus 5 5f88a4eeb2 The keyboard becomes the button board (RP412 bindings port) + a controls page
Ported RP412's bindings design and made it the DEFAULT: the letter and number
rows are the MFD button banks laid out WHERE THEY SIT ON THE PANEL, flight
moves to the numpad so the board stays free, F1-F12 are the map's two columns,
and G/B stay unbound as the physical gap between the lower clusters.  Expressed
in BT's OWN grammar (slew/deflect/set, the Turn channel) -- bindings.txt is a
documented compatibility surface and was not touched.

Coverage: 61 of 72 addresses on the keyboard, and the 11 absent ones are
exactly those the pod never wired (0x16/0x17/0x1E/0x1F column gaps, 0x38-0x3E
intercom/door).  All 72 stay clickable on the panel.

It lands on BT's addresses unreasonably well: 1-4 + QWER are the ENTIRE coolant
system (Condensers 1-6, flush, balance), F6/F7 the display and control-mode
cycles, F9-F12 Generators A-D, F4 the crouch button reconstructed earlier
today.

THE DELIBERATE COST.  A bound key is removed from the authentic 1995
typed-hotkey channel so it cannot double-dispatch, and this board binds nearly
everything -- so 5 (Quad page), z (Eng1), t/y/u/i/o (pilot select) and +/-
(target zoom) are given up.  Unbind a key to get its 1995 meaning back.
Documented in the file header, the markdown and the page.

NEW RULE: A BINDINGS ROW WINS OVER A BUILT-IN CONVENIENCE KEY
(PadRIO::KeyHasBinding).  V and J/K/L are board buttons now, and those polls
read GetAsyncKeyState directly -- without this they would have fired BOTH the
button and the built-in.  View toggle lives on BACKTICK alone.

CONTROLS.MAP rewritten to mirror the board so glass/pod/dev still feel
identical (the 2026-07-21 settlement): 90 bindings, 0 parse complaints.

HAT LABELS CORRECTED [T1].  INPUT_PATH_AUDIT flagged 0x41-0x44 and was right.
Settled from the streamed mapping (BT_CTRLMAP_LOG): elem 66 -> subsys 17
attrID 14, i.e. 0x42 is the TORSO subsystem, not a look; 0x44/0x43/0x41 are the
mapper's LookLeft/LookRight/LookBehind (attrID 10/11/12).  The .RES has no
"TORSO CENTER" string -- its names are LookBehind/Down/Forward/Left/Right -- so
the audit's wording was loose but its substance correct.  Swept L4GLASSWIN,
L4PADPANEL and L4VB16.

docs/CONTROLS.html: interactive keyboard (hover a key for its address and
meaning, MFD clusters outlined), pad diagram, panel map, the under-glass
press-target figure, radar placement thumbnails and the environ.ini table --
modelled on RP412's page, rewritten for BT's addresses and hazards.  mkdist
wraps the fragment in a doctype/charset shell and ships it beside CONTROLS.txt.

Verified: bindings.txt regenerates and loads (74 keys, 0 errors); CONTROLS.MAP
90 bindings, 0 errors; 72/72 panel addresses still dispatch; surround /
exploded / dock / pod / dev boot and simulate with zero faults.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 03:23:27 -05:00

4.9 KiB
Raw Blame History

BattleTech 4.11 — controls reference

Two ways to fly: the keyboard/pad (the ~25 core actions) and the cockpit panel, where every one of the pod's 72 illuminated buttons is mouse-clickable exactly where it sat in the cabinet. Left-click presses; right-click latches a button held.

Rebind keys in content\bindings.txt (delete it to regenerate the defaults). Cockpit layout and display sizes live in content\environ.ini (likewise self-documenting).


Keyboard — the keyboard IS the button board

The letter and number rows are the MFD button banks, laid out where they sit on the panel. Flight lives on the number pad so the board stays free.

Flight — the number pad

Key Action Key Action
NumPad 8 / 2 torso aim up / down NumPad 7 / 9 left / right pedal
NumPad 4 / 6 torso twist left / right NumPad 5 all stop
NumPad 0, Space main trigger NumPad 1 / 3 / . pinky / middle / upper
Shift / Ctrl throttle up / down (the lever sticks) Alt reverse thrust
← ↓ → look left / behind / right torso centre
` cockpit / chase camera / = (see below)

You spawn in BASIC control mode. In BASIC the stick steers and the pedals do nothing. Press F7 once for MID, where the pedals steer and the stick twists the torso — the full pod experience. If "turning doesn't work", this is why.

The panel — letter and number rows

  UPPER DISPLAYS   Heat / coolant      Engineering        Comm / hotbox
   top row       1   2   3   4  |  5   6   7   8  |  9   0   -   =
   bottom row    Q   W   E   R  |  T   Y   U   I  |  O   P   [   ]
                  0x2F..0x2C        0x27..0x24        0x37..0x34
                  0x2B..0x28        0x23..0x20        0x33..0x30

  LOWER DISPLAYS  Left Weapons                        Right Weapons
   top row       A   S   D   F      (G unbound)     H   J   K   L
   bottom row    Z   X   C   V      (B unbound)     N   M   ,   .
                  0x0F..0x0C                          0x07..0x04
                  0x0B..0x08                          0x03..0x00

  COLUMNS beside the map
   left    F1 zoom+  F2 zoom-  F3 thermal  F4 CROUCH  F5 lamp  F6 display
   right   F7 control mode  F8 -  F9..F12 Generators A-D

G and B are deliberately unbound: they are the physical gap between the lower clusters.

1 2 3 Q W E are the coolant valves and the detents run 1 - 5 - 50 (max) - 0 (CLOSED) - back to 1. One press past max shuts that loop off and everything on it overheats; boosting one loop starves the others, since the supply is shared. 4 is the flush (hold it) and R re-balances every valve.

The weapon and engineering displays are page-gated: on the Quad page the outer buttons jump to a populated Eng page; on an Eng page they drive generator select A-D, bus mode, coolant toggle, trigger configure, and eject (tap to clear a jam, hold ~3 s to jettison a burning ammo bay before it detonates).

What a bound key gives up

Binding a key removes it from the authentic 1995 typed-hotkey channel so it cannot double-dispatch. This board binds nearly everything, so those hotkeys are given up by design: 5 = MFD1 Quad page, z = MFD3 Eng1, t/y/u/i/o = pilot select, +/- = target zoom. Unbind a key in bindings.txt to get its 1995 meaning back. Same rule for the built-ins: ` is the view toggle (V is a board button now), and J/K/L cycle the MFD preset pages only while unbound.

Addresses with no function at all — the pod never wired them — are 0x16 0x17 0x19 0x1E 0x1F and 0x38-0x3E.

Controllers

An Xbox controller works out of the box.

Flight sticks, HOTAS and pedals: run joyconfig.bat once. A wizard asks you to move each control in turn — stick, twist, throttle, fire buttons — writes the bindings, and drops you into the solo menu to try them. It only rewrites its own section of bindings.txt, so hand edits elsewhere in the file survive.

RGB keyboards with Windows Dynamic Lighting mirror the panel: any key you have bound to a lamp button glows in the panel's own colours and flashes in step with the on-screen buttons. Turn it off with BT_KEYLIGHT=0 in environ.ini.


Cockpit layout

Set these in content\environ.ini:

  • BT_MFD_SCALE (and _UL/_UC/_UR/_LL/_LR) — size of the five MFDs, as a percentage of their pod size. Turn them up if you want to actually read them while you fly.
  • BT_RADAR_SCALE, BT_RADAR_POS — size the map, and move it out of the middle of the road: CENTER, LEFT, RIGHT, MIDLEFT, MIDRIGHT.
  • BT_GLASS_PANELS=1 — break every display out into its own desktop window instead of the composited cockpit. Good for reading one display at full size.

Run with -fit for a borderless window over the whole monitor. The cockpit scales to any window shape at one uniform scale, so nothing ever stretches — a window that isn't the cockpit's shape just gets black bars.