3699 lines
326 KiB
Markdown
3699 lines
326 KiB
Markdown
# Input, Save/Load, and Simulation: Runtime Roots, Camera, and Support Families
|
||
|
||
### Runtime Roots and Cadence
|
||
|
||
- Roots: the shell controller window-message ingress `shell_controller_window_message_dispatch` at
|
||
`0x0054e3a0`, the shell input-state object initialized at `0x006d4018` through
|
||
`shell_input_state_init` `0x0054e710`, the saved-world restore path
|
||
`world_load_saved_runtime_state_bundle` at `0x00446d40`, the live-world save path
|
||
`world_runtime_serialize_smp_bundle` at `0x00446240`, `world_entry_transition_and_runtime_bringup`
|
||
at `0x00443a50`, the frame-owned cadence `simulation_frame_accumulate_and_step_world` at
|
||
`0x00439140`, the recurring `GameMessage.win` service branch through
|
||
`game_message_window_service_if_present` `0x004e0720`, the world-facing `GameUppermost.win`
|
||
overlay branch ensured by `shell_ensure_game_uppermost_window` `0x004e0e40` and serviced through
|
||
`game_uppermost_window_service_world_hotspot_band` `0x004e0780`, and the lower step family rooted
|
||
at `simulation_advance_to_target_calendar_point` `0x0040ab50` with periodic branches through
|
||
`simulation_service_periodic_boundary_work` `0x0040a590`.
|
||
- Trigger/Cadence: shell-side input is event-driven by controller-window `WM_*` traffic while save
|
||
or load work is triggered either directly from shell commands or through the `fileopt.win` branch
|
||
flags into the `.smp` runtime-state family; post-bring-up world service becomes recurring once a
|
||
world root exists at `0x0062c120`, but the current grounded top-level cadence still remains the
|
||
shell-owned `shell_service_pump_iteration` path, which calls
|
||
`simulation_frame_accumulate_and_step_world` directly and lets it accumulate elapsed wall-clock
|
||
time into one or more simulation-step quanta. A second ingress is now bounded too:
|
||
`simulation_run_chunked_fast_forward_burst` at `0x00437b20` repeatedly calls the same lower
|
||
stepper `simulation_advance_to_target_calendar_point`, but current grounded callers put that
|
||
helper inside the larger post-load generation pipeline `world_run_post_load_generation_pipeline`
|
||
at `0x004384d0` under the `Seeding Economy...` phase rather than under the ordinary player-facing
|
||
speed buttons. That setup pipeline is now clearer at the progress-banner level too: on the fuller
|
||
setup path it first runs one preliminary named-candidate availability prepass through `0x00437737`
|
||
before any visible progress banner is posted. One startup-side selector edge is tighter now too:
|
||
`shell_active_mode_run_profile_startup_and_load_dispatch` `0x00438890` reaches an early
|
||
selector-`2` branch at `0x00438a66..0x00438c00` that refreshes one support-family type-`7`
|
||
record from setup path buffer `0x006d1370` through `0x0053d130`, strips the basename extension
|
||
into a local label buffer, briefly drops the nested mouse-cursor hold through `0x0053f310`,
|
||
builds three progress-text payloads, and re-enters the hold through `0x0053f2f0` before the
|
||
common world-root bring-up continues. After that, localized id `318`
|
||
`Computing Transportation and Pricing...` stays visible while the pipeline runs
|
||
`world_compute_transport_and_pricing_grid` `0x0044fb70`, the early collection-owned staging pass
|
||
`world_rebuild_secondary_raster_derived_surface_and_companion_planes_in_rect` `0x0044e940`,
|
||
`structure_candidate_collection_run_post_load_local_service_setup_phase` `0x0041ea50`, and the conditional region pair
|
||
`world_region_collection_seed_default_regions` `0x00421b60` plus
|
||
`world_region_collection_refresh_neighbor_and_profile_bands` `0x00420f30`. One save-load-side
|
||
status-stack strip is now tighter too: `0x004422d0/0x00442330` push and pop the low bytes of the
|
||
same four shell lanes `[0x006cec74+0x140/+0x13c/+0x138/+0x144]` plus startup byte
|
||
`[0x006cec78+0x4c74]` through the local stack `0x0062be90` with depth `0x0062bedc`, and the
|
||
paired wrappers
|
||
`0x004423a0/0x004423d0` bracket that same band while also servicing the live TrackLay.win and
|
||
StationPlace.win tool objects through `0x0050e070`, `0x00507a50`, `0x0050a530`, and
|
||
`0x0050e1e0`. The live `.smp` serializer uses the higher pair, while the neighboring world-entry
|
||
branch `0x00443a50` and non-`.smp` package-save tail under `shell_map_file_world_bundle_coordinator`
|
||
`0x00445de0` now show the raw split explicitly. `0x00443a50` calls `0x004422d0` at `0x444e2c`,
|
||
services TrackLay.win and StationPlace.win entry-side helpers through `0x444e3b/0x444e4a`, then
|
||
later calls `0x00442330` at `0x444ecb` and services the recurring tool frames through
|
||
`0x444eda/0x444ee9`. The package-save tail similarly calls `0x00442330` directly at `0x00445a55`
|
||
and then services StationPlace.win and TrackLay.win at `0x00445a64/0x00445a73` without
|
||
re-entering `0x004423d0`. So the save/load-side tool choreography is no longer one uniform wrapper
|
||
path across world-entry, package-save, and `.smp` branches, and current local evidence does not
|
||
show `0x00446d40` itself directly re-entering either the raw pair or the higher wrapper pair.
|
||
`world_region_border_overlay_rebuild` `0x004882e0`. The transport/pricing side is tighter now
|
||
too: `0x0044fb70` first routes one null-build path through the preview ensure wrapper
|
||
`0x0044faf0`, whose deeper worker `0x0044f840` allocates a default target through
|
||
`0x00534930`, seeds five palette entries through `0x0051de10`, maps each target pixel back into
|
||
the live secondary raster through `0x00533970/0x00533980`, uses the low-3-bit class split plus a
|
||
local `+/-4` neighborhood and `0x0051db80` to choose the preview color, and only then re-enters
|
||
`0x0044e940` on the full rectangle. The later `322` side is tighter now too: the top owner
|
||
`0x0044d410` rejects while generation counter `[world+0x2205]` is live or when `0x00449e90`
|
||
cannot supply a surviving work rect, then forwards that rect into `0x005374d0`, `0x00533e70`,
|
||
and `0x00537010`, notifies the shell owner at `0x0062be68`, and refreshes neighboring region or
|
||
manager companions through `0x00421f50`, `0x00461770`, and `0x00415340`. `0x00421f50` itself is
|
||
now bounded as the narrow class-0 side of that refresh: it scans the live region collection for
|
||
class-0 records whose normalized coordinates fall inside the caller-supplied float rectangle and
|
||
republishes each surviving region's current-position triplet through `0x00455a70(0)`. The local
|
||
companion-float strip under that same owner is tighter now too: `0x0044d4e0` and `0x0044d6e0`
|
||
are sibling five-pass cross-neighbor relaxers over `[world+0x1605]`; both clamp the caller
|
||
rectangle, average the four cardinal neighbors, subtract the current sample, scale the delta by
|
||
one fixed coefficient and caller gain, and then feed the surviving rectangle back into
|
||
`0x0044d410`. The first helper only checks raster bit `0x01` in `[world+0x2135]`, while the
|
||
second adds the tighter acceptance gate `0x004499c0` and can skip the final `0x0044d410` tail
|
||
when its caller disables that refresh. Their center-biased sibling `0x0044d880` is now bounded
|
||
too: it seeds one baseline from the current center sample when its caller gain is positive,
|
||
expands one square neighborhood by radius, and raises surrounding cells toward that baseline
|
||
through the same `0x0051dc00` falloff model before tailing into `0x0044d410`. The local
|
||
peak-oriented sibling `0x0044da70` then raises one clamped square neighborhood by quantized
|
||
local maxima and on its optional branch also consults `0x00534f00` before keeping the larger
|
||
peak. So the `0x0044d4e0/0x0044d6e0/0x0044d880/0x0044da70` band now reads as the local
|
||
companion-float refinement layer immediately beneath the shared `Calculating Heights...` owner
|
||
rather than a set of unrelated scalar writes. The default-region side is tighter too:
|
||
one earlier class-0-only helper `0x0041fb00` now sits directly under that same family too:
|
||
it skips nonzero `[region+0x23e]` records, rounds the region center through
|
||
`0x00455800/0x00455810/0x005a10d0`, stamps one orientation-dependent local secondary-overlay
|
||
pattern through `0x00534e10` plus `0x004497a0`, and then runs one bounded scored refinement pass
|
||
through `0x0051db80`, `0x00534040`, `0x005340a0`, `0x00534100`, and `0x00533fe0`. The finalizer
|
||
`0x00421730` then clears the per-cell region word at `[world+0x212d] + cell*4 + 1` across the
|
||
full live world raster, seeds each live region's cached bounds fields, and repopulates that same
|
||
raster by writing the nearest class-0 region id `[region+0x23a]` into empty or weaker cell slots
|
||
from one bounded center-and-radius sweep. The region-profile side is tighter too: `0x0041f940`
|
||
counts only the current subcollection entries whose backing
|
||
candidates pass `0x0041f998`, and that smaller predicate now has one real content split instead
|
||
of staying anonymous. Candidates whose subtype byte is not `2` pass immediately, while subtype-2
|
||
candidates only pass when either availability word `[candidate+0xba]` or runtime recipe latch
|
||
`[candidate+0x7ac]` is nonzero; `0x00412af0/0x00412b70` now ground the lookup step beneath both
|
||
counters as a casefolded profile-label-to-candidate resolver over the global candidate pool
|
||
`0x0062b268`; and the stricter year-filtered counter `0x0041f9b0` then stacks the subtype and
|
||
`[candidate+0x26] <= max_year` gates on top of that same availability test. Two adjacent
|
||
collection helpers are grounded now too. `0x0041fa30` linearly scans the same region profile
|
||
collection `[region+0x37f]`, compares labels through `0x005a57cf`, and returns profile-weight
|
||
float `[entry+0x1e]` from the first casefolded match or the shared zero float when none match;
|
||
`0x0041fac0` resolves one 1-based ordinal out of that same collection and copies both the
|
||
matched profile label and weight `[entry+0x1e]` to caller-owned outputs. Those reads line up with
|
||
the editor copy-industry mutator `0x004206b0`, which already treats `[entry+0x1e]` as the live
|
||
editable profile-weight lane. That border
|
||
pass is now tighter too: the
|
||
outer owner refreshes the companion region set `0x006cfc9c` through the reset-and-assign wrapper
|
||
`0x00487650` above the heavier record initializer `0x00487540`, then re-enters `0x004881b0` to
|
||
refresh the raw per-region cell-count band from the live world raster, and the inner emitter
|
||
`0x00487de0` clears prior chunked segment queues through `0x00533cf0`, scans the live region
|
||
raster, and appends fresh border-segment records through `0x00536ea0`. The lower presentation
|
||
helper strip under the same owner is now explicit too: `0x00533970/0x00533980` query the cached
|
||
world-grid X/Y maxima, `0x00533990` stores the secondary-overlay shift field `[world+0x15e1]`,
|
||
`0x005339a0` builds one plane equation from three XYZ points, and `0x00533a30` uses the same
|
||
three-point patch to solve one sampled height at caller-supplied `(x,z)`,
|
||
`0x00533ae0/0x00533af0/0x00533b00` expose the secondary-raster and companion byte-raster roots,
|
||
and `0x00533b20/0x00533b30/0x00533b70/0x00533b90` expose the normalized coordinate, strip-offset,
|
||
and sample-triplet tables used by shell-side overlay staging. The adjacent queue side is tighter
|
||
now too: `0x00533bc0/0x00533bd0/0x00533be0` are the direct append, remove, and root getters for
|
||
shell queue `[this+0x166d]`; `0x00533bf0/0x00533c20` are the cell-addressed attach/detach
|
||
helpers over nearby-presentation table `[this+0x1671]`; `0x00533c50/0x00533c70/0x00533ca0` do
|
||
the same for the region-border overlay chunk table `[this+0x1679]`; and
|
||
`0x00533dd0/0x00533e00` are the matching geographic-label cell-table attach/detach wrappers over
|
||
`[this+0x1675]`. The downstream layout-state staging side is bounded now too:
|
||
`0x005454c0` snapshots the current slot-triplet table into the history list `[layout+0x259f]`,
|
||
`0x00545520` is the optional per-slot item-binding setter over `[layout+0x2593]`, normalizing
|
||
mismatched item mode tokens through `0x005435d0` before publishing node property slot `+0xf4` on
|
||
`[layout+0x25df]`, and `0x00548940` is the paired seeded-triplet applier that walks the
|
||
temporary `0x18`-byte record list at `[layout+0x259b]` and forwards both triplet halves into
|
||
`0x005455e0/0x005456d0` for the first `N` destination slots. The neighboring probe strip is
|
||
bounded now too: `0x00548820` seeds every live slot to the fixed triplet pattern `(1,2,1)` in
|
||
both triplet halves, `0x005488a0` snapshots the current slot-triplet table into that same seeded
|
||
list and can immediately re-apply it, while `0x005489f0` uses literal `TextureForTests` to run
|
||
one layout-side binding probe whose boolean result is later mirrored into shell capability bytes
|
||
`[0x006d4024+0x114250/+0x114251]`. The setup-side owner over that same strip is bounded now too:
|
||
`0x0055ddc0` chooses one small resolution tier from shell dimensions
|
||
`[0x006d4024+0x11423b/+0x11423f]`, seeds a sequence of fixed slot-triplet patterns, snapshots the
|
||
resulting tables into local probe handles, and then drives the same `TextureForTests` probe to
|
||
populate shell capability bytes `[0x006d4024+0x114250/+0x114251]`. The broader lifecycle side is bounded too:
|
||
`0x00547610` is the one-shot publisher for cached bound-node pair `[layout+0x2607/+0x260b]`,
|
||
`0x00547640` clears that publish gate again, `0x00542c10` is the shell-side sweep that releases
|
||
the active global layout-cache entries rooted at `0x00ccbb2c`, `0x0054be60` exports the live
|
||
`0x72c`-byte preset table `[layout+0x840]` into the global default cache `0x00ccbb68` and refreshes
|
||
the shell-side state, `0x00548c50` is the pre-release cleanup owner for history list `[layout+0x259f]`,
|
||
seeded list `[layout+0x259b]`, and optional slot bindings `[layout+0x2593]`, `0x0054a190` is the
|
||
broader bound-presentation release body that drops the same node and controller slot
|
||
`[0x006d4024+0x08]`, `0x005463e0` and `0x005465c0` are the two adjacent notice-emitting handle-bank
|
||
cleanup strips beneath it, with `0x005463e0` now grounded as the five-handle midband release set
|
||
`[layout+0x260f/+0x2617/+0x261f/+0x2627/+0x262f]`, and `0x00547650` is the capability-gated property-strip owner over the
|
||
bound node plus auxiliary handles `[layout+0x2623/+0x2633]`,
|
||
while the small adjacent helper `0x00546390` now reads as the apply-or-reject bridge that asks
|
||
shell helper `0x0051f0f0` to resolve one intermediate object from a caller resource plus bound-node
|
||
pair `[layout+0x25df]` and then forwards that object into bound owner `[layout+0x25db]` through
|
||
slot `+0x3c`, returning success when the owner accepts it,
|
||
`0x005478a0` is the trig-derived alternate property strip over `[layout+0x261b/+0x262b]`,
|
||
`0x00547c30` is the shared four-scalar publisher that stores local band
|
||
`[layout+0x36df/+0x36e3/+0x36e7/+0x36eb]` and emits the derived property-`0x07` block,
|
||
`0x00546d40` is the descriptor-publish helper fed by local scalar bands `[layout+0x2517..+0x25ff]`
|
||
plus seeded handle `[layout+0x36fd]`, and the lower bind/publish strip is bounded now too:
|
||
`0x005471f0` is the shared table-bind helper that chooses node property `0x112` or `0x142` by
|
||
record size and can also publish one companion dword through property `0x154`;
|
||
`0x005472a0/0x00547300` are the clear/publish helpers for property `0x1b`;
|
||
`0x005472c0/0x005472f0` are the adjacent shell-flag-driven set/clear helpers for local byte
|
||
`[layout+0x36f8]`;
|
||
`0x00547320/0x00547380` are the capability-gated apply/clear helpers for the
|
||
`0x0f/0x18/0x19` property strip;
|
||
`0x00546760/0x00546780` are the two tiny caller-driven publishers for property `0x07` and
|
||
property `0x09 = caller + 1`;
|
||
`0x00548030/0x00548060` are the two adjacent fixed property-pair setters for
|
||
`0x13/0x14 = 1/6` and `0x13/0x14 = 5/6`;
|
||
`0x00544270` is the tiny scalar-pair store into `[layout+0x25ef/+0x25f3]`,
|
||
`0x00544360` is the identity-reset publisher for local descriptor `[layout+0x34ef]`,
|
||
`0x00544290` is the sibling descriptor publisher for `[layout+0x352f]` from one integer span
|
||
pair, `0x005443b0` is the copy-side sibling that republishes one incoming descriptor payload from
|
||
caller offset `+0xce`, and `0x00544450` is the tiny query-and-optional-clear helper for local
|
||
flag byte `[layout+0x36f7]`. The next local recompose strip is bounded now too:
|
||
`0x005443f0` exports the current `0x33ab` handle pair plus one auxiliary band into caller record
|
||
payload offsets `+0xce/+0x10e/+0x14e`, `0x00544470` recomposes local blocks
|
||
`[layout+0x356f/+0x362f/+0x35af/+0x33ef]` from the adjacent descriptor blocks through the shared
|
||
matrix-style helpers `0x0056d3cd`, `0x0056d616`, and `0x0056d8d9`, `0x00544500` is the sibling
|
||
recompose owner that writes the final result into `[layout+0x366f]`, `0x00544630` is the tiny
|
||
scalar-triplet store into `[layout+0x2533/+0x2537/+0x253b]`, and `0x00544660` is the four-outparam
|
||
query helper for local rect band `[layout+0x2523/+0x2527/+0x252b/+0x252f]`. The projection side
|
||
beneath that strip is explicit now too: `0x005446b0` projects caller XYZ through local block
|
||
`[layout+0x33ef..+0x342b]` into one XY pair, `0x00544750` is the visibility-gated sibling that
|
||
projects through `[layout+0x33af..+0x33eb]` into XY plus optional depth, and `0x00544860`
|
||
applies local descriptor `[layout+0x34ef..+0x352b]` to one vec3 with a projective divide, while
|
||
`0x00544930` composes local blocks `[layout+0x34ef/+0x35ef/+0x352f]`, applies weighted caller
|
||
XYZ through that stack, rejects the result on the same projective sign test, and otherwise emits
|
||
XY plus one derived score,
|
||
`0x00544a80` maps one local XY pair through cached rect band
|
||
`[layout+0x2523/+0x2527/+0x252b/+0x252f]` and affine coefficient triplet
|
||
`[layout+0x342f..+0x346b]` into XYZ, and `0x00544b80` is the relative-output sibling that
|
||
subtracts that mapped XYZ from one caller-supplied vec3 reference block. The small property-pair
|
||
strip is complete now too: `0x00544c80/0x00544cf0/0x00544d20` clear or arm the same `0x0d/0x0e`
|
||
pair for selectors `4`, `2`, and `1`; the next rect-strip owner is bounded now too:
|
||
`0x00548120` resets the identity block,
|
||
ensures fallback handle `[layout+0x25e3]`, and refreshes the current span; `0x00548180` stores
|
||
normalized local rect band `[layout+0x2523/+0x2527/+0x252b/+0x252f]`, publishes either a dynamic
|
||
or fallback block, and then refreshes the same span; `0x0052d4d0` is the controller-side bridge
|
||
that materializes one active-display rectangle from normalized scalar band
|
||
`[controller+0x50..+0x5c]`; and `0x005482e0` is the join point that either feeds that rectangle
|
||
into `0x00548180` or falls back to a direct width/height span refresh through `0x00544290`;
|
||
`0x0054bb10` is the alternate segment-record bind over `[layout+0x263f]`;
|
||
`0x0054bbd0` and `0x0054bbf0` are the two tiny wrappers that reuse `0x005471f0` for the
|
||
`0x264f/+0x2653` and `0x2647/+0x264b` bind-and-publish pairs. The next owner layer is bounded too:
|
||
`0x0054a500` is the wider branch that clears the visited-byte strip, pulses the surrounding
|
||
property gates, derives two normalized shell scalars, and then either rescales rows from handle
|
||
`[layout+0x2663]` through the local four-scalar band or publishes the local descriptor set rooted
|
||
at `[layout+0x35af]` before committing the same variant-bank-backed batch ranges.
|
||
`0x0054ab20`, `0x0054b030`, and `0x0054b4e0` are the three setup-side batch-refresh owners that
|
||
all walk the `0x2d`-stride batch records rooted at `[layout+0x266f]`, but split cleanly into a
|
||
three-slot candidate-binding variant, a two-slot candidate-binding variant, and a narrower
|
||
`0x265f`-backed capability-switch branch. That last branch is tighter now: `0x0054b4e0` first
|
||
tries a special descriptor bind by asking node slot `+0x128` whether handle `[layout+0x265f]`
|
||
plus the caller pair can be accepted directly, and only on failure does it fall back to the
|
||
capability-selected property path that either raises `0x2c4` and binds `[layout+0x265f]` on
|
||
property `0x28`, or raises `0x1c4` and binds the same handle on property `0x20`, before walking
|
||
the same variant-bank-backed batches with the narrower slot-`0` plus optional slot-`1` clear
|
||
behavior.
|
||
One layer above those batch owners, `0x0054bea0` is now bounded as the interpolated preset-row
|
||
owner. It treats the preset table at `[layout+0x840]` as `0x33`-byte rows, blends two caller-
|
||
selected rows into the local pose and color bands
|
||
`[layout+0x24f0..+0x250c/+0x2510..+0x251f]`, applies extra amplitude terms from
|
||
`[layout+0x25af/+0x25fb/+0x2603]`, reuses the same `0x265b/0x112` and `0x265f` bind decisions as
|
||
the neighboring batch owners, packages one stack descriptor through node slot `+0xb0`, stores the
|
||
packed RGB into `[layout+0x25a3]`, and then finishes through `0x0054a280` so the resulting pose
|
||
and color state becomes live on the bound presentation node.
|
||
One layer further up, `0x0054c420` is now bounded as a timed vertex24 batch-stream owner rather
|
||
than another anonymous setup blob. It resets the same presentation node side, rebinds
|
||
`[layout+0x2647]` onto property `0x142` when needed, reads one `0x2800`-byte block from that
|
||
handle, materializes one fixed `0x28`-entry stack batch, and then spends about `1000` ms driving
|
||
repeated `0xc80`-byte commits through node slot `+0x118`. The smaller helpers beneath it are now
|
||
grounded too: `0x0054c880` refreshes local count field `[layout+0x19]` from base count
|
||
`[layout+0x15]` plus scalar `[layout+0x36a0]`, clamped to `[[layout+0x15] >> 1, 0xff]`, while
|
||
`0x0054c8f0` is the paired getter. The timed owner's tail computes one elapsed-work ratio,
|
||
publishes bound pair `[layout+0x2607/+0x260b]` once through node slot `+0x7c`, re-raises property
|
||
`0x89` from template byte `[layout+0x83c+0x22]`, forces property `0x07 = 1`, and returns that
|
||
ratio in `st(0)`.
|
||
The next body down, `0x0054c900`, is no longer just a raw internal branch. It services a
|
||
`0x10`-entry local slot band rooted at `[layout+0x4ad]` with stride `0x31a`, gated by the same
|
||
refreshed local count `[layout+0x19]` plus active-slot counter `[layout+0x22b57]`. It first
|
||
resets subordinate layout-state `[layout+0x2d]` through `0x005467e0`, `0x00545080`, and
|
||
`0x00547320(1)`, then uses the timer or RNG globals at `0x00d93828..0x00d93834` to seed new
|
||
slots or advance live ones. Those slots can attach to caller-owned records from `[arg+0x40c]`
|
||
through the `0x00554210/0x005545d0/0x005543a0/0x00554340/0x005542c0/0x005543f0` strip, and each
|
||
active slot expands into repeated `0x18`-byte generated records while counters `[layout+0x71]`
|
||
and `[layout+0x75]` advance. The tail commits or clears that generated strip back through the
|
||
same subordinate layout-state using `0x00545520`, `0x00545c50`, `0x00544f30`, `0x005450a0`, and
|
||
`0x005467a0`.
|
||
Its sibling `0x0054d810` now reads as a second service owner over the same slot band, not just a
|
||
hidden math tail. It has a detach-clear fast path when `[layout+0x19] < 0x80`, lazily seeds a
|
||
distinct global jitter table at `0x00d8d830`, refreshes subordinate layout-state `[layout+0x2d]`
|
||
through `0x0054bb70`, `0x00544360`, `0x005457c0(0)`, `0x00545000`, and `0x00546890`, and then
|
||
builds another generated `0x18`-byte strip by combining those jitter values with local origin
|
||
scalars `[layout+0x369c/+0x36a0/+0x36a4]`, one time-derived color band, and the live per-slot
|
||
bytes and countdowns under `[slot+0x4b1..+0x4c3]`. Like `0x0054c900`, it advances counters
|
||
`[layout+0x71/+0x75]` and commits the result back through subordinate layout-state using the same
|
||
span and property-reset helpers.
|
||
The adjacent `0x5de2a8` subobject family under the same owner is bounded now too. `0x0055e9f0`
|
||
is the tiny family initializer that seeds fields around `[+0xa2..+0x106]`, while `0x0055ecb0`
|
||
is the constructor-side owner that installs vtable `0x005de2a8`, loads resource `0x87`, and
|
||
copies the resulting dimension band into `[subobject+0xa2/+0xa6/+0xaa/+0xae/+0xb2]`.
|
||
`0x0055ec00` is the cached-surface ensure path: it allocates one `0xec`-byte surface owner
|
||
through `0x00543980`, materializes a zeroed RGBA backing buffer through `0x00541970`, publishes
|
||
it through `0x005438d0`, and then consults mode table `0x0062583b` from `[subobject+0xea] << 4`
|
||
before optionally triggering global helper `0x0053f000`. `0x0055ea60` is the paired
|
||
table-driven service body that fills that cached surface from payload root `[subobject+0xf2]`,
|
||
and `0x0055ed40/0x0055ed90/0x0055ee60` are the matching cached-surface release, broader
|
||
payload-release, and readiness-or-release guards.
|
||
The next owner layer is grounded now too. `0x0055ee80` is the timed payload-cursor service owner:
|
||
it gates on readiness and global latch `0x00d97970`, advances payload cursor
|
||
`[payload+0x10] -> [payload+0x08]` from elapsed ticks `0x0051d890` and rate pair
|
||
`[payload+0x14/+0x18]`, retries completion through import thunks `0x005c8370/74/78`, and, when
|
||
the cursor is exhausted, consults mode-table bytes `0x00625836/0x0062583a` to restart or reseed
|
||
the payload through `0x005c836c` and `0x005c837c` before flipping completion latches
|
||
`[subobject+0xda/+0xae/+0x106]` or calling optional callback slot `[subobject+0xd6]`.
|
||
`0x0055f0b0` is the setup-side owner above that path: it tears down prior state through
|
||
`0x0055ed90(0)`, formats one mode-table-backed payload name from `0x00625830`, loads that
|
||
payload through `0x005c8368`, derives capped power-of-two surface dimensions into
|
||
`[subobject+0xb6/+0xba]`, optionally allocates staging slab `[subobject+0xbe]`, ensures cached
|
||
surface `[subobject+0xe6]` through `0x0055ec00`, computes local aspect or scale floats
|
||
`[subobject+0x13/+0x17]`, primes the timed service through `0x0055ee80(1)`, and then repopulates
|
||
the cached surface through `0x0055ea60`. `0x0055f3f0` is the compact registered-message
|
||
dispatcher above that setup path, while `0x0055f4e0` is the live service and render owner that
|
||
refreshes the payload or cached surface when mode-table byte `0x00625837` is set and then draws
|
||
either a fallback marker through `0x0054f710` or the cached-surface overlay through `0x0054f640`
|
||
plus follow-on marker sprites through `0x0054f9f0`. The family is now closed on the teardown side
|
||
too: `0x0055f9b0` is the destructor wrapper that re-enters `0x0055ed90(1)`, decrements live
|
||
counter `0x00d9797c`, and optionally frees the object storage.
|
||
The adjacent sibling family rooted at vtable `0x005de318` is bounded now too. `0x0055f9f0`
|
||
is the family initializer: it zeroes the local field band `[+0xa2..+0x102]` and
|
||
`[+0x172..+0x1e6]`, seeds selector word `[+0x06] = 0x08`, stores sentinel `-1` into
|
||
`[+0x192/+0x1d6]`, and seeds active-state dword `[+0x172] = 1`. `0x0055fcc0` is the
|
||
constructor-side owner that loads resource `0x12f`, then copies `0x34` dwords from resource
|
||
offset `+0x5f` into `[subobject+0xa2..+0x16d]`, while `0x0055ff70` is the alternate constructor
|
||
that copies the same `0x34`-dword band from a caller-supplied record instead of a resource.
|
||
Below that, `0x0055faf0` is the small active-state refresh helper over local range or selector
|
||
fields and optional handle `[subobject+0x19a]`; `0x0055fb80/0x0055fba0/0x0055fbc0/0x0055fc10`
|
||
are the row-table accessors and chain-walk queries over the `0x20`-byte row band rooted at
|
||
`[subobject+0x176]`; `0x0055fc50` is the paired optional-handle release that also clears control
|
||
status tokens for child control id `[subobject+0x04]`; and `0x0055ffb0` is the small helper that
|
||
rounds normalized scalar `[subobject+0xb6]` onto the current view-height grid.
|
||
The next owner layer in the same sibling family is bounded too. `0x00560000` assembles one
|
||
descriptor object from local bounds, owner-relative coordinate fields, optional payload root
|
||
`[subobject+0xf2]`, and current owner or child ids, allocates a `0x1b9`-byte record through
|
||
`0x0053b070`, initializes it through `0x0055ab50`, binds it back to owner `[subobject+0x86]`
|
||
through `0x0053f9c0`, seeds fallback color `[subobject+0xf6] = 0xffffff00` when needed, and then
|
||
re-enters `0x0055faf0` to refresh the local active-state latch. The adjacent helpers
|
||
`0x005602c0` and `0x00560300` count or select the Nth nonterminal row chain by re-entering
|
||
`0x0055fbc0`, and `0x00560350` is the family world-anchor query that combines owner origin with
|
||
local offsets and normalized height scalar `[subobject+0xb6]` to produce an `(x, y)` pair.
|
||
`0x005603e0` is the broader live owner above that strip. It either renders the already-bound
|
||
descriptor object when `[subobject+0x126]` is live, or iterates the local row table for up to
|
||
two passes, deriving per-row anchor and span data from owner origin, local float bands, selected
|
||
row or chain helpers `0x005602c0/0x00560300`, and optional cached surface `[subobject+0xe6]`,
|
||
then emitting the resulting overlays through `0x0054f710`, `0x005519f0`, and callback slot
|
||
`[subobject+0x1ce]` when present. That closes the sibling family at a real owner boundary rather
|
||
than leaving it split between constructor and table helpers only. The next callback and state
|
||
band is grounded too: `0x00560e50` rebuilds the callback-row cache in `[subobject+0x18a/+0x18e]`
|
||
and dispatches it through callback slots `[subobject+0x1c6/+0x1ca]`; `0x00561150` is the small
|
||
refresh wrapper above that path that can also advance `[subobject+0x1e2]` from rollover dword
|
||
`[subobject+0x1e6]`; `0x00561740` is the live render wrapper that forwards a derived view box
|
||
into `0x005603e0` and then optionally emits extra marker sprites; `0x00561840` is the selected-row
|
||
setter that clamps the incoming row, mirrors it through optional outputs and callbacks, and
|
||
signals shell input with event `0xce`; `0x005618f0` appends one row record, grows table
|
||
`[subobject+0x176]`, refreshes rollover counters, and re-enters both `0x560e50` and `0x55faf0`;
|
||
and `0x005615f0` is the destructor-side owner that drains callbacks, row strings, the row-table
|
||
slab, and the owner registration before falling back to base cleanup.
|
||
The family now extends through its message and mutation owners as well. `0x00561c30` is the thin
|
||
destructor wrapper over `0x005615f0`; `0x00561c50` removes one row, compacts the `0x20`-byte row
|
||
slab, repairs selection and visible-window state, and refreshes both callbacks and family
|
||
activity; `0x00561e40` updates one row flag at `+0x18`, recounts nonterminal rows, and repairs
|
||
selection if the current choice no longer lands on a valid terminal chain; `0x00561f30` handles a
|
||
narrow navigation-message strip and can synthesize a `0xca` event around the current selection;
|
||
`0x00562540` is the timed auto-scroll owner driven by pointer proximity at the top or bottom of
|
||
the visible band; `0x00562650` clears all rows by repeatedly re-entering the remove-row owner; and
|
||
`0x005626a0` is the registered-message dispatcher that ties the whole family together by routing
|
||
callback setters, row append/remove, clear-all, callback refresh, selection changes, and handle
|
||
release through the now-grounded local owners.
|
||
The next sibling family rooted at vtable `0x005de360` is bounded now too. `0x00562d30` is the
|
||
family initializer: it seeds selector word `[this+0x06] = 0x10`, clears callback and timer dwords
|
||
`[this+0xa2/+0xce/+0xd2/+0xd6]`, seeds delay or range dword `[this+0xa6] = 0x1f4`, and zeroes the
|
||
four watched child-control words `[this+0xaa..+0xb8]`. `0x00563120` is the constructor-side owner
|
||
that loads resource `0x8b` and copies the `+0x5f` payload band into `[this+0xa2..+0xb8]`, while
|
||
`0x00563210` is the alternate constructor that copies the same `11`-dword band from a caller
|
||
record. Below that, `0x00562e40` snapshots elapsed ticks into `[this+0xce/+0xd2]`, optionally
|
||
invokes callback slot `[this+0x9e]` with owner-relative local coordinates, and then falls through
|
||
the shared base update `0x00558760`; `0x00562da0` is the optional marker-pair render helper under
|
||
controller mask `[0x006d401c+0xc79]`; and `0x00562ed0` is the registered-message dispatcher that
|
||
validates readiness through vtable slots `+0x30` and `+0x20`, updates callback slot `[this+0xd6]`,
|
||
compares incoming child ids against watched words `[this+0xb2/+0xb4/+0xb6/+0xb8]`, can synthesize
|
||
`0xca` events, and can resolve a target shell window through `0x00538810` before forwarding the
|
||
paired words `[this+0xae/+0xb0]`. The family closes cleanly on the teardown side too:
|
||
`0x005631e0` is the thin destructor wrapper over base cleanup.
|
||
The shared base child-control family under vtable `0x005ddcd0` is tighter now too. `0x00558580`
|
||
is the real base constructor: it resets state through `0x00558080`, optionally copies one caller
|
||
template block, rebuilds localized text handles `[this+0x63]` and `[this+0x92]`, normalizes
|
||
selector byte `[this+0x37]` to default `3`, and snapshots the primary span bands into
|
||
`[this+0x6c..+0x7c]`. `0x00558000` is the matching base release body that clears parent-window
|
||
active-child links and drops localized or payload handles. On the interaction side,
|
||
`0x005582f0` is the broader point-hit owner above the local shape helper `0x005581e0`, while
|
||
`0x00558670/0x005586c0` are the primary and secondary readiness predicates over flag words
|
||
`[this+0x68/+0x6a]`, owner latches `[owner+0x5c/+0x60]`, optional nested child `[this+0x4b]`,
|
||
and shell controller byte `[0x006d4024+0x57]`. Just above those gates,
|
||
`0x00558760/0x00558840` are the paired active and clear-side service helpers that drive cue
|
||
callback `0x0045ea20`, optional callback slots `[this+0x9e/+0x96]`, and active caption publish
|
||
through `0x00538c70`, while `0x005588b0/0x00558980` are the corresponding clear/set mutators for
|
||
state word `[this+0x6a]` and the parent active-child slots `[parent+0xc6d/+0xc71]`. Above that,
|
||
`0x00558a10` is now bounded as the common registered-message dispatcher for the base
|
||
child-control family rather than an unnamed shared wndproc fragment. The preview-surface child
|
||
subfamily above `0x00559520/0x005595d0` is tighter now too: `0x00559340` seeds its preview and
|
||
aspect fields, `0x005593e0` refreshes current local spans and optional aspect scalars from the
|
||
bound preview handle, `0x005594c0` stages the current local origin and requests the deferred
|
||
refresh through vtable slot `+0x34`, `0x00559f50` stores one highlighted local rect band,
|
||
`0x00559f90` and `0x0055a040` are the heap-template and inline-template constructors, and
|
||
`0x0055a090` is the matching preview-surface destroy path. The render and message owners are
|
||
tighter now too: `0x005595d0` switches over style field `[this+0xb0]`, uses `0x54f710` for flat
|
||
overlay strips, binds preview surface `[this+0xaa]` through `0x54f640 -> 0x51f460` on style `8`,
|
||
and uses `0x53de00 -> 0x552560` for the generic tagged-preview draw lane keyed by selector
|
||
`[this+0xae]` and local rect `[this+0xd8..+0xf0]`; `0x00559c40` is the matching
|
||
preview-surface-specific registered-message owner that updates selectors, colors, aspect scalar
|
||
`[this+0x108]`, alpha byte `[this+0x10c]`, and optional callback slot `[this+0x10d]` before
|
||
tailing into the shared child-control dispatcher `0x00558a10`.
|
||
The adjacent sibling family under vtable `0x005ddd58` is bounded one step further now too:
|
||
`0x0055a560` clears the local selector and metric band `[this+0x101..+0x1b5]`, `0x0055a640`
|
||
stores the item-count field `[this+0x101]`, `0x0055a660` clamps the current index into
|
||
`[this+0x185]`, optionally mirrors that index into one nested type-`8` child, and can fire cue
|
||
selector `[this+0x11d]` through `0x0045ea20`, `0x0055a170` rebuilds a paired token-child strip
|
||
from preview-handle selectors `[this+0x129/+0x131/+0x139/+0x13d]` plus local offsets,
|
||
`0x0055a720` is the matching paired preview-selector render and outline pass,
|
||
`0x0055a990/0x0055ab50` are the resource-backed and inline-payload constructors,
|
||
`0x0055aba0` is the message-side gesture and selection dispatcher above `0x0055a660`, and
|
||
`0x0055a0e0/0x0055ab30` are the paired-child destroy path and thin destructor wrapper above the
|
||
shared base cleanup.
|
||
The shared owner above that small family is bounded too. `0x00563250` and `0x00563260` now read
|
||
as the clear and update helpers for global child-control filter dword `0x00625a94`, and
|
||
`0x00563290` is the real shell-side owner that formats one anchored text or callout payload
|
||
through `0x005519f0`, tries to resolve the target child through `0x0053f830`, and when no child
|
||
exists builds one `0xda`-byte payload block, allocates a new child object through `0x0053b070`,
|
||
initializes it through `0x00563210`, registers it through `0x0053f9c0`, and finally dispatches a
|
||
kind-`0x7b` descriptor through `0x0053fe90` with callback `0x00563260`.
|
||
The adjacent sibling family rooted at vtable `0x005de3b0` is bounded as well. `0x005634e0` is the
|
||
family initializer: it seeds selector word `[this+0x06] = 0x20`, clears scalar and handle bands
|
||
`[this+0xa2..+0xd8]`, zeroes optional text root `[this+0xb2]`, and resets state dword
|
||
`[this+0xcc]`. `0x00563c00` is the constructor-side owner that loads resource `0xa1`, copies the
|
||
payload band rooted at `+0x5f` into `[this+0xa2..+0xd8]`, and seeds fallback text root `[this+0xb2]`
|
||
through `0x0053cb10(0xbc1)`, while `0x00563d70` is the alternate constructor that copies the same
|
||
payload band from a caller record and duplicates the caller string root at `+0x6f`. The live side
|
||
is bounded now too: `0x00563550` refreshes optional localized label id `[this+0xb6]` into text
|
||
root `[this+0xb2]` and applies several mode- and control-id-specific vertical offset bumps to
|
||
`[this+0x13]` and `[this+0xc0]`; `0x00563670` is the primary render owner that can emit an upper
|
||
label through `0x0053de00 -> 0x00552560`, render the main body or callout through `0x005519f0`
|
||
using text root `[this+0xb2]`, style bytes `[this+0x2b/+0x2c]`, optional color bands
|
||
`[this+0xcc..+0xd8]`, and owner-relative float bands `[this+0xa2..+0xc4]`, and then emit one or
|
||
two marker sprites through `0x0054f9f0`; and `0x00563950` is the registered-message dispatcher
|
||
that updates local text root `[this+0xb2]`, toggles active state `[this+0xc8/+0xcc]`, restyles
|
||
sibling control `0x93` through `0x00540120`, and can synthesize a `0xca` event carrying the
|
||
current active value. The family closes on the teardown side through `0x00563d20`.
|
||
The next adjacent helper strip is bounded too. `0x00563e30` is the lazy ensure path for a tiny
|
||
callback-registration handle object: when live flag `[this+0x0c]` is still clear it releases any
|
||
old imported handle at `[this+0x04]`, allocates or registers a new one through import
|
||
`0x005c81c0` with callback `0x00563dd0`, stores the returned handle in `[this+0x04]`, and marks
|
||
the object live. `0x00563e90` is the direct destructor-side release of that same imported handle.
|
||
The neighboring owned-list strip is tighter now too: `0x00563ed0` releases every entry in owned
|
||
list `[this+0x8d]` through `0x005544b0(-1, 1)`, and `0x00563f10` is the tiny remove-from-list
|
||
helper on that same root. Above those leaves, `0x00563f20` is the broader cell-radius refresh
|
||
owner: it clears the `0x1000`-byte visited band at `[world+0x47c]`, clamps one tile rect through
|
||
`0x00533970/0x00533980`, repopulates owned list `[this+0x79]` from the nearby-presentation cell
|
||
table via `0x00533ba0`, repopulates owned list `[this+0x8d]` from the border-overlay chunk table
|
||
via `0x00533c50`, marks visited cells with bit `0x01`, and then deactivates or removes stale
|
||
`[+0x8d]` entries whose cached owner marker no longer matches `[this+0x05]`.
|
||
One small resource-bank seam beside that branch is bounded now as well. `0x005641f0` loads one
|
||
heap-owned payload copy from the shared bank root `0x006d4020`: it hashes or canonicalizes the
|
||
caller key through `0x0053b5c0`, falls back to the caller backup string when the canonical key is
|
||
absent, resolves the payload length through `0x0053c9c0`, opens the row through `0x0053bd40`,
|
||
allocates a buffer through `0x005a125d`, copies the bytes through `0x0053b7c0`, and optionally
|
||
returns the length to the caller. `0x00564280` is the adjacent cache reset or destructor-side
|
||
owner above that helper: it walks the table rooted at `[this+0x04]` with callback `0x005641d0`,
|
||
releases and frees the owned descriptor, table root, and pool roots at `[this+0x00/+0x04/+0x08]`,
|
||
and clears the local counters and live flag. The cache family itself is bounded now too.
|
||
`0x00564570` is the constructor or reset owner: it allocates the three helper roots, builds the
|
||
scored heap and hash table, allocates the `0x15e0`-byte pool behind the vector root, stores the
|
||
caller byte budget in `[this+0x10]`, clears the hit or miss counters, and zeroes the optional
|
||
prefix byte at `[this+0x24]`. `0x00564310` is the scored-eviction helper that pops the top entry
|
||
from heap `[this+0x08]`, frees its payload buffer, removes it from hash root `[this+0x04]`,
|
||
conditionally relinks or frees the entry record, and returns the freed payload size. Above that,
|
||
`0x00564390` is the primary cache-backed load owner: it composes the lookup key from optional
|
||
prefix `[this+0x24]` plus the caller stem, bypasses the cache when `[this+0x14]` is zero, and
|
||
otherwise uses the hash root and scored heap to reuse or evict entries before returning a fresh
|
||
heap-owned payload copy. The neighboring tiny helpers are explicit now too: `0x005641b0` copies a
|
||
caller string into local field `[this+0x24]`, `0x00564150` clears one `0x100`-dword table,
|
||
`0x00564180/0x00564190/0x005641a0` are the adjacent indexed-byte set or clear or query helpers,
|
||
and `0x00564560` is the direct destructor thunk back into `0x00564280`. The next geometry seam
|
||
beneath the same owner band is bounded now too: `0x00564660` builds one six-record `0x18`-byte
|
||
primitive block from a compact record with two projected corners, one packed color, and one
|
||
scalar multiplier, while `0x005648c0` is the sibling three-record builder that handles the
|
||
larger record form with three independently scaled packed colors. Above both, `0x00564c70` is
|
||
the queue-driven owner that walks the caller record list, keeps low-nibble mode byte
|
||
`[this+0x374d]` synchronized through the `0x5472..` and `0x5474..` strip, chooses between
|
||
direct subordinate-state calls and the two primitive builders, accumulates emitted primitive
|
||
count in `[this+0x71]`, and re-enters `0x00523d30(1)` after each serviced record. The sibling
|
||
`0x00564ee0` is the more general list-service owner on the same branch: it first reapplies the
|
||
current optional item binding through `0x00545520`, then walks the caller intrusive list while
|
||
keeping both mode nibbles in `[this+0x374d/+0x374e]` synchronized, dispatching records either
|
||
into direct routed payload calls through `0x005669d0`, direct subordinate-state calls through
|
||
`0x005473c0/0x005474a0`, or the two primitive builders, and finally restoring one trailing
|
||
deferred direct-state tail before it returns. One shell-side layer above that branch is explicit
|
||
now too: `0x00565110` is the broader owner that rebuilds subordinate layout state through
|
||
`0x0055dd80` and `0x0055e2b0`, services one mode-selected record source through `0x00564c70` or
|
||
repeated `0x00564ee0` calls, and only then commits the bound-node finalization strip through
|
||
`0x00548940`, `0x005467a0`, `0x00545020`, and `0x00547fe0`.
|
||
The adjacent small trace-helper seam is bounded now too. `0x00565370` allocates one
|
||
power-of-two square-mask table and one pair buffer, `0x00565440` is the matching destructor,
|
||
`0x00565470` marks one coordinate pair once and appends it to the live pair buffer, and
|
||
`0x005654f0/0x00565500` are the tiny exponent and square-mask getters. Above those leaves,
|
||
`0x00565510` is the broader owner that advances the helper generation, walks the square mask,
|
||
collects two complementary boundary-run lists through globals `0x00d97a30` and `0x00d979b0`,
|
||
and emits the resulting pair strip into the live pair buffer.
|
||
The neighboring world-anchor marker config seam is explicit now too. `0x00565c40/0x00565c60`
|
||
store and query the local marker pair plus selector byte used by the later indexed marker
|
||
emitter `0x00565c90`, `0x00565d60/0x00565da0` replace or release the shared type-`6` image
|
||
handle rooted at `0x00d97ab0`, and `0x00565dc0` loads one named payload triplet through the
|
||
banked-resource strip before seeding the caller output with the default transform band from
|
||
`0x00625ae8`.
|
||
The adjacent sprite-billboard instance seam is bounded now too. `0x00565e30` is the default
|
||
initializer, `0x00565e80` seeds one instance from caller basis, timing, flags, and scale, and
|
||
`0x00565f40` is the per-step update helper that advances lifetime, updates position and basis,
|
||
refreshes the dynamic scratch basis globals, and maintains the live fade scalar later consumed by
|
||
`0x005662a0`; when that step needs to rebuild the scratch quad it re-enters `0x005661b0`, which
|
||
applies one helper matrix to the four billboard basis points rooted at `0x00d97b98`.
|
||
The neighboring routed-payload seam that the layout-state record owners use is explicit now too:
|
||
`0x005669d0` scales one caller float quad by layout spans `[this+0x25c7/+0x25cb]`, rounds the
|
||
results to integers, and forwards that integer quad into an optional sink object through the sink
|
||
vtable strip.
|
||
The next shell-side streamed-record seam is bounded structurally now too. `0x00566a80` loads one
|
||
`0x24`-byte record plus a trailing `0x0c`-stride array, packs four leading floats into one RGBA
|
||
dword, and swaps the second and third float lanes inside each loaded element, while `0x00566b80`
|
||
is the broader sibling that loads one `0x45`-byte record, normalizes its source triples against
|
||
the current global anchor, derives bounds and max-radius, and expands the result into one
|
||
`0x4c`-stride table.
|
||
That streamed-record seam is no longer floating without owners either. `0x00567400` is the
|
||
keyed `3DPF` collection loader: it opens the current-or-selected banked stream, validates magic
|
||
`33 44 50 46`, allocates one `0x18`-stride child-entry array, and then fills each child through
|
||
`0x00567190`. That child loader reads one leading `0x08`-byte header, optionally copies one
|
||
inline anchor triplet into `[out+0x00..+0x08]`, mirrors the same triplet into globals
|
||
`0x00d97ba8..0x00d97bb4`, stores the entry count at `[out+0x14]`, and then chooses one of the
|
||
two earlier payload formats from a trailing format byte: `L` allocates and fills the `0x24`
|
||
inline-entry band at `[out+0x10]` through `0x00566a80`, while `I` allocates and fills the `0x45`
|
||
expanded-entry band at `[out+0x0c]` through `0x00566b80`. The matching release side is explicit
|
||
too: `0x005672e0` frees the nested inline or expanded payloads plus the optional shared helper at
|
||
`0x00d97bb8`, `0x005674c0` releases the whole `3DPF` collection by walking its child-entry array,
|
||
and the tiny wrappers `0x00567500/0x00567520` are now just the construct-and-release front doors
|
||
used by the typed staging-row family.
|
||
The next streamed-patch owner layer is bounded now too. `0x00567730` clamps one caller rectangle
|
||
against grid dimensions `[this+0x15d5/+0x15d9]`, walks the patch-cell pointer table at
|
||
`[this+0x1669]`, and for every live cell scans the surrounding neighborhood for other live cells
|
||
while skipping the center. It uses `0x005675c0` to compare candidate four-corner patch pairs:
|
||
that helper measures corner-to-corner distances from the triplets rooted at `+0x00/+0x08`,
|
||
ignores corners already masked with state byte `+0x31 == 2`, updates the caller best-distance
|
||
scalar when a closer match survives, and averages the paired blend bytes at `+0x39` back into
|
||
output bytes `+0x35`, or marks both corners with state `1` when the distance only falls under
|
||
the looser threshold at `0x005c85b8`. Once one best neighbor survives, `0x00567730` averages the
|
||
winning patch positions into midpoint triplets, resolves a world-height scalar through
|
||
`0x00534490`, and decrements the caller output budget before continuing.
|
||
The actual streamed quad emission side is tighter now too. `0x005679b0` expands one streamed
|
||
patch item into one `0x90`-byte six-vertex `vertex24` quad: it derives an 8-step brightness
|
||
phase from `GetTickCount` plus item field `[this+0x3a]`, combines that phase with the four corner
|
||
blend bytes at `+0x35..+0x38`, forces masked corners at `+0x31..+0x34` fully transparent, and
|
||
writes six `0x18`-byte vertices from the corner positions rooted at `+0x00..+0x2c`. The two list
|
||
streamers above it are explicit too: `0x00567c70` emits the primary intrusive list rooted at
|
||
`[this+0x1c]`, `0x00567ce0` does the same for the alternate list at `[this+0x20]` with one extra
|
||
selector value, and both advance the destination by `0x90` bytes per emitted quad. Their shared
|
||
release side is `0x00567bf0`, which frees both intrusive lists and all queued quad items through
|
||
`0x005570b0`, while `0x00567d50` is the immediate destructor-side sibling that drops the two
|
||
list-root objects themselves and clears owner slots `[this+0x1c]` and `[this+0x20]`.
|
||
The actual streamed-patch owner above those leaves is bounded now too. `0x00567da0` first clears
|
||
any previously queued quads through `0x00567bf0`, then walks the live signed-byte sample grids at
|
||
`[this+0x08]` and `[this+0x0c]` together with the `u16` type-word table at `[this+0x10]` across
|
||
the current interior tile rectangle. For each admitted cell it allocates one `0x3e` patch record,
|
||
derives corner positions and color or blend bytes from the surrounding signed-byte samples plus
|
||
the low three type bits through table `0x00625c60`, and accumulates those records into the
|
||
primary and alternate intrusive roots at `[this+0x1c]` and `[this+0x20]`. After that initial
|
||
build it runs a second neighborhood-processing pass over the primary list, using local pair and
|
||
radius gates before finalizing the generated blend-byte bands. The constructor side is explicit
|
||
too: `0x005692e0` allocates and initializes the two intrusive list roots, copies the caller
|
||
bounds and grid-owner accessors into `[this+0x00..+0x24]` through the neighboring world-grid
|
||
query helpers, and immediately re-enters `0x00567da0` to build the live patch lists.
|
||
The coarse secondary-overlay backend under `[world+0x1685]` is now explicit too. Each coarse
|
||
chunk is one `0x54`-byte object initialized by `0x0056af70`, with quantized origin dwords at
|
||
`[chunk+0x00/+0x04]`, world-space origin floats at `[chunk+0x08/+0x0c]`, total live-cell count
|
||
`[chunk+0x10]`, and a `4x4` local-page table rooted at `[chunk+0x14]`; `0x0056afc0` is the
|
||
matching full-page release walk. Each present local page is `0x8a` bytes loaded or saved by
|
||
`0x0056b490` and `0x0056b510`, with a live-cell word at `[page+0x00]`, a shared state byte at
|
||
`[page+cell*8+0x0a]`, one per-cell sample-slot side band at `[page+cell*8+0x02+i]`, and one
|
||
auxiliary byte at `[page+cell*8+0x0b]`. The state byte split is bounded too:
|
||
`0x0056b000/0x0056b070` toggle and query the low-nibble flag mask,
|
||
`0x0056b180/0x0056b1f0` query and store the three-bit sample-slot count, and `0x0056b0e0`
|
||
decrements that sample-slot count, decrements both the page and chunk live-cell counters, and
|
||
frees the page when its live count reaches zero. The auxiliary byte side is separate:
|
||
`0x0056b260` queries it and `0x0056b700` stores it while marking shell dirty byte
|
||
`[0x006d4024+0x374a]`. The broader append owner above those leaves is now bounded too:
|
||
`0x0056b580` ensures one local page, seeds its minmax height band through `0x0056b2c0` from a
|
||
`5x5` world-sample lattice, writes the caller auxiliary byte, derives one quantized sample byte
|
||
from the world-height path, and appends it into the per-cell sample-slot side band while
|
||
incrementing both the page live-cell word and the cell's three-bit sample-slot count when that
|
||
count is still below `6`. The
|
||
earlier rectangle helper at `0x00533e70` is corrected now too: it does not release chunks. It
|
||
walks the surviving coarse-chunk rect and re-enters `0x0056b770` on every live chunk so those
|
||
per-count side bytes are refreshed from the current world callbacks across the whole rect.
|
||
The adjacent bundle-codec seam is explicit now too. The shared callback context at `0x00d93984`
|
||
is no longer just an anonymous transport scratch block: `0x00552f30` and `0x00552fa0` are the
|
||
paired source and sink callbacks over that context, with progress publish through `0x00d93988`,
|
||
and the two bundle-side wrappers `0x00553000/0x00553120` now read as the encode/decode owners
|
||
for payload families `0x91` and `0x92`. Selector `0x91` routes into the older ring or
|
||
backreference codec: `0x0056be10` decodes fixed header `0x10/0x91` through buffered byte helper
|
||
`0x0056b8f0`, replays literals and packed backreferences through `0x0056b940`, and uses one
|
||
`0x200`-byte ring cursor rooted at `0x1be`; `0x0056bfe0` is the matching encoder, with adaptive
|
||
dictionary state initialized by `0x0056bca0`, updated through `0x0056b990` and `0x0056bb10`,
|
||
and emitted through the pending-token strip `0x0056bc00 -> 0x0056bbb0`. Selector `0x92` routes
|
||
into the simpler run or literal family: `0x0056c3e0` emits header `0x10/0x92` then packs either
|
||
repeated-byte runs or literal spans through `0x0056c320`, while `0x0056c630` reverses that same
|
||
`(high-bit-set => run, high-bit-clear => literal span)` control format through `0x0056c370` and
|
||
`0x0056c320`. That closes the support-family gap beneath the companion-payload rewrite owners
|
||
`0x004427c0/0x00442900`, the tagged-surface importer `0x00541c30`, and the tagged-surface
|
||
exporter `0x005428c0`: they are all now reusing the same pair of explicit bundle codecs rather
|
||
than separate anonymous transform bodies. The adjacent format-descriptor seam under the same
|
||
surface path is explicit now too: `0x005700e2` looks one requested tag up in the live
|
||
`0x24`-byte descriptor table rooted at `0x005de500` and falls back to the default entry,
|
||
`0x00570106` scores one candidate descriptor against a reference through the compatibility matrix
|
||
at `0x005deb38`, `0x0057017b` iterates the same table and optional target interface to select
|
||
the best supported descriptor tag, `0x0057033f` is the broader validation owner that resolves or
|
||
selects that descriptor, clamps width or height or depth or level counts against target limits,
|
||
rounds `DXT1..DXT5` sizes up to four-pixel blocks, and forces power-of-two sizes when the
|
||
selected descriptor and capability flags require it, `0x00570669` is the mode-`3` wrapper over
|
||
that validator, `0x00570691` is the target-side owner that feeds the validated result into
|
||
vtable slot `+0x50`, and `0x005706f7` is the next materialization owner that either takes one
|
||
fast matching-descriptor transfer path through target slot `+0x70` or falls back into the
|
||
broader decode owner `0x0057025d`. The Direct3D-side gate in that seam is explicit now too:
|
||
`0x00571570` is not a generic lock, it lazily resolves `DebugSetMute` from `d3d8.dll` and
|
||
`d3d8d.dll` and forwards the caller's mute on or off flag through whichever callbacks exist.
|
||
The fallback decode stack is explicit now too: `0x00571600` and `0x0057160a` are the tiny
|
||
two-handle decode-pair init or release helpers used by `0x0057025d`, `0x0057163e` is the
|
||
broader weighted axis-map builder for the general resample branches, `0x005718fb` is the flagged
|
||
release path for those temporary axis maps, `0x00573e02` is the lighter dual-tap axis-map
|
||
builder used by the mode-`3` weighted resamplers, and `0x00574ed5`, `0x00574ee5`, and
|
||
`0x00574f4e` are the same
|
||
for the `0x10`-byte temporary source-view context, `0x00574f53` is the broader owner that resets
|
||
that context, queries source bounds, validates or synthesizes the working rect, acquires one
|
||
subordinate view when needed, and aligns the rect for block-compressed or packed-YUV tags such
|
||
as `DXT1..DXT5`, `YUY2`, and `UYVY`, and `0x00574dbb` is the decode-branch dispatcher that links
|
||
one handle pair and then tries the supported codec bodies in sequence. The concrete branches are
|
||
tighter now too: `0x00572f1e` falls into a direct row copy when the linked source and destination
|
||
layouts already match, `0x00573056` allocates one temporary `width*0x10` row buffer and
|
||
transfers rows through the source and destination callback slots, `0x00573147` is the mode-`1`
|
||
branch that allocates two temporary row buffers and zero-fills any destination rows or slices
|
||
outside the shared minimum bands, `0x00573349` is the mode-`2` branch that rebuilds destination
|
||
rows through fixed-point step ratios derived from the linked source and destination dimensions,
|
||
`0x00571dbb` is the narrow direct compressed-block copy sibling for `DXT1..DXT5` when the source
|
||
has no auxiliary descriptor payload, `0x0057354d` is the first mode-`5` half-resolution branch
|
||
with subtype-gated specialized dispatch, `0x0057206f` and `0x00572305` are the two front doors
|
||
into a CPU-selected packed-32 `2x2` reducer pair, `0x005722a1` and `0x005722d6` are the
|
||
one-time initializers for those reducer slots, `0x00572188` is the MMX-or-scalar packed-32
|
||
wrapper beneath them, `0x00571f49` and `0x005720a0` are the scalar packed-32 reducers,
|
||
`0x00572336`, `0x00572486`, `0x005725aa`, and `0x005726f9` are the scalar `RGB565`, `RGB555`,
|
||
`ARGB1555`, and `ARGB4444` `2x2` half-resolution reducers in the same jump-table family,
|
||
`0x0057298b` is the generic packed-8 reducer reused for the type-`0x1c` and type-`0x32`
|
||
entries, `0x00572a26` is the alpha-plus-`RGB332` sibling, `0x00572b72` is the scalar
|
||
`X4R4G4B4` reducer, and `0x00572c93` plus `0x00572ddf` are the scalar `A8L8` and `A4L4`
|
||
reducers, and `0x00573970` is the broader mode-`5` single-slice box-filter half-resolution
|
||
fallback,
|
||
`0x00573f02` and `0x005742e8` are the two weighted mode-`3` axis-map resamplers with two and
|
||
four staged row sets built from `0x00573e02`, and `0x00574a19` plus `0x00571947` are the
|
||
general 2D and 3D weighted resample branches that build refcounted row or slice contribution
|
||
tables through `0x0057163e` and release them through `0x005718fb`, `0x00575b34` is the shared
|
||
decoder-base constructor, `0x00575366` and `0x00575677` are the two release-side companions for
|
||
the base and the larger nested-table families, `0x0057537f` is the auxiliary `vec4` staging-row
|
||
builder behind the peer-mode bridge, `0x00575d9c` is the small peer-mode mismatch helper that
|
||
allocates and caches one auxiliary `width*0x10` staging row, `0x00575e17` is the temporary
|
||
single-sample local-color helper that runs the decoder's vtable pair against `[obj+0x1c..+0x28]`
|
||
under a rewritten one-sample state, `0x00575ee3` zeroes decoded sample quads when all four float
|
||
lanes exceed the descriptor clip thresholds, `0x0057909e` flushes live packed-YUV-422 auxiliary
|
||
samples back into the payload window, and `0x00578eef` and
|
||
`0x0057989d` are the shared packed-YUV-422 and `DXT1..DXT5` decoder bases. `0x00579325`
|
||
refreshes the packed-YUV-422 cached window and builds the auxiliary sample band under that
|
||
family, `0x00579727` and `0x005797f1` are the packed-YUV-422 row decode and output-copy
|
||
siblings, and the actual packed-YUV-422 subtype wrappers are now the FourCC or custom-tag cases
|
||
`0x0057a3c8` and `0x0057a3e0` over base `0x00578eef`. The earlier constructor band
|
||
`0x00578ed3`, `0x00579008`, `0x00579045`, `0x00579082`, `0x005792ab`, `0x005792e8`,
|
||
`0x005795f6`,
|
||
`0x00579633`, `0x00579670`, `0x005796ad`, and `0x005796ea` are now tightened to factory tags
|
||
`0x14..0x1e`, all still using aux mode `1` with sample strides `0x08`, `0x10`, `0x18`, or
|
||
`0x20`;
|
||
`0x0057a1ab`, `0x0057a1e8`, and `0x0057a225` are now also tightened to factory tags
|
||
`0x36314c41`, `0x36315220`, and `0x36315241`, with sample strides `0x20`, `0x30`, and `0x40`;
|
||
`0x0057a37f` is the
|
||
packed-YUV-422 base release owner that flushes live auxiliary state before freeing it,
|
||
`0x00575717` is the broader `DXT` tile-row decode owner above the cached cell table,
|
||
`0x00579bdc` is the tag-dependent threshold-quantization helper in that same `DXT` neighborhood,
|
||
and the subtype strip between `0x00579a8f` and `0x00579ee1` is now explicit as factory-tagged
|
||
wrapper pairs over the shared base for tags `0x28`, `0x29`, `0x32..0x34`, `0x3c..0x41`, `0x43`,
|
||
`0x46`, and `0x31545844`, with aux modes `1`, `2`, and `3`, sample strides `0x08`, `0x10`,
|
||
and `0x20`, and one nested-table release case at `0x00579b62`.
|
||
The factory tail is tighter too: `0x0057ab70` and `0x0057ab91` are the missing release wrappers
|
||
for the custom packed-YUV-422 and `YUY2` subtype vtables `0x005def10` and `0x005def20`, and the
|
||
adjacent `0x0057abb2/0x0057abc4/0x0057acd4/0x0057ad15` strip is now grounded as a small
|
||
mapped-file view context with closed-handle initialization, read-only open or map, release, and
|
||
conditional release helpers.
|
||
`0x00579f02` is the next `DXT` owner above that strip: it allocates or refreshes the cached
|
||
`0x10`-byte sample strip at `[obj+0x10b8]`, rebuilds it through the primary kernel when the
|
||
aligned block origin changes, copies the requested region back out, and then optionally reuses
|
||
the same threshold vec4 `[obj+0x1c..+0x28]` as a whole-vec4 zeroing gate on the copied output,
|
||
`0x0057ecb3` is the shared `RGB565`-to-vec4 expander with unit alpha, `0x0057ecff` and
|
||
`0x0057ed7d` are the shared vec4-block unpremultiply and premultiply helpers, `0x0057edd0` is
|
||
the shared RGB565 quantizer that clamps one float RGB triplet, switches the x87 rounding mode
|
||
through `0x0057edad`, and packs the rounded five-six-five lanes back into one endpoint word.
|
||
The next owner layer is explicit now too: `0x0057eeca` is the shared
|
||
`DXT4/5` alpha-endpoint fitter over sixteen scalar samples, `0x0057f1cf` is the shared
|
||
`DXT1`-family color-endpoint fitter over sixteen vec3 samples, and `0x0057f73a` is the shared
|
||
`DXT1`-family color-block encoder that chooses transparent-versus-opaque policy from the caller
|
||
alpha lanes, fits float endpoints, quantizes them to `RGB565`, and writes the final selector
|
||
bits. `0x0057ff3e` is the shared `DXT1` RGB565-endpoint-to-palette builder, `0x0058007c` and
|
||
`0x005800ff` are the shared `DXT2/3` explicit-alpha and `DXT4/5` interpolated-alpha block
|
||
decode cores, `0x0058023b`, `0x00580253`, and `0x00580367` are the secondary `DXT1`,
|
||
`DXT2/3`, and `DXT4/5` block-write kernels, `0x005807b9` and `0x005807dc` are the dedicated
|
||
`DXT2` and `DXT4` decode wrappers that re-enter the unpremultiply helper after the shared
|
||
cores, and `0x005807ff` plus `0x00580833` are the matching `DXT2` and `DXT4` encode wrappers
|
||
that premultiply one temporary vec4 block before entering the shared `DXT2/3` and `DXT4/5`
|
||
encoder cores,
|
||
`0x0057a262`, `0x0057a29b`, `0x0057a2d4`, `0x0057a30d`, and `0x0057a346` are the thin
|
||
`DXT1..DXT5` wrappers above that `DXT` base, their release-side siblings now route through the
|
||
broader `DXT` family teardown `0x00575677`, and `0x0057a3f8` is the broader
|
||
format-tag decoder factory beneath the
|
||
handle-pair dispatcher. Above all of those, `0x0057025d` is the owner that
|
||
materializes one temporary source view, snapshots the caller descriptor band, dispatches the
|
||
decode chain, and fills one intermediate materialization descriptor on success. That keeps the
|
||
DXT and tagged-surface import path grounded as one explicit descriptor-selection and decode stack
|
||
instead of a decode call hanging off anonymous table probes.
|
||
The adjacent `0x005def5c` seam is tighter now too. `0x0057b4fd` and `0x0057b5d4` are no longer
|
||
generic target-side wrappers: `0x0057b4fd` builds one temporary transform block from up to three
|
||
optional anchor pairs plus caller angle and scale, then dispatches that block through target slot
|
||
`+0x18`, while `0x0057b5d4` is the broader target-service draw owner that queries surface bounds,
|
||
validates or synthesizes one caller rect, classifies the active format tag, converts that rect
|
||
into normalized float bounds, builds either four `0x1c`-byte or four `0x18`-byte local vertex
|
||
records, optionally projects them through `0x0056cdda`, applies the local `-0.5f` pixel-center
|
||
bias, and dispatches the finished strip through slot `+0x120`. The family growing above those
|
||
owners is now recognizable as a shader-assembly context rather than another generic target
|
||
object: `0x0057b9a7` initializes seven embedded dword-vector bands plus the string-log vector at
|
||
`[this+0x84]` and publishes the context through singleton `0x00db89d8`, `0x0057ba6e` is the
|
||
reverse destructor, and the shared error helper starts one step earlier than the old row
|
||
implied: `0x0057bafd` formats assembly-error lines like `%s(%d) : (Assembly Error) %s`,
|
||
`statement incomplete`, `constant definition in shader body`, and `shader version expected`
|
||
into that owned string log. `0x0057bc33` parses one opcode token plus grounded suffixes `sat`,
|
||
`x2`, `x4`, `d2`, `d4`, and `d8` into context fields `[this+0x1c8/+0x1cc]`, `0x0057c34a`
|
||
parses the destination write-mask token over `rgba` or `xyzw`, `0x0057c3f3` is the matching
|
||
source-swizzle parser, and `0x0057c494` parses grounded register families
|
||
`c/v/t/a/oPos/oFog/oPts` with optional source modifiers `_da`, `_dw`, `_db`, `_dz`, `_x2`,
|
||
`_bx2`, and `_bias`, including the indexed forms reported by the local `invalid register`
|
||
formatters. The output-side seam under the same context is now explicit too: `0x0057c835` emits
|
||
one grounded constant-definition record from a parsed constant register plus a caller vec4
|
||
payload, `0x0057c8de` flushes one pending `TEXT` comment chunk into the output dword stream, and
|
||
`0x0057c9b4` emits `FILE` and `LINE` chunks only when the current source location changes. That
|
||
extends cleanly into the owner layer too: `0x0057cb2b` is the shared lexer that skips comments,
|
||
maintains line state, accepts `#line`, rejects other preprocessor directives, tokenizes
|
||
identifiers and numeric spans into `[this+0xc8]`, and returns the grounded token/status codes;
|
||
`0x0057d043` is the main statement compiler above it, dispatching version declarations,
|
||
constant-definition statements, comment/file/line chunks, arithmetic and texture opcodes, and
|
||
operand parsing through the helper bands we already grounded while enforcing the current
|
||
version-specific rules like `constant modifiers not supported in ps.1.4`, `coissue not supported
|
||
in vertex shaders`, `complement not supported in vertex shaders`, `negate and divide modifiers
|
||
cannot be combined`, and the indexed-register restrictions around `a0.x`. One owner level above
|
||
that, `0x0057d97a` is now bounded as the shift-reduce parser driver: it initializes the parser
|
||
stacks and lookahead globals rooted at `0x00db85d0/0x00db89c0/0x00db89c4/0x00db89c8/0x00db89cc`,
|
||
repeatedly asks `0x0057cb2b` for the next lookahead token, walks the grammar action and goto
|
||
tables at `0x006265a0..0x00626a68`, invokes `0x0057d043` on reductions `0..0x32`, and handles
|
||
error recovery through the same shared formatter with grounded strings like `statement expected`
|
||
and `yacc stack overflow`. The wider API-side owner is bounded now too: `0x0057de38` records the
|
||
caller source span and optional file name into the same context, emits the default
|
||
`D3DX8 Shader Assembler Version 0.91` banner when needed, invokes `0x0057d97a`, and then
|
||
conditionally materializes the assembled output stream, adjacent constant-table-style object, and
|
||
joined error-log text while probing the grounded registry-side policy keys under
|
||
`0x005df51c`, `0x005df530`, `0x005dec20`, and `0x005dec3c`. That closes the nearby
|
||
shader-assembly parser and API seam enough to stop treating those rows as anonymous string
|
||
switches. The next tiny seam after that is now
|
||
grounded too: `0x0057e300` and `0x0057e410` are not anonymous literal tables but the two math
|
||
function-table seeders immediately above the later packed and x87 helper families. The first
|
||
writes the older scalar or x87 geometry, plane, quaternion, and matrix entrypoints like
|
||
`0x00582c30`, `0x00582e40`, `0x00582eb0`, and `0x00582fd0` into one fixed slot layout, while
|
||
the second writes the packed or vectorized successors like `0x005830a0`, `0x00583320`,
|
||
`0x00583e80`, `0x00584010`, `0x005840f0`, and `0x00584210` into the same table shape. One owner
|
||
layer above that is bounded now too: `0x0057e520` is the local CPUID feature-mask probe for MMX
|
||
and AMD-extended SIMD paths, `0x0057e5f5` is the broader MMX or 3DNow table-seeding owner that
|
||
populates the later `0x005895..`, `0x00589b..`, `0x0058a0..`, `0x00584b..`, and `0x005860..`
|
||
families when those capability bits are present, and `0x0057ec77` is the compact x87-side table
|
||
seeder for the nearby low-dimensional strip. That local strip is explicit now too:
|
||
`0x0057e81b/0x0057e884` are the x87 2D basis-plus-translation and basis-only helpers,
|
||
`0x0057e8b9/0x0057e944` are the corresponding 3D variants, `0x0057ea3c` is a fast table-assisted
|
||
vec3 normalize-or-zero helper over lookup tables `0x00626c80/0x00626c84`, and
|
||
`0x0057eb06/0x0057ebe9` are the two alias-safe `4x4` multiply siblings that differ mainly in
|
||
whether they write results in contiguous row order or one `0x10`-byte column stride.
|
||
The adjacent x87 math seam is explicit now too. `0x00571493` is the one-time dispatch-table
|
||
initializer for the live function-pointer strip rooted at `0x00625c88`: it copies the default
|
||
seed table from `0x00625d70`, optionally resets the whole strip, and on first live use patches
|
||
selected slots in place after the local feature probes. The wrapper entries `0x0056c890`,
|
||
`0x0056c948`, `0x0056ca21`, `0x0056cacd`, `0x0056cba5`, `0x0056cca0`, `0x0056cf7f`,
|
||
`0x0056d07a`, and `0x0056d197` are not standalone subsystem owners; they are the dispatched x87
|
||
or feature-gated front doors for the same curve and blend helpers we already grounded later in
|
||
SSE and MMX form. The older bootstrap seam beneath that family is explicit now too: `0x005a1081`
|
||
and `0x005a10b9` seed the five-slot legacy x87 dispatch table at `0x0062a360..0x0062a374`,
|
||
probe `KERNEL32!IsProcessorFeaturePresent(0)` or fall back to the local arithmetic test at
|
||
`0x005a63ca` through `0x005a640a`, store that result in `0x00dba008`, and then apply the local
|
||
x87 control-state setup through `0x005a63b8`. The adjacent CRT-style support seam is explicit now
|
||
too: `0x005a1a1c` is the unlocked buffered element-reader over the FILE-like band at
|
||
`[stream+0x00/+0x04/+0x0c]`, `0x005a1b05` is the public lock-scoped wrapper already used by the
|
||
companion-image import and rewrite paths, `0x005a1b60` is the older x87 `pow` owner with the
|
||
clean-state fastpath probe and the full negative-base or NaN or infinity special-case ladder,
|
||
`0x005a1dc2` classifies `st(0)` as non-integer, odd integer, or even integer for those `pow`
|
||
special cases, `0x005a1e1d/0x005a1ea5` are the locale-aware signed-decimal core and wrapper,
|
||
`0x005a2076` is the corresponding floating parser returning one `f64` in `st(0)`, and the
|
||
neighboring string seam is explicit too: `0x005a1df0` is the reverse character search helper,
|
||
`0x005a1eb0` is the bounded append helper, `0x005a1ff0` is the substring search helper,
|
||
`0x005a2a06` is the single-character search helper beneath that fast path, `0x005a2abe` is the
|
||
locale-aware lowercase-in-place normalizer already used by the hotkey modifier parser, and
|
||
`0x005a20b0` remains the shared overlap-safe byte mover beneath both the parser and transport
|
||
text families. The adjacent helper layer is explicit now too: `0x005ac3b0` is the unbounded
|
||
append helper the lowercase normalizer uses for copyback, `0x005ac579` is the broader locale
|
||
string-mapping owner that prefers `LCMapStringW + MultiByteToWideChar/WideCharToMultiByte` and
|
||
falls back to `LCMapStringA` when the wide path is unavailable; the ANSI-side fallback helpers
|
||
are grounded now too as `0x005b16ef` for `LCID -> default ANSI codepage` and `0x005b1738` for
|
||
the source-or-destination multibyte transcode bridge beneath that ANSI path. `0x005ac935/0x005ac9bd` are
|
||
the temporary stream-buffer prepare or restore pair beneath the locked formatter. The same CRT strip now also owns the formatted-stream and on-exit table side:
|
||
The adjacent classification leaves are explicit too: `0x005b1a00` is the shared mbctype-mask
|
||
predicate over `0x00dba541` and the secondary table at `0x005e6f12`, and `0x005b1a31` is its
|
||
alpha-character wrapper. The neighboring locale-info bridge is explicit now too:
|
||
`0x005b2828` is the wide-output `GetLocaleInfoW` wrapper with `GetLocaleInfoA +
|
||
MultiByteToWideChar` fallback, and `0x005b2958` is the multibyte-output sibling that prefers
|
||
`GetLocaleInfoW + WideCharToMultiByte` and falls back to direct `GetLocaleInfoA`. Above those
|
||
two wrappers, `0x005b1a42` is now grounded as the shared locale-field materializer used by the
|
||
broader locale-structure builders: it either allocates one exact-sized multibyte locale string
|
||
for the caller or parses one short decimal locale-info field into a single output byte. The same
|
||
locale-record owner strip is explicit now too: `0x005ad524` builds the primary `0xb8` locale
|
||
text record from the current-thread and user-default locale words, `0x005ad88b` releases that
|
||
record’s owned string fields, and `0x005ada1b` publishes either the dynamic record or the static
|
||
fallback at `0x0062abe8` through globals `0x0062abe0/0x00dba2f8`. The adjacent narrower record
|
||
families are grounded as well: `0x005ada7a` is the release helper for the active three-string
|
||
record at `0x0062acd4`, `0x005adad9` refreshes that tri-string record and its digit-map side
|
||
globals, `0x005adca6` releases the secondary `0x30`-byte text record band, and `0x005add7f`
|
||
rebuilds that secondary record plus the multibyte lead-byte or classification side state. The
|
||
older locale-selection layer is explicit now too: `0x005ae38c` is the static-locale-table or
|
||
`GetLocaleInfoA` bridge over the fixed `0x005e7448` LCID rows, `0x005ae2d8` seeds the
|
||
user-default LCID pair, `0x005ae8c3/0x005ae8fa/0x005ae980` are the three
|
||
`EnumSystemLocalesA`-driven name-selection branches, `0x005ae278` binary-searches alias table
|
||
`0x005e7a30` to rewrite incoming locale-name pointers in place, `0x005ae2f2` parses the final
|
||
codepage selector from `ACP`, `OCP`, or locale-info text, and callbacks `0x005ae4c1`,
|
||
`0x005ae5d2`, and `0x005ae7f2` are the concrete secondary-name, two-name, and primary-name
|
||
`EnumSystemLocalesA` matchers that fill `0x00dba304/0x00dba308` and selector bits in
|
||
`0x00dba300`. Above those, `0x005ae9d5` is the broader old `setlocale`-style owner that
|
||
selects the LCID pair, validates it through `IsValidLocale` and `IsValidCodePage`, and exports
|
||
the final `(primary LCID, secondary LCID, codepage)` triple plus canonical locale-name text. The same
|
||
locale-text seam now includes the compare and environment side too: `0x005b2b6d` is the broader
|
||
`CompareStringW/CompareStringA` owner with codepage-selection and transcode fallback,
|
||
`0x005b2a98` is the smaller prefix-compare wrapper that turns `CompareString*` equality into
|
||
`0`, `0x005b2ae6` is the wide-env to multibyte-env materializer that seeds `0x00dba030`
|
||
from the wider backing vector at `0x00dba038`, `0x005b2ef7` is the search helper returning
|
||
either a nonnegative env-slot index or the negated end slot, `0x005b315a` is the DBCS-aware
|
||
character finder beneath the `'='` split path, and `0x005b2fa5` is the broader multibyte
|
||
environment set-or-unset owner that also forwards updates into `SetEnvironmentVariableA`.
|
||
The next CRT support strip is grounded now too: `0x005b1907` is the `user32.dll`-backed
|
||
runtime-error message-box owner beneath `0x005acdb0`, `0x005b1ddd/0x005b1e23/0x005b1e36` are
|
||
the top-level unhandled-exception filter callback plus its install and restore bridges,
|
||
`0x005b1eab/0x005b1f2c` are the nolock and lock-scoped environment `name=value` lookup owners,
|
||
`0x005b1b73/0x005b1bb1` are the unsigned and signed integer-to-ASCII helpers, and `0x005b1bdb`
|
||
is the standard security-cookie initializer over time, pid, tid, tickcount, and QPC. The same
|
||
neighborhood now also owns the older signal and decimal-record leaves: `0x005b23bd` is the
|
||
per-thread signal-action lookup over `[thread_data+0x54]`, `0x005b23eb` is the higher
|
||
signal-dispatch owner above that table and the global handler slots at `0x00dba480..0x00dba48c`,
|
||
`0x005b1f6b` is the checked `u32` add helper, `0x005b1f8c` is the three-dword carry-propagating
|
||
add helper, and `0x005b1fea/0x005b2018` are the left and right one-bit shifts on that same
|
||
internal 96-bit decimal band. The neighboring fatal-report owner is bounded now too:
|
||
`0x005b1c31` formats either the buffer-overrun or unknown-security-failure message body, adds the
|
||
program path or `<program name unknown>`, and then routes the final text through
|
||
`crt_report_runtime_error_via_user32_message_box_or_callback` before forced CRT termination.
|
||
`0x005a2bd2` is the lock-scoped varargs stream formatter, while `0x005a2c30/0x005a2cb0/
|
||
0x005a2cd8/0x005a2d10` append callbacks into the global on-exit table at `0x00dbb8dc/
|
||
0x00dbb8d8`, initialize that table, and expose the narrow boolean registration wrapper just
|
||
beneath `crt_init_exit_handlers` `0x005a2d64`; `0x005ac9e7` is the allocation-size query helper
|
||
for that same dynamic table, and `0x005a6649` is the local CRT heap-region descriptor probe that
|
||
lets `0x005ac9e7` avoid `HeapSize` on the small-block fast path. The shared rounding leaf under
|
||
both the overlay
|
||
and math families is explicit now too: `0x005a10d0` is the signed float-to-integer helper reused by the later
|
||
quantized-origin, height-bias, and layout-state callers. Their default local fallbacks are now
|
||
bounded too: `0x0056c8ba`,
|
||
`0x0056caf7`, and `0x0056cfa9` sample the primary cubic basis over four vec2, vec3, and vec4
|
||
control points; `0x0056c972`, `0x0056cbcf`, and `0x0056d0a4` do the same for the alternate
|
||
cubic-basis family; and `0x0056ca50`, `0x0056cccf`, and `0x0056d1c6` are the lower-dimensional
|
||
affine blend helpers computing `p0 + s*(p1-p0) + t*(p2-p0)` for vec2, vec3, and vec4. So the
|
||
support-family boundary is tighter now: the older x87 seam is not another anonymous math island,
|
||
it is the dispatch-layer predecessor of the later `0x00582320..0x005827c0` and
|
||
`0x005897a2..0x0058a6c5` interpolation families. The same seam also owns the older scalar
|
||
matrix-transform siblings: `0x0056ce53 -> 0x0056f496` is the x87 forward projective apply owner
|
||
matching later `0x00589bb7`, `0x0056ce64 -> 0x0056f623` is the inverse-side x87 projective
|
||
sibling matching later `0x00589d3f/0x00589f67`, and that inverse-side owner now has its own
|
||
broader x87 inverse seam too: `0x0056d8d9 -> 0x0056d8df` is the second x87 4x4 inverse variant
|
||
with optional determinant outparam, matching the later inverse helpers `0x00581db0`,
|
||
`0x00588bd0`, and `0x005892aa`. The same strip still owns the earlier transform helpers too:
|
||
`0x0056cd2f -> 0x0056cd42` is the x87 vec3-basis-plus-translation to vec4 helper matching later
|
||
`0x00581830`, `0x0056cde0 -> 0x0056cded` is the translation-free vec3 basis helper matching
|
||
`0x00581770`, `0x0056f0d7 -> 0x0056f0e4` is the x87 full-vec4 basis helper matching later
|
||
packed helper `0x00583320`, `0x0056ce75 -> 0x0056ce82` is the x87 4D cross-product seam
|
||
matching later `0x005821d0`, `0x0056d2f6` is the scalar x87 4x4 determinant helper matching later
|
||
`0x005828e0`, `0x0056d23d -> 0x0056d24a` is the first x87 4x4 multiply predecessor of the later
|
||
packed or MMX multiply families, and `0x0056d689 -> 0x0056d696` is the broader alias-safe x87
|
||
4x4 multiply sibling paired with local copy helper `0x0056d61c`. The local constructor side is
|
||
tighter now too: `0x0056dc6c -> 0x0056dca0` is the x87 4x4 scale-matrix seam matching later
|
||
`0x00585e7c`, `0x0056dd2a` is the x87 translation-matrix constructor reused by the
|
||
`0x00570e8e/0x00570f0a` composition owners, `0x0056dd8c -> 0x0056ddae` is the x87 single-angle
|
||
`X`-axis rotation-matrix seam, `0x0056de28 -> 0x0056de4a` is the matching `Y`-axis seam, and
|
||
`0x0056dee1` is the local `Z`-axis constructor in the same strip. The quaternion side is bounded now too: `0x0056e8c3 -> 0x0056e8d6` is the x87
|
||
quaternion-product seam matching later `0x00582d10`, `0x0056e96c -> 0x0056e97f` is the x87
|
||
vec4 normalize-or-zero seam matching later `0x00584379`, and `0x0056ea38 -> 0x0056ea4b` is the
|
||
x87 quaternion-inverse seam matching later `0x00582e40/0x00584c41`. The earlier quaternion
|
||
construction side is explicit now too: `0x0056e7b6 -> 0x0056e7ea` is the x87
|
||
three-Euler-angle-to-quaternion seam matching later `0x00582fd0/0x005848ba`,
|
||
`0x0056e092 -> 0x0056e098` is the x87 quaternion-to-4x4 rotation-matrix seam matching later
|
||
`0x00582c30/0x00584010`, and `0x0056f882` is the direct x87 Euler-to-matrix owner that composes
|
||
those two helpers. The nearby conversion bodies are bounded now too: `0x0056eb05`
|
||
converts one quaternion into scaled-axis form, while `0x0056eb89` converts scaled-axis back into
|
||
a quaternion and matches the later MMX helper `0x00584d4c`. The curve side is explicit now too:
|
||
`0x0056ec24 -> 0x0056ec4e` is the x87 quaternion-slerp seam matching later `0x005849eb`,
|
||
`0x0056ed5b` is the x87 quadratic nested-slerp helper matching later `0x00584baf`, and
|
||
`0x0056edc3 -> 0x0056edf2` is the two-parameter nested-slerp seam matching later
|
||
`0x00584b22`, and `0x0056fd08` is the broader four-quaternion owner that flips neighboring
|
||
inputs into one hemisphere, converts the two relative quaternions around `q1` and `q2` into
|
||
scaled-axis form, averages them with fixed scalar `-0.25f`, converts that average back into a
|
||
quaternion, and produces the two inner quaternion spline-control outputs. The adjacent plane
|
||
builders are bounded now too: `0x0056efe3 -> 0x0056ef41` is the x87 plane-versus-segment
|
||
intersection seam matching later `0x00582820`, `0x0056eff0` copies one caller normal vec3 into
|
||
plane output and derives the signed plane constant from one caller point vec3, and
|
||
`0x0056f028 -> 0x0056f035` is the x87 three-point plane seam matching later `0x005829b0`. The
|
||
older plane-matrix seam is explicit now too: `0x0056ee8a -> 0x0056ee90` is the shared x87 vec4
|
||
normalize-or-zero seam used to normalize caller plane vec4s,
|
||
`0x0056fb6f` is the x87 plane-driven projective-matrix helper matching later
|
||
`0x00582aa0/0x00583e80/0x00585b9b`, and `0x0056fc49` is the x87 plane-reflection matrix helper
|
||
matching later `0x00585c86`. The lower-dimensional transform side is explicit now too: `0x0056f183` and
|
||
`0x0056f337` are the x87 vec2 and vec3 normalize-or-zero helpers, `0x0056f7c9` is the adjacent
|
||
second x87 vec4 normalize-or-zero variant with the same near-unit fast path, `0x0056f210` is the
|
||
x87 2D-basis-plus-translation-to-vec4 helper matching later `0x00581690/0x0058a0b8`,
|
||
`0x0056f27b` is the x87 2D projective sibling matching `0x005816d0/0x0058a146`,
|
||
`0x0056f2fb` is the translation-free x87 2D basis helper matching `0x00581730/0x0058a10d`, and
|
||
the nearby scalar-trig seam is explicit now too: `0x005a2ee0` is the older x87 `exp` seam, and
|
||
its clean-state branch now resolves concretely into the SSE2 pair `0x005acaf0/0x005acb08`,
|
||
while `0x005a2f70` and `0x005a3040` are the sibling x87 `acos` and `tan` helpers that stay on
|
||
the local x87 bodies instead of using that SSE fast path. The same support strip also now has
|
||
the optimized power pair grounded: `0x005aad20/0x005aad39` are the x87-to-SSE bridge and SSE2
|
||
core beneath `0x005a1b60`. These seams sit on the same older status-report path rooted at
|
||
`0x005a76ee/0x005a77f7`, whose local helper strip is now explicit too:
|
||
`0x005a7650` is the x87 `2^x` rebuild helper used after `fyl2x`,
|
||
`0x005a7665` loads one masked-exception x87 control word while preserving rounding control,
|
||
`0x005a7695/0x005a76d8` are the paired load-or-classify helpers for scalar `f64` inputs,
|
||
`0x005a76ee` restores the saved control word on the clean exit, and
|
||
`0x005a76fb/0x005a77e0/0x005a77f7` are the shared precision-check and math-error report owners.
|
||
The older CRT report seam beneath them is grounded now too: `0x005acdb0` is the common
|
||
runtime-error or math-error message emitter by code, `0x005acf27` is the banner-pair wrapper
|
||
above it, and `0x005acf60` is the registered floating-point exception dispatcher that maps
|
||
Windows exception codes like `0xc000008e` and `0xc0000093` into the local runtime math codes
|
||
before falling back to `UnhandledExceptionFilter`. The adjacent startup-side helper `0x005ad0c4`
|
||
is the shared program-name-tail extractor from the raw command line.
|
||
The same older report family is tighter one layer deeper too: `0x005b08ba` is the common
|
||
matherr-style report formatter and dispatcher under `0x005a77f7/0x005a790a`, while `0x005b09b8`
|
||
is its default hook stub that simply returns zero before the path falls through to the default
|
||
runtime-message emitter.
|
||
The older `exp` fallback seam is explicit now too: `0x005a7480` and `0x005a74e7` are the unary
|
||
and binary x87 special-case dispatchers driven by `fxam` and the state table at `0x0062a4bc`,
|
||
`0x005a787e` and `0x005a7a51` are the unary fallback bodies that reach them from `st(0)` or one
|
||
stack `f64`, `0x005a790a` is the shared finalize-or-report owner, and `0x005a7a84` is the
|
||
stack-side `f64` loader or special promoter beneath that path. The SSE2 side now has its small
|
||
exception tails grounded too: `0x005acd7e` is the moderate-input roundtrip tail under
|
||
`0x005acb08`, while `0x005acd13` is the larger finite or non-finite ladder that returns the
|
||
fixed overflow or underflow constants, pass-through infinities, or the shared report path.
|
||
The next startup seam is tighter now too: `0x005ad1f4` is the shared argv parser and byte-count
|
||
helper that honors the CRT multibyte lead-byte table, `0x005ad360` is the two-pass argv owner
|
||
above it, `0x005ad402` is the multibyte environment-block materializer using the wide API when
|
||
available, and `0x005ad12d` is the filtered envp-table builder that skips leading-`=` entries.
|
||
The adjacent locale-conversion seam is explicit now too: `0x005b0b06/0x005b0bc6` are the core
|
||
and current-thread-locale wrappers for one multibyte-to-wide character conversion,
|
||
`0x005b0c1b/0x005b0c7b` are the matching wide-to-multibyte pair, and `0x005b0bf1` is the small
|
||
CRT file-handle text-mode flag probe that sits immediately beside them.
|
||
The neighboring older-CRT stream strip is tighter too: `0x005a16f4/0x005a1740` are the nolock
|
||
and lock-scoped close owners for FILE-like streams, `0x005b09bb` is the broader stream-table
|
||
cleanup sweep under CRT lock slot `1`, and `0x005b0a56/0x005b0a9a` are the pushback-buffer
|
||
allocator and single-byte pushback helper.
|
||
The next helper strip beside that is explicit now too: `0x005b0cb0` is the unsigned `u64`
|
||
divide-with-remainder helper, `0x005b0d45` is the tiny x87 round-to-integral shim,
|
||
`0x005b0d58` maps DBCS codepages to default LCIDs, and `0x005b0d87` resets the older CRT
|
||
multibyte-locale tables before the broader bootstrap owner takes over. That owner is grounded
|
||
now too: `0x005b0db0` rebuilds the active-codepage multibyte classification and case tables,
|
||
`0x005b0f42` is the refcounted current-thread locinfo getter under CRT lock slot `13`,
|
||
`0x005b0fb1` configures the global multibyte tables for one codepage, `0x005b1147` is the
|
||
sentinel-aware public codepage-set owner above that, and `0x005b1297` is the one-shot ANSI
|
||
codepage bootstrap wrapper. One older bootstrap layer is explicit now too: `0x005adfbe` builds
|
||
the active codepage character-type tables or installs the ASCII fallback through globals
|
||
`0x0062abd8`, `0x00dba760`, `0x00dba764`, and `0x0062acf0`, while `0x005aec88` is the shared
|
||
`GetStringTypeW/A` bridge beneath both that owner and `0x005b0db0`. The adjacent leaf
|
||
`0x005b16ef` directly queries the default ANSI
|
||
codepage for one LCID through `GetLocaleInfoA(0x1004)`.
|
||
The adjacent older locale-aware compare seam is explicit now too: `0x005a57cf` and
|
||
`0x005a5f26` are the shared current-locale casefolded `strcmp` and bounded-compare siblings,
|
||
`0x005a5838` is the per-byte or DBCS-pair casefold helper beneath both, and `0x005a5900` is
|
||
the one-byte current-locale wrapper used by the nearby numeric text and string-hash helpers.
|
||
When locinfo field `[+0x14]` is absent, the two compare owners fall back to plain ASCII
|
||
casefolded comparators `0x005b0040` and `0x005b0100`; otherwise they route folding through
|
||
`0x005ac579`, so this strip now reads as the older locale-aware compare family rather than
|
||
anonymous text glue under the locale selectors and shell name lookups. The same local text seam
|
||
now has the paired legacy numeric-text normalizers too: `0x005a5fa5` inserts the active decimal
|
||
separator before the exponent marker in place, `0x005a5fe1` trims trailing zeros and an optional
|
||
decimal separator before the exponent or terminating NUL, and `0x005a602c` is the adjacent fixed
|
||
threshold predicate installed into the same five-slot legacy math dispatch table rooted at
|
||
`0x0062a360`. The adjacent older decimal-conversion strip is bounded now too: `0x005b0485` and
|
||
`0x005b04c8` parse ASCII numeric text through `0x005b12b5` and convert the resulting decimal
|
||
record into two-dword or single-dword integer outputs through the fixed-table wrappers
|
||
`0x005b0459/0x005b046f`, while `0x005b050b` materializes rounded significand digits into ASCII,
|
||
`0x005b0582` normalizes one x87 extended value into the local compact float-record form, and
|
||
`0x005b063c` bridges that normalized record into the shared digit-builder path used by the
|
||
adjacent legacy numeric-format owners. That owner layer is explicit now too: `0x005a6046` is
|
||
the small parse-to-single-or-pair-integer dispatch entry, `0x005a614f` is the scientific
|
||
formatter over one x87 extended input, `0x005a625f` is the fixed-format sibling, `0x005a62c7`
|
||
is the general-format owner that chooses between them, and `0x005a6367` is the style-dispatch
|
||
wrapper over `e/E/f` and the remaining general-format lane.
|
||
The neighboring x87 control-word strip is explicit now too: `0x005b06b7` maps one raw x87
|
||
control word into the older CRT abstract control-mask space, `0x005b0749` rebuilds the raw x87
|
||
word from that abstract mask, `0x005b07d7` is the merge-and-apply owner over current state plus
|
||
caller `(value, mask)`, and `0x005b0809` remains the narrow wrapper that forces bit `0x80000`
|
||
clear before applying the update.
|
||
The next numeric seam is grounded structurally too: `0x005b12b5` is the shared ASCII floating
|
||
literal parser into the older 12-byte decimal record, `0x005b2045` accumulates the digit string
|
||
into that record, and `0x005b279c` scales it by a signed power-of-ten exponent.
|
||
`0x0056f3d7` is the x87 3D projective sibling matching `0x005818f0/0x00589960`.
|
||
`0x0055dd80` is the small direct release helper for subordinate layout-state field `[owner+0x2d]`,
|
||
and `0x0055e060` is the wider owner teardown that releases the surrounding handle bands and the
|
||
same subordinate layout-state object before the family falls back to the higher-level shell
|
||
teardown path. The geographic-label text side is tighter now too: beneath
|
||
`shell_emit_geographic_label_text_span` `0x0053a960`, the support strip `0x0053b090`,
|
||
`0x0053b390`, `0x0053b590`, and `0x0053b5c0` now reads as one banked fixed-record loader and
|
||
keyed lookup family with a small recent-query cache plus a string-hash helper. The static load
|
||
loop at `0x0053ce09` seeds those banks from the pointer table rooted at `0x00624e48`, while the
|
||
lookup core partitions rows by `key & 0x1f` into `32` per-bank buckets and keeps a `10`-entry
|
||
recent-query cache rooted at `[this+0x4290c]`. The adjacent stream and staging side is bounded
|
||
too: `0x0053b630/0x0053b690/0x0053b6f0/0x0053b7c0/0x0053b830` now read as the current-entry
|
||
ordinal resolver, current-stream close/open helpers, and the shared byte-read strip, while
|
||
`0x0053b850/0x0053b8d0/0x0053b920/0x0053b970` own the local `13`-byte staging-table growth,
|
||
type-`7` service passes, and bucket-chain reset. The next owner layer is tighter now too:
|
||
`0x0053b9e0` is the broader `Pack System Leak Count : %1` report-and-reset pass, releasing the
|
||
four owned report-slot roots at `[this+0x429b0..+0x429bc]` plus sibling global `0x00ccba50`,
|
||
formatting staging-row fields through `0x0051b700`, publishing them through callback slot
|
||
`0x005c8078`, then tearing the staging slab and all per-bank handles back down. The keyed query
|
||
side now extends cleanly beyond raw lookup: `0x0053bd40` seeks the selected-or-current payload
|
||
stream and returns the handle, `0x0053be10` resolves or lazily opens one keyed typed auxiliary
|
||
object including a descriptor rooted at `data\\Other\\AirplaneTypes.txt`, `0x0053c930` is the
|
||
composite-string lookup wrapper, and `0x0053c9c0` is the matching payload-length resolver. The
|
||
local row side is now first-class too: `0x0053bf60`, `0x0053c000`, and `0x0053c070` release,
|
||
drop references on, and acquire-or-create refcounted staging rows with typed payload roots at
|
||
`[row+0x09]`, while `0x0053c900` resets the adjacent stream-plus-recent-query-cache strip.
|
||
`0x0053ca20/0x0053ca90` now bound the current-selection push/pop frame stack at `[this+0x20428]`,
|
||
and `0x0053cb10` is the small two-`u32` plus optional heap-blob reader sitting directly on top
|
||
of the shared byte-read helper. The broader bootstrap owner is tighter too: `0x0053cb60` zeroes
|
||
the whole family, allocates the four owned report slots, walks the static root-pointer table
|
||
`0x00624e14..0x00624e48`, loads banks through `0x0053b090`, and then routes selected keys such
|
||
as `companyLogo`, `portrait`, and `trainSkin` back through the typed-object strip into those
|
||
report slots. The nearby wrappers `0x0053d0f0/0x0053d110` are just the string-keyed type-`1`
|
||
and type-`6` staging-row acquire helpers above `0x0053c070`. The adjacent `0x0053d130` is
|
||
tighter now too: it strips one caller path to the final basename, derives a second stem copy
|
||
through `0x0051d8a0`, gates on `support_query_path_is_openable_for_read` `0x0051e430`, and only
|
||
then refreshes one type-`7` staging row through `0x0053c710` before resetting owner dword
|
||
`[this+0x427b0] = -1`. Immediately after that, the local
|
||
utility strip `0x0053d1d0..0x0053d470` now resolves as one scored binary-heap plus scored-node
|
||
queue family: `0x0053d1d0/0x0053d240/0x0053d2e0/0x0053d300` are the heap reorder and top-score
|
||
helpers, while `0x0053d320/0x0053d390/0x0053d440/0x0053d470` are the queue acquire, pop-highest,
|
||
membership, and release-side helpers. The sibling heap-owner body now lands too:
|
||
`0x0053d4c0/0x0053d540/0x0053d5d0/0x0053d630` are the pooled scored-heap insert, pop-top,
|
||
release, and construct-with-capacity paths over the same score-at-`+0x04` node shape. The
|
||
adjacent extended owner is now bounded too: `0x0053d6f0/0x0053d740` are the release and
|
||
construct-with-capacity paths for the sibling scored-heap owner that carries one extra sentinel
|
||
header at `[this+0x10]` plus best-score lane `[this+0x14]`, and current callers are the hotkey
|
||
report iterator `0x0045f250` and the nearby shell/runtime owner around `0x00522c67`. The next
|
||
support strip is tighter too: `0x0053d810/0x0053d870` are the CRC32-like NUL-string and fixed
|
||
byte-span hash helpers over table `0x00624e48`, while `0x0053d8a0/0x0053d960/0x0053d9e0/
|
||
0x0053daa0/0x0053dae0/0x0053db20/0x0053dbf0` now resolve as one intrusive `u32 -> ptr`
|
||
hash-table family with optional pooled `0x10`-byte nodes: release, insert, remove-and-return,
|
||
contains, lookup, callback iteration, and construct-with-bucket-count-and-node-capacity.
|
||
That family is already grounded on real world owners too, not just support-side data-structure
|
||
shape: connected-component and local bucket maps under `0x00416170/0x00419110`, selected owner
|
||
hashes under `0x00531ef0`, and the shell-side cleanup owner around `0x00522e7e` all use the same
|
||
pooled hash helpers. Beneath both the scored heaps and that hash family, `0x0053dcb0/
|
||
0x0053dcf0` are now bounded as the shared fixed-stride pool-descriptor release and reset helpers,
|
||
with freelist seeding over caller stride and count rather than one owner-family-specific allocator.
|
||
The next typed payload branch in the same banked-record family is tighter now too: row type `6`
|
||
is no longer just “some constructor under `0x0053c070`”. `0x0053ee70/0x0053e370` now read as the
|
||
construct wrapper and full constructor for one shell image-marker payload that parses a grounded
|
||
keyword set from the banked record text (`Image`, `ImageWH`, `ImageWHForceScale`,
|
||
`ImageWHWithRef`, `ImageScaled`, `ImageWHScaled`, `MaxPercentOfInterfaceVRAM`,
|
||
`MaxPercentOfInterfaceVRAMToUse`, `Scaleable`, `TGATargetScreenHeight`,
|
||
`TGATargetScreenWidth`, `TGAHeight`, `TGAWidth`, `TGAName`,
|
||
`HorizontalScaleModifier`, `VerticalScaleModifier`), registers one shell helper token through
|
||
`[0x006d401c+0xc69]`, and then hands off to `0x0053de60`. That heavier sibling is now bounded as
|
||
the payload's screen-metrics and VRAM-policy variant-table refresh owner: it derives current
|
||
screen-space scale from shell display state, resolves one selected TGA or DDS resource through
|
||
`0x0053c1c0`, and rebuilds the live variant array `[this+0x24]` through `0x005520a0` for later
|
||
consumers such as `shell_queue_world_anchor_marker` `0x00552560`. The rebuild and release side
|
||
is explicit too: `0x0053e2b0` releases current variants and the loaded image handle before
|
||
tail-jumping back into `0x0053de60`, while `0x0053e2e0/0x0053ee60` are the real destructor and
|
||
release thunk for the same type-`6` payload family.
|
||
The nearby overlay builders are tighter now too. `0x00478200` is no longer just a generic
|
||
single-marker wrapper: it validates owner id `[this+0x11b]` against collection `0x0062bae0`,
|
||
resolves that live city-database-style owner, samples normalized XY through `0x00455800` and
|
||
`0x00455810`, derives one localized label through `0x0053de00([this+0xaf],2)`, measures
|
||
projected half-height through `0x00477a10`, and then queues the finished marker through
|
||
`0x005521a0/0x00552160/0x00552560`. The broader sibling `0x00478330` now reads as the real
|
||
active-mode overlay-list owner: it derives the current world-space view box from
|
||
`[this+0xc3/+0xc7/+0xcb/+0xcf]` plus live world dims, runs six category passes `0..5`, pulls one
|
||
active-mode collection through `0x005130f0 -> 0x004b2b70` or `0x0050f600`, walks live placed
|
||
structures in `0x006cec20` through `0x0047fd50`, `0x0047df30`, and `0x0047df50`, and emits one
|
||
repeated label-marked overlay stream through `0x00477a10`, `0x004779c0`, and
|
||
`0x00552560`. After those category passes it also walks `0x006cfcbc` and can add one final
|
||
focused-region marker from `[this+0x113]` through `0x0048a170` with label id `0x3c`. The local
|
||
overlay-state helper strip under those builders is tighter now too. `0x00477af0` is the actual
|
||
default reset for the state band `[this+0xa3..+0x11f]`, seeding minimum span floor
|
||
`[this+0x11f]`, default cell bounds `[this+0xbb/+0xbf/+0xcb/+0xcf]`, scale lanes
|
||
`[this+0xd3/+0xd7/+0xdb]`, and normalized rect `[this+0xef/+0xf3/+0xf7/+0xfb]`. `0x00477a70`
|
||
is the paired scaled-max-span helper over the rebuilt cell bounds, while `0x00478dc0` and
|
||
`0x00479510` are now bounded as the two heavier owner passes above that strip: the first rebuilds
|
||
world-cell bounds and normalized rect from mode flags, raster bit `0x02`, and optional
|
||
placed-structure scans, while the second clamps and recenters those bounds and then refreshes the
|
||
normalized rect again after drag- or zoom-side updates. One input-side owner is bounded now too:
|
||
`0x00477c10` maps one screen-space point into a world-cell pair under the current overlay-state
|
||
bounds, and the larger sibling `0x00478cb0` is the drag-side loop above it that repeatedly
|
||
applies those deltas through `world_view_apply_screen_delta_to_focus_position` `0x0043d0c0`
|
||
before re-entering the same overlay-state rebuild or clamp family. The next query above that is
|
||
tighter now too: `0x00479b50` is the nearest-target resolver for this overlay family, first
|
||
searching placed structures in `0x006cec20` through `0x0047df30/0x0047df50` and `0x0051db80`,
|
||
then optionally falling back to regions in `0x006cfca8` through `0x0048a170` when the shell-side
|
||
metric flag bit `0x4` is set. The click-side owner above that is bounded now too: `0x00479d30`
|
||
first maps the cursor through `0x00477c10`, resolves the nearest target through `0x00479b50`,
|
||
then either publishes restriction notices `0x0c12/0x0c13`, forwards one compact selector-`0x384`
|
||
request into the Multiplayer preview owner at `0x006cd8d8`, or dispatches that same local target
|
||
through the active-mode handler pair `0x004b3160/0x004b2c10` before easing the shell scalar tail
|
||
through `0x0045ea20`. The broader raster owner above this branch is bounded now too:
|
||
`0x0047a120` first stages one visible overlay rect through `0x00534930/0x00534c50`, optionally
|
||
allocates the target RGBA buffer, and then rasterizes the visible map window through the world
|
||
classification helpers `0x00534e50`, `0x00534f00`, `0x00449bd0`, and `0x00448aa0`, mapping the
|
||
result through palette table `0x005f2c34` and finally marking city-database owners from
|
||
`0x0062bae0`. The small constructor strip under that raster owner is tighter now too:
|
||
`0x0047b070` and `0x0047b0d0` are the two concrete constructors for vtable `0x005ce840`, both
|
||
reusing `0x00477af0` for default state and then seeding the trailing template byte
|
||
`[this+0xa2]`. The release and service strip under the same vtable is tighter now too:
|
||
`0x0047b110` drops template handle `[this+0xaf]` and surface root `[this+0xab]` before tailing
|
||
into the base release; `0x0047b170` is the main service body that refreshes bounds through
|
||
`0x00479510`, draws the current overlay surface, and then queues either the repeated marker list
|
||
`0x00478330`, the single city-database marker `0x00478200`, or the fallback quad path
|
||
`0x00477d80`; and `0x0047b3d0` is the narrow wrapper that reruns `0x0047a120` into a temporary
|
||
raster target and commits the result back into live surface handle `[this+0xab]`. The next local
|
||
owner strip is tighter now too: `0x0047b470` ensures surface handle `[this+0xab]` by deriving
|
||
zoom-scaled requested dimensions from the current shell zoom table at `[0x006d4024+0x11421e]`,
|
||
growing them as powers of two under controller caps, allocating one `0xec`-byte surface owner
|
||
through `0x00543980`, and immediately rerasterizing through `0x0047b3d0`; `0x0047b5e0` is the
|
||
hover-update sibling that either tracks hovered classification id `[this+0x117]` under overlay
|
||
flag `0x00400000` or refreshes nearest target ids `[this+0x10f/+0x113]` through `0x00479b50`
|
||
before forwarding the live cursor band into `0x00558760`; and `0x0047b720` is now bounded as the
|
||
main message dispatcher for the same family, with current grounded cases for id `6`, refresh pair
|
||
`0xba/0xbb`, and scalar-update id `0xbc`, dispatching into the click owner `0x00479d30`, the
|
||
drag owner `0x00478cb0`, the ensure-surface path `0x0047b470`, the reraster path `0x0047b3d0`,
|
||
and the bounds rebuild owner `0x00478dc0`. The adjacent global marker strip is tighter now too:
|
||
`0x0047ba60` clears the ten-entry global pointer-marker slot table at `0x006ceba4`,
|
||
`0x0047bb90` is the matching release loop, and `0x0047ba80` rebuilds one indexed slot by
|
||
constructing a `0x26e`-byte specialization-root object through `0x0045b680`, seeding it from
|
||
literal roots `pointer`, `pointer2`, or `pointer3` through `0x0045b9b0`, publishing the caller
|
||
world anchor through `0x004556f0`, applying scalar `0.8f` through `0x00455720`, and clearing bit
|
||
`0x20` in the derived state byte. Current grounded callers are the clustered world-side branches
|
||
at `0x0051677b`, `0x00516797`, `0x005167df`, and `0x005167fe`, so this now reads as a real
|
||
shell-side global pointer-marker slot family rather than loose specialization constructors.
|
||
The shared `0xec`-byte surface-owner seam beneath those overlay and layout callers is tighter now
|
||
too. `0x00543080` is the per-owner row-budget refresh pass: unless constructor bytes
|
||
`[owner+0x93/+0x94]` stay live or selector token `[owner+0x07]` already matches the current
|
||
shell mode token, it revisits the eight row slots `[owner+0xa0..+0xbc]` through `0x00542fb0`,
|
||
drops rows whose import now fails, marks readiness bytes `[owner+0x98..+0x9f]` against the
|
||
caller-supplied byte-budget threshold, derives owner byte `[owner+0x06]` from the surviving
|
||
ready rows, and can still re-enter the non-type-`2` postprocess owner `0x00542550`.
|
||
`0x00543220` is the broader global service above that pass: it rate-limits itself through
|
||
`0x0051d890`, samples the live shell view matrix from `[0x006d4024+0x28]`, derives one dynamic
|
||
byte budget from summed camera-motion deltas cached in `0x00ccbb3c..0x00ccbb54`, retires stale
|
||
owners from the intrusive list `0x00ccbb2c`, and then revisits the surviving active owners
|
||
through `0x00543080` when the current budget crosses the local scaled row thresholds.
|
||
The publish side is tighter now too: `0x005435d0` sits beneath both `0x005438d0` and the
|
||
layout-slot binding strip at `0x00545520`, can lazily ensure selector handle `[owner+0x07]`,
|
||
then asks the caller-supplied presentation handle to materialize a bound target through vtable
|
||
slot `+0x50`, uploads the first ready row plus matching-dimension siblings as a mip-style chain
|
||
through `[bound_handle]+0x3c`, frees the uploaded row buffers `[row+0x22/+0x26/+0x2a/+0x2e]`,
|
||
stamps the current shell mode token back into `[owner+0x07]`, increments active-owner global
|
||
`0x00ccbb34`, and refreshes cached byte totals through `0x00540fc0`.
|
||
The lower cursor-capture strip beneath that input service is tighter now too. `0x00543ae0` and
|
||
`0x00543b20` are the begin/end pair for the shell cursor-helper object returned by `0x0051f0b0`:
|
||
the first sets active byte `[+0x08]`, dispatches vtable slot `+0x1c`, and snapshots the live
|
||
shell cursor XY from `0x006d4018+0xa94/+0xa98`, while the second clears that active byte,
|
||
dispatches slot `+0x20`, and restores one screen-space cursor position from the stored XY anchor
|
||
through the current shell zoom table and import `0x005c8264`. The query side is explicit too:
|
||
`0x00543ba0` returns the stored-or-live cursor triplet, `0x00543c10` returns the stored-or-live
|
||
XY pair, and `0x00543c50` is the heavier relative-delta service used by
|
||
`world_view_service_shell_input_pan_and_hover` `0x0043db00`. That heavier helper queries one
|
||
current view metric bundle from the helper object, converts the returned deltas into floats,
|
||
suppresses repeated zero-delta states through `0x00ccbb5c/0x00ccbb60`, accumulates the motion
|
||
into stored XY and triplet bands, clamps the XY anchors to `[0.0, 1.0]`, derives one local
|
||
edge-flag mask, and forwards the resulting state into `0x0054eb90` when live shell input is
|
||
present. The owned-object seam is explicit now too: `0x00543a10` is the constructor-side
|
||
initializer that seeds half-XY defaults and binds the two owned helper objects, while
|
||
`0x00543e60` is the paired release helper that first ends capture and then drops both owned
|
||
objects through their `+0x08` destructors. The tiny live-input gates beneath the same world-view
|
||
predicates are explicit now too: `0x00543e00/0x00543e20/0x00543e40` are the three direct tests
|
||
over shell input word `[0x006d4018+0xa8c]`, masking bits `0x400`, `0x2000`, and `0x800`
|
||
respectively for the primary and secondary pan-channel branches. The adjacent layout-state bridge
|
||
in the `0x52be..0x52c0` setup strip is bounded too: `0x00543e80` is the fixed node-slot-`+0x90`
|
||
publish helper for selector `3` with unit scalar `1.0f`, `0x00543ee0` is the fixed selector-`2`
|
||
sibling, and `0x00543ea0` is the optional RGB-plus-scalar helper that can reuse cached color
|
||
`[layout+0x25a3]` before publishing the same selector-`3` block into bound node
|
||
`[layout+0x25df]`.
|
||
That keeps the label side grounded as a real support-family database strip rather than a loose
|
||
collection of anonymous bootstrap helpers. If shell-state gate
|
||
`[0x006cec74+0x174]` is set it then posts id `320` `Setting Up Buildings...` for
|
||
`world_region_collection_run_building_population_pass` `0x00421c20`; if `[0x006cec74+0x178] > 0`
|
||
it then posts id `321` `Seeding Economy...` for `simulation_run_chunked_fast_forward_burst`
|
||
`0x00437b20`; only after those setup-side gates does the code post id `319`
|
||
`Setting up Players and Companies...`. That `319` lane is no longer just a shell-state placeholder: its
|
||
earlier hidden prepass is tighter now too: `0x00437737` is the scenario-side named
|
||
candidate-availability seeding pass over the live candidate pool `0x0062b268`, feeding the
|
||
override collection at `[state+0x66b2]` through `0x00434f20` before any visible banner is posted.
|
||
That grounded write path is narrower than the static file evidence, though: the startup reset
|
||
helper `world_runtime_reset_startup_dispatch_state_bands` `0x004336d0` explicitly clears
|
||
`[state+0x66b2]` before the dispatch path begins, and the current exported write-side callers
|
||
we can name after that reset are still just the live-pool preseed `0x00437737`, the sibling
|
||
startup lane `0x00436ad7`, and the editor-side `Industry (Overall)` toggle handler
|
||
`0x004cf430` through `0x00434f20`. So while the fixed `0x6a70..0x73c0` candidate-availability
|
||
block is now well grounded as bundled map/save source data, a direct bulk-import path from that
|
||
block into the live runtime collection `[state+0x66b2]` is still not grounded by the current
|
||
disassembly notes.
|
||
That candidate-side table now has a grounded fixed record layout too: each entry is a `0x22`-byte
|
||
blob with a zero-terminated candidate-name slot at `[entry+0x00..+0x1d]` and one trailing
|
||
availability dword at `[entry+0x1e]`, read through `0x00434ea0` and mirrored later into
|
||
`[candidate+0x7ac]`. The candidate support strip around that latch is tighter now too:
|
||
`0x00412c10` walks the live candidate pool, forces `[candidate+0x7ac] = 1` whenever availability
|
||
bytes `[candidate+0xba/+0xbb]` are already set or subtype `[candidate+0x32]` is not `2`, and
|
||
only for the remaining subtype-`2` cases does it consult `0x00434ea0` by candidate stem before
|
||
tailing into `structure_candidate_collection_refresh_cargo_economy_filter_flags` `0x0041eac0`.
|
||
The neighboring collection helpers now read cleanly too: `0x00412bd0` is the collection-wide
|
||
`0x00411ee0` cargo-summary rebuild sweep over already-materialized `0xbc` descriptor strips, and
|
||
`0x00412ba0` is the remove-and-release sibling that clears one candidate's dependent runtime
|
||
descriptor and cargo-membership tables through `0x00411cb0` before erasing that id from the pool.
|
||
The same pool now has an explicit destroy-side wrapper too: `0x00412a90` resets the collection
|
||
vtable to `0x005c93cc`, releases the indexed live-entry storage through `0x00518600`, and tails
|
||
into the common indexed-collection cleanup `0x00518bd0`. The global teardown branch at
|
||
`0x00434480` uses that wrapper immediately before freeing the live candidate-pool object at
|
||
`0x0062b268`, so the pool lifecycle is now bounded on both the rebuild and destroy sides instead
|
||
of only on the rebuild path.
|
||
The auxiliary-owner side is tighter now too: `0x00413dd0` resolves one auxiliary entry's owner
|
||
candidate through dword `[entry+0x173]` and reuses the same current-year gate `0x00412510`,
|
||
while `0x00413d80` only succeeds for subtype-`1` owners and copies candidate words
|
||
`[candidate+0xcb]` and `[candidate+0xcd]` into the projected-footprint helper family.
|
||
The same scenario state keeps a locomotive-side sibling collection at
|
||
`[state+0x66b6]`, read through `0x00435030` and updated through `0x004350b0`, which is now the
|
||
shared named locomotive-availability lane beneath the `Locomotives` editor page and the
|
||
startup-side locomotive seeding branches. That locomotive-side table is the same pattern at a
|
||
larger width: each entry is a `0x41`-byte blob with a zero-terminated locomotive-name slot at
|
||
`[entry+0x00..+0x3c]` and one trailing availability dword at `[entry+0x3d]`, later mirrored into
|
||
`[loco+0x7b]`. Both override dwords now read most safely as simple availability bits rather than
|
||
wider mode enums. That `319` lane is no longer just a shell-state placeholder: its
|
||
primary grounded work is still the chairman-profile pair
|
||
`world_seed_default_chairman_profile_slots` `0x004377a0` plus
|
||
`world_build_chairman_profile_slot_records` `0x00437220`, which seed the 16 selector bytes at
|
||
`[0x006cec7c+0x87]`, materialize the per-slot chairman records from the scenario selectors,
|
||
campaign override flag `[0x006cec7c+0xc5]`, and the static persona table at `0x005f2d28`, and then
|
||
publish the selected chairman-profile and linked company summary pair through `[state+0x25]` and
|
||
`[state+0x21]`. The local slot-record shape is tighter too because the shell editor panel around
|
||
`0x004cc2d0` now surfaces it directly: `[slot+0x00]` is the staged chairman profile id,
|
||
`[slot+0x01]` is the Optional-versus-Mandatory byte with nonzero=`Optional` and zero=`Mandatory`,
|
||
`[slot+0x02]` combines with the separate per-slot gate at `[world+0x0bc3+slot*9]` to surface
|
||
`Human`, `Computer`, and `Human or Computer`, `[slot+0x03]` is the special occupied-seat byte, and
|
||
`[slot+0x04]` is the numeric tuning field. Both the selector seeder and the record materializer
|
||
treat either `[slot+0x02]` or `[slot+0x03]` as enough to keep a slot live, but current grounded
|
||
writes only seed `[slot+0x03]` on slot zero and later move it solely by whole-record compaction.
|
||
That makes `[slot+0x03]` the strongest current anchor for the distinguished primary-human-seat
|
||
flag rather than a generic role byte. The summary fields are tighter too: current direct accessors
|
||
now show `[state+0x25]` as the selected chairman profile id in `0x006ceb9c`, while `[state+0x21]`
|
||
is the linked owning company id copied from `[profile+0x1dd]` through
|
||
`scenario_state_set_selected_chairman_profile` `0x00434890`. The raw id strip under those record
|
||
helpers is tighter now too: `0x004337a0` reads `[state+0x21]` directly as the selected company
|
||
id, `0x004337b0` reads `[state+0x25]` directly as the selected chairman profile id, and
|
||
`0x00433790` is the paired raw selected-company setter that the company and chairman reassignment
|
||
flows use when the visible ownership summary changes without re-entering the full profile setter.
|
||
The underlying profile constructor family is grounded now too. `0x00476140` is the broad
|
||
named-profile constructor beneath both chairman seeding passes: it stores the caller id at
|
||
`[profile+0x00]`, marks the record live through `[profile+0x04] = 1`, seeds byte and guard lanes
|
||
across `[profile+0x291..+0x295]` and `[profile+0x1e1]`, zeroes the large per-company and tail
|
||
bands `[profile+0x2ab..]` and `[profile+0xc66..]`, copies the caller byte into `[profile+0x15c]`,
|
||
seeds `[profile+0x158]` to `7.763f`, formats localized fallback name `0x0b87` when the caller
|
||
name is empty, copies the caller biography into `[profile+0x27]`, and picks one static persona
|
||
row through `0x004760f0`. That helper is now bounded as the wrapped-unused-row allocator over the
|
||
static persona table at `0x005f2d28`, marking one zero flag byte at stride `0x27` after a
|
||
modulo-`0x29` search. The neighboring raw company-slot strip is explicit too: `0x004760a0`
|
||
resolves indexed dword slot `[profile + company_index*4 + 0x2ab]` when the caller's generation
|
||
stamp differs from `[profile+0xc43]`, and `0x004760c6` is the paired store-side helper for the
|
||
same slot plus optional stamp write. The adjacent profile-metric strip used by the player-list
|
||
page is tighter now too: `0x00476320` sums the per-company holding band `[profile+0x15d..]`
|
||
against either cached company scalar `0x00423eb0` or the broader support-adjusted company scalar
|
||
`0x00424fd0`, while `0x004763b0` folds those same per-company contributions through one extra
|
||
thresholded transform before accumulating them. The active-profile collection helpers are direct
|
||
now too: `0x004778c0` returns the live record id of the Nth active chairman profile, and
|
||
`0x00477920` counts how many active chairman profiles precede one caller-selected live record id.
|
||
The neighboring transaction and cached-metric strip is tighter now too. `0x00476780` is the
|
||
direct-total-plus-cash query (`0x00476320 + [profile+0x154]`), while `0x00476c20` is the
|
||
threshold-adjusted-total-plus-cash sibling (`0x004763b0 + [profile+0x154]`). `0x004767a0`
|
||
selects between raw cash `[profile+0x154]`, the direct holding total, or their sum, and
|
||
`0x00476810` caches selectors `0` and `1` into the local qword band rooted at `[profile+0x1e9]`.
|
||
The trade-side helpers now split cleanly too: `0x00476460` is the sell-side mutator that reduces
|
||
one company holding slot `[profile + company_id*4 + 0x15d]`, converts the resulting proceeds
|
||
through `0x00424fd0(-units,1)`, and adds the scaled result back into `[profile+0x154]`; the buy
|
||
companion is `0x00477110`, which first reuses the feasibility gate `0x00476ff0`, then increases
|
||
that same holding slot and subtracts the scaled purchase cost from `[profile+0x154]`. Between
|
||
them, `0x00476e50` computes the rounded `1000`-sized trade block by mode, and `0x00476ff0`
|
||
performs the actual buy-affordability check against current cash plus an optional direct-holdings
|
||
fallback; the reduction-side sibling `0x00476c40` uses the same threshold-adjusted-total-plus-cash
|
||
lane from `0x00476c20` as its optional fallback when the direct holding slot is too small. One
|
||
broader periodic scalar is grounded now too: `0x00476560` walks raw issue `0x39`
|
||
through `scenario_state_sum_issue_opinion_terms_raw` plus the scenario baseline at `0x00433740`,
|
||
clamps the resulting factor against several `[profile+0x154]` thresholds, and then adds the
|
||
final scaled delta back into `[profile+0x154]`; current grounded caller `0x0040a760` applies
|
||
that adjustment across every active chairman profile before the later trigger-kind-`2` pass.
|
||
The adjacent start-new-company gate is explicit now too: `0x00476d10` first rejects through
|
||
localized id `2952` `You're not able to start a new company.` when scenario gate `0x00476a60`
|
||
is active; otherwise it treats `0x004763b0(1) + [profile+0x154]` as the relevant purchasing-power
|
||
lane, succeeds only when that total reaches threshold `0x005c8830`, and on failure formats the
|
||
richer localized warning `271` `You don't have enough money to start a new company!...` using the
|
||
selected chairman profile's current purchasing-power figure from `0x004348c0`.
|
||
The adjacent persona-row lookup strip is partly explicit now too: `0x00476bb0` returns the
|
||
matched static persona row index for current profile stem `[profile+0xc47]`, while `0x00476b30`
|
||
returns the same matched row's `+0x20` asset-stem pointer or falls back to `[profile+0x20]`,
|
||
and `0x00476ab0` is the structural `+0x40` string-pointer sibling for that same row family.
|
||
The adjacent chairman refresh owner is tighter now too: `0x00433850` uses the guard pair
|
||
`0x0062be20/0x0062be1c` to walk the active-chairman collection through
|
||
`0x00477820/0x00477860 -> 0x004771e0` until no nested mutation asks for another pass.
|
||
The editor-side scenario setup surface beside that chairman panel is clearer now too.
|
||
`map_editor_scenario_metadata_panel_refresh_controls` `0x004ca790` republishes the scenario
|
||
description from `[0x006cec78+0x672e]`, the start-year trio `[+0x66ca]`, `[+0x66d2]`, and
|
||
`[+0x66ce]`, the direct campaign-designated bit `[+0x66de]` through control `0x5b6e`, and the
|
||
inverse of the paired metadata byte `[+0x66f3]` through control `0x5b74`. The resource-side
|
||
anchor is now explicit too: `editorDetail.win` carries localized ids `3160/3161` `Campaign
|
||
Scenario` and `If checked, this map will be reserved as a campaign scenario.` inside the control
|
||
record rooted at `0x5b6e`, so `[+0x66de]` is now the grounded campaign-scenario flag rather than
|
||
an anonymous metadata boolean. `map_editor_scenario_metadata_panel_refresh_briefing_mode`
|
||
`0x004ca670` now bounds the single-player versus multiplayer briefing switch by flipping selector
|
||
`0x621f50`, publishing localized headings `1491` and `3586`, and refreshing the two briefing texts
|
||
from `[state+0x4f30]` and `[+0x5ae9]`. The companion dispatcher
|
||
`map_editor_scenario_metadata_panel_handle_message` `0x004cb4a0` makes the year semantics tighter
|
||
too: it commits the description and both briefing texts from edit-control payloads, toggles the
|
||
same two booleans, and clamps the three year fields to `1829..2100` while maintaining `minimum <=
|
||
default <= maximum`, which now lines up directly with the editor strings `Description:` `Minimum
|
||
Start Year:` `Default Start Year:` `Maximum Start Year:` `Briefing` and `Multi-Player Briefing`.
|
||
The neighboring special-conditions page is clearer as well:
|
||
`map_editor_scenario_special_conditions_panel_construct` `0x004cb2b0` now grounds the live owner
|
||
for the `Setup_Options_Buttons.imb` list rooted at `0xa7fa`, walks the 49-entry static rule table
|
||
at `0x005f3ab0`, counts enabled flags from `[0x006cec78+0x4a7f]`, and publishes the `Special
|
||
Conditions In Effect` summary from localized id `1053`. The same page now has a bounded live
|
||
dispatcher too: `map_editor_scenario_special_conditions_panel_handle_message` `0x004cb8e0` handles
|
||
both bulk selection controls and direct row-state changes, commits them back into
|
||
`[0x006cec78+0x4a7f]`, and then re-enters the panel constructor to refresh the summary. That table
|
||
is no longer just a raw id run; it now clearly includes the finance and construction restrictions
|
||
`2535..2563`, plus later editor toggles such as `Use Bio-Accelerator Cars`, `Disable Cargo
|
||
Economy`, `Disable Train Crashes`, `Disable Train Crashes AND Breakdowns`, and `AI Ignore
|
||
Territories At Startup`. The neighboring available-chairman page is tighter too.
|
||
`map_editor_available_chairman_panel_construct` `0x004ca540` now bounds the shell-side owner for
|
||
the 40-entry persona-availability surface under `0x5aa0..0x5b03`: it walks the same persona table
|
||
family at `0x005f2d28`, publishes one localized chairman-name row per profile, counts enabled
|
||
availability bytes from `[0x006cec78+0x6987..]`, and emits the summary `%1 out of %2 are
|
||
selected.` from localized id `1035`. The live state owner beside it is now grounded as well:
|
||
`map_editor_available_chairman_panel_handle_message` `0x004cb6f0` handles three bulk-selection
|
||
controls `0x5aa1..0x5aa3` by rewriting that same availability-byte array from preset bytes
|
||
embedded in the persona table, and it also commits direct per-row toggle changes from
|
||
`0x5aaa..0x5b03` back into `[state+0x6987..]` before refreshing the page. So the editor lane now
|
||
has three distinct scenario-setup slices rather than one chairman-only blob: chairman slots,
|
||
scenario metadata and briefings, plus both a rule-toggle matrix and an available-chairman pool.
|
||
There is now one adjacent company-side lane too: current neighboring setup flow conditionally
|
||
enters `world_conditionally_seed_named_starting_railroad_companies` `0x0047d440` when the
|
||
Multiplayer preview owner `0x006cd8d8` is absent and either sandbox flag `[0x006cec7c+0x82]` is
|
||
set or shell-state flag `[0x006cec74+0x14c]` is set while editor-map mode `[0x006cec74+0x68]` is
|
||
clear. That helper no longer looks like a generic company refresh. It seeds exactly three fixed
|
||
named railroad-company records from `RT3.lng` ids `575..577`: `Missouri Pacific`, `New York
|
||
Central`, and `Grand Trunk Railroad`. The first seeded company is tied back to the selected
|
||
chairman-profile summary and becomes the selected company id. The second railroad is tighter now
|
||
too: it only receives a chairman link when `profile_collection_count_active_chairman_records`
|
||
finds at least two live chairman records, and the helper then binds the zero-based second active
|
||
chairman through `profile_collection_get_nth_active_chairman_record` with ordinal `1`. The third
|
||
railroad currently gets no matching chairman-link branch in the grounded setup flow and therefore
|
||
remains an unchaired named company in the live roster. The shell UI above that setup lane is now
|
||
tighter as well: `shell_company_list_window_construct` `0x004c7200` builds a live company-list
|
||
window over the company collection at `0x0062be10`, `shell_company_list_window_refresh_rows`
|
||
`0x004c6c30` formats the active companies with localized strings `267..270`, and only then
|
||
conditionally appends one synthetic row id `0x7fff` through
|
||
`shell_company_list_format_company_or_start_row` `0x004c6b40` so `<<Start New Company>>` appears
|
||
as a separate affordance rather than as part of the seeded trio itself. Current shell paging
|
||
around that same roster is tighter too because the live company collection now has a grounded
|
||
active-only ordinal helper family: `company_collection_count_active_companies` `0x00429a50`,
|
||
`company_collection_count_active_companies_before_company_id` `0x004299f0`, and
|
||
`company_collection_get_nth_active_company_id` `0x00429990`. Those helpers now anchor the “current
|
||
company among active companies” math used by shell-side detail and picker flows rather than
|
||
leaving it as anonymous collection glue. `shell_company_list_window_handle_message` `0x004c6f30`
|
||
then routes the synthetic row into `start_new_company_dialog_open` `0x0047d080`, whose commit path
|
||
now grounds through `start_new_company_dialog_commit_create_company` `0x0047d120`. That lower
|
||
helper unlinks any current chairman-owned company, allocates a fresh company id from the live
|
||
collection at `0x0062be10`, initializes it through `0x00428420`, and only then publishes the new
|
||
selected company. The neighboring compact request helper
|
||
`start_new_company_request_create_company` `0x0047d320` does the same fresh-company path from a
|
||
request block and is already reached from the startup-company branch at `0x00470e48`. The dialog
|
||
side is tighter now too: `0x0047c070` and `0x0047bea0` rebuild the two funding-band globals from
|
||
the selected chairman profile through `0x00476c20` and `0x00476950`, publish their range cards
|
||
into controls `0x714f` and `0x7150`, `0x0047c190` republishes the current pair `0x006cec14` and
|
||
`0x006cec10` into controls `0x7149` and `0x714a`, `0x0047c220` snaps those two current funding
|
||
lanes back onto the active band steps, and `0x0047c360` is the small child-control callback gate
|
||
over that same funding family. The immediate pre-open helper `0x0047d020` is now bounded too: it
|
||
seeds the staged dialog name buffer and then runs the same clustered funding-band rebuild sequence
|
||
before `start_new_company_dialog_open` continues into the constructor/callback modal path. The
|
||
constructor and message side are bounded enough now too: `0x0047c590` constructs the modal dialog
|
||
controls for `0x714f/0x7150/0x7149/0x714a/0x714b/0x714c/0x714d/0x714e`, installs callback
|
||
`0x0047c360` on the funding-band pair, and publishes the live dialog root at `0x006cec18`,
|
||
while `0x0047c3a0` is the main dialog message owner over shell messages `0xca/0xcb`, the staged
|
||
name field `0x714b`, the two funding-step controls `0x714c/0x714d`, the companion summary lane
|
||
`0x714e`, and the modal notice branch rooted at `0x03f2/0x03f4`. The
|
||
immediate sibling shell branch below that roster is still station-oriented: current grounded
|
||
resource names and handlers put one branch on `shell_station_detail_window_construct`
|
||
`0x005068c0`, another on `shell_station_list_window_construct` `0x005074c0`, and the subordinate
|
||
selector lane on `shell_station_pick_window_open_modal_and_return_selected_station_id`
|
||
`0x005078c0` above `shell_station_pick_window_construct` `0x00507620`. But the broader
|
||
company-detail ownership question is no longer open. There is now a separately grounded
|
||
`CompanyDetail.win` family rooted at `shell_company_detail_window_construct` `0x004c5540`, with
|
||
`shell_company_detail_window_handle_message` `0x004c56a0` as its main dispatcher and
|
||
`shell_company_detail_window_refresh_controls` `0x004c2ca0` as the shared repopulation pass for
|
||
the selected-company presentation and tabbed control bands around `0x9476..0x9490`. A grounded
|
||
direct shell-command strip now sits cleanly above those two company panels too: `0x00433a40` is
|
||
the shared availability gate for both the company-list and selected-company-detail lanes,
|
||
rejecting only when scenario toggle `[0x006cec78+0x4aef]` is set. `0x004405a0` uses that gate to
|
||
open detail-panel mode `7` as the direct company-list path, while `0x004405d0` first recovers
|
||
the selected-company id through `0x004337a0`, optionally offers `Start New Company` through
|
||
`0x0047d080` after warning `368` when no company is selected, and only then opens detail-panel
|
||
mode `8` for the selected-company `CompanyDetail.win` lane. A grounded
|
||
shell detail-manager caller reaches that constructor at `0x004dde24`, the first finance-action
|
||
layer beneath it is now bounded through `shell_company_detail_issue_bond_offer_flow` `0x004c3890`,
|
||
`shell_company_detail_issue_stock_offer_flow` `0x004c3f30`,
|
||
`shell_company_detail_buyback_stock_flow` `0x004c46d0`, and
|
||
`shell_company_detail_change_dividend_rate_flow` `0x004c5360`, and the first non-finance layer is
|
||
now bounded too through `shell_company_detail_resign_chairmanship_flow` `0x004c5a0e`,
|
||
`shell_company_detail_bankruptcy_flow` `0x004c5b99`, the territory-access family rooted at
|
||
`shell_company_detail_refresh_selected_territory_access_summary` `0x004c1b60` plus
|
||
`shell_company_detail_buy_territory_access_rights_flow` `0x004c5fc9`, backed by
|
||
`company_clear_selected_chairman_if_current_profile` `0x00428a10`,
|
||
`company_declare_bankruptcy_and_halve_bond_debt` `0x00425a90`,
|
||
`company_has_territory_access_rights` `0x00424010`, `company_set_territory_access_rights_byte`
|
||
`0x00424030`, and `company_can_purchase_territory_access_rights` `0x00426be0`, plus the two
|
||
control-transfer lanes. `shell_company_detail_attempt_chairmanship_takeover_flow` `0x0050ccc0` now
|
||
grounds the special chairman's election path: it checks the caller's current stock ownership in
|
||
the target company, rejects insufficient holdings through localized id `623`, rejects recent
|
||
failed attempts through id `624`, and then opens the confirmation under id `625` before seeding
|
||
the local takeover-election state or packaging the same request through the multiplayer shell
|
||
transport. The follow-on resolver `shell_resolve_chairmanship_takeover_vote_and_commit_outcome`
|
||
`0x0050c940` now closes the single-player election loop too: it walks the active chairman profile
|
||
collection, computes weighted votes for and against the takeover, compares the affirmative total
|
||
against half the target-company value, presents the result through
|
||
`shell_present_chairmanship_takeover_vote_outcome_dialog` `0x0050c500` in single-player or
|
||
localized id `3082` in multiplayer, and then either transfers chairmanship through `0x00428a30` or
|
||
stamps the current year into `[company+0x289]` as the grounded takeover-cooldown field.
|
||
`shell_company_detail_attempt_merger_flow` `0x004ec640` now grounds the merger side too: it
|
||
rejects empty worlds through id `727`, rejects recent failed attempts through id `728`, checks the
|
||
proposed premium against company cash through localized id `3889`, and then commits into the
|
||
resolver family. That merger resolver is now bounded too:
|
||
`shell_resolve_merger_vote_and_commit_outcome` `0x004ebd10` walks the active chairman profile
|
||
collection, computes weighted votes for and against the proposed merger, compares the affirmative
|
||
total against half the target-company value, presents the result through
|
||
`shell_present_merger_vote_outcome_dialog` `0x004eb890` in single-player or localized id `3059` in
|
||
multiplayer, and then either commits the merger through `0x00427e20` or stamps the current year
|
||
into `[company+0x15f]` as the grounded merger-cooldown field. The vote-bias side beneath that
|
||
resolver is tighter now too: `scenario_state_compute_issue_opinion_multiplier` `0x00436590` is no
|
||
longer just an abstract issue table lookup because its merger callsite uses issue id `0x3a`, which
|
||
lines up directly with localized id `726` saying merger votes depend on public attitude toward the
|
||
management of the two companies. By contrast the broader support-adjusted share-price helper
|
||
`company_compute_public_support_adjusted_share_price_scalar` `0x00424fd0` uses issue id `0x37`,
|
||
and the shared setter under that lane is tighter now too: `0x004339b0` clamps one small
|
||
scenario-side issue value into `[state+0x2d]` with range `0..4`, derives one companion scalar in
|
||
`[state+0x29]`, and then forces a live-company sweep through `0x00424fd0` so the support-adjusted
|
||
share-price family is recomputed immediately after the issue lane changes. The finance-side debt
|
||
helpers now bound `0x38` and `0x39` separately as the explicit
|
||
credit-rating and prime-rate lanes. That leaves `0x37` as the broader investor-confidence lane
|
||
behind equity support, share price, and adjacent governance pressure, with the strongest current
|
||
text anchors coming from the investor-attitude strings `1217` and `3048/3049` about company or
|
||
chairman performance rather than from the merger-only management-attitude term. One older local lead is now ruled out too: the
|
||
`0x460900..0x460cac` / `0x473620` setup block is the camera-view command family over localized ids
|
||
`3474..3493` (`Select/Assign Camera View 1..9` and `0`), not issue-opinion infrastructure, so it
|
||
should no longer be used as evidence for the player-facing meaning of issue `0x37`. The editor-side
|
||
`Stock Prices` label is also no longer being used as direct evidence here: the `0x4ca980` /
|
||
`0x4cadf0` panel owns a separate float-tuning block `[state+0x0bde..0x0bf6]`, with
|
||
`[state+0x0bde]` merely mirroring `[state+0x0be2]`, so that label belongs to a different
|
||
settings family than the issue table behind `0x37`. A direct shell-resource follow-up now narrows
|
||
the remaining caption question too: the extracted `CompanyDetail.win` blob from `rt3_2WIN.PK4`
|
||
contains no plain-English investor or finance caption for this lane, which matches the owner-side
|
||
read that section-0 is a dynamic `0x947f` text widget fed by
|
||
`shell_format_company_governance_and_economy_status_panel` `0x004e5cf0` rather than a separate
|
||
fixed label row. The supporting stat layer is bounded more cleanly now too: the
|
||
surrounding `0x0b` setup in the merger and takeover offer builders is formatter mode rather than a
|
||
player-facing issue number, while the company-side stat wrapper
|
||
`company_read_year_or_control_transfer_metric_value` `0x0042a5d0` now reads as a generic
|
||
stat-family accessor over year-relative series or the bounded slot family in
|
||
`company_read_control_transfer_metric_slot` `0x0042a2e0`. Its recurring family token `0x2329` is
|
||
no longer treated as an issue id here either; it is the stat-family selector paired with localized
|
||
company-stat label id `2329`. That means the paired raw and scaled helpers at `0x004241e0` and
|
||
`0x00424200` now read as narrow control-transfer offer policy totals instead of direct
|
||
issue-argument consumers, and the same broader support-and-governance metric family now also feeds
|
||
the annual shareholder-revolt and creditor-liquidation lane surfaced by localized ids `300..304`.
|
||
The editor-side help text cluster around ids `2433..2437` is no longer floating either: current
|
||
grounded map-editor code now has a live economic tuning family beside the chairman-slot panel.
|
||
`map_editor_economic_cost_slider_panel_construct` `0x004cadf0` binds six slider controls through
|
||
`map_editor_economic_cost_slider_dispatch` `0x004ca980`, which now grounds as the real writer for
|
||
the scenario-state float block `[0x006cec78+0x0be2..0x0bf6]`: lane `0` uses one dedicated scale
|
||
divisor, the trailing five lanes share the centered `(value-0xce)` path, and the helper mirrors
|
||
lane `0` into `[state+0x0bde]`. The surrounding descriptor table at `0x00611c70..0x00612220`
|
||
pairs that wider editor lane with localized fields `Prime Rate`, `Merger Premium`, and `Build
|
||
Stations Cost` through `Steam Engine Cost` plus the comparison or help texts `2433..2437`. The
|
||
broader shell-state master flag at `[0x006cec74+0x68]` still sits above the remaining post-load
|
||
phases, plus two narrower per-phase gates: `[0x006cec74+0x174]` directly fronts id `320` `Setting
|
||
Up Buildings...` and the later region-owned structure-demand and placement pass through
|
||
`world_region_collection_run_building_population_pass` `0x00421c20` plus the deeper per-region
|
||
worker `world_region_balance_structure_demand_and_place_candidates` `0x004235c0`, while
|
||
`[0x006cec74+0x178]` directly fronts id `321` `Seeding Economy...` and the chunked burst helper
|
||
`simulation_run_chunked_fast_forward_burst`, whose grounded tail now also sweeps the live region
|
||
collection through `world_region_refresh_cached_category_totals_and_weight_slots` `0x00423d30`;
|
||
id `322` then fronts `Calculating Heights...`. The
|
||
master `+0x68` flag is no longer just structural: the shell load/save coordinators now use the
|
||
same flag to force the editor-map `.gmp` family, so current evidence treats it as the broader
|
||
editor-map mode above those later setup branches rather than an unnamed generic toggle. That
|
||
worker is no longer one opaque building bucket: current grounded categories split into `House`, a
|
||
weighted region-profile family surfaced through the `Industry Weightings` stats path, and a third
|
||
branch whose low-level fallback token is `Commercial` but whose aligned stats label is `City
|
||
Support`. The same placement-commit gate beneath it, `world_region_validate_and_commit_candidate_placement`
|
||
`0x00422a70`, is also corroborated by the separate world-side randomized batch helper
|
||
`world_try_place_random_structure_batch_from_compact_record` `0x00430270`, which retries
|
||
placements around one compact center/radius record rather than the ordinary per-region demand
|
||
deficits. That batch placer now sits under a wider compact runtime-effect dispatcher,
|
||
`world_apply_compact_runtime_effect_record_to_resolved_targets` `0x00431b20`, so the world-side
|
||
branch is no longer just “another caller near `0x43051e`” but one real effect family alongside
|
||
the ordinary region-demand worker. Above that, the live scenario event collection at `0x0062be18`
|
||
now has a tighter runtime-effect lane too: `scenario_runtime_effect_record_service_and_dispatch_linked_compact_effects`
|
||
`0x004323a0` services one live runtime-effect record, dispatches its linked compact effects
|
||
through `0x00431b20`, and can synthesize follow-on records through
|
||
`scenario_runtime_effect_record_build_followon_effect_from_compact_record_and_targets`
|
||
`0x00430b50`, which in turn allocates new live records through
|
||
`scenario_event_collection_allocate_runtime_effect_record_from_compact_payload` `0x00432ea0`.
|
||
Above that, `scenario_event_collection_service_runtime_effect_records_for_trigger_kind`
|
||
`0x00432f40` now bounds the collection-wide loop that services those live runtime-effect records
|
||
for one trigger kind. That trigger split is tighter now too: recurring simulation maintenance
|
||
drives kinds `1`, `0`, `3`, and `2`; the neighboring route-style follow-on drives `5` and `4`;
|
||
startup-company and named-railroad creation branches drive `7`; kind `6` is now bounded as a
|
||
mixed post-change family spanning the placed-structure post-create tail, one build-version-gated
|
||
company-startup or roster-refresh tail, and the route-entry post-change sweep on `0x006cfca8`;
|
||
one world-entry-side one-shot gate drives `8` and then clears shell-profile latch
|
||
`[0x006cec7c+0x97]`; the briefing-text query lane is kind `9`; and the collection dirty latch
|
||
still forces the internal rerun at kind `0x0a`.
|
||
That moves this branch out of the “isolated world-side placement oddity” bucket and into a real
|
||
scenario-runtime effect pipeline with a mostly bounded trigger-kind family.
|
||
The same lower helper also reappears later on a slower
|
||
simulation-side cadence with
|
||
scale `1/12`, so it no longer looks like one-time setup glue only. The actual game-speed control
|
||
family remains separate, rooted at `world_set_game_speed_mode` `0x00434680`,
|
||
`world_adjust_game_speed_mode_delta` `0x00434850`, and `world_toggle_pause_or_restore_game_speed`
|
||
`0x00437a60`. The direct shell command stub above that family is now explicit too: `0x00440880`
|
||
just re-enters the pause-or-resume toggle with flag `1` and then issues one indexed shell
|
||
feedback nudge through `0x0045ea20` with selector `0x2c` and scalar `0.5f`. That feedback path
|
||
is tighter now too: `0x0045ea20` is the reusable indexed audio-feedback helper over the
|
||
table-driven pairs at `0x005f0828/0x005f082c`, and `0x00531e10` is the shell-audio-service sink
|
||
that only dispatches those nudges when the live service gates are satisfied.
|
||
### Camera View Command Strip
|
||
|
||
The adjacent shell-command family at `0x004408f0..0x00440c30` is now
|
||
grounded as the ten-slot `Assign/Select Camera View` owner rather than as a generic modal strip.
|
||
`shell_assign_camera_view_slot_and_publish_confirmation` `0x004408f0` snapshots one `0x30`-byte
|
||
record inside the live world-view owner through `world_view_store_camera_view_slot_snapshot`
|
||
`0x0043b2c0`, storing both the live view tuple `[view+0x04..+0x24]` and one saved focus-kind pair
|
||
from `[0x006cec78+0x45/+0x49]`; `shell_select_camera_view_slot_or_publish_unassigned_warning`
|
||
`0x004409c0` then re-enters `world_view_restore_camera_view_slot_snapshot_if_populated`
|
||
`0x0043ca20`, which restores the same fields, optionally replays the saved focus through
|
||
`shell_world_focus_selected_subject_kind_and_id` `0x00437a90`, and returns silently on success.
|
||
Only empty slots surface the shared shell modal path, using localized ids `371..373` after one
|
||
label-format pass through `0x0051b700`. The wrapper strip `0x00440b00..0x00440c30` is now fully
|
||
bounded too: `0x00440b00/10/20/30/40/50/60/70/80/90` are `Assign Camera View 1..9/0`, while
|
||
`0x00440ba0/b0/c0/d0/e0/f0/c00/c10/c20/c30` are `Select Camera View 1..9/0`, and the
|
||
registration block at `0x00460903..0x00460cac` ties those wrappers to localized command ids
|
||
`3474..3493`.
|
||
### CompanyDetail Addendum
|
||
|
||
The shared helper `shell_company_detail_resolve_selected_company` at
|
||
`0x004c16f0` now bounds the common current-company accessor beneath the whole pane, and the
|
||
read-side owner also has a separate active-company navigation family through
|
||
`shell_company_detail_step_selected_active_company_delta` at `0x004c3470` plus the next or
|
||
previous wrappers at `0x004c3540` and `0x004c3550`. The section switch in
|
||
`shell_company_detail_window_refresh_controls` is now grounded too: section index `0x006cfe60`
|
||
selects a chairman/governance slice, a debt-and-capital slice, a per-share slice, or a
|
||
territory-access slice, published through the tab band around `0x9472..0x9479`, with adjacent
|
||
section-navigation controls around `0x947b..0x947c` and `0x948f..0x9490`.
|
||
### Key Dispatchers
|
||
|
||
`shell_controller_window_message_dispatch`,
|
||
`shell_input_apply_window_key_transition`, `shell_input_snapshot_dispatch_state`,
|
||
`shell_input_cursor_inside_active_view`, `world_load_saved_runtime_state_bundle`,
|
||
`world_runtime_serialize_smp_bundle`, `simulation_frame_accumulate_and_step_world`,
|
||
`game_message_window_service_if_present`, `game_message_window_service_frame`,
|
||
`game_uppermost_window_handle_message`, `game_uppermost_window_service_world_hotspot_band`,
|
||
`game_uppermost_window_refresh_controls`,
|
||
`world_view_service_keyboard_turn_pan_and_zoom_bindings`, `world_view_step_heading_quadrant`,
|
||
`world_view_step_zoom_bucket`, `world_seed_default_chairman_profile_slots`,
|
||
`world_build_chairman_profile_slot_records`,
|
||
`world_conditionally_seed_named_starting_railroad_companies`,
|
||
`scenario_state_set_selected_chairman_profile`,
|
||
`scenario_state_get_selected_chairman_profile_record`,
|
||
`scenario_state_get_selected_chairman_company_record`, `shell_company_list_window_construct`,
|
||
`shell_company_list_window_refresh_rows`, `shell_company_list_window_handle_message`,
|
||
`start_new_company_dialog_open`, `start_new_company_dialog_commit_create_company`,
|
||
`start_new_company_request_create_company`, `shell_station_detail_window_construct`,
|
||
`shell_station_list_window_construct`, `shell_station_list_window_handle_message`,
|
||
`shell_station_pick_window_construct`, `shell_station_pick_window_populate_station_rows`,
|
||
`map_editor_chairman_slot_panel_construct`, `map_editor_chairman_slot_panel_handle_message`,
|
||
`map_editor_chairman_slot_panel_refresh_selected_slot`,
|
||
`map_editor_chairman_slot_panel_cycle_selected_slot_profile`,
|
||
`map_editor_available_chairman_panel_construct`,
|
||
`map_editor_available_chairman_panel_handle_message`,
|
||
`map_editor_scenario_metadata_panel_refresh_briefing_mode`,
|
||
`map_editor_scenario_metadata_panel_refresh_controls`,
|
||
`map_editor_scenario_metadata_panel_handle_message`,
|
||
`map_editor_scenario_special_conditions_panel_construct`,
|
||
`map_editor_scenario_special_conditions_panel_handle_message`,
|
||
`map_editor_economic_cost_slider_panel_construct`, `map_editor_economic_cost_slider_dispatch`,
|
||
`station_place_world_surface_sync_and_dispatch`, `station_place_window_handle_message`,
|
||
`track_lay_window_refresh_controls`, `track_lay_window_service_frame`,
|
||
`track_lay_window_handle_message`, `simulation_advance_to_target_calendar_point`, the smaller
|
||
single-step helper at `0x00409e80`, `0x0040a9c0`, `0x0040a910`, and
|
||
`simulation_service_periodic_boundary_work`.
|
||
### State Anchors
|
||
|
||
Shell input object `0x006d4018`, per-key state table starting at `[input+0x100]`,
|
||
packed shell input flags at `[input+0xa8c]` now grounded as Right Shift `0x1`, Left Shift `0x2`,
|
||
Control `0x4`, and Alt `0x20`, nested dispatch counter `[input+0xa90]`, global shell controller
|
||
`0x006d4024`, active world root `0x0062c120`, `GameMessage.win` object `0x006d081c`,
|
||
`GameUppermost.win` overlay object `0x006d0820`, `StationPlace.win` tool object `0x006d1720`,
|
||
`TrackLay.win` tool object `0x006d1a8c`, accumulated leftover simulation time at `[this+0x4c80]`,
|
||
shell and mode globals at `0x006cec74`, `0x006cec78`, and `0x006cec7c`, world manager collections
|
||
at `0x0062be10`, `0x006ceb9c`, `0x006cfcbc`, `0x006cec20`, `0x0062bae0`, and `0x006acd34`, plus
|
||
the packed calendar-like tuple fields around `[this+0x0d]`, `[this+0x0f]`, `[this+0x11]`, and
|
||
`[this+0x14]`.
|
||
### Subsystem Handoffs
|
||
|
||
The controller window dispatcher now looks like the first grounded input
|
||
ingress. It translates keyboard and mouse `WM_*` traffic into shell controller state and the
|
||
separate input object at `0x006d4018`; read-side cursor and camera helpers later snapshot that
|
||
object through `shell_input_snapshot_dispatch_state` and gate world-relative interaction through
|
||
`shell_input_cursor_inside_active_view`. Current grounded consumers around `0x00478cb0`,
|
||
`0x004e0780`, `0x0053f450`, and `0x0053fe90` still sit on the shell controller path and consult
|
||
`0x006d4024` or the world owner at `0x0062be68`, so there is still no evidence for a distinct
|
||
gameplay-only input object after world entry. Instead, the first deeper world-mode interaction
|
||
branch now looks like a shared world-view coordinator layered on top of the same shell-fed input
|
||
state. Shell_transition_mode ensures the `GameUppermost.win` object at `0x006d0820`; its message
|
||
dispatcher `game_uppermost_window_handle_message` owns the narrow action band `0x7918` through
|
||
`0x7921`; and the recurring service helper `game_uppermost_window_service_world_hotspot_band`
|
||
rate-limits those hotspot actions, rechecks `shell_input_cursor_inside_active_view`, and then pans
|
||
the live world view through `world_view_pan_relative_offset_in_camera_plane` `0x0043d130`. The
|
||
same lower setter family is also reached from the cursor-drag path through
|
||
`world_view_apply_screen_delta_to_focus_position` `0x0043d0c0`. Above both of those sits the
|
||
larger recurring service `world_view_service_shell_input_pan_and_hover` `0x0043db00`, which now
|
||
has one grounded keyboard branch beneath it:
|
||
`world_view_service_keyboard_turn_pan_and_zoom_bindings` `0x0043d740`. That helper resolves four
|
||
binding-pair families from the shell input table via `0x0054e7d0`, and the localized labels are
|
||
now grounded from `Data/Language/RT3.lng`: `Camera Forward` and `Camera Backward` feed the first
|
||
signed pan channel, `Camera Left` and `Camera Right` feed the second signed pan channel, `Camera
|
||
Zoom In` and `Camera Zoom Out` feed the signed zoom-step channel that `0x0043db00` smooths into
|
||
`world_view_step_zoom_bucket` `0x0043cc30`, and `Camera Rotate Left` plus `Camera Rotate Right`
|
||
feed the continuous heading-turn branch through `0x0043c810`. The setup side is now better bounded
|
||
too: `world_view_seed_keyboard_binding_slot_pairs` at `0x00439e40` seeds the eight slot pairs at
|
||
`[this+0x0a6]` through `[this+0x0e2]` from the global action-binding registry through
|
||
`shell_input_binding_registry_lookup_primary_code_and_mode_bits_by_action_id` `0x0045f370` using
|
||
the distinct registry keys `0x0043d2a0` through `0x0043d310`, and the registration block at
|
||
`0x00460769` through `0x004608e7` plus the shared installer
|
||
`shell_input_register_action_binding_with_mode_specific_defaults` `0x0045f6d0` show those roots
|
||
are defaulted to the expected Up Down Left and Right virtual keys before runtime polling begins.
|
||
The adjacent lookup strip is tighter now too: `shell_input_binding_registry_resolve_entry_by_action_stem`
|
||
`0x0045ede0` resolves one action stem into the live binding registry, while
|
||
`shell_input_binding_registry_format_display_label_by_action_stem` `0x0045f3d0` and
|
||
`shell_input_binding_registry_query_primary_code_by_action_stem` `0x0045f400` are the small
|
||
display-label and primary-code wrappers above that resolver. The camera-view modal family at
|
||
`0x004408f0/0x004409c0` now uses that same strip directly when formatting the optional focus-label
|
||
lines inside the assign/select camera-view confirmations. The lower label path is now bounded too:
|
||
`shell_input_binding_format_display_label_from_registry_entry` `0x0045ea90` is the actual
|
||
registry-entry formatter with the three localized prefix fragments `0xdef/0xdf0/0xdf1` plus the
|
||
descriptor-table caption fallback at `0x005f0a34`, and
|
||
`shell_input_binding_descriptor_query_bucket_key_for_action_id_when_mode_mask_is_singular`
|
||
`0x0045ed90` is the descriptor-side bucket-key helper used by the installer when the target mode
|
||
mask is singular. The same local family now reaches one step further into the hotkeys sidecar:
|
||
`shell_input_binding_report_iterate_next_entry_in_sorted_priority_order` `0x0045f250` builds a
|
||
temporary sorted report queue over the live registry, `shell_input_write_hotkeys_report_file`
|
||
`0x0045f550` writes the resulting table to `hotkeys\hotkeys.txt`, and the hotkey reassignment path
|
||
uses the smaller helpers `0x0045ec00`, `0x0045ec70`, `0x0045ecd0`, `0x0045ed70`, `0x0045ef00`,
|
||
and `0x0045f8a0` to split imported `foo+bar` labels, recover one action id from the descriptor
|
||
table, decode a compact modifier code, expand that code back into the live registry mask, and
|
||
finally rebucket or replace the live binding entry. The surrounding registry lifecycle is tighter
|
||
now too: `shell_input_seed_default_binding_registry_entries_from_static_table` `0x0045f9e0`
|
||
seeds the fixed defaults from `0x005ecadc` and then appends the smaller manual shell-command
|
||
strip; `shell_input_binding_registry_destroy_all_roots_and_reset_globals` `0x00461070` is the
|
||
hard reset that also flushes `hotkeys\hotkeys.txt`; and
|
||
`shell_input_binding_registry_initialize_roots_seed_defaults_and_optionally_import_hotkeys_file`
|
||
`0x00461120` rebuilds the pool roots, reseeds defaults, and tail-jumps into
|
||
`shell_input_import_hotkeys_file_and_rebucket_registry_entries_from_compound_labels` `0x0045f420`
|
||
when the caller requests saved-hotkey import.
|
||
Beneath that camera stack, the enclosing frame
|
||
path now has one grounded non-view sidecar: after `0x0043db00` it reads the active controller-view
|
||
object pointer at `[0x006d4024+0x18]+0x366e`, compares it against the latched target at
|
||
`[frame_owner+0x66a2]`, fires exit and enter-style vtable callbacks on pointer changes through
|
||
slots `+0x64` and `+0x60`, and only latches the new object when the object passes its own slot
|
||
`+0x1c` availability test and shell detail control id `0x07d6` on `0x006d0818` has flag bit `0x4`.
|
||
That `0x07d6` gate is now more bounded than before: the dedicated `TrackLay.win` tool family
|
||
rooted at `0x006d1a8c` special-cases the same control id in both `track_lay_window_service_frame`
|
||
and `track_lay_window_handle_message`, uses world hit tests through `0x00448ac0` to arm and
|
||
release a drag latch on that surface, and routes the resulting command work through the shared
|
||
track-lay mode state at `0x00622b0c`. The surrounding `track_lay_window_refresh_controls` pass now
|
||
shows that this is not just one isolated drag handler: the same tool family owns three mutually
|
||
exclusive primary mode buttons at `0x985e` `0x985f` and `0x9860`, and current primary evidence now
|
||
bounds those values as `Lay single track.` `0x1`, `Lay double track.` `0x4`, and `Bulldoze` `0x40`
|
||
from the localized strings 2054 2055 and 1721 plus the matching control-routing branches in
|
||
`track_lay_window_handle_message`. The same family also owns the downstream route-entry policy
|
||
bridge at `0x004955b0`: current caller evidence says that helper maps the live TrackLay primary
|
||
mode into endpoint-synthesis policy `1` or `4` before the tool re-enters `0x00493cf0`, which is
|
||
the strongest current bridge from the player-facing single-track versus double-track buttons into
|
||
the lower route-builder policy bytes. The same family also owns a bridge-type preference selector
|
||
rooted at `0x006cec74+0x138`, two wrapped `Never` through `Common` frequency settings at
|
||
`0x006cec74+0x140` and `0x006cec74+0x13c`, two boolean track-lay preference toggles, and the
|
||
electrify-all-track action path. Those last two toggles are now tighter than before: current
|
||
evidence strongly aligns control `0x986e` and state `0x006cec74+0x144` with `Auto-Hide Trees
|
||
During Track Lay` from strings 1838 and 1839, while control `0x986d` and state `0x006cec78+0x4c74`
|
||
align with `Auto-Show Grade During Track Lay` from strings 3904 and 3905. That mapping is still
|
||
evidence-backed rather than absolutely direct from a recovered resource table, but the state
|
||
ownership and control order now make it the strongest current fit. That makes `0x07d6` look like
|
||
the shared main-world interaction surface inside a broader TrackLay world-command subsystem, not
|
||
an unrelated detail button. The neighboring `StationPlace.win` family is now grounded on that same
|
||
surface too: the shell detail-panel constructor family allocates it through
|
||
`station_place_window_construct` at `0x00509d80`, publishes it at `0x006d1720`, services it each
|
||
frame through `station_place_window_service_frame` at `0x0050a530`, and routes player-facing
|
||
commands through `station_place_window_handle_message` at `0x005091b0`. That dispatcher
|
||
special-cases the same `0x07d6` control, and the shared helper
|
||
`station_place_world_surface_sync_and_dispatch` at `0x00508bb0` either accepts that direct surface
|
||
traffic or falls back to the same detail-panel control looked up through `0x006d0818`, rechecks
|
||
flag bit `0x4`, hit-tests the world through `0x00448ac0`, stages world coordinates into
|
||
`0x006d1738/0x006d173c`, refreshes the remaining preview metric field through
|
||
`station_place_refresh_preview_metric_control_0x6983` `0x00508550`, and updates the live
|
||
station-placement selection state at `0x00622af0`, `0x00622aec`, and `0x006d1740`. The tool-side
|
||
save and restore choreography is tighter now too: `station_place_window_release_cached_selection_handles_and_world_followons`
|
||
`0x005079c0` releases cached helper handles `[this+0x7c/+0x80/+0x88/+0x84]` through the matching
|
||
global owners after re-entering world and placed-structure follow-ons, and the thin wrapper
|
||
`0x00507a50` is the entry used by the broader save-load status-stack helpers. The category side
|
||
of that state is now tighter too: the shared helper `0x0044bd10` quantizes the staged world coordinates into the
|
||
current cell, resolves the mixed byte-or-word region id from `[world+0x212d]`, looks up the
|
||
owning city-or-region entry through `0x0062bae0`, and returns `[entry+0x272]` with fallback
|
||
`5`; the StationPlace world-surface branches at `0x00508b80`, `0x00508d59`, and `0x0050a4e6`
|
||
use that result directly to refresh the current selection category latch at `0x00622af0`.
|
||
Together with
|
||
`station_place_select_category_and_refresh` `0x00508880`,
|
||
`station_place_refresh_category_controls` `0x00507b90`, and `station_place_format_preview_panel`
|
||
`0x00508730`, that makes StationPlace a second grounded consumer of the shared main-world
|
||
interaction surface rather than only a sibling constructor plus frame hook. The StationPlace
|
||
control semantics are now tighter too: the top category strip at `0x697c` through `0x6981` now
|
||
grounds as small station, medium station, large station, service tower, maintenance facility, and
|
||
non-station building from `RT3.lng` strings 2197 through 2202. For the three station categories
|
||
only, the secondary strip at `0x6988` and `0x6989` plus display field `0x698c` no longer looks
|
||
like another placement mode family; it is a building-style scroller. The click handlers on
|
||
`0x6988` and `0x6989` cycle the style override in `0x00622aec`, and the display path builds the
|
||
active style token from `StationSml`, `StationMed`, or `StationLrg` plus the localized
|
||
architecture styles `Victorian`, `Tudor`, `Southwest`, `Persian`, `Kyoto`, and `Clapboard` from
|
||
`RT3.lng` ids 2672 through 2667. One layer lower, the remaining opaque controls are now much
|
||
tighter: `0x6985` and `0x6986` are no longer a generic assist toggle but the two station-rotation
|
||
policy choices from strings 2207 and 2206, switching between auto-orienting the building to track
|
||
or obstacles and strictly obeying the rotation specified by the circle above. The dedicated
|
||
control at `0x6987` is the station-rotation circle itself, wired through
|
||
`station_place_rotation_circle_callback_publish_current_heading_widget` `0x00507a90` and aligned
|
||
with `Click to rotate the building. You can also use bracket keys [ and ] to rotate buildings.`
|
||
string 2208. The lower rotation strip is now grounded too:
|
||
`station_place_set_rotation_and_refresh_live_selected_site_pose` `0x00507cf0` owns the write to
|
||
`0x006d172c` and the live selected-site pose refresh, `station_place_window_drag_rotate_selected_site_toward_world_cursor`
|
||
`0x00507d80` is the drag-update branch under the dispatcher, and
|
||
`station_place_step_rotation_by_integer_notches` `0x005086c0` is the discrete notch helper used by
|
||
the neighboring StationPlace rotation-step branches. That matches the lower behavior too: when the
|
||
strict-rotation choice is off, both preview and commit paths route staged coordinates through
|
||
`station_place_window_try_auto_orient_candidate_to_covering_route_entry_and_validate_placement`
|
||
`0x00508040`, which performs the extra orientation search before validation by retrying a small
|
||
orientation-mode set around the reusable covering-route-entry helper `0x00417b40`; when strict
|
||
rotation is on, that pass is skipped and the current angle in `0x006d172c` is used directly. The
|
||
preview strip is tighter now too: `station_place_format_preview_panel` `0x00508730` is the real
|
||
owner for controls `0x6982/0x6983/0x6984`, and the middle field `0x6983` is no longer anonymous.
|
||
The paired description side is explicit now too: `0x00413bc0` is the formatter behind preview
|
||
control `0x6984`, starting from placement-record text at `[record+0x40]` and then appending
|
||
rule-table driven explanatory lines after casefolded compares against `[record+0x7c]`.
|
||
`station_place_refresh_preview_metric_control_0x6983` `0x00508550` resolves the staged world-cell
|
||
category through `0x0044ad60`, reads the linked profile scalar at `[profile+0x22]`, chooses issue
|
||
slot `0x3b` or `0x3c` from candidate subtype byte `[candidate+0x32]`, folds that scalar through
|
||
`scenario_state_compute_issue_opinion_multiplier` `0x00436590`, and then passes it through the
|
||
version-gated quantizer `0x005084a0` before formatting the visible text into control `0x6983`.
|
||
The singleton-side entry above that strip is explicit now too:
|
||
`station_place_format_preview_panel_if_live_singleton_and_valid_selection` `0x00508860` only
|
||
forwards non-`-1` selection ids into that refresh path when `0x006d1720` is live.
|
||
One layer below preview versus commit, the shared gate is also tighter now:
|
||
`station_place_validate_current_selection_at_world_coords_and_optionally_format_status`
|
||
`0x00507e80` is the common validation-and-status path beneath the preview and commit branches,
|
||
publishing red, yellow, or green feedback through `0x0040cb10` around the same
|
||
`placed_structure_validate_projected_candidate_placement` `0x004197e0` core. The
|
||
direct shell UI also exposes the same discrete view-step family through
|
||
`world_view_step_heading_quadrant` `0x0043cb00` and
|
||
`world_view_step_zoom_bucket` `0x0043cc30`. The neighboring gating predicates
|
||
`world_view_should_drive_primary_pan_channel` and `world_view_should_drive_secondary_pan_channel`
|
||
test packed shell input bits `0x3`, and `shell_input_apply_window_key_transition` now grounds
|
||
those bits as the left and right Shift modifiers from scan codes `0x2a` and `0x36`. That means
|
||
cursor drag, overlay hotspots, held Shift state, direct keyboard turn/pan/zoom bindings, the
|
||
TrackLay and StationPlace world-command surfaces, and at least one frame-owned hover or
|
||
focus-target branch all converge under the same shell-fed world-mode input path rather than a
|
||
separate gameplay-input stack. The ownership seam is therefore closed at the current local level:
|
||
the unresolved pieces are the exact per-tool or per-mode actions beneath that path, not whether a
|
||
later non-cursor gameplay branch bypasses the shell controller input roots.
|
||
### Evidence
|
||
|
||
Function-map rows for `shell_controller_window_message_dispatch`,
|
||
`shell_drain_pending_window_messages`, `shell_input_state_init`,
|
||
`shell_input_apply_window_key_transition`, `shell_input_snapshot_dispatch_state`,
|
||
`shell_input_cursor_inside_active_view`, `world_load_saved_runtime_state_bundle`,
|
||
`world_runtime_serialize_smp_bundle`, `world_entry_transition_and_runtime_bringup`,
|
||
`simulation_frame_accumulate_and_step_world`, `game_message_window_service_if_present`,
|
||
`game_message_window_service_frame`, `shell_ensure_game_uppermost_window`,
|
||
`game_uppermost_window_construct`, `game_uppermost_window_handle_message`,
|
||
`game_uppermost_window_service_world_hotspot_band`, `world_view_set_focus_position_xyz`,
|
||
`world_view_apply_screen_delta_to_focus_position`,
|
||
`world_view_pan_relative_offset_in_camera_plane`, `world_view_seed_keyboard_binding_slot_pairs`,
|
||
`world_view_service_keyboard_turn_pan_and_zoom_bindings`, `world_view_step_heading_quadrant`,
|
||
`world_view_step_zoom_bucket`, `world_view_should_drive_primary_pan_channel`,
|
||
`world_view_should_drive_secondary_pan_channel`, `world_view_service_shell_input_pan_and_hover`,
|
||
`world_seed_default_chairman_profile_slots`, `world_build_chairman_profile_slot_records`,
|
||
`world_conditionally_seed_named_starting_railroad_companies`,
|
||
`profile_collection_count_active_chairman_records`,
|
||
`profile_collection_get_nth_active_chairman_record`,
|
||
`scenario_state_set_selected_chairman_profile`,
|
||
`scenario_state_get_selected_chairman_profile_record`,
|
||
`scenario_state_get_selected_chairman_company_record`, `start_new_company_dialog_open`,
|
||
`start_new_company_dialog_commit_create_company`, `start_new_company_request_create_company`,
|
||
`shell_company_list_format_company_or_start_row`,
|
||
`shell_company_list_activate_or_shift_center_company`, `shell_company_list_window_refresh_rows`,
|
||
`shell_company_list_window_handle_message`, `shell_company_list_window_construct`,
|
||
`shell_company_detail_window_refresh_controls`, `shell_company_detail_window_construct`,
|
||
`shell_company_detail_window_handle_message`, `shell_station_detail_window_construct`,
|
||
`shell_station_list_window_construct`, `shell_station_list_window_handle_message`,
|
||
`shell_station_pick_window_construct`, `shell_station_pick_window_populate_station_rows`,
|
||
`map_editor_chairman_slot_panel_construct`, `map_editor_chairman_slot_panel_refresh_slot_list`,
|
||
`map_editor_chairman_slot_panel_refresh_selected_slot`,
|
||
`map_editor_chairman_slot_panel_refresh_slot_counters`,
|
||
`map_editor_chairman_slot_panel_cycle_selected_slot_profile`,
|
||
`map_editor_chairman_slot_panel_handle_message`, `map_editor_available_chairman_panel_construct`,
|
||
`map_editor_available_chairman_panel_handle_message`,
|
||
`map_editor_scenario_metadata_panel_refresh_briefing_mode`,
|
||
`map_editor_scenario_metadata_panel_refresh_controls`,
|
||
`map_editor_scenario_metadata_panel_handle_message`,
|
||
`map_editor_scenario_special_conditions_panel_construct`,
|
||
`map_editor_scenario_special_conditions_panel_handle_message`,
|
||
`map_editor_economic_cost_slider_panel_construct`, `map_editor_economic_cost_slider_dispatch`,
|
||
`station_place_refresh_category_controls`, `station_place_format_selected_site_summary`,
|
||
`station_place_format_preview_panel`, `station_place_select_category_and_refresh`,
|
||
`station_place_world_surface_sync_and_dispatch`, `station_place_window_handle_message`,
|
||
`station_place_window_construct`, `station_place_window_service_frame`,
|
||
`track_lay_window_refresh_controls`, `track_lay_window_construct`,
|
||
`track_lay_window_service_frame`, `track_lay_window_handle_message`, and
|
||
`simulation_service_periodic_boundary_work`, plus the shell-input disassembly around `0x0054f290`,
|
||
`0x0054e880`, `0x0054e9c0`, `0x0054ea20`, `0x0054eb10`, and `0x0054ee50`,
|
||
the world-view setup and service branches around `0x00439e40`, `0x0043d740`, `0x0043db00`,
|
||
`0x0043cb00`, and `0x0043cc30`, the `319` setup-side branches around `0x004377a0`, `0x00437220`,
|
||
`0x00477820`, `0x00477860`, `0x0047d440`, `0x004c6c30`, `0x004c6f30`, `0x0047d080`, `0x0047d120`,
|
||
`0x0047d320`, `0x004c2ca0`, `0x004c5540`, `0x004c56a0`, `0x005068c0`, `0x005071e0`, `0x005074c0`,
|
||
and `0x005076c0`, the direct summary-field helpers around `0x00434870` `0x00434890` and
|
||
`0x004348c0`, the company-link writers at `0x00427c70` and `0x00427d74`, the company constructor
|
||
at `0x00428420`, the startup-company branch around `0x00470e48`, the shell company-list strings
|
||
`266` `<<Start New Company>>`, `267` `You are the chairman of the %1!`, `268` `The %1 has no
|
||
chairman at the moment.`, `269` `%1 is the chairman of the %2.`, `270` `Double-click for
|
||
details.`, and `2992` `Shift-Click to center on this company's primary station.`, the
|
||
`CompanyDetail.imb` and `CompanyDetail.win` resource strings in `.rdata`, the `StationDetail.imb`,
|
||
`StationDetail.win`, `StationList.win`, and `StationPick.win` resource strings in `.rdata`, the
|
||
shell editor window branches around `0x004c9da0`, `0x004ca010`, `0x004ca1c0`, `0x004ca540`,
|
||
`0x004ca670`, `0x004ca790`, `0x004ca980`, `0x004cb2b0`, `0x004cb4a0`, `0x004cb6f0`, `0x004cb8e0`,
|
||
`0x004cc250`, `0x004cc2d0`, `0x004ceb90`, and `0x004cecc0`, the localized chairman-slot strings
|
||
`2997` through `3001` `Optional` `Mandatory` `Human or Computer` `Computer` and `Human`, the
|
||
localized scenario-editor strings `1483..1492` `Description:` through `Type the briefing for this
|
||
map.`, the localized summary strings `1035` `%1 out of %2 are selected.` and `1053` `Special
|
||
Conditions In Effect`, the 40-entry persona availability page under `0x5aa0..0x5b03`, the 36-entry
|
||
special-condition table at `0x005f3ab0` covering ids `2535..2563`, `2874`, `3722`, `3835`, `3850`,
|
||
`3852`, and `3920`, the static persona table at `0x005f2d28`, the selector array at
|
||
`0x006cec7c+0x87`, the persona collection at `0x006ceb9c`, the localized persona strings in
|
||
`Data/Language/RT3.lng` including `2730` `Unassigned`, the named-chairman range `2731+`, and the
|
||
neighboring biography range `2495+`, plus the seeded railroad-name strings `575` `Missouri
|
||
Pacific`, `576` `New York Central`, and `577` `Grand Trunk Railroad`, the StationPlace.win
|
||
constructor plus category, dispatcher, rotation-circle, shared-world-surface, preview-build, and
|
||
recurring service branches around `0x00507a90`, `0x00507b90`, `0x00508550`, `0x00508730`,
|
||
`0x00508880`, `0x00508bb0`, `0x005091b0`, `0x00509d80`, and `0x0050a530`, the StationPlace string
|
||
cluster `Place a small station` 2197 `Place a medium station` 2198 `Place a large station` 2199
|
||
`Place a service tower` 2200 `Place a maintenance facility` 2201 `Place a non-station building`
|
||
2202 `Scroll through building styles.` 2203 `When placing the building, it will strictly adhere to
|
||
the rotation specified by the circle above.` 2206 `When placing the building, it will rotate
|
||
itself as needed to orient to track or avoid obstacles.` 2207 `Click to rotate the building. You
|
||
can also use bracket keys [ and ] to rotate buildings.` 2208 and the architecture-style labels
|
||
`Clapboard` 2667 `Kyoto` 2668 `Persian` 2669 `Southwest` 2670 `Tudor` 2671 and `Victorian` 2672,
|
||
the TrackLay.win constructor and dispatcher family around `0x0050d2d0`, `0x0050e400`,
|
||
`0x0050e070`, `0x0050e1e0`, and `0x0050e5c0`, the localized `Never` through `Common` strings 615 through 618,
|
||
the track-lay strings `Bulldoze` 1721 `Lay single track.` 2054 `Lay double track.` 2055 and 3114,
|
||
and the deeper shared bulldoze helper at `0x0044b160`. That helper is no longer just a vague
|
||
proximity scan: it validates the active company unless editor mode is active, emits the exact
|
||
RT3.lng bulldoze rejection ladder `419..424`, reads company cash through `0x0042a5d0`,
|
||
debits approved bulldoze cost through `0x0042a080`, and then scans nearby route entries,
|
||
linked structures, city-or-region records, route blockers, and placed structures before
|
||
committing the mutation. The nested tool-side entry is tighter now too: `0x0050e070` increments
|
||
the TrackLay reentry guard, snapshots several live route-owner fields from `0x006cfca8` into the
|
||
tool object, refreshes tool-local state through `0x0050dab0`, and only then tails into the later
|
||
restore or service branch `0x0050d1e0`. That tail is now tighter too: `0x0050d1e0` resets the
|
||
route-owner search state through `0x0049ad90/0x00495540`, drops invalid cached route ids from the
|
||
TrackLay tool or deletes non-admitted live entries when route latch `[route+0x118]` is set,
|
||
clears `[tool+0x78]`, and then conditionally refreshes shell presenter slot `[presenter+0x3741]`
|
||
through `0x00523e20`. The destructor side is tighter too: `0x0050db10` restores the TrackLay
|
||
vtable, re-enters that same cleanup tail, runs the route-owner post-change sweep
|
||
`0x004a3db0`, clears singleton `0x006d1a8c`, conditionally replays the shared world-side
|
||
preview-mode clear owner
|
||
`world_clear_current_preview_mode_and_reseed_mode_0x15_if_latched` `0x00453510`, and only then
|
||
tails into the common shell destroy path `0x0053f7d0`. Two smaller
|
||
TrackLay-side helpers are tighter now too: `0x0050dc00` refreshes the version-gated action rows
|
||
`0x986a..0x986c` plus `0x9872` before re-entering the main control refresh, and `0x0050dc80`
|
||
owns the active route-latch branch that either forwards into `0x004a00b0` or clears route latch
|
||
`[0x006cfca8+0x118]` plus local byte `[tool+0x82]`. The broader shared route or hit-test owner
|
||
under both message and recurring service is now tighter too: `0x0050dce0` first drops any cached
|
||
tool route id, then either seeds or updates the current route-owner selection from a world-surface
|
||
hit test through `0x00448ac0`, `0x00493600`, `0x0049ace0`, and `0x0049b180`, or refreshes the
|
||
active route-owner path through `0x004955b0`, `0x00493cf0`, and `0x004a04c0`, with the cleanup
|
||
side posting the fixed shell payload and optionally deleting route ids `[+0x125]` and `[+0x129]`.
|
||
The smallest active-route companion is tighter now too: `0x0050dab0` only runs when latch
|
||
`[0x006cfca8+0x118]` and route id `[+0x125]` are both live, then resolves that entry, re-enters
|
||
`0x0049afe0`, `0x0048b660`, and `0x0049b070`, and returns.
|
||
dispatching the selected delete branch through `0x004937f0`, `0x004941a0`, `0x0048abf0`, or the
|
||
surrounding placed-structure virtual slot `+0x58`. That makes the TrackLay `Bulldoze` mode
|
||
tighter than before: the tool-side mode latch at `0x00622b0c == 0x40` is only the front-end
|
||
selector, while the actual world-side bulldoze choice and failure policy sits under `0x0044b160`
|
||
and is reused by neighboring world-surface callers beyond TrackLay itself.
|
||
the TrackLay preference strings `Auto-Hide Trees During Track Lay` 1838 `If 'Auto-Hide Trees
|
||
During Track Lay' is checked, trees will automatically be reduced to small stumps whenever you are
|
||
in track laying mode.` 1839 `Auto-Show Grade During Track Lay` 3904 and `If 'Auto-Show Grade
|
||
During Track Lay' is checked, you'll see the grade number over the track while laying track -
|
||
useful for trying to keep your slopes to a minimum.` 3905, the electrify-all confirmation and
|
||
failure strings 3083 3084 3837 and 3900, the binding-registry lookup path at `0x0045f370`, the
|
||
registration block at `0x00460769` through `0x004608e7`, and the localized labels in
|
||
`Data/Language/RT3.lng` ids `3466` through `3473`.
|
||
### Current Boundary
|
||
|
||
Current evidence grounds the shell-controller-backed input and frame path as the
|
||
only coordinator after world entry; no separate outer gameplay loop or gameplay-only input
|
||
object is grounded yet. The new setup-pipeline evidence also points the same way: the
|
||
currently grounded chunked burst path at `0x00437b20` now looks subordinate to
|
||
`world_run_post_load_generation_pipeline` rather than to the ordinary speed controls, and even
|
||
there it still reuses the same lower stepper and pumps shell work between chunks instead of
|
||
revealing a detached gameplay loop owner. The player-facing speed-control family is now cleaner
|
||
too: `world_set_game_speed_mode` owns the bounded `Paused` through `Very Fast` ladder plus the
|
||
hidden `Ultra Fast 6..9` extension, `world_toggle_pause_or_restore_game_speed` uses `[this+0x1d]`
|
||
as the resume slot, and the multiplayer host restriction now looks attached to that same setter
|
||
family rather than to the setup-side burst helper. The frame-owned shell coupling is tighter now
|
||
too: inside `simulation_frame_accumulate_and_step_world` itself, one direct branch opens or
|
||
focuses `LoadScreen.win` through `shell_open_or_focus_load_screen_page`, and the post-step
|
||
shell-window ladder also probes several sibling shell windows by the same presence-plus-dirty
|
||
pattern, including the live `LoadScreen` singleton, the shared callback-driven custom modal, the
|
||
shared file-options dialog, `SettingsWindow.win`, the now-grounded `Overview.win` and
|
||
`BuildingDetail.win` singletons, the adjacent tool-window strip now grounded as
|
||
`Bulldoze.win`, `ChangeHeight.win`, `ChangeTrees.win`, `PaintRegion.win`, `PaintSound.win`,
|
||
`PaintTerrain.win`, `PaintTerritory.win`, and `StockBuy.win`, and now the shell-side
|
||
`Trainbuy.win` singleton too. The `SettingsWindow.win` side is tighter now too:
|
||
`shell_settings_window_rebuild_hotkeys_list_control_from_sorted_binding_report` `0x004fec60`
|
||
rebuilds the hotkeys list control `0x757a` from the same sorted binding-report iterator
|
||
`0x0045f250`, using the temporary `0x88`-stride list model at `0x006d1354` before restoring the
|
||
previous selection. The message owner above it is bounded now too:
|
||
`shell_settings_window_handle_message` `0x004fede0` is the actual dispatcher for the singleton,
|
||
and its currently grounded hotkeys cases are the reset-to-defaults path
|
||
`0x00500147 -> 0x00461120(0) -> 0x0045f550 -> 0x004fec60` and the selected-row reassignment path
|
||
`0x00500186..0x0050022b`, which resolves one chosen hotkey row from control `0x757a`, validates
|
||
the destination bucket through `0x0045ed90`, skips Enter and Escape, expands the compact modifier
|
||
code through `0x0045ed70`, commits the rebucket through `0x0045ef00`, and then rewrites the same
|
||
report file plus rebuilds the list. The page-refresh side is bounded now too:
|
||
`shell_settings_window_refresh_selected_page_controls` `0x00500410` republishes the category
|
||
strip `0x7533..0x7540`, uses the local in-refresh guard byte `0x006d135d`, and then dispatches
|
||
the current page through the `0x005005e0` table; page `7` is now directly grounded as the
|
||
hotkeys page because it dispatches into `0x004fec60`. The category table at `0x00622870` now
|
||
grounds the whole page order as `Gameplay`, `Sound`, `Graphics`, `Model Detail`, `Draw Distance`,
|
||
`Textures`, `Miscellaneous`, `Hot Keys`, `Scrolling`, `Camera Controls`, `Dialogs`,
|
||
`Miscellaneous`, and `Sandbox Options`, with only the second dword in each table row still
|
||
unresolved as a small subgroup or style flag. Several page bodies are now grounded too:
|
||
`0x004fda20` is the `Gameplay` refresh owner, `0x004fdb90` the `Sound` refresh owner,
|
||
`0x004fe770` the top-level `Graphics` refresh owner, `0x004fe960` the `Model Detail` refresh
|
||
owner, `0x004feb20` the `Draw Distance` refresh owner, `0x004febd0` the `Textures` refresh
|
||
owner, `0x004fdd70` the first `Miscellaneous` refresh owner, `0x004fdf20` the `Scrolling`
|
||
refresh owner, `0x004fdfd0` the `Camera Controls` refresh owner, `0x004fd940` the `Dialogs`
|
||
refresh owner, `0x004fd730` the later `Miscellaneous` refresh owner, and `0x004fd8d0` the
|
||
`Sandbox Options` refresh owner. The neighboring companion helpers are tighter now too:
|
||
`0x004fd550` refreshes the `Draw Distance` companion strip under controls
|
||
`0x7566/0x7596/0x7560/0x7562/0x7564`, `0x004fd650` does the same for the `Textures` companion
|
||
strip under `0x756e/0x756a/0x756c/0x7570`, `0x004fe4c0` rebuilds the graphics custom-resolution
|
||
list on `0x7553` from the live display-mode table filtered to `640x480 .. 1600x1200` and
|
||
formatted through `%1x%2`, and `0x004fe6f0/0x004fe730` are the small primary-selector mirror
|
||
helpers for `Draw Distance` `0x755f` and `Textures` `0x7569`. The `Camera Controls` page is
|
||
stronger now too: `0x7587` is the day-night cycling selector rooted at `Normal day/night
|
||
cycling` through `Frozen at 11pm`, while `0x7588` is the weather-cycling selector rooted at
|
||
`Normal weather cycling` through `Frozen at storms`. The callback strip under the dispatcher is
|
||
tighter now as well: `0x004fefb0` is the sound-backend selection-change owner for
|
||
`0x7551/0x7550`, `0x004ff070` is the custom-resolution selection owner, `0x004ff0d0` the
|
||
top-level graphics selector-change owner, `0x004ff1b0` the main draw-distance selector-change
|
||
owner, `0x004ff2e0` the textures selector-change owner, and `0x004ffbc0` the graphics
|
||
custom-resolution or range-refresh branch that persists `engine.cfg`, rebuilds the custom list,
|
||
and republishes `0x7555/0x7578`. The small wrapper `0x00500620` is the nonreentrant `if live,
|
||
refresh page` gate above that body. The tiny helper strip beneath those branches is at least
|
||
bounded now too: `0x00531640/0x005316d0` query the selected Miles 3D provider index and
|
||
preferred-flag from the shell audio service, `0x0053ef60/0x0053ef70` read the graphics-backend status
|
||
slots used by controls `0x757c/0x759a`, and `0x0051fd40/0x0051fd60` are the small graphics-range
|
||
custom-mode flag and scalar queries behind `0x7555/0x7578`. The next apply-strip under the same
|
||
family is tighter now too: `0x004fe270` applies a changed custom-resolution tuple and persists
|
||
it, `0x004fe2d0` applies the top-level graphics selector then republishes `0x757c/0x759a`,
|
||
`0x004fe3b0` applies the draw-distance selector then refreshes `0x004fd550`, `0x004fe400`
|
||
applies the textures selector then refreshes `0x004fd650`, `0x004fe140` is the small composite
|
||
backend-status predicate used by the timer-gated graphics service branch, and `0x004fe160` is
|
||
the sound-backend follow-on refresh path. The graphics service tail is tighter now too:
|
||
`0x004ffafb` is the timer-gated backend-service-plus-graphics-page repaint branch using
|
||
`0x0051d890` against deadline `0x006d136c`, the follow-on calls `0x0053f170/0x0053f2c0`, and a
|
||
shortened `60` ms rearm after it repaints `0x004fe770`, while `0x004ffb64` is the sibling
|
||
backend-service branch that uses `0x0053f0f0/0x0053f210` and only raises the shell refresh latch
|
||
without repainting the page directly. The same `MouseCursor.cpp` owner family is tighter now too:
|
||
`0x0053f000` is the live cursor-shape selector that lazily loads native handles, updates the
|
||
shell-side presentation payload, and toggles cursor visibility on the `0 <-> nonzero` boundary;
|
||
`0x0053f0f0`, `0x0053f170`, and `0x0053f210` are the three local hidden or release-transition
|
||
branches that mirror shell latches `[0x006d4024+0x11473a/+0x11473e]`; `0x0053f2f0/0x0053f310`
|
||
are the nested hold-counter helpers; `0x0053f330` is the constructor-side reset and latch-sync
|
||
owner; `0x0053f400` is the coarse global-latch service; and `0x0053f450` is the inside-view
|
||
watcher paired with `shell_input_cursor_inside_active_view` `0x0054f540`. The same pair is now
|
||
grounded on the heavier save/load paths too: `world_entry_transition_and_runtime_bringup`
|
||
`0x00443a50` pushes the hold at `0x443b04` before the larger startup-dispatch and staged
|
||
rehydrate work, then pops it at `0x444c03` after the late world or shell rebuild tail; the live
|
||
`.smp` serializer `world_runtime_serialize_smp_bundle` `0x00446240` does the same thing through
|
||
`0x446271` and `0x446d09` around its bundle-write and fixed status-publish span. The exact
|
||
save/load-side status stack under those spans is tighter now too: `0x004422d0/0x00442330` push
|
||
and pop the low bytes of shell lanes `[0x006cec74+0x140/+0x13c/+0x138/+0x144]` plus startup byte
|
||
`[0x006cec78+0x4c74]` through `0x0062be90`, with the restore side sign-extending the first three
|
||
shell bytes and zero-extending the fourth before rewriting the wider dwords; `0x004423a0/0x004423d0`
|
||
layer the same band under active TrackLay.win and StationPlace.win service. The per-frame tail is
|
||
tighter now too: `0x0054f5b0` queues one 12-dword shell-input event record into the rotating
|
||
ring at `[input+0x128]`; `0x0054f6a0` and `0x0054f6b0` are the two neighboring fixed-value
|
||
seeders for shared phase scalar `0x00d93850` used by shell-side branches `0x00538b72`,
|
||
`0x0052819d`, and `0x0052b9f8`; and `0x0054f6c0`, `0x0054f6d0`, and `0x0054f6e0` are the tiny
|
||
primary-motion scalar reset, snapshot, and restore leaves that `0x0053f4e0` uses around the
|
||
later cursor-presentation pass. The graphics-range
|
||
callback strip beneath that is bounded now too: `0x004ffd10` is the user-facing custom-mode
|
||
toggle rooted at control `0x7555`, using
|
||
`0x0051fd00`, `0x0051fd40`, `0x00520fd0`, and the localized dialog ids `0x0e16/0x0e17/0x0e93`;
|
||
`0x004ffe72` flips the graphics-range scalar through `0x00521030`; and the adjacent
|
||
display-runtime toggles `0x004ffea4`, `0x004ffeff`, `0x004fff2d`, `0x004fff59`, `0x004fff85`,
|
||
`0x004fffde`, and `0x0050000a` now bound a compact persisted graphics or model-detail option
|
||
strip over controller fields `[0x006d4024+0x1146eb]`, `[+0x114697]`, `[+0x1146e9]`, `[+0x1146b8]`,
|
||
`[+0x1146af]`, `[+0x1146a8]`, and `[+0x1146e3]` rather than one anonymous tail blob. The lower
|
||
setter layer is tighter too: `0x0051fd00` is the current `has live custom payload` predicate for
|
||
the graphics-range family, `0x00520fd0` stores the custom-mode flag and re-applies the current
|
||
range when possible, `0x00521030` stores the scalar and re-applies it when the graphics mode is
|
||
live, and `0x0051d890` is the shared elapsed-tick helper over the bootstrap-seeded tick count.
|
||
The same local support strip is broader now too: `0x0051e1d0` is the mode-`0` alternate sibling
|
||
of the packed preview-color ramp at `0x0051dfc0`; `0x0051e430/0x0051e480` are the shared
|
||
path-openability and file-size probes; `0x0051e4e0/0x0051e560` are the bounded ASCII clipboard
|
||
export and import helpers; `0x0051e6e0` is the nonempty digits-only predicate used by nearby
|
||
text-entry validation branches; `0x0051e720/0x0051e740` own the active debug-log filename
|
||
(`rt3_debug.txt` / `language_debug.txt`) and the one-time `.\\data\\log\\%s` separator write;
|
||
and `0x0051e810` is now grounded as the `MouseCursor.cpp` `ShowCursor` refcount and live-position
|
||
sync helper that the warning-modal strip also reuses. The immediate shell-controller strip under
|
||
that is tighter now too: `0x0051ea80` is the small core-state reset plus default seeding path
|
||
rerun by `0x0051ff90`; `0x0051f000` registers the static `World` window class through wndproc
|
||
`0x0054e3a0`; `0x0051f070/0x0051f080` and `0x0051f090/0x0051f0a0` are the paired controller
|
||
accessors and setters for the live presentation owner and world-basis owner; `0x0051f0c0`,
|
||
`0x0051f0d0`, and `0x0051f0e0` are the small indexed input-subobject flag write or query helpers
|
||
beneath the shell window-message path; `0x0051f100` materializes the active display-mode tuple
|
||
from `[controller+0x34]` and selector `[+0x11421e]`; `0x0051f1a0` is the current
|
||
graphics-mode-byte accessor over `[controller+0x114226]`. The wndproc itself is tighter now too:
|
||
beyond the already-grounded key, command, and mouse ingress, one broader branch prepares
|
||
subordinate layout-state `[controller+0x2d]` through `0x00547300`, `0x0054bbf0`, and
|
||
`0x00545c00(0x96, [controller+0x75], 0)`, dispatches the local slot-band service owner
|
||
`0x0054c900`, re-enters `0x00545020`, and when mode byte `[controller+0x3692]` is clear refreshes
|
||
the current external record through `0x005545d0`, `0x005543f0(0)`, and `0x00554450`. So the same
|
||
world-window dispatcher now has one grounded live layout-state service branch, not just shell
|
||
input ingress. The nearby shared shell-presenter
|
||
helper `0x00527de0` is now bounded as the common scalar-caption publisher reused by several tool
|
||
windows. It scales one caller float through `0x005dd158`, forwards that value into nested
|
||
presenter field `[this+0x364d]` through `0x0052ea90`, scales a second caller float through
|
||
`0x005c8568`, and stores that auxiliary caption-side weight in `[this+0x3728]`. Grounded callers
|
||
now include `Bulldoze.win`, `ChangeTrees.win`, the world-surface brush ordinal setter,
|
||
`PaintRegion.win`, `PaintSound.win`, `PaintTerrain.win`, and `PaintTerritory.win`, so this is the
|
||
shared shell scalar-caption lane rather than a window-specific text formatter. The neighboring page-owned dispatcher
|
||
leaves are tighter now too: `0x004ff58a`, `0x004ff5b6`,
|
||
and `0x004ff5e6` are direct persisted toggles for the later `Miscellaneous` input page fields
|
||
`[0x006d4024+0x1146d7]`, `[0x006cec74+0x28b]`, and `[0x006cec74+0x283]`, with the last one also
|
||
republishing a `Game.win` affordance through `0x004dd8d0`; `0x004ff637`, `0x004ff667`,
|
||
`0x004ff697`, `0x004ff6c7`, `0x004ff6f7`, and `0x004ff727` are the page-owned toggle leaves for
|
||
the `Dialogs` page fields `[0x006cec74+0xf8]` and `[+0x26b/+0x26f/+0x273/+0x277/+0x27b]`; and
|
||
`0x004ff757`, `0x004ff796`, `0x004ff7c6`, and `0x004ff84e` are the remaining compact `Gameplay`
|
||
page toggle leaves over `[0x006d4024+0x114742]`, `[0x006cec74+0x0a8]`, `[+0x263]`, and
|
||
`[+0x309]`, with the `+0x114742` path also nudging `BuildingDetail.win` and the `+0x263/+0x309`
|
||
paths triggering narrow live-tool follow-ons. The next tiny leaves are bounded now too:
|
||
`0x00500036` is the direct apply leaf for the graphics-misc option family mirrored through
|
||
`0x00484af0(0x0c)` into control `0x7586`; `0x0050006c/0x0050009c/0x005000cc` are the shared
|
||
setup-config toggles over `[0x006cec74+0x247/+0x24b/+0x243]` that persist the same three booleans
|
||
later mirrored by `Setup.win` controls `0x0e88/0x0e89/0x0e8a`; and `0x005000fc` is the direct
|
||
scrolling-page boolean-companion setter for `[0x006cec74+0x120]` and control `0x7585`.
|
||
neighboring stock-buy lane is tighter now too: `0x00433aa0` is the shared `StockBuy.win`
|
||
availability gate, rejecting when scenario toggle `[0x006cec78+0x4aa7]` is set or when no
|
||
selected-company id is present at `[scenario+0x21]`. The direct shell opener `0x00440660` and
|
||
the page-side launcher `0x004de50f` both use that gate before entering detail-panel mode `0x0c`,
|
||
whose same-mode refresh tail re-enters `0x00493150`. The shell-side control strip under that
|
||
window is tighter now too: `0x0050a660` is the raw selected-chairman-row setter for global
|
||
`0x006d19f4`, `0x0050a570` is the selected-company stock-data panel callback wired to control
|
||
`0x3aa0` and feeding the shared stock formatter `0x004c0160`, `0x0050a6d0` publishes the current
|
||
selected company id into `0x00622b00` and restyles control `0x3a9b`, `0x0050a670` is the shared
|
||
live-window refresh wrapper hit by the buy/sell chairman mutators after they touch
|
||
`[profile+0x154]` and the per-company holding band, `0x0050a5e0` is the constructor-wired
|
||
invalidation callback for control `0x3a9a`, and `0x0050a6a0` is the unconditional invalidation
|
||
sibling used by the local in-window trade branches after they commit the rounded block. One level
|
||
higher, `0x0050a730` is now bounded as the broad row/card refresh owner: it walks the active
|
||
chairman profiles through `0x00477820/0x00477860`, lays out the selected and unselected profile
|
||
cards through the cached widget roots `0x006d19d8/0x006d19dc/0x006d19e8/0x006d19ec`, resolves
|
||
persona/name labels through `0x00476bb0`, and pulls the same currently grounded metric lanes
|
||
from `0x00476320`, `0x00476780`, and `0x00476c20`. The selected-company panel under control
|
||
`0x3a9a` is separate and broader: `0x0050ae50` is now bounded as the main selected-company
|
||
summary renderer, resolving the current company through `0x00518140`, the current chairman row
|
||
through `0x00477860`, choosing one of panel roots `0x006d19e8/0x006d19ec`, and then formatting a
|
||
mixed text-plus-metric surface through helpers such as `0x00423eb0`, `0x00426b10`, and
|
||
`0x00426ef0`. The adjacent publish side is bounded too: `0x0050b910` formats the selected company
|
||
ownership line through localized ids
|
||
`0x0e10/0x0e11/0x0e12` plus the resolved company and owner labels, and `0x0050ba00` is the
|
||
shared selected-company summary refresh tail over controls `0x3a9a/0x3a9b`; `0x0050c130` is the
|
||
narrow mode-`0x0b` refresh wrapper that re-enters that tail only when the current detail-panel
|
||
object is actually `StockBuy.win`; and `0x0050c470` is the selected-company clamp/setter sibling
|
||
that republishes `0x00622b00` before re-entering the same summary tail. The payload-driven trade
|
||
commits are explicit now too: `0x0050c150` resolves one chairman record from payload
|
||
`[profile_id, company_id]`, derives the rounded buy block through `0x00476e50`, and commits it
|
||
through `0x00477110`; `0x0050c1f0` is the same sibling for the rounded sell block and
|
||
`0x00476460`. Both also emit the local selected-chairman shell cue before the shared
|
||
`StockBuy.win` refresh tail when the payload chairman matches the currently selected chairman in
|
||
`0x006cec78`. The message-owner and teardown side are bounded now too: `0x0050bbe0` is the real
|
||
`StockBuy.win` dispatcher, with `0xcb` control bands for chairman-row selection
|
||
`0x3afc..0x3b5f`, company-row selection `0x3d54..0x3db7`, company wrap/step controls
|
||
`0x3aa1..0x3aa3`, and toggle-byte writes `0x3aad..0x3ab2`, while `0xca` owns the local buy row
|
||
band `0x3c8c..0x3cef` and sell row band `0x3cf0..0x3d53`. The buy-side confirmation path now has
|
||
one extra leaf too: `0x0050a600` is the callback-driven tutorial gate for the localized
|
||
`0x0292` confirmation modal, opening the sibling tutorial modal `0x0e8c` only on `0xcb` control
|
||
`0x03f4` while tutorial flag `0x006d3b4c` is live. The destructor counterpart `0x0050bac0`
|
||
releases the cached roots `0x006d19d8..0x006d19ec`, frees the per-company cached stock-data
|
||
handles in `0x006d1748`, invalidates controls `0x3b60` and `0x3e4e`, clears singleton
|
||
`0x006d19f0`, and then tails into the common shell-object teardown. The
|
||
remaining adjacent detail-panel gates are now bounded tightly enough to carry by family:
|
||
`0x00434db0` is the scenario-toggle-gated company-detail mode-`0x0b` availability gate, while
|
||
`0x00434e20` is the selected-company-or-editor detail mode-`0x06` availability gate that only
|
||
hard-blocks when all three scenario toggles `[+0x4ab3/+0x4ab7/+0x4abf]` are set.
|
||
The
|
||
train-buy family is no longer just an unnamed probe pair either: the opener path is now grounded
|
||
under the same shell-owned cadence through `shell_can_open_trainbuy_window_or_warn` and
|
||
`shell_open_or_focus_trainbuy_window`, and its current family semantics already extend beyond a
|
||
bare locomotive picker into selected-train upgrade summary and route-edit affordances. The direct
|
||
shell opener `0x004406c0` now aligns with the page-side launcher `0x004de7d9`: both use
|
||
`shell_can_open_trainbuy_window_or_warn` `0x00433b00` before calling
|
||
`shell_open_or_focus_trainbuy_window` `0x00512c50`. The
|
||
selected-train side is tighter now too: we have explicit query helpers for the selected train
|
||
record, id, validity, and company ownership, plus one explicit ownership-mismatch warning modal.
|
||
That same pass also clarified one boundary we should not conflate: the neighboring shell family
|
||
rooted at `0x006d3b20` is now grounded separately as `TrainDetail.win`. It reuses the same
|
||
selected-train context and some of the same helpers, but it is not the same `Trainbuy.win`
|
||
singleton family. The `TrainDetail.win` side now has its own constructor, opener, refresh path,
|
||
and message owner above the broader train-command strip. Its inner `0xcb` strip is tighter now
|
||
too: one bounded branch is the selected-train engine-replacement or trainbuy handoff lane using
|
||
warning ids `593/594`, and another is the selected-train retirement lane using `595/596/597`
|
||
with either a local teardown path or multiplayer opcode `0x37`. The remaining train-command
|
||
family is narrower too: the shared `0x33`-stride helper trio at `0x004b2f00`, `0x004b3000`, and
|
||
`0x004b3160` now looks like a real train route-stop or waypoint list rather than a generic row
|
||
buffer, and route-entry flag byte `+0x28` now has one grounded top-level split: sign bit clear
|
||
entries are the live placed-structure-backed family, while sign bit set entries use the direct
|
||
route-node payload side. The helper `train_route_list_count_live_site_reference_entries`
|
||
`0x004b2b80` now counts the first family explicitly. One deeper lower-bit result is grounded too:
|
||
both `train_route_list_insert_staged_entry_at_index` and the auxiliary finalize helper
|
||
`train_finalize_aux_route_entry_buffer_preserving_subflags` `0x004a94b0` explicitly preserve
|
||
bits `0x40`, `0x20`, and `0x10` in the same flag byte during route-entry rewrites. Those bits are
|
||
also no longer copy-only: the neighboring shell helper
|
||
`shell_building_detail_refresh_flagged_service_capability_rows` `0x004b9a20` now consumes them to
|
||
restyle the `BuildingDetail.win` row bands `0x7d07..0x7d1c` and `0x7f58..0x801f`. The important
|
||
boundary is tighter now too: the `0x7d07..0x7d1c` band is a style-only indicator family in current
|
||
disassembly, not a hidden text-publishing row family with missing captions. The grounded
|
||
player-facing text sits elsewhere: the fixed express-side triplet `0x7f58..0x7f5a` is table-fed
|
||
from RT3.lng `494/497/498`, and the sibling special service rows still align to `Dining Car` and
|
||
`Caboose`. So the subflags now have one real shell-side consumer instead of only preservation
|
||
logic, and the old “missing label” seam on the indicator rows is gone. The broader
|
||
`BuildingDetail.win` refresh family is
|
||
tighter too: `shell_building_detail_refresh_subject_cargo_and_service_rows` `0x004ba3d0` now
|
||
clearly owns the selected subject rows around `0x7d06`, `0x7d96..`, and `0x7d0e`, resolving
|
||
ordinary ids through the live candidate collection and the special express-side ids through the
|
||
embedded `AnyCargo.imb`, `AnyFreight.imb`, and `PassMail.imb` paths. The first fixed triplet is
|
||
now table-grounded instead of only inferred: `0x00621df8` seeds the short-label controls
|
||
`0x7dc8..0x7dca` with RT3.lng `494..496` `Any Cargo`, `Any Freight`, and `Any Express`, while
|
||
`0x00621e10` seeds the adjacent `0x7e90..0x7e92` icon-name triplet with `AnyCargo`,
|
||
`AnyFreight`, and `PassMail` before `%1.imb` formatting. RT3.lng also tightens the longer popup
|
||
side now: `0x00621e04` feeds the first clickable selector triplet `0x7f58..0x7f5a` with
|
||
`494/497/498`, so the help text there is `Any Cargo`, `Any Freight\n(Freight is everything but
|
||
Passengers, Mail, and Troops)`, and `Any Express\n(Express is Passengers, Mail, and Troops)`.
|
||
The sibling special service rows still align to `Dining Car` and `Caboose`. The extracted
|
||
`BuildingDetail.win` blob now sharpens the resource boundary too: its embedded text table is
|
||
currently sparse rather than rich, exposing the help line for `0x7d01`, repeated
|
||
`BuildingDetail.imb` asset strings, and one standalone caption entry `Cargo`. That makes
|
||
`Cargo` the strongest current resource-side anchor for the row header around `0x7d06`. The
|
||
ordinary deeper rows are tighter now too: they do not look like hidden caption-table entries,
|
||
but like live candidate-derived rows. The current path validates each ordinary id through
|
||
`indexed_collection_entry_id_is_live` `0x00517d40`, resolves the concrete candidate record
|
||
through `indexed_collection_resolve_live_entry_by_id` `0x00518140`, and then reuses candidate
|
||
field `[record+0x04]` as one shared stem for both the row asset `%s.imb` path and the
|
||
neighboring display-label lookup through
|
||
`localization_lookup_display_label_by_stem_or_fallback` `0x0051c920`. That lookup is now
|
||
bounded too: it scans the static stem table at `0x006243c8`, already grounding entries such as
|
||
`Alcohol`, `Aluminum Mill`, `Automobiles`, `Bauxite`, and `Big Boy` against RT3.lng
|
||
`3202..3220`, and only falls back to localized id `3866` when no table entry matches before the
|
||
fixed `0x384..0x386` express-side triplet takes over. One neighboring candidate-side helper is
|
||
tighter now too: `structure_candidate_query_route_style_or_local_availability_metric`
|
||
`0x0041e650` shares the same route-style byte at `[candidate+0x46]`, returning the cached local
|
||
float at `[candidate+0x5a]` for ordinary candidates but switching route-style rows to one
|
||
normalized count over the world-side route-link collection `0x006ada90` keyed by candidate class
|
||
`[candidate+0x3e]`. That collection is tighter now too: it is constructed during world bring-up
|
||
by `placed_structure_route_link_collection_construct` `0x00468110`, and current grounded
|
||
creation flow through `placed_structure_route_link_allocate_site_pair_for_candidate_class`
|
||
`0x00467f50` seeds class byte `+0x10`, a masked initial state template, and the strongest
|
||
current creation-side site-pair fields at `+0x0c` and `+0x0e` before
|
||
`placed_structure_route_link_attach_site_owner` `0x00467eb0` links the new route-link record
|
||
into the placed-structure-owned chain at `[site+0x272]`. The owner-side split is tighter now
|
||
too: route-link field `+0x08` is the separate route-node-style owner anchor used by
|
||
`placed_structure_route_link_attach_route_node_owner` `0x00467f20`, while `+0x0a/+0x0c/+0x0e`
|
||
now read as the site-reference triple matched by
|
||
`placed_structure_route_link_collection_remove_links_touching_site_id` `0x004681f0`. Creation
|
||
flow now sharpens that further: `+0x0c` is the strongest current candidate for the stable
|
||
first-site field seeded before owner attachment, `+0x0a` is the mutable owner-site anchor
|
||
installed by the attach helper, and `+0x0e` is the stable second-site field. One more split is
|
||
tighter now too: `placed_structure_route_link_recompute_endpoint_pair_state` `0x00467c30`
|
||
currently uses `+0x0a` and `+0x0e` as the active endpoint site pair while recomputing state
|
||
byte `+0x12`. The load/save boundary is tighter now too: package save currently persists only the
|
||
direct indexed-collection header band of `0x006ada90` through `0x00517d90`, world-entry bring-up
|
||
mirrors only that header refresh through `0x00518680`, and the live endpoint or grid state is
|
||
then regenerated later through `placed_structure_route_link_collection_recompute_all_endpoint_pair_state`
|
||
`0x004682c0` and `placed_structure_route_link_collection_rebuild_route_style_grid_counters_and_endpoint_state`
|
||
`0x00468300` rather than through a separate tagged per-record payload lane.
|
||
byte `+0x12`; `+0x0c` is still not directly read there. The family also has a clearer release
|
||
and refresh side now: `placed_structure_route_link_release_and_detach` `0x004680b0` rolls back
|
||
the class counters and then tails into `placed_structure_route_link_detach_current_owner_chain`
|
||
`0x00467df0`, while
|
||
`placed_structure_route_link_collection_recompute_all_endpoint_pair_state` `0x004682c0`
|
||
explicitly reruns the per-record endpoint-pair reconciler across the whole live route-link
|
||
collection. One layer above that,
|
||
`placed_structure_route_link_rebuild_route_style_grid_counters_and_endpoint_state`
|
||
`0x00468300` now looks like the full-family refresh owner: it clears three route-style class
|
||
lanes in the world-grid tables rooted at `[0x0062c120+0x2129]`, then clears bit `0x2` across
|
||
the live route-link records and reruns the endpoint-pair reconciler. That now lines up with the
|
||
visible shell split: non-route candidates keep the richer local metric and price lane, while
|
||
route-style candidates use one world-side route-link family instead. The emission side is
|
||
tighter now too: `placed_structure_try_emit_best_route_style_peer_link_for_candidate_class`
|
||
`0x0040fef0` scans the live placed-structure collection for one best peer site by
|
||
class-specific weight, distance window, and type gate, then only creates a new route-link
|
||
through `placed_structure_route_link_allocate_site_pair_for_candidate_class` `0x00467f50` when
|
||
`placed_structure_endpoint_pair_has_shared_route_entry_key` `0x0040fbe0` says the chosen site
|
||
pair does not already share a route-entry key. One layer above that,
|
||
`placed_structure_rebuild_route_style_candidate_scores_and_peer_links` `0x004101e0` now reads
|
||
as the broader per-site owner of this lane: it computes per-class route-style score scalars from
|
||
local site state and scenario multipliers, drives the first three route-style emission attempts,
|
||
and then continues into a larger descriptor-driven scoring phase. Inside that larger pass,
|
||
`placed_structure_accumulate_candidate_metric_or_emit_route_style_peer_link` `0x0042cab0`
|
||
now cleanly shows the split between ordinary candidates, which add directly into the local
|
||
route-style grid lane at `[site+candidate*4+0x103]`, and remapped route-style candidates, which
|
||
re-enter the peer-link emitter. One layer above that, the broader post-create or post-edit site
|
||
rebuild `placed_structure_finalize_creation_or_rebuild_local_runtime_state` `0x0040ef10`
|
||
conditionally re-enters `0x004101e0` with stack flag `1` when its local latch at `[site+0x29e]`
|
||
stays clear, so the route-style lane is no longer floating under an unnamed single-site caller.
|
||
The placement side is tighter now too: the direct constructor
|
||
`placed_structure_collection_allocate_and_construct_entry` `0x004134d0` is the shared allocator
|
||
immediately beneath the current placement-side callers before they hand the new site into
|
||
`0x0040ef10`, and the lower constructor
|
||
`placed_structure_construct_entry_from_candidate_and_world_args` `0x0040f6d0` now bounds the
|
||
actual field-seeding layer beneath that allocator. The old unresolved higher placement chooser is
|
||
bounded more cleanly now too: the `0x00403ed5` and `0x0040446b` direct-placement commits sit
|
||
inside one larger helper,
|
||
`city_connection_try_build_route_with_optional_direct_site_placement` `0x00402cb0`. That shared
|
||
heavy builder is now the common target of the compact wrapper `0x00404640`, the peer-route
|
||
candidate builder `0x004046a0`, the region-entry pair wrapper
|
||
`city_connection_try_build_route_between_region_entry_pair` `0x00404c60`, and the direct retry
|
||
paths inside `simulation_try_select_and_publish_company_start_or_city_connection_news`
|
||
`0x00404ce0`. Internally it now has three bounded lanes:
|
||
an early route-entry search or synthesis attempt through
|
||
`route_entry_collection_try_build_path_between_optional_endpoint_entries` `0x004a01a0`,
|
||
a single-endpoint direct-placement lane that scans `Maintenance` and `ServiceTower` candidates
|
||
and commits through `0x00403ed5 -> 0x004134d0 -> 0x0040ef10`,
|
||
and a later paired-endpoint fallback lane that seeds two endpoint candidates from the same stem
|
||
family, walks a temporary route-entry list, and commits through
|
||
`0x0040446b -> 0x004134d0 -> 0x0040ef10`.
|
||
That early lane can now be described more concretely: it can reuse supplied route-entry
|
||
endpoints, synthesize a missing leading endpoint from the caller's coordinates, seed the
|
||
route-store builder-state block, and then hand off to the deeper path-search core without
|
||
placing a new site. The previously vague side family at `0x006cfcb4` is tighter too: current
|
||
evidence now bounds it as a small auxiliary route-entry tracker collection with an allocator at
|
||
`0x004a42b0`, a refcount or destroy path at `0x004a4340`, a direct route-entry group-id setter
|
||
at `0x00489f80`, an endpoint-membership probe at `0x00494ed0`, a boolean-latch refresh or
|
||
owner-notify path at `0x00494fb0`, and a two-endpoint merge or bind helper at `0x00494f00`.
|
||
One smaller constructor-side ownership split is tighter now too: the cached `u16` chain fields
|
||
`[site+0x26e]`, `[site+0x270]`, and `[site+0x383]` are no longer free-floating. Constructor-side
|
||
helper `0x0041f7e0` prepends one new peer into that chain by storing the old head from
|
||
`[this+0x383]` into `[peer+0x270]` and then replacing `[this+0x383]` with the peer's own
|
||
placed-structure id `[peer+0x2a4]`; the direct resolver `0x0041f810` turns the cached head id
|
||
back into one live record through `0x0062b26c`; and the removal-side companion `0x0041f850`
|
||
removes one peer from the same chain before clearing `[peer+0x26e/+0x270]`. That caller split is
|
||
now strong enough to treat this as one cached single-link or predecessor-chain family beneath
|
||
placed-structure construction and rebuild rather than as unrelated scratch words.
|
||
That bind side is tighter now too: the trackers group route entries only when a route-key-like
|
||
value from `0x0048aa70`, the route-entry signature word `+0x22e`, and the boolean latch derived
|
||
from byte `+0x44` all agree. The deeper handoff under that lane is no longer anonymous either:
|
||
`route_entry_collection_search_path_between_entry_or_coord_endpoints` `0x0049d380` is now
|
||
bounded as the internal search core that runs the first candidate sweep, quality gates, and the
|
||
later route-extension fallbacks before returning one resolved route-entry id or `-1`. The first
|
||
sweep now has a bounded owner at `0x0049bd40`, and the two later fallback helpers are bounded as
|
||
the route-entry point-window coverage query `0x00494cb0` and the frontier-extension helper
|
||
`0x0049c900`. The math side is bounded more cleanly now too: the family reuses
|
||
`math_measure_float_xy_pair_distance` `0x0051db80` for its direct point-to-point scalar,
|
||
`math_compute_quadrant_adjusted_heading_angle_from_xy_pair` `0x004952f0` for heading-angle
|
||
construction, `math_normalize_subtracted_angle_delta_and_report_wrap` `0x004953c0` for wrapped
|
||
angle deltas, and now one tighter visual-side strip too: `0x00539230` applies one local
|
||
float-preset layout from state byte `[entry+0x218]`, `0x00539380` loads the matching
|
||
table-driven profile bands and optional display latch `[entry+0x44]`, `0x005394b0` exports four
|
||
consecutive `3*dword` triplet bands from the entry into caller buffers, and `0x005391b0`
|
||
releases one optional world-space attachment before the entry's vtable slot `+0x00` teardown
|
||
fires. The adjacent publish side is bounded too: `0x00539580` broadcasts one caller-supplied
|
||
three-scalar packet across the optional attached-handle list at `[entry+0x08]`, and
|
||
`0x005395d0` ensures that same list, adds one new handle, and immediately republishes one
|
||
aggregate scalar derived from local bands `[+0x18/+0x24/+0x30/+0x3c]` together with head lanes
|
||
`[+0x0c/+0x10]`. The next owner layer is tighter now too: `0x00539640` is the heavy derived-band
|
||
rebuild that turns those four triplets plus profile weights `[entry+0x1f5/+0x1f9/+0x1fd]` into
|
||
the larger scalar bands rooted at `[entry+0x63]` through `[entry+0x1d3]`, refreshes center
|
||
scalars `[entry+0x0c/+0x10]`, re-enters root query `0x00534490` several times, and conditionally
|
||
maintains the optional `0xc0`-byte display buffer at `[entry+0x1e3]` according to display-state
|
||
byte `[entry+0x44]`. The surrounding wrappers are coherent with that same ownership split:
|
||
`0x0053a740` copies caller triplets into `[entry+0x14/+0x20/+0x2c/+0x38]`, refreshes optional
|
||
attachment id `[entry+0x55]` through `0x00533e00/0x00533dd0`, and republishes center lanes
|
||
`[entry+0x1ed/+0x1f1]`; `0x0053a890` reprojects the stored triplets through `0x00534490` and
|
||
rebuilds; `0x0053a920` fills all four triplets from one uniform scalar before rebuilding;
|
||
`0x0053ac40` rebinds the root pointer, clears attachment state, and optionally rebuilds from the
|
||
current triplets; `0x0053aca0` is the concrete default constructor for the same route-entry
|
||
object family; and `0x0053ae10` is the construction-time root-bind plus state-profile-and-triplet
|
||
initializer. The attachment manager beneath that strip is tighter too: `0x0053a5b0` is the tiny
|
||
broadcast wrapper over current head lanes, `0x0053a5d0` is the heavier ensure-and-clone path
|
||
that seeds one new attached handle from the first live entry when a list already exists, and
|
||
`0x0053a6d0` tears that attached-handle list back down. The collection side is tighter too:
|
||
`0x00491af0` constructs the indexed
|
||
`0x006cfca8` owner beneath the world bundle-load path, and the later post-load `319` lane now
|
||
uses `0x00491c20` as a dedicated collection-wide refresh pass that re-enters `0x00539640` on
|
||
every live route entry. That keeps the route-entry visual or presentation side grounded as a real
|
||
sibling strip to the search and regrouping code, not loose per-caller scratch fields.
|
||
angle-delta checks, and `math_abs_double_with_crt_special_case_handling` `0x005a152e` for the
|
||
absolute-value side of the quality gates. Current evidence also bounds the threshold shape a
|
||
little more tightly: the initial sweep and later extension path both reuse one signed angle-bias
|
||
term `+/-0.181000038854627`, and the first sweep switches between a looser `1.4` and stricter
|
||
`1.8` quality multiplier depending on route-policy byte `4` or the broader display-runtime
|
||
preference `[0x006cec78+0x4c74]`, already grounded elsewhere as `Auto-Show Grade During Track
|
||
Lay`.
|
||
The small policy-byte semantics are still not fully closed, but current evidence is tighter than
|
||
before. Literal byte `1` is now the strongest current match for direct linked-site
|
||
endpoint-anchor creation or replacement, because the linked-site constructor and neighboring
|
||
repair branches around `0x00480463`, `0x00480a77`, and `0x00480b69` all feed that byte into
|
||
`0x00493cf0` before rebinding one chosen route-entry anchor through `0x0048abc0`. Literal byte
|
||
`2` now looks broader: the later world-side caller at `0x00480cd0` and the linked-site refresh
|
||
helper `placed_structure_refresh_linked_site_display_name_and_route_anchor` `0x00480bb0` both
|
||
reach `0x004a01a0` with both optional endpoint-entry ids unset and that byte, so the strongest
|
||
current read is a full linked-site route-anchor rebuild between optional endpoint entries rather
|
||
than the narrower direct creation lane. The TrackLay side now gives one tighter user-facing
|
||
anchor too: the live mode field `0x00622b0c` is already grounded as `Lay single track.` `0x1`
|
||
versus `Lay double track.` `0x4`, and the small mapper `0x004955b0` collapses that state into
|
||
the endpoint-policy bytes later passed to `0x00493cf0`, so the strongest current read is
|
||
`policy 1 = single-track endpoint synthesis` and `policy 4 = double-track endpoint synthesis`.
|
||
Bytes `1/2` are still the ones that enable the
|
||
auxiliary tracker lane in `0x004a01a0`, while byte `4` now reads more narrowly as the larger
|
||
company-side endpoint-synthesis charge inside `0x00493cf0`, because that helper feeds `-1`
|
||
versus `-2` into the saturating company counter helper `0x00423ec0` on `[company+0x7680]`
|
||
rather than skipping the company branch entirely. That counter is tighter now too: nearby
|
||
company initialization seeds it to `50` when scenario byte `0x4aaf` is enabled and to sentinel
|
||
`-1` otherwise, while the companion getter `0x004240a0` returns either the live counter or fixed
|
||
fallback `29999`. Current language-table correlation also gives `0x4aaf` a stronger
|
||
player-facing meaning: it is the live gate behind `Company track laying is limited...` and the
|
||
event variable label `Company Track Pieces Buildable`. So the current strongest read is
|
||
available track-laying capacity, not an abstract company route-budget. That site-side helper
|
||
also closes one adjacent ownership gap: beneath
|
||
`placed_structure_finalize_creation_or_rebuild_local_runtime_state` `0x0040ef10`, it rebuilds
|
||
one linked site's route-entry anchor and display-name buffer. That path is tighter now than just
|
||
“bind anchor then touch `0x006cfcb4`”: after the literal-policy-`2` rebuild succeeds it
|
||
re-enters `aux_route_entry_tracker_collection_refresh_route_entry_group_membership` `0x004a45f0`,
|
||
which can now be described more concretely. Its early prepass at `0x004a4380` can split one
|
||
mismatching adjacent subchain into a fresh tracker group; its later helper at `0x004a4ce0` can
|
||
transfer one compatible adjacent chain between neighboring groups; and the repair-side helper at
|
||
`0x004a4ff0` can reseed a whole route-entry component into a fresh tracker when the old group id
|
||
is missing or invalid. The regrouping pass also still rewrites compatible endpoint slots through
|
||
`0x004950f0` and refreshes one nearby cached-match payload band through `0x00495020` before the
|
||
helper resumes the name-buffer work. The remaining display-name side still matches the earlier
|
||
grounded text family: copy the resolved city name when available, append civic suffixes
|
||
`Township`, `New`, `Modern`, or `Renaissance`, append `Service Tower` or `Maintenance Facility`
|
||
on the linked-instance class branches, and otherwise fall back through the older
|
||
`Junction`..`Center` and `Anytown` text families.
|
||
The higher owner-refresh side of that same tracker family is tighter now too. The reusable gate
|
||
at `0x004a4c00` no longer looks like a stray predicate: it explicitly requires both route-entry
|
||
trackers to keep matching cached fields `+0x18/+0x1c/+0x1d/+0x1e` and both route entries to keep
|
||
their special side fields `+0x20e/+0x222` unset before adjacent-chain transfer is allowed. The
|
||
collection-wide traversal sweep at `0x004a5fc0` is bounded now as the connected-component refresh
|
||
owner over tracker field `+0x0c`, with a temporary queue at `[this+0x94]` and direct fallback
|
||
into the reseed helper `0x004a4ff0` whenever one neighboring route entry has lost valid tracker
|
||
ownership. Above both of those sits `aux_route_entry_tracker_collection_refresh_owner_adjacent_compatible_group_links`
|
||
`0x004a6360`, which now reads as the owner-side latch-change refresher invoked from
|
||
`0x00494fb0`: it starts from one owner route-entry id, confirms both bound endpoint entries agree
|
||
on the boolean class state implied by route-entry byte `+0x44`, and then probes both endpoint
|
||
sides for adjacent route-entry groups that can be absorbed through the `0x004a4c00 -> 0x004a4ce0`
|
||
gate-and-transfer pair. The sibling query side is bounded now too:
|
||
`aux_route_entry_tracker_collection_query_component_label_by_tracker_id` `0x004a6320` is the
|
||
dirty-aware accessor for tracker field `+0x0c`, while
|
||
`aux_route_entry_tracker_dispatch_route_entry_pair_metric_query` `0x004a65b0` is the remaining
|
||
mode-switched lower metric dispatcher beneath the heavier chooser at `0x004a6630`, forwarding
|
||
fixed route-entry-pair candidate sets into either `0x004a5280` or `0x004a5900` depending on the
|
||
shared hundredths-scaled build-version query
|
||
`runtime_query_hundredths_scaled_build_version` `0x00482e00` over `0x006cec74`. The current
|
||
caller thresholds `>= 0x67`, `>= 0x68`, `>= 0x69`, and `>= 0x6a` now line up with executable
|
||
build values `1.03`, `1.04`, `1.05`, and `1.06`, and the version source itself can come from
|
||
the multiplayer companion path as well as the local executable, so this split is no longer
|
||
best-read as a time- or era-side cutover at all. It now reads more cleanly as a pre-`1.03`
|
||
versus `1.03+` route-metric compatibility dispatcher. That lower split is tighter now too:
|
||
`0x004a5280` is the weighted recursive branch with heuristic ordering, per-tracker best-cost
|
||
cache `0x006cfcac`, and prune threshold `0x006cfcb0`, while `0x004a5900` is the alternate
|
||
recursive neighbor-walk branch that stays within compatible component labels through
|
||
`0x004a62c0` and accumulates step and mismatch penalties over route-entry links
|
||
`+0x206/+0x20a/+0x20e`. Above both of them,
|
||
`aux_route_entry_tracker_query_best_route_entry_pair_metric_with_endpoint_fallbacks`
|
||
`0x004a6630` is now bounded as the real chooser: direct fixed-pair query when both entries pass
|
||
`0x0048b870`, otherwise endpoint-pair fallback across the two tracker groups.
|
||
The adjacent route-style rebuild side is tighter now too: the same build-version family reaches
|
||
`placed_structure_rebuild_route_style_candidate_scores_and_peer_links` `0x004101e0`, where build
|
||
`1.04+` keeps one `Recycling Plant` stem-specific compatibility branch alive and build `1.05+`
|
||
skips one older descriptor-side attenuation fallback. There is also one neighboring world-side
|
||
compatibility lane now bounded below the same family: `placed_structure_collect_connected_component_tile_bounds_with_version_gate`
|
||
`0x004160c0` skips one older recursive component-bounds walk through `0x00415f20` on build
|
||
`1.03+` when scenario field `[0x006cec78+0x46c38]` is already active. The wrapper above that
|
||
path is bounded now too: `placed_structure_map_tile_range_to_connected_component_records_with_optional_bounds_refresh`
|
||
`0x00416170` walks the caller rectangle, maps tile keys into the component table rooted at
|
||
`0x0062ba7c`, and only re-enters `0x004160c0` when the current owner still has no cached bounds
|
||
and the local world or scenario suppressors stay clear. The higher neighboring raster side is
|
||
tighter too. `world_grid_refresh_projected_rect_sample_band_and_flag_mask` `0x00418610` is the
|
||
shared projected-rectangle helper above `world_grid_refresh_flagged_region_float_extrema_and_mean`
|
||
`0x00415020`: it refreshes the temporary sample band at `0x0062b7d0`, publishes the surviving
|
||
rectangle through `0x0044d410`, and on the single-sample path re-enters
|
||
`world_grid_toggle_flagged_mask_bit0_for_nonsentinel_rect_samples` `0x004185a0` to flip mask bit
|
||
`0x01` for the corresponding non-sentinel cells. Current grounded callers for `0x00418610` are
|
||
the neighboring placed-structure local-runtime helper `0x00418be0` and the heavier placement
|
||
validator `0x004197e0`, so this adjacent family now reads more like projected placement or local
|
||
raster prep than an unowned generic world-grid scan. One neighboring caller into the same
|
||
height-support band is tighter now too: the world-side branch at `0x00419070..0x004190f0`
|
||
walks one admitted local window, dispatches the acceptance-gated relaxer `0x0044d6e0` once per
|
||
cell with a one-cell radius and no immediate tail refresh, and only after that outer loop
|
||
completes re-enters `0x0044d410` on the full surviving rectangle. The higher owner split is
|
||
tighter now too.
|
||
`placed_structure_build_local_runtime_record_from_candidate_stem_and_projected_scratch`
|
||
`0x00418be0` is the broader construction or rebuild lane: resolve one candidate id from a stem,
|
||
build projected scratch through `0x00416ec0`, then publish the projected rectangle and validate
|
||
its side windows through `placed_structure_publish_projected_runtime_rect_globals_and_validate_side_windows`
|
||
`0x00416620`. That publish pass is bounded now too: it stages `0x0062b308/0x0062b30c/0x0062b310`,
|
||
validates the rectangle against route-entry coverage through
|
||
`route_entry_collection_query_rect_window_passes_entry_type_gate` `0x00494240`, can branch into
|
||
the special projected-slot picker `placed_structure_try_select_projected_rect_profile_slot`
|
||
`0x00415570`, and refreshes the compact per-cell side tables through
|
||
`world_grid_refresh_projected_rect_surface_and_region_byte_tables` `0x00414e10` before the
|
||
finished scratch is copied into one queued runtime record and the new record re-enters
|
||
`0x00416170` when its rectangle is valid. The smaller sibling
|
||
strip under that projected-slot family is tighter now too. The shared probe
|
||
`projected_rect_profile_slot_probe_template_cells_and_height_span` `0x004153f0` tests one
|
||
fixed `8x8` template from `0x005edd30` against the current projected rectangle, rejecting on
|
||
out-of-bounds cells, occupied cells already marked in `0x0062b300`, or the paired world-grid
|
||
gates `0x00448af0(mode 0)` and `0x004499c0`, then sampling `0x00448aa0` and requiring enough
|
||
local height span. The selector `0x00415570` now reads as a three-path owner over that probe:
|
||
reuse cached slot `0x005ee030`, try the localized-id-`11` default, then scan slots `0..11`
|
||
until one passes. Once a slot is live, `placed_structure_build_projected_rect_profile_mask_bands_from_selected_slot`
|
||
`0x004156b0` expands the same template family into the four mask bands
|
||
`[record+0xcf/+0xd3/+0xd7/+0xdb]`, setting per-plane presence flags at
|
||
`[record+0x177/+0x17b/+0x17f/+0x183]` and freeing any empty plane buffer.
|
||
The packed-cell and bounds side beneath the same family is tighter too:
|
||
`projected_rect_packed_cell_list_try_append_unique_xy_with_optional_highbit_flag_and_expand_quarter_bounds`
|
||
`0x00413df0` appends unique packed cells into `0x0062b318` while expanding the quarter-scale
|
||
bounds at `0x0062b7a8..0x0062b7b4`, and the adjacent helper strip
|
||
`0x00414270/0x004142c0/0x004142d0/0x004142e0` now reads as replaying those packed cells into
|
||
compact-grid mode `2` plus the shared bounds extractor for the same sentinel-terminated list.
|
||
The smaller sibling
|
||
`0x00419200` is now bounded beneath that same projected-rectangle family too: it is the tiny
|
||
getter over the temporary dword cell-value bank at `0x0062b300`, flattening one caller cell
|
||
through live world width `[0x0062c120+0x2155]` and returning the corresponding dword when the
|
||
bank exists, else `0`. Current grounded caller is the later world-side branch at `0x0048af99`.
|
||
The smaller sibling
|
||
`placed_structure_clone_template_local_runtime_record_for_subject_and_refresh_component_bounds`
|
||
`0x00418a60` now reads as the current-subject clone path above the same connected-component and
|
||
mask-refresh helpers, returning the cloned local runtime record later stored into `[site+0x24e]`
|
||
by `placed_structure_refresh_cloned_local_runtime_record_from_current_candidate_stem`
|
||
`0x0040e450`. The higher wrapper above that clone path is bounded now too:
|
||
`placed_structure_collection_refresh_local_runtime_records_and_position_scalars` `0x004133b0`
|
||
first drains the temporary site-id queue rooted at `0x0062ba64/0x0062ba6c/0x0062ba70` through
|
||
`placed_structure_local_runtime_site_id_queue_count` `0x00414480` and
|
||
`placed_structure_local_runtime_site_id_queue_pop_next` `0x00413f50`, rebuilding one cloned
|
||
local-runtime record per queued placed structure through `0x0040e450`, and only then sweeps all
|
||
live placed structures through the side refresh helper
|
||
`placed_structure_refresh_local_runtime_position_triplet_and_linked_anchor_followon` `0x0040ee10`.
|
||
The constructor or ownership split beneath that family is tighter now too. The shared allocator
|
||
`placed_structure_collection_allocate_and_construct_entry` `0x004134d0` no longer just reaches
|
||
an anonymous `0x3e1`-byte scratch object: it first constructs one concrete placed-structure
|
||
specialization through `placed_structure_construct_concrete_specialization_vtable_5c8c50`
|
||
`0x0040c950`, which calls `0x0045b680` to seed the common base table `0x005cb4c0`, clear the
|
||
derived field band `[this+0x23a..+0x26a]`, and re-enter the older base initializer
|
||
`0x00455610`, then installs the specialization table `0x005c8c50`. The paired cleanup path at
|
||
`0x0040c970` now reads like the matching teardown thunk: it briefly reinstalls `0x005c8c50`,
|
||
then immediately demotes the record back to the base table through `0x0045b040 ->
|
||
0x00455650` before the stack object is freed or unwound. The corresponding serializer entry
|
||
`0x0040c980` is equally tight now: it simply tails into `0x0045b560`, which first re-enters the
|
||
base serializer `0x004559d0` and then emits the derived payload bracketed by tags `0x5dc1` and
|
||
`0x5dc2` over `[this+0x23e]`, `[this+0x242]`, `[this+0x246]`, `[this+0x24e]`, and `[this+0x252]`.
|
||
One nearby string clue is useful but narrower than it first looked. The specialization table at
|
||
`0x005c8c50` is immediately followed by `RadioStation` and `Radio Station`, but the local member
|
||
method `0x0040ce60` now shows why: it compares site stem `[this+0x3ae]` against `Radio Station`,
|
||
canonicalizes that stem to `RadioStation` on match, and then re-enters `0x0040cd70` plus
|
||
`0x0045c150`. So those adjacent strings ground one stem-normalization lane inside the
|
||
specialization, not the specialization name by themselves. The small virtual-slot and cached-id
|
||
side is tighter now too. The same `0x005c8c50` table carries three literal-false stubs
|
||
`0x0040cc10/0x0040cc20/0x0040cc30`, one literal-true stub `0x0040ccc0`, and the narrower
|
||
linked-site-id presence predicate `0x0040ccb0`, which simply returns whether `[this+0x2a8]` is
|
||
nonzero. Beneath the stem-normalization path, `0x0040cd70` is now bounded as the common cached
|
||
source/candidate resolver: it clears `[this+0x3cc]` and `[this+0x3d0]`, scans source collection
|
||
`0x0062b2fc` for a stem match against `[this+0x3ae]`, stores the matched source id into
|
||
`[this+0x3cc]` plus the linked candidate/profile id from `[source+0x173]` into `[this+0x3d0]`,
|
||
and when no match exists formats localized id `0x00ad` through `0x0051e980` with the current
|
||
stem buffer. That warning path is tighter now too: `0x0051e980` is the guarded warning-modal
|
||
publisher that forces cursor visibility through `MouseCursor.cpp` before showing the shared
|
||
warning box. The two tiny followers `0x0040cec0` and `0x0040cee0` then resolve those cached ids
|
||
back into concrete source and candidate records through `0x0062b2fc` and `0x0062b268`
|
||
respectively. The derived payload and transient family under that same table is tighter now too.
|
||
`0x0045c150` is the clear payload-loader
|
||
counterpart to `0x0045b560`: it reinitializes the derived field band, opens the `0x5dc1/0x5dc2`
|
||
payload bracket, restores the two payload strings into `[this+0x23e]` and `[this+0x242]`, clears
|
||
the transient roots `[this+0x24e]`, `[this+0x256]`, `[this+0x25a]`, and `[this+0x25e]`, and then
|
||
rebuilds follow-on specialization state through `0x0045b5f0` and `0x0045b6f0`. The neighboring
|
||
builder pair is coherent too: `0x0045b210` formats `amb_%1_01.wav`, allocates a `0x141`-byte
|
||
transient object, stores it at `[this+0x24a]`, and registers it through `0x0052da00`, while
|
||
`0x0045c310` allocates the separate primary transient handle at `[this+0x246]` from payload
|
||
strings `[this+0x23e]` and `[this+0x242]`, then publishes it through `0x00530720` and
|
||
`0x0052d8a0`. The next rebuild layer is tighter now too. `0x0045b5f0` resolves one current
|
||
world-position tuple through `0x0052e720 -> 0x0051f090 -> 0x00534490`, then uses that derived
|
||
scalar to refresh the ambient-side transient again through `0x0045b210`. Above that,
|
||
`0x0045b6f0` clears the optional handles at `[this+0x25a]` and `[this+0x25e]`, then probes and
|
||
materializes a larger named variant family rooted in `[this+0x23e]` through strings such as
|
||
`%1_`, `%1_Upgrade1`, `%1_Anim%2.3dp`, `%1_Upgrade1Anim%2.3dp`, and
|
||
`%1_Upgrade1Light%2.3dp`, looping across numbered variants and publishing surviving records
|
||
through `0x0052d8a0`. One higher timed branch is bounded now too: `0x0045baf0` advances the two
|
||
timer-like fields `[this+0x26a]` and `[this+0x266]`, gates on nearby world-distance and
|
||
candidate-side checks, and then formats one output around `rnd_%1_%2.wav` plus the same anim or
|
||
light string family before dispatching through `0x00531e50` under owner `0x006d402c`. Their
|
||
release-side companions `0x0045b160` and `0x0045c3c0` tear down those same transient roots and
|
||
payload strings again, and the recurring service slice `0x0045be50` updates the derived scalar
|
||
triplet `[this+0x22e]`, `[this+0x232]`, and `[this+0x236]` before republishing it through
|
||
`0x00530720`. The string literals `amb_%1_01.wav`, `%1_Anim%2.3dp`,
|
||
`%1_Upgrade1Anim%2.3dp`, `%1_Upgrade1Light%2.3dp`, and `rnd_%1_%2.wav` therefore ground the
|
||
derived band `[this+0x23e..+0x26a]` as one payload-plus-transient owner family with ambient,
|
||
animation, light, and random-sound components, rather than more linked-site or route-entry ids.
|
||
One broader specialization-side build pass under that same family is bounded now too.
|
||
`0x0045b760` first scans one base-or-upgrade descriptor family rooted in `[this+0x23e]`
|
||
through `%1_` or `%1_Upgrade1`, probing each numbered hit through `0x0053c930` and dispatching
|
||
every accepted one through vtable slot `+0x7c`. It then builds the matching attached-emitter list
|
||
through `0x0045e940`, ensures the shared `%1_Anim.3dp` payload root exists through `0x0045ae80`,
|
||
and finally scans the paired animation family through `%1_Anim%2.3dp` or
|
||
`%1_Upgrade1Anim%2.3dp`, materializing each accepted hit into a `0x206` record through
|
||
`0x00530640`, publishing that record through `0x0052d8a0`, hashing the generated name through
|
||
`0x0053d810`, and forwarding the result into `[this+0x256]` through `0x0045a7f0`. So that
|
||
specialization side now has one explicit base-or-upgrade descriptor and animation-record build
|
||
pass above the later timed anim/light/random-sound service slice, not just the narrower
|
||
`%1_Anim` and `%1_Upgrade1Light` helpers.
|
||
The shared `%1_Anim.3dp` collection under that build pass is tighter now too. `0x0045ae80`
|
||
formats literal `%1_Anim.3dp`, probes the named-bank owner `0x006d4020`, reads the matched
|
||
payload bytes, and lazily allocates the intrusive shared list root `0x006acd5c`, so this is the
|
||
bootstrap for the specialization-side shared animation payload family rather than just another
|
||
bank-read leaf. `0x0045a7f0` then acts as the keyed replace-or-publish helper over that same
|
||
family: it rewrites matching keys across the current `0x006acd50/0x006acd4c` row collection,
|
||
mirrors the replacement into the per-row four-lane pointer bands, inserts newly active rows into
|
||
the intrusive list rooted at `0x006acd5c`, and when selector table `0x006acd44` is live it
|
||
allocates one selector-`0` effect slot through `0x00475ed0` before forwarding it into
|
||
`0x00475240(-1,0)`. The smaller helper `0x0045a700` is the keyed three-float accumulator beneath
|
||
that same path: it scans the live `0x168`-byte rows in `0x006acd50`, filters on one key dword
|
||
plus row flag bit `0x400`, and accumulates one output anchor delta from the shared basis bands in
|
||
`0x006acd4c+0x04/+0x34` or `+0x40/+0x70`. The service side above the collection is also bounded:
|
||
`0x0045af50` clears globals `0x006acd44/48/54`, publishes the current row collection into
|
||
`0x006acd50/0x006acd4c`, releases oversize selector roots through `0x00475100`, and prunes every
|
||
intrusive active record in `0x006acd5c` whose owner pointer at `[record+0xf0]` matches the
|
||
current collection owner. The heavier per-record body is `0x0045a9c0`: it honors the current
|
||
controller gates in `0x006acd48/58`, clears and re-arms the selected effect-slot band in
|
||
`0x006acd44`, optionally mirrors one caller dword into row field `[row+0x80]`, updates timing and
|
||
mode fields across every matching shared row, derives local scalar deltas through `0x0045a280`,
|
||
optionally subtracts keyed anchor deltas through `0x0045a700`, and republishes the finished two
|
||
owner triplets through `0x0052e8b0` and `0x00530720`.
|
||
`0x0045ade0` seeds cursor `0x006acd60` from `[0x006cec78+0x15]`, then services the intrusive
|
||
list in `0x0f`-tick windows by dispatching the heavier per-record body at `0x0045a9c0(owner,
|
||
cursor, 0)` for every linked record whose owner pointer at `[record+0xf0]` is live. So the
|
||
specialization transient family now includes a concrete shared `%1_Anim.3dp` payload root,
|
||
keyed record replacement, keyed anchor accumulation, and a bounded 15-tick shared service loop,
|
||
not just the base builder at `0x0045b760`.
|
||
The low-side leaves under that same family are tighter now too. `0x0045b050` is the explicit
|
||
field reset for payload roots `[this+0x23e/+0x242]`, transient handles `[this+0x246/+0x24a/+0x24e]`,
|
||
selector slot `[this+0x262] = -1`, timer fields `[this+0x266/+0x26a]`, and the packed flag band
|
||
`[this+0x23a..+0x23d]`, with an optional tail into `0x00455610` when the caller requests a
|
||
broader base clear. `0x0045b0b0` is the paired integer-triplet publish leaf: it forwards one
|
||
caller triplet through `0x0052e680` on the specialization owner and, when present, repeats that
|
||
same publish into the primary transient `[this+0x246]`. `0x0045b0f0` is the neighboring packed
|
||
RGB-triplet forwarder into vtable slot `+0x58`. The two tiny wrappers around them are now
|
||
explicit too: `0x0045b040` demotes the specialization straight back to base vtable `0x005cb4c0`
|
||
before tailing into the common cleanup body `0x00455650`, while `0x0045b110` is just the direct
|
||
wrapper into the shared world-anchor triplet publisher `0x00455660`.
|
||
One intermediate transient build layer is bounded now too. `0x0040cf00` first requires
|
||
creation-mode byte `[this+0x3d4] == 1` and live seed handle `[this+0x24e]`, re-enters
|
||
`0x0045b370(1)`, derives one scaled float from current local geometry through `[this+0x14]`,
|
||
`[this+0x21]`, `[this+0x3a]`, and `0x005c8cf4`, and then allocates a second transient handle
|
||
into `[this+0x25a]` through `0x00475ed0`. It follows that with one current world-position
|
||
resolve through `0x00414450` and `0x0052e720`, several local offset-triplet writes through
|
||
`0x00475010`, and four numbered channel updates through `0x00475030` with selector ids `1..4`.
|
||
That is enough to bound it as another specialization-side transient-handle builder beneath the
|
||
same payload family as `0x0045c310` and `0x0045b210`, without yet over-naming the user-facing
|
||
subtype or effect semantics of the built handle. The adjacent data-loading strip under that same
|
||
transient family is tighter now too. `0x00474700` reloads `particles.dat` into global root
|
||
`0x006cea5c` and then registers literal `ParticlesTexture` through owner `0x006d4030`;
|
||
`0x00474790` reloads `emitters.dat` into global root `0x006cea60`; `0x00474820` hashes one
|
||
caller-supplied emitter name and resolves the first matching entry out of that `emitters.dat`
|
||
table; `0x00474860` is the adjacent formatted-variant iterator that walks the same table through
|
||
`%s%s%i.3dp`, saving the selected row root into `0x006cea90` and the generated variant name into
|
||
`0x006cea94`; `0x00474970` is the small handle-array release helper used by the same
|
||
emitter-template teardown side; and `0x004749a0` is the tiny exact-compare predicate for literal
|
||
`steam`. The lower definition-to-handle materialization body is bounded now too: `0x004749d0`
|
||
copies scaled float and packed dword bands from one emitter-definition row into the attached
|
||
emitter handle, resolves the named particle row from `particles.dat` through `0x0053d810`, and
|
||
mirrors that particle row into `[handle+0x10c..]` before returning the live handle. The
|
||
higher creator above that materializer is tighter now too: `0x00474e20` first strips special
|
||
high bits for `CargoMoney_DollarSign`, clears incoming flag `0x400` when definition gate
|
||
`[def+0xb8]` is zero, and then either hashes the definition name plus owner token and clones one
|
||
owner-side template through `0x00556ce0`, or allocates a fresh `0x1fd` runtime emitter through
|
||
`0x00556920` before re-entering `0x004749d0`. On success it publishes that emitter through
|
||
`0x0052d950`, stores the definition owner pointer into `[emitter+0x60]`, and when final flags
|
||
carry `0x02000000` it forces persistent flag dword `[emitter+0xbc] = 1`. One larger owner-stem
|
||
branch above that iterator is bounded now too: `0x0045e940` rejects `Stadium`, clears caller flag
|
||
bit `0x10` for `ParticleCar`, repeatedly pulls formatted variants through `0x00474860`,
|
||
instantiates each accepted variant through `0x00474e20`, sets emitter flag `0x02` for
|
||
`Nuclear`, and optionally returns the created emitter list through the caller array. So the
|
||
`0x00474e20/0x00475010/0x00475030` emitter builders are now sitting on top of a grounded pair
|
||
of particle and emitter data tables plus one concrete owner-stem-driven variant-list builder,
|
||
not just anonymous global payload roots. The small shared slot utilities
|
||
under those builders are tighter now too: `0x00474fe0` is the shared per-slot flag broadcast
|
||
into `[emitter+0xbc]`; `0x00475010` caches one shared anchor
|
||
triplet into globals `0x006cea68/0x006cea6c/0x006cea70`, `0x00475030` republishes that cached
|
||
triplet into either all emitters in one slot container or one selected emitter index at
|
||
`[emitter+0x1b0..+0x1b8]`, `0x00475240` toggles the per-emitter enable byte `[emitter+0x1d8]`
|
||
for either all or one selected emitter, and `0x004752b0` is the paired boolean query that
|
||
reports true only when that same byte is zero. The update side is explicit too: `0x00474f70`
|
||
runs `0x00555e50(0)` across either one supplied slot container or every slot in the global linked
|
||
list rooted at `0x006cea74`. The release side is explicit too: `0x00475100`
|
||
tears emitter slots down, optionally unlinks them from the global active list
|
||
`0x006cea74/0x006cea78/0x006cea7c`, and then either recycles or frees the slot depending on
|
||
whether it falls inside the pooled descriptor rooted at `0x006cea58`. Two named bundle builders
|
||
are grounded now too: `0x004752d0` builds the three-emitter `BrokenDown_Steam` +
|
||
`FlamespoutB` + `Crash_SmokeA` bundle, while `0x00475550` builds the two-emitter
|
||
`BrokenDown_Steam` + `BrokenDown_Smoke` bundle. The next owner layer above those helpers is
|
||
grounded now too. `0x00474ce0` is the global particle/emitter bootstrap: it reloads
|
||
`emitters.dat`, reloads `particles.dat`, publishes the mode-`1` ratio labels through
|
||
`0x00474690`, lazily allocates pooled slot root `0x006cea58`, allocates backing slab
|
||
`0x006cea54`, seeds that slab into the pooled descriptor through `0x0053dcf0(0x38, 0x2710, 1)`,
|
||
clears the global linked-slot heads and shared anchor globals, rebuilds the flagged templates
|
||
through `0x00474c60`, and finally publishes enable-state `1` through owner `0x006d4030`.
|
||
`0x00474db0` is the teardown-side companion that frees `0x006cea54`, `0x006cea5c`,
|
||
`0x006cea60`, and then resets and frees the pooled slot root `0x006cea58`. That makes the
|
||
effect-slot builders a real subsystem rooted at `0x006cea54..0x006cea98`, not just a loose
|
||
string-and-handle utility strip. The named bundle surface is broader now too: `0x00475420`
|
||
selects one `Volcano_BlackSmoke*` + `Volcano_Lava*` pair from the caller float tier
|
||
`0.5/0.75/1.0/1.5/2.0` and builds the two-emitter volcano bundle; `0x00475650` builds the
|
||
three-emitter `ServiceTower_Water2` + `ServiceTower_Water` + `ServiceTower_Water3` water bundle
|
||
from the paired `ServiceTower_Anim2#water.3dp`, `ServiceTower_Anim3#water.3dp`, and
|
||
`ServiceTower_Anim4#water.3dp` definitions; `0x004757b0` builds the three-emitter
|
||
`Rocket_Flame` + `Rocket_Smoke` + `Rocket_Sparkle` fireworks bundle from the paired
|
||
`Fireworks_Anim2/3/4#water.3dp` definitions; `0x00475910` is the adjacent randomized
|
||
one-emitter fireworks builder that rotates among `Fireworks1/2/3`, uses
|
||
`Fireworks_Anim5#water.3dp`, and writes fixed dword `0x3c` into `[emitter+0xbc]`;
|
||
`0x004759f0` and `0x00475b30` build the one-emitter `CargoMoney_DollarSign` and
|
||
`SpendMoney_DollarSign` bundles; `0x00475a90` builds the one-emitter `SelectObject` bundle;
|
||
`0x00475bd0` builds the five-emitter directional construction bundle from `Construct_Pos`,
|
||
`Construct_Left`, `Construct_Right`, `Construct_Back`, and `Construct_Forward`; `0x00475dc0`
|
||
selects between one-emitter `Mist` and `MistSmall`; and `0x00475e30` builds the one-emitter
|
||
`Vent` bundle. The next local owner above that catalog is grounded too: `0x00475ed0` is the
|
||
selector-driven named-bundle dispatcher that chooses one of those builders from the caller
|
||
selector, mirrors the first emitter's attachment token into `[slot+0x04]`, stores caller mode
|
||
into `[slot+0x34]`, and when that mode equals `1` links the finished slot into the global active
|
||
list `0x006cea74/0x006cea78/0x006cea7c`. So that specialization-side transient path now has a
|
||
much broader data-backed effect catalog and a concrete selector-driven bundle owner above it, not
|
||
just the earlier broken-down bundles.
|
||
One adjacent train-side effect strip is bounded now too, and it should stay separate from the
|
||
concrete placed-structure specialization family. `0x0045d130` resolves one owner profile
|
||
through `0x006ada84`, allocates a `0x141`-byte handle, initializes it through `0x00554830`
|
||
using one mode-selected train sound stem from the tiny selector at `0x0045d22e`, applies two
|
||
fixed parameter writes through `0x00554340` and `0x00554450`, stores the result at `[this+0x336]`,
|
||
and registers it through `0x0052da00`. `0x0045d260` is the paired live-handle updater: it clamps
|
||
one caller-scaled rate into `0x1f40..0xac44`, forwards that through `0x005542c0`, pushes the
|
||
caller gain through `0x00554450`, and when the current handle mode at `[handle+0x138]` equals
|
||
`1` also forwards zero through `0x005543f0`. The broader owner above both helpers is
|
||
`0x0045d2e0`: it republishes the current world anchor through `0x0052e720`, updates an existing
|
||
live sound handle at `[this+0x346]` when one exists, or otherwise selects one new sound stem from
|
||
fixed `Train_Burning.wav`, fixed `Train_Breakdown_loop.wav`, or one dynamic table-driven name
|
||
after the `0x0041b8f0 -> 0x004a8840` branch, then creates the fresh sound handle through
|
||
`0x00531e50`, stores it at `[this+0x346]`, sets fixed flag bits `0x18`, seeds two scale fields
|
||
from the chosen mode factor, and clears the three train-state latches `[this+0x33a/+0x33e/+0x342]`
|
||
again. So the neighboring `0x0045d130/0x0045d260/0x0045d2e0` family is now bounded as a
|
||
train breakdown-or-burning sound/effect handle strip rather than more placed-structure emitter
|
||
state.
|
||
The larger owner above that train-side strip is bounded now too. `0x0045d4b0` optionally clears
|
||
prior state through `0x00455610`, copies the caller primary and secondary stems into
|
||
`[this+0x32e]` and `[this+0x332]`, probes the named-bank owner `0x006d4020` for the secondary
|
||
stem, then falls back through the primary stem and the suffixed `_C.tga` form. It resolves one
|
||
`ServicePoint.3dp` payload into `[this+0x23e/+0x23a]`, one `Body.3dp` payload into
|
||
`[this+0x242/+0x246]`, counts existing `%1_Truck%2.3dp` variants into `[this+0x31a]`, allocates
|
||
the larger per-variant table at `[this+0x316]`, and then enters the later subloops that fill the
|
||
cargo-icon, bogie, drivewheel, piston, connecting-rod, coupling-bar, body, and track-point
|
||
bands. That keeps the `0x0045d130/0x0045d260/0x0045d2e0` sound helpers nested under a broader
|
||
train visual/profile preload owner rather than floating as an isolated sound-only strip.
|
||
The release and load sides of that same train family are bounded now too. `0x0045e390` drops the
|
||
optional sound handle `[this+0x346]` through `0x00531ef0` plus the mode-gated `0x005317b0` path,
|
||
clears the live train-effect handle root `[this+0x336]` by re-entering `0x0045cc90(0)` and
|
||
`0x0045cf40(0)`, iterates the variant table at `[this+0x316]` to free per-row pointer arrays,
|
||
two heap buffers, and any nested owned list rooted at `[row+0x0c]->[+0x75]`, then frees the main
|
||
table and the two payload strings `[this+0x32e]` and `[this+0x332]`. `0x0045e530` is the
|
||
load-side owner: it opens tags `0x61a9` and `0x61aa`, reads two heap strings, optionally rewrites
|
||
the first string by scanning the live collection at `[0x006d4020+0x429b8]`, rebuilds the train
|
||
visual family through `0x0045d4b0` with unit scale, republishes the early per-row handles through
|
||
`0x005548d0`, and under scenario latch `[0x006cec78+0x46c34] > 0x2585` also enters the optional
|
||
child-record branch under tag `0x61b2` before closing `0x61ab`. That makes the train-side strip a
|
||
real payload-owned family with explicit preload, service, load, and teardown phases rather than a
|
||
one-off visual helper.
|
||
Two shared selector-slot toggles under that same family are bounded now too. `0x0045cc90` owns
|
||
the three selector-driven effect slots at `[table+0x34]`, `[table+0x38]`, and `[table+0x3c]`:
|
||
in build mode it allocates selectors `1`, `2`, and `3` through `0x00475ed0`, reseeds their
|
||
shared anchors through `0x00475010/0x00475030`, and then enables every live emitter in the main
|
||
row-object list by writing byte `1` into `[emitter+0x1d8]`; in release mode it tears those same
|
||
three slots down through `0x00475100`, clears the table fields again, and disables the same
|
||
emitter list by writing byte `0`. `0x0045cf40` is the same pattern for selector `5` into
|
||
`[table+0x40]`. So the train visual family now has one explicit selector-slot toggle layer above
|
||
the named `0x00475ed0` bundle catalog, rather than touching those effect slots only through the
|
||
broader load and teardown owners.
|
||
One smaller service leaf under that same family is grounded now too. `0x0045e8c0` walks the
|
||
fixed 32-entry row-object strip rooted at `[this+0x277]` and dispatches vtable slot `+0x10` on
|
||
every live row object. When the caller supplies a valid selected row index instead of `-1`, it
|
||
re-enters that selected row through vtable slot `+0x0c`, and when the paired per-row flag byte in
|
||
the neighboring strip is nonzero it also pushes `0,0,1.0f,1.0f` through `0x0052eab0` on that
|
||
selected row object. The current grounded callers at `0x0041c680` and `0x0041c69a` derive the
|
||
selected row from byte `[cargo+0x20]`, so this is best read as the row-object service plus
|
||
selected-entry refresh leaf under the train visual family, not a generic object-list sweep.
|
||
One adjacent helper block is tighter now too, and it should stay separate from the concrete
|
||
`0x005c8c50` vtable rather than being folded into it. The small predicates
|
||
`0x0040cc40/0x0040cc60/0x0040cc80` all follow the same `[this+0x173] -> 0x0062b268` chain into
|
||
one linked candidate/profile record. `0x0040cc40` returns whether candidate subtype byte
|
||
`[candidate+0x32]` equals `1`, `0x0040cc60` returns raw candidate byte `[candidate+0xba]`, and
|
||
`0x0040cc80` returns the stricter conjunction `subtype == 1 && class == 3` using class byte
|
||
`[candidate+0x8c]`. The current grounded caller for all three is
|
||
`world_grid_refresh_projected_rect_sample_band_and_flag_mask` `0x00418610`, where they derive
|
||
the two boolean mode inputs for `0x00415020`; that makes them a shared candidate-profile helper
|
||
cluster adjacent to the specialization family, not direct overrides in the `0x005c8c50` table.
|
||
The neighboring `0x0040ccf0` stays on the same “adjacent but not the same vtable” side of the
|
||
boundary: it resolves one linked instance through `0x0047de00`, follows that instance's vtable
|
||
`+0x80` owner chain, and returns candidate class byte `[candidate+0x8c]`. Current grounded
|
||
callers at `0x00480fb5` and `0x004b03ce` compare that returned class against `3` and `4`, so the
|
||
current safest note is simply “linked-instance candidate-class reader.” One gated collection-side
|
||
scan in the same neighborhood is bounded now too. `0x0040cd10` first requires shell latch
|
||
`[0x006cec74+0x1c3]` and creation-mode byte `[this+0x3d4] == 1`, then resolves the current
|
||
subject's center world-grid cell through `0x00455f60`, reads the local site roster count and id
|
||
list at `[cell+0xeb]` and `[cell+0xef]`, and resolves each listed placed-structure id through
|
||
`0x006cec20`. Its current grounded caller is the broader collection sweep at `0x00413860`, so
|
||
the strongest current read is a gated center-cell site-roster scan rather than one more direct
|
||
specialization override.
|
||
One small neighboring world-grid helper is grounded cleanly enough to keep too. `0x0040ccd0`
|
||
takes one live world root, one X-like index, and one Y-like index, multiplies the Y-like term by
|
||
world width `[world+0x2145]`, adds the X-like term, scales the resulting slot by fixed cell
|
||
stride `0x1d7`, and returns the corresponding cell pointer under base `[world+0x2129]`. Current
|
||
grounded callers include the placed-structure cargo-service bitset sweep around `0x0042c386` and
|
||
several world-grid overlay passes in the `0x004525bc..0x00452bb2` range, so that helper is now
|
||
best read as the shared `(x,y) -> world-cell*` resolver rather than another object-specific
|
||
method.
|
||
The next sibling table at `0x005c9750` is tighter now too, though still not fully decoded. The
|
||
structural anchor is `city_database_entry_collection_refresh_records_from_tagged_bundle`
|
||
`0x00474540`: that load-side owner stages bundle tags `0x61a9..0x61ab`, iterates one
|
||
collection, and dispatches each entry through vtable slot `+0x40`.
|
||
In `0x005c9750`, that same slot resolves into the sibling record family beside
|
||
`0x0041ab70/0x0041ab80`, which is enough to treat the table as the city-database entry family
|
||
rather than a generic unresolved runtime object. The small load-side slot `0x0041ab70` simply
|
||
jumps into `0x0045c6f0`, which restores two strings into `[this+0x32e]` and `[this+0x332]`,
|
||
stages the same `0x61a9/0x61aa/0x61ab` tag family, and iterates the child runtime band rooted at
|
||
`[this+0x316]`. The one real behavioral slot we recovered there is `0x0041ab80`: it refreshes
|
||
one named handle through owner `0x006d4020`, writes the resulting handle into `[this+0x1c]`,
|
||
queries three base floats through `0x0045c480`, and returns one scaled float derived from the
|
||
first queried component. That method is currently called from later world-side branches at
|
||
`0x0046e4f7`, `0x004aafee`, and `0x004ab020`. The exact user-facing semantic of the handle still
|
||
is not grounded, but the leftover rows in the same table are now bounded as low-value
|
||
constant-return stubs rather than a meaningful unresolved behavior seam. The family boundary is
|
||
therefore no longer arbitrary: this is now the current city-database entry vtable cluster, not
|
||
another placed-structure specialization. One correction matters here too: the lower
|
||
`0x00455660/0x00455800/0x00455810/0x00455930` helpers are no longer city-only. Local `.rdata`
|
||
now shows the same shared slots under both the city-entry table `0x005c9750` and the sibling
|
||
`Infrastructure` table `0x005cfd00`, whose constructors at `0x0048a240/0x0048a2dc/0x00490a3c`
|
||
all re-enter `0x00455b20`, install `0x005cfd00`, and seed the same scalar-band family through
|
||
`0x00455b70` with the literal stem `Infrastructure`. So the safest current family name for those
|
||
low helpers is the broader `0x23a` runtime-object band rather than city-entry-only. `0x00455800`
|
||
and `0x00455810` are simply the paired normalized coordinate getters over `[this+0x1e2]` and
|
||
`[this+0x1ea]`, which explains why they recur all over the city-side, route-link, and
|
||
placed-structure placement code. The narrower helper `0x00455660` sits above those getters: it
|
||
scales the caller-supplied normalized coordinate pair, converts it through
|
||
`0x006d4024 -> 0x0051f090 -> 0x00534490`, adds a caller-supplied integer height bias, optionally
|
||
rounds that height through `0x005a10d0` when the auxiliary-preview gate `0x00434050` is active,
|
||
and finally publishes the resulting world-anchor triplet through `0x00530720`. One
|
||
serializer-side sibling is bounded too. `0x00455930` queries two triplet-like scalar bands
|
||
through `0x0052e720` and `0x0052e880` and writes the resulting six dwords through `0x00531030`;
|
||
its load-side stream counterpart `0x00455870` reads the same six four-byte lanes back through
|
||
`0x00531150`, republishes the first triplet through `0x00530720`, republishes the second through
|
||
`0x0052e8b0`, and returns the summed byte count. The neighboring tagged string-triplet serializer
|
||
`0x004559d0` is now no longer reversed either: it writes bracket tags `0x55f1/0x55f2/0x55f3`
|
||
through `0x00531340`, emits the three string lanes `[this+0x206/+0x20a/+0x20e]` through
|
||
`0x00531410`, dispatches vtable slot `+0x4c`, then re-enters `0x0052ec50` before the closing
|
||
tag.
|
||
|
||
### Shared Runtime-Object and Support Families
|
||
|
||
The low helper strip beneath that shared family is tighter now too: `0x0052ecd0` is the
|
||
common local-state reset that clears the list and handle roots, resets the string/scalar side
|
||
bands, preserves only selected low bits of `[this+0x20]`, and reseeds the recurring default
|
||
`1.0f` lanes; `0x0052ebd0/0x0052ec50` are the load/save companions for the two flag bits stored
|
||
in that same byte; `0x0052eb90` releases every entry hanging from list root `[this+0x79]`
|
||
through `0x00554d50`; and `0x0052eca0` is the grouped-table cursor over `[this+0x14]`,
|
||
`[this+0x21]`, and `[this+0x3a]` that returns the next `0x45`-byte subrecord in the current
|
||
group when one exists. The next shared initializer `0x0052edf0` then binds caller
|
||
pointer `[this+0x04]`, resolves optional handles into `[this+0x10]` and `[this+0x1c]`, copies
|
||
one anchor triplet into `[this+0x1e2/+0x1e6/+0x1ea]`, sets bit `0x08`, and seeds packed color
|
||
`[this+0x43] = 0x007f7f7f`; its release-side siblings `0x0052eeb0` and `0x0052ef10` clear the
|
||
two owned list roots `[this+0x79]` and `[this+0x7d]` through distinct per-entry destructors
|
||
before freeing the list roots themselves. The broader release body `0x0052ef70` sits above that
|
||
strip: it clears the active shell preview-owner latch when it still points at `this`, drops the
|
||
dependent handle at `[this+0x0c]`, recursively tears down the nested object list `[this+0x75]`,
|
||
clears sibling owned list `[this+0x81]`, detaches any world binding rooted at `[this+0x04/+0x08]`,
|
||
and finally frees the optional handles at `[this+0x10]` and `[this+0x1c]`. The next shared
|
||
dirty-bit helper `0x0052f120` is now bounded too: when byte `[this+0x20]` still carries bit
|
||
`0x02`, it rebuilds the cached 16-dword transform-style block at `[this+0x14e]` from scale
|
||
`[this+0x36]`, anchor triplet `[this+0x1e2/+0x1e6/+0x1ea]`, and either the live local vector
|
||
lanes `[this+0x4b/+0x4f/+0x53]` or the stored fallback block at `[this+0x18e]`, then flips the
|
||
dirty bit over to the cached-ready bit `0x04`. The next two adjacent helpers are bounded too:
|
||
`0x0052f1e0` is a pure five-vec3 boolean geometry predicate built from signed-volume or
|
||
separating-plane style tests, and `0x0052f370` is the quantized selector that rounds world
|
||
coordinates, folds them through table `0x006d9098`, samples one grouped metric through owner
|
||
`[this+0x04]`, updates byte `[this+0x5c]`, and then chooses the active `0x45`-byte subrecord by
|
||
storing index `[this+0x21]` and pointer `[this+0x18]`. The adjacent emission owner `0x0052f500`
|
||
is tighter now too: it starts from that selected grouped subrecord, snapshots the global packet
|
||
write pointer and remaining count at `0x00cc3b64/0x00cc3b5c`, optionally refreshes the cached
|
||
transform block and applies the five-vec3 predicate when state bit `0x01` is active, and then
|
||
hands off to the concrete emitters `0x0052dd00` and `0x0052e060`. Those two helpers are no
|
||
longer best read as shell-only batch expanders. `0x0052dd00` emits the materialized group packet
|
||
rows as one `0x20`-byte segment-record window for the layout-state presentation owner
|
||
`0x005490b0`, while `0x0052e060` emits the same row family as one `0x18`-byte vertex24 window
|
||
for the shell-side presentation branch `0x00528821`. The next shared helpers under that emission
|
||
band are now
|
||
bounded too: `0x0052d8a0/0x0052d950/0x0052d9a0` are the three owned-list registration helpers for
|
||
child objects and copied-anchor records on `[this+0x75]`, `[this+0x79]`, and `[this+0x7d]`;
|
||
`0x0052daa0` is the explicit grouped-subrecord selector; `0x0052db10` materializes the current
|
||
group's packet rows after storing scalar `[this+0x69]`; and `0x0052dc00` then buckets those
|
||
materialized rows by four float thresholds. A concrete owner above that strip is grounded now
|
||
too: `vehicle_visual_build_exhaust_running_gear_track_and_mantlet_attachment_children`
|
||
`0x004858e0` uses those same registration and grouped-row helpers while building
|
||
`%1_ExhaustSmoke.3dp`, `%1_MuzzleFlash.3dp`, `%1_RoadWheelL%2.3dp`,
|
||
`%1_RoadWheelR%2.3dp`, `%1_IdlerWheelL.3dp`, `%1_IdlerWheelR.3dp`,
|
||
`%1_DriveWheelL.3dp`, `%1_DriveWheelR.3dp`, `%1_TrackL.3dp`, `%1_TrackR.3dp`, and
|
||
`%1_MantletLight1.3dp` child records under the broader vehicle-visual owner `0x00485760`.
|
||
The next shared helpers under that emission band are now
|
||
bounded too. `0x0052fb70` is the packed-color propagation helper over `[this+0x43/+0x47]`: when
|
||
shell gate `[0x006d4024+0x114742]` is live it combines stored high-byte state with either dim
|
||
RGB `0x003c3c3c` or full-bright RGB `0x00ffffff`, pushes the same dim-or-bright triplet into the
|
||
child list `[this+0x75]` through `0x0052e680`, and optionally recurses that update over the whole
|
||
child tree; when the shell gate is absent it instead stores the raw byte into `[this+0x47]` and
|
||
only recurses that byte state. `0x0052fd60` then republishes current anchor triplet
|
||
`[this+0x1e2/+0x1e6/+0x1ea]` into every attached entry hanging from list root `[this+0x81]`
|
||
through `0x005545d0`. The heavier relocation sibling `0x0052fdc0` marks the object dirty, adds a
|
||
caller-supplied triplet delta to the same anchor, quantizes old and new X/Z lanes against the
|
||
live world grid, rebinds world handle `[this+0x08]` through `0x00533c20/0x00533bf0` when the
|
||
quantized cell changes, and on success re-enters `0x0052fd60`; out-of-bounds moves restore the
|
||
prior anchor and fail. One more adjacent rotation-side helper is now bounded too: `0x0052ffb0`
|
||
converts the current local 4-dword orientation block at `[this+0x1ce..+0x1da]` into a temporary
|
||
axis-angle representation, scales the recovered angle by the caller float, and rebuilds the
|
||
stored orientation block by re-entering `0x0052e9f0`. The immediate anchor-publish sibling
|
||
`0x00530720` is now explicit too: it is the absolute-triplet form of the same relocation family,
|
||
storing one caller-supplied anchor directly into `[this+0x1e2/+0x1e6/+0x1ea]`, optionally
|
||
rebinding world handle `[this+0x08]` when the quantized X/Z cell changes, and then re-entering
|
||
`0x0052fd60`. The adjacent packet-side query `0x00530030` is bounded as well: it starts from the
|
||
currently selected grouped `0x45`-byte subrecord, snapshots the same global packet source span as
|
||
`0x0052f500`, lazily refreshes cached basis lanes when needed, transforms one caller-supplied
|
||
input triplet through that basis, and then walks the remaining packet span until
|
||
`0x0052f1e0` reports one overlap or the span is exhausted. One sibling-table strip is now
|
||
explicit too. Table `0x005dd1f0` has the tiny wrappers `0x00530640`, `0x00530670`, and
|
||
`0x00530680` as its shared seeded-constructor, reset, and release thunks over `0x0052edf0`,
|
||
`0x0052ecd0`, and `0x0052ef70`, while `0x005305c0` is the small list-bit propagator that sets or
|
||
clears bit `0` in `[entry+0xb0]` across owned list `[this+0x79]`. The first heavier body under
|
||
that same table is now bounded too: `0x00530690` copies one pair of 16-dword cached blocks from a
|
||
source object into `[this+0x10e]` and `[this+0xce]`, refreshes local cached transform
|
||
`[this+0x14e]`, and recurses the same copy into child list `[this+0x75]`. The `Infrastructure`
|
||
side is tighter now too. The optional child
|
||
The next adjacent field-accessor strip is explicit too: `0x00533100/0x00533120` are the indexed
|
||
float set/get helpers for `[this+0x14e4 + index*4]`; `0x00533130/40`, `0x00533150/60`,
|
||
`0x00533170/80`, and `0x00533190/a0` are four direct dword set/get pairs over
|
||
`[this+0x1534]`, `[this+0x1540]`, `[this+0x153c]`, and `[this+0x1544]`; `0x005331b0/c0` are the
|
||
float set/get pair for `[this+0x14e0]`; and `0x005331d0` is the direct getter for `[this+0x1548]`.
|
||
The important caller-side grounding is narrow but real: `0x0052f370` samples one indexed float
|
||
through `0x00533120` while choosing the active grouped subrecord, and `shell_emit_ranked_overlay_cell_items`
|
||
`0x00524780` reads the current threshold pair through `0x00533160` and `0x00533180`. So this
|
||
strip is now bounded as a genuine shared field-accessor family under the same runtime-object
|
||
owner, even though the exact high-level meanings of those fields remain open.
|
||
attach helper `0x0048a1e0` allocates and seeds one fresh `Infrastructure` child and, when the
|
||
owner already has more than one child, clones the first child's two triplet bands into that new
|
||
child before attaching it. The looped rebuild `0x0048dd50` then rebuilds the owner-visible
|
||
`Infrastructure` children one ordinal at a time, tears down the higher extras above ordinal `5`,
|
||
refreshes cached primary-child slot `[this+0x248]` when needed, and finishes with the same
|
||
world-cell and route-side follow-on family around `0x00448a70`, `0x00493660`, and `0x0048b660`.
|
||
The outer owner above that loop is bounded now too: `0x0048dcf0` reads a child count plus one
|
||
optional primary-child ordinal from the tagged stream through `0x00531150`, zeroes `[this+0x08]`,
|
||
dispatches each fresh child through `0x00455a50 -> vtable slot +0x40`, culls ordinals above `5`,
|
||
and restores cached primary-child slot `[this+0x248]` from the saved ordinal. So the rebuild
|
||
strip is consuming an already-materialized child stream rather than parsing the compact side
|
||
buffer directly.
|
||
The upstream handoff is explicit now too: `0x00493be0` is the tagged collection load owner over
|
||
`0x38a5/0x38a6/0x38a7`, and it feeds each live infrastructure record straight into
|
||
`0x0048dcf0` after restoring one shared owner-local dword into the `0x90/0x94` lane. That means
|
||
the `0x38a5` side-buffer seam is now a proven direct upstream feed into the child-stream restore
|
||
owner rather than only a candidate cache or serializer-side neighbor.
|
||
The collection helpers above that handoff are bounded now too: `0x00518140` resolves a non-direct
|
||
live entry through the tombstone bitset and returns the first dword of a `12`-byte row from
|
||
`[collection+0x3c]`, while `0x00518680` loads the non-direct collection header, tombstone bitset,
|
||
and live-id-bound-scaled `12`-byte tables before `0x00493be0` starts iterating. So the remaining
|
||
infrastructure mapping problem is no longer “which generic collection helper is involved?” but
|
||
which fields inside those `12`-byte live-entry rows drive the child-count stream, saved
|
||
primary-child ordinal stream, and per-child tagged callback payloads.
|
||
The child loader family is explicit now too: local `.rdata` at `0x005cfd00` proves the
|
||
`Infrastructure` child vtable uses the shared tagged callback strip directly, with
|
||
`+0x40 = 0x00455fc0`, `+0x48 = 0x00455870`, and `+0x4c = 0x00455930`. So the remaining
|
||
infrastructure problem is row-to-record mapping inside the `0x38a5` stream, not identifying the
|
||
per-child loader family.
|
||
The smaller attach helper `0x00490a3c` is now bounded too: it conditionally allocates one
|
||
`Infrastructure` child from a caller-supplied payload stem, attaches it to the current owner, and
|
||
then seeds three caller-supplied position lanes through `0x00539530` and `0x0053a5b0`. The
|
||
direct disassembly now makes that strip more concrete than the earlier structural note alone:
|
||
`0x0048a1e0` really does clone the first child through paired triplet readers
|
||
`0x0052e880/0x0052e720`, destroys the prior child through vtable slot `+0x18(0)`, allocates the
|
||
new `0x23a` object, seeds it through `0x00455b70` with literal payload seed `0x005c87a8`, and
|
||
then republishes the two sampled triplet bands through `0x0052e8b0` and `0x00530720` after
|
||
attaching through `0x005395d0`. The non-clone branch still seeds the same literal
|
||
`Infrastructure` child but attaches through `0x0053a5d0` instead. That means the next unknown is
|
||
no longer whether this strip owns the child/rebuild seam at all, but which exact `0x38a5` rows
|
||
or compact-prefix regimes map to the child count, saved primary-child ordinal, and per-child
|
||
`+0x40` payload callbacks inside that direct load path, and which restored child fields still
|
||
retain those embedded name-pair semantics before the later route/local-runtime family runs.
|
||
The
|
||
remaining closure target above the grounded `0x38a5` side-buffer seam is therefore narrower now:
|
||
the next safe static pass should start at this exact attach/rebuild strip, not at the whole
|
||
placed-structure family. The key open questions are whether the compact-prefix/name-pair groups
|
||
feed the first-child triplet clone lane, the caller-supplied payload-stem lane, or only the
|
||
later route/local-runtime follow-on family; whether cached primary-child slot `[this+0x248]`
|
||
becomes the first owner-visible bridge between those side-buffer groups and route-entry rebuild;
|
||
and which child fields or grouped rows absorb the side-buffer payload before
|
||
`0x00448a70/0x00493660/0x0048b660` become relevant. That keeps the top-ranked next mapping target
|
||
explicit as `0x0048a1e0`, `0x0048dd50`, and `0x00490a3c`, with the serializer/load companions and
|
||
route/local-runtime follow-ons staying secondary until one concrete child-consumer bridge is
|
||
grounded.
|
||
The
|
||
direct route-entry side of the same family is no longer anonymous either: `0x0048e140`,
|
||
`0x0048e160`, and `0x0048e180` are the three direct resolvers over owner fields
|
||
`[this+0x206/+0x20a/+0x20e]` into the live route-entry collection `0x006cfca8`. Another shared
|
||
sibling family is tight enough now too: the real
|
||
packed-byte-triplet owner is `0x0052e680`, and the two local
|
||
wrappers `0x00455820` and `0x00455840` both force its recursion flag on. `0x00455820` forwards
|
||
three explicit byte arguments, while `0x00455840` unpacks one packed `u24`-style dword into
|
||
three byte lanes first. The downstream setter writes packed byte-triplet lane `[this+0x43]`,
|
||
defaults that lane to `0x007f7f7f` when all three bytes are zero, and when recursion is enabled
|
||
it walks child list `[this+0x75]` through `0x00556ef0/0x00556f00` and re-applies the same packed
|
||
update recursively to every child. The shared formatter thunk `0x00455860` is no longer a blind
|
||
jump target either: `0x00530820` now reads as the common group-selection status-label formatter
|
||
over the same `0x23a` family. It only answers when shell gate `[0x006d4024+0x1146be]` is live,
|
||
state bit `0x10` is clear, vtable slot `+0x14` says the current object should answer, and the
|
||
owned-entry bit propagator `0x005305c0` succeeds. Under that gate it formats one caller-owned
|
||
text buffer from either a fixed fallback block, a simple mode-`1` `X` or index form, or a
|
||
grouped-table form built from the current `0x45`-byte subrecord's float lane plus current index
|
||
`[this+0x21]`. The sibling `Infrastructure` table `0x005cfd00` also still carries three tiny
|
||
fixed-return slots after that shared formatter path: two return literal `0x46`, and one returns
|
||
fixed float `1.25f`, so those slots are now bounded as small table constants rather than as
|
||
missing behavior. One nearby global helper family is bounded enough too: `0x005309d0` lazily
|
||
clears and arms the indexed table rooted at `0x00ccb880`, `0x00530a00` services or releases one
|
||
slot in that table according to its local state dword, `0x00530b70/0x00530b90/0x00530c10` query
|
||
one slot's primary handle metric, primary handle, and payload-length lanes, and `0x00530ba0`
|
||
performs the release-side cleanup for one slot's owned buffers. Current callers are broad
|
||
enough that the table's exact resource type still stays open, but the init/service/query/cleanup
|
||
split is now grounded. The broader bundle or stream slot layer under that same table is bounded
|
||
now too: `0x00530c80` is the common open-or-reuse entry for named slots, `0x00531030` and
|
||
`0x00531150` are the shared write and read byte pumps, `0x00531340` and `0x00531360` are the
|
||
four-byte tagged-header wrappers used all over map, setup, world, and runtime bundle code, and
|
||
`0x00531380/0x00531410` are the shared variable-length heap-string load/save helpers built on
|
||
top of those byte pumps. The immediate neighbors are bounded too: `0x00531490` writes one raw
|
||
NUL-terminated string without the length prefix, `0x005314b0` is a callback-driven selector over
|
||
global `0x00ccba08`, and `0x00531500` is the small override-active gate for the neighboring audio
|
||
owner family: it only returns true when `[this+0x04] == 1` and global `0x00ccb9f4` is nonzero.
|
||
That gate is no longer owner-unknown either, because `0x00531a10` raises it before the shutdown
|
||
or fade loop and clears it again on exit, while most of the adjacent wrappers require the inverse
|
||
state `0x00ccb9f4 == 0`. The next adjacent strip is now bounded
|
||
as one audio-service gate strip rather than anonymous wrappers: `0x00531520..0x005317b0`
|
||
mostly share the inverse gate `[this+0x04] == 1 && 0x00ccb9f4 == 0`, then forward into one of
|
||
three global owners `0x00ccba00`, `0x00ccb9f8`, or `0x00ccb9fc`. The clearest member of that
|
||
strip is still `0x005315c0`, a plain 3x4 affine point transform over three caller-supplied
|
||
float pointers, but the adjacent wrappers are tighter now too: `0x00531520` now clearly gates
|
||
the primary owner `0x00ccba00` through status-code predicates `0x00557c90/0x00557cb0` and then
|
||
clears the current handle through `0x00557cd0`, which unregisters it from global slot table
|
||
`0x00d973b8` and optionally notifies callback `0x00d973e0`; `0x00531620` queries the current
|
||
selected Miles 3D provider-name pointer or fixed fallback pointer `0x00ccba0c`;
|
||
`0x00531640/0x005316d0` query the selected Miles 3D provider index and preferred-flag by
|
||
callback-selected provider name;
|
||
`0x00531710/0x00531730` forward listener position and orientation into the Miles 3D service;
|
||
`0x00531750/0x00531770` set and query the active Miles 3D speaker type; `0x00531790` forwards
|
||
keyed non-3D sample-volume refresh; and `0x005317b0` selects keyed sample-record release across
|
||
the non-3D and Miles 3D owners. The next
|
||
adjacent owner strip is bounded enough now too: `0x00531800/0x00531840` are the null-`0x00ccb9f4`
|
||
guarded wrappers that mark pending flag `0x100` on keyed non-3D and Miles 3D sample records
|
||
through `0x0056ae80(0x00ccb9f8)` and `0x00569cf0(0x00ccb9fc)` with scoped reentrancy counter
|
||
`0x00ccb9f0`; `0x00531880` releases optional handle `[this+0x4c]` through
|
||
two function-pointer calls when global `0x00624d58 == 1`; `0x005318b0` spin-waits for that same
|
||
reentrancy counter to drain; `0x005318c0` picks between owners `0x00ccb9f8` and `0x00ccb9fc`
|
||
from global selector `0x00ccba04`; and `0x005318f0` is the shared constructor that allocates
|
||
and initializes globals `0x00ccb9f8`, `0x00ccb9fc`, and `0x00ccba00`, then arms mode flag
|
||
`[this+0x04] = 1` when all three are live. The next owner block is no longer just a loose
|
||
cluster either: `0x00531a10` is the full teardown path for that same family, first raising
|
||
`0x00ccb9f4`, optionally fading scalar lanes `[0x00ccba00+0x104]` and `[0x00ccb9fc+0x58]`
|
||
through `0x00557d90/0x00569ae0/0x00569ca0` plus a `0x10`-tick sleep, then spin-waiting on
|
||
`0x005318b0`, releasing optional handle `[this+0x4c]`, shutting the three globals down, and
|
||
clearing `[this+0x04]` again. `0x00531c00` is the symmetric rebuild side: it force-calls
|
||
`0x00531a10(this,1)`, reconstructs the family through `0x005318f0`, and seeds the default live
|
||
state through `0x005696b0`, `0x00569660`, `0x00557d90`, `0x0056a8e0`, and `0x00569ae0` from
|
||
shell-owned scalars. The smaller strip between them is bounded structurally too: `0x00531d30`
|
||
refreshes the primary scalar and dispatches `0x00557e50`; `0x00531dc0` is the dual-scalar idle
|
||
predicate over `[0x00ccb9f8+0x20]` and `[0x00ccb9fc+0x58]`; `0x00531e50` is the string-driven
|
||
sibling of `0x00531e10`, tail-jumping into `0x0056a520` when the same family is ready; `0x00531e90`
|
||
stages one 16-dword local payload block into `[this+0x08..+0x44]` and forces
|
||
`[0x00ccb9fc+0x60] = 2`; `0x00531ed0` and `0x00531ef0` are the small active-mode field and
|
||
selected-hash-root queries; `0x00531f40` services `0x00ccb9f8/0x00ccb9fc` and clears staged flag
|
||
`[this+0x48]`; `0x00531f90` registers one of the guarded callbacks `0x00531800/0x00531840`; and
|
||
`0x00531fd0` is the timed primary-scalar transition service that coordinates `0x00ccba00` with
|
||
globals `0x00624d58/0x00624d60` under the same reentrancy counter `0x00ccb9f0`. The local
|
||
controller layer above that family is bounded now too: `0x00532150/0x00532200` are the
|
||
construct/destruct pair for the controller object itself, `0x00532230` rebuilds from one
|
||
callback-selected entry through `0x005314b0 -> 0x00531c00`, and `0x00532260` rebinds primary
|
||
handle `[this+0x4c]` while registering transition callback `0x00531fd0` and seeding selector
|
||
`[this+0x50]`. The subordinate Miles 3D provider strip under those owners is now grounded too:
|
||
`0x00569400` enumerates providers into the global `0x00d97bc0` table and marks only the names
|
||
`Miles`, `Dolby`, and `RAD` as preferred, `0x005694f0` resolves one enumerated entry by name,
|
||
`0x00569380` opens the selected provider, caches room-type capability in `0x00625c7c`, tests
|
||
speaker-type support, and seeds fixed distance factor `0x3e806d98`, `0x00569540/0x005695d0`
|
||
are the setter/getter for global speaker-type selection `0x00625c78`, `0x00569660` and
|
||
`0x005696b0` lazily open the listener and push the live position/orientation basis through
|
||
`_AIL_set_3D_position` and `_AIL_set_3D_orientation`, `0x00569720/0x00569730` expose the
|
||
selected provider's name pointer and preferred-flag field, `0x00569830` tries the fixed
|
||
fallback order `Creative Labs EAX (TM)`, `DirectSound3D 7+ Software - Pan and Volume`,
|
||
`Miles Fast 2D Positional Audio`, then `Miles`, and `0x005698a0` is the broader bootstrap owner
|
||
that enumerates, binds the requested or fallback provider, and allocates the local provider-side
|
||
state tables only when a live Miles 3D provider actually comes up. The next local seam is
|
||
grounded too: `0x00569990` allocates the current-provider 3D sample-handle pool, building the
|
||
free-pool hash at `[this+0x04]`, the active-list owner at `[this+0x08]`, and one `0x5c`-byte
|
||
record slab for up to `0x20` sample handles; `0x00569750` pops the oldest live sample record
|
||
from the active list and refreshes global serial `0x00625c80`; `0x005697d0` returns tracked
|
||
sample handles to the free pool or releases untracked ones directly; `0x00569d20` tears the
|
||
local free-pool and active-list tables down; and `0x00569d90` is the broader shutdown side that
|
||
drains the live sample state, closes the listener, releases the pool tables, restores the
|
||
room-based speaker type when needed, and finally closes the provider. The last clean local edge
|
||
in that sample branch is `0x00569ea0`, which explicitly drains every tracked sample handle
|
||
through `_AIL_release_3D_sample_handle` and then clears the pool count and table fields. The
|
||
next broader service layer is now bounded too: `0x00569f30` is the sample-command dispatcher over
|
||
request types `0..8`, combining the local record helpers with the Miles sample controls for
|
||
volume, stop/resume, position, distances, effects level, occlusion, playback rate, and the
|
||
orientation-side call at `0x001c83f8`; `0x0056a330` is the acquire-or-evict owner that either
|
||
recycles one free sample record or reclaims a lower-priority live one; `0x0056a520` is the
|
||
configure-and-optionally-start owner that binds the file payload, loop count, world position,
|
||
range scalars, callback, and initial playback state; and `0x0056a6e0` is the clean constructor
|
||
that seeds the sample-service object defaults before the later destructor-side tail at
|
||
`0x0056a740+`. The adjacent non-3D Miles sibling is now bounded too: `0x0056a770` opens the
|
||
digital driver and seeds the keyed owner table, `0x0056a7c0` allocates the non-3D sample-handle
|
||
pool and record tables, `0x0056a880` resets the active-sample registry, `0x0056a8e0` updates
|
||
the non-3D master scalar and refreshes active samples, `0x0056a970` is the non-3D sample-record
|
||
dispatcher over release, volume, stop/resume, pan, playback-rate, and deferred-start paths,
|
||
`0x0056abe0` is the small pool acquire helper with optional payload attach, `0x0056ad20` is the
|
||
configure-and-optionally-start owner for one non-3D sample record, `0x0056acd0` is the keyed
|
||
volume-level refresh helper,
|
||
`0x0056ae30` dispatches selector `3` over the active registry, `0x0056ae80` marks pending flag
|
||
`0x100` by key, `0x0056aeb0` closes the digital driver, and `0x0056aee0/0x0056af20` are the
|
||
constructor/destructor pair for that sibling service object. One other sibling table is no longer
|
||
anonymous either: local `.rdata` at `0x005c9a28` is the actual world-region record-family vtable
|
||
root, while the smaller collection table at `0x005c9ae0` is the live region manager stored at
|
||
`0x0062bae0`. The same root now also resolves the restore-side virtual strip precisely:
|
||
`0x0041f5c0` is slot `+0x40`, `0x0041f650` is slot `+0x44`, `0x00455870` is slot `+0x48`, and
|
||
`0x00455930` is slot `+0x4c`.
|
||
Constructor-side evidence is the anchor here. `0x00421660` allocates one `0x389`-sized region
|
||
row, resolves the new record, and forwards into `0x00421200`, which seeds region id
|
||
`[region+0x23a]`, class `[region+0x23e]`, profile collection `[region+0x37f]`, name buffer
|
||
`[region+0x356]`, shell gate `[region+0x385]`, and the default `Marker09` stem before re-entering
|
||
`world_region_rebuild_profile_collection_and_seed_class_split_default_weights` `0x00420ed0`.
|
||
The small manager-side constructor `0x00421430` is the matching `0x0062bae0` collection owner.
|
||
That family split also makes the behavioral overrides read cleanly: `0x0041f680` first refreshes
|
||
the current global preview/helper owner through `0x00455de0` and then forwards mode `1` plus
|
||
region id or preview handle `[region+0x23a]` into `0x004cf830`; `0x0041f720` formats
|
||
`[region+0x356]`, publishes the resulting shell text, and conditionally enters preview mode
|
||
through `world_switch_preview_or_tool_mode_and_seed_parameter_block` `0x00452fa0` with action
|
||
`0x12` when world state `[0x0062c120+0x2175]` is `0` or `0x15`; `0x0041f7b0` publishes one
|
||
fixed shell payload and only then clears that preview path through
|
||
`world_clear_current_preview_mode_and_reseed_mode_0x15_if_latched` `0x00453510` when the same
|
||
world state is `0x12`. The same table also has a tighter adjacent helper strip now:
|
||
`0x0041f6a0` is the direct `[region+0x37f] -> 0x00517cf0` profile-slot-count query,
|
||
`0x0041f6b0` is the rounded normalized-coordinate
|
||
world-scalar query above `0x0044afa0`, and that deeper helper is no longer opaque: it first
|
||
computes one distance-like term from the current cell to global preview-anchor fields
|
||
`[0x0062be68+0x24/+0x1c]` through the precomputed radial helper `0x0051dc00`, samples the
|
||
companion float raster `[world+0x1605]` at the current cell plus two 8-direction rings, keeps
|
||
the strongest local rise above the center sample, adds one thresholded preview-scalar bias from
|
||
`[0x0062be68+0x20]`, and then adds `0x32` more when the small global gate `0x0041fff0` passes.
|
||
That gate itself now reads as a shared shell/preview threshold test: it returns true when
|
||
`[0x006cec74+0x2bb] == 2`, or when the same mode dword is merely nonzero and preview scalar
|
||
`[0x0062be68+0x20]` exceeds the float threshold at `0x005c9a9c`. `0x0041f6e0` resolves the
|
||
current center world-grid cell and checks one packed `u16` token through `0x0042b2d0`, and
|
||
`0x0041f6f0` is the raw byte getter over `[this+0x42]`. One nearby mode-gated flag reader is
|
||
bounded too: `0x0041f910` returns
|
||
literal `1` when shell mode gate `0x004338c0` is inactive or the object class dword
|
||
`[this+0x23e]` is nonzero, and only on the class-0 path does it return the same byte
|
||
`[this+0x42]`. That gate itself is tighter now too: `0x004338c0` is just the normalized boolean
|
||
wrapper over `0x004d4150`, which returns nonzero when the shell-side owner field at `0x006d07b4`
|
||
is live. The release side under that same sibling family is bounded too: `0x00420650`
|
||
lazily seeds `[this+0x317]` from shell-profile word `[0x006cec78+0x0d]` before re-entering
|
||
`0x00420350`, and that body is now bounded as the local scalar refresh over `[this+0x31b]`:
|
||
it compares the seeded word against the current shell-profile word, maps the delta through one
|
||
bounded piecewise float curve, and applies one extra affine adjustment when `[this+0x23e]` is
|
||
nonzero. The current split is tighter now: zero seed yields `1.0f`, deltas `0..2` rise above the
|
||
base through the `(3-delta)` branch, deltas `3..5` stay flat at `1.0f`, and deltas `6+` taper
|
||
back down through the scaled `(delta-6)` path after clamping at `0x14`. `0x00420670` then frees
|
||
the optional dynamic payload at
|
||
`[this+0x37f]`, clears the cached `u16` link chain through `0x0041f8d0`, and tails into base
|
||
cleanup `0x00455d20`; and the small collection-side wrapper `0x00421700` simply resolves one
|
||
entry id, re-enters `0x00420670`, and erases that id from the owning collection. The
|
||
city-entry family also now has one tighter
|
||
helper-object branch. `0x00474030`
|
||
switches over mode enum `0..10`, maps those cases into `0x00475ed0` with selector families
|
||
`4/0xd/0xe` and fixed scalar presets `0.5/0.75/1.0/1.5/2.0`, and on success publishes the
|
||
caller-supplied world triplet through `[helper+0x4]`. The refresh helper `0x00474260` first
|
||
reloads payload through `0x00455fc0`, then samples the current normalized coordinates plus one
|
||
world-height scalar from `0x00448bd0`, and rebuilds `[this+0x23a]` through that same
|
||
mode-selected helper builder using mode `[this+0x242]`. The surrounding collection-side and
|
||
teardown helpers are tight enough now too. `0x004743d0` and `0x00474400` are the two release
|
||
siblings over the same helper field `[this+0x23a]`: both destroy that helper through `0x00475100`
|
||
when live and clear the field, but `0x004743d0` tails into the smaller base cleanup
|
||
`0x00455650`, while `0x00474400` tails into the heavier dynamic-payload cleanup `0x00455d20`.
|
||
The small predicate `0x00474430` simply returns `1` unless shell mode gate `0x004338c0` is
|
||
active, in which case it returns byte `[this+0x42]`; the mode-gated query itself is now bounded
|
||
as one runtime enable byte on that local object family. One level higher, `0x00474450` constructs
|
||
the collection rooted at vtable `0x005ce4a8` with fixed parameters `(0,0,0,0x14,0x0a,0,0)`, and
|
||
bootstrap caller `0x004487a9` stores that collection into global `0x006cea50`. The collection's
|
||
entry path is also bounded now: `0x004744a0` seeds a stack-local temporary entry through
|
||
`0x00474110`, allocates one `0x250`-byte live record, resolves it, constructs it through
|
||
`0x00474130`, and then tears the temporary entry down through `0x004743d0`; `0x00474510`
|
||
resolves one entry id, releases it through `0x00474400`, and removes it from the collection. The
|
||
collection-owned load loop at `0x00474540` now has a direct save-side companion too:
|
||
`city_database_entry_collection_serialize_records_into_tagged_bundle` `0x00474610` opens the
|
||
same `0x61a9/0x61aa/0x61ab` bracket through `0x00531340`, forwards collection metadata through
|
||
`0x00517d90`, and dispatches each record through vtable slot `+0x44`. The refresh side binds the
|
||
selected path context, iterates the current collection, dispatches each record through vtable
|
||
slot `+0x40`, accumulates the returned byte counts, and tears down the temporary entry after each
|
||
record. That still leaves broader semantic questions open, but the current static edges around the
|
||
city-entry family are now largely exhausted. The adjacent scaffolding is bounded too.
|
||
Base helper `0x00455b20` initializes the shared `0x23a`-sized record family by installing base
|
||
vtable `0x005cb1c0`, clearing the scalar bands `[+0x206/+0x20a/+0x20e/+0x22e/+0x232]`, zeroing
|
||
the seven-dword block `[+0x212..+0x22a]`, and re-entering `0x0052ecd0`; that is why it shows up
|
||
not only in the city-entry temporary constructor `0x00474110`, but also in several later object
|
||
construction paths outside the city family. The city collection itself now has a bounded teardown
|
||
side too: `0x00474480` is the small release-and-free wrapper for the collection rooted at
|
||
`0x005ce4a8`, and teardown caller `0x004492c3` uses it before freeing the global collection
|
||
pointer at `0x006cea50`. On the save side, `0x00445713`'s broader package branch re-enters
|
||
`city_database_entry_collection_serialize_records_into_tagged_bundle` `0x00474610` on that same
|
||
global `0x006cea50` collection. Outside the
|
||
city-specific branch, the two tiny dispatch wrappers `0x00455a40` and `0x00455a50` are also now
|
||
bounded as raw vtable-slot helpers: the first jumps through entry slot `+0x44`, while the second
|
||
pushes one caller argument into slot `+0x40` and then clears the global roots
|
||
`0x006acd38/0x006acd3c/0x006acd40`. Finally, `0x00455a70` is now bounded as the generic
|
||
current-position triplet publisher that queries `0x0052e720`, converts through
|
||
`0x006d4024 -> 0x0051f090 -> 0x00534490`, adds a caller-supplied height bias, optionally rounds
|
||
under `0x00434050`, and publishes through `0x00530720`. The temporary-entry constructor and live
|
||
entry constructor are bounded now too. `0x00474110` is the tiny stack-local initializer: it
|
||
re-enters shared base init `0x00455b20`, clears helper fields `[+0x23a]` and `[+0x242]`,
|
||
installs vtable `0x005ce428`, and returns. `0x00474130` is the real live-entry constructor: it
|
||
stores the entry id into `[+0x23e]`, clears the trailing helper payload block `[+0x246..+0x24e]`,
|
||
stores mode `[+0x242]`, derives one world-height scalar from the supplied coordinate pair through
|
||
`0x00448bd0`, builds helper field `[+0x23a]` through `0x00474030`, and then seeds the remaining
|
||
default scalar or flag tuple through `0x00455b70` using the fixed defaults at
|
||
`0x005ce49c/0x005ce4a0/0x005ce4a4`. That broader helper is no longer city-specific either:
|
||
`0x00455b70` is now bounded as the shared scalar-band initializer that clears the same
|
||
`[+0x206/+0x20a/+0x20e/+0x22e/+0x232]` family, optionally copies up to three caller-supplied
|
||
strings into `[+0x206/+0x20a/+0x20e]`, synthesizes one default local token buffer when the middle
|
||
string is absent, chooses one effective mode string from the third or first input, derives one
|
||
owner handle or transform token through `0x0051f090` unless the caller suppresses that path, and
|
||
then seeds the remaining scalar band through `0x0052edf0` and `0x0052e670`.
|
||
The same specialization also now has one tighter UI-facing side. The override trio
|
||
`0x0040e4e0`, `0x0040e880`, and `0x0040e9d0` all sit in the same `0x005c8c50` table and reuse
|
||
the linked-site-capable vtable `+0x70` latch together with creation-mode byte `[this+0x3d4]`.
|
||
`0x0040e4e0` is the strongest current owner for contextual status text: it branches across
|
||
linked-peer checks, world-mode fields `[0x0062c120+0x2171/+0x2175/+0x2179/+0x2181]`, current
|
||
owner state, and candidate or linked-peer display labels, then formats localized ids such as
|
||
`0x00af`, `0x00b0`, `0x00b1`, `0x00b2`, `0x00b3`, and `0x0afd` before pushing the result through
|
||
shell presenter `0x00538c70`. `0x0040e880` pairs with that publisher on the action side: it
|
||
first resets the same presenter through the fixed token at `0x005c87a8`, then dispatches several
|
||
world-side follow-ons through `0x00413620`,
|
||
`world_clear_current_preview_mode_and_reseed_mode_0x15_if_latched` `0x00453510`,
|
||
`world_store_preview_linked_site_id_0x2181_rebind_mode3_and_refresh_if_active` `0x00452db0`,
|
||
and `world_switch_preview_or_tool_mode_and_seed_parameter_block` `0x00452fa0` under the same
|
||
linked-peer and world-mode gates. `0x0040e9d0` is the narrower query-style formatter:
|
||
when shell branch `[0x006cec74+0x74]` is live it formats one localized label with the fixed
|
||
suffix `\nAbsIndex %d`, otherwise it can return one company-side owner label through
|
||
`0x00426b10`, and only then falls back to `0x00455860`. So the current best read is that this
|
||
concrete specialization owns both the ambient or animation transient family and one linked-peer
|
||
status or action UI surface, without yet proving the user-facing subtype name.
|
||
One smaller subtype hook cluster is tighter now too. The concrete table also carries
|
||
`0x0040d170` and `0x0040d1b0`, both of which resolve the current candidate through cached stem id
|
||
`[this+0x3cc]` and then test candidate dword `[candidate+0x4b]`. When that flag is nonzero,
|
||
`0x0040d170` tail-calls the primary transient builder `0x0045c310` and `0x0040d1b0` tail-calls
|
||
the matching release path `0x0045c3c0`. The same neighborhood now also gives direct cached-record
|
||
resolvers instead of more anonymous pointer math: `0x0040d1f0` returns the linked peer from
|
||
`[this+0x2a8]` through `0x006cec20`, while `0x0040d210` returns the owner-side record from
|
||
`[this+0x276]` through `0x0062be10`. That makes the specialization-side ownership split cleaner:
|
||
the `0x005c8c50` family is not only formatting labels and driving side effects, it also has a
|
||
direct candidate-flag hook for building or dropping the primary transient handle.
|
||
The last lower side reads are tighter now too. `0x0040e450` first seeds the projected-slot cache
|
||
through `placed_structure_cache_projected_rect_profile_slot_id` `0x00414470` before it re-enters
|
||
`0x00418a60`, and the broader stem-based builder at `0x00418be0` now has one named optional side
|
||
renderer instead of an anonymous callsite:
|
||
`placed_structure_render_local_runtime_overlay_payload_from_projected_bounds` `0x00418040`.
|
||
The side refresh split is bounded now too. `0x0040ee10` publishes one local position or scalar
|
||
triplet through the shared setter `0x00530720`, then tails into
|
||
`placed_structure_refresh_linked_site_anchor_position_triplet_for_local_runtime` `0x0040e360`;
|
||
that smaller follow-on only runs on the current subtype-`1`, class-`3`, linked-site branch, and
|
||
recomputes one local-runtime triplet from the linked peer's route-entry anchor when that anchor
|
||
is still live. The heavier sibling above that side refresh is bounded now too:
|
||
`placed_structure_set_world_coords_and_refresh_local_runtime_side_state` `0x0040eba0` is the
|
||
world-coordinate mutation helper that recomputes `[site+0x388]` and `[site+0x38c]`, rewrites the
|
||
world-grid owner mapping through `0x0042c9f0` and `0x0042c9a0`, updates the subtype-`4`
|
||
proximity-bucket family when needed, rebuilds the same local position or scalar triplet, and
|
||
then tails into the linked-site anchor follow-on at `0x0040e360`. One later caller into that
|
||
same side-refresh family is bounded now too: `0x00419110` clamps a caller rectangle to the live
|
||
world bounds, resolves one per-cell bucket chain through the hashed map at `[arg0+0x88]` and
|
||
`0x0053dae0`, and then re-enters `0x0040eba0` for every bucketed site in that rectangle using
|
||
the stored per-entry coordinate pair plus two zero flags. Current grounded caller is the edit-side
|
||
branch at `0x004bc851`, immediately after the neighboring nibble and companion-float mutations,
|
||
so this now looks like a bucket-map-driven local-runtime side-state refresh wrapper rather than
|
||
another broad site sweep.
|
||
The sibling policy-`1` side is tighter now too. The constructor lane no longer stops at “one
|
||
linked site id at `[site+0x2a8]`”: the subtype-`1` branch in
|
||
`placed_structure_construct_entry_from_candidate_and_world_args` `0x0040f6d0` now clearly
|
||
allocates that linked record through
|
||
`placed_structure_collection_allocate_and_construct_linked_site_record` `0x00481390`, whose lower
|
||
constructor is `placed_structure_construct_linked_site_record_from_anchor_and_coords`
|
||
`0x00480210`. That lower constructor seeds the linked record's own id and anchor-site id, clears
|
||
the local route-anchor and display-name fields, projects the anchor footprint into world space,
|
||
and then either binds an already-covered route entry through
|
||
`route_entry_collection_try_reuse_covering_entry_for_site_coords_and_heading` `0x00417b40` or
|
||
falls through into the neighboring policy-`1` route-entry synthesis family around `0x00493cf0`
|
||
before rebinding the chosen route entry through `0x0048abc0`.
|
||
The cleanup side is tighter now too. Linked-site removal now has a bounded owner at
|
||
`placed_structure_collection_remove_linked_site_record` `0x004813d0`: it resolves the linked
|
||
record through `0x006cec20`, runs the per-record teardown
|
||
`placed_structure_teardown_linked_site_runtime_state_before_removal` `0x00480590`, removes the
|
||
live entry from the collection, and only then re-enters the still-bounded company-wide follow-on
|
||
at `0x00429c10` when the removed record passed the narrower transit-like latch. That per-record
|
||
teardown is no longer just “clear some scratch fields.” It now clearly clears the route-style
|
||
scratch lane, clears the five proximity buckets at `[site+0x590..0x5b8]`, detaches or invalidates
|
||
the current route-entry anchor, frees the three per-site byte arrays at `[site+0x24..0x2c]`,
|
||
clears this site's indexed byte from the corresponding arrays of later placed-structure records,
|
||
and then re-enters `0x00436040` with the current site id.
|
||
That company-side follow-on is no longer just one opaque callback either. It is now bounded as
|
||
`company_collection_refresh_active_company_linked_transit_site_peer_caches` `0x00429c10`, which
|
||
walks the active company roster and re-enters
|
||
`company_rebuild_linked_transit_site_peer_cache` `0x004093d0` on each company. That per-company
|
||
fast pass stamps a refresh tick at `[company+0x0d3e]`, clears and repopulates the
|
||
placed-structure-side cache cells addressed through `[site+0x5bd][company_id]`, marks the
|
||
eligible linked transit sites for that company, allocates one `0x0d`-stride peer table for each
|
||
eligible site, and fills those peer rows from
|
||
`aux_route_entry_tracker_query_best_route_entry_pair_metric_with_endpoint_fallbacks`
|
||
`0x004a6630`. That helper no longer reads as one anonymous route sweep: it either uses the fixed
|
||
pair directly or falls back across tracker endpoint combinations before returning the winning
|
||
route-entry id, one route-step count, and one companion mismatch count. The fast cache now reads
|
||
more cleanly too: peer-record dword `+0x05` stores that step count, while float `+0x09` stores
|
||
the normalized continuity share derived from `(steps - mismatches) / max(steps, 1)`, not a raw
|
||
delta-per-step ratio. The
|
||
adjacent timed wrapper `company_service_linked_transit_site_caches` `0x00409720` now shows the
|
||
cadence too: `0x004093d0` is the shorter-interval refresh, while the older heavier sibling at
|
||
`0x00407bd0` was only revisited on the longer interval.
|
||
That heavier sibling is now bounded too:
|
||
`company_rebuild_linked_transit_autoroute_site_score_cache` `0x00407bd0` no longer looks like a
|
||
generic tail refresh. It reuses the fast peer tables, rebuilds candidate-local amount bands plus
|
||
normalized issue-opinion scales, and then folds the peer-side route metrics back into three
|
||
per-site cache floats with a cleaner split:
|
||
`+0x12` is the raw surviving site-score total,
|
||
`+0x0e` is the continuity-and-step-weighted companion total,
|
||
and `+0x16` is the promoted final site-ranking lane chosen from the strongest grouped candidate
|
||
bands.
|
||
That also closes most of the cross-version impact question:
|
||
the pre-`1.03` versus `1.03+` tracker metric split now looks like it mainly perturbs the weighted
|
||
`+0x0e` lane and the promoted `+0x16` lane, not the raw `+0x12` total.
|
||
That final lane then feeds the neighboring selectors
|
||
`company_select_best_owned_linked_transit_site_by_autoroute_score` `0x00408280` and
|
||
`company_build_linked_transit_autoroute_entry` `0x00408380`. That makes the company-side follow-on
|
||
read more like a linked-transit autoroute cache family than a generic company maintenance pass.
|
||
The neighboring reachability gate is tighter now too:
|
||
`company_query_cached_linked_transit_route_anchor_entry_id` `0x00401860` caches one company-side
|
||
route-entry anchor, and
|
||
`placed_structure_is_linked_transit_site_reachable_from_company_route_anchor` `0x004801a0`
|
||
uses that anchor to decide whether a foreign linked transit site can still participate in the
|
||
current company's fast peer cache.
|
||
The first direct train-side consumer above that cache family is bounded now too:
|
||
`train_try_append_linked_transit_autoroute_entry` `0x00409770`. After servicing the owning
|
||
company's caches, it asks `0x00408380` for one staged `0x33`-byte route entry using the train's
|
||
current anchor site, then either appends that entry through `0x004b3160` and refreshes the new
|
||
trailing selection through `0x004b2f00`, or rotates one existing slot in place when the local
|
||
two-entry cap has already been reached. So this edge now reaches an actual train-side autoroute
|
||
append lane rather than stopping at anonymous company-side cache cells. The weighted cache lanes
|
||
still do not escape that route-choice family directly: this train-side append path only inherits
|
||
the weighted site and peer choice by calling `0x00408380`, not by reading cache `+0x0e/+0x16`
|
||
itself.
|
||
The train-side follow-on above that seed path is bounded now too. The owning company can count
|
||
its live roster through `company_count_owned_trains` `0x004264c0`, measure one aggregate linked
|
||
transit site pressure through `company_compute_owned_linked_transit_site_score_total`
|
||
`0x00408f70`, and then rebalance that roster through
|
||
`company_balance_linked_transit_train_roster` `0x00409950`.
|
||
The aggregate helper no longer reads as a raw sum either:
|
||
it starts from the site-cache `+0x12` totals, converts that into one tentative roster target
|
||
through year and site-count ladders, and on build `1.03+` adds one special distance-side scaling
|
||
branch when exactly two eligible linked transit sites survive.
|
||
Because it consumes `+0x12` rather than `+0x0e` or `+0x16`, current evidence now says the tracker
|
||
compatibility split is more important for seeded route choice and ranked site choice than for the
|
||
final company train-count target itself. The local linked-transit chain is now bounded enough to
|
||
say that directly: weighted cache lanes feed `0x00408280 -> 0x00408380 -> 0x00409770/0x00409830`,
|
||
while the separate pressure or roster lane feeds `0x00408f70 -> 0x00409950` from raw `+0x12`.
|
||
The balancer then applies two age bands to company-owned trains:
|
||
very old trains are removed when the roster already exceeds target or upgraded when it still
|
||
needs capacity, while the mid-age band can trigger one narrower upgrade pass.
|
||
After that it fills any remaining deficit by either packaging multiplayer opcode `0x75` or
|
||
locally re-entering
|
||
`company_try_add_linked_transit_train_and_publish_news` `0x00409830`. The two visible news
|
||
helpers under it are bounded too: `0x00409830` emits RT3.lng `2896` for a newly added train,
|
||
while `company_publish_train_upgrade_news` `0x00409300` emits RT3.lng `2897` for the upgrade
|
||
branch.
|
||
The subtype-`4` sibling side is bounded now too. The nearby-site bucket family now has:
|
||
`placed_structure_append_nearby_transit_site_distance_bucket_entry` `0x0047fdb0`,
|
||
`placed_structure_remove_site_id_from_proximity_bucket_lists` `0x0047dd10`, and
|
||
`placed_structure_clear_proximity_bucket_lists` `0x0047dcd0`, plus the two collection sweeps
|
||
`placed_structure_collection_append_site_into_all_proximity_bucket_lists` `0x00481480` and
|
||
`placed_structure_collection_remove_site_id_from_all_proximity_bucket_lists` `0x004814c0`.
|
||
Current evidence says those five buckets store `(peer site id, distance)` pairs for nearby
|
||
station-or-transit peers, grouped through the five-way classifier at `0x0040d350`. The older
|
||
stream-backed side is bounded too: `placed_structure_collection_load_dynamic_side_buffers_from_stream`
|
||
`0x00481430` walks the live placed-structure collection and re-enters
|
||
`placed_structure_load_dynamic_side_buffers_from_stream` `0x0047d8e0`, which repopulates the
|
||
route-entry list, the three per-site byte arrays, the five proximity buckets, and the trailing
|
||
scratch band from the caller-supplied persistence stream.
|
||
The linked-site route-entry list itself is tighter now too. The refresh or teardown branch at
|
||
`0x0040e102` re-enters `placed_structure_remove_route_entry_key_and_compact` `0x0047d810`, which
|
||
removes one matching `u16` key from the six-byte list rooted at `[site+0x462]/[site+0x466]`,
|
||
compacts the surviving entries into a replacement buffer, and decrements the stored route-entry
|
||
count.
|
||
The broader linked-site mutable runtime strip is tighter now too.
|
||
`placed_structure_rebuild_local_service_sampled_cell_list_and_reset_route_link_scratch`
|
||
`0x0047f320` is no longer just a teardown-side stub: it resolves an effective comparison mode
|
||
from the linked candidate class byte `[candidate+0x8c]` unless the caller overrides it, derives
|
||
one radius threshold from current world coordinates `[site+0x4a8/+0x4ac]`, frees the prior
|
||
sampled-cell buffer at `[site+0x34]`, always clears the route-link scratch pair
|
||
`[site+0x462]/[site+0x466]`, and then scans one bounded world-grid rectangle through
|
||
`[0x0062c120+0x2129]` with per-cell distance measured by `0x0051db80`. For accepted cells it
|
||
emits temporary twelve-byte `(grid x, grid y, sampled score)` rows through `0x0042b190`,
|
||
`0x0042c530`, and `0x0042c580`; when caller arg0 is zero it compacts one representative subset
|
||
of those temporary rows into the persistent list at `[site+0x34]/[site+0x38]`, while nonzero
|
||
arg0 callers use the same helper as a clear-and-scan companion without the final materialization
|
||
step. Current grounded callers are the linked-site refresh and teardown strip
|
||
`0x00480542/0x004805c2/0x00480727/0x004807e2`.
|
||
The proximity-bucket rebuild side above that list is tighter now too.
|
||
`placed_structure_rebuild_nearby_transit_site_distance_buckets_from_neighbor_cells`
|
||
`0x0047fef0` first requires the current record to pass the narrower station-or-transit class gate
|
||
`0x0047fd50`, quantizes the current site position through `0x00455800/0x00455810`, walks the
|
||
surrounding live cell window through `[0x0062c120+0x2129]`, follows each cell's linked
|
||
placed-structure chain through word field `[cell+0x0d6]` plus next-id `[peer+0x2a2]`, keeps only
|
||
peers whose resolved candidate subtype byte `[candidate+0x32]` equals `4`, and appends the
|
||
surviving `(peer site id, distance)` pairs into the same five bucket arrays rooted at
|
||
`[site+0x590..+0x5a4]`. So the narrower one-peer append helper `0x0047fdb0` now has a real
|
||
broader owner rather than only collection sweeps.
|
||
The whole linked-site refresh owner is correspondingly clearer now too.
|
||
`placed_structure_refresh_linked_site_runtime_side_buffers_and_route_entry_anchor` `0x00480710`
|
||
first clears the current proximity buckets through `0x0047dcd0`, runs `0x0047f320(1,arg1)`
|
||
against the pre-update state, republishes the current site position into the world-grid owner map
|
||
through `0x0042bbf0/0x0042bbb0`, reruns `0x0047f320(0,-1)` to materialize the current
|
||
sampled-cell list, and then rebuilds the nearby-transit buckets through `0x0047fef0`. After that
|
||
it either reuses a still-valid route-entry anchor through
|
||
`route_entry_collection_try_reuse_covering_entry_for_site_coords_and_heading` `0x00417b40` and
|
||
`placed_structure_rebind_route_entry_anchor_to_site_id` `0x0048abc0`, or synthesizes a
|
||
replacement through `0x00493cf0` before rebinding it the same way; when an old anchor survives
|
||
but now points at a different owner, the helper clears the prior `[entry+0x222]` back to `-1`.
|
||
The world-cell owner and route-gather helpers beneath that strip are bounded now too. Word
|
||
`[cell+0xd4]` is the head of one placed-structure owner chain: `0x0042bbb0` prepends the current
|
||
site id into that chain by writing the previous head into `[site+0x3c]` through the tiny setter
|
||
`0x0047d6f0`, while `0x0042bbf0` removes one site id from the same chain by walking the linked
|
||
`[site+0x3c]` next pointers until it can splice the requested site out. The sampled-cell rebuild
|
||
also now has its lower route-gather leaf: `0x0042c530` walks one world cell's linked-site chain
|
||
from word `[cell+0xd6]` through next-id `[site+0x2a2]` and appends each visited site id plus the
|
||
caller payload into the six-byte route-entry list helper `0x0042b190`. That same compact list now
|
||
has its two local companions bounded too: `0x0042b230` removes one row by leading `u16` key, and
|
||
`0x0042b2d0` is the shared contains-key predicate over the same `[...+0xeb]/[...+0xef]` list.
|
||
The neighboring `[cell+0xd6]` linked-site chain is bounded now too. `0x0042c9a0` prepends one
|
||
site id into that chain by writing the previous head into `[site+0x2a2]` through the tiny setter
|
||
`0x0040cb00`, storing the new head back into `[cell+0xd6]`, and then re-entering the paired
|
||
rebuild helpers `0x0042c690` and `0x0042c8f0`. `0x0042c9f0` is the remove companion over the
|
||
same chain: it walks the linked `[site+0x2a2]` next pointers until it can splice the requested
|
||
site id out of the `[cell+0xd6]` head chain, then reruns the same two rebuild helpers.
|
||
The two remaining numeric leaves under this strip are bounded now too. `0x0042c580` accumulates
|
||
the directional word fan from `[cell+0xf3 + dir*2]` while stepping toward one caller-supplied
|
||
grid target through the fixed offset tables at `0x00624b28/0x00624b48`, and that is the floating
|
||
sampled-score source later stored by `0x0047f320`. `0x0042c960` is the shared rounded
|
||
issue-opinion-scaled word-lane query: it multiplies one local word lane `[this+index*2] << 4`
|
||
against the scenario-side scale returned by `0x00437d20(index)` and rounds the result through
|
||
`0x005a10d0`.
|
||
The broader company-side owner above these pieces is tighter now too. The periodic service pass
|
||
`company_service_periodic_city_connection_finance_and_linked_transit_lanes` `0x004019e0` now
|
||
reads as the current outer owner for this branch: it sequences the city-connection announcement
|
||
lanes, the linked-transit train-roster balancer, the acquisition-side sibling
|
||
`company_try_buy_unowned_industry_near_city_and_publish_news` `0x004014b0`, the annual finance-policy helper
|
||
`company_evaluate_annual_finance_policy_and_publish_news` `0x00401c50`, and the shorter-versus-
|
||
longer linked-transit cache refresh tail through `0x004093d0` and `0x00407bd0`. That outer pass
|
||
also has one tighter temporary-state role now: it clears company bytes `0x0d17/0x0d18/0x0d56`,
|
||
mirrors `0x0d17` into scenario field `0x006cec78+0x4c74` only while the earlier route-building
|
||
side runs, and restores the original scenario value on exit. Current evidence now ties `0x0d17`
|
||
to the shared preferred-locomotive chooser `0x004078a0`: the override is only armed when that
|
||
helper picks one locomotive whose engine-type dword is `2`. That engine-type lane now best reads
|
||
as electric rather than an unnamed class slot, because the linked approval helper around
|
||
`0x0041d550` now reads as a real locomotive-era and engine-type policy gate, dispatching the same
|
||
`0/1/2` field across three scenario-opinion lanes while the local player-facing engine-type
|
||
family is explicitly `Steam / Diesel / Electric`. That same gate also now ties the later scenario
|
||
bytes `0x4c97..0x4c99` back to the editor-side `Locomotives` page rather than treating them as
|
||
anonymous availability flags: they are the live `All Steam Locos Avail.`, `All Diesel Locos
|
||
Avail.`, and `All Electric Locos Avail.` policy bytes behind `0x004cd680` / `0x004cf0d0`. The
|
||
current logic is also tighter than a plain override tier: a positive engine-family opinion result
|
||
can carry the gate by itself only while none of those three editor bytes is enabled; once any of
|
||
them is nonzero, `0x0041d550` instead requires one matching intersection between the record-local
|
||
family bytes and the enabled editor family bytes. The `WhaleL` carveout is narrower now too:
|
||
current data-file correlation ties that stem to the `Orca NX462` / `WhaleL_NE` locomotive family,
|
||
and it explicitly zeros that positive-opinion result before the later family-availability checks,
|
||
so it loses the shortcut rather than gaining a special approval path. The same
|
||
chooser now also has a bounded fallback below it, `locomotive_collection_select_best_era_matched_non_electric_fallback_id`
|
||
`0x00461cd0`, which explicitly skips engine-type `2` and chooses the lowest-penalty remaining
|
||
locomotive by era mismatch and approval gates. The route-search side is tighter too: this
|
||
electric-only override now clearly feeds the first path-sweep branch in `0x0049bd40`, forcing the
|
||
larger `1.8` initial quality multiplier instead of `1.4`, which is the same branch otherwise
|
||
chosen by explicit route-policy byte `4`. The neighboring `0x00442a40..0x00442ae1` helper strip
|
||
is tighter now too: it is not generic issue math, it is the forward and inverse mapper between
|
||
two compact locomotive engine-family index spaces and the raw issue bands `0x0f1..0x15f /
|
||
0x1c9..0x1da` plus `0x160..0x1c4 / 0x1db..0x1f6`, and the same strip is reused by both the
|
||
stream save/load pair `0x0042ddd0/0x00430feb` and the shell-side issue-row resolvers
|
||
`0x00462449/0x004624ae` over the fixed table at `0x00610398`. So the later annual finance helper is reading
|
||
same-cycle side-channel state from the earlier city-connection and linked-transit branches, not
|
||
unrelated long-lived finance fields. The inner
|
||
finance helper is not debt-only either. Current grounded outcomes include bankruptcy news
|
||
`2881`, the debt restructure family `2882..2886`, a later share-repurchase headline `2887`, and
|
||
the dividend-side adjustment branch. The main commit verbs under that helper are now grounded too:
|
||
`company_repay_bond_slot_and_compact_debt_table` `0x00423d70`,
|
||
`company_issue_bond_and_record_terms` `0x004275c0`,
|
||
`company_repurchase_public_shares_and_reduce_capital` `0x004273c0`, and
|
||
`company_issue_public_shares_and_raise_capital` `0x00427450`. The threshold side is tighter now
|
||
too. The earliest creditor-pressure lane requires scenario mode `0x0c`, the bankruptcy toggle
|
||
`[0x006cec78+0x4a8f]` to be clear, at least `13` years since `[company+0x163]`, and at least
|
||
`4` years since founding year `[company+0x157]`; it then scans the last three years of the
|
||
derived net-profits and revenue lanes `0x2b` and `0x2c`, chooses one negative pressure ladder
|
||
`-600000 / -1100000 / -1600000 /
|
||
-2000000` from the current slot-`0x2c` bands around `120000 / 230000 / 340000`, requires the
|
||
broader support-adjusted share-price or public-support scalar at least `15` or `20` depending on
|
||
whether all three sampled years failed, checks the current fuel-cost lane in slot `0x09` against
|
||
`0.08` times that ladder, and requires the
|
||
three-year slot-`0x2b` total to clear one final `-60000` gate before it falls into the
|
||
bankruptcy commit and RT3.lng `2881` headline.
|
||
The middle debt-capital layer is split more clearly now too. With `[+0x4a8b]` clear, one annual
|
||
bond lane first simulates full repayment through `company_repay_bond_slot_and_compact_debt_table`
|
||
and then uses the post-repayment cash window with fixed `-250000` and `-30000` thresholds plus
|
||
the broader linked-transit train-service latch `[company+0x0d56]` to decide whether to append one
|
||
or more `500000` principal, `30`-year bonds. The repurchase lane is separate again: when the
|
||
city-connection announcement-side latch `[company+0x0d18]` is set, growth setting `2` does not
|
||
suppress it, and `[+0x4a87]` is clear, it starts from one `1000`-share batch, can replace its
|
||
default `1.0` factor with one linked-chairman personality scalar, scales that by `1.6` when
|
||
growth setting `1` is active, and then runs one `800000` stock-value gate plus one
|
||
support-adjusted-share-price-times-factor-times-`1000`-times-`1.2` affordability gate before the
|
||
repeated `1000`-share buyback commits behind RT3.lng `2887`. The ordering above this helper is
|
||
tighter now too:
|
||
`company_service_periodic_city_connection_finance_and_linked_transit_lanes` clears those latches
|
||
first, runs the city-connection and linked-transit branches, and only then enters the annual
|
||
finance helper, so these look like same-cycle reaction gates rather than long-lived balance-sheet
|
||
flags.
|
||
After the earlier debt or bankruptcy outcomes stay inactive, the later stock-capital lane also
|
||
has a tighter bounded shape now too: it only opens on build `1.03+`, only after the earlier
|
||
bankruptcy, bond, and repurchase outcomes stay inactive, and with the bond and stock toggles
|
||
`[+0x4a8b]` and `[+0x4a87]` clear, at least two bond slots live, and at least one year since
|
||
founding. It derives one issue batch from outstanding shares rounded down to `1000`-share lots
|
||
with floor `2000`, trims that batch until the broader support-adjusted share-price scalar times
|
||
batch no longer exceeds the `55000` gate, recomputes the pressured support-adjusted share-price
|
||
scalar and the paired `price/book` ratio, then tests the remaining gates in a fixed order:
|
||
share-price floor `22`, proceeds floor `55000`, current cash from `0x2329/0x0d` against the
|
||
chosen highest-coupon bond principal plus `5000`, one later stock-issue cooldown gate that
|
||
converts the current issue mixed-radix calendar tuple at `[company+0x16b/+0x16f]` through
|
||
`calendar_point_pack_tuple_to_absolute_counter` `0x0051d3c0` and compares the result against the
|
||
active world absolute calendar counter `[world+0x15]`, and only then the coupon-versus-price-to-book
|
||
approval ladder `0.07/1.3 -> 0.14/0.35`. The issue mutator preserves the previous tuple in
|
||
`[company+0x173/+0x177]` and refreshes the current tuple from `[world+0x0d/+0x11]` on the
|
||
derived-pricing lane. On success it issues two
|
||
same-sized tranches through repeated `company_issue_public_shares_and_raise_capital` calls and
|
||
publishes a separate equity-offering news family rooted at localized id `4053`, not the earlier
|
||
debt or buyback headline family.
|
||
The dividend side is bounded too: it requires the dividend toggle `[0x006cec78+0x4a93]` to be
|
||
clear, mode `0x0c`, at least `1` year since `[company+0x0d2d]`, and at least `2` years since
|
||
founding, then averages the last three years of the net-profits lane `0x2b`, folds in the
|
||
unassigned-share pool and the current `0x0d` band, applies the map-editor building-growth
|
||
setting `[0x006cec78+0x4c7c]`, treats growth setting `1` as a `0.66` scale-down and setting `2`
|
||
as a zeroing pass on the current dividend, quantizes surviving adjustments in tenths, and
|
||
finally clamps against
|
||
`company_compute_board_approved_dividend_rate_ceiling` `0x00426260`.
|
||
The linked-transit route-seeding side has one tighter sibling now too:
|
||
`company_reset_linked_transit_caches_and_reseed_empty_train_routes` `0x00401940`. It clears the
|
||
two company-side linked-transit cache timestamps, forces one immediate cache rebuild through
|
||
`0x00409720`, strips route lists from company-owned trains in modes `0x0a/0x13`, and then
|
||
re-enters `train_try_append_linked_transit_autoroute_entry` `0x00409770` only when a train's
|
||
route list has become empty.
|
||
On the wider chooser question, the current evidence is also tighter than before: every recovered
|
||
external owner of `0x00402cb0` is still in the city-connection family, so the two later direct
|
||
placement lanes currently read as city-connection fallback behavior rather than a broadly shared
|
||
world placement service.
|
||
It can still unwind through route-state cleanup without committing new placed structures, so the
|
||
exact lower helper semantics are not fully closed, but the broader chooser is no longer
|
||
anonymous and its main policy split is now visible. The two lower helpers directly under those
|
||
commit lanes are bounded now too:
|
||
`placed_structure_project_candidate_grid_extent_offset_by_rotation` `0x00417840` is the shared
|
||
projected-footprint offset helper over candidate bytes `[candidate+0xb8]` and `[candidate+0xb9]`,
|
||
and `placed_structure_validate_projected_candidate_placement` `0x004197e0` is the shared
|
||
go-or-no-go validator that checks company, territory, world-tile, and footprint occupancy state
|
||
before either direct-placement commit is allowed to fire. Its strongest current subtype branch is
|
||
a station-attachment or upgrade-style lane keyed by `[candidate+0x32] == 1`, which now has the
|
||
concrete failure family `2901..2906`: blocked upgrade footprint, ground not flat enough, not
|
||
your track, insufficient track-laying capacity, cannot connect to existing track, and ground too
|
||
steep. That tightens the chooser materially without yet proving that the validator is
|
||
station-only for every caller.
|
||
The recurring outer owner is tighter now too:
|
||
`placed_structure_collection_refresh_quarter_subset_route_style_state` `0x00413580` walks every
|
||
fourth live placed structure from a scenario-time-derived offset and re-enters the per-site
|
||
rebuild with stack flag `0`, giving the route-style lane a concrete recurring maintenance sweep
|
||
under `simulation_service_periodic_boundary_work` rather than only a floating caller note. One
|
||
neighboring helper is now bounded on the message side too:
|
||
`shell_building_detail_handle_subject_value_row_band_action` `0x004ba270` switches over the
|
||
clicked row family `0x7d07..0x7d14`, treats subject bytes `+0x21/+0x22/+0x23` as one current
|
||
selection plus one bounded low/high pair, increments the family dirty latch at `0x006cfe0c` on
|
||
change, and republishes the refreshed value through the shared shell control helper on code
|
||
`0x66`. One neighboring helper is now bounded on the side-list path too:
|
||
`shell_building_detail_propagate_selected_subject_state_into_side_list` `0x004b9ec0` walks the
|
||
sibling list owner at `0x006cfe08`, copies the active subject state into each side-list record,
|
||
mirrors the current service or capability id at `+0x24`, and preserves the `0x40/0x20/0x10`
|
||
subflags from the active subject. That means the value-row actions and later selector rows now
|
||
read as propagating one shared building-detail state across the sibling list rather than only
|
||
mutating one isolated subject record. One neighboring helper is
|
||
now bounded separately too: `shell_building_detail_refresh_subject_pair_value_rows` `0x004bad20`
|
||
owns the mutually exclusive value-row pairs `0x7d07/0x7d08`, `0x7d11/0x7d12`, and
|
||
`0x7d13/0x7d14`, choosing among them from the same selected-subject flag byte and payload fields
|
||
at `+0x22/+0x23`, while the larger cargo-or-service row owner also gates the extra visual lanes
|
||
`0x7d6a`, `0x7d6b`, and `0x7d9d` from that same subflag family. The asset-string block is tighter
|
||
too: that branch family now explicitly uses `AnyCargo.imb`, `AnyFreight.imb`, `PassMail.imb`,
|
||
`Caboose.imb`, and `Dining.imb`, with the bit-`0x20` special lane already aligned to
|
||
`Caboose.imb` and the sibling bit-`0x10` special lane now aligned to `Dining.imb`. The larger
|
||
`0x7f58..0x801f` band is no longer just a styled row family either:
|
||
`shell_building_detail_present_flagged_service_capability_popup` `0x004b9fd0` is now grounded as
|
||
its explanatory popup callback. It resolves either one fixed express-side row from `0x00621e04`
|
||
or one active candidate or service id from `[subject+0x24]`, then formats one popup through the
|
||
shell message-box path. The neighboring refresh helper `shell_building_detail_refresh_flagged_service_capability_rows`
|
||
`0x004b9a20` is tighter now too: `0x7d07..0x7d1c` is not one anonymous block, but a real mask
|
||
partition over subject bits `0x20` and `0x10`, with one zero-mask pair, one bit-`0x20`-only
|
||
pair, one exclusive-or pair, and later one-bit and two-bit indicator rows. RT3.lng now closes
|
||
the fixed popup text family too: the single-line branch uses
|
||
`3922` `%1\nLoads available at %2: %3`, while the richer ordinary-candidate branch uses
|
||
`2981` `%1\nLoads available at %2: %3 Current Price: %4` and can append
|
||
`2982` `Price at next station, %1: %2 (%3%4)`. The selector band is narrower too: current
|
||
refresh-side evidence shows `0x7f58..0x801f` as one selected-ordinal highlight family over the
|
||
three fixed express rows plus the ordinary active-candidate rows, not as a generic unstructured
|
||
list. The neighboring `0x8020..0x8051` band is tighter too: it is primarily the matching
|
||
remove-entry family for the selected subject's live id list, with two special row indices
|
||
re-routing into the `0x7d0f/0x7d10` subflag-clearing path instead of ordinary list compaction
|
||
when the current `0x20/0x10` service-bit combination demands it. That means the exact captions
|
||
are no longer broadly open across the whole selector family: the fixed express-side rows, the
|
||
mask partitions, and the add/remove structure are grounded, and the remaining caption gap is
|
||
mostly the ordinary candidate rows further down the same band. The top-level toggles are
|
||
tighter now too: the paired
|
||
`0x7d02/0x7d03` controls are the real mode switch over subject bit `0x40`, choosing between the
|
||
bounded pair-value branch and the current-selection/status branch around `0x7d0d/0x7d0e`, while
|
||
the smaller `0x7d0f/0x7d10` controls flip the same special-service subflags later rendered as
|
||
`Caboose` and `Dining Car`. One adjacent control is tighter now too: the extracted
|
||
`BuildingDetail.win` resource contains the plain-English line `Set the initial cargo amount for
|
||
'Disable Cargo Economy' scenarios.`, and the `0x7d01` plus `0x7d09/0x7d0a` message-side branch
|
||
can mirror the current subject or selection through
|
||
`shell_building_detail_submit_aux_owner_subject_sync_request` `0x004b9e10` into the auxiliary
|
||
owner queue at `[0x006cd8d8+0x8f48]`, with side-owner presence now explicitly grounded through
|
||
`shell_has_auxiliary_preview_owner` `0x00434050`. That queued request is tighter too: both
|
||
current callsites forward the same side-list mirror latch at `[0x006cfe08+0x0c]`, so the
|
||
auxiliary owner now clearly sees not just the staged subject but also whether the local
|
||
`BuildingDetail` side-list is in mirrored-subject mode. The same `0x7d01` lane also now has one
|
||
clear rejection note: localized id `3587` `This option is only available by following the
|
||
tutorial.` now sits behind the active tutorial flag at `0x006d3b4c` and the cached previous
|
||
tutorial expected-control id at `0x00622b38`, while the neighboring tutorial helper
|
||
`tutorial_advance_step_and_refresh_expected_control_ids` `0x00516be0` now grounds
|
||
`0x00622b34/0x00622b38/0x00622b3c` as the current and previous expected-control cache rather
|
||
than anonymous globals. The last field is tighter now too: `0x00622b3c` is currently best read
|
||
as the active tutorial step's alternate-accepted companion control id, because the generic shell
|
||
control path compares clicked control ids against it directly and suppresses the `3587` tutorial
|
||
rejection when they match. That does not fully close the player-facing caption bind for every
|
||
control, but it does bound the neighboring side-owner sync and tutorial-rejection lane instead
|
||
of leaving it as anonymous glue.
|
||
The extra pre-insert gate is narrower than it
|
||
first looked. It is now grounded as tutorial-only:
|
||
`tutorial_validate_train_route_station_indicator_step` `0x00516d00` checks the current tutorial
|
||
step from the shell tutorial descriptor table at `0x00622b48` before a live station-or-transit
|
||
site id can be committed into the staged route entry, and the currently accepted steps align with
|
||
localized prompts `3777` and `3778`, the two train-routing tutorial instructions that tell the
|
||
player to click the Milan and Turin station indicators. Outside that tutorial state family, the
|
||
route-entry insertion path is not gated there. The adjacent validator is tighter now too:
|
||
`train_route_list_validate_reachability_and_station_pair` `0x004b2c10` walks that same route list,
|
||
resolves placed-structure-backed entries through the live placed-structure and route-node
|
||
collections, uses the direct route-node payload branch for the remaining entry family, and fails
|
||
with `3089..3091` when the resulting route cannot be traversed or does not preserve a valid
|
||
terminal station pair. The post-validation follow-on is bounded too:
|
||
`train_current_route_context_uses_strict_reachability_mode` `0x004a9460` is now the small shared
|
||
gate above the stricter branch, keyed off the current linked route object's downstream class type,
|
||
and `train_set_route_operating_mode_and_scalar` `0x004ab980` now reads as the shared train mode
|
||
setter beneath route editing, with the local and multiplayer insertion paths choosing mode
|
||
`0x13` only when that stricter second validation succeeds and mode `0x0a` on the looser fallback
|
||
path. The first
|
||
deeper world-mode interaction branch is now better
|
||
bounded: `GameUppermost.win` hotspots, cursor drag, held Shift state, discrete shell view-step
|
||
commands, direct keyboard turn/pan/zoom bindings, the `TrackLay.win` and `StationPlace.win`
|
||
world-command surfaces, and a frame-owned hover or focus-target transition branch all feed the
|
||
same shell-controller-backed path. The remaining uncertainty has moved farther from basic
|
||
ownership only in the per-tool sense: the hover-target branch clearly exists, `0x07d6` now looks
|
||
like the shared
|
||
main-world interaction surface rather than a generic detail button for one tool family only. One
|
||
more shell-side consumer is bounded now too: `0x004bc350` is a world-surface brush handler over
|
||
that same `0x07d6` control plus the adjacent mode family `0x0faa..0x0faf` and ordinal strip
|
||
`0x0fa0..0x0fa7`. That family is no longer just a generic unlabeled brush owner: the
|
||
detail-panel manager now grounds the sibling tool-window strip immediately above it as
|
||
`Bulldoze.win`, `ChangeHeight.win`, `ChangeTrees.win`, `PaintTerrain.win`, `PaintRegion.win`,
|
||
`PaintSound.win`, and `PaintTerritory.win`, each with its own constructor, refresh pass, and
|
||
message owner beneath the same controller rooted at `0x006d0818`. Once its local drag latch is
|
||
active it dispatches the current mode dword at `[0x006d0818+0x8c]` into the companion-float
|
||
helpers `0x0044d4e0`, `0x0044d880`, and `0x0044da70`, or into the secondary-raster nibble path
|
||
`0x00448e20 -> 0x00419110`, so the remaining uncertainty has narrowed from ownership to the
|
||
exact one-to-one mode-button mapping inside that grounded tool-window strip. The
|
||
`PaintTerrain.win` side is tighter now too: constructor `0x004f7ce0` seeds shell singleton
|
||
`0x006d1304`, callback root `0x006d1334`, a constructor-time bulk-update latch at
|
||
`0x006d1330/0x006d1331`, and the broader terrain mode or scalar state from `0x00622748..0x00622788`
|
||
plus `0x006d1308..0x006d1324`; it then registers the callback strip `0x004f5960`,
|
||
`0x004f59f0`, `0x004f6070`, and `0x004f69e0` through `0x00540120`. The direct message owner
|
||
under that same family is no longer just a loose branch fan-out either: `0x004f6f50` owns
|
||
messages `2/0xca/0xcb`, keeps control `0x07d6` as the live world-surface drag latch, routes
|
||
explicit undo control `0x2775` into `0x004f5c30`, maps the selector and mode strips
|
||
`0x2711..0x2730`, `0x27d9..0x27df`, `0x283d..0x2843`, `0x28a1..0x28e6`, `0x2915..0x291e`,
|
||
`0x2964..0x2967`, and `0x29cd..` into the cached terrain lanes, and then fans the active drag
|
||
path into preview helpers `0x004f6930`, `0x004fb5e0`, `0x004fc280`, `0x004fc4d0`, and
|
||
`0x004fc630` depending on the current terrain mode. Inside that same family
|
||
`0x004f5a80/0x004f5c30` are now the bounded local undo snapshot pair, `0x004f5dd0` is the
|
||
tiny active-scalar-group selector, `0x004f6b50` owns the ten-entry mode strip rooted at
|
||
`0x28dd`, `0x004f6390` is the broad mode-panel repaint owner, `0x004f6250` is the
|
||
mode-dependent world-dispatch bridge, `0x004f6930` samples the current preview raster at
|
||
world coordinates, and `0x004fb5e0` is the heavier preview-raster rebuild and shell-surface
|
||
publish worker. The next local helpers under that same family are tighter now too:
|
||
`0x004f5ea0` and `0x004f5ec0` are just the two tiny special-mode predicates
|
||
`(mode 5, variant 2)` and `(mode 4, variant 2)`, `0x004f8770` is the weighted RGB sampler
|
||
over the current preview or undo-backed raster neighborhood, `0x004f89b0` is the local
|
||
byte-grid connected-component grower over the eight-neighbor tables `0x00624b28/0x00624b48`,
|
||
and `0x004f8bb0` is the main drag-path preview compositor that consumes the drag sample strip
|
||
`[this+0xf0/+0xf4/+0xf8]`, allocates temporary float or byte grids, and then rasterizes the
|
||
surviving preview rectangle through the current terrain descriptor tables at `0x005f3500`,
|
||
the weighted color sampler `0x004f8770`, the component grower `0x004f89b0`, and several live
|
||
world samplers before writing final RGBA pixels back into the preview surface. The late tail
|
||
under that same compositor is tighter too: the mode-`4`, variant-`2` path toggles
|
||
secondary-raster byte-2 bit `0x20` by comparing current and previous cells through
|
||
`0x00534f40`; the broader mode-`4/5` world-facing branch samples class set `2/4/5` through
|
||
`0x00534ec0`, re-enters `0x0044de30` and `0x0044df10`, latches pending world coordinates into
|
||
`[0x006d1304+0x78/+0x7c]`, and rewrites the low nibble plus the signed overlay-vector planes
|
||
through `0x00448df0`, `0x00448e20`, `0x00448ec0`, `0x00448ee0`, `0x00448e60`, and
|
||
`0x00448e90`. After the optional mode-`5` smoothing sweep through `0x004f8370`, the publish
|
||
tail either materializes one shell preview surface through `0x0051f090 -> 0x00534730` or, for
|
||
the mode-`4/5` world-facing variants, converts the surviving preview rectangle back into
|
||
world-space bounds and re-enters `0x0044e940`,
|
||
`world_refresh_active_preview_mode_from_four_dword_parameter_block` `0x00452f20`, and
|
||
`0x0044d410`. The companion
|
||
preview-rebuild owner `0x004fb5e0` is tighter on entry, too: `0x004f726c` is the early
|
||
rebuild path that first copies the live preview raster into `[this+0x118]` and snapshots undo
|
||
state through `0x004f5a80`, while `0x004f7ada` is the later drag-active path that first
|
||
allocates a temporary occupancy mask before rebuilding and then conditionally mirrors that
|
||
mask through `world_rebuild_active_preview_or_tool_overlay_surface_and_publish_normalized_bounds`
|
||
`0x00450520` on the world-mode-`0x17` side path. The remaining local lanes can therefore be
|
||
carried conservatively as PaintTerrain per-mode scalar and token bands beneath that already-
|
||
grounded mixed shell/world ownership strip, not as another ownership seam.
|