# Runtime and World Tools Primary atlas sources: - [runtime-roots-camera-and-support-families.md](/home/jan/projects/rrt/docs/control-loop-atlas/runtime-roots-camera-and-support-families.md) 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.