From cf59ac9f4b526c0104c99fe6cd23c9819cef8205 Mon Sep 17 00:00:00 2001 From: Cyd Date: Thu, 6 Aug 2026 13:10:53 -0500 Subject: [PATCH] Every VTV and its presets, in a page that ships with the game VTV-PRESETS.html joins the handbook in the dist: all 26 racable vehicles, each with its hull plan view, what it carries, and the six control presets on its stick. The data is decoded from RPL4.RES rather than transcribed - each vehicle's own subsystem list names its systems, and VTV::BasicSubsystemCount fixes list index i as subsystem 9+i, so every subsystem id in all 26 mapping streams resolves with nothing left over. The gauge config could not have been used for this: it is only artwork, and it lies. The dragon has boosters and a chute with no art declared, and the burro's chute sits in a different panel slot than sequence would suggest. Both come out right this way. The plan views are each vehicle's own damage-gauge silhouette, redrawn from the three-colour original as an alpha mask so it takes the page's colour in either theme. There is no per-vehicle art to use instead: vehicles are grouped into hull families that share both the silhouette and the mesh in VIDEO/, which is keyed by the same two-letter code. Each card says which hull it is and who else races the same one. The page does not mention the intercom PTT. Its hardware never went past prototype cockpits, so naming a control nobody can press would only raise questions; those cells are simply blank. CONTROL-PRESETS.md carries the full account, because anyone re-decoding the resource will find message ID 13 on the pinky and needs to know why the tables show it empty. Two things in the shipped assets settle it: the tool panel's fourth quadrant is bare where every other system has a legend, and the two finished intercom station screens are referenced by nothing at all. The edge strips are referenced - but gated on ModeIntercom, which nothing ever sets, so they have never been on screen either. The block that would have wired the buttons is inside #if 0 and still names L4ModeManager, a class that no longer exists: cut before the RPL4ModeManager rename and never revisited. The doc also now explains the mode-mask gate itself, since that is what makes the dead intercom legible: one 32-bit word, seeded 0x201, read by both the controls dispatch and the gauge renderer's active/inactive sorting. A drawable whose bit is never set is parked in inactiveList for the life of the process and never complains. Co-Authored-By: Claude Opus 5 (1M context) --- docs/CONTROL-PRESETS.md | 115 +++++++-- docs/vtv-presets.html | 543 ++++++++++++++++++++++++++++++++++++++++ pack-dist.ps1 | 19 +- 3 files changed, 659 insertions(+), 18 deletions(-) create mode 100644 docs/vtv-presets.html 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
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1SLAVERBOOST 1CHUTE
2SLAVERBOOST 1CHUTELIFT CUT
3SLAVERBOOST 1LIFT CUT
4SLAVERBOOST 1LIFT CUT
5SLAVERBOOST 1HORNLIFT CUT
6LIFT CUTBOOST 1SLAVER
+
+
+
+
Hull BA · shared with mantis, ripper, spitter
+

ROADBLK

+

2× BOOSTCHUTERIVETLASER 1DEMO PACK

+

6 subsystems35 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1RIVETBOOST 1CHUTE
2RIVETBOOST 1CHUTELIFT CUT
3RIVETBOOST 1LIFT CUT
4RIVETBOOST 1LIFT CUTCHUTE
5RIVETLASER 1DEMO PACKLIFT CUT
6LIFT CUTBOOST 1BOOST 2RIVET
+
+
+
+
Hull MA · shared with gator, grunt, vole
+

BTTLBRG

+

2× BOOSTCHUTELASERDEMO PACK

+

5 subsystems30 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1LASERBOOST 1CHUTE
2LASERBOOST 1CHUTELIFT CUT
3LASERBOOST 1LIFT CUT
4LASERBOOST 1LIFT CUTCHUTE
5LASERBOOST 1DEMO PACKLIFT CUT
6LIFT CUTBOOST 1BOOST 2LASER
+
+
+
+
Hull MA · shared with bttlbrg, grunt, vole
+

GATOR

+

2× BOOSTCHUTERIVETDEMO PACK

+

5 subsystems30 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1RIVETBOOST 1CHUTE
2RIVETBOOST 1CHUTELIFT CUT
3RIVETBOOST 1LIFT CUT
4RIVETBOOST 1LIFT CUTCHUTE
5RIVETBOOST 1DEMO PACKLIFT CUT
6LIFT CUTBOOST 1BOOST 2RIVET
+
+
+
+
Hull BA · shared with ripper, roadblk, spitter
+

MANTIS

+

2× BOOSTCHUTELASER 1LASER 2

+

5 subsystems32 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1LASER 1BOOST 1CHUTE
2LASER 1BOOST 1CHUTELIFT CUT
3LASER 1BOOST 1LIFT CUT
4LASER 1BOOST 1LIFT CUTCHUTE
5LASER 1BOOST 1HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2LASER 1
+
+
+
+
Hull SA · shared with chigger, flea, skeeter, wasp
+

