From 31fd9d2ea9b7fb01a952eef38a2af31eceebbe86 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Tue, 20 Oct 2026 04:11:35 +0400 Subject: fix(runtime): execute the first supported Init event --- docs/tomes/06-behavior.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'docs/tomes') diff --git a/docs/tomes/06-behavior.md b/docs/tomes/06-behavior.md index 3742772..f5c7a7b 100644 --- a/docs/tomes/06-behavior.md +++ b/docs/tomes/06-behavior.md @@ -151,6 +151,32 @@ handler contracts и runtime traces. handler лишь инициирует execution context (`+0x50 = 1`); его gameplay meaning пока не назван. +Когда в `.scr` есть событие `Init`, сценарная машина ищет его имя как C-строку: +сравнение учитывает регистр, останавливается на первом NUL, а среди повторов +выбирает первое событие. В проверенном AutoDemo это событие содержит один +`Handler(19)`. Он записывает в переменные клана координаты его основания и номер +клана: + +```text +первый Init -> действия по порядку -> ClanBaseX, ClanBaseY, ClanID +``` + +На пути к этим переменным координаты сначала округляются оригиналом до ближайшего +целого с правилом ties-to-even, затем сохраняется младшее 32-битное слово. +Например, `-0.6` даёт `0xffffffff`. AI хранит это слово как `float`, поэтому +`0xffffffff` становится `2^32`; `Handler(19)` усекает значение и снова берёт +младшие 32 бита, что даёт `0`. Значение `10001` также проходит дальше: оригинал +показывает предупреждение для чисел выше `10000`, но не отменяет создание AI. + +Rust исполняет только подтверждённую форму этого действия. Поддержанные записи +применяются к состоянию лишь после успешного прохода всего первого `Init`. +Если встретилась неподдержанная форма, preview сохраняет пакет, сообщает +`Unsupported` и оставляет значения по умолчанию; при полной загрузке та же форма +становится ошибкой. Это политика Rust для ограниченного исполнителя, а не правило +оригинального обработчика. Отсутствующее событие не создаёт записей; пустое +событие считается исполненным без записей. Остальные события пока не образуют +исполняемую VM. + Первый часто встречающийся table entry с side effect — `Handler(2)` (176 records в corpus). Он берёт active instruction, разрешает семь slots через varset, приводит три значения к float по observed kinds `5`/`3`, затем -- cgit v1.2.3