aboutsummaryrefslogtreecommitdiff
path: root/docs/tomes/06-behavior.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/tomes/06-behavior.md')
-rw-r--r--docs/tomes/06-behavior.md28
1 files changed, 28 insertions, 0 deletions
diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md
index 68a35e6..cd8a0ba 100644
--- a/docs/tomes/06-behavior.md
+++ b/docs/tomes/06-behavior.md
@@ -717,6 +717,34 @@ Rust full-loader теста на оригинальных ресурсах. Ве
`None`, без дочернего fallback или синтетических нулей. Точные native writes и
открытые вопросы о смысле полей приведены в [техническом разборе загрузки CTLD](../appendices/script-vm.md#профиль-владельца-control-при-загрузке-ctld).
+Изолированный x86-вектор подтвердил общий проход `Control.dll!FUN_1000fca0`
+(RVA `0x0fac0`): расчёт начинает с исходного profile word 26, а затем пишет
+производное значение в изменяемую копию и заполняет три поля-накопителя
+владельца, а также `+0x20` каждой строки provider. Для этого выбираются два
+сырых слова `Slot68` через `Node38` state 0 / LOD 0, учитываются cache tag 27 и
+устройства таблицы.
+Смысл слов `Slot68` и итоговых чисел не установлен; мы не называем их массой
+или площадью.
+
+Rust повторяет эту формулу изолированным helper-ом, и его тест совпадает с
+оригинальным кодом на синтетических векторах при x87 control word `0x007f`.
+В обычной цепочке загрузки AniMesh начинает с масштабов `[1, 1, 1]`, а вызванные
+до FAC0 обработчики привязки модели, FX и collision-компонентов эти поля не
+меняют. Поэтому загрузчик использует подтверждённые значения конструктора, а
+не scale из TMA. Теперь `build_control_device_projection` выполняет FAC0 после
+сборки provider rows и списка устройств и публикует результат вместе с копией
+профиля владельца.
+
+Игнорируемый corpus-тест полного загрузчика на оригинальном
+`UNITS/BUILDS/MINE/min_l_n1.dat` подтверждает сопоставление всех 25 provider
+rows с начальными узлами и проекцию 11 устройств. Для профиля mine получены
+агрегаты `+0x530 = 0x470833fc`, `+0x534 = 0x4897e712` и
+`+0x538 = 0x4d9452cb`; тест сверяет также все 25 значений строк. Это результат
+Rust loader-а на лицензированных данных, а не сравнение с полным native load
+оригинала. Смысл слов `Slot68` и итоговых чисел по-прежнему неизвестен. Точные
+входы, вектор и границы приведены в
+[техническом разборе загрузки CTLD](../appendices/script-vm.md#изолированный-проход-fac0).
+
Для tag `19` фабрика создаёт объект с его исходными классом и vtable. Базовый
конструктор `FUN_100218b0` задаёт multiplier `+0x4c = 1.0`. Override через
`FUN_1002d890` вызывает у выбранного объекта vtable slot `+0x1c`, то есть