rrt/docs/atlas/runtime-and-world-tools.md

139 lines
7.9 KiB
Markdown

# Runtime and World Tools
Primary atlas sources:
- [control-loop-atlas.md#input-saveload-and-simulation](/home/jan/projects/rrt/docs/control-loop-atlas.md#input-saveload-and-simulation)
This view keeps together the runtime-side shell input path, world-view tool surfaces, world bring-up
pipeline, and the large shell-window families that hang off the recurring frame owner.
Current grounded owners:
- `shell_controller_window_message_dispatch`
- `simulation_frame_accumulate_and_step_world`
- `simulation_advance_to_target_calendar_point`
- `simulation_service_periodic_boundary_work`
- `world_run_post_load_generation_pipeline`
- `shell_ensure_game_uppermost_window`
- `game_uppermost_window_service_world_hotspot_band`
- `station_place_window_handle_message`
- `track_lay_window_handle_message`
- `shell_open_or_focus_load_screen_page`
- `shell_open_or_focus_overview_window`
- `shell_open_or_focus_trainbuy_window`
- `shell_open_or_focus_train_detail_window`
Current bounded tool families:
- `TrackLay.win`
- `StationPlace.win`
- `GameUppermost.win`
- `LoadScreen.win`
- `Overview.win`
- `Trainbuy.win`
- `TrainDetail.win`
Current bounded post-load detail:
- inside `world_run_post_load_generation_pipeline`, the later `Setting up Players and Companies...`
`319` lane now has a tighter interior order:
route-entry collection refresh on `0x006cfca8`,
auxiliary route-entry tracker collection refresh on `0x006cfcb4`,
placed-structure local-runtime refresh through `0x004133b0`,
flagged world-grid cleanup through `0x00448af0/0x00533fe0`,
later route-entry post-pass through `0x00491c20`,
and a separate event-side runtime materialization pass on the live event collection `0x0062be18`
through `scenario_event_collection_refresh_runtime_records_from_packed_state` `0x00433130`
plus the per-record helper `0x0042db20`
- the event-side branch is tighter now too:
the first rebuilt linked row family under `0x0042db20` aligns with the standalone condition list
later consumed by `EventConditions.win`,
while the second rebuilt family aligns with the four grouped effect lists later deep-copied
through `scenario_event_clone_runtime_record_deep_copy` `0x0042e050` during event duplication
and effect staging
- the shell-side event windows are tighter too:
`0x0042df30/0x0042df70/0x0042dfb0/0x0042dff0` now read as class-bit predicates over the
standalone condition-row list, and the window vtables bind
`shell_event_conditions_window_handle_message` `0x004d59e0` plus
`shell_event_effects_window_handle_message` `0x004d7060` as the primary message owners
- the conditions-side refresh split is tighter too:
`0x0042d700` now reads as the standalone condition-list class or modifier aggregate,
`0x0042d740` as the grouped effect-row type-flag aggregate for one selected grouped list,
`0x004d77b0` as the grouped summary-band affordance gate for `0x4fed..0x4ff0`,
`0x004d9970` as the condition-class summary and grouped-row status refresh,
`0x004d9d10` as the smaller grouped-effect territory-target affordance refresh on control `0x500b`,
`0x004d9f50` as the selected-event mode strip and summary-panel refresh,
`0x004d9390` as the mode-dependent detail-row switch beneath that strip,
and `0x004da0f0` as the broader refresh owner that now cleanly splits selector `0x5001` versus
`0x5002`, with the strongest current RT3.lng fit reading `0x5001 = Test against...` and
`0x5002 = Apply effects...`; the `0x5002` branch then builds `0x5014` from RT3.lng
`1160..1164` as the target-subject text `to the company/player/player (i.e. chairman)/territory
for which the condition is TRUE`, while the strongest current RT3.lng fit for `0x5015..0x501c`
is `whole game`, `all/human/AI companies`, `specified territories`, and `all/human/AI players`
- the selected-event strip is tighter now too:
`0x004db120` now reads as the broader selected-event repaint and navigation refresh,
`0x004db520/0x004db5e0` as the previous/next selected-event stepping verbs,
`0x004db8b0` as the add-blank or clone-selected-event modal helper,
`0x004dba90` as the rename-selected-event modal helper,
`0x004d9360` as the delete-selected-event helper,
`0x004db6a0` as the live selected-event id setter behind control `0x4e84`,
`0x004db6f0` as the callback-binding plus pending-selection bootstrap path,
and `0x004dbb80` as the broader strip and grouped-band dispatcher above the
`0x4e85..0x4e8a` previous/next/add/clone/rename/delete cases
- the selection bootstrap and grouped-band side is tighter too:
`0x004daf40` is the placeholder reset helper for the selected-event summary controls,
and `0x004dbf93` is the grouped-effect summary-band selector that commits current state through
`0x004d8d50` before switching grouped selector `[this+0x9c]`
- the grouped target-scope strip is tighter too:
`0x004d8ea0` now reads as the selected-event text-panel commit helper before selection changes,
`0x004d91e0` as the selected-event summary-header and grouped-mode commit helper above
`0x004d8d50`,
`0x004d8d50` now grounding the hidden ordinal selector family `0x5006..0x500e -> 0..8`,
`0x004d88f0` as the selected grouped-effect row-list renderer on `0x4ed5` using RT3.lng
`1154..1159`,
`0x004da9a0` as the stored grouped-summary-state reload that republishes `0x500a`, `0x500b`,
and visible action selection `0x5014..0x501c` from the selected event,
`0x004dab60` as the selected grouped-effect target-scope strip refresh that projects that ordinal
onto visible controls `0x5014..0x501c` while still honoring the grouped-effect type-mask gates on
`0x5015`, `0x5016..0x5018`, `0x500b/0x5019`, and `0x501a..0x501c`, `0x004dbfca` as the grouped
target-scope mode selector that persists the chosen control id into `0x00622074`, with
`0x5001/0x5002` now strongest-fit as `Test against...` and `Apply effects...`, `0x004dbeeb` as
the pending shared
summary-text triplet publish helper, and
`0x004dbe7a` as the narrower `0x4ec6/0x4ec7` choice-event single-player-only warning modal
branch
- the hidden/display split is tighter too:
`0x5006..0x500e` now read as the canonical hidden target-scope selector family stored into
`[event + group + 0x7fb]`, while `0x5014..0x501c` are the visible one-to-one mirror rows
republished from that ordinal rather than a second independently named selector family
- the grouped-band dispatch boundary is tighter too:
the `0x4dc09c` table now shows `0x5001/0x5002` are the only `0x4fed..0x501c` controls that
route into `0x004dbfca` on the `0xcf` side, while visible rows `0x5014..0x501c` route only to
the smaller `0x004d9d10` affordance path and `0x4ff1..0x5013` are default no-ops
- the effects-side editor stack is tighter too:
`0x004d5d00` now reads as the effect-type selector refresh,
`0x004d5f50` as the selected-effect parameter-row repaint,
`0x004d6090` as the heavier staged-effect editor refresh,
and `0x004d67f0` as the commit back into the staged effect row
- the editor verbs are tighter too:
`0x004d9dc0` and `0x004d9e40` are the shared modal openers for `EventConditions.win` and
`EventEffects.win`, `0x004da640/0x004da700/0x004d9ed0` now read as add-edit-remove over the
standalone condition list, and `0x004da7c0/0x004da860/0x004da920` are the matching
add-edit-remove verbs for grouped effect rows
What this note is for:
- Shell-owned simulation cadence
- World-view pan, zoom, rotate, and hotspot handling
- Post-load generation phases and setup banners
- Track-lay and station-placement semantics
- Train detail and trainbuy command ownership
Current bounded conclusion:
- Current evidence points to one stable reading: no later gameplay-owned mode introduces a distinct
outer input or frame owner for ordinary world interaction. The grounded
`shell_controller_window_message_dispatch` plus
`simulation_frame_accumulate_and_step_world` path remains the sole coordinator after world
entry and the first grounded non-camera world-input coordinator, and no separate outer
gameplay loop or gameplay-only input object is grounded in the local corpus.