From 17bbcb2049c38776e72b98075a2d645279fb8180 Mon Sep 17 00:00:00 2001 From: Cyd Date: Fri, 7 Aug 2026 10:11:00 -0500 Subject: [PATCH] Every VTV on the roster page, resolved by id The page listed 34 of the 38 vehicles in the resource file. The four missing were community variants, and I had written down that they shared another vehicle's mapping streams. They do not - they have their own, of 17 to 33 records. The decoder just could not find them. Streams are stored as resources named plainly L4 and Thrustmaster, so nothing in a stream says whose it is. The old decoder guessed by taking the nearest preceding vehicle name in the file, which works while vehicles are laid out one after another and fails quietly when they are not: it lost vole outright and mis-attributed four blkr variants. The file answers exactly if asked properly. A vehicle's ControlsMappings List holds the resource ids of its two streams. Ids are not quite positional - this file leaves 53 and 56 unassigned - so the directory walk is aligned against RPL4TOOL -l, skipping the ids the listing marks Not Used. That gives 1077 ids with zero size mismatches, and every stream lands on its owner. Subsystem names now come from each vehicle's own Stream of N Subsystems, checked against the count in its header instead of being pattern-matched out of the bytes. Nothing already verified moved: lepton, dark, blkspk and neut decode exactly as they did when checked against the 4.10 retail file, blkspk still putting its third booster on the thumb-high in preset 4 and dark still spending preset 5's HORN slot on its second demo pack. Co-Authored-By: Claude Opus 5 (1M context) --- docs/CONTROL-PRESETS.md | 35 ++++++++++++++++++--- docs/vtv-presets.html | 68 +++++++++++++++++++++++++++++++---------- 2 files changed, 82 insertions(+), 21 deletions(-) diff --git a/docs/CONTROL-PRESETS.md b/docs/CONTROL-PRESETS.md index b926c18..1895a57 100644 --- a/docs/CONTROL-PRESETS.md +++ b/docs/CONTROL-PRESETS.md @@ -214,7 +214,7 @@ resource by name: `"L4"` for the pod RIO, `"Thrustmaster"` for the stick appear six times with six different targets. **Every VTV in `assets/RP411/RPL4.RES` ships a full six-preset table, for -both the RIO and the Thrustmaster** — 34 of them as of the resource file +both the RIO and the Thrustmaster** — 38 of them as of the resource file promoted from the airlock archive (see §8). Decoded, the *lepton* (two boosters, one chute, unarmed) reads: @@ -369,7 +369,32 @@ simply been renamed out of reach. `disk` remains the one genuine orphan: a panel layout with no vehicle behind it in any resource file, and no entry in the console's own config either. -Four of the eight community variants have a `ControlsMappings List` but no -mapping streams of their own; they reference another vehicle's by resource -id, so they carry no preset table of their own and are absent from the -roster page. +### Reading the file by id rather than by proximity + +Every vehicle in the file has its own mapping streams — 38 of them, all on +the roster page. An earlier pass claimed four of the community variants +shared another vehicle's streams; that was wrong, and worth recording +because of *why*. + +Streams are stored as resources named plainly `L4` and `Thrustmaster`, so +nothing in the stream itself says which vehicle it belongs to. The first +decoder guessed: it took the nearest preceding vehicle name in the file. +That works while vehicles are laid out one after another, and quietly fails +when they are not — it lost `vole` outright and mis-attributed four of the +`blkr` variants, whose streams simply do not sit where the guess expected. + +The file answers the question exactly, if asked properly. A vehicle's +`ControlsMappings List of 2 elements` holds the **resource ids** of its two +streams. Resolving an id needs the id table, and ids are not quite +positional — this file leaves 53 and 56 unassigned, and the listing marks +them `Not Used`, so a plain walk of the directory drifts by two from there +on. Aligning the walk against `RPL4TOOL -l`, skipping the unassigned ids, +gives an exact id→resource map: 1077 ids with **zero** size mismatches. + +Subsystem names come the same way, from each vehicle's own +`Stream of N Subsystems`, checked against the count in its header rather +than pattern-matched out of the bytes. + +The lesson is the ordinary one: the format had an explicit answer, and the +first decoder inferred one from layout instead. Everything the guess got +right, it got right by luck of ordering. diff --git a/docs/vtv-presets.html b/docs/vtv-presets.html index 8af7608..8510bf0 100644 --- a/docs/vtv-presets.html +++ b/docs/vtv-presets.html @@ -244,7 +244,7 @@ td.fn { - 34 / 34 VTV + 38 / 38 VTV @@ -384,7 +384,7 @@ td.fn {
-
Hull LU · shared with blkrlepton, lepton, quark
+
Hull LU · shared with blkrlepton, blkrquark, lepton, quark