ROACH

+

2× BOOSTCHUTERIVET 1RIVET 2

+

5 subsystems32 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1RIVET 2BOOST 1CHUTE
2RIVET 2BOOST 1CHUTELIFT CUT
3RIVET 2BOOST 1LIFT CUT
4RIVET 2BOOST 1LIFT CUT
5RIVET 2BOOST 1HORNLIFT CUT
6LIFT CUTBOOST 1RIVET 2
+
+
+
+
Hull BA · shared with mantis, ripper, roadblk
+

SPITTER

+

2× BOOSTCHUTERIVET 1RIVET 2

+

5 subsystems32 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1RIVET 2BOOST 1CHUTE
2RIVET 2BOOST 1CHUTELIFT CUT
3RIVET 2BOOST 1LIFT CUT
4RIVET 2BOOST 1LIFT CUT
5RIVET 2BOOST 1HORNLIFT CUT
6LIFT CUTBOOST 1RIVET 2
+
+
+
+
Hull SA · shared with flea, roach, skeeter, wasp
+

CHIGGER

+

2× BOOSTCHUTERIVET

+

4 subsystems27 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1RIVETBOOST 1CHUTE
2RIVETBOOST 1CHUTELIFT CUT
3RIVETBOOST 1LIFT CUT
4RIVETBOOST 1LIFT CUTCHUTE
5RIVETBOOST 1HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2RIVET
+
+
+
+
Hull SA · shared with chigger, roach, skeeter, wasp
+

FLEA

+

2× BOOSTCHUTEDEMO PACK

+

4 subsystems26 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1DEMO PACKBOOST 1CHUTE
2DEMO PACKBOOST 1CHUTELIFT CUT
3DEMO PACKBOOST 1LIFT CUT
4DEMO PACKBOOST 1LIFT CUTCHUTE
5DEMO PACKBOOST 1HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2DEMO PACK
+
+
+
+
Hull MA · shared with bttlbrg, gator, vole
+

GRUNT

+

2× BOOSTCHUTERIVET

+

4 subsystems27 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1RIVETBOOST 1CHUTE
2RIVETBOOST 1CHUTELIFT CUT
3RIVETBOOST 1LIFT CUT
4RIVETBOOST 1LIFT CUTCHUTE
5RIVETBOOST 1HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2RIVET
+
+
+
+
Hull LA
+

PROTON

+

2× BOOSTCHUTERIVET

+

4 subsystems27 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1RIVETBOOST 1CHUTE
2RIVETBOOST 1CHUTELIFT CUT
3RIVETBOOST 1LIFT CUT
4RIVETBOOST 1LIFT CUTCHUTE
5RIVETBOOST 1HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2RIVET
+
+
+
+
Hull PA
+

PUCK

+

1× BOOSTLASER 2

+

2 subsystems16 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1LASER 2BOOST 1HORN
2LASER 2BOOST 1HORNLIFT CUT
3LASER 2BOOST 1LIFT CUT
4LASER 2BOOST 1LIFT CUTHORN
5LASER 2BOOST 1HORNLIFT CUT
6LIFT CUTBOOST 1LASER 2
+
+
+
+
Hull BA · shared with mantis, roadblk, spitter
+

RIPPER

+

2× BOOSTCHUTEDEMO PACK

+

4 subsystems26 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1DEMO PACKBOOST 1CHUTE
2DEMO PACKBOOST 1CHUTELIFT CUT
3DEMO PACKBOOST 1LIFT CUT
4DEMO PACKBOOST 1LIFT CUTCHUTE
5DEMO PACKBOOST 1HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2DEMO PACK
+
+
+
+
Hull SA · shared with chigger, flea, roach, wasp
+

SKEETER

+

2× BOOSTCHUTELASER 2

+

4 subsystems26 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1LASER 2BOOST 1CHUTE
2LASER 2BOOST 1CHUTELIFT CUT
3LASER 2BOOST 1LIFT CUT
4LASER 2BOOST 1LIFT CUTCHUTE
5LASER 2BOOST 1HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2LASER 2
+
+
+
+
Hull MA · shared with bttlbrg, gator, grunt
+

VOLE

+

2× BOOSTCHUTELASER

+

4 subsystems27 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1LASERBOOST 1CHUTE
2LASERBOOST 1CHUTELIFT CUT
3LASERBOOST 1LIFT CUT
4LASERBOOST 1LIFT CUTCHUTE
5LASERBOOST 1HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2LASER
+
+
+
+
Hull SA · shared with chigger, flea, roach, skeeter
+

WASP

+

2× BOOSTCHUTEDEMO PACK

+

