diff --git a/docs/re/structures/isl-builtins.md b/docs/re/structures/isl-builtins.md index 9ec11900..1572a9b5 100644 --- a/docs/re/structures/isl-builtins.md +++ b/docs/re/structures/isl-builtins.md @@ -140,6 +140,44 @@ and spread checks but its maximum *exceeds* the table — flag indices run 0..31 against symbol tables as small as 40 — so it is excluded, and the disassembler now declines to resolve it rather than printing an invented name. +### 🟡 Built-in 15 takes a craft-class scalar — but "speed" does not survive intact + +`15` is the biggest unnamed built-in: **1360 sites across 27 of 28 stages**. Its +operand shape is invariant — `(unit, double)` — and joining every call site's +unit to its craft type through `stage\UnitGroup_S.tbl` resolves **1360 of +1360, none unknown**. The values stratify hard by class: + +| class | craft (sites) | values | +|---|---|---| +| capital hulls | `e106_Destroyer` (159), `e104_Carrier` (62), `e105_CruiserEX` (53), `f105_Cruiser` (40), `f101_Acropolis` (30), `e102_BattleshipEX` (27), `e108_ASFrigate` (33) | **0–100** | +| mobile craft | `e001_Elan` (73) 500, `f003_ArrowHead` (54) 400, `f001_DeltaSaber_T` (28) 400, `f002_DeltaSaber_W` (36) **600**, `e010_Attacker_S` (54) 250–400, `e009_Phantom` (16) 300 | **250–600** | +| asteroid | `mn040_Asteroid_Big` (74) | **0, and only 0** | + +Capital ships crawl, fighters run, the player's own craft is fastest at 600, and +a rock never moves. That is a speed's signature and it is hard to explain any +other way. + +#### ❌ Except that turrets break it + +| craft | sites | values | +|---|---|---| +| `UN_e007_ADAN_Turret` | 112 | 400 ×89, 280 ×17, 380 ×4, 250 ×2 | +| `UN_e008_ADAN_TurretPlus` | 64 | 450 ×62, 500 ×2 | + +**176 of the 1360 sites — 13 % — are turrets, and they carry fighter-class +values.** A turret does not move, so a literal hull speed cannot be what this +sets for them. Either the field means something else (a projectile speed, a +tracking rate, an FCS target-speed cap), or it means different things by class. + +The asteroid is the control that makes this sharp: a genuinely immobile object +gets **0 every time**, so "immobile things get a meaningless value" does not +explain the turrets either. + +So: ✅ a craft-class-dependent scalar in speed's range and with speed's ordering; +❌ not `set_speed` as a plain reading. **Left unnamed.** The handler writes +`[unit+196]`, initialised from `[unit+192]` at spawn — reading its consumer is +what would settle it. + ### ✅ Four built-ins are TUTORIAL-ONLY — 85 sites, every one in S18–S23 `96`, `97`, `98` and `104` were unnamed. Measured over all 28 stages, they form a