feat(script): evaluate additive FML expressions during Init
Docs Deploy / Build and Deploy MkDocs (push) Successful in 37s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 37s
This commit is contained in:
5 files changed
+856
-104
No files matched your search
@@ -169,8 +169,10 @@ handler лишь инициирует execution context (`+0x50 = 1`); его ga
|
||||
показывает предупреждение для чисел выше `10000`, но не отменяет создание AI.
|
||||
|
||||
Rust исполняет подтверждённый поднабор первого `Init`: действие `Handler(19)`
|
||||
и числовые literal assignments, описанные ниже. Поддержанные записи применяются
|
||||
к состоянию лишь после успешного прохода всего первого `Init`.
|
||||
и формулы из одного атома либо двух атомов с бинарным `+` или `-`. Здесь атом —
|
||||
число или имя переменной. Поддержанные шаги сразу обновляют временную копию
|
||||
varset, поэтому следующая формула читает уже записанные значения. К состоянию
|
||||
клана записи попадают лишь после успешного прохода всего первого `Init`.
|
||||
Если встретилась неподдержанная форма, preview сохраняет пакет, сообщает
|
||||
`Unsupported` и оставляет значения по умолчанию; при полной загрузке та же форма
|
||||
становится ошибкой. Это политика Rust для ограниченного исполнителя, а не правило
|
||||
@@ -186,12 +188,18 @@ Rust исполняет подтверждённый поднабор перво
|
||||
нули в `dT8` и `dT9`.
|
||||
Клан 1 той же миссии использует первые девять строк `scream.fml`: восемь
|
||||
проверенных значений попадают в `DWORD` с усечением дробной части, а `0.8`
|
||||
сохраняется как число `float`. Пока Rust вычисляет только числовой литерал,
|
||||
начинающийся с цифры; операторы, ссылки на переменные и другие формы формул
|
||||
остаются явными ошибками. В тесте полной загрузки миссия `Mission.01`
|
||||
проходит этот `Init`; `Single.01` останавливается на следующем неподдержанном
|
||||
`Handler(43)` в clan 1, записи 10. Никакое значение не подставляется вместо
|
||||
этого действия.
|
||||
сохраняется как число `float`. Например, если `source` равен `10`, выражение
|
||||
`source + 2.0` записывает `12`; следующее `target - source` читает новое значение
|
||||
`target` и получает `2`. Каждая операция работает с `f32`: значение ячейки
|
||||
`DWORD` сначала читается как беззнаковое число и переводится в `f32`, а результат
|
||||
сохраняет тип целевой ячейки. Поддерживаются только один или два атома и один
|
||||
бинарный `+` либо `-`; произвольная грамматика формул и остальная VM не
|
||||
восстановлены. В отдельной точечной проверке вычисления и записи оригинальной
|
||||
DLL и Rust совпали для 13 выбранных формул. Эта сверка проверяет только
|
||||
эти значения и не запускает исходную миссию. Тест полной загрузки подтверждает,
|
||||
что `Mission.01` проходит этот `Init`; у `Single.01` следующий неподдержанный
|
||||
`Handler(43)` встречается в clan 1, записи 10. Никакое значение не подставляется
|
||||
вместо этого действия.
|
||||
|
||||
### Первый запуск сценария
|
||||
|
||||
@@ -246,7 +254,7 @@ SuperAI для записей кланов, затем обновляет Behavi
|
||||
всё равно устанавливается. В полной загрузке Rust вызывающая сторона передаёт
|
||||
значение времени очереди; после регистрации объектов загрузчик последовательно
|
||||
подготавливает каждый сценарный пакет и выполняет восстановленные действия
|
||||
`Handler(19)` и числовые literal assignments из первого `Init`. Статический
|
||||
`Handler(19)` и поддержанные формульные присваивания из первого `Init`. Статический
|
||||
просмотр не запускает Behavior, но может сохранить эти записи `Init` в сценарном
|
||||
varset.
|
||||
|
||||
|
||||
Reference in new issue
Block a user