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.

+ +
+
+ +
+
+
+ + + +
+ + 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