L4: the research tie set -- k = 6, named, and the mechanism measured twice

Two processes, same workload. Phase 18 tries three producers; only ONE of the
three AI players reaches the candidate walk at all, which is why the other two
are stable across every run of both lanes -- different code path, not better luck.

For that player the candidate stream is ONE entry, {2, 12}, in BOTH runs -- a
category, not a tech. So arrival order in the candidate vector is not the
mechanism (a vector of one has no order), and the three-arm fallback never ran
(both probes zero, both runs). The variation is inside the resolver that turns a
category into a tech, and it produced XNC_TrnsMorr2 (techId 288) in one process
and XNC_TrnsHum2 (techId 282) in the next.

k is nameable from the shipped tech data: XNC_ROOT allows six tier-1 techs at an
identical 2000 RP, one per species, each allowing exactly one tier-2 successor --
the six XNC_Trns<Species>2. Four of the six have been observed across six runs
between lanes L4 and L5, and their costs differ (13000-30000), so the resolver is
not ranking by cost; it takes whichever member of the available set it reaches
first.

Bonus rule-19 result: run R2's autosave is byte-identical to the hooks=off control
of the same workload. Twenty detours installed, same tiebreak, same bytes -- the
only free variable in the whole turn is the tiebreak itself.

Still open and flagged: BIO_GnMod, the one observed value outside that family.
Seven more addresses in ghidra/addresses.d/lane-l4.json; the eighth collided with
lane AI4's cl_SetResearchTarget and was dropped with the agreement recorded.
This commit is contained in:
lane-l4 2026-09-08 18:30:05 -04:00
parent 79245837be
commit 0c162e5831
4 changed files with 513 additions and 3 deletions

View file

@ -304,6 +304,168 @@ processes, and — from this side — put a write watchpoint on the block's rese
---
## 3.2 The tie set — where the one non-reproducible decision actually comes from
The coordinator's question: if that pick is a **tie** broken by something per-process, the
original's outcomes form a small enumerable set, and a deterministic `game/ai` can pick canonically
and claim *"our choice is one of exactly k, and here are all k"*. Naming k needs the candidate list.
Predictions are in `sots-engine` `docs/L4-predictions.md` (addendum, committed before the research
instrument was written). **P10 is falsified, in the direction that makes k easy.**
### The structure, read before the run
Process Turn phase 18 (`0x006caf70`) tries **three** producers and takes the first non-null:
```
eax = 0x006a84f0(agent) ; producer A
if (!eax) eax = 0x006c27c0(agent) ; producer B
if (!eax) eax = SelectResearchTarget 0x006c8890(...) ; producer C, the candidate walk
if (eax && eax != player->+0x294) cl_SetResearchTarget(<eax+4 resolved as a C string>)
```
`cl_SetResearchTarget 0x00578f60` takes the tech's **name**, not an id — phase 18 resolves the
chosen object's `std::string` at `+0x4` through the short-string union and pushes the `char*`. That
detail is what made the outcome directly loggable.
Producer C walks a vector of 0x0c-stride candidates **front to back** and returns the first that
`TryResearchCandidate 0x006c8580` accepts. **No sort, no score, no comparator** — the vector's order
is the priority. If nothing is accepted it falls through to a three-arm rotation seeded by
`0x006b36e0(agent) & 7` over two eight-entry `.data` tables (`0x00a1a544` = `2 0 2 0 2 1 2 0`,
`0x00a1a564` = `0 2 0 2 1 0 2 0`).
### What ran
One End Turn from `turn1-state.sav`, three dump hooks and four reachability probes:
| | count |
|---|---:|
| producer A `0x006a84f0` entered | **3** — once per AI player |
| producer B `0x006c27c0` entered | **3** |
| `SelectResearchTarget` entered | **1** |
| candidates offered to `TryResearchCandidate` | **1**, `{w0 = 2, w1 = 12}` |
| fallback index `0x006b36e0` / arm `0x006c8670` | **0 / 0** |
Outcomes, in the order they were set: `IND_Waldo` (player 32), `DRV_PlsFiss` (player 496),
`XNC_TrnsMorr2` (player 512, `species = 2`, `curTarget = 0`).
**Three things follow immediately.**
**1. Only one of the three AI players reaches the candidate walk.** Players 32 and 496 got their
targets from producer A or B and never entered `SelectResearchTarget` at all. That is why they are
stable across every run of both lanes and 512 is not: they are on a different code path. P12's
control holds in substance and for a better reason than predicted — it is not that their first
candidate is always acceptable, it is that they have no candidate walk.
**2. The candidate stream has length one, so arrival order is not the mechanism. P10 falsified.**
The single candidate is `{2, 12}` — small integers, not pointers, and not a tech: it is a
**category**. `TryResearchCandidate` resolves that category to a concrete tech, and *that*
resolution is what varies. A vector of one has no order to scramble.
**3. It is not the fallback either.** Both fallback probes read zero, so the three-arm rotation —
the other candidate mechanism, with `k <= 3` by construction — did not run. Both of P10's named
falsifiers fired against it, which is the useful outcome: the variation is inside `0x006c8580`.
### k, named
`TechTree/MasterTechList.tech` settles the size without another run. `XNC_ROOT` allows exactly six
tier-1 techs, one per species, **all at RP 2000**:
```
CCC_TrnsHum CCC_TrnsLir CCC_TrnsTrk CCC_TrnsHvr CCC_TrnsZul CCC_TrnsMorr
```
and each of those allows exactly one tier-2 successor in the same `XNC` family:
| tech | RP |
|---|---:|
| `XNC_TrnsTrk2` | 13000 |
| `XNC_TrnsHum2` | 15000 |
| `XNC_TrnsHvr2` | 15000 |
| **`XNC_TrnsMorr2`** | 16000 |
| `XNC_TrnsLir2` | 25000 |
| `XNC_TrnsZuul2` | 30000 |
So for a player whose frontier is that family, **k = 6 and all six are nameable**. Across six runs
of this workload between lanes L4 and L5 the observed picks are `XNC_TrnsHum2`, `XNC_TrnsHvr2`,
`XNC_TrnsLir2`, `XNC_TrnsMorr2` — **four of the six, and every one inside the set**. Neither of the
two unobserved members has been contradicted; they are simply not yet drawn.
**The costs are not equal**, which is the load-bearing detail: 13000 to 30000. A cost-ranked
selection would pick `XNC_TrnsTrk2` every time. It does not. So the resolver is not ranking — it is
taking whichever member of the available set it reaches first, and *that* is the per-process
quantity. Exactly the shape lane L5 inferred, now with the container identified as the player's
available-tech set rather than the task list.
### The second capture, which closes the category question
A second process, same build, same workload, same click path:
| | run R1 | run R2 |
|---|---|---|
| producers A / B entered | 3 / 3 | 3 / 3 |
| `SelectResearchTarget` entered | 1 | 1 |
| candidate stream | **one entry, `{2, 12}`** | **one entry, `{2, 12}`** |
| fallback index / arm | 0 / 0 | 0 / 0 |
| player 32 target | `IND_Waldo` | `IND_Waldo` |
| player 496 target | `DRV_PlsFiss` | `DRV_PlsFiss` |
| **player 512 target** | **`XNC_TrnsMorr2`, techId 288** | **`XNC_TrnsHum2`, techId 282** |
| `(Autosave).sav` | `e43ec1d2b443c101` | **`d59bb9f2fd0eb535`** |
**The category is stable and the outcome is not.** Two processes, the same single candidate `{2, 12}`,
two different techs — so the variation is inside `TryResearchCandidate` and nowhere else. The
candidate vector is not the tie set; the tie set is what the resolver can return for that category.
Both observed values are in the six-member `XNC_Trns<Species>2` family, and their ids differ by six
(282 and 288), consistent with the family occupying a short run of consecutive ids.
**And the instrument is exonerated on this workload too.** R2's post-turn autosave is
`d59bb9f2fd0eb535` — **byte-identical to the `hooks=off` control run** of §3.1, which produced the
same tech. Twenty detours installed, and when the tiebreak lands the same way the bytes land the
same way. That is a cleaner statement than a single-hash rule-19 control could have made here: the
only free variable in the whole turn is the tiebreak.
### The one thing that does not fit, said plainly
The fifth observed value is **`BIO_GnMod`** (lane L5's run B, and the value in the reference
`turn2-state.sav`). It is family `BIO`, RP 4000, allowed by `BIO_ROOT` — **not** in the XNC set. So
either the category candidate `{2, 12}` is not constant across processes, or the resolver can leave
the family. This lane captured the candidate stream **once**; one sample cannot show a category is
constant.
That run was taken and `{2, 12}` repeated while the outcome moved, so the category is not what
varies. `BIO_GnMod` therefore came from a run whose *available set* differed — a player whose
frontier included a `BIO` tech as well — or the resolver's set is broader than one family. Two
captures cannot separate those.
**Honest status of the claim**: the *mechanism* is measured and measured twice — a resolver picking
from an unordered available set, not a tie in the candidate vector (length one, both runs) and not
the fallback rotation (zero hits, both runs). The *set* is named exactly for the arm observed in
both captures. Whether the resolver's set is ever wider than that family is **not** settled, and
`BIO_GnMod` is the standing reason to doubt it. The probe that settles it is one more capture on a
run that produces a non-XNC value, or an entry probe inside `0x006c8580` on whatever container it
walks.
### What our engine should do
The verification claim the coordinator asked for is available and it is worth restating precisely:
> A deterministic `game/ai` picks the canonical member of the tie set — canonical by tech id, which
> is what the command carries anyway. The claim is then **"our pick is a member of a set of six we
> can name from the shipped tech data, and every observed original run picked a member of that
> set"**, which is checkable against any number of original runs without ever needing them to agree
> with each other.
That is strictly stronger than behavioural equivalence and it keeps a byte match reachable on every
run where the original happens to land on the canonical member. It also costs nothing to implement:
the set is a query on data the engine already loads.
The second capture is done and it supports this: the category is stable, the outcome is not, and
both outcomes are in the named set. What is still missing before the claim can be *asserted* is
whether the resolver's set is ever wider than the one family — `BIO_GnMod` says it might be. Until
that is closed the engine should keep masking the leaf, as lane L5 already has it, and carry the
tie-set claim as the thing to prove rather than as a proved thing.
## 4. Corrections to earlier findings
* **`ai-order-emission.md` §2 — "the four `Species == 4` factions submit no command block at all".**

