148 lines
11 KiB
Markdown
148 lines
11 KiB
Markdown
# 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.
|