diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/appendices/knowledge-boundaries.md | 28 | ||||
| -rw-r--r-- | docs/tomes/06-behavior.md | 20 |
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 проверок. |
