re: the Arsenal develop economy, and the save blob's index space (first 32 confirmed)
GP_HANGAR_ARSENAL.pak's screen config points at weapon.tbl (item ids, in the 8-category display order) and strings.tbl (names, descriptions, and a "Conditions to obtain" block per item). The id run No_Equipment .. Wep_83 is exactly 54 long -- the save blob's length -- and all 60 conditions blocks are extracted to a CSV: gates are stage completion, a predecessor item, or an ace kill; costs run 3000-350000 P, and 20 items cost nothing once gated (which is why items the player never bought read as Developed). Predicting the save state from those conditions -- before looking at the blob -- says exactly six items are developable here, and the blob's six 2s sit on those six, in weapon.tbl order, at indices 1/5/10/12/27/31. With the four obtained items and the differential's own two transitions that is twelve concordances over indices 0-31, nothing fitted. Broad Sword SG1 at index 5 needed scrolling the GUN list to see, which is the only one the first screenshots missed. The tail is NOT settled and is marked so: the Tomahawk is weapon.tbl index 38 and the screen shows it Developed, but blob[38] = 0, and the other tail 4s (33/39/45/46/47) land on items the Arsenal shows as locked -- the SPECIAL tab is entirely empty. A +1 shift does not repair it either. Settling it needs a second development in a late category, which needs a mission payout. Also recorded: IDXD string pools dedupe repeated values, so only the first record of a table can be read from the token stream -- record 2 shows just its unique values, record 6 no cost at all. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -23,6 +23,7 @@ Promote to a prose `structures/…md` file when a format needs behavioural notes
|
|||||||
| Capital-ship part placement | 🟡 | `sylpheed-formats/src/ship.rs` (static) + [runtime capture](ship-placement-runtime-capture.md) | hull placement static-exact; external parts approximate statically. **Runtime capture** (Canary F10 → VS-constant WorldView) gives ground truth — validated on `e106` destroyer; not yet baked into the viewer |
|
| Capital-ship part placement | 🟡 | `sylpheed-formats/src/ship.rs` (static) + [runtime capture](ship-placement-runtime-capture.md) | hull placement static-exact; external parts approximate statically. **Runtime capture** (Canary F10 → VS-constant WorldView) gives ground truth — validated on `e106` destroyer; not yet baked into the viewer |
|
||||||
| Weapon fields defaulted on disc | ✅ | [runtime struct](structures/weapon-struct-runtime.md) · [DATA SHEET route](weapon-datasheet-runtime.md) | **Solved.** Canary maps guest RAM into `/dev/shm`, so the parsed `Weapon`/`Shell` objects are readable live; their layout is solved against disc ground truth (zero contradictions over 100+ records). All 126 weapons, exact numbers, no story progress needed — [4 393 values](captures/weapon-runtime-fields.csv) the disc does not carry. Supersedes the letter-bucket limit of the DATA SHEET route, which now serves as the independent cross-check |
|
| Weapon fields defaulted on disc | ✅ | [runtime struct](structures/weapon-struct-runtime.md) · [DATA SHEET route](weapon-datasheet-runtime.md) | **Solved.** Canary maps guest RAM into `/dev/shm`, so the parsed `Weapon`/`Shell` objects are readable live; their layout is solved against disc ground truth (zero contradictions over 100+ records). All 126 weapons, exact numbers, no story progress needed — [4 393 values](captures/weapon-runtime-fields.csv) the disc does not carry. Supersedes the letter-bucket limit of the DATA SHEET route, which now serves as the independent cross-check |
|
||||||
| Unit (craft/vessel) fields defaulted on disc | ✅/🟡 | [runtime struct](structures/unit-struct-runtime.md) | The parsed `unit\UN_*.tbl` definition object, vtable `0x820af844`, ≥`0x380` bytes, one per unit — **discovered, not assumed** (`unit_discover.py`), and distinguished from the spawned-entity class `0x820af030` by being one-per-ID and byte-constant within a run. Across runs only pointer words move — `--crosscheck` proves **no reported field offset is run-dependent** (two words, `+0x2c8`/`+0x2d0`, are stage-dependent and remain unidentified). 27 fields ✅ (21 units, 7 runs); the `Maneuver` block is **schema declaration order, 4 bytes/field, base `0x9c` with a two-slot gap after `AA_Roll_Min`** (29 anchors, 0 conflicts), which also pins 5 fields *no* disc record ever values. Angles are **radians at runtime, degrees on disc**. Unlike weapons, unit definitions are instantiated **per stage**, so coverage (21/110) grows by visiting missions — but a defaulted field is **not** a global constant: `Size_Y` provably inherits `Size_X` (7 independent units, 6 distinct values), and three more sibling rules are recorded ❔, recovering 65 values in units never visited — [values](captures/unit-runtime-fields.csv) |
|
| Unit (craft/vessel) fields defaulted on disc | ✅/🟡 | [runtime struct](structures/unit-struct-runtime.md) | The parsed `unit\UN_*.tbl` definition object, vtable `0x820af844`, ≥`0x380` bytes, one per unit — **discovered, not assumed** (`unit_discover.py`), and distinguished from the spawned-entity class `0x820af030` by being one-per-ID and byte-constant within a run. Across runs only pointer words move — `--crosscheck` proves **no reported field offset is run-dependent** (two words, `+0x2c8`/`+0x2d0`, are stage-dependent and remain unidentified). 27 fields ✅ (21 units, 7 runs); the `Maneuver` block is **schema declaration order, 4 bytes/field, base `0x9c` with a two-slot gap after `AA_Roll_Min`** (29 anchors, 0 conflicts), which also pins 5 fields *no* disc record ever values. Angles are **radians at runtime, degrees on disc**. Unlike weapons, unit definitions are instantiated **per stage**, so coverage (21/110) grows by visiting missions — but a defaulted field is **not** a global constant: `Size_Y` provably inherits `Size_X` (7 independent units, 6 distinct values), and three more sibling rules are recorded ❔, recovering 65 values in units never visited — [values](captures/unit-runtime-fields.csv) |
|
||||||
|
| Arsenal develop economy | ✅/❔ | [arsenal-develop-economy](arsenal-develop-economy.md) + [conditions](captures/arsenal-develop-conditions.csv) | The Arsenal reads `weapon.tbl` (item ids, in the 8-category display order — the `No_Equipment … Wep_83` run is exactly **54**, the save blob's length) and `strings.tbl` (names, descriptions, and a **"Conditions to obtain"** block per item) out of `GP_HANGAR_ARSENAL.pak`. All **60** conditions are extracted: gates are stage completion, a predecessor item, or an **ace kill**; costs run 3 000–350 000 P and **20 items are free** once gated. `weapon.tbl`'s first record reproduces the in-game DATA SHEET exactly (Range D / Power E / Speed – / Weight 0.3 = Light / 4000 P) — later records are unreadable from the string pool alone because IDXD **dedupes repeated values**. Used to identify the save blob's index space: **0–31 confirmed** by twelve concordances, tail ❔ |
|
||||||
| UI screen layout (`.rat`) | ✅/🟡 | [ui-rat-layout](structures/ui-rat-layout.md) | One pak per UI screen; each RATC = one (context × language) build; every `<name>.t32` sprite has a `<name>.rat` **layout record** (BE u32; 1280×720 design space; scale/tint/X/Y, keyframes for animated elements, `opt ` link to the focused state). **The tutorial PAUSE menu and the title main menu both rebuild pixel-accurately from the disc.** `loop1.rat` (screen-level draw order) not yet decoded |
|
| UI screen layout (`.rat`) | ✅/🟡 | [ui-rat-layout](structures/ui-rat-layout.md) | One pak per UI screen; each RATC = one (context × language) build; every `<name>.t32` sprite has a `<name>.rat` **layout record** (BE u32; 1280×720 design space; scale/tint/X/Y, keyframes for animated elements, `opt ` link to the focused state). **The tutorial PAUSE menu and the title main menu both rebuild pixel-accurately from the disc.** `loop1.rat` (screen-level draw order) not yet decoded |
|
||||||
| Save file (`savedata`) | ✅/❔ | [savegame-format](structures/savegame-format.md) + [`tools/re-capture/savegame.py`](../../tools/re-capture/savegame.py) | `GDHA` container, zlib payload, chunk stream (`GDAA` / phase name / `GHAD` 122 B progress block / 16×20 B slot table / trailer). **Container and layout read off the title's own serializer `0x822C00E8` and verified by a byte-identical round-trip**; the whole save is 545 B. Payload offsets are also the live save object's offsets (`save+8` GHAD, `save+136` slots). A second save made in-game names **Points** (+24), **flight time in ms** (+4) and **clear ratio %** (+8) off the game's own Details panel; the payload is a **pure function of game state** (same state saved twice = byte-identical, only the header FILETIME and its uninitialised pointer padding move), and the 16 `SHAB` records are **not** the UI's 20 save slots. Difficulty vs stage is undecided — three fields hold 2. **A third save, taken after developing exactly one Arsenal weapon** (Light Machine Gun MG I, 4000 P), moves exactly three things: `+24` Points 4101→101 (which **separates it from `+28`**, that did not move), `+8` clear ratio 5→6 (so the ratio counts *collection*, not only stages), and two entries of the 54-byte blob — `2→4` for the item bought and `0→2` for the successor the game announced as newly developable, giving the blob its alphabet 🟡 *0 locked / 2 developable / 4 developed*. Which item each index is remains open |
|
| Save file (`savedata`) | ✅/❔ | [savegame-format](structures/savegame-format.md) + [`tools/re-capture/savegame.py`](../../tools/re-capture/savegame.py) | `GDHA` container, zlib payload, chunk stream (`GDAA` / phase name / `GHAD` 122 B progress block / 16×20 B slot table / trailer). **Container and layout read off the title's own serializer `0x822C00E8` and verified by a byte-identical round-trip**; the whole save is 545 B. Payload offsets are also the live save object's offsets (`save+8` GHAD, `save+136` slots). A second save made in-game names **Points** (+24), **flight time in ms** (+4) and **clear ratio %** (+8) off the game's own Details panel; the payload is a **pure function of game state** (same state saved twice = byte-identical, only the header FILETIME and its uninitialised pointer padding move), and the 16 `SHAB` records are **not** the UI's 20 save slots. Difficulty vs stage is undecided — three fields hold 2. **A third save, taken after developing exactly one Arsenal weapon** (Light Machine Gun MG I, 4000 P), moves exactly three things: `+24` Points 4101→101 (which **separates it from `+28`**, that did not move), `+8` clear ratio 5→6 (so the ratio counts *collection*, not only stages), and two entries of the 54-byte blob — `2→4` for the item bought and `0→2` for the successor the game announced as newly developable, giving the blob its alphabet 🟡 *0 locked / 2 developable / 4 developed*. Which item each index is remains open |
|
||||||
|
|
||||||
|
|||||||
150
docs/re/arsenal-develop-economy.md
Normal file
150
docs/re/arsenal-develop-economy.md
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
# The Arsenal develop economy, and what the save's blob indexes
|
||||||
|
|
||||||
|
**2026-08-11.** The save file's 54-byte blob was shown to be per-item development
|
||||||
|
state by [a runtime differential](structures/savegame-format.md#the-develop-differential-one-weapon-three-fields) —
|
||||||
|
one weapon bought, two entries moved, `2 → 4` for the item and `0 → 2` for the
|
||||||
|
successor. That named the *values*. This note names the *index space*, and in
|
||||||
|
passing recovers the whole develop economy from the disc.
|
||||||
|
|
||||||
|
## Where the Arsenal gets its data
|
||||||
|
|
||||||
|
`dat/GP_HANGAR_ARSENAL.pak` carries one screen-config record per language whose
|
||||||
|
fields point at the rest:
|
||||||
|
|
||||||
|
```
|
||||||
|
PATH = dat\GP_HANGAR_ARSENAL.pak+eng\
|
||||||
|
WEAPON = weapon.tbl STRINGS = strings.tbl
|
||||||
|
WEAPON_CATEGORIES = 8 Detail_Window_Known / Detail_Window_Unknown
|
||||||
|
ConditionToDevelop = 757,228 WeaponDesc = 734,502 Range = 891,73 …
|
||||||
|
```
|
||||||
|
|
||||||
|
`WEAPON_CATEGORIES = 8` is the eight tabs the screen cycles with LB/RB (GUN,
|
||||||
|
BEAM, LASER, MULTIPURPOSE MISSILE, ANTI-SHIP MISSILE, BOMB/ROCKET, CANNON,
|
||||||
|
SPECIAL). The `…= x,y` fields are screen positions for that screen's labels —
|
||||||
|
`ConditionToDevelop` is *where the conditions text is drawn*, not a condition.
|
||||||
|
|
||||||
|
### `eng\weapon.tbl` — the item table (IDXD, schema `0x03c244b5`, 66 records)
|
||||||
|
|
||||||
|
Its string pool opens with a stage list, then the literal key `WEAPONS`
|
||||||
|
followed by the item ids **in table order**:
|
||||||
|
|
||||||
|
```
|
||||||
|
No_Equipment, Machiene_Cannon_MG1, Machiene_Cannon_MG2H, Machiene_Cannon_MG3,
|
||||||
|
Machiene_Cannon_MG5H, Broad_Sword_SG1, Swing_Sword_SG2H, Twin_Sword_SG3II,
|
||||||
|
Frail_GP37, Stiletto_BG1, Dagger_BG2, Rapier_BG4H, Pilum_BP, … , Wep_83,
|
||||||
|
Wep_84, Wep_85, NullWeapon_Arm1, NullWeapon_Arm2, NullWeapon_Arm3
|
||||||
|
```
|
||||||
|
|
||||||
|
The ids are grouped by the eight categories in the same order the screen shows
|
||||||
|
them, which is why `No_Equipment … Wep_83` is exactly **54** entries — the blob's
|
||||||
|
length.
|
||||||
|
|
||||||
|
Each item then has a record: `Size, Weight, Range, Power, Speed, Stage,
|
||||||
|
MissionObjective, Dependency, Points`. For the **first** record all of it reads
|
||||||
|
straight out, and it matches the running game exactly:
|
||||||
|
|
||||||
|
| field | disc | in-game DATA SHEET for Light Machine Gun MG I |
|
||||||
|
|---|---|---|
|
||||||
|
| Range | `D` | `Range Class D` |
|
||||||
|
| Power | `E` | `Damage Class E` |
|
||||||
|
| Speed | `-` | `Speed Class –` |
|
||||||
|
| Weight | `0.3` | `Weight Class Light` |
|
||||||
|
| Points | `4000` | `4000 P` on the develop row |
|
||||||
|
|
||||||
|
**Caveat, and it is a real one:** IDXD string pools store each distinct string
|
||||||
|
*once*, so from the second record onward every value that repeats an earlier
|
||||||
|
string is absent from the token stream. Record 2 (MG2H) shows only its unique
|
||||||
|
values — `0.4` and `3000` — and record 6 shows no number at all because its cost
|
||||||
|
had already been seen. So `weapon.tbl`'s per-item fields cannot be read from the
|
||||||
|
pool alone; they need the binary node/index region, which is still undecoded
|
||||||
|
(see the module docs in `idxd.rs`). The prose table below is the practical
|
||||||
|
substitute.
|
||||||
|
|
||||||
|
### `eng\strings.tbl` — the economy in prose (IXUD, UTF-16BE)
|
||||||
|
|
||||||
|
The same pak's string table holds, per item: the internal id, the display name,
|
||||||
|
the description, and a **"Conditions to obtain …"** block that spells out the
|
||||||
|
gate and the price:
|
||||||
|
|
||||||
|
> Conditions to obtain Light Swivel Machine Gun MG2H — Completed development of
|
||||||
|
> the Light Machine Gun MG1 — Must spend 3000 points to develop
|
||||||
|
|
||||||
|
All 60 of them are extracted to
|
||||||
|
[`captures/arsenal-develop-conditions.csv`](captures/arsenal-develop-conditions.csv)
|
||||||
|
with the stage gate, the cost and the prerequisite split out. The shape of the
|
||||||
|
economy:
|
||||||
|
|
||||||
|
- gates are **stage completion** (`Complete Stage 1 … 15`), **a predecessor
|
||||||
|
item** (`Completed development of the …`), or **an ace kill** (`Shoot down the
|
||||||
|
ace pilot in Stage 11/13/14`);
|
||||||
|
- costs run 3 000 → 350 000 points, and **twenty items have no cost at all** —
|
||||||
|
they are granted the moment their gate opens (`Tomahawk Alpha Rail Gun —
|
||||||
|
Complete Stage 1`), which is why they read as `Developed` in a list the player
|
||||||
|
never spent points in;
|
||||||
|
- two items are anomalies worth flagging: `Adhesive Mine B2A` says "Must spend
|
||||||
|
points to develop" with **no number**, and ten late entries (`Ballista GSH`,
|
||||||
|
`Designator LH`, `Smoke Marker Launcher`, `Bumble UV`, `Ballista 24 Rocket
|
||||||
|
Launcher`, `Thrush 220AM`, `Divider L3GP`, `Mace GP25H`, `Thor Gun System`,
|
||||||
|
`Spitfire BX`) have a conditions *header* and no conditions — ❔ cut content or
|
||||||
|
non-player weapons.
|
||||||
|
|
||||||
|
## What the blob indexes: the first 32 entries, confirmed
|
||||||
|
|
||||||
|
Predicting the save state from the conditions and comparing against the actual
|
||||||
|
blob is a strong test, because it is made **before** looking at the blob. At the
|
||||||
|
captured state (Stage 1 complete, Stage 02 at standby, 4101 P) the conditions say
|
||||||
|
exactly six items are developable — Light Machine Gun MG1, Broad Sword SG1,
|
||||||
|
Dagger BG2, Pilum BP, Hound SMH, Dart 23 Rocket — and the blob's **six** `2`s sit
|
||||||
|
at WEAPONS-order indices **1, 5, 10, 12, 27, 31**, which are those six items, in
|
||||||
|
order. Nothing had to be fitted.
|
||||||
|
|
||||||
|
| blob | value | item (WEAPONS order) | confirmed by |
|
||||||
|
|---|---|---|---|
|
||||||
|
| 0 | 4 | `No_Equipment` | always available |
|
||||||
|
| 1 | 2→4 | `Machiene_Cannon_MG1` | the differential: bought for 4000 P |
|
||||||
|
| 2 | 0→2 | `Machiene_Cannon_MG2H` | the differential: announced as newly developable |
|
||||||
|
| 5 | 2 | `Broad_Sword_SG1` | `BROAD SWORD SG1 5000P`, **below the fold** in the GUN list |
|
||||||
|
| 9 | 4 | `Stiletto_BG1` | `Developed`; "Initially Mounted"; mounted as NOSE WEAPON |
|
||||||
|
| 10 | 2 | `Dagger_BG2` | `DAGGER BG2 5000P` |
|
||||||
|
| 12 | 2 | `Pilum_BP` | `PILUM BP 6000P` |
|
||||||
|
| 21 | 4 | `Falcon_9AM` | `Developed`; "Initially Mounted"; mounted as MAIN WEAPON 1 |
|
||||||
|
| 22 | 4 | `Buzzard_10AM` | `Developed`; free at Stage 1 |
|
||||||
|
| 26 | 4 | `Terrier_SMH` | `Developed`; free at Stage 1 |
|
||||||
|
| 27 | 2 | `Hound_SMH` | `HOUND SMH 10000P` |
|
||||||
|
| 31 | 2 | `Dirt_23_Rocket` | `DART 23 ROCKET 3500P` ("Dart" is the localised "Dirt") |
|
||||||
|
|
||||||
|
Twelve concordances, no contradiction, over indices 0–31.
|
||||||
|
|
||||||
|
## What the blob does **not** index: the tail is unexplained
|
||||||
|
|
||||||
|
Past index 31 the same alignment fails, and it fails against the screen, not
|
||||||
|
against a theory:
|
||||||
|
|
||||||
|
- `Tomahawk_a_Rail_Gun` is WEAPONS index **38** and the CANNON list shows it
|
||||||
|
`Developed` (it is free once Stage 1 is complete) — but **blob[38] = 0**.
|
||||||
|
- The blob's remaining `4`s are at **33, 39, 45, 46, 47**. In WEAPONS order those
|
||||||
|
are `EMP_Mine_B8E`, `Sling_75KG`, `Shield_Doubler`, `Booster`,
|
||||||
|
`FireControlSystem` — and **every one of them is shown as not developed**:
|
||||||
|
BOMB/ROCKET lists only `DART 23 ROCKET 3500P`, CANNON only the Tomahawk, and
|
||||||
|
**the SPECIAL tab is entirely empty** (all rows dashed). Their conditions agree
|
||||||
|
— Shield Doubler needs Stage 12, Booster an ace kill in Stage 11, FCS Stage 6.
|
||||||
|
|
||||||
|
So five `4`s in the tail correspond to nothing the Arsenal reports as owned, and
|
||||||
|
one genuinely-owned item reads `0`. A single `+1` shift does not repair it
|
||||||
|
either: `blob[39] = 4` would put the Tomahawk right, but then `blob[33] = 4`
|
||||||
|
lands on `Arrow_27_Rocket` (Stage 2 + 5000 P, unreachable here) and 45/46/47
|
||||||
|
still land on locked SPECIAL items.
|
||||||
|
|
||||||
|
**Status: ❔ NEEDS-HUMAN / needs the next differential.** The value alphabet and
|
||||||
|
the first 32 indices are settled; the tail is not, and should not be written into
|
||||||
|
the reimplementation as if it were. The cheap way to settle it is a second
|
||||||
|
development in a **late** category (CANNON or SPECIAL) — whichever index moves
|
||||||
|
names the tail directly. It needs points: the balance is 101 P, so it waits on a
|
||||||
|
mission payout.
|
||||||
|
|
||||||
|
## Evidence
|
||||||
|
|
||||||
|
- [`captures/arsenal-develop-conditions.csv`](captures/arsenal-develop-conditions.csv) — all 60 conditions blocks.
|
||||||
|
- [`captures/arsenal-categories-all.png`](captures/arsenal-categories-all.png) — the eight category tabs.
|
||||||
|
- [`captures/arsenal-gun-below-fold.png`](captures/arsenal-gun-below-fold.png) — Broad Sword SG1, the entry that is not visible without scrolling.
|
||||||
|
- [`captures/arsenal-gun-list-predevelop.png`](captures/arsenal-gun-list-predevelop.png) · [`captures/arsenal-mg1-developed.png`](captures/arsenal-mg1-developed.png) — the differential itself.
|
||||||
BIN
docs/re/captures/arsenal-categories-all.png
Normal file
BIN
docs/re/captures/arsenal-categories-all.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 860 KiB |
61
docs/re/captures/arsenal-develop-conditions.csv
Normal file
61
docs/re/captures/arsenal-develop-conditions.csv
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
item,stage_required,points_cost,other_conditions,raw_text
|
||||||
|
Light Machine Gun MG1,1,4000,,Conditions to obtain Light Machine Gun MG1 - Complete Stage 1 - Must spend 4000 points to develop
|
||||||
|
Light Swivel Machine Gun MG2H,,3000,Completed development of the Light Machine Gun MG1,Conditions to obtain Light Swivel Machine Gun MG2H - Completed development of the Light Machine Gun MG1 - Must spend 3000 points to develop
|
||||||
|
Heavy Machine Gun MG3,6,6000,,Conditions to obtain Heavy Machine Gun MG3 - Complete Stage 6 - Must spend 6000 points to develop
|
||||||
|
Heavy Swivel Machine Gun MG5H,,10000,Completed development of the Heavy Machine Gun MG3,Conditions to obtain Heavy Swivel Machine Gun MG5H - Completed development of the Heavy Machine Gun MG3 - Must spend 10000 points to develop
|
||||||
|
Broad Sword SG1,1,5000,,Conditions to obtain Broad Sword SG1 - Complete Stage 1 - Must spend 5000 points to develop
|
||||||
|
Swing Sword SG2H,,10000,Completed development of the Twin Sword SG3II,Conditions to obtain Swing Sword SG2H - Completed development of the Twin Sword SG3II - Must spend 10000 points to develop
|
||||||
|
Twin Sword SG3II,,8000,Completed development of the Broad Sword SG1,Conditions to obtain Twin Sword SG3II - Completed development of the Broad Sword SG1 - Must spend 8000 points to develop
|
||||||
|
Flail GP37,6,,,Conditions to obtain Flail GP37 - Complete Stage 6
|
||||||
|
Stiletto BG1,,,Initially Mounted,Conditions to obtain Stiletto BG1 - Initially Mounted
|
||||||
|
Dagger BG2,,5000,Development Possible,Conditions to obtain Dagger BG2 - Development Possible - Must spend 5000 points to develop
|
||||||
|
Rapier BG4H,,12000,Completed development of the Dagger BG2,Conditions to obtain Rapier BG4H - Completed development of the Dagger BG2 - Must spend 12000 points to develop
|
||||||
|
Pilum BP,,6000,Development Possible,Conditions to obtain Pilum BP - Development Possible - Must spend 6000 points to develop
|
||||||
|
Multi Pike BP,,30000,Completed development of the Pilum BP,Conditions to obtain Multi Pike BP - Completed development of the Pilum BP - Must spend 30000 points to develop
|
||||||
|
Spear HBP,,10000,Completed development of the Multi Pike BP,Conditions to obtain Spear HBP - Completed development of the Multi Pike BP - Must spend 10000 points to develop
|
||||||
|
Long Spear HBP,7,350000,Completed development of the Gray Head T76H,Conditions to obtain Long Spear HBP - Complete Stage 7 - Completed development of the Gray Head T76H - Must spend 350000 points to develop
|
||||||
|
Gray Head T76H,,25000,Completed development of the Spear HBP,Conditions to obtain Gray Head T76H - Completed development of the Spear HBP - Must spend 25000 points to develop
|
||||||
|
Saber LG1,14,,,Conditions to obtain Saber LG1 - Complete Stage 14
|
||||||
|
Twin Saber LG2H,15,,,Conditions to obtain Twin Saber LG2H - Complete Stage 15
|
||||||
|
Needle L1GP,6,10000,,Conditions to obtain Needle L1GP - Complete Stage 6 - Must spend 10000 points to develop
|
||||||
|
Fire Arrow L2GP,,20000,Completed development of the Needle L1GP,Conditions to obtain Fire Arrow L2GP - Completed development of the Needle L1GP - Must spend 20000 points to develop
|
||||||
|
Falcon 9AM,,,Initially Mounted,Conditions to obtain Falcon 9AM - Initially Mounted
|
||||||
|
Buzzard 10AM,1,,,Conditions to obtain Buzzard 10AM - Complete Stage 1
|
||||||
|
Hawk 75AM,6,10000,Possess Buzzard 10AM,Conditions to obtain Hawk 75AM - Complete Stage 6 - Possess Buzzard 10AM - Must spend 10000 points to develop
|
||||||
|
Condor 105AM,6,,,Conditions to obtain Condor 105AM - Complete Stage 6
|
||||||
|
Eagle 120AM,12,15000,Completed development of the Hawk 75AM,Conditions to obtain Eagle 120AM - Complete Stage 12 - Completed development of the Hawk 75AM - Must spend 15000 points to develop
|
||||||
|
Terrier SMH,1,,,Conditions to obtain Terrier SMH - Complete Stage 1
|
||||||
|
Hound SMH,,10000,Development Possible,Conditions to obtain Hound SMH - Development Possible - Must spend 10000 points to develop
|
||||||
|
Pointer SM,,40000,Completed development of Piranha T53,Conditions to obtain Pointer SM - Completed development of Piranha T53 - Must spend 40000 points to develop
|
||||||
|
Piranha T53,,25000,Obtain White Shark T53R,Conditions to obtain Piranha T53 - Obtain White Shark T53R - Must spend 25000 points to develop
|
||||||
|
White Shark T53R,6,,,Conditions to obtain White Shark T53R - Complete Stage 6
|
||||||
|
Dart 23 Rocket,1,3500,,Conditions to obtain Dart 23 Rocket - Complete Stage 1 - Must spend 3500 points to develop
|
||||||
|
Arrow 27 Rocket,2,5000,,Conditions to obtain Arrow 27 Rocket - Complete Stage 2 - Must spend 5000 points to develop
|
||||||
|
Adhesive Mine B2A,3,MISSING,,Conditions to obtain Adhesive Mine B2A - Complete Stage 3 - Must spend points to develop
|
||||||
|
EMP Mine B8E,6,50000,,Conditions to obtain EMP Mine B8E - Complete Stage 6 - Must spend 50000 points to develop
|
||||||
|
Laser Mine B9L,6,15000,,Conditions to obtain Laser Mine B9L - Complete Stage 6 - Must spend 15000 points to develop
|
||||||
|
Cauldron 50 Rocket,14,,,Conditions to obtain Cauldron 50 Rocket - Complete Stage 14
|
||||||
|
Cluster Mine B10,6,5000,,Conditions to obtain Cluster Mine B10 - Complete Stage 6 - Must spend 5000 points to develop
|
||||||
|
Maelstrom Bomb,6,200000,,Conditions to obtain Maelstrom Bomb - Complete Stage 6 - Must spend 200000 points to develop
|
||||||
|
Tomahawk Alpha Rail Gun,1,,,Conditions to obtain Tomahawk Alpha Rail Gun - Complete Stage 1
|
||||||
|
Sling 75KG,2,5000,,Conditions to obtain Sling 75KG - Complete Stage 2 - Must spend 5000 points to develop
|
||||||
|
Glaive 120mm Cannon,6,,,Conditions to obtain Glaive 120mm Cannon - Complete Stage 6
|
||||||
|
Arbalest 155KG,6,25000,,Conditions to obtain Arbalest 155KG - Complete Stage 6 - Must spend 25000 points to develop
|
||||||
|
Monoceros Long Cannon,,,Shoot down the ace pilot in Stage 14,Conditions to obtain Monoceros Long Cannon - Shoot down the ace pilot in Stage 14
|
||||||
|
Grav Cannon XGS,12,60000,,Conditions to obtain Grav Cannon XGS - Complete Stage 12 - Must spend 60000 points to develop
|
||||||
|
Ballista GSH,,,,Conditions to obtain Ballista GSH
|
||||||
|
Designator LH,,,,Conditions to obtain Designator LH
|
||||||
|
Smoke Marker Launcher,,,,Conditions to obtain Smoke Marker Launcher
|
||||||
|
Bumble UV,,,,Conditions to obtain Bumble UV
|
||||||
|
Jamming System,3,15000,,Conditions to obtain Jamming System - Complete Stage 3 - Must spend 15000 points to develop
|
||||||
|
Shield Doubler,12,50000,,Conditions to obtain Shield Doubler - Complete Stage 12 - Must spend 50000 points to develop
|
||||||
|
Booster,,,Shoot down the ace pilot in Stage 11,Conditions to obtain Booster - Shoot down the ace pilot in Stage 11
|
||||||
|
Fire Control System,6,15000,,Conditions to obtain Fire Control System - Complete Stage 6 - Must spend 15000 points to develop
|
||||||
|
Regenerator,12,100000,,Conditions to obtain Regenerator - Complete Stage 12 - Must spend 100000 points to develop
|
||||||
|
Cartridge Holder,,,Shoot down the ace pilot in Stage 13,Conditions to obtain Cartridge Holder - Shoot down the ace pilot in Stage 13
|
||||||
|
Ballista 24 Rocket Launcher,,,,Conditions to obtain Ballista 24 Rocket Launcher
|
||||||
|
Thrush 220AM,,,,Conditions to obtain Thrush 220AM
|
||||||
|
Divider L3GP,,,,Conditions to obtain Divider L3GP
|
||||||
|
Mace GP25H,,,,Conditions to obtain Mace GP25H
|
||||||
|
Thor Gun System,,,,Conditions to obtain Thor Gun System
|
||||||
|
Spitfire BX,,,,Conditions to obtain Spitfire BX
|
||||||
|
BIN
docs/re/captures/arsenal-gun-below-fold.png
Normal file
BIN
docs/re/captures/arsenal-gun-below-fold.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 158 KiB |
@@ -131,15 +131,16 @@ three-state progression *locked → developable → developed*, and the blob is
|
|||||||
Arsenal's development state, not a bitmask of owned weapons (a bitmask could not
|
Arsenal's development state, not a bitmask of owned weapons (a bitmask could not
|
||||||
represent the middle state).
|
represent the middle state).
|
||||||
|
|
||||||
Two things this does **not** settle, and should not be written as if it did:
|
**Which item each index is** was chased separately and is **half settled** — see
|
||||||
|
[the Arsenal develop economy](../arsenal-develop-economy.md). In short: the index
|
||||||
|
space is the `WEAPONS` id list in `GP_HANGAR_ARSENAL.pak :: eng\weapon.tbl`, whose
|
||||||
|
`No_Equipment … Wep_83` run is exactly 54 long; twelve independent concordances
|
||||||
|
confirm indices **0–31** (including all six `2`s, predicted from the disc's own
|
||||||
|
"Conditions to obtain" text before the blob was looked at), while the tail from
|
||||||
|
index 33 on contradicts the screen and is left ❔.
|
||||||
|
|
||||||
|
One more thing this does **not** settle, and should not be written as if it did:
|
||||||
|
|
||||||
- **Which item each index is.** The index space is 54 wide; the player-arsenal id
|
|
||||||
lists in `GP_HANGAR_ARSENAL.pak` union to 35 distinct weapon ids, so the blob is
|
|
||||||
not indexed by that list. MG I is at index **1**, not 0, even though it is the
|
|
||||||
first row of the first weapon type — so index 0 is something already developed
|
|
||||||
that the GUN list does not show first. **NEEDS-HUMAN / needs another
|
|
||||||
differential**: develop a second item in a *different* category and see which
|
|
||||||
index moves.
|
|
||||||
- **Whether the +1 on the clear ratio is per item.** One data point. If it is
|
- **Whether the +1 on the clear ratio is per item.** One data point. If it is
|
||||||
per item, the ratio is a *collection* metric and not a stage metric, which
|
per item, the ratio is a *collection* metric and not a stage metric, which
|
||||||
matters because it is one of the three numbers the Details panel shows and it
|
matters because it is one of the three numbers the Details panel shows and it
|
||||||
|
|||||||
Reference in New Issue
Block a user