aboutsummaryrefslogtreecommitdiff
path: root/docs/tomes/03-resources.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/tomes/03-resources.md')
-rw-r--r--docs/tomes/03-resources.md15
1 files changed, 15 insertions, 0 deletions
diff --git a/docs/tomes/03-resources.md b/docs/tomes/03-resources.md
index a349a79..f092ece 100644
--- a/docs/tomes/03-resources.md
+++ b/docs/tomes/03-resources.md
@@ -60,6 +60,12 @@ archive object и увеличивает счётчик владельцев. Г
предметного объекта не должен напрямую закрывать архив: он зависит от данных,
но не владеет файлом как ресурсом операционной системы.
+План ресурсов считает запросы от уникальных визуальных прототипов. Если два
+слота материала ссылаются на один MAT0 с одной и той же текстурной фазой, это
+два запроса текстуры, хотя подготовленный набор хранит один ресурс. Повторные
+ссылки на `lightmap` учитываются так же. `AssetPreparationReport` и ограничения
+подготовки считают уникальные подготовленные ресурсы.
+
## Имена и пути
Большинство игровых имён сравнивается без учёта регистра в ASCII-диапазоне. Это
@@ -471,6 +477,15 @@ struct UnitDatRecord112 {
Требование обязательного terminator применяется только к полям, где оно доказано
форматом.
+У AI есть отдельный потребитель Unit DAT: исследовательский chooser читает
+заголовок с magic `F0F1`, сохраняет второй DWORD как непрозрачный и завершает
+разбор на границе первого полного корневого дерева. `immediate_child_count`
+закрывает это дерево по preorder; байты после него, включая неполную запись или
+orphan-record, chooser уже не читает. Поэтому Rust для этого пути находит
+bounded 112-byte prefix и передаёт его существующим `decode_unit_dat` и
+`unit_component_tree`. Общий декодер остаётся строгим к размеру всего файла
+`8 + 112 * N`; частный framing AI не меняет этот контракт.
+
Проверено 425 файлов / 5 219 records Части 1 и 676 файлов / 8 145 records
Части 2. Все соответствуют формуле размера, `kind == 1` и
`archive_name == "objects.rlb"`.