L4: engine doc for the research-selection capture
This commit is contained in:
parent
ca0de05e07
commit
c842d44d62
1 changed files with 30 additions and 0 deletions
|
|
@ -82,3 +82,33 @@ Lane L5 established this first and better, on VM146, and owns it
|
|||
oracle, not this pair. What this lane adds is where the divergence lives: the differing value is in
|
||||
the **submitted command block**, in player 512's research-target gate, so the decision is made
|
||||
client-side before submission and the sim is not diverging on identical input.
|
||||
|
||||
## Addendum — the research-selection tie set
|
||||
|
||||
`airesearch=on` adds three more register-transparent dump hooks: the per-player delimiter
|
||||
(`SelectResearchTarget 0x006c8890`, which also prints the player's current target so a player that
|
||||
returns immediately is distinguishable from one that walks an empty list), one line per candidate
|
||||
(`TryResearchCandidate 0x006c8580`, in the order the selector sees them), and the outcome
|
||||
(`cl_SetResearchTarget 0x00578f60`, which takes the tech's **name**, so the chosen tech is a string
|
||||
in a register and needs no id table). Four reachability probes go with them: the two producers phase
|
||||
18 tries before the walk, and the two halves of the fallback rotation.
|
||||
|
||||
Measured on one End Turn from `turn1-state.sav`:
|
||||
|
||||
* **Only one of the three AI players reaches the candidate walk.** The other two get their target
|
||||
from a producer that runs first, which is why they are stable across every run of both lanes and
|
||||
the third is not — they are on a different code path, not a luckier one.
|
||||
* **The candidate stream has length one**, and the single entry is `{2, 12}` — small integers, a
|
||||
*category*, not a tech. A vector of one has no order to scramble, so arrival order is not the
|
||||
mechanism and the prediction that said it was is falsified.
|
||||
* **The fallback never ran** (both probes zero), so it is not the three-arm rotation either.
|
||||
|
||||
The variation is therefore inside the resolver that turns a category into a tech. `k` is nameable
|
||||
from the shipped tech data for the arm that was observed: `XNC_ROOT` allows six tier-1 techs at an
|
||||
identical 2000 RP, one per species, and each allows exactly one tier-2 successor — the six
|
||||
`XNC_Trns<Species>2`. Four of those six are among the five values observed across six runs between
|
||||
lanes L4 and L5. **Their costs differ (13000–30000), so the resolver is not ranking by cost**; it is
|
||||
taking whichever member of the available set it reaches first.
|
||||
|
||||
Full account, including the one observed value that is *not* in that family and what single run
|
||||
would settle it, in `sots-re/findings/subsystems/ai-order-capture.md` §3.2.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue