среда, 26 мая 2021 г.

ИИ в RPG Maker. Игровые заметки.

Скрипты и продинутый ИИ это хорошо, но, самое главное - это понимание, как и когда применять.


3. Применение ИИ; когда?


Как упоминалось ранее, если вы делаете игру с множественными случайными боями, то настраивать ИИ для них особого смысла нет. Скорей, наоборот, поставив случайные (always с рейтингами) значения на скиллы, удастся хоть немного разнообразить битвы. Напомню так же, что лучше делать случайные битвы легче уровня игрока на локации, чтобы они были просто ненапряжным гриндом, а не унылой тяжелой тягомотиной.

Для организации боссов подобных игр (берем в рассчет класику jrpg типа FF или DQ) обычно задают жесткую последовательность действий. Могу разве что порекомендовать иногда делать небольшой рандом в рамках хода + применить один из скриптов из прошлой статьи с настройками типа "на каждом 3м ходу враг может лечиться, но если у него меньше 20% HP".


Теперь разберем случаи, когда нормальный ИИ действительно пригодится, и вообще, как его построить.

Типичное место для хорошего ИИ - это игра с неслучайными и [полу]уникальными битвами. 

То, что на картах могут бегать с range видимые противники (как в Agnostia), еще не означает уникальность битв - это те же самые случайные, только замаскированные. 

Когда говорится про уникальность битв это не значит, что каждый раз будут новые враги или хотя бы их новая комбинация в группе, но повторяющихся битв с тем же набором врагов должно быть конечное число (1-5), в идеале - одна. В этом случае как раз и стоит продумать приличный ИИ, иначе, вместо интересного испытания, битвы будут скучными задержками, на которых и не погриндишь особо, как в бесконечных случайных битвах.

Хорошо, если игра при этом последовательна либо очень ограничена в прокачке героев, иначе игрок может встретиться с слишком сильными или очень слабыми группами, и большинство ухищрений с ИИ пойдут насмарку.


4. Применение ИИ; как?


Технические возможности мейкера в этом плане рассмотрены в предыдущей статье, здесь остановимся на теории. Рассмотрим для начала противника как отдельную единицу, а потом - слаженную работу группы.

Очень просто сделать "сложного" врага - достаточно заставить его спамить каждый ход сильный прием. Но это нечестно по отношению к игроку и неинтересно в плане боя. Кстати, то же самое верно по отношению к героям - в хороших играх всегда есть ограничения на приемы:
  • Мана, которая тратится при приеме и заканчивается.
  • Ярость или TP (Technical Points), похожа на ману, но накапливается в процессе боя и не позволяет спамить сильные приемы в начале боя (надо подкопить).
  • Кулдауны, что не позволяют использовать сильные приемы слишком часто.
Хорошей идеей будет ввести одинаковые правила для врагов и для игроков. В мейкере это делается достаточно просто:
  • Ставить врагам ману и стоимость приемов.
  • Аналогично с яростью.
  • Ставить использование приемов не чаще, чем раз в n ходов (turn no), это означает именно не чаще, а не ровно раз в три хода запускать фаербол. 
При этом не забывайте оставлять обычную атаку (которая не требует ничего) в Always с низким рейтингом, иначе враг попросту не сходит, к примеру, когда закончится мана, и в некоторых активных боевках вовсе может подвиснуть.

База настроек приемов врага, от которой стоит отталкиваться - не совсем жестко заданная последовательность действий. Это значит, что у него прописано несколько ходов c вариациями, к примеру, типичный враг воин начала игры с ограничениями через кулдаун:
  • 0+4n : усиление
  • 1+4n : сильный удар или круговой удар
  • 2+4n : если hp < 25%, то зелье жизни, иначе - щит  
  • 3+4n : двойной удар
  • always : атака мечом
Для противника сперва определяется набор его приемов, и, исходя из него - длина цикла.

Удобней всего (пусть и несколько ограниченно) выстраивать набор приемов именно через кулдауны-циклы. МП здесь не подойдет, так как тогда битва скатится в свалку сильнейших (и дорогих) приемов в начале. Вариант с ТП лучше, но без какого-то магического скрипта AI, которого в открытом доступе точно нет, сложней в реализации (попробуй настрой еще без turn накопление ярости на сильный прием, не сливая её на более слабые). 

Далее, определяем цель врага (в этой статье мы все еще рассматриваем его как отдельную единицу). Вариантов реально много, причем в зависимости от ситуации в битве, но можно сформулировать некоторые типичные случаи, которые позволяют скрипты (примеры для mv от скрипта Янфлай):
  • герой с наименьшим/наибольшим параметром
    • HP% param <= 50%: Heal, Lowest HP%
      MP param > 90: Mana Drain, Highest MP
      ATK param > user.atk: Power Break, Highest ATK
  • со слабостью к элементу (Element Fire Weakness: Fireball, Lowest HP%)
  • не имеющего/имеющего какой-то статус (ослабляем, убиваем)
  • и так далее
Аналогично для своих - это лечения, снятие статусов, усиления и так далее.


Выстраивая вражеский набор приемов и условия их использования можно использовать слудующие архетипы, вроде: 
  • танк - сначала заботится о защите себя и других, потом атакует
  • дамаг дилер - бьет, накладывает уязвимости, бьет
  • хилер - лечит, снимает статусы
  • ведьма - ослабляет и проклинает героев 
  • и так далее.

Выстраивая цели приемов можно использовать типичные архетипы, вроде:
  • лутер - бьет по цели, которой осталось жить немного
  • случайный - того атаковал, этого, случайно
  • колдун - смотрит, кому выбранным скиллом нанесется бОльший урон, например, по слабостям; можно, кстати, написать метод, который пройдется по всем героям и вычислит урон (без учета рандома), который должен нанестись.
  • медик - лечит и восстанавливает кому это надо
  • поддержка - лечит, восстанавливает, усиляет определенных союзников (например, босса через переменную или самого ценного бойца по параметру атаки)
  • и так далее

Тут мы уже залезли чуть дальше, в настройки партии врагов, об этом лучше поговорить отдельно, в следующей статье.

Комментариев нет:

Отправить комментарий