Files
BT411/docs/CONTROLS.md
T
CydandClaude Opus 5 02b1b50e45 RGB keyboard lamp mirror + the shipped controls reference
KEYBOARD LAMP MIRROR (L4KEYLIGHT).  Ported from RP412, itself a port of vRIO's
KeyboardLampMirror.  Keys bound to a lamp address in bindings.txt glow with the
panel palette through Windows Dynamic Lighting -- yellow for the map's side
columns (0x10-0x1F), red for the rest -- flashing in step with the on-screen
buttons (its LampLevel copy matches the FIXED BTLampBrightnessOf).  Per-key
boards light each bound key; zone-lit boards mirror the strongest lamp
board-wide.  All WinRT runs on a private worker thread: watcher, claim, and a
100 ms paint loop that repaints only on change.

RP412's packing hazard does NOT transfer: it forces default struct packing there
because its engine is /Zp1, which would break the WinRT ABI.  BT411's BT_OPTS
carries no /Zp, so only the dialect flags are needed -- /std:c++17
/permissive- per-file, since the project otherwise builds C++14 /permissive.
The scalars-only interface is kept anyway so the isolation survives if packing
is ever added.

Wired in PadRIO: map built from bindings.keyBindings (ActionButton binds only,
first-binding-wins per key), fed from PadRIO::SetLamp, stopped in the dtor
(which hands the LEDs back to Windows).  BT_KEYLIGHT=0 opts out; a machine
without Dynamic Lighting logs once and stays dormant.

Verified live: claimed this machine's 24-zone keyboard and mirrors 25 bound
keys; BT_KEYLIGHT=0 and the pod profile produce zero keylight lines and run
clean.

SHIPPED CONTROLS REFERENCE.  docs/CONTROLS.md carries the keyboard table plus
the full 72-BUTTON POD MAP, grouped by the display each bank surrounds, with the
coolant-valve detent warning (1-5-50-CLOSED, one press past max shuts the loop)
and the jam/eject procedure.  mkdist flattens it to ASCII as CONTROLS.txt at the
zip root, the README's own idiom.  players/README.txt gained pointers to it, to
environ.ini, to -fit, and to the RGB mirror.

KB: context/glass-cockpit.md and docs/GLASS_COCKPIT.md updated for the whole
branch -- layout modes, L4RIOBANK and the under-glass rule, the letterbox fit
and its ordering trap, player-tunable displays, the measured legend grid, the
closed dead-button backlog, and this mirror.

Verified: five-mode regression (surround/exploded/dock/pod/dev) boots and
simulates with zero faults; mkdist writes a 5149-byte pure-ASCII CONTROLS.txt.

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

5.1 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

Key Action Key Action
W/S or ↑/↓ throttle lever X or NumPad5 all stop
A/D or ←/→ turn pedals Alt reverse thrust
Q/E torso twist Shift throttle up
R/F torso aim NumPad 8/2/4/6 torso aim/twist
1 or Space main trigger 2 middle thumb
3 or Ctrl upper thumb (missiles) 4 pinky
V external camera B look behind
M control mode (BAS/MID/ADV) N schematic
J/K/L MFD preset pages H (hold) coolant flush
C cycle a coolant valve G (hold) + fire regroup a weapon
/ = volume down/up F5F9 generator select / mode

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

Numpad aim keys need NumLock ON.

Control mode (BAS/MID/ADV, the M key) is not the menu's experience setting (novice/standard/veteran/expert). That one changes the simulation — heat, damage — not your controls.


The cockpit panel — all 72 pod buttons

Each display carries the bank of buttons mounted around it in the real cabinet. Click anywhere on a display: the buttons reach under the glass, so the whole screen is a press target and only the lit strip at the edge shows.

Heat / coolant display — the loop controls

Button Action
0x28 Balance coolant — equalise every condenser valve
0x290x2F the six condenser valves (Cond 6…1) and the coolant flush (0x2C, hold)

⚠ The valve 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 — the supply is shared.

Weapon and engineering displays

Bank Display
0x000x07 Right Weapons (lower right)
0x080x0F Left Weapons (lower left)
0x200x27 Engineering (upper centre)
0x300x37 Comm / target hotbox (upper right) — pilot select

Each display's buttons are page-gated: on the Quad page the outer buttons jump straight to a populated Eng page; on an Eng page they drive the subsystem shown — generator select AD, bus mode, coolant toggle, trigger configure, and eject (tap to clear a jam, hold ~3 s to jettison a burning ammo bay).

Map / radar — the side columns

Button Action Button Action
0x10 map zoom in 0x18 cycle control mode (BAS/MID/ADV)
0x11 map zoom out 0x1A0x1D generator AD on/off
0x12 thermal / IR sight 0x16,0x17,0x19,0x1E,0x1F no function (as shipped in 1995)
0x13 crouch
0x14 searchlight
0x15 cycle display mode

Flight controls

Button Action
0x3D panic / config lamp
0x3F throttle head — reverse thrust
0x40 main trigger
0x410x44 hat: behind / torso centre / right / left
0x450x47 pinky, middle thumb, upper thumb — the mappable fire buttons
0x380x3C, 0x3E intercom and door lines — no function on a desktop

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.