aboutsummaryrefslogtreecommitdiff
path: root/docs/tomes/06-behavior.md
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-10-23 13:24:00 +0300
committerValentin Popov <valentin@popov.link>2026-10-23 13:24:00 +0300
commit3cec599688bcd4ff14d7206a35e9e855ef8798fc (patch)
tree0e15b734fda3f01f12185b0a3b2aa6bde8610f80 /docs/tomes/06-behavior.md
parentd9fe0fcc66ded80b2ae1b22b24c1f088ddff2799 (diff)
downloadfparkan-3cec599688bcd4ff14d7206a35e9e855ef8798fc.tar.xz
fparkan-3cec599688bcd4ff14d7206a35e9e855ef8798fc.zip
test(runtime): verify native Control node stage transitionstrunk
Diffstat (limited to 'docs/tomes/06-behavior.md')
-rw-r--r--docs/tomes/06-behavior.md17
1 files changed, 17 insertions, 0 deletions
diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md
index 2eea626..0ebbbf7 100644
--- a/docs/tomes/06-behavior.md
+++ b/docs/tomes/06-behavior.md
@@ -897,6 +897,23 @@ row `1` в общей позиции `22` со значением `6000.0`.
даёт `[14, 28, 10]`. При вычитании последовательный способ начинает с последней
строки. Так одна таблица описывает и текущее значение, и то, как оно меняется.
+У строк есть и связи с родительскими узлами. Когда стадия родителя меняется,
+Control пересчитывает дочерние строки в глубину: ребёнка вместе со всем его
+поддеревом, затем следующего ребёнка. Для числа вариантов `count` внутренняя
+стадия вычисляется как `count - ceil(f32(count * ratio))`, а видимое значение
+ограничивается диапазоном модели. Например, при трёх стадиях доли
+`[0.1, 0.4, 0.5, 1, 0]` дали `[2, 1, 1, 0, 3]`; последнее значение — sentinel
+истощения, а в модель передаётся индекс не выше `count - 1`. Нативные проверки
+подтвердили порядок обхода и передачу состояния в AniMesh.
+
+Выбранная стадия также задаёт, какие данные MSH попадают в пересчёт видимости.
+У одного синтетического узла первый слот давал `[42, 330]`, а слот другой стадии —
+`[102, 570]`. В проверенных векторах одинаковые данные при скрытии и повторном
+включении восстановили суммы; переходы с разными слотами — нет. Эти проверки
+исполняют исходные DLL на тестовых строках, но не являются запуском Control на
+полной миссии; Rust пока сохраняет только начальное состояние provider-строк.
+Подробные границы приведены в [техническом приложении](../appendices/script-vm.md#родители-стадии-и-видимость-provider-узлов).
+
Для точного повтора важен порядок округления. При исходных значениях `[2^24, 2]`
и запросе `-1` оригинал сначала складывает общий итог с изменением, затем
вычитает прежний итог. Из-за округления фактическое изменение получается `-2`.