View file

@ -1,5 +1,5 @@
{
"_note": "Lane L4 2026-09-08. Nine entry-probe targets for the live AI order capture on VM145. Eight are IAITask::Execute bodies (vtable slot 5) named from the RTTI class that owns the vtable; three of them are SHARED between a task and its `Goal` variant (lane AI3 §5: the paired classes have an identical Execute and differ only in their two GetTarget slots), so the name records the pair rather than pretending there are two bodies. The ninth is the StrategyClient order method AITRaid reaches at depth 1, which is the list-16 producer and the subject of AI3 §2.4. All nine were checked against dumps/functions.json as real function starts and disassembled far enough to confirm a >=5-byte patchable prologue with no branch target inside it, because every one of them is a MinHook target in this lane's shim module. Addresses already carried elsewhere (RunTaskList, IsClaimedByAnotherTask, AcquireFleetsForTask, RequestBuildForTask, AssignFleetsAndIssueOrders, IssueRouteForFleets, BuildTurnCommands, ApplyAllTurnCommands, ApplyTurnCommandBatch) are deliberately NOT re-declared here -- lanes AI1/AI2/AI3/A2 own those names and the generator rejects a same-address-different-name collision.",
"_note": "Lane L4 2026-09-08. Nine entry-probe targets for the live AI order capture on VM145. Eight are IAITask::Execute bodies (vtable slot 5) named from the RTTI class that owns the vtable; three of them are SHARED between a task and its `Goal` variant (lane AI3 \u00a75: the paired classes have an identical Execute and differ only in their two GetTarget slots), so the name records the pair rather than pretending there are two bodies. The ninth is the StrategyClient order method AITRaid reaches at depth 1, which is the list-16 producer and the subject of AI3 \u00a72.4. All nine were checked against dumps/functions.json as real function starts and disassembled far enough to confirm a >=5-byte patchable prologue with no branch target inside it, because every one of them is a MinHook target in this lane's shim module. Addresses already carried elsewhere (RunTaskList, IsClaimedByAnotherTask, AcquireFleetsForTask, RequestBuildForTask, AssignFleetsAndIssueOrders, IssueRouteForFleets, BuildTurnCommands, ApplyAllTurnCommands, ApplyTurnCommandBatch) are deliberately NOT re-declared here -- lanes AI1/AI2/AI3/A2 own those names and the generator rejects a same-address-different-name collision. COLLISION RECORDED (rule 14): lane L4 independently reached 0x00578f60 and would have filed it as StrategyClient_cl_SetResearchTarget_Facade; lane-ai4.json already carries it as cl_SetResearchTarget, which is the better name, so this fragment drops the entry. The one fact L4 adds and lane AI4 did not have: that function takes the tech's NAME (a const char*), not an id -- phase 18 at 0x006cafd0-0x006cafdf resolves the chosen object's std::string at +0x4 through the short-string union before pushing it. That belongs on the AI4 entry's prototype whenever the integrator folds the fragments in.",
"entries": [
{
"name": "AITColonize_Execute",
@ -37,7 +37,7 @@
"name": "AITRaid_Execute",
"addr": "0x0068e670",
"convention": "thiscall",
"prototype": "void __thiscall Game::AITRaid::Execute(StrategyAIAgent* agent, int pass) -- RET 8, IAITask vtable slot 5. THE ONE TASK WHOSE PASS-0 BEHAVIOUR IS NOT SETTLED: at 0x0068e89e it calls 0x006b76a0 and then at 0x0068e8b8 loops the list-16 order method 0x007635f0(client, fleetId, 1) over the returned fleets, and NEITHER the call nor the loop carries a `pass` guard of its own. AI3 §2.3's argument says the fleet vector at [ebp-0x28] is empty on pass 0 because it is downstream of the same hub, but [ebp-0x28] was never traced to closure. This address exists as an address so that a zero at 0x007635f0 can be read: entered-and-silent and never-entered are opposite answers (method rule 20)",
"prototype": "void __thiscall Game::AITRaid::Execute(StrategyAIAgent* agent, int pass) -- RET 8, IAITask vtable slot 5. THE ONE TASK WHOSE PASS-0 BEHAVIOUR IS NOT SETTLED: at 0x0068e89e it calls 0x006b76a0 and then at 0x0068e8b8 loops the list-16 order method 0x007635f0(client, fleetId, 1) over the returned fleets, and NEITHER the call nor the loop carries a `pass` guard of its own. AI3 \u00a72.3's argument says the fleet vector at [ebp-0x28] is empty on pass 0 because it is downstream of the same hub, but [ebp-0x28] was never traced to closure. This address exists as an address so that a zero at 0x007635f0 can be read: entered-and-silent and never-entered are opposite answers (method rule 20)",
"status": "unverified",
"source": "findings/subsystems/ai-stepping-and-passes.md#2.4,#8.3 -- lane AI3 named this probe; lane L4 built it"
},
@ -72,6 +72,62 @@
"prototype": "bool __thiscall Game::StrategyClient::OrderList16(int objectId, bool flag) -- RET 8. THE LIST-16 PRODUCER. Opens with `cmp byte [this+0x15c], 0` -- the End-Turn latch StrategyClient::EndTurn 0x00783be0 sets at 0x00783c59 before BuildTurnCommands runs -- so like every other order method it refuses once the turn has been submitted. Element record for list 16 is {i32, bool} (lane Q), matching the (objectId, flag) pair; list 16 is in the PAYING half of the ModCount table (bump at 0x00821e23 in its applier 0x00821e20). Reached from AITRaid::Execute at depth 1. The method is named for the list it fills, NOT for what the flag means: no save has ever carried a list-16 element and nothing has been observed",
"status": "unverified",
"source": "findings/subsystems/ai-stepping-and-passes.md#2.4 + findings/objects/turncommands-block.md#3 -- lane AI3 named the probe, lane Q typed the element; lane L4 read the prologue and checked the +0x15c latch"
},
{
"name": "StrategyAIAgent_SelectResearchTarget",
"addr": "0x006c8890",
"convention": "thiscall",
"prototype": "void* __thiscall Game::StrategyAIAgent::SelectResearchTarget(void** outSlot) -- RET 4, the THIRD and last research producer tried by Process Turn phase 18 (0x006caf70), reached only when 0x006a84f0 and 0x006c27c0 both answer null. Body: (1) `if (agent->+0x10->+0x150 /*ClientPlayer*/ ->+0x294 != 0) return 0` -- a player that already has a target picks nothing; (2) build a std::vector of 0x0c-stride candidates with 0x006c2490(agent, &vec); (3) walk it FRONT TO BACK calling 0x006c8580(ecx = outSlot, edx = cand[1], stack: agent, cand[0]) and return the FIRST non-null answer; (4) if none answered, fall through to the three-arm rotation seeded by 0x006b36e0(agent) & 7 over the .data tables at 0x00a1a544 / 0x00a1a564. THERE IS NO SORT AND NO SCORE IN THE WALK: the vector's arrival order IS the priority, which is what makes a per-process ordering difference change the outcome",
"status": "unverified",
"source": "findings/subsystems/ai-order-capture.md -- lane L4 2026-09-08, instruction-stream read of 0x006caf70 and 0x006c8890 swept to the next function start"
},
{
"name": "StrategyAIAgent_BuildResearchCandidates",
"addr": "0x006c2490",
"convention": "cdecl",
"prototype": "void __cdecl Game::StrategyAIAgent::BuildResearchCandidates(StrategyAIAgent* agent, std::vector<Candidate>* out) -- constructs a working object on the stack (0x006bcca0(agent)), emits the candidate vector into `out` (0x006bc500), destroys it (0x006bcef0). Element stride 0x0c. The emitter is a nested walk over groups with NO std::sort at that level, so the output order is the walk order",
"status": "unverified",
"source": "findings/subsystems/ai-order-capture.md -- lane L4 2026-09-08"
},
{
"name": "StrategyAIAgent_TryResearchCandidate",
"addr": "0x006c8580",
"convention": "fastcall",
"prototype": "void* __fastcall Game::StrategyAIAgent::TryResearchCandidate(void** outSlot /*ecx*/, int candWord1 /*edx*/, StrategyAIAgent* agent, int candWord0) -- called once per candidate in arrival order by SelectResearchTarget; the FIRST call that returns non-null ends the walk and that return value is the chosen tech object (its +0x4 is the std::string the order method is given). An entry probe on this address therefore records the whole candidate stream in the order the selector sees it",
"status": "unverified",
"source": "findings/subsystems/ai-order-capture.md -- lane L4 2026-09-08"
},
{
"name": "StrategyAIAgent_ResearchProducerA",
"addr": "0x006a84f0",
"convention": "cdecl",
"prototype": "void* __cdecl (StrategyAIAgent* agent) -- the FIRST research producer tried by phase 18. Body unread; probed for reachability only, because a non-null answer here means the candidate walk never runs",
"status": "unverified",
"source": "findings/subsystems/ai-order-capture.md -- lane L4 2026-09-08, from the call site at 0x006caf8f"
},
{
"name": "StrategyAIAgent_ResearchProducerB",
"addr": "0x006c27c0",
"convention": "thiscall",
"prototype": "void* __thiscall (StrategyAIAgent* this) -- the SECOND research producer tried by phase 18, entered with `mov eax,esi; call` (the receiver is in EAX at the call site, so the real convention is not confirmed). Body unread; probed for reachability only",
"status": "unverified",
"source": "findings/subsystems/ai-order-capture.md -- lane L4 2026-09-08, from the call site at 0x006caf9d"
},
{
"name": "StrategyAIAgent_ResearchFallbackIndex",
"addr": "0x006b36e0",
"convention": "thiscall",
"prototype": "int __thiscall (StrategyAIAgent* this) -- SelectResearchTarget's fallback index source, masked with 0x80000007 and used to index the eight-entry .data tables at 0x00a1a544 (2 0 2 0 2 1 2 0) and 0x00a1a564 (0 2 0 2 1 0 2 0). It is NOT an RNG draw: it reads ClientPlayer+0xf4 and calls 0x0080da80. A hit here means the research pick came from the three-arm rotation, not from the candidate list",
"status": "unverified",
"source": "findings/subsystems/ai-order-capture.md -- lane L4 2026-09-08"
},
{
"name": "StrategyAIAgent_ResearchFallbackArm",
"addr": "0x006c8670",
"convention": "fastcall",
"prototype": "void* __fastcall (void** outSlot /*ecx*/, StrategyAIAgent* agent) -- one arm of SelectResearchTarget's three-arm fallback rotation; the arm index is (i + table[seed]) % 3 for i = 0,1,2 and the first non-null answer wins. Its outcome space is therefore at most three",
"status": "unverified",
"source": "findings/subsystems/ai-order-capture.md -- lane L4 2026-09-08"
}
]
}
}

