re: built-in 15 takes a craft-class scalar — but "set_speed" does not survive
15 is the biggest unnamed built-in: 1360 sites across 27 of 28 stages, with
an invariant (unit, double) operand shape. Joining every call site's unit to
its craft type through stage\UnitGroup_S<NN>.tbl resolves 1360 of 1360, none
unknown, and the values stratify hard:
capital hulls (Destroyer, Carrier, CruiserEX, Cruiser, Acropolis,
BattleshipEX, ASFrigate) 0-100
mobile craft (Elan 500, ArrowHead 400, DeltaSaber_T 400,
DeltaSaber_W 600, Attacker_S 250-400,
Phantom 300) 250-600
asteroid (mn040_Asteroid_Big, 74 sites) 0, only 0
Capital ships crawl, fighters run, the player's craft is fastest at 600, and
a rock never moves. That is a speed's signature.
Except turrets break it. UN_e007_ADAN_Turret carries 400 x89 / 280 x17 /
380 x4 / 250 x2 and UN_e008_ADAN_TurretPlus 450 x62 / 500 x2 -- 176 of the
1360 sites, 13%, at fighter-class values on something that does not move.
The asteroid is what makes this sharp rather than dismissible: a genuinely
immobile object gets 0 every single time, so "immobile things get junk" does
not explain the turrets.
So the operand is a craft-class-dependent scalar with speed's range and
ordering, but set_speed is not a sound reading of it. Left UNNAMED. The
handler writes [unit+196], initialised from [unit+192] at spawn; reading its
consumer is what would settle it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
This commit is contained in:
@@ -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<NN>.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
|
||||
|
||||
Reference in New Issue
Block a user