7.5 KiB
Runtime Effect Kind-8 Tier2 Named Availability Note
This note records the current named-candidate availability comparison between the strongest title-overlap pair:
Louisiana.gmpDutchlantis.gmp
The comparison uses the checked rt3_105_save_name_table_probe surface from inspect-smp.
Immediate Result
Warehouse05 is not the differentiator.
Observed values:
Warehouse05Louisiana.gmp = 1Dutchlantis.gmp = 1
Port01Louisiana.gmp = 1Dutchlantis.gmp = 1
Furniture FactoryLouisiana.gmp = 1Dutchlantis.gmp = 1
FarmGrainLouisiana.gmp = 1Dutchlantis.gmp = 1
Logging CampLouisiana.gmp = 1Dutchlantis.gmp = 1
So the strongest current Louisiana -> Dutchlantis title overlap does not also come with a unique
Warehouse05 availability toggle that would directly explain the one-row
Add Building Warehouse05 dispatch cluster in Louisiana.gmp.
Full Named-Availability Differences
The current comparison shows 18 differing names:
AluminumMill:Louisiana = 0,Dutchlantis = 1AutoPlant:Louisiana = 0,Dutchlantis = 1Bauxite Mine:Louisiana = 0,Dutchlantis = 1Chemical Plant:Louisiana = 0,Dutchlantis = 1Farm Corn:Louisiana = 1,Dutchlantis = 0FarmCotton:Louisiana = 1,Dutchlantis = 0FarmRice:Louisiana = 1,Dutchlantis = 0FarmSheep:Louisiana = 0,Dutchlantis = 1FarmSugar:Louisiana = 1,Dutchlantis = 0Fertilizer Factory:Louisiana = 0,Dutchlantis = 1Iron Mine:Louisiana = 0,Dutchlantis = 1Nuclear Power Plant:Louisiana = 0,Dutchlantis = 1Oil Refinery:Louisiana = 1,Dutchlantis = 0Plastics Factory:Louisiana = 0,Dutchlantis = 1Recycling Plant:Louisiana = 0,Dutchlantis = 1Steel Mill:Louisiana = 0,Dutchlantis = 1Tool And Die:Louisiana = 0,Dutchlantis = 1Uranium Mine:Louisiana = 0,Dutchlantis = 1
The broader compare-candidate-table surface agrees with the same conclusion:
- common semantic family remains
scenario-named-candidate-availability-table Warehouse05stays1 / 1difference_count = 43, but those differences are still driven by the wider industrial mix, header words, and the zero-trailer-name set rather than by any uniqueWarehouse05bit
Current Implication
The Tier 2 candidate/world-state rebuild strip remains plausible in general because it owns named
candidate availability seeding and refresh, but the current evidence no longer supports the narrow
claim that Louisiana.gmp gets its Add Building Warehouse05 row from a unique
Warehouse05 availability difference relative to Dutchlantis.gmp.
Two deeper grounded notes tighten that further:
structure_candidate_collection_rebuild_runtime_records_from_scenario_state0x00412d70does not consult the scenario-side recipe-book name at[state+0x0fe8]; it formats the rebuilt candidate display stem from one of two fixed built-in roots0x005c93d8or0x005c93e8plus the current ordinal.scenario_state_upsert_named_candidate_availability_record_and_refresh_runtime_filters0x00434f20now reads safely as a real boolean availability override writer rather than a wider mode enum.
So the next Tier 2 recovery question is now tighter still:
- whether the relevant difference is in broader candidate-state rebuild sequencing, latch refresh,
or cargo-membership/runtime-record reconstruction under
0x00437737 / 0x00412c10 / 0x00412bd0 / 0x00412d70 / 0x00412fb0, rather than in the direct named availability bit forWarehouse05itself.
Nearest Single-Import Peer Check
The same boundary now holds against the nearest single-import recipe peer too:
Louisiana.gmpSouth East USA.gmp
Direct inspect-candidate-table checks still keep the key port/warehouse rows aligned:
Warehouse05Louisiana.gmp = 1South East USA.gmp = 1
Port01Louisiana.gmp = 1South East USA.gmp = 1
So even after the recipe-side frontier moved from “same coarse mode shape” to “same single-import
family,” the direct named-availability table still does not provide the missing Tier 2 split for
the shipped 5200 :: [7:0] Add Building Warehouse05 row.
That leaves the same later owners as the honest next focus:
0x00412d70template-bank and runtime-record rebuild0x00411ce0 / 0x00411ee0dependent mode-flag and cargo-summary refresh0x00412c10latch refresh after those runtime records already exist
Port Versus Warehouse Runtime Roots
One broader binary pass now closes the fixed-root ambiguity inside 0x00412d70.
Direct objdump over RT3.exe shows the two built-in format roots are:
0x005c93d8 = "Warehouse%02d"0x005c93e8 = "Port%02d"
And the candidate rebuild chooses between them exactly as:
- if
[candidate+0xba] != 0- use
Port%02d
- use
- else
- use
Warehouse%02d
- use
So the later Tier 2 runtime-record frontier is no longer an abstract “two built-in roots” question. It is specifically:
- how
0x00412d70bank or template selection and the live availability bytes[candidate+0xba/+0xbb]determine which rebuilt candidates land on theWarehouse%02dside versus thePort%02dside - and why the
Warehouse%02dside inLouisiana.gmpis the one that later lines up with the shipped5200 :: [7:0]Add Building Warehouse05strip
That also keeps the direct named-availability boundary honest:
Warehouse05 = 1in the fixed scenario table still does not explain the runtime split by itself- the next meaningful owner seam is the later port-versus-warehouse runtime-record rebuild under
0x00412d70, before0x00412c10mirrors anything into[candidate+0x7ac]
Writer-Side Split Above The Availability Bytes
One more direct disassembly pass narrows that owner seam further.
structure_candidate_stream_load_runtime_record_and_rebuild_cargo_state 0x004120b0 does
rebuild a substantial portion of each live candidate record:
- clears dependent runtime pointers and flags such as
[candidate+0x79c/+0x7a0/+0x78c/+0x790/+0x794/+0x7b0] - reads the fixed per-record stream fields at
[candidate+0x04/+0x22/+0x26/+0x28/+0x2a/+0x2e/+0x32/+0x33] - restores the selector-bank bytes
[candidate+0xb9/+0xba/+0xbb] - allocates and streams the packed
0xbcdescriptor array into[candidate+0x37]
So the current strongest ownership split is now:
- direct named-availability table
[state+0x66b2]is not the missing differentiator by itself - both source-record import
0x00414490and per-record stream-load0x004120b0do carry the relevant selector-bank bytes from persisted/source state into the live candidate family - but the stock
Data/BuildingTypes/*.bcacorpus currently keeps[record+0xb8/+0xb9/+0xba/+0xbb]at zero across every observed file, includingWarehouse.bcaandPort.bca - so the surviving frontier is no longer “does the lower loader import
[candidate+0xba/+0xbb]?” but rather which later owner or alternate content path makes the live bank-qualified split differ from that all-zero shipped BCA corpus before0x00412d70clones or reuses one bank-qualified live candidate
That makes the next Tier 2 question more concrete still:
- how any nonzero bank-qualified template source under
[candidate+0xba]versus[candidate+0xbb]is actually seeded above the stock all-zero BCA corpus, and then drives the laterWarehouse%02dside inLouisiana.gmp - and whether that preserved bank/template state is the real bridge from the minimal recipe cluster
to the shipped
5200 :: [7:0]Add Building Warehouse05row