View file

@ -0,0 +1,146 @@
aiorders: out=C:\SOTS\shim.aiorders.txt probes=20 of 20
aiorders: batch hook StrategySim::ApplyTurnCommandBatch rva=0x0048f9b0 va=013cf9b0 create=MH_OK enable=MH_OK
airesearch: StrategyAIAgent::SelectResearchTarget rva=0x002c8890 va=01208890 create=MH_OK enable=MH_OK
airesearch: StrategyAIAgent::TryResearchCandidate rva=0x002c8580 va=01208580 create=MH_OK enable=MH_OK
airesearch: cl_SetResearchTarget rva=0x00178f60 va=010b8f60 create=MH_OK enable=MH_OK
aiprobe: 0 StrategyAIAgent::RunTaskList [control+pass] rva=0x002b3320 va=011f3320 create=MH_OK enable=MH_OK
aiprobe: 1 StrategyClient::OrderList16 [list 16 emit] rva=0x003635f0 va=012a35f0 create=MH_OK enable=MH_OK
aiprobe: 2 AITRaid::Execute rva=0x0028e670 va=011ce670 create=MH_OK enable=MH_OK
aiprobe: 3 AITColonize::Execute [+Goal] rva=0x0028b400 va=011cb400 create=MH_OK enable=MH_OK
aiprobe: 4 AITEscortGateInvade::Execute [+Goal] rva=0x0028c7c0 va=011cc7c0 create=MH_OK enable=MH_OK
aiprobe: 5 AITInvade::Execute [+Goal] rva=0x0028d7a0 va=011cd7a0 create=MH_OK enable=MH_OK
aiprobe: 6 AITNodeBore::Execute rva=0x0028e590 va=011ce590 create=MH_OK enable=MH_OK
aiprobe: 7 AITBuildPoliceShips::Execute rva=0x00290380 va=011d0380 create=MH_OK enable=MH_OK
aiprobe: 8 AITBuildDeepScanShips::Execute rva=0x002901a0 va=011d01a0 create=MH_OK enable=MH_OK
aiprobe: 9 AITAdvanceIdleShips::Execute rva=0x0028f230 va=011cf230 create=MH_OK enable=MH_OK
aiprobe: 10 StrategyAIAgent::RequestBuildForTask [lists 3,1] rva=0x002cea50 va=0120ea50 create=MH_OK enable=MH_OK
aiprobe: 11 StrategyAIAgent::AssignFleetsAndIssueOrders [lists 14,8,10] rva=0x002c16c0 va=012016c0 create=MH_OK enable=MH_OK
aiprobe: 12 StrategyAIAgent::IssueRouteForFleets [list 14] rva=0x002bbd50 va=011fbd50 create=MH_OK enable=MH_OK
aiprobe: 13 StrategyAIAgent::AcquireFleetsForTask rva=0x002ceef0 va=0120eef0 create=MH_OK enable=MH_OK
aiprobe: 14 StrategyAIAgent::IsClaimedByAnotherTask [entry only] rva=0x002a8d20 va=011e8d20 create=MH_OK enable=MH_OK
aiprobe: 15 StrategyClient::BuildTurnCommands [control] rva=0x00383780 va=012c3780 create=MH_OK enable=MH_OK
aiprobe: 16 AIResearch::ProducerA rva=0x002a84f0 va=011e84f0 create=MH_OK enable=MH_OK
aiprobe: 17 AIResearch::ProducerB rva=0x002c27c0 va=012027c0 create=MH_OK enable=MH_OK
aiprobe: 18 AIResearch::FallbackIndex rva=0x002b36e0 va=011f36e0 create=MH_OK enable=MH_OK
aiprobe: 19 AIResearch::FallbackArm rva=0x002c8670 va=01208670 create=MH_OK enable=MH_OK
---- aibatch seq=1 blocks=0x004feff8 n=1 stride=0x1b4 ----
aiblk seq=1 blk=0/1 at=0x004feff8 pid=16 rate=1:0.25 target=0:5238812 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=1 blk=0 pid=16 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiprobe seq=1 idx=0 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::RunTaskList [control+pass]
aiprobe seq=1 idx=1 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyClient::OrderList16 [list 16 emit]
aiprobe seq=1 idx=2 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITRaid::Execute
aiprobe seq=1 idx=3 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITColonize::Execute [+Goal]
aiprobe seq=1 idx=4 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITEscortGateInvade::Execute [+Goal]
aiprobe seq=1 idx=5 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITInvade::Execute [+Goal]
aiprobe seq=1 idx=6 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITNodeBore::Execute
aiprobe seq=1 idx=7 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITBuildPoliceShips::Execute
aiprobe seq=1 idx=8 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITBuildDeepScanShips::Execute
aiprobe seq=1 idx=9 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITAdvanceIdleShips::Execute
aiprobe seq=1 idx=10 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aiprobe seq=1 idx=11 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::AssignFleetsAndIssueOrders [lists 14,8,10]
aiprobe seq=1 idx=12 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::IssueRouteForFleets [list 14]
aiprobe seq=1 idx=13 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::AcquireFleetsForTask
aiprobe seq=1 idx=14 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::IsClaimedByAnotherTask [entry only]
aiprobe seq=1 idx=15 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyClient::BuildTurnCommands [control]
aiprobe seq=1 idx=16 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AIResearch::ProducerA
aiprobe seq=1 idx=17 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AIResearch::ProducerB
aiprobe seq=1 idx=18 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AIResearch::FallbackIndex
aiprobe seq=1 idx=19 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AIResearch::FallbackArm
aiprobe seq=1 CONTROL ZERO -- RunTaskList was not entered in this window, so every other row above is unmeasured rather than absent
airesult sel=0 candidatesTried=0 chose='IND_Waldo' (ptr=0x03c256dc)
airesult sel=0 candidatesTried=0 chose='DRV_PlsFiss' (ptr=0x03bb89bc)
---- airesearch sel=1 agent=0x31e88038 client=0x32cb0908 player=0x0d260f28 curTarget=0x00000000 species=2 ----
aicand sel=1 idx=0 agent=0x31e88038 slot=0x31e88174 w0=0x00000002(2) '-' w1=0x0000000c(12) '-'
airesult sel=1 candidatesTried=1 chose='XNC_TrnsMorr2' (ptr=0x0cff423c)
---- aibatch seq=2 blocks=0x0d335f00 n=8 stride=0x1b4 ----
aiblk seq=2 blk=0/8 at=0x0d335f00 pid=16 rate=1:0.25 target=0:-545755417 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=0 pid=16 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=1/8 at=0x0d3360b4 pid=32 rate=1:0.8 target=1:144 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=1 pid=32 nonEmpty=4 sizes(1..27)=[ 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ]
ailist blk=1 pid=32 list=1 off=0x070 size=1
aielem blk=1 pid=32 list=1 idx=0 node=0x330aaf88 f0=3.89263e-38 f1=3.9443e-31 ints=[ 22277988 218103809 1869508424 1632378994 6644590 220987032 11 15 221047312 2 44 854848536 ] hex=[ 0153ef64 0d000001 6f6e6f48 614c2072 0065636e 0d2bfe98 0000000b 0000000f 0d2cea10 00000002 0000002c 32f3f418 ]
ailist blk=1 pid=32 list=3 off=0x088 size=1
aielem blk=1 pid=32 list=3 idx=0 node=0x330d7e10 f0=0 f1=4.03574e-43 ints=[ 0 288 18 1 409302957 -2013009704 55283504 55283516 55283528 55283540 55283552 55283564 ] hex=[ 00000000 00000120 00000012 00000001 186577ad 8803e8d8 034b8f30 034b8f3c 034b8f48 034b8f54 034b8f60 034b8f6c ]
ailist blk=1 pid=32 list=5 off=0x0a0 size=1
aielem blk=1 pid=32 list=5 idx=0 node=0x32bb2c88 f0=4.03574e-43 f1=0 ints=[ 288 0 1065353216 0 0 0 0 0 369278462 -1946140160 851845048 63004268 ] hex=[ 00000120 00000000 3f800000 00000000 00000000 00000000 00000000 00000000 1602bdfe 8c004200 32c61fb8 03c15e6c ]
ailist blk=1 pid=32 list=23 off=0x178 size=1
aielem blk=1 pid=32 list=23 idx=0 node=0x3300d688 f0=4.03574e-43 f1=3.88586e-38 ints=[ 288 22253808 856522352 856522376 856522376 0 88654525 -2013019648 0 0 0 0 ] hex=[ 00000120 015390f0 330d7e70 330d7e88 330d7e88 00000000 0548c2bd 8803c200 00000000 00000000 00000000 00000000 ]
aiblk seq=2 blk=2/8 at=0x0d336268 pid=496 rate=1:0.8 target=1:90 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=2 pid=496 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=3/8 at=0x0d33641c pid=512 rate=1:0.8 target=1:288 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=3 pid=512 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=4/8 at=0x0d3365d0 pid=0 rate=0:2.6241e+33 target=0:1996579006 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=4 pid=0 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=5/8 at=0x0d336784 pid=0 rate=0:2.6241e+33 target=0:1996579006 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=5 pid=0 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=6/8 at=0x0d336938 pid=0 rate=0:2.6241e+33 target=0:1996579006 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=6 pid=0 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=7/8 at=0x0d336aec pid=0 rate=0:2.6241e+33 target=0:1996579006 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=7 pid=0 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aievent seq=0 run=0 pass=-1 agent=0x00000000 probe=15 StrategyClient::BuildTurnCommands [control]
aievent seq=1 run=0 pass=-1 agent=0x00000000 probe=16 AIResearch::ProducerA
aievent seq=2 run=0 pass=-1 agent=0x00000000 probe=17 AIResearch::ProducerB
aievent seq=3 run=1 pass=0 agent=0x31e883c0 probe=0 StrategyAIAgent::RunTaskList [control+pass]
aievent seq=4 run=1 pass=0 agent=0x31e883c0 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=5 run=1 pass=0 agent=0x31e883c0 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=6 run=1 pass=0 agent=0x31e883c0 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=7 run=1 pass=0 agent=0x31e883c0 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=8 run=1 pass=0 agent=0x31e883c0 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=9 run=1 pass=0 agent=0x31e883c0 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=10 run=1 pass=0 agent=0x31e883c0 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=11 run=1 pass=0 agent=0x31e883c0 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=12 run=1 pass=0 agent=0x31e883c0 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=13 run=1 pass=0 agent=0x31e883c0 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=14 run=1 pass=0 agent=0x31e883c0 probe=9 AITAdvanceIdleShips::Execute
aievent seq=15 run=2 pass=1 agent=0x31e883c0 probe=0 StrategyAIAgent::RunTaskList [control+pass]
aievent seq=16 run=2 pass=1 agent=0x31e883c0 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=17 run=2 pass=1 agent=0x31e883c0 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=18 run=2 pass=1 agent=0x31e883c0 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=19 run=2 pass=1 agent=0x31e883c0 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=20 run=2 pass=1 agent=0x31e883c0 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=21 run=2 pass=1 agent=0x31e883c0 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=22 run=2 pass=1 agent=0x31e883c0 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=23 run=2 pass=1 agent=0x31e883c0 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=24 run=2 pass=1 agent=0x31e883c0 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=25 run=2 pass=1 agent=0x31e883c0 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=26 run=2 pass=1 agent=0x31e883c0 probe=9 AITAdvanceIdleShips::Execute
aievent seq=27 run=2 pass=1 agent=0x31e883c0 probe=15 StrategyClient::BuildTurnCommands [control]
aievent seq=28 run=2 pass=1 agent=0x31e883c0 probe=16 AIResearch::ProducerA
aievent seq=29 run=2 pass=1 agent=0x31e883c0 probe=17 AIResearch::ProducerB
aievent seq=30 run=3 pass=0 agent=0x31e8b8b8 probe=0 StrategyAIAgent::RunTaskList [control+pass]
aievent seq=31 run=3 pass=0 agent=0x31e8b8b8 probe=8 AITBuildDeepScanShips::Execute
aievent seq=32 run=3 pass=0 agent=0x31e8b8b8 probe=9 AITAdvanceIdleShips::Execute
aievent seq=33 run=4 pass=1 agent=0x31e8b8b8 probe=0 StrategyAIAgent::RunTaskList [control+pass]
aievent seq=34 run=4 pass=1 agent=0x31e8b8b8 probe=8 AITBuildDeepScanShips::Execute
aievent seq=35 run=4 pass=1 agent=0x31e8b8b8 probe=9 AITAdvanceIdleShips::Execute
aievent seq=36 run=4 pass=1 agent=0x31e8b8b8 probe=15 StrategyClient::BuildTurnCommands [control]
aievent seq=37 run=4 pass=1 agent=0x31e8b8b8 probe=16 AIResearch::ProducerA
aievent seq=38 run=4 pass=1 agent=0x31e8b8b8 probe=17 AIResearch::ProducerB
aievent seq=39 run=5 pass=0 agent=0x31e88038 probe=0 StrategyAIAgent::RunTaskList [control+pass]
aievent seq=40 run=5 pass=0 agent=0x31e88038 probe=8 AITBuildDeepScanShips::Execute
aievent seq=41 run=5 pass=0 agent=0x31e88038 probe=9 AITAdvanceIdleShips::Execute
aievent seq=42 run=6 pass=1 agent=0x31e88038 probe=0 StrategyAIAgent::RunTaskList [control+pass]
aievent seq=43 run=6 pass=1 agent=0x31e88038 probe=8 AITBuildDeepScanShips::Execute
aievent seq=44 run=6 pass=1 agent=0x31e88038 probe=9 AITAdvanceIdleShips::Execute
aievent seq=45 run=6 pass=1 agent=0x31e88038 probe=15 StrategyClient::BuildTurnCommands [control]
aievent seq=46 run=6 pass=1 agent=0x31e88038 probe=15 StrategyClient::BuildTurnCommands [control]
aiprobe seq=2 idx=0 installed=1 turn=6 total=6 pass0=3 pass1=3 other=0 StrategyAIAgent::RunTaskList [control+pass]
aiprobe seq=2 idx=1 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyClient::OrderList16 [list 16 emit]
aiprobe seq=2 idx=2 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITRaid::Execute
aiprobe seq=2 idx=3 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITColonize::Execute [+Goal]
aiprobe seq=2 idx=4 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITEscortGateInvade::Execute [+Goal]
aiprobe seq=2 idx=5 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITInvade::Execute [+Goal]
aiprobe seq=2 idx=6 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITNodeBore::Execute
aiprobe seq=2 idx=7 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITBuildPoliceShips::Execute
aiprobe seq=2 idx=8 installed=1 turn=4 total=4 pass0=2 pass1=2 other=0 AITBuildDeepScanShips::Execute
aiprobe seq=2 idx=9 installed=1 turn=6 total=6 pass0=3 pass1=3 other=0 AITAdvanceIdleShips::Execute
aiprobe seq=2 idx=10 installed=1 turn=10 total=10 pass0=5 pass1=5 other=0 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aiprobe seq=2 idx=11 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::AssignFleetsAndIssueOrders [lists 14,8,10]
aiprobe seq=2 idx=12 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::IssueRouteForFleets [list 14]
aiprobe seq=2 idx=13 installed=1 turn=10 total=10 pass0=5 pass1=5 other=0 StrategyAIAgent::AcquireFleetsForTask
aiprobe seq=2 idx=14 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::IsClaimedByAnotherTask [entry only]
aiprobe seq=2 idx=15 installed=1 turn=5 total=5 pass0=0 pass1=4 other=1 StrategyClient::BuildTurnCommands [control]
aiprobe seq=2 idx=16 installed=1 turn=3 total=3 pass0=0 pass1=2 other=1 AIResearch::ProducerA
aiprobe seq=2 idx=17 installed=1 turn=3 total=3 pass0=0 pass1=2 other=1 AIResearch::ProducerB
aiprobe seq=2 idx=18 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AIResearch::FallbackIndex
aiprobe seq=2 idx=19 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AIResearch::FallbackArm

