feat(runtime): load clan research tables during startup
Docs Deploy / Build and Deploy MkDocs (push) Successful in 37s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 37s
This commit is contained in:
4 files changed
+740
-106
No files matched your search
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user