# Input, Save/Load, and Simulation: Station-detail Overlay ### Station-detail overlay The shell-side candidate preview pair now has a grounded world consumer too. `world_render_station_candidate_service_map_overlay` at `0x0043f640` reads the active `(station id, candidate id)` pair from `world_store_station_detail_candidate_service_preview_pair_globals` `0x0043f620` and `world_clear_station_detail_candidate_service_preview_pair_globals` `0x0043f610`, scans the placed-structure collection, and then splits the legend by candidate mode. When the active candidate carries a nonzero route-style byte at `[candidate+0x46]`, the overlay uses the heavier helper `placed_structure_query_candidate_directional_route_overlay_summary` at `0x0047e690` in both directions between the preview station and each scanned site and formats the resulting directional rows as `3874` `Coming To %1` and `3875` `Going From %1`. When that byte is zero, the same overlay falls back to the direct local-service path through `placed_structure_query_candidate_local_service_metrics` and formats the two legend rows instead as `3876` `Current Supply @ < %1` and `3877` `Current Demand @ > %1`. Empty directional lanes collapse to `3878` `--None--`, and one title lane falls back to literal `All`. Current disassembly no longer supports treating `3872` `Already Connected by Another Company` or `3873` `Not Connected` as direct overlay-body emits. #### Corrected boundary The neighboring connection-state note pair now appears to live in a city connection-bonus label formatter, not in `0x0043f640`. That formatter is now bounded as `city_site_format_connection_bonus_status_label` at `0x004207d0`: it directly chooses localized ids `3868` through `3873` after consulting the reusable city-peer scan `city_connection_bonus_exists_matching_peer_site` at `0x00420030`. Separately, `3879` `Out of Sync` is grounded under the multiplayer preview dataset path instead: `multiplayer_preview_dataset_service_launch_state_and_warn_out_of_sync` at `0x0046b780` checks global `0x006cd91c`, raises the `Out of Sync` shell status through `0x5386e0`, and then continues through the wider multiplayer preview launch-state service. So the station-detail overlay currently owns only the `Coming To`, `Going From`, `Current Supply`, `Current Demand`, `--None--`, and `All` legend lanes. #### Ownership side One reusable site helper is grounded now too. `placed_structure_query_linked_company_id` at `0x0047efe0` resolves the current placed structure's linked instance through `0x0062b26c` and returns its company id from `[instance+0x276]`; the adjacent city bonus formatter at `0x004207d0` compares that id against the active company selector before choosing whether a scanned site should carry `3871` `Connected By Another Company` or `3872` `Already Connected by Another Company`. The larger caller boundary is no longer open either: the first bounded announcement owner above this formatter family is now `company_evaluate_and_publish_city_connection_bonus_news` at `0x00406050`, which re-enters the peer-route candidate builder at `0x004046a0` and later publishes one of the localized city-connection bonus news strings `2888`, `2890`, or `2921` through the shell news path. #### Peer-selector side The city bonus formatter no longer depends only on boolean peer existence. The companion helper `city_connection_bonus_select_first_matching_peer_site` at `0x00420280` is now grounded as the first-match selector paired with `city_connection_bonus_exists_matching_peer_site`: it walks the same city-peer candidate set, applies the same site-class table plus the narrower station-or-transit and linked-instance class-byte flags, and returns one representative matching peer site id instead of a boolean. `city_site_format_connection_bonus_status_label` reuses that selector after the note checks so it can recover one linked company context from the selected peer. The remaining open edge here is therefore above this formatter family, not inside the peer-scan pair itself. #### Caller side The reusable bridge between the status formatter and the company news lane is now bounded too. `city_connection_bonus_build_peer_route_candidate` at `0x004046a0` reuses `city_connection_bonus_select_first_matching_peer_site` with both selector flags forced on, samples the selected peer's derived coordinates through `0x0047df30` and `0x0047df50`, and then either tries the shared heavy builder `city_connection_try_build_route_with_optional_direct_site_placement` `0x00402cb0` or falls back to the smaller wrapper `city_connection_bonus_try_compact_route_builder_from_region_entry` `0x00404640` before handing the result back to the company-side announcement sweep at `0x00406050`. The score side of that announcement lane is tighter now as well: `city_compute_connection_bonus_candidate_weight` at `0x004010f0` provides the per-city opportunity weight, `company_query_min_linked_site_distance_to_xy` at `0x00405920` provides the nearest linked-site distance term, `company_count_linked_transit_sites` at `0x00426590` provides one of the company-side caps, `company_compute_connection_bonus_value_ladder` at `0x00425320` supplies the bounded company-side value scalar, and `company_compute_prime_rate_from_issue39_scenario_baseline` at `0x00424580` now bounds the shared prime-rate-side helper that this lane reuses beside the raw issue-`0x39` total, `scenario_state_sum_issue_opinion_terms_raw` at `0x00436710` now bounds the raw additive issue-total helper beneath that term, and `company_connection_bonus_lane_is_unlocked` at `0x00427590` is the small boolean gate above the ladder. Wider governance and CompanyDetail xrefs now tighten slot `0x2b` into the rolling net-profits lane reused by annual finance checks and a per-share/history formatter, while the report-history descriptor table now aligns raw slot `0x09` with the Income Statement fuel-cost lane surfaced by tooltip `1309`. The wider result now reads more like recent net profits minus recent fuel burden than a governance-pressure term. That now also sharpens the annual finance lane at `0x00401c50`: the first bankruptcy branch reads as sustained cash-and-debt stress over recent profits and fuel burden, the later fallback branch as a deeper `-300000` cash / three bad years cleanup trigger, and the later stock-issue branch reads as a price-to-book-versus-coupon approval ladder rather than a generic support vote. The tail is cleaner now too: it compares total retired versus newly issued principal to choose the `2882..2886` debt headline family, then publishes `2887` separately from the accumulated repurchased-share count. The sibling news owner above the same city-pair route family is bounded now too: `simulation_try_select_and_publish_company_start_or_city_connection_news` `0x00404ce0` filters and scores candidate city entries, re-enters the same shared heavy builder through `city_connection_try_build_route_between_region_entry_pair` `0x00404c60` for the dense pair sweep and the final retry, and then publishes `2889` `%1 has started a new company - the %2` or `2890` `%1 has connected %2 to %3.` through the shell news path. The remaining open edge on this branch is therefore narrower now: it is mostly whether `0x39` should be read as the narrower city-connection public-opinion lane or as part of a broader management-attitude family, not the ownership of the connection-bonus formatter, peer-route candidate path, or company news gate. #### Route-list side The neighboring helper `placed_structure_append_unique_route_entry` at `0x0047f010` is now grounded as the append-if-missing builder for the six-byte route-entry list rooted at `[site+0x462]` and `[site+0x466]`. That matters here because the directional overlay query at `0x0047e690` consumes the same list, so the remaining uncertainty is no longer list ownership. It is down to the exact semantics of each entry's `u32` payload. #### Route-entry and Cache Side The adjacent helper strip is tighter now too. `placed_structure_service_candidate_local_service_comparison_cache_decay_and_row_propagation` `0x0047df70` is the recurring age-and-propagation service pass over the paired comparison-cache float tables `[site+0x3e]` and `[site+0x112]` with age stamps at `[site+0x1e6]`; it zeroes stale entries older than `0x1d8800`, decays younger ones by the fixed `0x005ce900/0x005ce8f8` scales, and then propagates stronger marked row values back through the three five-float row bands rooted at `[site+0x24/+0x28/+0x2c]`. The wrapper `placed_structure_query_candidate_route_or_local_service_comparison_score` `0x0047e9a0` is now bounded too: it delegates to `placed_structure_query_candidate_directional_route_overlay_summary` `0x0047e690` when the requested candidate carries a grouped routing class, otherwise it uses the simpler local `[cell+0x103]` lane and the current sample list at `[site+0x34/+0x38]` before writing back into the same comparison-cache bands. The route-entry strip beneath the linked-peer family is no longer open either: `placed_structure_resolve_route_entry_anchor_record` `0x0047f310` is the direct resolver over `[site+0x08]`, and `placed_structure_route_anchor_matches_or_reaches_route_entry_id` `0x0047f250` is the boolean gate above it, first checking a direct match against `[site+0x08]` and then re-entering `0x0048e050(mode 2, fallback -1)` on the resolved route-entry record. The route-link companion `route_link_route_entry_reaches_peer_site_route_group` `0x0047f2d0` is tighter now too: it reads the peer site's route-entry anchor from `[peer+0x08]`, resolves the current link's own anchor, and re-enters `0x0048e3c0` to test whether the two anchors belong to the same reachable route-side family. One smaller linked-peer-side setter is grounded as well: `placed_structure_set_overlay_mark_byte_and_refresh_linked_peer_overlay_if_changed` `0x0047f290` updates byte `[site+0x5bc]` and then re-enters `placed_structure_refresh_linked_peer_overlay_when_linked_peer_flagged` `0x0040d2d0` when the byte changes. #### Terrain-class Side The nearby linked-instance raster wrappers are no longer anonymous. `world_resolve_secondary_raster_class_record_at_float_xy` `0x0044e270` is the world-side float-XY lookup over `[world+0x2131]` plus class table `0x006cfc9c`; `placed_structure_query_linked_instance_secondary_raster_class_id` `0x0047f170` is the raw linked-instance wrapper that returns the shifted class id directly; and the paired record-returning wrappers `placed_structure_resolve_linked_instance_secondary_raster_class_record` `0x0047f0e0` and `placed_structure_resolve_linked_instance_secondary_raster_class_record_via_world_query` `0x0047f1f0` now bound the two record-returning lanes used by the later world-side and linked-peer filters. That means the remaining uncertainty in this neighborhood is no longer the route-entry or terrain-class helper ownership; it is the broader user-facing meaning of the later callers that consume those gates.