re: the GP_MAIN_GAME unnamed block -- 333 of 337 already owned, 4 genuinely new
All six language copies carry the identical 337 unnamed IDXD hashes. Partitioned by record-name shape (53 shapes), 333 map onto families the corpus already documents: 131 weapon datasheets, 114 unit datasheets, 64 unit Faces tables, 10 unit message sets, 8 chatter rule tables, 5 enumerations/formations/placement. 114 is exactly the corpus's unit count (43 Craft + 71 Vessel) -- these are the tables the corpus has always worked with, reached by SHAPE because they have no names. Naming them adds nothing. The Enumerate object in each GP_MAIN_GAME_* is EMPTY, zero fields, which is why route 2 named 1283 entries in DefTables and 0 here. The 4 unclassified objects are new -> docs/re/structures/player-tuning-tables.md: the analog stick response curves (8 axes, 11 samples + a named Count = 11, tested 8/8; yaw/roll/throttle are the identity ramp, the shaping is all on pitch and the camera axes; adv_yaw is non-monotone and unexplained), the player craft's flight envelope (Booster, 50 fields -- the player side of the AA_/AV_ pair documented for NPCs -- plus TacticalManeuver, SpecialAttack + three gauge bands, SpecialWeapon, Misc), the Stage 16 boss (identified by Shell_S16Boss_* ids; Guardian HP 65000, Core 42000), and one unidentified Generic naming eff_n0071. New regenerator main_game_unnamed.py, 112-line artefact, byte-identical across two runs; the other twelve artefacts verify unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
This commit is contained in:
@@ -67,6 +67,30 @@ redo the work.
|
||||
is now iterated **sorted** — a plain `set` gave a different winner for collided
|
||||
hashes on each run and the artefact failed its own byte-identical check.
|
||||
|
||||
## ✅ What the `GP_MAIN_GAME_*` unnamed block is — 333 of 337 already owned (2026-08-27)
|
||||
|
||||
Every language copy carries the **identical** 337 unnamed IDXD hashes (6/6). By
|
||||
record-name shape (53 shapes), classified against the corpus:
|
||||
|
||||
| | objects | owner |
|
||||
|---|---:|---|
|
||||
| weapon datasheets (`Shell+Weapon` ± `ShellWake`/missile params) | **131** | `weapon-datasheet-static.md` |
|
||||
| unit datasheets (`…Maneuver…StructureCount` + turrets/bridges) | **114** | `unit-datasheet-static.md` |
|
||||
| unit `Faces` tables | 64 | `unit-datasheet-static.md` |
|
||||
| unit message sets (`Generic+Message_000…`) + `MessageSet_test` | 10 | `preset-message-rules.md` |
|
||||
| chatter rule tables (`ATTACK_SUCCEEDED…`) | 8 | `preset-message-rules.md` |
|
||||
| `EnumUnit` ×2, `EnumWeapon`, formations, placement/route-test, asteroid groups | 5 | `stage-mission-tables.md` etc. |
|
||||
| **unclassified** | **4** | → [`player-tuning-tables.md`](player-tuning-tables.md) |
|
||||
|
||||
🔑 **The 114 unit datasheets are exactly the corpus's 114 units** (43 `Craft` +
|
||||
71 `Vessel`). These objects were never undiscovered data — they are the tables
|
||||
the corpus has always worked with, reached **by record shape because they have
|
||||
no names**. Naming them adds nothing; only the 4 unclassified ones were new.
|
||||
|
||||
⚠️ **The `Enumerate` object in each `GP_MAIN_GAME_*` is EMPTY** — zero fields,
|
||||
declaring nothing. It is a shipped placeholder, and it is why route 2 named
|
||||
1 283 entries in `DefTables` and **0** here.
|
||||
|
||||
## ✅✅ ROUTE 2 — the `Enumerate` declaration tables close `DefTables` (2026-08-27)
|
||||
|
||||
The string harvest could never name `DefTables`, because **those names are not
|
||||
|
||||
81
docs/re/structures/player-tuning-tables.md
Normal file
81
docs/re/structures/player-tuning-tables.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# ✅ The player-tuning tables — analog response curves, booster/flight limits, special attacks
|
||||
|
||||
- **Regenerate:** `python3 tools/re-capture/main_game_unnamed.py` → [`../data/main-game-unnamed.txt`](../data/main-game-unnamed.txt)
|
||||
- **Where:** `GP_MAIN_GAME_{D,E,F,I,J,S}.pak`, as **unnamed** IDXD objects — identical hash sets in all six language copies.
|
||||
- **Related:** [[flight-speed-law]], [[flight-controls-runtime]], [[unit-datasheet-static]], [[archive-naming]].
|
||||
|
||||
Found while characterising the 337 unnamed IDXD objects in each main-game pak
|
||||
(see `archive-naming.md`). **333 of the 337 belong to families the corpus already
|
||||
documents.** These are the four that do not.
|
||||
|
||||
## ✅ The analog stick response curves — object `955ca077`
|
||||
|
||||
Eight records, one per input axis, each **11 positional values plus a named
|
||||
`Count = 11`**. ⚠️ `Count` naming an indexed group is not safe in general — here
|
||||
it was tested and **holds 8/8**.
|
||||
|
||||
| record | shape | curve |
|
||||
|---|---|---|
|
||||
| `AnalogRevice_yaw` | **identity** | `0.0 0.1 … 1.0` |
|
||||
| `AnalogRevice_roll` | **identity** | `0.0 0.1 … 1.0` |
|
||||
| `AnalogRevice_throttle` | **identity** | `0.0 0.1 … 1.0` |
|
||||
| `AnalogRevice_pitch` | strongly eased | `0.000 0.003 0.010 0.020 0.040 0.065 0.100 0.155 0.250 0.500 1.000` |
|
||||
| `AnalogRevice_eye_pitch` | eased | `0.00 0.01 0.03 0.06 0.10 0.18 0.28 0.42 0.60 0.80 1.00` |
|
||||
| `AnalogRevice_eye_yaw` | eased, flat dead lead-in | `0.00 0.00 0.00 0.00 0.03 0.10 0.18 0.29 0.45 0.68 1.00` |
|
||||
| `AnalogRevice_adv_roll` | S-curve | `0.000 0.005 0.032 0.080 0.138 0.231 0.387 0.584 0.792 0.941 1.000` |
|
||||
| `AnalogRevice_adv_yaw` | **not monotone** | `0.000 0.016 0.052 0.143 0.482 0.940 1.000 0.916 0.611 0.382 0.208` |
|
||||
|
||||
✅ **Three of the eight are the identity ramp** — yaw, roll and throttle are
|
||||
unshaped, and the shaping the game does apply is all on **pitch and the camera
|
||||
("eye") axes**. 🟡 `adv_yaw` **rises to 1.0 at sample 6 then falls back to
|
||||
0.208**, so whatever it indexes, it is *not* a stick-deflection curve like the
|
||||
other seven; it has the shape of an envelope over something else. Untested.
|
||||
|
||||
The same object carries a `Tweak` record with what read as **deadzones and
|
||||
input-timing constants** — `mov_stick_play = 5000`, `eye_stick_play = 6000`
|
||||
(raw stick units), `order_cancel_time = 120`, `YawMagForNormal = 2.0`, and six
|
||||
`receipt_*` / `minimum_side_s` values. 🟡 The units are inferred from magnitude,
|
||||
not read from the consumer.
|
||||
|
||||
## ✅ The player craft's flight envelope — object `890e1be4`
|
||||
|
||||
Eight records. The big one is **`Booster`, 50 fields**, and it is the *player*
|
||||
side of the `AA_`/`AV_` acceleration/velocity pair that
|
||||
[[unit-datasheet-static]] documents for NPC craft: `AA_Yaw_Min/Max`,
|
||||
`AV_Yaw_Min/Max`, `AA_Roll_*`, `AV_Roll_*`, `AA_PitchPlus/Minus_*`,
|
||||
`AV_PitchPlus/Minus_*`, `AA_/AV_AxisMode_*`, each with an afterburner twin
|
||||
(`AB_AA_Yaw`, `AB_AV_Roll`, …), plus `MinimumVelocity 100`,
|
||||
`CruisingVelocity 612`, `MaximumVelocity 2100`, `Acceleration 900`,
|
||||
`Deceleration 600`, `SideThrustAcceleration 1500`, `SideThrustVelocity_Max 875`,
|
||||
three `*DragFactor 3.0` and `MaximumBank_Normal 60.0`.
|
||||
|
||||
The other seven:
|
||||
|
||||
- `TacticalManeuver` — `Turn180RequiredTime 0.5`, `RollL/RRequiredTime 1.0`,
|
||||
`RollL/RSlideLength 350`, `RollToHorizonTime 2.0`, `TurnTargetRequiredTime 2.0`.
|
||||
These name the **evade moves** whose morph poses the mesh work already found as
|
||||
`_mnv*` / `_turn180` XBG7 variants.
|
||||
- `SpecialAttack` + `SpecialAttackGauge_1/2/3` — the charge gauge in three bands
|
||||
(`ChargeMaximum` 33 / 66 / 100, each with its own `AttackTime_Minimum/Maximum`),
|
||||
and the "FireBird" attack (`FireBirdPower 1000`, `_Ex 4000`, `FireBirdTime
|
||||
0.75`, `FireBirdRadius 100.0f` — the game's own stray `f` suffix).
|
||||
`BulletTimeVolumePC 0.4` / `NPC 0.1` are the slow-motion factors.
|
||||
- `SpecialWeapon` — `ShieldDoubler_Time/Count`, `HPRegenerator_RegenSpeed/
|
||||
MinimumTime`, `ExtraCartridge_Quantity/CoolVolume/TimeVolume`.
|
||||
- `Misc` — effect names (`eff_s110`, `eff_i003_f`, `eff_i004_f`, `eff_c001`) and
|
||||
`EffectPlacementFrameName = GN_mnt`.
|
||||
|
||||
## ✅ The Stage 16 boss — object `0202269d`
|
||||
|
||||
Records `Guardian` (19 fields) and `Core` (10). `Guardian` names its three
|
||||
weapons by shell id — `Shell_S16Boss_AAGun`, `Shell_S16Boss_Laser`,
|
||||
`Shell_S16Boss_HBeam` — which is what identifies the object: **Stage 16**, the
|
||||
stage `stage-settings-table.md` singles out via its unique `IsBoss16Enable`
|
||||
field. `Guardian` HP 65 000 with `DamageLevel1/2` at 35 000 / 20 000; `Core`
|
||||
HP 42 000 with levels at 25 000 / 10 000 and a lock-on release cycle
|
||||
(`LockOnReleaseInterval 15.0` ± `LockOnReleaseRandomInterval 5.0`).
|
||||
|
||||
## 🟡 The fourth: object `a6c6c79b`
|
||||
|
||||
One record, `Generic`, one field — the **name** `eff_n0071` with an empty value.
|
||||
An effect id and nothing else. Not identified.
|
||||
Reference in New Issue
Block a user