feat(runtime): project merged Control device tables
Docs Deploy / Build and Deploy MkDocs (push) Successful in 56s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 56s
This commit is contained in:
5 files changed
+1587
-23
No files matched your search
@@ -253,12 +253,26 @@ solver. То же относится к редким MSH auxiliary streams и ч
|
||||
разрешается в индекс устройства и сдвигает локальный индекс только когда parent
|
||||
ID не равен `-1` и IID `0x202` доступен; иначе используется raw локальный индекс.
|
||||
В этом потоке нулевой raw kind пропускает узел вместе с потомками, поэтому общий
|
||||
assigned ID нельзя получать из preorder-позиции записи. Это закрывает только
|
||||
передачу полей в native loader-е; Rust ещё должен строить такую же проекцию.
|
||||
assigned ID нельзя получать из preorder-позиции записи. Полная загрузка миссии
|
||||
в FParkan строит упорядоченную базовую проекцию таблицы
|
||||
Control для объектов с Unit DAT: корневые записи добавляются, `EXTO` добавляет
|
||||
строки с ключами глобальной MSH-иерархии, а `INTO` обновляет первую строку
|
||||
выбранного индекса либо добавляет список при sentinel `-1`. Проверка полной
|
||||
загрузки на оригинальном `min_l_n1.dat` получает 11 строк: 10 корневых записей,
|
||||
четыре замены `INTO` и одну добавленную строку дочернего `EXTO`. Ветви C4/C8 и
|
||||
добавление `EXTO` подтверждены машинными инструкциями оригинальных модулей, но
|
||||
полный результат FParkan не сравнивался с таблицей из запущенной игры. Тест на
|
||||
искусственном дереве также проверяет ID после пропущенного поддерева с raw kind
|
||||
`0`. Проекция хранит общие поля и происхождение записей; она не исполняет все
|
||||
обработчики Control.
|
||||
|
||||
Control loader также различает добавление устройств и применение одной записи
|
||||
к уже выбранному устройству. Для tag `19` найденные поля и ветви описаны в
|
||||
главе, но эффективное слияние пока не реализовано. В Rust parser-е
|
||||
Control различает добавление устройства и применение одной записи к уже
|
||||
выбранному устройству. Исполнение оригинальной 32-битной DLL на искусственных
|
||||
данных подтверждает общую ветвь переопределения для получателей tags `9`, `15`,
|
||||
`19` и `25`: остаются прежними слот, ключ, ID компонента, множитель и класс,
|
||||
а коэффициенты копируются из новой записи. Искусственный tag `9`-объект создан
|
||||
без FX-хоста (`+0x3c == 0`), а запись не содержит строк таблицы map; поэтому
|
||||
работа FX-хоста здесь не проверялась. В Rust parser-е
|
||||
`Unsupported { typed_record_index: Some(_) }` означает, что разбор остановился
|
||||
внутри списка typed records; без индекса остановки unsupported может относиться
|
||||
к effect-tail после уже разобранного списка. Эти случаи нужно различать.
|
||||
@@ -269,10 +283,14 @@ Control loader также различает добавление устройс
|
||||
трактоваться как пустой список.
|
||||
|
||||
Глобальные Control selectors `1/2` и setter selector `1` по tag `19` описаны
|
||||
там же только по статическому разбору `Control.dll`; execution oracle для этих
|
||||
глобальных вызовов нет. Остаются открытыми проверка effective merge на живых
|
||||
объектах, полный охват registry types и host factory paths, а также runtime
|
||||
жизненный цикл множителя `+0x4c`.
|
||||
там же только по статическому разбору `Control.dll`; их вызовы отдельно не
|
||||
исполнялись. Проекция полного mission load недоступна для неполного списка
|
||||
typed records, Control resource у non-geometric prototype и некоторых
|
||||
неразрешённых EXTO node mappings; preview и объекты без Unit DAT root её не
|
||||
строят. Её соответствие полной загрузке игры для всех типов компонентов и
|
||||
factory paths ещё не установлено. Не восстановлен и жизненный цикл множителя
|
||||
`+0x4c` после конструктора и переопределения; также неизвестно, когда эти
|
||||
объекты создаются при отложенной загрузке.
|
||||
|
||||
Для `Control.dll` (SHA-256
|
||||
`bcb86318089028548a178b03a21accdce15df0cc85ddd91674cf3c2f55012c6e`) tag-26
|
||||
|
||||
Reference in new issue
Block a user