diff options
Diffstat (limited to 'docs/tomes/06-behavior.md')
| -rw-r--r-- | docs/tomes/06-behavior.md | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md index e663389..d1af7ba 100644 --- a/docs/tomes/06-behavior.md +++ b/docs/tomes/06-behavior.md @@ -424,6 +424,15 @@ type 4, в том числе четыре `f_smalllight_y` с offsets 104–107 offsets 119–121. В `fr_l_gener.ctl` найдено 35 строк type 4, включая `f_gener_ball` с offset 85. +Control.dll `+0x8B10` передаёт указатель текущей записи диспетчеру `+0x2D4B0`. +Теги 2 и 5 направляются в общий читатель `+0x21D50`: таблица виртуальных методов +тега 2 (`+0x3CBD8`) вызывает его через обёртку `+0x29650`, а таблица тега 5 +(`+0x3CDF8`) указывает прямо на него в позиции `+0x1C`. Читатель потребляет +заголовок размером `0xB0` байт со счётчиком `u32` по `+0xAC`, затем `count` +значений `u32`, слово длины и, при ненулевой длине, строку с завершающим NUL; +указатель возврата указывает на следующую запись. Поэтому для тегов 2 и 5 подтверждён общий +структурный формат; смысл их полей пока не назначен. + Resolver прототипов хранит явную registry-ссылку на `.cpt` отдельно от ссылки на `.ctl`. Если строки type 4 разобраны и явная ссылка на CPT есть, подготовка читает ровно указанные archive/name; имя CPT не выводится из имени CTL. В CPT @@ -445,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 точек), а также |
