{ "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" } ] }