aboutsummaryrefslogtreecommitdiff
path: root/docs/appendices/knowledge-boundaries.md
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-10-31 05:55:52 +0300
committerValentin Popov <valentin@popov.link>2026-10-31 05:55:52 +0300
commit042be27c002900a15b04a58d07239fc189b5ea52 (patch)
tree5a5092c888aed0b5b065501545a39efc132004a4 /docs/appendices/knowledge-boundaries.md
parentcbf20b49657ee98cbab0548acb01eedfc685b2e4 (diff)
downloadfparkan-042be27c002900a15b04a58d07239fc189b5ea52.tar.xz
fparkan-042be27c002900a15b04a58d07239fc189b5ea52.zip
feat(runtime): load clan research tables during startup
Diffstat (limited to 'docs/appendices/knowledge-boundaries.md')
-rw-r--r--docs/appendices/knowledge-boundaries.md28
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,