aboutsummaryrefslogtreecommitdiff
path: root/docs/tomes
diff options
context:
space:
mode:
Diffstat (limited to 'docs/tomes')
-rw-r--r--docs/tomes/06-behavior.md44
1 files changed, 42 insertions, 2 deletions
diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md
index bcb7320..b3dd8d0 100644
--- a/docs/tomes/06-behavior.md
+++ b/docs/tomes/06-behavior.md
@@ -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 через