aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/tomes/05-render.md40
-rw-r--r--docs/tomes/06-behavior.md13
2 files changed, 40 insertions, 13 deletions
diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md
index 3c4e346..545aa1a 100644
--- a/docs/tomes/05-render.md
+++ b/docs/tomes/05-render.md
@@ -362,18 +362,30 @@ local.set_translation(pose.position);
world[n] = world[parent(n)] * local;
```
-Статический Vulkan preview берёт начальный кадр узла из явной ссылки прототипа
-на CTLD `.ctl`. Для поддерживаемых Control timeline и tag 21 он выполняет один
-сэмпл при native clock `0`, передавая конечные type-1 значения разрешённых NDP
-providers; неподдерживаемый режим/variable mapping и отсутствующий или
-неразрешённый gate value возвращают preview к статическим CTLD bindings.
-Используются только включённые строки, а при повторе node ID поздняя строка
-заменяет раннюю. Без
-`--static-animation-frame` preview применяет эти настройки узлов; узлы без
-настройки остаются на кадре `0`. Явный `--static-animation-frame N`
-переопределяет их и задаёт `N` всем узлам, пропуская Control-сэмпл.
-Результат — одна стартовая статическая поза, не обновление анимации, Control
-или AI по ходу кадров.
+Статический Vulkan preview берёт CTLD `.ctl` из явной ссылки прототипа.
+Поддерживаемые Control timeline с tag 21 сэмплируются при запуске на native
+clock `0`; разрешённые NDP providers передают конечные type-1 значения.
+Неподдерживаемый режим или variable mapping, а также отсутствующее или
+неразрешённое gate value оставляют компонент на статических CTLD bindings. В
+timeline участвуют только включённые строки; при повторном node ID поздняя
+строка заменяет раннюю.
+
+Без `--static-animation-frame` preview сохраняет экземпляр Control и при
+каждом redraw сэмплирует поддерживаемый timeline на текущем native clock.
+Обновлённая Node38-поза перепроецирует видимую геометрию в заранее выделенный
+vertex span, оставляя индексы и draw ranges неизменными. Если в пути Unit DAT
+компонента есть такой Control, заново вычисляется его EXTO mount socket и
+перепроецируется дочерняя геометрия; дочерний mount использует preorder-порядок
+Unit DAT. Внутренние INTO-компоненты здесь не считаются глобальными MSH
+socket mounts. Обновлённые вершины и shadow-треугольники попадают в общий
+mesh upload перед следующим кадром. Culling sphere восстанавливается от
+начальной native sphere и расширяется до текущих shadow-треугольников; это
+`shortcut:`, потому что native обновление bounding sphere для анимированной
+геометрии пока не установлено. Это путь сэмплирования Control-позы, не AI или
+анимация эффектов.
+
+Явный `--static-animation-frame N` переопределяет timeline и задаёт `N` всем
+узлам, пропуская runtime Control-сэмпл.
MSH sampler выбирает type 19 frame округлением `(time - 0.5)` к ближайшему
целому с ties-to-even, затем интерполирует выбранный type 8 key и следующий
key в исходном `time`; это portable-вариант native x87 conversion в default
@@ -1024,7 +1036,9 @@ animation phase; object batches сохраняют их legacy blend/depth/alpha
После загрузки world path создаёт интерактивную free-flight камеру (`WASD`,
`E/Q`, `Shift`, `Ctrl`, RMB relative-look), обновляет listener и на каждом
-кадре собирает environment frame. Mission-local `sky.ske`/`sky.wea` выбирают
+кадре собирает environment frame. После шага движения камера проверяет высоту
+`TerrainWorld`: над конечной поверхностью сохраняется начальный просвет, а вне
+поверхности высота не ограничивается. Mission-local `sky.ske`/`sky.wea` выбирают
атмосферное расписание и sky materials, `effects.rlb/env_lightning` даёт
lightning visual; weather particles, flares, sun/moon, point lights,
projected shadows и audio events обновляются вместе с камерой и временем.
diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md
index ebecddd..d1af7ba 100644
--- a/docs/tomes/06-behavior.md
+++ b/docs/tomes/06-behavior.md
@@ -454,6 +454,19 @@ C0 равен 0, поэтому найденные offsets 104–107, 119–121
условий, загрузка FX materials, activation, выполнение FX opcodes и видимый
рендер эффектов пока не реализованы.
+После типизированных записей CTLD хранит 21 ссылку на группу эффектов. В
+`fr_l_plant.ctl` первая ссылка равна `8`, остальные 20 содержат `u32::MAX`; за
+ними расположены 13 таблиц групп. При разборе по адресу `+0x8B10` к каждой
+ссылке, кроме `u32::MAX`, прибавляется число групп, зарегистрированных до
+таблиц этого CTL; получившиеся индексы сохраняются в control mapping. При
+событии `0x80000020` код по адресу `+0x7830` сразу выходит, если поле дескриптора
+`+0xC0` равно нулю. Разбор по адресу `+0x8B10` вызывает диспетчер групп `+0x2800`
+с индексом группы по умолчанию только при ненулевом `+0xC0`. Назначение поля
+дескриптора и условия его заполнения на стороне producer пока неизвестны.
+`initial_effect_group` хранит проверенную ссылку на группу по умолчанию. Это
+поле описывает данные CTL и не выполняет activation, загрузку FX materials,
+FX opcodes или рендер эффектов.
+
CPU-only обход `MISSIONS/Autodemo.00/data.tma` подготовил четыре CTL с 80
строками type 4 и четыре явных CPT-списка (всего 322 записи). Среди пар были
`fortif.rlb/fr_l_plant.ctl` и `fortif.rlb/fr_l_plant.cpt` (155 точек), а также