diff options
| author | Valentin Popov <valentin@popov.link> | 2026-10-31 05:55:52 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-10-31 05:55:52 +0300 |
| commit | 042be27c002900a15b04a58d07239fc189b5ea52 (patch) | |
| tree | 5a5092c888aed0b5b065501545a39efc132004a4 /docs/appendices | |
| parent | cbf20b49657ee98cbab0548acb01eedfc685b2e4 (diff) | |
| download | fparkan-042be27c002900a15b04a58d07239fc189b5ea52.tar.xz fparkan-042be27c002900a15b04a58d07239fc189b5ea52.zip | |
feat(runtime): load clan research tables during startup
Diffstat (limited to 'docs/appendices')
| -rw-r--r-- | docs/appendices/knowledge-boundaries.md | 28 |
1 files changed, 28 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, |
