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

120 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 |
| `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 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 | | `0x1A``0x1D` | 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 |
| `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.