diff options
Diffstat (limited to 'docs/tomes')
| -rw-r--r-- | docs/tomes/06-behavior.md | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md index 452f577..6406307 100644 --- a/docs/tomes/06-behavior.md +++ b/docs/tomes/06-behavior.md @@ -1051,6 +1051,26 @@ Rust переносит этот порядок, сохраняет native наÐ реализованные FX или lifecycle-вызовы, таблица остаётся без изменений. Эти операции обновляют только CPU-снимок и пока не подключены к игровым часам Control. +Распределение по бюджету тоже доступно как отдельный CPU-вызов +`advance_loaded_mission_control_budget`. Он сначала собирает положительные +ставки, затем обслуживает категории в исходном порядке и передаёт каждому +устройству его долю. Например, при запасе `40/100`, доле `0.4` и интервале +`0.5` секунды tag 19 может принести `0.1`, а tag 15 запросить `0.2`. +Потребитель получает половину запроса: запас становится `40.1`, доля — `0.401`, +а множитель генератора уменьшается до `0.75`. Хотя генератор может стоять раньше +в массиве, его обновление перечитывает уже изменённую долю после обслуживания +категории tag 15. Этот явный вызов хранит также две выходные ставки `+0x5dc` и +`+0x5e0`, но сам по себе ещё не запускается игровыми часами. +Поддержаны factory callbacks `15/19` и текущие descriptor tags `15/19` +(категории `0/1`); неизвестное устройство, +недоступные данные provider или нулевой знаменатель останавливают весь шаг без +частичных изменений. +Другие категории и полный миссионный цикл пока не подтверждены. В лицензированном +`min_l_n1.dat` рядом с тегами `19` и `15` есть также factory tags `9`, `12`, +`13`, `21`, `25` и `26`; поэтому его полный проход пока явно отклоняется на +первой неподдержанной категории `9`. Проверка сохраняет всю таблицу без +изменений и не доказывает успешный бюджетный шаг на реальной миссии. + Отдельный путь объекта класса `4` умножает интервал на контактный коэффициент и передаёт изменение строке. В проверенном примере коэффициент `1`, интервал `2`, и значение строки уменьшается на `2`; этот коэффициент не является ставкой @@ -1064,10 +1084,10 @@ Control заново разыгрывает срок обновления, даÐ исходная DLL пропустила времена `500` и `501`, затем выполнила ресурсный шаг на `502`. Выбрать случайный срок один раз и ждать его было бы неверно. Принудительный шаг тоже расходует RNG; неактивный объект синхронизирует часы -без такого расхода. Это локальные native проверки, а не работающий Rust -Control: запросы Rust `0xe00` и `0x1002` читают текущее состояние строк, -которое меняют явные API одной строки и распределения, а `0x1005` — загруженную -ставку профиля. +без такого расхода. Это локальные native проверки, а не автоматический Rust +Control tick: запросы Rust `0xe00` и `0x1002` читают текущее состояние строк, +которое меняют явные API одной строки, распределения и бюджетного шага, а +`0x1005` — загруженную ставку профиля. Точные нативные векторы и открытые границы описаны в [приложении](../appendices/script-vm.md#изменение-provider-состояния-control). На x87 control word `0x007f` каждое умножение округляет мантиссу до 24 бит, |
