aboutsummaryrefslogtreecommitdiff
path: root/docs/tomes
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-10-29 16:30:41 +0300
committerValentin Popov <valentin@popov.link>2026-10-29 16:30:41 +0300
commit0c31c34b57de4abeef0b1377bbc53a6398b93ffc (patch)
treedc55fa4e2269833f1d1f82ed2f8603f59d1004c3 /docs/tomes
parent6eb1dcaf7036e4e1702de15d0dd02181a3577852 (diff)
downloadfparkan-0c31c34b57de4abeef0b1377bbc53a6398b93ffc.tar.xz
fparkan-0c31c34b57de4abeef0b1377bbc53a6398b93ffc.zip
feat(runtime): update Control node stages
Diffstat (limited to 'docs/tomes')
-rw-r--r--docs/tomes/02-architecture.md6
-rw-r--r--docs/tomes/06-behavior.md28
2 files changed, 29 insertions, 5 deletions
diff --git a/docs/tomes/02-architecture.md b/docs/tomes/02-architecture.md
index 67dc93d..a0c72b6 100644
--- a/docs/tomes/02-architecture.md
+++ b/docs/tomes/02-architecture.md
@@ -362,8 +362,10 @@ CollObject, Control и PhysicalModel, пропуская отсутствующÐ
[техническом разборе](../appendices/script-vm.md#доставка-игровых-часов-в-control).
Статическая цепочка ещё не доказывает исполнение активного Control update на
миссии. Rust сохраняет исходные и текущие provider-поля отдельно. Прямой delta
-API меняет строку и значение соответствующего CPU-узла модели, но описанный
-clock/budget-путь и вывод этого состояния в окно пока не подключены.
+API меняет строку и значение соответствующего CPU-узла модели; отдельный
+стадийный API обновляет его видимую стадию и обработанное количество в
+подтверждённой области. Описанный clock/budget-путь и вывод этого состояния
+в окно пока не подключены.
В текущем runtime `step_headless` и `frame` получают время очереди явным
аргументом `u32`. По нему запускается представленный ресурсный планировщик
diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md
index 6e8d9b1..9dddc71 100644
--- a/docs/tomes/06-behavior.md
+++ b/docs/tomes/06-behavior.md
@@ -915,8 +915,9 @@ initial_mesh_state: Option<MissionControlNodeInitialMeshState>
Внутри снимка хранятся родительский индекс, переведённые флаги Control и число
начальных стадий. Узлы корневой модели добавляются все, а присоединённая `EXTO`
-начинает с локального узла `1`. Это описывает исходную настройку: код пока не
-переключает стадии в ходе игры и не исполняет полный Control tick.
+начинает с локального узла `1`. Это описывает исходную настройку. Отдельный
+API уже пересчитывает стадию одного узла, но полный игровой Control tick
+пока не исполняется.
На той же начальной стадии Control вычисляет количество строки по NDP
`max_volume`. Для загрузки Unit DAT проверенные множители равны `1.0`, поэтому
@@ -964,6 +965,26 @@ Native oracle соединяет исходные `Control+0x10f30` и `AniMesh+
с критическим флагом `1` пока возвращает ошибку без изменения состояния:
эта ветвь требует полного lifecycle объекта, а не только нового количества.
+Стадия пересчитывается отдельным вызовом
+`update_loaded_mission_control_node_stage`. Для трёх состояний доли `1`, `0.5`
+и `0.1` выбирают стадии `0`, `1` и `2`. Нулевая доля даёт служебную стадию
+Control `3`, но в модель записывается последняя видимая стадия `2`. Поэтому
+`current_stage` и `mesh_state.visible_stage` хранятся отдельно. Флаги `4` и `8`
+могут брать соответственно долю или стадию родителя; доля самой модели этим
+пересчётом не переписывается.
+
+После успешного вызова обработанное количество становится равным текущему,
+даже если стадия осталась прежней. Истощённые защищённые узлы сохраняют
+нативный ранний выход и не обновляют этот снимок. Неизвестные parent/count,
+неподдержанные lifecycle-вызовы, FX и пересчёт геометрии на границе истощения
+возвращают ошибку до записи. Аргумент `update_effects` сохраняет нативный смысл:
+его нельзя молча отключать при включении полноценного игрового цикла.
+
+На настоящем двухстадийном узле `min_l_n1.dat` тест уменьшает количество вдвое,
+явно вызывает стадийный API без FX и получает Control stage `1`, видимую стадию
+модели `1` и обновлённое обработанное количество. Это проверка отдельной
+операции на ресурсах, а не переключение кадра в игровом окне.
+
На исходном `min_l_n1.dat` прямое уменьшение количества строки ресурсного
устройства вдвое меняет ответы `0xe00` и Behavior `0x1002` с `1.0` на `0.5`.
Обычный последующий шаг runtime сохраняет это состояние. Это воспроизводимый
@@ -990,7 +1011,8 @@ Control пересчитывает дочерние строки в глубин
`[102, 570]`. В проверенных векторах одинаковые данные при скрытии и повторном
включении восстановили суммы; переходы с разными слотами — нет. Эти проверки
исполняют исходные DLL на тестовых строках, но не являются запуском Control на
-полной миссии; Rust пока не выполняет эти переходы стадий и видимости.
+полной миссии. Rust выполняет отдельный стадийный шаг в подтверждённой области,
+но обход потомков, пересчёт видимости и остальные callbacks ещё не подключены.
Прямой путь изменения количества остаётся отдельной операцией.
Подробные границы приведены в [техническом приложении](../appendices/script-vm.md#родители-стадии-и-видимость-provider-узлов).