diff --git a/docs/CONTROL-PRESETS.md b/docs/CONTROL-PRESETS.md
index 35ba094..7a57343 100644
--- a/docs/CONTROL-PRESETS.md
+++ b/docs/CONTROL-PRESETS.md
@@ -101,6 +101,37 @@ Both paths therefore move the lamps, because `PresetEnable` announces the
change itself through the virtual `NotifyOfPresetChange` (`:733`) rather
than leaving it to the switch handler — see §7.
+### One mask, two consumers
+
+The live mask is a single 32-bit word on the `ModeManager`
+(`MUNGA/MODE.h:65`), seeded once with `ModeInitial` — `ModeNonConfig |
+ModeBasic`, **0x201** — at `RP_L4/RPL4APP.cpp:539`, and changed only by
+`AddModeMask` / `RemoveModeMask` / `ReplaceModeMask` (`MUNGA/MODE.h:26`).
+Two subsystems read it, and both gate the same way — a bitwise AND, never
+an equality, so any shared bit passes and `ModeAlwaysActive` (`-1L`, all
+bits) always matches:
+
+| consumer | object | gate |
+|---|---|---|
+| controls | `ControlsInstance::modeMask` | `MUNGA/CONTROLS.cpp:132` in `ControlsMappingGroup::Update` — decides whether a mapping dispatches at all |
+| gauges | `GaugeBase::modeMask` | `MUNGA/GAUGREND.cpp:3625`, `:3782`, `:3852` — decides whether a drawable sits in the active list |
+
+The gauge half runs in `GaugeRenderer::ExecuteForeground`
+(`MUNGA/GAUGREND.cpp:3581`), which reads the mask once per pass, derives
+`change_mode_mask = current ^ previous` (`:3597`), files newly created
+gauges into the active or inactive chain (`:3625`), and — only when the
+mask actually moved (`:3661`) — shuffles objects between them
+(`ActivateGaugeBases` `:3782`, `DeactivateGaugeBases` `:3852`). Only the
+active chain is executed, so an unmatched drawable costs one list entry
+and nothing else. The lamp manager is handed the same word a few lines
+earlier (`:3604`), which is how the preset and mode lamps are filtered.
+
+A drawable whose bit is never set therefore never draws, and never
+complains — it is simply parked in `inactiveList` for the life of the
+process. That is exactly what happened to the intercom art (§3): its
+gauges are authored, resolved and loaded, and then sit in the inactive
+chain forever because nothing ever ORs `ModeIntercom` into the mask.
+
## 3. What is actually in a preset
Only the four mappable stick buttons are ever preset-scoped —
@@ -118,10 +149,60 @@ Everything else — throttle, pedals, stick axes, hat, the whole aux panel —
is bound `ModeAlwaysActive` or `ModeNonConfig` and is identical in all six
presets. The functions that can land on a stick button are the ones that
also have a panel button and a "configure" partner: booster fire, chute,
-weapon trigger, LIFT CUT, SIDESLIP, HORN, and intercom PTT
+weapon trigger, LIFT CUT, SIDESLIP, HORN, and the intercom PTT — the last
+of which never works on a shipped pod, see below
(`RP/VTVMPPR.cpp:144`, `RP/BOOSTER.cpp:50`, `RP/CHUTE.cpp:48`,
`RP/WEAPSYS.cpp:103`).
+### The intercom PTT binding is dead on shipped hardware
+
+The intercom press-to-talk needed a headset and a comms panel that never
+went past prototype cockpits. `ActivatePTTMessageID` is still bound in the
+authored data and still handled in the code, but no production pod can
+trigger it, so **the buttons it occupies are dead, and are reported as
+unbound in the tables here and on the roster page**. Anyone re-decoding
+`RPL4.RES` will find message ID 13 sitting on the pinky and wonder why the
+tables show it empty, hence this section.
+
+PTT occupies 26 preset rows across 13 vehicles — always the pinky, always
+presets 1 and 3, and only on lightly armed or unarmed vehicles, where the
+pinky was free. Two independent things in the shipped assets confirm the
+hardware never arrived:
+
+1. **Its panel label was never drawn.** The tool panel (`auxUL2`) has four
+ button-pair quadrants and `common_setup` fills three of them — LIFT CUT
+ at (22,240), SIDE SLIP at (327,240), HORN at (327,54)
+ (`assets/RP411/GAUGE/L4GAUGE.CFG:767`). The fourth, (22,54), is blank —
+ and that is exactly the `AuxUpperLeft5/6` pair the PTT is bound to
+ (`RP_L4/RPL4MPPR.cpp:2000`, between the LIFT CUT/SIDESLIP pairs at
+ `:1978` and the HORN pair at `:2011`). Every other configurable system
+ has a legend on the glass; the PTT has bare panel.
+2. **Its display art never reaches the glass.** `GAUGE/RPAICOM.PCX` and
+ `GAUGE/RPACOMM.PCX` are finished 640×480 intercom station screens that
+ the gauge config never references at all. The edge strips
+ `strpcom1/2.pcc` *are* declared — top and bottom of the centre aux
+ display, `port = auxC` (`assets/RP411/GAUGE/L4GAUGE.CFG:706`) — but
+ gated on `ModeIntercom`, and **nothing ever sets that bit**: there is no
+ `AddModeMask(ModeIntercom)` anywhere in the tree, and the config emits
+ no `enable` command for the data-driven path
+ (`MUNGA/GAUGREND.cpp:1791`) to pick up either. The one block that would
+ have wired the intercom buttons sits inside `#if 0`
+ (`MUNGA_L4/L4ICOM.cpp:903`) and still names `L4ModeManager`, a class
+ that no longer exists — so it was cut before the `RPL4ModeManager`
+ rename and never revisited. None of this art has ever been on screen.
+
+Dropping it costs nothing on 12 of the 13 vehicles — presets 1 and 3 stay
+distinct because their thumb-low binding differs. The exception is the
+**quark**, whose presets 3 and 4 become identical, since the PTT was the
+only thing separating them. Four other vehicles ship preset pairs that were
+already identical before any of this: dragon, roach and spitter (3 ≡ 4) and
+puck (2 ≡ 5).
+
+**The roster page never mentions the PTT at all.** `docs/vtv-presets.html`
+is the player-facing artifact; naming a control that cannot be pressed
+would raise more questions than it answers, so those cells are simply
+blank there.
+
## 4. The shipped tables
The mappings are streamed from the vehicle resource at mission start —
@@ -136,33 +217,33 @@ appear six times with six different targets.
both the RIO and the Thrustmaster.** Decoded, the *lepton* (two boosters,
one chute, unarmed) reads:
-| | trigger | pinky | thumb low | thumb high |
+| | trigger | thumb high | thumb low | pinky |
|---|---|---|---|---|
-| PRESET 1 | booster 1 | **PTT** | chute | booster 2 |
-| PRESET 2 | booster 1 | **LIFT CUT** | chute | booster 2 |
-| PRESET 3 | booster 1 | PTT | **LIFT CUT** | booster 2 |
-| PRESET 4 | booster 1 | chute | LIFT CUT | booster 2 |
-| PRESET 5 | booster 1 | LIFT CUT | **HORN** | booster 2 |
-| PRESET 6 | **LIFT CUT** | chute | booster 2 | booster 1 |
+| PRESET 1 | booster 1 | booster 2 | chute | — |
+| PRESET 2 | booster 1 | booster 2 | chute | **LIFT CUT** |
+| PRESET 3 | booster 1 | booster 2 | **LIFT CUT** | — |
+| PRESET 4 | booster 1 | booster 2 | LIFT CUT | chute |
+| PRESET 5 | booster 1 | booster 2 | **HORN** | LIFT CUT |
+| PRESET 6 | **LIFT CUT** | booster 1 | booster 2 | chute |
An armed vehicle substitutes the weapon trigger for the primary booster.
The *puck* (one booster, laser):
-| | trigger | pinky | thumb low | thumb high |
+| | trigger | thumb high | thumb low | pinky |
|---|---|---|---|---|
-| PRESET 1 | laser | — | HORN | booster |
-| PRESET 2 | laser | LIFT CUT | HORN | booster |
-| PRESET 3 | laser | — | LIFT CUT | booster |
-| PRESET 4 | laser | HORN | LIFT CUT | booster |
-| PRESET 5 | laser | LIFT CUT | HORN | booster |
-| PRESET 6 | **LIFT CUT** | laser | — | booster |
+| PRESET 1 | laser | booster | HORN | — |
+| PRESET 2 | laser | booster | HORN | LIFT CUT |
+| PRESET 3 | laser | booster | LIFT CUT | — |
+| PRESET 4 | laser | booster | LIFT CUT | HORN |
+| PRESET 5 | laser | booster | HORN | LIFT CUT |
+| PRESET 6 | **LIFT CUT** | booster | — | laser |
The authored intent is consistent across every vehicle in the file:
1. **Presets 1–5 keep the primary weapon (or lead booster) on the
trigger** and shuffle the *secondary* duties — where LIFT CUT lives,
- whether the stick carries PTT or HORN, and whether the chute/third
- system stays on the stick at all.
+ whether the stick carries HORN, and whether the chute/third system
+ stays on the stick at all.
2. **Preset 2 always puts LIFT CUT on the pinky** and **preset 6 always
puts LIFT CUT on the trigger** — verified true for all 26 tables.
Preset 6 is the outlier layout: everything shifts up a finger and the
diff --git a/docs/vtv-presets.html b/docs/vtv-presets.html
new file mode 100644
index 0000000..0f5b5d5
--- /dev/null
+++ b/docs/vtv-presets.html
@@ -0,0 +1,543 @@
+
+
+
+
Red Planet - VTV control presets
+
+
+
+
+
Red Planet 4.12 · decoded from RPL4.RES
+
Every VTV and its six control presets
+
The six amber switches down the right flank of the map screen are not a
+ display option. Each is a complete factory layout for the four mappable
+ joystick buttons, authored per vehicle and shipped in the game's resource
+ file. Pressing one swaps the whole stick over, live, mid-race.
+
+
Preset 2 always puts LIFT CUT on the pinky
+
Preset 6 always puts LIFT CUT on the trigger
+
Presets 1–5 keep the primary weapon on the trigger
+
+
+
+
+
+
+
+
+
+
+
+
+ 26 / 26 VTV
+
+
+
+
+
+ Vehicle systems
+ Weapons
+ Pilot controls
+
+
+
+
+
+ Hull PO
+
DRAGON
+
2× BOOSTCHUTERIVET 1RIVET 2SLAVER
+
6 subsystems38 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
SLAVER
BOOST 1
CHUTE
—
2
SLAVER
BOOST 1
CHUTE
LIFT CUT
3
SLAVER
BOOST 1
LIFT CUT
—
4
SLAVER
BOOST 1
LIFT CUT
—
5
SLAVER
BOOST 1
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
—
SLAVER
+
+
+
+ Hull BA · shared with mantis, ripper, spitter
+
ROADBLK
+
2× BOOSTCHUTERIVETLASER 1DEMO PACK
+
6 subsystems35 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
RIVET
BOOST 1
CHUTE
—
2
RIVET
BOOST 1
CHUTE
LIFT CUT
3
RIVET
BOOST 1
LIFT CUT
—
4
RIVET
BOOST 1
LIFT CUT
CHUTE
5
RIVET
LASER 1
DEMO PACK
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
RIVET
+
+
+
+ Hull MA · shared with gator, grunt, vole
+
BTTLBRG
+
2× BOOSTCHUTELASERDEMO PACK
+
5 subsystems30 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
LASER
BOOST 1
CHUTE
—
2
LASER
BOOST 1
CHUTE
LIFT CUT
3
LASER
BOOST 1
LIFT CUT
—
4
LASER
BOOST 1
LIFT CUT
CHUTE
5
LASER
BOOST 1
DEMO PACK
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
LASER
+
+
+
+ Hull MA · shared with bttlbrg, grunt, vole
+
GATOR
+
2× BOOSTCHUTERIVETDEMO PACK
+
5 subsystems30 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
RIVET
BOOST 1
CHUTE
—
2
RIVET
BOOST 1
CHUTE
LIFT CUT
3
RIVET
BOOST 1
LIFT CUT
—
4
RIVET
BOOST 1
LIFT CUT
CHUTE
5
RIVET
BOOST 1
DEMO PACK
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
RIVET
+
+
+
+ Hull BA · shared with ripper, roadblk, spitter
+
MANTIS
+
2× BOOSTCHUTELASER 1LASER 2
+
5 subsystems32 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
LASER 1
BOOST 1
CHUTE
—
2
LASER 1
BOOST 1
CHUTE
LIFT CUT
3
LASER 1
BOOST 1
LIFT CUT
—
4
LASER 1
BOOST 1
LIFT CUT
CHUTE
5
LASER 1
BOOST 1
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
LASER 1
+
+
+
+ Hull SA · shared with chigger, flea, skeeter, wasp
+
ROACH
+
2× BOOSTCHUTERIVET 1RIVET 2
+
5 subsystems32 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
RIVET 2
BOOST 1
CHUTE
—
2
RIVET 2
BOOST 1
CHUTE
LIFT CUT
3
RIVET 2
BOOST 1
LIFT CUT
—
4
RIVET 2
BOOST 1
LIFT CUT
—
5
RIVET 2
BOOST 1
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
—
RIVET 2
+
+
+
+ Hull BA · shared with mantis, ripper, roadblk
+
SPITTER
+
2× BOOSTCHUTERIVET 1RIVET 2
+
5 subsystems32 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
RIVET 2
BOOST 1
CHUTE
—
2
RIVET 2
BOOST 1
CHUTE
LIFT CUT
3
RIVET 2
BOOST 1
LIFT CUT
—
4
RIVET 2
BOOST 1
LIFT CUT
—
5
RIVET 2
BOOST 1
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
—
RIVET 2
+
+
+
+ Hull SA · shared with flea, roach, skeeter, wasp
+
CHIGGER
+
2× BOOSTCHUTERIVET
+
4 subsystems27 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
RIVET
BOOST 1
CHUTE
—
2
RIVET
BOOST 1
CHUTE
LIFT CUT
3
RIVET
BOOST 1
LIFT CUT
—
4
RIVET
BOOST 1
LIFT CUT
CHUTE
5
RIVET
BOOST 1
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
RIVET
+
+
+
+ Hull SA · shared with chigger, roach, skeeter, wasp
+
FLEA
+
2× BOOSTCHUTEDEMO PACK
+
4 subsystems26 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
DEMO PACK
BOOST 1
CHUTE
—
2
DEMO PACK
BOOST 1
CHUTE
LIFT CUT
3
DEMO PACK
BOOST 1
LIFT CUT
—
4
DEMO PACK
BOOST 1
LIFT CUT
CHUTE
5
DEMO PACK
BOOST 1
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
DEMO PACK
+
+
+
+ Hull MA · shared with bttlbrg, gator, vole
+
GRUNT
+
2× BOOSTCHUTERIVET
+
4 subsystems27 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
RIVET
BOOST 1
CHUTE
—
2
RIVET
BOOST 1
CHUTE
LIFT CUT
3
RIVET
BOOST 1
LIFT CUT
—
4
RIVET
BOOST 1
LIFT CUT
CHUTE
5
RIVET
BOOST 1
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
RIVET
+
+
+
+ Hull LA
+
PROTON
+
2× BOOSTCHUTERIVET
+
4 subsystems27 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
RIVET
BOOST 1
CHUTE
—
2
RIVET
BOOST 1
CHUTE
LIFT CUT
3
RIVET
BOOST 1
LIFT CUT
—
4
RIVET
BOOST 1
LIFT CUT
CHUTE
5
RIVET
BOOST 1
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
RIVET
+
+
+
+ Hull PA
+
PUCK
+
1× BOOSTLASER 2
+
2 subsystems16 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
LASER 2
BOOST 1
HORN
—
2
LASER 2
BOOST 1
HORN
LIFT CUT
3
LASER 2
BOOST 1
LIFT CUT
—
4
LASER 2
BOOST 1
LIFT CUT
HORN
5
LASER 2
BOOST 1
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
—
LASER 2
+
+
+
+ Hull BA · shared with mantis, roadblk, spitter
+
RIPPER
+
2× BOOSTCHUTEDEMO PACK
+
4 subsystems26 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
DEMO PACK
BOOST 1
CHUTE
—
2
DEMO PACK
BOOST 1
CHUTE
LIFT CUT
3
DEMO PACK
BOOST 1
LIFT CUT
—
4
DEMO PACK
BOOST 1
LIFT CUT
CHUTE
5
DEMO PACK
BOOST 1
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
DEMO PACK
+
+
+
+ Hull SA · shared with chigger, flea, roach, wasp
+
SKEETER
+
2× BOOSTCHUTELASER 2
+
4 subsystems26 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
LASER 2
BOOST 1
CHUTE
—
2
LASER 2
BOOST 1
CHUTE
LIFT CUT
3
LASER 2
BOOST 1
LIFT CUT
—
4
LASER 2
BOOST 1
LIFT CUT
CHUTE
5
LASER 2
BOOST 1
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
LASER 2
+
+
+
+ Hull MA · shared with bttlbrg, gator, grunt
+
VOLE
+
2× BOOSTCHUTELASER
+
4 subsystems27 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
LASER
BOOST 1
CHUTE
—
2
LASER
BOOST 1
CHUTE
LIFT CUT
3
LASER
BOOST 1
LIFT CUT
—
4
LASER
BOOST 1
LIFT CUT
CHUTE
5
LASER
BOOST 1
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
LASER
+
+
+
+ Hull SA · shared with chigger, flea, roach, skeeter
+
WASP
+
2× BOOSTCHUTEDEMO PACK
+
4 subsystems26 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
DEMO PACK
BOOST 1
CHUTE
—
2
DEMO PACK
BOOST 1
CHUTE
LIFT CUT
3
DEMO PACK
BOOST 1
LIFT CUT
—
4
DEMO PACK
BOOST 1
LIFT CUT
CHUTE
5
DEMO PACK
BOOST 1
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
DEMO PACK
+
+
+
+ Hull MU · shared with broccoli, burro, mule
+
BARGE
+
2× BOOSTCHUTEUNARMED
+
3 subsystems23 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
BOOST 1
BOOST 2
CHUTE
—
2
BOOST 1
BOOST 2
CHUTE
LIFT CUT
3
BOOST 1
BOOST 2
LIFT CUT
—
4
BOOST 1
BOOST 2
LIFT CUT
CHUTE
5
BOOST 1
BOOST 2
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
CHUTE
+
+
+
+ Hull MU · shared with barge, burro, mule
+
BROCCOLI
+
3× BOOSTCHUTEUNARMED
+
4 subsystems28 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
BOOST 1
BOOST 2
CHUTE
—
2
BOOST 1
BOOST 2
CHUTE
LIFT CUT
3
BOOST 1
BOOST 2
LIFT CUT
—
4
BOOST 1
BOOST 3
LIFT CUT
CHUTE
5
BOOST 1
BOOST 2
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
CHUTE
+
+
+
+ Hull SU · shared with speck
+
BUG
+
2× BOOSTCHUTEUNARMED
+
3 subsystems23 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
BOOST 1
BOOST 2
CHUTE
—
2
BOOST 1
BOOST 2
CHUTE
LIFT CUT
3
BOOST 1
BOOST 2
LIFT CUT
—
4
BOOST 1
BOOST 2
LIFT CUT
CHUTE
5
BOOST 1
BOOST 2
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
CHUTE
+
+
+
+ Hull BU · shared with tarntula
+
BULL
+
2× BOOSTCHUTEUNARMED
+
3 subsystems23 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
BOOST 1
BOOST 2
CHUTE
—
2
BOOST 1
BOOST 2
CHUTE
LIFT CUT
3
BOOST 1
BOOST 2
LIFT CUT
—
4
BOOST 1
BOOST 2
LIFT CUT
CHUTE
5
BOOST 1
BOOST 2
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
CHUTE
+
+
+
+ Hull MU · shared with barge, broccoli, mule
+
BURRO
+
1× BOOSTCHUTEUNARMED
+
2 subsystems17 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
BOOST 1
BOOST 1
CHUTE
—
2
BOOST 1
BOOST 1
CHUTE
LIFT CUT
3
BOOST 1
BOOST 1
LIFT CUT
—
4
BOOST 1
BOOST 1
LIFT CUT
CHUTE
5
BOOST 1
BOOST 1
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 1
CHUTE
+
+
+
+ Hull LU · shared with quark
+
LEPTON
+
2× BOOSTCHUTEUNARMED
+
3 subsystems23 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
BOOST 1
BOOST 2
CHUTE
—
2
BOOST 1
BOOST 2
CHUTE
LIFT CUT
3
BOOST 1
BOOST 2
LIFT CUT
—
4
BOOST 1
BOOST 2
LIFT CUT
CHUTE
5
BOOST 1
BOOST 2
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
CHUTE
+
+
+
+ Hull MU · shared with barge, broccoli, burro
+
MULE
+
2× BOOSTCHUTEUNARMED
+
3 subsystems23 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
BOOST 1
BOOST 2
CHUTE
—
2
BOOST 1
BOOST 2
CHUTE
LIFT CUT
3
BOOST 1
BOOST 2
LIFT CUT
—
4
BOOST 1
BOOST 2
LIFT CUT
CHUTE
5
BOOST 1
BOOST 2
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
CHUTE
+
+
+
+ Hull LU · shared with lepton
+
QUARK
+
2× BOOSTUNARMED
+
2 subsystems17 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
BOOST 1
BOOST 2
—
—
2
BOOST 1
BOOST 2
—
LIFT CUT
3
BOOST 1
BOOST 2
LIFT CUT
—
4
BOOST 1
BOOST 2
LIFT CUT
—
5
BOOST 1
BOOST 2
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
—
+
+
+
+ Hull SU · shared with bug
+
SPECK
+
2× BOOSTCHUTEUNARMED
+
3 subsystems23 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
BOOST 1
BOOST 2
CHUTE
—
2
BOOST 1
BOOST 2
CHUTE
LIFT CUT
3
BOOST 1
BOOST 2
LIFT CUT
—
4
BOOST 1
BOOST 2
LIFT CUT
CHUTE
5
BOOST 1
BOOST 2
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
CHUTE
+
+
+
+ Hull BU · shared with bull
+
TARNTULA
+
3× BOOSTCHUTEUNARMED
+
4 subsystems28 mappings
+
+
Preset assignments
Preset
TRIGGER
THUMB HIGH
THUMB LOW
PINKY
1
BOOST 1
BOOST 2
CHUTE
—
2
BOOST 1
BOOST 2
CHUTE
LIFT CUT
3
BOOST 1
BOOST 2
LIFT CUT
—
4
BOOST 1
BOOST 3
LIFT CUT
CHUTE
5
BOOST 1
BOOST 2
HORN
LIFT CUT
6
LIFT CUT
BOOST 1
BOOST 2
CHUTE
+
+
No VTV matches that.
+
+
26 VTVs carry a preset table; 16 are armed. Decoded from the pod
+ RIO ControlMappings stream in assets/RP411/RPL4.RES —
+ subsystem names from each vehicle's own subsystem list, functions from
+ ModePreset1..6 mask bits. Boosters, chute and weapons are the vehicle's
+ activatable systems; LIFT CUT and HORN are pilot controls that also live on the
+ panel. Empty cells are unbound — nothing on the pod fires them.
+
The plan views are the vehicle's own damage-gauge silhouette
+ (GAUGE/s<hull>.pcc), redrawn from the 3-colour original. The game has
+ no per-vehicle art: vehicles are grouped into hull families and share both the
+ silhouette and the 3D mesh in VIDEO/, which is keyed by the same two-letter
+ code. What distinguishes vehicles inside a family is the loadout, not the shape.
+
+
+
diff --git a/pack-dist.ps1 b/pack-dist.ps1
index e8da1ec..3600fec 100644
--- a/pack-dist.ps1
+++ b/pack-dist.ps1
@@ -9,7 +9,8 @@
# - libsndfile-1.dll beside the exe; OpenAL32.dll copied from the system
# when installed, with oalinst.exe included as the fallback installer
# (environ.ini is NOT shipped - the exe writes it on first run)
-# - start/joyconfig scripts, HANDBOOK.html, CONTROLS.txt and a README
+# - start/joyconfig scripts, HANDBOOK.html, VTV-PRESETS.html, CONTROLS.txt
+# and a README
#
# Usage: powershell -ExecutionPolicy Bypass -File pack-dist.ps1 [-Zip] [-Fresh]
#
@@ -156,6 +157,16 @@ $handbookPage
[System.IO.File]::WriteAllText(
"$dist\HANDBOOK.html", $page, (New-Object System.Text.UTF8Encoding $false))
+# The VTV roster: every vehicle, its loadout and its six control presets,
+# decoded from RPL4.RES. Unlike the handbook this source is already a
+# complete document - it carries its own doctype, charset and viewport - so
+# it ships verbatim rather than being wrapped. Copied as bytes to keep the
+# UTF-8 exactly as written; Copy-Item would do too, but being explicit here
+# matches the handbook above and survives anyone adding a stamp later.
+[System.IO.File]::WriteAllBytes(
+ "$dist\VTV-PRESETS.html",
+ [System.IO.File]::ReadAllBytes((Join-Path $root 'docs\vtv-presets.html')))
+
# --- OpenAL runtime --------------------------------------------------------
# The exe links OpenAL32.dll (32-bit). Prefer shipping the already-installed
# runtime beside the exe; oalinst.exe covers machines where that misses.
@@ -278,6 +289,12 @@ HANDBOOK.html is the full manual - open it in a browser for the pad,
keyboard and pod-panel diagrams, the joystick setup, and what every file
in this folder is for. CONTROLS.txt is the controls half as plain text.
+VTV-PRESETS.html lists every vehicle you can race: its plan view, what it
+carries, and the six control presets on its stick. The six amber switches
+down the right of the map screen pick between them, and each one is a
+complete factory layout for the four stick buttons - so the same button
+does different jobs depending on which preset is lit.
+
Four files here are yours. None of them ship - the game writes each one
the first time it needs it and then leaves it alone, so a new build
unzipped over this folder keeps everything you have set. Delete any of