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>
120 lines
5.1 KiB
Markdown
120 lines
5.1 KiB
Markdown
# 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.
|