The classifier is a real callable unit (StarFleet::ClassifyLeg 0x00703730, thiscall, ret 0x14, two direct callers), so the hook goes on the classifier and not on a proxy for it. Nine predictions with their falsification symptoms, the workload that reaches both route classes, and the three input gaps that are counted per call rather than argued away. addresses.d/dn.json carries the eleven offsets the hook needs plus the vtable slot that resolves path-solver.md's node-graph indirect edge.
87 lines
5.3 KiB
JSON
87 lines
5.3 KiB
JSON
{ "entries": [
|
|
|
|
{ "name": "MapObject_off_Id",
|
|
"offset": "0x00000004",
|
|
"convention": "offset",
|
|
"prototype": "int Id -- the network handle of a map object. This is what OrderFleetMove writes into Waypoint.Wpt(+0x4) (dests[i]->+0x4) and what ClassifyLeg writes into the route record's nrf/nrt, which is why nrt == Wpt on every type-3 waypoint in the corpus",
|
|
"status": "verified",
|
|
"source": "findings/subsystems/path-solver.md" },
|
|
|
|
{ "name": "MapObject_off_Kind",
|
|
"offset": "0x00000014",
|
|
"convention": "offset",
|
|
"prototype": "int Kind -- the map object's shape tag: 0 system, 1 fleet, 2 deep-space point. Read by MapObject_GetOwner 0x0071e280, MapObject_AsSystem 0x0071e340, StarFleet_GetLocationIfNode 0x006fe300, PathSolver's refuel test and ClassifyLeg's endpoint classification, so the three values are established from four independent sites",
|
|
"status": "verified",
|
|
"source": "findings/subsystems/path-solver.md" },
|
|
|
|
{ "name": "MapObject_off_Pos",
|
|
"offset": "0x00000018",
|
|
"convention": "offset",
|
|
"prototype": "float Pos[3] at +0x18/+0x1c/+0x20 -- the position every leg length and every range check reads. PathSolver's inlined Mars_Vec3_Length loads exactly these three slots (fld [edi+0x18] / +0x1c / +0x20 at 0x00706844)",
|
|
"status": "verified",
|
|
"source": "findings/subsystems/path-solver.md" },
|
|
|
|
{ "name": "MapObject_off_PointVisibleMask",
|
|
"offset": "0x0000008c",
|
|
"convention": "offset",
|
|
"prototype": "uint per-player bitmask on a kind-2 (deep-space point) object; bit PlyrIdx set = the point is visible to that player. The first of the two masks ClassifyLeg tests before raising 0x400; either mask alone permits the move, and a species-4 fleet bypasses both",
|
|
"status": "verified",
|
|
"source": "findings/subsystems/path-solver.md" },
|
|
|
|
{ "name": "MapObject_off_PointKnownMask",
|
|
"offset": "0x00000090",
|
|
"convention": "offset",
|
|
"prototype": "uint per-player bitmask on a kind-2 (deep-space point) object; the second of the pair at +0x8c/+0x90. Set = the point is known to that player",
|
|
"status": "verified",
|
|
"source": "findings/subsystems/path-solver.md" },
|
|
|
|
{ "name": "ServerSystem_off_GFlags",
|
|
"offset": "0x000000dc",
|
|
"convention": "offset",
|
|
"prototype": "uint GFlags -- the PER-PLAYER GATE MASK, read as (GFlags >> p->PlyrIdx(+0x28)) & 1 by ServerSystem_HasGate 0x00744010. combat-retreat-pipeline.md lists +0xdc only as 'a second presence source (not read here)'; the whole waypoint-type-4/5 branch of ClassifyLeg is built on it",
|
|
"status": "verified",
|
|
"source": "findings/subsystems/path-solver.md" },
|
|
|
|
{ "name": "ServerPlayer_off_NGts",
|
|
"offset": "0x00000144",
|
|
"convention": "offset",
|
|
"prototype": "int NGts -- the player's gate count. Multiplied by PrGtTrf(+0x148) to give the gate-traffic capacity (ServerPlayer_GateTrafficCapacity 0x0080dc50), which GTraf(+0x14c) plus the moving fleet's own int16 cost is tested against. NGts == 0 on every player of every corpus save, so waypoint kinds 4 and 5 have never been produced",
|
|
"status": "verified",
|
|
"source": "findings/subsystems/path-solver.md" },
|
|
|
|
{ "name": "NodeRoute_off_PathIndex",
|
|
"offset": "0x00000004",
|
|
"convention": "offset",
|
|
"prototype": "int nrp -- the node line's path index inside a NodeRoute {vptr, nrp@+4, nrf@+8, nrt@+0xc}, sizeof 0x10. Constructed to -1 by NodeRoute_Construct 0x006e1b20; ClassifyLeg leaves -1 for a freshly bored line or a point endpoint and writes FindNodeLine's entry->+0x8 otherwise. Copied to Waypoint+0x10 by FlightPlan_Waypoint_Set 0x007006e0",
|
|
"status": "verified",
|
|
"source": "findings/subsystems/path-solver.md" },
|
|
|
|
{ "name": "NodeRoute_off_FromId",
|
|
"offset": "0x00000008",
|
|
"convention": "offset",
|
|
"prototype": "int nrf -- the leg ORIGIN object's network id (origin->+0x4), written only when the leg's kind is 3. Copied to Waypoint+0x14. Chains across a multi-hop plan: nrf[0] == FlightPlan.pnd and nrf[i+1] == nrt[i], checked green on 46 of 46 corpus flight plans",
|
|
"status": "verified",
|
|
"source": "findings/subsystems/path-solver.md" },
|
|
|
|
{ "name": "NodeRoute_off_ToId",
|
|
"offset": "0x0000000c",
|
|
"convention": "offset",
|
|
"prototype": "int nrt -- the leg DESTINATION object's network id (dest->+0x4), written only when the leg's kind is 3. Copied to Waypoint+0x18, and equal to that waypoint's own Wpt(+0x4) on all 58 corpus waypoints",
|
|
"status": "verified",
|
|
"source": "findings/subsystems/path-solver.md" },
|
|
|
|
{ "name": "NodeRoute_sizeof",
|
|
"offset": "0x00000010",
|
|
"convention": "offset",
|
|
"prototype": "sizeof(NodeRoute) -- {vptr, int nrp, int nrf, int nrt}. Pinned by PathSolver's routesOut stride (add esi,0x10 at 0x007068b2) and by the Waypoint layout {vptr, Wpt@+4, Tp@+8, NodeRoute@+0xc} summing to the 0x1c stride",
|
|
"status": "verified",
|
|
"source": "findings/subsystems/path-solver.md" },
|
|
|
|
{ "name": "Galaxy_vft_off_GetNodeGraph",
|
|
"offset": "0x00000004",
|
|
"convention": "offset",
|
|
"prototype": "byte offset of vtable slot 1 on the object at StarFleet+0x10 (the 'galaxy'). ClassifyLeg's node-route branch obtains the node-line graph with `(fleet->galaxy(+0x10))->vft[1]()` at 0x00703a14 -- a thiscall through slot 1, taking no stack arguments and returning the NodeGraph* that NodeGraph_FindNodeLine 0x006e4eb0 is called on. Lane P2 left this indirect edge unresolved by static reading; lane DN resolves it dynamically instead, by making the same call from the hook",
|
|
"status": "verified",
|
|
"source": "findings/subsystems/nav-classifier-live.md" }
|
|
|
|
] }
|