diff --git a/docs/re/BACKLOG.md b/docs/re/BACKLOG.md index a79e140..9f2d634 100644 --- a/docs/re/BACKLOG.md +++ b/docs/re/BACKLOG.md @@ -531,6 +531,21 @@ search cannot find a *schedule*. a consequence of the phase, never its cause. ⇒ the logic is in **code**, and `default.xex` is encrypted on disc, so the decrypted image exists only in guest RAM. That is the honest end of the static search. +* ✅🟡 **(2026-08-24) The mission script is READABLE — and phase 1 never advanced + because the pilot killed the wrong things.** + [`mission-objectives-text.md`](mission-objectives-text.md). + ✅ `language\*_local_string.tbl` is **`IXUD`, UTF-16-BE** (prefix `language\`, + a third convention) — that encoding is why earlier dumps looked like garbage. + ✅ Stage 02's nine sub-objectives in words (*"You destroyed all enemy + fighters!"*, *"You sunk all enemy warships!"*, *"You destroyed all enemy cruise + missiles!"*). ✅ **Phases confirmed twice over**: the guide script is three acts + — marked attackers → warship engine/weapons/shield → missiles — matching the + per-phase rosters, with phase 3's **`UN_e201_ADAN_ISCMissile` ×9** exactly + matching `SUBOBJ_013`. 🟡 **Phase-1 objective is stated outright: destroy the + MARKED ATTACKERS** (`UN_e010_ADAN_Attacker_S`, 4 squadrons) — but every loss + line in every run reads `UN_e007_ADAN_Turret`, because `SYLPH_HUNT`/`KEEPOUT` + were built for turrets. **42 kills were the wrong 42.** **Test: a pilot that + prioritises `e010` over `e007`**, watching `deployed` jump from 41. 🔴 `SYLPH_HZ=3` refuted as a lever: it gave the LOWEST frame rate (8/s) with the most kills, so pilot polling is not the throttle. * ~~🚧 BLOCKER: t=210/240 unreachable in one turn~~ — **superseded, see above**; diff --git a/docs/re/mission-objectives-text.md b/docs/re/mission-objectives-text.md new file mode 100644 index 0000000..99c7b50 --- /dev/null +++ b/docs/re/mission-objectives-text.md @@ -0,0 +1,75 @@ +# The mission script in plain English — and why phase 1 never completed + +Status: ✅ the localised string tables are decoded and readable; ✅ the phase +structure is confirmed narratively *and* by roster composition; 🟡 a concrete, +testable reason the phase never advanced in any run. + +## ✅ `IXUD` — the localised string container + +`language\*_local_string.tbl` (the prefix is `language\`, a third convention +after `stage\` and `message\`) is **not** IDXD. Magic is `IXUD`, and its strings +are **UTF-16 big-endian**. That is why every earlier ASCII-oriented dump of these +files produced garbage. + +Reading them is immediate once the encoding is known, and it makes the mission +design directly legible instead of inferred. + +## ✅ Stage 02's nine sub-objectives, in words + +| id | text | +|---|---| +| `SUBOBJ_005` | You rescued the ally destroyer! | +| `SUBOBJ_006` | You destroyed all enemy fighters! | +| `SUBOBJ_007` | You sunk all enemy warships! | +| `SUBOBJ_008` | You rescued the ally cruiser, Amalthea! | +| `SUBOBJ_010` | The ally cruiser CALIBAN took no damage! | +| `SUBOBJ_011` | You sunk the enemy destroyer targeting the ACROPOLIS! | +| `SUBOBJ_013` | You destroyed all enemy cruise missiles! | +| `SUBOBJ_014` | You destroyed all enemy missiles and units! | + +(`SUBOBJ_009` has no text.) 91 objectives are defined across the game. + +## ✅ The three phases, confirmed twice over + +The guide script reads as three distinct acts, and each matches the per-phase +roster composition found independently in +[mission-phase-deployment.md](mission-phase-deployment.md): + +| phase | script | roster | +|---|---|---| +| 1 | *"The attackers with the orange markers, right?"*, *"Protect the ACROPOLIS!"* | turrets, attackers, fighters | +| 2 | *"destroy the ship's engine"*, *"destroy that ship's weapons"*, *"take out the enemy's shield projector"* | destroyers, frigates, cruisers | +| 3 | *"start by taking out that missile"*, *"Concentrate on destroying the missiles one by one"* | **`UN_e201_ADAN_ISCMissile` ×9** | + +Phase 3's nine cruise missiles against `SUBOBJ_013` *"You destroyed all enemy +cruise missiles!"* is an exact match between two files decoded on different days +by different routes. + +## 🟡 Why phase 1 never advanced: the pilot killed the wrong things + +The phase-1 objective is stated outright — **destroy the marked attackers**: + +> *"Rhinos, prepare for combat. Are you all clear on your targets?"* +> *"The attackers with the orange markers, right? Roger that!"* +> *"Katana, those attackers are our targets!"* + +Those are `UN_e010_ADAN_Attacker_S`, of which phase 1 fields four squadrons. + +**The hunting pilot targeted turrets almost exclusively.** Every loss line in the +run logs reads `UN_e007_ADAN_Turret`, with `UN_e010_ADAN_Attacker_S` appearing +only twice across all runs — unsurprising, since `SYLPH_HUNT` was built to make +turrets targets and `SYLPH_KEEPOUT` was tuned for them. So 42 kills were +overwhelmingly the *wrong* 42. + +That gives a mundane explanation for the whole run of null results, and it does +not require the frames reading or event-gating to be settled first. + +**Prediction:** destroying the phase-1 `UN_e010_ADAN_Attacker_S` squadrons should +advance the phase, which is directly observable as `deployed` jumping from 41 +toward the phase-2 roster. + +**Test:** a pilot that prioritises `e010` over `e007` — a target-preference knob, +not new decoding — and the existing probe watching `deployed`. + +This is 🟡, not ✅: the objective text is certain, but that *this particular +objective* gates the phase advance is inference from the script's structure.