aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-10-18 12:49:45 +0300
committerValentin Popov <valentin@popov.link>2026-10-18 12:49:45 +0300
commit88132dc9e1eed8df0b4db97c7ae068c14fc6e938 (patch)
tree1e772522a1d600d9e53fa237a5d1d07508e313d9 /docs
parent47cb2a693fa49a5931e35164ca629fa1a026be51 (diff)
downloadfparkan-88132dc9e1eed8df0b4db97c7ae068c14fc6e938.tar.xz
fparkan-88132dc9e1eed8df0b4db97c7ae068c14fc6e938.zip
Parse CTLD initial effect group selector
Diffstat (limited to 'docs')
-rw-r--r--docs/tomes/06-behavior.md13
1 files changed, 13 insertions, 0 deletions
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 точек), а также