diff options
Diffstat (limited to 'docs/appendices/knowledge-boundaries.md')
| -rw-r--r-- | docs/appendices/knowledge-boundaries.md | 42 |
1 files changed, 31 insertions, 11 deletions
diff --git a/docs/appendices/knowledge-boundaries.md b/docs/appendices/knowledge-boundaries.md index e8bdb42..9869581 100644 --- a/docs/appendices/knowledge-boundaries.md +++ b/docs/appendices/knowledge-boundaries.md @@ -338,17 +338,37 @@ MSH-часть проверки подтверждает начальный сн остаётся статическим выводом по RVA `AniMesh.dll+0xa460`, а последующие изменения в полном Control/animation tick-е не проверялись. -Для provider-строки Rust сохраняет исходные и текущие amount/type-1 поля -отдельно, а `processed_amount_bits` соответствует native `+0x0c`. Инициализатор -`Control.dll+0xf940` кладёт результат selector `3` в текущее и обработанное -количество; при подтверждённых единичных множителях это raw `max_volume` NDP. -Прямой API `apply_loaded_mission_control_node_delta` меняет amount, долю, флаг -истощения, aggregate и dirty, применяя публикацию `0x200` к CPU-проекции -соответствующего узла модели. Исходный `AniMesh.dll+0x5750` подтверждён в -связке с `Control+0x10f30`: меняется только поле узла `+0x124`, а стадия и -соседние узлы сохраняются. Эта проекция ещё не подключена к GPU/window path -и сама delta-операция не выполняет пересчёт стадий, видимости, FX или время -Control. Обработанное количество при ней остаётся прежним. Отдельный +Для provider-строки Rust хранит amount `+0x08`, накопитель `+0x10`, обработанное +количество `+0x0c`, долю `+0x14`, стадию `+0x18` и flags `+0x28` раздельно. +Инициализатор `Control.dll+0xf940` кладёт результат selector `3` в текущее и +обработанное количество; при подтверждённых единичных множителях это raw +`max_volume` NDP. Таблица также хранит capacity aggregate `+0x58c`, текущий +aggregate `+0x590`, dirty `+0x598` и начальный gate `+0x618`. + +Прямой API `apply_loaded_mission_control_node_delta` сохраняет native четвёртый +аргумент `0`: меняет amount, долю, флаг истощения, aggregate и dirty, оставляя +`+0x10` нетронутым. Публикация `0x200` отражается в CPU-проекции соответствующего +узла модели по правилу исходного обработчика; стадия и соседние узлы не меняются. +Обработанное количество при этой прямой операции остаётся прежним. +API `distribute_loaded_mission_control_provider_amount` переносит +`Control+0x10ba0`: proportional mode делит добавку по свободной ёмкости, а +вычитание распределяет по текущим количествам; sequential заполняет строки +вперёд, снимает с конца и использует исходный запрос даже если общая ёмкость +округлилась вниз. Row updater вызывается с четвёртым аргументом `1`, поэтому +`+0x10` получает фактическую разницу amount. После распределения обязателен +`0x11130(root, true)`. + +Оба API работают только с CPU-проекцией и не подключены к GPU/window path или +игровому Control clock. Gate `+0x618` изначально выключен; событие `7` задаёт его +по правилу `gate = (arg == 2)` и вызывает `0x2dc20`, только если gate изменился. +События Control в Rust пока не исполняются. +Capacity aggregate выведен при подтверждённых единичных множителях Unit DAT; +изменение масштабов `0x9ee0`/`0x9f90` не реализовано. Из-за округления `+0x590` +может стать больше сохранённого `+0x58c`; распределение сохраняет этот signed +capacity по native формуле, не вводя отдельного запрета. Если итоговый stage walk +нуждается в неизвестном состоянии, depletion lifecycle, FX или host callback, +распределение сообщает ошибку и не публикует ни одной частичной записи. +Отдельный `update_loaded_mission_control_node_stage` реализует наследование parent ratio и stage, ceiling-арифметику, CPU visible stage и копию processed amount. Отдельная `propagate_loaded_mission_control_node_stage` переносит `0x11130`: |
