aboutsummaryrefslogtreecommitdiff
path: root/docs/appendices/knowledge-boundaries.md
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-10-20 08:06:17 +0300
committerValentin Popov <valentin@popov.link>2026-10-20 08:06:17 +0300
commit374db10daf5db88a52596edebc6cf5f2d560065f (patch)
treeb77e7bc5a09e4a4496c1ad555336cdac5079f9aa /docs/appendices/knowledge-boundaries.md
parentcaef8f8e6c0ae81b46fcab39cd4f2b74e1b29235 (diff)
downloadfparkan-374db10daf5db88a52596edebc6cf5f2d560065f.tar.xz
fparkan-374db10daf5db88a52596edebc6cf5f2d560065f.zip
fix(runtime): model distributor share normalizationtrunk
Diffstat (limited to 'docs/appendices/knowledge-boundaries.md')
-rw-r--r--docs/appendices/knowledge-boundaries.md18
1 files changed, 11 insertions, 7 deletions
diff --git a/docs/appendices/knowledge-boundaries.md b/docs/appendices/knowledge-boundaries.md
index b10a002..873497c 100644
--- a/docs/appendices/knowledge-boundaries.md
+++ b/docs/appendices/knowledge-boundaries.md
@@ -157,13 +157,17 @@ Behavior (`Behavior.dll`, RVA `0x3600`) вызывает `World3D!stdGetGameMode
подтверждает только состав списков, не точную эквивалентность всей загрузки или
регулярного шага Behavior.
-Нативный `Behavior.dll!Add` (RVA `0x1aac0`) создаёт для каждого участника запись
-размером `0x1c` с начальной долей `1 / count`, а `normalize` (RVA `0x1ac90`)
-перенормирует прежние доли после добавления. Rust пока хранит только членство:
-поля записи, доли и их изменение ещё не исполняются. Не восстановлено и
-соединение с реальными интерфейсами ArealMap, необходимыми для регулярного
-вызова `FUN_10019e80`; остальной Behavior tick flow и общий dispatcher событий
-также остаются открытыми.
+Нативный `Behavior.dll!Add` (RVA `0x1aac0`) и `normalize` (RVA `0x1ac90`)
+проверены прямыми x86-вызовами на синтетических записях при x87 control word
+`0x007f`, измеренном также у игры на входах обоих методов. Rust повторяет
+начальные доли и нормализацию отдельными операциями `f32`, а повторную запись
+сопоставляет по `ObjectHandle`, меняя только долю существующего участника.
+Пять DWORD после доли хранятся сырыми; ненулевое первое слово закрепляет вес,
+смысл четырёх следующих не установлен. Лицензированный AutoDemo-тест проверяет
+список TMA-объектов и получившиеся начальные доли по кланам, но это не сравнение
+живых весов миссии с полями исходных runtime-записей. Не восстановлено соединение
+с реальными интерфейсами ArealMap, нужными `FUN_10019e80`; полный Behavior tick
+flow и общий dispatcher событий также остаются открытыми.
Для `Handler(30)` отдельно подтверждены обратный вызов `iron3d.dll` RVA
`0x611d0` (SHA-256 `d1dc4ea8535e2069b0a05c9e8be2724dd438ba44cca7a83007d8b2e50f9e35fa`),