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>
5.1 KiB
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 | F5–F9 | 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 |
0x29–0x2F |
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 |
|---|---|
0x00–0x07 |
Right Weapons (lower right) |
0x08–0x0F |
Left Weapons (lower left) |
0x20–0x27 |
Engineering (upper centre) |
0x30–0x37 |
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 A–D, 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 | 0x1A–0x1D |
generator A–D 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 |
0x41–0x44 |
hat: behind / torso centre / right / left |
0x45–0x47 |
pinky, middle thumb, upper thumb — the mappable fire buttons |
0x38–0x3C, 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.