Original route planning controls
The current GMRouteSettingsComponent.as defines economical0, fastest1 and FSD boost2, an independent jet-cone flag, boost level0–3 and a cargo-mass slider. Find-OriginalGalaxyRouteSettings.py resolves the four exact callback registrations; Trace-OriginalGalaxyRouteSettings.py independently matches the original6891 and currentED5 controller bodies and actual vtable slots. No game process was accessed by this research.
The original 551FFF0 interface is object base+88. Its registered interface is base+58 (551FEC8, current 551FE98), with actual type global 5FDB224. The current controller table is 551FFC0:
| Control | Original slot/body | Current body | ABI |
|---|---|---|---|
| Mode | F0 /3A6AF50 | 3A6AEB0 | EDX integer0/1/2 |
| Jet cone | F8 /3A6B040 | 3A6AFA0 | DL boolean |
| FSD boost level | 100 /3A6AEB0 | 3A6AE10 | XMM1 float, original rounding then uint<4 |
| Virtual cargo mass | 108 /3A6AE20 | 3A6AD80 | XMM1 float |
The float ABI is checked both at the callback's movaps xmm1,xmm6/indirect call and at the receiver's XMM1 use. These are actual original setters, including their refresh/save behavior. The plugin never substitutes direct memory writes.
Verification reads the controller's mode+5AC, cargo+5B0, boost-enabled+5B4 and level+5B8. Jet cone is original Settings integer key29: ready+5F8==2, index+560<count+530, rows+538 with stride248 and uint array+54. Both actual Settings getter/setter slots are checked. Missing data stays unavailable. All setters reject original view1 in the guarded context; only the mode setter additionally rejects view3.
route.plan optionally carries explicit routeOptions. Null fields preserve game values and an absent/empty override retains the original request path. Explicit overrides require the advertised capability, are validated before submission, execute only on the existing owning thread with the existing idle-FSD/entity/controller conditions, and must read back correctly before submitting the destination. Cargo capacity is additionally checked against the current player snapshot. This is an offline-tested implementation; live route computation and UI fidelity remain unconfirmed.
The separate StarClass mask path is now bound to the actual original UI setter; see StarClass evidence. The integration must advertise its own capability and require exact original mask readback. Other category masks and live original planner acceptance remain separate work.