aboutsummaryrefslogtreecommitdiff
path: root/docs/appendices/knowledge-boundaries.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/appendices/knowledge-boundaries.md')
-rw-r--r--docs/appendices/knowledge-boundaries.md36
1 files changed, 36 insertions, 0 deletions
diff --git a/docs/appendices/knowledge-boundaries.md b/docs/appendices/knowledge-boundaries.md
index 873497c..c1993ca 100644
--- a/docs/appendices/knowledge-boundaries.md
+++ b/docs/appendices/knowledge-boundaries.md
@@ -169,6 +169,42 @@ Behavior (`Behavior.dll`, RVA `0x3600`) вызывает `World3D!stdGetGameMode
с реальными интерфейсами ArealMap, нужными `FUN_10019e80`; полный Behavior tick
flow и общий dispatcher событий также остаются открытыми.
+Начальные свойства `CurrentOre`/`MaximumOre` восстановлены отдельно от
+регулярного обмена. В проверенных `Behavior.dll` (SHA-256
+`ddfbdbde07832358fe6e35e01c8dba9b58e7313789498b6049ed51d4ed9baf99`) RVA
+`0x8790` выбирает начальные значения по class word, `0xb110` регистрирует
+дескрипторы кодов 4/5, `0xb470` пишет только код 5, а `0xb5b0` читает код 4
+как дополнительное слово и код 5 как основное. `MisLoad.dll` (SHA-256
+`c607762bb67db14ca530927c8e1347339b62b0a163ac90c708ee83142292e2bf`) RVA
+`0x40b0` выбирает первое свойство TMA с точным именем `CurrentOre` и передаёт
+его `raw_value[1]`; setter сохраняет биты напрямую. В AutoDemo snapshot на этих
+входах было восемь объектов Unit DAT, у всех raw `CurrentOre` равен нулю;
+четыре объекта класса `0x01008000` не вошли в distributor, но остались среди
+инициализированных Rust-состояний. Поэтому путь нулевого значения наблюдался
+наживую, но ненулевое TMA-значение в живой миссии пока не проверено.
+
+Синтетический x86 oracle вызвал `Behavior.dll!FUN_10008790` напрямую для классов
+`0x80000004`, `0x80000008`, `0x01002000`, `0x01004000` и `0x01008000`; перед
+вызовом в записи были значения `CurrentOre=123` и `MaximumOre=-1`, так что
+проверено их перезаписывание. Тест выставляет `a64=1`, чтобы отключить отложенный
+side effect обёртки setter-а. Это подтверждает ветви initializer-а, но не весь
+путь его запуска и связи с остальными фазами объекта. Другой изолированный x86
+oracle проверяет ненулевое raw-слово `CurrentOre`, только чтение `MaximumOre` и
+перестановку строк дескрипторов на синтетических записях свойств.
+
+Не проверен селектор 4 для внешнего config-like ресурса: в наблюдавшемся
+AutoDemo его вызова нет, а установленный `Behavior.ini` не содержит
+`Mine_MaxOre`, `Storage_MaxOre` или `Transport_MaxOre`. Поэтому Rust пока
+воспроизводит доказанные class defaults (500, 4000 и 2000) и не заявляет
+поддержку конфигурационного переопределения. Отдельно не доказано, что каждый
+Unit DAT создаёт тот же Behavior-компонент во всех host factory paths. Rust
+ограничивает новую запись полными TMA-объектами с Unit DAT; preview, прямые
+prototype roots без Unit DAT и отложенные spawn после исходной загрузки вне
+этой модели. Путь в `ArealMap.dll` (SHA-256
+`a25f9254ebb339d70e2e07c8121950191e9584ca0858d8e9c2e2b6c671edf6ea`) к
+`CreateObject` по RVA `0x14fd0`/`0x15290` показывает выбор World3D class 3 или 4
+по старшему биту, но не всю цепочку их Behavior attachment.
+
Для `Handler(30)` отдельно подтверждены обратный вызов `iron3d.dll` RVA
`0x611d0` (SHA-256 `d1dc4ea8535e2069b0a05c9e8be2724dd438ba44cca7a83007d8b2e50f9e35fa`),
начальные поля IGame и проверки режима/состояния. Обработчик выбора миссии