← На главную

ИИ Elden Ring — stack-машина на Havok Script, а не Behavior Trees

23.06.2026 11:40 · hackernews

Искусственный интеллект в Elden Ring и других играх FromSoftware построен на удивительно простых принципах. Разработчики не используют модные системы вроде GOAP или сложные деревья поведения (Behavior Trees). Вместо этого они применили stack-машину (Pushdown Automaton), реализованную на скриптовом языке Havok Script.

Основная единица AI — это Goal (цель). Каждый персонаж (Actor) хранит стек таких Goal. Каждый кадр выполняется Goal на вершине стека. Он может запускать подчинённые Sub-Goals, которые кладутся сверху. Когда Sub-Goal завершается успехом или ошибкой, он убирается из стека. При ошибке стек очищается до родительского Goal, и персонаж выбирает новое действие.

Логика выбора действия обычно находится в функции activate. Она использует взвешенный случайный выбор. Веса динамически меняются в зависимости от дистанции до игрока, здоровья босса и случайных чисел (rng). Например, на большой дистанции выше шанс дальних атак, вблизи — комбо. Механики вроде кулдаунов анимаций и проверок (is_cooldown) дополнительно корректируют веса, чтобы босс не спамил одним и тем же ударом.

Вторая важная функция — Interrupt (прерывание). Она позволяет Goal немедленно реагировать на события. Прерывания всплывают вверх по стеку. Это даёт разработчикам возможность создавать «злые» паттерны. Например, Bell Bearing Hunter с 85% вероятностью прерывает своё текущее действие и атакует, если замечает, что игрок использует заклинание или предмет. Также используются динамические пространственные триггеры — если игрок забегает за спину боссу, тот может мгновенно развернуться и ударить.

У каждого Goal есть таймер жизни (lifetime). Это механизм защиты от багов: если AI зависает в неправильном состоянии, таймер просто сбрасывает его. Для хранения данных у персонажа нет сложных «досок» (blackboards) — используется обычный массив чисел с плавающей точкой, к которому Goals обращаются по индексу.

Физикой и анимациями занимается Havok Physics и Havok Animation Studio (оба продукта уже сняты с поддержки). Команда «сделай анимацию» в Goal запускает ролик, а события внутри анимации (хитбоксы, спавн снарядов) уже управляют боем. Сложные действия вроде Attack и MoveToSomewhere написаны на C++ для производительности, а скриптовая логика оставлена для гибкости.

Такой подход быстрее, чем Behavior Trees, где нужно пересчитывать всё дерево сверху вниз. Он гораздо понятнее, чем системы планировщиков (STRIPS, GOAP). А по сравнению с конечными автоматами (FSM) он позволяет избежать «взрыва» количества состояний за счёт динамических переходов и стека. Level-дизайнеры при этом могут прямо на уровне указать, какой Top Level Goal будет у NPC — хоть пассивный, хоть боевой.

Читать оригинал →