aboutsummaryrefslogtreecommitdiff
path: root/docs/tomes/04-world.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/tomes/04-world.md')
-rw-r--r--docs/tomes/04-world.md20
1 files changed, 20 insertions, 0 deletions
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