aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/appendices/knowledge-boundaries.md28
-rw-r--r--docs/tomes/06-behavior.md20
2 files changed, 48 insertions, 0 deletions
diff --git a/docs/appendices/knowledge-boundaries.md b/docs/appendices/knowledge-boundaries.md
index 76ddaaa..07ba5d7 100644
--- a/docs/appendices/knowledge-boundaries.md
+++ b/docs/appendices/knowledge-boundaries.md
@@ -819,6 +819,34 @@ arg1 следующего вызова. `AddNewObjectToGame` принимает
`FUN_10002a30` (RVA `0x2a30`, `RET 8`) записывает его в `inner+8`. TMA tag
`row+0x20` ограничивает число вызовов AI slot `+0x38`, но не задаёт владельца.
+В Rust эта граница представлена только загрузкой таблиц. Полный
+`load_mission` требует явный `MissionStartupInput { queue_time_ms,
+research_creation_gate }`; gate не выводится из `MissionMode` или имени пути.
+При `true` загрузчик проходит по успешно разобранным пакетам сценариев, берёт
+реальный `second_resource.path` соответствующего TMA-клана до первого NUL,
+отклоняет не-ASCII путь, затем сохраняет отдельный `ResearchTrfDocument` с
+`clan_index` и нормализованным путём. Пустая строка, выключенный gate или
+отсутствие пакета сценариев пропускают чтение. Повтор одного пути разными
+владельцами приводит к отдельным буферам строк TRF0. Обычные тесты на
+искусственных данных проверяют владельцев, повторное декодирование, пропуски,
+ошибки и откат; игнорируемая проверка оригинальных ресурсов связывает реальные
+`Campaign.00/Mission.01` пары путей с индексами владельцев. Это не загружает
+полный исследовательский контекст оригинала.
+Успешно разобранный пакет сценариев здесь обозначает только границу текущей
+настройки Rust, а не совпадение с полным нативным жизненным циклом
+`CreateSuperAI`.
+
+Нативный metadata loader нельзя считать простым копированием таблицы. В GOG
+`Behavior.dll` (SHA-256
+`ddfbdbde07832358fe6e35e01c8dba9b58e7313789498b6049ed51d4ed9baf99`) selector
+`0x204` по RVA `0xa490` обновляет сохранённое float-значение `+0x678`. В GOG `Control.dll`
+(SHA-256 `bcb86318089028548a178b03a21accdce15df0cc85ddd91674cf3c2f55012c6e`)
+selector `0x36` проходит цепочку RVA `0x31af0` → `0xe6c0` и записывает в общую
+ячейку памяти по RVA `0x434bc`; selector `0x91` выполняет одноразовую
+инициализацию, только если функция ещё не выполнила её. В Rust пока хранятся
+только декодированные TRF-данные и сведения о владельце: эти побочные записи,
+очередь и lifetime контекста не моделируются.
+
Открыты runtime-выполнение Handler(43), создание и lifetime research context,
включение factory-цепочки в полный штатный startup миссии, построение AI
candidate list и штатный порядок кандидатов, live x87 policy,
diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md
index 208f911..8000710 100644
--- a/docs/tomes/06-behavior.md
+++ b/docs/tomes/06-behavior.md
@@ -536,6 +536,26 @@ AI-слота `+0x38`. Передача поля подтверждена по Ñ
Handler(43) и штатный запуск миссии остаются непроверенными. Технические
сведения и адреса исходных сборок приведены в [границах знания](../appendices/knowledge-boundaries.md).
+Полный Rust-загрузчик принимает явный `MissionStartupInput`: время очереди
+и отдельный `research_creation_gate`. Режим миссии и имя файла этот
+флаг не заменяют. При включённом флаге таблица загружается только для клана,
+чей сценарный пакет уже прочитан и успешно разобран; путь берётся из второго
+ресурса этого клана как C-строка. Пустая C-строка пропускается, а не-ASCII
+байты дают явную ошибку. Клан индексируется по порядку в TMA, тег ресурса на
+владение не влияет. Если несколько кланов указывают на один файл, каждый
+получает отдельно декодированную таблицу с собственными строками TRF0.
+
+```rust
+MissionStartupInput {
+ queue_time_ms: 100_000,
+ research_creation_gate: true,
+}
+```
+
+Это сохраняет исходные таблицы и их связь с владельцами для следующих этапов.
+Оно ещё не создаёт полный исследовательский контекст оригинала и не запускает
+`Handler(43)`; эта обработка пока остаётся явно неподдержанной.
+
Отдельная frozen-матрица непосредственно вызвала chooser GOG `ai.dll` SHA-256
`c19cd6cd31cd2896f8c4ba0f0e700dd3408aec8182daaf4863d98a7d233a2abc`: функция
`FUN_10010f90` (RVA `0x10f90`) прошла три guard-case и все 15 проверок.