4 subsystems26 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1DEMO PACKBOOST 1CHUTE
2DEMO PACKBOOST 1CHUTELIFT CUT
3DEMO PACKBOOST 1LIFT CUT
4DEMO PACKBOOST 1LIFT CUTCHUTE
5DEMO PACKBOOST 1HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2DEMO PACK
+
+
+
+
Hull MU · shared with broccoli, burro, mule
+

BARGE

+

2× BOOSTCHUTEUNARMED

+

3 subsystems23 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1BOOST 1BOOST 2CHUTE
2BOOST 1BOOST 2CHUTELIFT CUT
3BOOST 1BOOST 2LIFT CUT
4BOOST 1BOOST 2LIFT CUTCHUTE
5BOOST 1BOOST 2HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2CHUTE
+
+
+
+
Hull MU · shared with barge, burro, mule
+

BROCCOLI

+

3× BOOSTCHUTEUNARMED

+

4 subsystems28 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1BOOST 1BOOST 2CHUTE
2BOOST 1BOOST 2CHUTELIFT CUT
3BOOST 1BOOST 2LIFT CUT
4BOOST 1BOOST 3LIFT CUTCHUTE
5BOOST 1BOOST 2HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2CHUTE
+
+
+
+
Hull SU · shared with speck
+

BUG

+

2× BOOSTCHUTEUNARMED

+

3 subsystems23 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1BOOST 1BOOST 2CHUTE
2BOOST 1BOOST 2CHUTELIFT CUT
3BOOST 1BOOST 2LIFT CUT
4BOOST 1BOOST 2LIFT CUTCHUTE
5BOOST 1BOOST 2HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2CHUTE
+
+
+
+
Hull BU · shared with tarntula
+

BULL

+

2× BOOSTCHUTEUNARMED

+

3 subsystems23 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1BOOST 1BOOST 2CHUTE
2BOOST 1BOOST 2CHUTELIFT CUT
3BOOST 1BOOST 2LIFT CUT
4BOOST 1BOOST 2LIFT CUTCHUTE
5BOOST 1BOOST 2HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2CHUTE
+
+
+
+
Hull MU · shared with barge, broccoli, mule
+

BURRO

+

1× BOOSTCHUTEUNARMED

+

2 subsystems17 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1BOOST 1BOOST 1CHUTE
2BOOST 1BOOST 1CHUTELIFT CUT
3BOOST 1BOOST 1LIFT CUT
4BOOST 1BOOST 1LIFT CUTCHUTE
5BOOST 1BOOST 1HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 1CHUTE
+
+
+
+
Hull LU · shared with quark
+

LEPTON

+

2× BOOSTCHUTEUNARMED

+

3 subsystems23 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1BOOST 1BOOST 2CHUTE
2BOOST 1BOOST 2CHUTELIFT CUT
3BOOST 1BOOST 2LIFT CUT
4BOOST 1BOOST 2LIFT CUTCHUTE
5BOOST 1BOOST 2HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2CHUTE
+
+
+
+
Hull MU · shared with barge, broccoli, burro
+

MULE

+

2× BOOSTCHUTEUNARMED

+

3 subsystems23 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1BOOST 1BOOST 2CHUTE
2BOOST 1BOOST 2CHUTELIFT CUT
3BOOST 1BOOST 2LIFT CUT
4BOOST 1BOOST 2LIFT CUTCHUTE
5BOOST 1BOOST 2HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2CHUTE
+
+
+
+
Hull LU · shared with lepton
+

QUARK

+

2× BOOSTUNARMED

+

2 subsystems17 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1BOOST 1BOOST 2
2BOOST 1BOOST 2LIFT CUT
3BOOST 1BOOST 2LIFT CUT
4BOOST 1BOOST 2LIFT CUT
5BOOST 1BOOST 2HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2
+
+
+
+
Hull SU · shared with bug
+

SPECK

+

2× BOOSTCHUTEUNARMED

+

3 subsystems23 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1BOOST 1BOOST 2CHUTE
2BOOST 1BOOST 2CHUTELIFT CUT
3BOOST 1BOOST 2LIFT CUT
4BOOST 1BOOST 2LIFT CUTCHUTE
5BOOST 1BOOST 2HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2CHUTE
+
+
+
+
Hull BU · shared with bull
+

TARNTULA

+

3× BOOSTCHUTEUNARMED

+

4 subsystems28 mappings

+
+
Preset assignments
PresetTRIGGERTHUMB HIGHTHUMB LOWPINKY
1BOOST 1BOOST 2CHUTE
2BOOST 1BOOST 2CHUTELIFT CUT
3BOOST 1BOOST 2LIFT CUT
4BOOST 1BOOST 3LIFT CUTCHUTE
5BOOST 1BOOST 2HORNLIFT CUT
6LIFT CUTBOOST 1BOOST 2CHUTE
+
+ + +

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