From caef8f8e6c0ae81b46fcab39cd4f2b74e1b29235 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Tue, 20 Oct 2026 08:44:10 +0400 Subject: feat(runtime): register mission objects with clan distributors --- docs/tomes/04-world.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'docs/tomes/04-world.md') diff --git a/docs/tomes/04-world.md b/docs/tomes/04-world.md index dcd53b2..1123bc7 100644 --- a/docs/tomes/04-world.md +++ b/docs/tomes/04-world.md @@ -215,6 +215,26 @@ MissionObjectDraft { `fparkan-world` не подтверждено. Смещения, условия версий и контрольные суммы исследованных сборок приведены в [справочнике TMA](../reference/tma.md). +Это слово влияет не только на сценарий. Успешно загруженный пакет клана +публикует его `SuperAI` в таблице `GetSuperAI`; World3D передаёт первый DWORD +дескриптора создания через Behavior, где он выбирает тот же номер таблицы. +Поэтому при создании полного мира можно отнести объект к конкретному клановому +диспетчеру, если его номер лежит в диапазоне `0..63` и сценарий этого клана +загружен. Rust хранит такую связь отдельно от владельца объекта: + +```text +TMA raw_after_resource = 1 + -> GetSuperAI[1] доступен после загрузки script bundle клана 1 + -> запись объекта относится к distributor клана 1 +``` + +Для объектов с Unit DAT используется старший бит DWORD по смещению `+4` от +начала DAT как общий признак, по которому оригинальный World3D создаёт +registration key для Behavior. Это второе 32-битное слово заголовка. Из него +нельзя вывести сторону или тип владельца. В AutoDemo это связывает поля TMA, +class word из Unit DAT и выбранный клановый AI, не меняя `OwnerId` и хеш +игрового состояния. + Свойства хранятся как ordered property bag: ```text -- cgit v1.2.3