fix(runtime): warm behavior before mission Init
Docs Deploy / Build and Deploy MkDocs (push) Successful in 40s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 40s
This commit is contained in:
6 files changed
+866
-48
No files matched your search
@@ -177,6 +177,36 @@ Rust исполняет только подтверждённую форму э
|
||||
событие считается исполненным без записей. Остальные события пока не образуют
|
||||
исполняемую VM.
|
||||
|
||||
### Первый запуск сценария
|
||||
|
||||
До регулярной работы Behavior настраивает расписание своего первого шага. Он
|
||||
берёт текущее 32-битное время игровой очереди и назначает проверку через три
|
||||
интервала по 64 мс, добавляя небольшую случайную задержку от 0 до 63 мс. Эта
|
||||
задержка нужна каждому экземпляру, но случайные числа берутся из общего
|
||||
генератора, поэтому порядок запуска кланов влияет на их значения. При первой
|
||||
подготовке controller также очищает несколько внутренних слов. В проверенном
|
||||
повторном вызове до назначенного срока ненулевое сохранённое время оставило
|
||||
срок прежним, не потребовало нового случайного числа и не очистило эти слова;
|
||||
поведение после срока пока неизвестно.
|
||||
|
||||
В оригинале вызов идёт через обратный вызов движка: Iron3D сначала создаёт
|
||||
SuperAI для записей кланов, затем обновляет Behavior и ищет `Init` для
|
||||
соответствующего AI. Если `Init` не найдено, одноразовая метка остаётся
|
||||
выключенной. Если оно найдено, диспетчер запускается только при свободной защите
|
||||
от повторного входа; при занятой защите вызов пропускается, но одноразовая метка
|
||||
всё равно устанавливается. В полной загрузке Rust вызывающая сторона передаёт
|
||||
значение времени очереди; после регистрации объектов загрузчик последовательно
|
||||
подготавливает каждый сценарный пакет и выполняет только подтверждённые действия
|
||||
`Handler(19)` из первого `Init`. Статический просмотр не запускает Behavior, но
|
||||
может сохранить подтверждённые записи `Init` в сценарном varset.
|
||||
|
||||
Это полезное начало сценария, но ещё не целая игровая жизнь AI. Текущий runtime
|
||||
не воспроизводит аргумент обратного вызова в `AI+0x3fc`, защиту от повторного
|
||||
входа `AI+0x78`, одноразовую метку `AI+0x8a8` или обновления Behavior на игровых
|
||||
тиках. Он также не подменяет очередь оригинала: вызывающая сторона сама
|
||||
передаёт время, а локальный генератор Rust пока учитывает только случайные
|
||||
числа этого восстановленного шага.
|
||||
|
||||
Первый часто встречающийся table entry с side effect — `Handler(2)` (176
|
||||
records в corpus). Он берёт active instruction, разрешает семь slots через
|
||||
varset, приводит три значения к float по observed kinds `5`/`3`, затем
|
||||
|
||||
Reference in new issue
Block a user