NEUT

4× BOOSTCHUTEEJECT

6 subsystems34 mappings

@@ -447,25 +447,61 @@ td.fn {
-
Hull MU · shared with broccoli, burro, mule
+
Hull MU · shared with blkrbroc, 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, broccoli, burro, mule
+

BLKRBROC

+

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 LU · shared with lepton, neut, quark
+
Hull LU · shared with blkrquark, lepton, neut, quark

BLKRLEPTON

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 blkrlepton, lepton, neut, quark
+

BLKRQUARK

+

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 blkspk, bug, speck
+

BLKRSPK

+

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 BU · shared with blktrn, bull, tarntula
+

BLKRTRAN

+

4× BOOSTCHUTEUNARMED

+

5 subsystems33 mappings

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

BLKSPK

3× BOOSTCHUTEUNARMED

4 subsystems28 mappings

@@ -474,7 +510,7 @@ td.fn {
-
Hull BU · shared with bull, tarntula
+
Hull BU · shared with blkrtran, bull, tarntula

BLKTRN

4× BOOSTCHUTEUNARMED

5 subsystems33 mappings

@@ -483,7 +519,7 @@ td.fn {
-
Hull MU · shared with barge, burro, mule
+
Hull MU · shared with barge, blkrbroc, burro, mule

BROCCOLI

3× BOOSTCHUTEUNARMED

4 subsystems28 mappings

@@ -492,7 +528,7 @@ td.fn {
-
Hull SU · shared with blkspk, speck
+
Hull SU · shared with blkrspk, blkspk, speck

BUG

2× BOOSTCHUTEUNARMED

3 subsystems23 mappings

@@ -501,7 +537,7 @@ td.fn {
-
Hull BU · shared with blktrn, tarntula
+
Hull BU · shared with blkrtran, blktrn, tarntula

BULL

2× BOOSTCHUTEUNARMED

3 subsystems23 mappings

@@ -510,7 +546,7 @@ td.fn {
-
Hull MU · shared with barge, broccoli, mule
+
Hull MU · shared with barge, blkrbroc, broccoli, mule

BURRO

1× BOOSTCHUTEUNARMED

2 subsystems17 mappings

@@ -519,7 +555,7 @@ td.fn {
-
Hull LU · shared with blkrlepton, neut, quark
+
Hull LU · shared with blkrlepton, blkrquark, neut, quark

LEPTON

2× BOOSTCHUTEUNARMED

3 subsystems23 mappings

@@ -528,7 +564,7 @@ td.fn {
-
Hull MU · shared with barge, broccoli, burro
+
Hull MU · shared with barge, blkrbroc, broccoli, burro

MULE

2× BOOSTCHUTEUNARMED

3 subsystems23 mappings

@@ -537,7 +573,7 @@ td.fn {
-
Hull LU · shared with blkrlepton, lepton, neut
+
Hull LU · shared with blkrlepton, blkrquark, lepton, neut

QUARK

2× BOOSTUNARMED

2 subsystems17 mappings

@@ -546,7 +582,7 @@ td.fn {
-
Hull SU · shared with blkspk, bug
+
Hull SU · shared with blkrspk, blkspk, bug

SPECK

2× BOOSTCHUTEUNARMED

3 subsystems23 mappings

@@ -555,7 +591,7 @@ td.fn {
-
Hull BU · shared with blktrn, bull
+
Hull BU · shared with blkrtran, blktrn, bull

TARNTULA

3× BOOSTCHUTEUNARMED

4 subsystems28 mappings

@@ -564,7 +600,7 @@ td.fn {
-

34 VTVs carry a preset table; 21 are armed. Decoded from the pod +

38 VTVs carry a preset table; 21 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