aboutsummaryrefslogtreecommitdiff
path: root/docs/tomes/06-behavior.md
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-10-20 05:35:38 +0300
committerValentin Popov <valentin@popov.link>2026-10-20 05:35:38 +0300
commite4645b1d6278a2f766dac99815d3938c42f61640 (patch)
treed9f07ef2c295484ed8a0f71e6ea24ba29e6dd332 /docs/tomes/06-behavior.md
parent89a0d1da6180767dd20fccc47227580b83f9a874 (diff)
downloadfparkan-e4645b1d6278a2f766dac99815d3938c42f61640.tar.xz
fparkan-e4645b1d6278a2f766dac99815d3938c42f61640.zip
test(runtime): verify native resource distributor tick
Diffstat (limited to 'docs/tomes/06-behavior.md')
-rw-r--r--docs/tomes/06-behavior.md34
1 files changed, 31 insertions, 3 deletions
diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md
index 62c7b56..cd08969 100644
--- a/docs/tomes/06-behavior.md
+++ b/docs/tomes/06-behavior.md
@@ -203,9 +203,37 @@ SuperAI для записей кланов, затем обновляет Behavi
Это полезное начало сценария, но ещё не целая игровая жизнь AI. Текущий runtime
не воспроизводит аргумент обратного вызова в `AI+0x3fc`, защиту от повторного
входа `AI+0x78`, одноразовую метку `AI+0x8a8` или обновления Behavior на игровых
-тиках. Он также не подменяет очередь оригинала: вызывающая сторона сама
-передаёт время, а локальный генератор Rust пока учитывает только случайные
-числа этого восстановленного шага.
+тиках. При этом один конкретный шаг Behavior — распределение ресурсов — уже
+исполнен на исходной DLL с искусственными объектами; FParkan пока не вызывает
+его, потому что игровой мир Rust ещё не предоставляет нужные ресурсные
+интерфейсы. Runtime также не подменяет очередь оригинала: вызывающая сторона
+сама передаёт время, а локальный генератор Rust пока учитывает только случайные
+числа восстановленного стартового шага.
+
+### Регулярная передача ресурсов
+
+Resource Distributor работает со списком зарегистрированных объектов. За один
+шаг он сначала проходит список и собирает нужные значения, а затем проходит его
+ещё раз и применяет результат. Во втором проходе объект ищется заново, поэтому
+его состояние или ответ getter-а может измениться между чтением и записью.
+Нулевой временной шаг ничего не делает; некоторые состояния объекта также
+пропускают строку ещё до запросов ресурсных интерфейсов.
+
+В синтетическом примере исходного кода два объекта с ключами `41` и `42`
+обрабатываются в порядке `41, 42, 41, 42`: производитель сначала сообщает
+скорость `4`, затем `1`, а получатель со значением `6` заканчивает шаг со
+значением `7`. Это показывает, почему одного результата чтения недостаточно:
+алгоритм снова получает величины при применении. Сценарий был запущен прямо из
+исходной `Behavior.dll`, но объекты и ответы интерфейсов заданы тестом; это ещё
+не воспроизведение реальной миссии.
+
+Пока мы знаем точные границы интерфейсных запросов и некоторые ветви классов
+объектов, но не все доменные значения полей записи и не происхождение реальных
+строк списка. Загрузчик FParkan не должен создавать такие строки из похожих
+полей миссии: сначала нужно доказать путь регистрации и связать его с типами
+ресурсных объектов. Технические идентификаторы и численные векторы приведены
+в [приложении о сценарной машине](../appendices/script-vm.md), а оставшиеся
+вопросы перечислены в [границах знания](../appendices/knowledge-boundaries.md).
Первый часто встречающийся table entry с side effect — `Handler(2)` (176
records в corpus). Он берёт active instruction, разрешает семь slots через