test(runtime): pin native Control activation clock bits
Docs Deploy / Build and Deploy MkDocs (push) Successful in 1m6s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 1m6s
This commit is contained in:
3 files changed
+106
-45
No files matched your search
@@ -478,20 +478,35 @@ Control выставлен flag `0x102`, слово флагов ANI `+0x14` и
|
||||
пересчитывается при каждом принятом активном вызове. Проверены также точное
|
||||
равенство с ненулевым RNG, расход RNG при принудительном `+0xd4` и сохранение
|
||||
RNG/счётчика в неактивной ветви. Движение и очереди исключены условиями этих
|
||||
векторов; активация `+0xe0` задана явно. Отдельный вектор
|
||||
класса `4` исполняет событие `4` через `0x31ae0` → `0x314f0`, проверяя
|
||||
активность, начальные часы `time - 100`, округление DWORD в `f32` и одну
|
||||
начальную команду. Геометрические callbacks подставлены явно, таблицы
|
||||
устройств и shapes пусты; полный загрузочный путь не проверен. Источник времени
|
||||
и доставка прослежены статически:
|
||||
векторов; активация `+0xe0` задавалась явно. Отдельный native-вектор класса `4`
|
||||
вызывает `0x314f0` через синтетический owner `+4` и переходник `0x31ae0`.
|
||||
Он сравнивает raw `f32` слова абсолютных часов и baseline, вычисленный до
|
||||
округления `u32` в `f32`: для `16777217` это `0x4b800000/0x4b7fff9d`, для
|
||||
`16777219` — `0x4b800002/0x4b7fff9f`. Последовательность `100`, `101` оставляет
|
||||
`+0xe4` нулём после первого вызова, поэтому старое условие `+0xe4 == 0` добавляет
|
||||
начальную команду повторно: счётчик `+0x370` переходит с `1` на `2`. Это путь
|
||||
тестового интерфейса owner `+4`; статическая цепочка AniMesh `Agent+0x158`
|
||||
ведёт к primary Control owner slot `+0x08` напрямую в `0x314f0`. Геометрические
|
||||
callbacks подставлены явно, матрица identity и масштаб единичный, таблицы
|
||||
устройств и shapes пусты. Вектор подтверждает ABI/арифметику часов, но не
|
||||
реальную матрицу и callbacks из миссии или полный Unit DAT loader.
|
||||
|
||||
Источник времени и доставка прослежены статически:
|
||||
World3D RVA `0x6bf0` вычисляет часы из `timeGetTime()` с игровым смещением и
|
||||
поправкой на паузу, затем выполняет первый обход `6/1`, шаг мировой физики и
|
||||
второй обход `6/0x1c`. AniMesh RVA `0x1370` передаёт часы Control; общий
|
||||
обработчик Control RVA `0x7830` численно преобразует unsigned DWORD в `f32`
|
||||
перед primary slot `+0x58`. Фабрика выбирает RVA `0xcbb0` для класса `9` и
|
||||
RVA `0xbcf0` для остальных. Это подтверждает статическую цепочку вызовов, но не
|
||||
её исполнение на миссии: связывание интерфейсов, активация устройств и shapes,
|
||||
остальные ветви `0xbcf0` и
|
||||
второй обход `6/0x1c`. При создании объекта World3D RVA `0x7cb0` вызывает slot
|
||||
`+0x38` с literal-null payload в `0x7d1a`, а затем передаёт в тот же slot DWORD
|
||||
из `DATWorld+0x32a38` в `0x7e6e`; RVA `0x7ea0` повторяет передачу часов в
|
||||
`0x80a9`. Setter RVA `0x5140` записывает этот DWORD в `DATWorld+0x32a38`.
|
||||
AniMesh RVA `0x2ff0` получает для `Agent+0x158` Control base owner по QI selector
|
||||
`0xa`, после чего `Agent` RVA `0x1a80` dispatch-ит событие `4` через его primary
|
||||
slot `+0x08` прямо в `Control.dll+0x314f0`. Это и отдельный синтетический вызов
|
||||
через owner `+4` — подтверждённые интерфейсные пути, но пока не единая трасса
|
||||
игрового старта. Control RVA `0x7830` численно преобразует unsigned DWORD в
|
||||
`f32` перед primary slot `+0x58`; фабрика выбирает RVA `0xcbb0` для класса `9` и
|
||||
RVA `0xbcf0` для остальных. Статические вызовы не подтверждают их исполнение на
|
||||
миссии: связывание реальных интерфейсов, активация устройств и shapes, остальные
|
||||
ветви `0xbcf0` и
|
||||
автоматическое изменение provider через clock и бюджет Rust остаются открытыми. Источник контактного коэффициента прослежен статически,
|
||||
но не исполнен. Подробные векторы и статические границы приведены в
|
||||
[техническом подразделе о provider-состоянии Control](script-vm.md#изменение-provider-состояния-control).
|
||||
|
||||
Reference in new issue
Block a user