139 lines
7.9 KiB
Markdown
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.
|