View file

@ -0,0 +1,146 @@
aiorders: out=C:\SOTS\shim.aiorders.txt probes=20 of 20
aiorders: batch hook StrategySim::ApplyTurnCommandBatch rva=0x0048f9b0 va=013cf9b0 create=MH_OK enable=MH_OK
airesearch: StrategyAIAgent::SelectResearchTarget rva=0x002c8890 va=01208890 create=MH_OK enable=MH_OK
airesearch: StrategyAIAgent::TryResearchCandidate rva=0x002c8580 va=01208580 create=MH_OK enable=MH_OK
airesearch: cl_SetResearchTarget rva=0x00178f60 va=010b8f60 create=MH_OK enable=MH_OK
aiprobe: 0 StrategyAIAgent::RunTaskList [control+pass] rva=0x002b3320 va=011f3320 create=MH_OK enable=MH_OK
aiprobe: 1 StrategyClient::OrderList16 [list 16 emit] rva=0x003635f0 va=012a35f0 create=MH_OK enable=MH_OK
aiprobe: 2 AITRaid::Execute rva=0x0028e670 va=011ce670 create=MH_OK enable=MH_OK
aiprobe: 3 AITColonize::Execute [+Goal] rva=0x0028b400 va=011cb400 create=MH_OK enable=MH_OK
aiprobe: 4 AITEscortGateInvade::Execute [+Goal] rva=0x0028c7c0 va=011cc7c0 create=MH_OK enable=MH_OK
aiprobe: 5 AITInvade::Execute [+Goal] rva=0x0028d7a0 va=011cd7a0 create=MH_OK enable=MH_OK
aiprobe: 6 AITNodeBore::Execute rva=0x0028e590 va=011ce590 create=MH_OK enable=MH_OK
aiprobe: 7 AITBuildPoliceShips::Execute rva=0x00290380 va=011d0380 create=MH_OK enable=MH_OK
aiprobe: 8 AITBuildDeepScanShips::Execute rva=0x002901a0 va=011d01a0 create=MH_OK enable=MH_OK
aiprobe: 9 AITAdvanceIdleShips::Execute rva=0x0028f230 va=011cf230 create=MH_OK enable=MH_OK
aiprobe: 10 StrategyAIAgent::RequestBuildForTask [lists 3,1] rva=0x002cea50 va=0120ea50 create=MH_OK enable=MH_OK
aiprobe: 11 StrategyAIAgent::AssignFleetsAndIssueOrders [lists 14,8,10] rva=0x002c16c0 va=012016c0 create=MH_OK enable=MH_OK
aiprobe: 12 StrategyAIAgent::IssueRouteForFleets [list 14] rva=0x002bbd50 va=011fbd50 create=MH_OK enable=MH_OK
aiprobe: 13 StrategyAIAgent::AcquireFleetsForTask rva=0x002ceef0 va=0120eef0 create=MH_OK enable=MH_OK
aiprobe: 14 StrategyAIAgent::IsClaimedByAnotherTask [entry only] rva=0x002a8d20 va=011e8d20 create=MH_OK enable=MH_OK
aiprobe: 15 StrategyClient::BuildTurnCommands [control] rva=0x00383780 va=012c3780 create=MH_OK enable=MH_OK
aiprobe: 16 AIResearch::ProducerA rva=0x002a84f0 va=011e84f0 create=MH_OK enable=MH_OK
aiprobe: 17 AIResearch::ProducerB rva=0x002c27c0 va=012027c0 create=MH_OK enable=MH_OK
aiprobe: 18 AIResearch::FallbackIndex rva=0x002b36e0 va=011f36e0 create=MH_OK enable=MH_OK
aiprobe: 19 AIResearch::FallbackArm rva=0x002c8670 va=01208670 create=MH_OK enable=MH_OK
---- aibatch seq=1 blocks=0x00eff56c n=1 stride=0x1b4 ----
aiblk seq=1 blk=0/1 at=0x00eff56c pid=16 rate=1:0.25 target=0:15725968 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=1 blk=0 pid=16 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiprobe seq=1 idx=0 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::RunTaskList [control+pass]
aiprobe seq=1 idx=1 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyClient::OrderList16 [list 16 emit]
aiprobe seq=1 idx=2 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITRaid::Execute
aiprobe seq=1 idx=3 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITColonize::Execute [+Goal]
aiprobe seq=1 idx=4 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITEscortGateInvade::Execute [+Goal]
aiprobe seq=1 idx=5 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITInvade::Execute [+Goal]
aiprobe seq=1 idx=6 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITNodeBore::Execute
aiprobe seq=1 idx=7 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITBuildPoliceShips::Execute
aiprobe seq=1 idx=8 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITBuildDeepScanShips::Execute
aiprobe seq=1 idx=9 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITAdvanceIdleShips::Execute
aiprobe seq=1 idx=10 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aiprobe seq=1 idx=11 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::AssignFleetsAndIssueOrders [lists 14,8,10]
aiprobe seq=1 idx=12 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::IssueRouteForFleets [list 14]
aiprobe seq=1 idx=13 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::AcquireFleetsForTask
aiprobe seq=1 idx=14 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::IsClaimedByAnotherTask [entry only]
aiprobe seq=1 idx=15 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyClient::BuildTurnCommands [control]
aiprobe seq=1 idx=16 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AIResearch::ProducerA
aiprobe seq=1 idx=17 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AIResearch::ProducerB
aiprobe seq=1 idx=18 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AIResearch::FallbackIndex
aiprobe seq=1 idx=19 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AIResearch::FallbackArm
aiprobe seq=1 CONTROL ZERO -- RunTaskList was not entered in this window, so every other row above is unmeasured rather than absent
airesult sel=0 candidatesTried=0 chose='IND_Waldo' (ptr=0x049856dc)
airesult sel=0 candidatesTried=0 chose='DRV_PlsFiss' (ptr=0x04917b1c)
---- airesearch sel=1 agent=0x32873538 client=0x336b4048 player=0x0dca8240 curTarget=0x00000000 species=2 ----
aicand sel=1 idx=0 agent=0x32873538 slot=0x32873674 w0=0x00000002(2) '-' w1=0x0000000c(12) '-'
airesult sel=1 candidatesTried=1 chose='XNC_TrnsHum2' (ptr=0x0da21c74)
---- aibatch seq=2 blocks=0x0dd65f00 n=8 stride=0x1b4 ----
aiblk seq=2 blk=0/8 at=0x0dd65f00 pid=16 rate=1:0.25 target=0:-545755417 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=0 pid=16 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=1/8 at=0x0dd660b4 pid=32 rate=1:0.8 target=1:144 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=1 pid=32 nonEmpty=4 sizes(1..27)=[ 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ]
ailist blk=1 pid=32 list=1 off=0x070 size=1
aielem blk=1 pid=32 list=1 idx=0 node=0x33bc8798 f0=3.89263e-38 f1=3.9443e-31 ints=[ 22277988 218103809 1869508424 1632378994 6644590 228719088 11 15 75839592 2 44 865315264 ] hex=[ 0153ef64 0d000001 6f6e6f48 614c2072 0065636e 0da1f9f0 0000000b 0000000f 04853868 00000002 0000002c 3393a9c0 ]
ailist blk=1 pid=32 list=3 off=0x088 size=1
aielem blk=1 pid=32 list=3 idx=0 node=0x33b9e368 f0=0 f1=4.03574e-43 ints=[ 0 288 18 1 361810571 -2013195776 69328604 69328592 69328580 69328568 69328556 69328544 ] hex=[ 00000000 00000120 00000012 00000001 1590ca8b 88011200 0421dedc 0421ded0 0421dec4 0421deb8 0421deac 0421dea0 ]
ailist blk=1 pid=32 list=5 off=0x0a0 size=1
aielem blk=1 pid=32 list=5 idx=0 node=0x3359ebd0 f0=4.03574e-43 f1=0 ints=[ 288 0 1065353216 0 0 0 0 0 278907780 -1946141184 863342376 863342380 ] hex=[ 00000120 00000000 3f800000 00000000 00000000 00000000 00000000 00000000 109fcb84 8c003e00 33758f28 33758f2c ]
ailist blk=1 pid=32 list=23 off=0x178 size=1
aielem blk=1 pid=32 list=23 idx=0 node=0x3396ff08 f0=4.03574e-43 f1=3.88586e-38 ints=[ 288 22253808 867819880 867819904 867819904 3932161 219556126 -2012888065 0 0 0 0 ] hex=[ 00000120 015390f0 33b9e168 33b9e180 33b9e180 003c0001 0d16291e 8805c3ff 00000000 00000000 00000000 00000000 ]
aiblk seq=2 blk=2/8 at=0x0dd66268 pid=496 rate=1:0.8 target=1:90 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=2 pid=496 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=3/8 at=0x0dd6641c pid=512 rate=1:0.8 target=1:282 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=3 pid=512 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=4/8 at=0x0dd665d0 pid=0 rate=0:8.96831e-44 target=0:0 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=4 pid=0 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=5/8 at=0x0dd66784 pid=0 rate=0:8.96831e-44 target=0:0 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=5 pid=0 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=6/8 at=0x0dd66938 pid=0 rate=0:8.96831e-44 target=0:0 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=6 pid=0 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aiblk seq=2 blk=7/8 at=0x0dd66aec pid=0 rate=0:8.96831e-44 target=0:0 boost=0:0,0 g4=0:0,0 f3=0:1,1,1 civ=0
ailists seq=2 blk=7 pid=0 nonEmpty=0 sizes(1..27)=[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
aievent seq=0 run=0 pass=-1 agent=0x00000000 probe=15 StrategyClient::BuildTurnCommands [control]
aievent seq=1 run=0 pass=-1 agent=0x00000000 probe=16 AIResearch::ProducerA
aievent seq=2 run=0 pass=-1 agent=0x00000000 probe=17 AIResearch::ProducerB
aievent seq=3 run=1 pass=0 agent=0x32873c48 probe=0 StrategyAIAgent::RunTaskList [control+pass]
aievent seq=4 run=1 pass=0 agent=0x32873c48 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=5 run=1 pass=0 agent=0x32873c48 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=6 run=1 pass=0 agent=0x32873c48 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=7 run=1 pass=0 agent=0x32873c48 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=8 run=1 pass=0 agent=0x32873c48 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=9 run=1 pass=0 agent=0x32873c48 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=10 run=1 pass=0 agent=0x32873c48 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=11 run=1 pass=0 agent=0x32873c48 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=12 run=1 pass=0 agent=0x32873c48 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=13 run=1 pass=0 agent=0x32873c48 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=14 run=1 pass=0 agent=0x32873c48 probe=9 AITAdvanceIdleShips::Execute
aievent seq=15 run=2 pass=1 agent=0x32873c48 probe=0 StrategyAIAgent::RunTaskList [control+pass]
aievent seq=16 run=2 pass=1 agent=0x32873c48 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=17 run=2 pass=1 agent=0x32873c48 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=18 run=2 pass=1 agent=0x32873c48 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=19 run=2 pass=1 agent=0x32873c48 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=20 run=2 pass=1 agent=0x32873c48 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=21 run=2 pass=1 agent=0x32873c48 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=22 run=2 pass=1 agent=0x32873c48 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=23 run=2 pass=1 agent=0x32873c48 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=24 run=2 pass=1 agent=0x32873c48 probe=13 StrategyAIAgent::AcquireFleetsForTask
aievent seq=25 run=2 pass=1 agent=0x32873c48 probe=10 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aievent seq=26 run=2 pass=1 agent=0x32873c48 probe=9 AITAdvanceIdleShips::Execute
aievent seq=27 run=2 pass=1 agent=0x32873c48 probe=15 StrategyClient::BuildTurnCommands [control]
aievent seq=28 run=2 pass=1 agent=0x32873c48 probe=16 AIResearch::ProducerA
aievent seq=29 run=2 pass=1 agent=0x32873c48 probe=17 AIResearch::ProducerB
aievent seq=30 run=3 pass=0 agent=0x32870ad8 probe=0 StrategyAIAgent::RunTaskList [control+pass]
aievent seq=31 run=3 pass=0 agent=0x32870ad8 probe=8 AITBuildDeepScanShips::Execute
aievent seq=32 run=3 pass=0 agent=0x32870ad8 probe=9 AITAdvanceIdleShips::Execute
aievent seq=33 run=4 pass=1 agent=0x32870ad8 probe=0 StrategyAIAgent::RunTaskList [control+pass]
aievent seq=34 run=4 pass=1 agent=0x32870ad8 probe=8 AITBuildDeepScanShips::Execute
aievent seq=35 run=4 pass=1 agent=0x32870ad8 probe=9 AITAdvanceIdleShips::Execute
aievent seq=36 run=4 pass=1 agent=0x32870ad8 probe=15 StrategyClient::BuildTurnCommands [control]
aievent seq=37 run=4 pass=1 agent=0x32870ad8 probe=16 AIResearch::ProducerA
aievent seq=38 run=4 pass=1 agent=0x32870ad8 probe=17 AIResearch::ProducerB
aievent seq=39 run=5 pass=0 agent=0x32873538 probe=0 StrategyAIAgent::RunTaskList [control+pass]
aievent seq=40 run=5 pass=0 agent=0x32873538 probe=8 AITBuildDeepScanShips::Execute
aievent seq=41 run=5 pass=0 agent=0x32873538 probe=9 AITAdvanceIdleShips::Execute
aievent seq=42 run=6 pass=1 agent=0x32873538 probe=0 StrategyAIAgent::RunTaskList [control+pass]
aievent seq=43 run=6 pass=1 agent=0x32873538 probe=8 AITBuildDeepScanShips::Execute
aievent seq=44 run=6 pass=1 agent=0x32873538 probe=9 AITAdvanceIdleShips::Execute
aievent seq=45 run=6 pass=1 agent=0x32873538 probe=15 StrategyClient::BuildTurnCommands [control]
aievent seq=46 run=6 pass=1 agent=0x32873538 probe=15 StrategyClient::BuildTurnCommands [control]
aiprobe seq=2 idx=0 installed=1 turn=6 total=6 pass0=3 pass1=3 other=0 StrategyAIAgent::RunTaskList [control+pass]
aiprobe seq=2 idx=1 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyClient::OrderList16 [list 16 emit]
aiprobe seq=2 idx=2 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITRaid::Execute
aiprobe seq=2 idx=3 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITColonize::Execute [+Goal]
aiprobe seq=2 idx=4 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITEscortGateInvade::Execute [+Goal]
aiprobe seq=2 idx=5 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITInvade::Execute [+Goal]
aiprobe seq=2 idx=6 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITNodeBore::Execute
aiprobe seq=2 idx=7 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AITBuildPoliceShips::Execute
aiprobe seq=2 idx=8 installed=1 turn=4 total=4 pass0=2 pass1=2 other=0 AITBuildDeepScanShips::Execute
aiprobe seq=2 idx=9 installed=1 turn=6 total=6 pass0=3 pass1=3 other=0 AITAdvanceIdleShips::Execute
aiprobe seq=2 idx=10 installed=1 turn=10 total=10 pass0=5 pass1=5 other=0 StrategyAIAgent::RequestBuildForTask [lists 3,1]
aiprobe seq=2 idx=11 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::AssignFleetsAndIssueOrders [lists 14,8,10]
aiprobe seq=2 idx=12 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::IssueRouteForFleets [list 14]
aiprobe seq=2 idx=13 installed=1 turn=10 total=10 pass0=5 pass1=5 other=0 StrategyAIAgent::AcquireFleetsForTask
aiprobe seq=2 idx=14 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 StrategyAIAgent::IsClaimedByAnotherTask [entry only]
aiprobe seq=2 idx=15 installed=1 turn=5 total=5 pass0=0 pass1=4 other=1 StrategyClient::BuildTurnCommands [control]
aiprobe seq=2 idx=16 installed=1 turn=3 total=3 pass0=0 pass1=2 other=1 AIResearch::ProducerA
aiprobe seq=2 idx=17 installed=1 turn=3 total=3 pass0=0 pass1=2 other=1 AIResearch::ProducerB
aiprobe seq=2 idx=18 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AIResearch::FallbackIndex
aiprobe seq=2 idx=19 installed=1 turn=0 total=0 pass0=0 pass1=0 other=0 AIResearch::FallbackArm