docs(behavior): trace research context owner transfer
Docs Deploy / Build and Deploy MkDocs (push) Successful in 35s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 35s
This commit is contained in:
2 files changed
+41
-13
No files matched your search
@@ -801,20 +801,38 @@ immutable TRF-таблицей. Общий helper может остановит
|
|||||||
компонентов, поэтому подтверждается только эквивалентность state/selection
|
компонентов, поэтому подтверждается только эквивалентность state/selection
|
||||||
для такого входа, не идентичность callback trace или вычисления этих sums.
|
для такого входа, не идентичность callback trace или вычисления этих sums.
|
||||||
|
|
||||||
Открыты host binding полного Handler(43), factory/ownership/lifetime реального
|
Статический перенос владельца исследовательского контекста подтверждён по трём
|
||||||
исследовательского context при запуске миссии, построение AI candidate list и
|
GOG-модулям. В `iron3d.dll` (SHA-256
|
||||||
его штатный порядок, live x87 policy, inventory/economy transitions и точная типизация
|
`d1dc4ea8535e2069b0a05c9e8be2724dd438ba44cca7a83007d8b2e50f9e35fa`)
|
||||||
всех 16-byte TMA property values. Strict ore comparison и выбор первого
|
`FUN_1005ff40` (RVA `0x5ff40`) передаёт индекс клана в `FUN_100392e0` (RVA
|
||||||
кандидата при равенстве известны только для supplied-order chooser.
|
`0x392e0`), где он сохраняется в `row+0x1c` и копируется в `descriptor[0]`.
|
||||||
Ignored acceptance проверяет реальные Part 1 AI DAT prefix и `scream.trf`, но
|
Thunk RVA `0xcd0a0` ведёт к `World3D!GetNetPlayerNum` (RVA `0x9110`), а RVA
|
||||||
byte-sorted порядок не заявляется как native catalog order и не сравнивает
|
`0xcd08e` — к `World3D!AddNewObjectToGame` (RVA `0x8310`); SHA-256
|
||||||
цену с вызовом chooser-а в mission context.
|
`World3D.dll`: `17e4a3089b2583a8cf2356c9db0390b1aba138356a09130d79b4e7e4791da61e`.
|
||||||
|
Вызов getter-а без аргументов завершается обычным `RET`; его результат становится
|
||||||
|
arg1 следующего вызова. `AddNewObjectToGame` принимает девять DWORD, включая
|
||||||
|
указатель на descriptor в arg9, и очищает стек через `RET 0x24`. RVA `0x83e9`
|
||||||
|
читает arg9; ветвь class `0xb`/QI `0x502` на RVA `0x853e` загружает
|
||||||
|
`descriptor[0]` и передаёт его в слот `+0x5c` на RVA `0x8544`;
|
||||||
|
`MisLoad.dll` (SHA-256
|
||||||
|
`c607762bb67db14ca530927c8e1347339b62b0a163ac90c708ee83142292e2bf`)
|
||||||
|
`FUN_10002a30` (RVA `0x2a30`, `RET 8`) записывает его в `inner+8`. TMA tag
|
||||||
|
`row+0x20` ограничивает число вызовов AI slot `+0x38`, но не задаёт владельца.
|
||||||
|
|
||||||
Закрывающий эксперимент для оставшихся границ: связать startup owner, research
|
Открыты runtime-выполнение Handler(43), создание и lifetime research context,
|
||||||
context и AI candidate selection в реальном `Init`; затем сравнить контекст,
|
включение factory-цепочки в полный штатный startup миссии, построение AI
|
||||||
порядок кандидатов и cost outputs оригинала с Rust на одной миссии. Покупки,
|
candidate list и штатный порядок кандидатов, live x87 policy,
|
||||||
inventory transitions и typed property schema требуют отдельных контролируемых
|
inventory/economy transitions и точная типизация всех 16-byte TMA property
|
||||||
исследований.
|
values. Strict ore comparison и выбор первого кандидата при равенстве известны
|
||||||
|
только для supplied-order chooser. Ignored acceptance проверяет реальные Part 1
|
||||||
|
AI DAT prefix и `scream.trf`, но byte-sorted порядок не заявляется как native
|
||||||
|
catalog order и не сравнивает цену с вызовом chooser-а в mission context.
|
||||||
|
|
||||||
|
Для проверки оставшихся границ нужно на живой миссии установить, проходит ли
|
||||||
|
штатный `Init` по статически восстановленной передаче owner, зафиксировать
|
||||||
|
создание и lifetime исследовательского контекста и сравнить порядок кандидатов
|
||||||
|
и cost outputs оригинала с Rust. Покупки, inventory transitions и typed
|
||||||
|
property schema требуют отдельных контролируемых исследований.
|
||||||
|
|
||||||
## Rare branches
|
## Rare branches
|
||||||
|
|
||||||
|
|||||||
@@ -526,6 +526,16 @@ let cost = calc_full_research_cost(&candidate, &table)?;
|
|||||||
Эти результаты относятся к синтетическому исследовательскому контексту;
|
Эти результаты относятся к синтетическому исследовательскому контексту;
|
||||||
штатный Handler(43) и запуск миссии здесь не проверялись.
|
штатный Handler(43) и запуск миссии здесь не проверялись.
|
||||||
|
|
||||||
|
Владелец начальной записи исследования — индекс текущего прохода по кланам.
|
||||||
|
Движок сохраняет его в `descriptor[0]`, а затем переносит в контекст, чтобы
|
||||||
|
связать запрос с AI-данными того же клана.
|
||||||
|
|
||||||
|
Это значение отдельно от аргумента 1 `AddNewObjectToGame`, берущегося из
|
||||||
|
`GetNetPlayerNum`, и от TMA-тега `second_resource`, задающего число вызовов
|
||||||
|
AI-слота `+0x38`. Передача поля подтверждена по статическому коду; выполнение
|
||||||
|
Handler(43) и штатный запуск миссии остаются непроверенными. Технические
|
||||||
|
сведения и адреса исходных сборок приведены в [границах знания](../appendices/knowledge-boundaries.md).
|
||||||
|
|
||||||
Отдельная frozen-матрица непосредственно вызвала chooser GOG `ai.dll` SHA-256
|
Отдельная frozen-матрица непосредственно вызвала chooser GOG `ai.dll` SHA-256
|
||||||
`c19cd6cd31cd2896f8c4ba0f0e700dd3408aec8182daaf4863d98a7d233a2abc`: функция
|
`c19cd6cd31cd2896f8c4ba0f0e700dd3408aec8182daaf4863d98a7d233a2abc`: функция
|
||||||
`FUN_10010f90` (RVA `0x10f90`) прошла три guard-case и все 15 проверок.
|
`FUN_10010f90` (RVA `0x10f90`) прошла три guard-case и все 15 проверок.
|
||||||
|
|||||||
Reference in new issue
Block a user