2026-04-06 01:11:06 -07:00
|
|
|
# Route Entry and Trackers
|
|
|
|
|
|
|
|
|
|
Primary atlas sources:
|
|
|
|
|
|
2026-04-12 10:12:10 -07:00
|
|
|
- [station-detail-overlay.md](/home/jan/projects/rrt/docs/control-loop-atlas/station-detail-overlay.md)
|
2026-04-06 01:11:06 -07:00
|
|
|
|
|
|
|
|
This note isolates the lower route-entry, linked-site, route-link, and auxiliary tracker families
|
|
|
|
|
that are easy to lose inside the broader runtime section.
|
|
|
|
|
|
|
|
|
|
Current grounded owners:
|
|
|
|
|
|
2026-04-21 15:40:17 -07:00
|
|
|
- `city_connection_try_build_route_and_optionally_place_direct_site`
|
2026-04-06 01:11:06 -07:00
|
|
|
- `route_entry_collection_try_build_path_between_optional_endpoint_entries`
|
|
|
|
|
- `route_entry_collection_search_path_between_entry_or_coord_endpoints`
|
|
|
|
|
- `route_entry_collection_create_endpoint_entry_from_coords_and_policy`
|
|
|
|
|
- `route_entry_collection_map_track_lay_mode_to_endpoint_policy_byte`
|
|
|
|
|
- `aux_route_entry_tracker_collection_refresh_route_entry_group_membership`
|
|
|
|
|
- `aux_route_entry_tracker_collection_try_split_route_entry_chain_into_fresh_group`
|
|
|
|
|
- `aux_route_entry_tracker_route_entry_pair_pass_adjacent_chain_transfer_gate`
|
|
|
|
|
- `aux_route_entry_tracker_collection_try_transfer_adjacent_chain_between_groups`
|
|
|
|
|
- `aux_route_entry_tracker_collection_reseed_group_from_route_entry_component`
|
|
|
|
|
- `aux_route_entry_tracker_collection_refresh_component_labels_and_reseed_invalid_groups`
|
|
|
|
|
- `aux_route_entry_tracker_query_tracker_component_labels_match`
|
|
|
|
|
- `aux_route_entry_tracker_collection_query_component_label_by_tracker_id`
|
|
|
|
|
- `aux_route_entry_tracker_collection_refresh_owner_adjacent_compatible_group_links`
|
|
|
|
|
- `aux_route_entry_tracker_dispatch_route_entry_pair_metric_query`
|
|
|
|
|
- `aux_route_entry_tracker_query_route_entry_pair_metric_via_weighted_recursive_search`
|
|
|
|
|
- `aux_route_entry_tracker_query_route_entry_pair_metric_via_recursive_neighbor_walk`
|
|
|
|
|
- `aux_route_entry_tracker_query_best_route_entry_pair_metric_with_endpoint_fallbacks`
|
|
|
|
|
- `placed_structure_route_link_rebuild_route_style_grid_counters_and_endpoint_state`
|
|
|
|
|
- `placed_structure_rebuild_route_style_candidate_scores_and_peer_links`
|
|
|
|
|
|
|
|
|
|
Current bounded policy split:
|
|
|
|
|
|
|
|
|
|
- policy byte `1`: single-track endpoint synthesis and direct linked-site anchor create or replace
|
|
|
|
|
- policy byte `2`: broader linked-site anchor rebuild plus tracker regrouping
|
|
|
|
|
- policy byte `4`: double-track endpoint synthesis with the larger track-laying-capacity charge
|
|
|
|
|
|
|
|
|
|
Current bounded tracker side:
|
|
|
|
|
|
|
|
|
|
- allocator at `0x004a42b0`
|
|
|
|
|
- refcount or destroy path at `0x004a4340`
|
|
|
|
|
- group-id setter at `0x00489f80`
|
|
|
|
|
- endpoint-membership probe at `0x00494ed0`
|
|
|
|
|
- bind helper at `0x00494f00`
|
|
|
|
|
- latch refresh at `0x00494fb0`
|
|
|
|
|
- cached-match refresh at `0x00495020`
|
|
|
|
|
- adjacent transfer gate at `0x004a4c00`
|
|
|
|
|
- component-label refresh sweep at `0x004a5fc0`
|
|
|
|
|
- component-label equality test at `0x004a62c0`
|
|
|
|
|
- component-label query at `0x004a6320`
|
|
|
|
|
- owner-adjacent compatible-group refresh at `0x004a6360`
|
|
|
|
|
- pair-metric dispatcher at `0x004a65b0`
|
|
|
|
|
- weighted recursive metric branch at `0x004a5280`
|
|
|
|
|
- alternate recursive neighbor-walk branch at `0x004a5900`
|
|
|
|
|
- endpoint-fallback chooser at `0x004a6630`
|
|
|
|
|
|
|
|
|
|
Current bounded time-side cutover:
|
|
|
|
|
|
|
|
|
|
- `runtime_query_hundredths_scaled_build_version` at `0x00482e00` is the shared rounded
|
|
|
|
|
hundredths-scaled executable or session build-version query above the `>= 0x67` branch in
|
|
|
|
|
`0x004a65b0`
|
|
|
|
|
- it is not a gameplay progress flag; in the local path it comes from the `RT3.EXE` version-info
|
|
|
|
|
source through `0x00482d10`, then `+0.0001`, `*100.0`, and round, while the multiplayer path
|
|
|
|
|
delegates through `0x0046a4b0`
|
|
|
|
|
- the recovered `>= 0x67`, `>= 0x68`, `>= 0x69`, and `>= 0x6a` caller pattern now lines up with
|
|
|
|
|
executable build values `1.03`, `1.04`, `1.05`, and `1.06`
|
2026-04-06 20:34:16 -07:00
|
|
|
- that makes the tracker cutover read more cleanly too:
|
|
|
|
|
`0x004a65b0` is now best treated as a pre-`1.03` versus `1.03+` route-metric compatibility
|
|
|
|
|
dispatcher, not as any gameplay-time or era-side mode switch
|
|
|
|
|
- the branch source is session-aware too:
|
|
|
|
|
when multiplayer state is active, the same cutover can follow the session-side build path rather
|
|
|
|
|
than only the local executable version, so mixed-version compatibility is now the strongest
|
|
|
|
|
current explanation for why this lower metric split exists at all
|
2026-04-06 01:11:06 -07:00
|
|
|
- nearby callers now make two more compatibility reads concrete:
|
|
|
|
|
build `1.04+` keeps one `Recycling Plant` stem-specific branch alive inside `0x004101e0`, and
|
|
|
|
|
build `1.05+` skips one older descriptor-side attenuation fallback in that same rebuild family
|
|
|
|
|
- the adjacent world-side compatibility lane is bounded too:
|
|
|
|
|
build `1.03+` can skip one older recursive connected-component bounds walk through
|
|
|
|
|
`0x004160c0 -> 0x00415f20` when scenario field `[0x006cec78+0x46c38]` is already active
|
|
|
|
|
- the wrapper above that compatibility read is bounded now too:
|
|
|
|
|
`0x00416170` maps the current tile rectangle into the component table rooted at `0x0062ba7c`
|
|
|
|
|
and only re-enters `0x004160c0` when the current owner still lacks cached bounds and the local
|
|
|
|
|
suppressor gates stay clear
|
|
|
|
|
- the higher neighboring projected-rectangle lane is tighter too:
|
|
|
|
|
`0x00418610` refreshes the temporary sample band at `0x0062b7d0`, republishes the surviving
|
|
|
|
|
rectangle through `0x0044d410`, and on the single-sample path re-enters `0x004185a0` to toggle
|
|
|
|
|
mask bit `0x01` for the corresponding non-sentinel cells
|
|
|
|
|
- the owner split above that lane is bounded now too:
|
|
|
|
|
`0x00418be0` is the broader local-runtime record builder from candidate stem plus projected
|
|
|
|
|
scratch, while `0x00418a60` is the smaller current-subject clone path over the same
|
|
|
|
|
mask-refresh and component-bounds helpers
|
|
|
|
|
- the scratch tail is tighter now too:
|
|
|
|
|
`0x00416620` publishes the projected rectangle into the shared local-runtime globals, validates
|
|
|
|
|
route-entry coverage through `0x00494240`, can branch into the special projected-slot picker
|
|
|
|
|
`0x00415570`, and refreshes the compact per-cell side tables through `0x00414e10`
|
|
|
|
|
- the last side helpers under that local-runtime branch are bounded now too:
|
|
|
|
|
`0x00414470` is just the projected-slot cache setter above the subject-clone path, while
|
|
|
|
|
`0x00418040` is the optional local-runtime overlay-payload renderer sampled by the broader
|
|
|
|
|
stem-based builder at `0x00418be0`
|
|
|
|
|
- the higher local-runtime owner chain is bounded now too:
|
|
|
|
|
`0x004133b0` first drains the temporary placed-structure id queue through `0x00414480` and
|
|
|
|
|
`0x00413f50`, rebuilding cloned local-runtime records through `0x0040e450`, and then sweeps all
|
|
|
|
|
live placed structures through `0x0040ee10`
|
|
|
|
|
- the owner context above that local-runtime refresh is tighter now too:
|
|
|
|
|
inside the `Setting up Players and Companies...` `319` lane of
|
|
|
|
|
`world_run_post_load_generation_pipeline`, the pipeline refreshes the route-entry collection
|
|
|
|
|
`0x006cfca8`, then the auxiliary route-entry tracker collection `0x006cfcb4`, then
|
|
|
|
|
`0x004133b0`, then a flagged world-grid cleanup sweep through `0x00448af0/0x00533fe0`, and only
|
|
|
|
|
after that the later route-entry post-pass at `0x00491c20`
|
|
|
|
|
- the side refresh split is tighter now too:
|
|
|
|
|
`0x0040ee10` publishes one local position/scalar triplet through `0x00530720` and then tails
|
|
|
|
|
into `0x0040e360`, whose current grounded subtype-`1`, class-`3` branch recomputes a linked-site
|
|
|
|
|
anchor triplet from the peer route-entry anchor when that anchor is still live
|
|
|
|
|
- the heavier sibling above that side refresh is bounded now too:
|
|
|
|
|
`0x0040eba0` is the world-coordinate mutation helper that rewrites cached grid coordinates,
|
|
|
|
|
updates the subtype-`4` proximity-bucket family when needed, rebuilds the same triplet, and then
|
|
|
|
|
tails into `0x0040e360`
|
|
|
|
|
|
|
|
|
|
What this note is for:
|
|
|
|
|
|
|
|
|
|
- Route-search ownership and quality gates
|
|
|
|
|
- Linked-site route-anchor rebuilds
|
|
|
|
|
- Auxiliary route-entry tracker regrouping semantics
|
|
|
|
|
- Route-style peer-link emission and route-link state
|
|
|
|
|
- Track-laying-capacity interactions with route synthesis
|
|
|
|
|
|
2026-04-08 16:31:33 -07:00
|
|
|
Latest local closure:
|
2026-04-06 01:11:06 -07:00
|
|
|
|
2026-04-08 16:31:33 -07:00
|
|
|
- The linked-transit cache split is now locally bounded rather than just suggestive:
|
|
|
|
|
the pre-`1.03` versus `1.03+` tracker metric dispatcher still matters for the weighted
|
|
|
|
|
autoroute cache lanes at `company_rebuild_linked_transit_autoroute_site_score_cache`
|
|
|
|
|
`0x00407bd0`, but the grounded downstream chain now stops at route choice rather than company
|
|
|
|
|
pressure. Cache lane `+0x16` feeds the owned-site selector
|
|
|
|
|
`company_select_best_owned_linked_transit_site_by_autoroute_score` `0x00408280`, and the
|
|
|
|
|
weighted peer-side bands then feed `company_build_linked_transit_autoroute_entry`
|
|
|
|
|
`0x00408380`; train-side append and add-train helpers `0x00409770` and `0x00409830` only
|
|
|
|
|
inherit that weighted choice by calling the builder. By contrast, the company-wide roster target
|
|
|
|
|
at `company_compute_owned_linked_transit_site_score_total` `0x00408f70` still sums only raw
|
|
|
|
|
cache `+0x12` before `company_balance_linked_transit_train_roster` `0x00409950` reacts. So this
|
|
|
|
|
local semantic edge is effectively closed: the compatibility split perturbs ranked site choice
|
|
|
|
|
and seeded autoroute peer choice, not the later train-count target, and any further
|
|
|
|
|
weighted-lane consumer would have to live outside the currently grounded local chain.
|