diff options
| author | Valentin Popov <valentin@popov.link> | 2026-10-29 16:30:41 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-10-29 16:30:41 +0300 |
| commit | 0c31c34b57de4abeef0b1377bbc53a6398b93ffc (patch) | |
| tree | dc55fa4e2269833f1d1f82ed2f8603f59d1004c3 /docs/tomes/06-behavior.md | |
| parent | 6eb1dcaf7036e4e1702de15d0dd02181a3577852 (diff) | |
| download | fparkan-0c31c34b57de4abeef0b1377bbc53a6398b93ffc.tar.xz fparkan-0c31c34b57de4abeef0b1377bbc53a6398b93ffc.zip | |
feat(runtime): update Control node stages
Diffstat (limited to 'docs/tomes/06-behavior.md')
| -rw-r--r-- | docs/tomes/06-behavior.md | 28 |
1 files changed, 25 insertions, 3 deletions
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-узлов). |
