feat(runtime): register mission objects with clan distributors
Docs Deploy / Build and Deploy MkDocs (push) Successful in 35s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 35s
This commit is contained in:
5 files changed
+318
-18
No files matched your search
@@ -129,10 +129,41 @@ Rust `load_mission` принимает явный `queue_time_ms`, а не чи
|
||||
host construction phases. Не проверена другая лицензированная миссия с
|
||||
непустым `Init`. Вызов `Behavior.dll!FUN_10019e80` (RVA `0x19e80`, SHA-256
|
||||
`ddfbdbde07832358fe6e35e01c8dba9b58e7313789498b6049ed51d4ed9baf99`) исполнялся
|
||||
на синтетических интерфейсах, но runtime пока не вызывает его в игровом цикле:
|
||||
не доказаны создание реальных записей distributor и интерфейсов ArealMap,
|
||||
которые ему нужны. Остальной Behavior tick flow и общий dispatcher событий
|
||||
также не восстановлены.
|
||||
на синтетических интерфейсах. Путь членства в реальных distributor-списках
|
||||
теперь связан с полями TMA и Unit DAT: `World3D!CreateObject` передаёт selector
|
||||
и class word через дескриптор в Behavior (RVA `0x7e55`, `0x7e62`), а
|
||||
`Behavior.dll!FUN_10005e60` (RVA `0x5e60`) проверяет высокий бит registration
|
||||
key, AI и distributor. Selector из первого DWORD после имени ресурса выбирает
|
||||
слот `GetSuperAI`; таблица этой функции находится в `ai.dll` RVA `0x55398`.
|
||||
Хеши `MisLoad.dll`, `iron3d.dll`, `ArealMap.dll`, `World3D.dll` и
|
||||
`Behavior.dll`, использованных для цепочки, перечислены в
|
||||
[справочнике TMA](../reference/tma.md).
|
||||
|
||||
Отдельный режимный бит Behavior нельзя выводить из `MissionMode`. Конструктор
|
||||
Behavior (`Behavior.dll`, RVA `0x3600`) вызывает `World3D!stdGetGameMode` (RVA
|
||||
`0x14750`), который читает host-global по RVA `0x795130` в `World3D.dll` (SHA-256
|
||||
`17e4a3089b2583a8cf2356c9db0390b1aba138356a09130d79b4e7e4791da61e`). В
|
||||
обычном пути `stdInitGame` (RVA `0x13e90`, запись режима около `0x14040`)
|
||||
формируется отдельное host-значение; в наблюдавшемся запуске AutoDemo getter
|
||||
вернул `4`, и бит `0x2` был снят. Это объясняет соответствующий gate при
|
||||
создании Behavior, но не устанавливает отображение между host-режимом и Rust
|
||||
`MissionMode`.
|
||||
|
||||
Наблюдение обычного запуска лицензированной GOG AutoDemo подтвердило четыре
|
||||
добавления с ключами `0x80000003..0x80000006` в два клановых списка. Полная
|
||||
загрузка Rust сохраняет соответствующие `ObjectHandle` в точном доступном слоте
|
||||
`GetSuperAI` до стартового `Init`; preview не создаёт членств. Лицензированный
|
||||
тест связывает эти записи с TMA ID 4–7, selector и Unit DAT class. Это
|
||||
подтверждает только состав списков, не точную эквивалентность всей загрузки или
|
||||
регулярного шага Behavior.
|
||||
|
||||
Нативный `Behavior.dll!Add` (RVA `0x1aac0`) создаёт для каждого участника запись
|
||||
размером `0x1c` с начальной долей `1 / count`, а `normalize` (RVA `0x1ac90`)
|
||||
перенормирует прежние доли после добавления. Rust пока хранит только членство:
|
||||
поля записи, доли и их изменение ещё не исполняются. Не восстановлено и
|
||||
соединение с реальными интерфейсами ArealMap, необходимыми для регулярного
|
||||
вызова `FUN_10019e80`; остальной Behavior tick flow и общий dispatcher событий
|
||||
также остаются открытыми.
|
||||
|
||||
Для `Handler(30)` отдельно подтверждены обратный вызов `iron3d.dll` RVA
|
||||
`0x611d0` (SHA-256 `d1dc4ea8535e2069b0a05c9e8be2724dd438ba44cca7a83007d8b2e50f9e35fa`),
|
||||
|
||||
Reference in new issue
Block a user