rrt/docs/subsystem-views/runtime-and-world-tools.md

7.9 KiB

Runtime and World Tools

Primary atlas sources:

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.