feat(runtime): advance loaded mission resources
Docs Deploy / Build and Deploy MkDocs (push) Successful in 36s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 36s
This commit is contained in:
5 files changed
+1369
-45
No files matched your search
@@ -326,8 +326,48 @@ Resource Distributor работает со списком зарегистрир
|
||||
записях при игровом x87 control word `0x007f`: проверены добавление, повторный
|
||||
ключ, закреплённая запись, нулевая сумма и округление. Это позволяет Rust
|
||||
сохранять начальный список, но пока не подтверждает веса реальных объектов в
|
||||
живой миссии. Для регулярного шага по-прежнему не хватает интерфейсов ArealMap.
|
||||
Остальные ограничения собраны в [границах знания](../appendices/knowledge-boundaries.md).
|
||||
живой миссии.
|
||||
|
||||
Узкая часть регулярного шага уже связана с загруженным состоянием движка.
|
||||
`advance_loaded_mission_resources(engine, queue_time_ms)` принимает явную
|
||||
метку времени общей 32-битной очереди. Для каждого видимого Behavior clan он
|
||||
проверяет срок запуска, выполняет два прохода по списку и сохраняет пять
|
||||
итогов: доступную энергию и руду, буфер руды, потребление энергии и потребление
|
||||
руды. В обоих проходах объекты разрешаются заново по исходному TMA ID. Первый
|
||||
проход измеряет поставки и потребность, второй повторно читает представленные
|
||||
профильные и Control-значения перед применением выделения. Нативный код также
|
||||
запрашивает интерфейсы во втором проходе, но динамические getter-callbacks в
|
||||
этом снимке Rust не воспроизводятся.
|
||||
|
||||
Планировщик использует беззнаковое сравнение времени: равенство ненулевому
|
||||
сроку ещё не запускает шаг, а нулевой срок не задерживает его. Переполнение
|
||||
вычитания даёт 32-битную длительность. Затем
|
||||
длительность переводится в секунды с округлением, подтверждённым x87-путём
|
||||
оригинальной DLL. Нативный oracle проверяет его на длинных интервалах, включая
|
||||
значения около границы точного целого `f32`, а также на равенстве и строгом
|
||||
проходе срока. Формула запуска, native vectors и команда воспроизведения
|
||||
описаны в технической главе [script VM](../appendices/script-vm.md).
|
||||
|
||||
Шаг работает только с уже созданными полными объектами миссии и снимками тех
|
||||
профилей и Control-таблиц, чьи запросы и setters представлены в runtime. Он
|
||||
обновляет загруженные `CurrentOre`, поля строк распределителя и поддержанный
|
||||
Control selector `1`; неподдержанное свойство, запрос Control или невозможное
|
||||
арифметическое значение возвращает ошибку. Обновления нескольких кланов, их
|
||||
расписания и RNG фиксируются одной транзакцией: если обязательный запрос
|
||||
позднего клана не разрешён, ранее подготовленные изменения остаются
|
||||
неприменёнными. Приложение пока не вызывает
|
||||
этот API из игрового цикла, а динамические callbacks, которые переносят
|
||||
количество между Control provider-строками, ещё не моделируются. Поэтому это
|
||||
исполняемый загруженный resource step, а не полный симулятор миссии.
|
||||
|
||||
Для настоящих ресурсов AutoDemo тест проходит несколько временных точек:
|
||||
генераторы `ObjectId 6` и `ObjectId 7` читают `Transfer_Power_Out = 10` из
|
||||
`prof_generator.var`; после шага в 500 мс каждый сообщает 5 единиц доступной
|
||||
энергии. Это подтверждает связь загруженного профиля с runtime-расчётом, но не
|
||||
сравнение полной миссии с оригинальной игрой. Native oracle сверяет исходные
|
||||
планировщик и распределитель GOG `Behavior.dll`; техническая процедура и
|
||||
проверяемые векторы описаны в [script VM](../appendices/script-vm.md). Остальные ограничения собраны в
|
||||
[границах знания](../appendices/knowledge-boundaries.md).
|
||||
|
||||
Первый часто встречающийся table entry с side effect — `Handler(2)` (176
|
||||
records в corpus). Он берёт active instruction, разрешает семь slots через
|
||||
|
||||
Reference in new issue
Block a user