FROMSOFT славится сложным и разнообразным ИИ врагов. Но когда посмотреть на код Elden Ring (написанный на Havok Script, интерпретируемом Lua), видно что это не deep learning, а elegantly простая система. Основный инструмент, Goal (цель/состояние), не просто конечный автомат (FSM), а Pushdown Automaton (стек состояний). Каждый фрейм враг обновляет Goal на верхушке стека. Goal может push-ить sub-goals на стек, те выполняются следующие фреймы. Пример: CoolBossBattle (top-level) push-ит Attack goals разных типов: Когда Attack успешно выполнится, Goal pop-ится со стека. Если fail, раскручивается стек обратно к parent-Goal и тот push-ит новый action. Когда Goal активируется первый раз (activate-функция), он выбирает следующее действие через взвешенный рандом по дистанции до врага, HP, и других параметров. Веса динамично меняются через таймауты действий (cooldown). Второй инструмент, Interrupt: события (урон, spell-casting врага, fire debuff) могут прерывать текущий Goal stack и forseполучить