diff options
| author | Valentin Popov <valentin@popov.link> | 2026-10-29 17:24:43 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-10-29 17:24:43 +0300 |
| commit | d8e86e4f33241d4c0cbb236ecbd32f71798ce9ed (patch) | |
| tree | 6318667b6880f26de54dd3a8dcd6e89f6eae6af7 /docs/tomes | |
| parent | be4031cb54d9bd88d1bad9cf993d27f914c767fa (diff) | |
| download | fparkan-d8e86e4f33241d4c0cbb236ecbd32f71798ce9ed.tar.xz fparkan-d8e86e4f33241d4c0cbb236ecbd32f71798ce9ed.zip | |
feat(runtime): distribute Control provider amounts
Diffstat (limited to 'docs/tomes')
| -rw-r--r-- | docs/tomes/06-behavior.md | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md index 777caf1..452f577 100644 --- a/docs/tomes/06-behavior.md +++ b/docs/tomes/06-behavior.md @@ -995,7 +995,13 @@ clock Control. добавку либо пропорционально свободному месту, либо по очереди: при максимумах `[30, 60, 50]`, текущих значениях `[10, 20, 0]` и добавке `22` первый способ даёт `[14, 28, 10]`. При вычитании последовательный способ начинает с последней -строки. Так одна таблица описывает и текущее значение, и то, как оно меняется. +строки. Пропорциональное вычитание делит запрос по текущим количествам. +У каждой изменившейся строки есть отдельный накопитель изменений количества: он +получает фактически применённую разницу, а не исходный запрос. +Большие суммы округляются в двоичном формате. Поэтому после нескольких +маленьких изменений общий запас иногда оказывается чуть больше первоначальной +ёмкости; оригинал продолжает считать с этой отрицательной разностью, а не +исправляет её отдельным правилом. У строк есть и связи с родительскими узлами. Нативный `Control.dll` сначала обновляет запрошенную строку через `0x11220`, затем `0x11130` ищет её детей @@ -1040,8 +1046,10 @@ clock Control. Для точного повтора важен порядок округления. При исходных значениях `[2^24, 2]` и запросе `-1` оригинал сначала складывает общий итог с изменением, затем вычитает прежний итог. Из-за округления фактическое изменение получается `-2`. -Нативная проверка подтвердила это поведение; общий распределитель -`0x10ba0` в Rust ещё не перенесён, хотя прямая добавка к одной строке уже доступна. +Rust переносит этот порядок, сохраняет native накопитель каждой строки и +запускает обязательный проход стадий с effects. Если ему нужны ещё не +реализованные FX или lifecycle-вызовы, таблица остаётся без изменений. Эти +операции обновляют только CPU-снимок и пока не подключены к игровым часам Control. Отдельный путь объекта класса `4` умножает интервал на контактный коэффициент и передаёт изменение строке. В проверенном примере коэффициент `1`, интервал `2`, @@ -1058,7 +1066,8 @@ Control заново разыгрывает срок обновления, даÐ Принудительный шаг тоже расходует RNG; неактивный объект синхронизирует часы без такого расхода. Это локальные native проверки, а не работающий Rust Control: запросы Rust `0xe00` и `0x1002` читают текущее состояние строк, -которое пока меняет только прямой API, а `0x1005` — загруженную ставку профиля. +которое меняют явные API одной строки и распределения, а `0x1005` — загруженную +ставку профиля. Точные нативные векторы и открытые границы описаны в [приложении](../appendices/script-vm.md#изменение-provider-состояния-control). На x87 control word `0x007f` каждое умножение округляет мантиссу до 24 бит, |
