fix(runtime): execute the first supported Init event
Docs Deploy / Build and Deploy MkDocs (push) Successful in 38s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 38s
This commit is contained in:
8 files changed
+1448
-106
No files matched your search
@@ -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`, затем
|
||||
|
||||
Reference in new issue
Block a user