test(runtime): verify randomized Control resource cadence
Docs Deploy / Build and Deploy MkDocs (push) Successful in 36s

This commit is contained in:
Valentin Popov committed 2026-10-29 16:35:50 +04:00
1 parent 38ff0ca682
commit f35c9ec1f0
4 files changed
+103 -9

No files matched your search

+13 -4
View File
@@ -958,10 +958,19 @@ Control пересчитывает дочерние строки в глубин
Отдельный путь объекта класса `4` умножает интервал на контактный коэффициент и
передаёт изменение строке. В проверенном примере коэффициент `1`, интервал `2`,
и значение строки уменьшается на `2`; этот коэффициент не является ставкой
производства из профиля. Проверка времени охватывает только начальную ветвь:
активную ветвь не запускали, а источник времени и полный порядок вызовов в игре
пока не установлены. Поэтому запросы Rust `0xe00` и `0x1002` используют
начальные снимки provider-строк, а `0x1005` — загруженную ставку профиля.
производства из профиля. Источник абсолютных часов и их доставка из World3D
в Control прослежены по инструкциям. Активная бюджетная часть проверена на
искусственном хосте класса `10`; полного тика объекта на миссии ещё нет.
У ресурсного шага отдельные часы. После принятого межкадрового интервала
Control заново разыгрывает срок обновления, даже если предыдущий вызов его
ещё не достиг. Например, с периодом `500` и начальным RNG `0x12345678`
исходная DLL пропустила времена `500` и `501`, затем выполнила ресурсный шаг
на `502`. Выбрать случайный срок один раз и ждать его было бы неверно.
Принудительный шаг тоже расходует RNG; неактивный объект синхронизирует часы
без такого расхода. Это локальные native проверки, а не работающий Rust
Control: запросы Rust `0xe00` и `0x1002` по-прежнему используют начальные
снимки provider-строк, а `0x1005` — загруженную ставку профиля.
Точные нативные векторы и открытые границы описаны в [приложении](../appendices/script-vm.md#изменение-provider-состояния-control).
На x87 control word `0x007f` каждое умножение округляет мантиссу до 24 бит,