Рассказ пойдет о 2D играх от третьего лица (вид сверху). В основном это шутеры, но и стратегия будет тоже затронута. Для простоты сравнения и понимания мы возьмем наших любимых «котяток». Да, да, именно коты нам хорошо в этом помогут.
Итак, каким же мы видим обычное поведение ботов в играх? Для наглядности будем рассматривать пару примеров (Рис. 1).
Рис. 1 Слева — SAS Zombie Assault 3 и справа Ninjago.
Плюсы и минусы
Плюсы:
1. За пару раундов траектория ботов становиться предсказуемой. Победа становиться легкой.
2. Можно «кружить» ботов и всегда оставаться невредимым. У геймеров даже есть такое понятие как «Кружение вальса».
Минусы:
1. За пару раундов становиться не интересно играть именно с ботами. Продолжаешь играть ради очков и наград, бот перестает быть противником.
Не стану размусоливать все достоинства или недостатки, думаю всем понятно, такой бот — не противник. Да, можно усложнить уровень добавив 1000 таких ботов и уменьшить патронов. Или посадить в замкнутое пространство, где особо не побегаешь. Но суть не меняется. Разработчики усложняют условия, но ни как не противника. С точки зрения разработки — это проще и легче.
Давай те разберем тактику таких ботов на пальцах.
Рис. 2 Рисунок разделен на 4 кадра.
1. На первом кадре мы видим бота и игрока стоящие на против друг друга. Для уточнения: игроком управляем мы, ботом — программный код.
2. На втором кадре бот не видя препятствий начинает стрельбу в игрока.
3. На третьем кадре перед ботом стоит препятствие и ему приходиться обходить его, поскольку через препятствие стрелять он не может.
4. Ну и наконец четвертый кадр, суть та же, только препятствий множество и боту приходиться постоянно менять траекторию для достижения цели. Оранжевым цветом не зря подсвечена «видимость» бота. Поскольку не имея интеллекта у бота, разработчик сразу указывает ему его задачу. Подзадачей же является в нашем случае передвижение до объекта.
Вот и разобрались. Основная задача — дойти долететь, доползти, допрыгать до цели, дополнительная же выбрать оптимальный путь. Этими принципами действуют многие в природе, но я решил выбрать для сравнения более идеального на мой взгляд объекта — КОТ. Хотя кот намного превосходит бота, принципы у них одинаковы.
Характеристика объекта «Кот»
Рис. 3 Рандомные движения
Незапланированные цели, рандомные, но в тоже время точные движения и на конец тактическое
Из жизненных наблюдений, кот никогда не пойдет по луже или попытается запрыгнуть на предмет который выше 4 этажа. Видит кот хорошо днем и в темноте, но никак «сквозь» его любимых коробок. Прячется когда опасность Наступает во время охоты или от безвыходности.
Теперь, мы можем это применить к нашему боту, тем самым улучшив его характеристики и изменить предсказуемость, а значит и сложность!
Думаю гонять такого бота, даже в замкнутом помещении станет намного интересней.
Улучшаем характеристики
Зона видимости — бот не должен изначально видеть своего врага, видимость должна ограничиваться не только «туманом войны», но и объектами которые его окружают. Рис. 4. Мало того, на первом кадре бот сразу видит игрока даже сквозь предметы, на любом расстоянии. На втором же кадре, его обзор ограничен и бот пытается взглядом «прощупать» на поиск цели. Боту приходится выполнять подзадачи для того что найти игрока.
Рис. 4 Зона видимости
Зона комфорта — бот будет идти на пролом любой ценой пока не убьет или не будет убитым. Так быть не должно. Если бот будет понимать что жизнь его подходит (подойдет) к концу, то он должен прятаться. Или силы к примеру не равные, опять же должен найти укрытие. Рис. 5. На первом кадре бот классически думает что он «Рэмбо», на втором кадре бот пытается увеличить свои шансы на выживание.
Коты очень любят зону комфорта, по этому всегда уходят от столкновений с инородными движущимися непонятными телами.
Рис. 5. Зона комфорта
Зона поражения — попадание пули (ножа, гранаты), одна из интересных задач игроков и ботов. Допустим в Battlefield 3 сделали такой классный эффект как подавление, траектория пули и сила урона. Тем самым с одного и того же оружия нельзя убить на разном расстоянии при разном режиме стрельбы. В Counter Strike этого нет, разве что разброс пуль…
Рис. 6 Слева Battlefield 3 и справа Counter Strike
Но это уже более сильные игры по сравнению с теми о которых мы говорим. Но тем не менее, можно же взять хотя бы элементарные примеры. Зона поражения должна ограничиваться. Например предметами и объектами и самое главное дальностью. Ниже рисунок демонстрирует то, чем дальше противник, тем меньше пуль в него попадет. Понимаю что все зависит от оружия, но это уже тонкости игры.
Как я говорил выше, кот не прыгнет выше того на что он способен, даже если он уверен что допрыгнет. Исключение: коты с количеством жизней >6
Рис. 7 Шкала поражения противника.
Зона ожидания — ну тут все просто, боты как правило как обезглавленные носятся дабы найти цель, этим самым игроку просто остается сидеть и ждать. Предсказуемо. А вот в той же «Контре» боты отсиживаются! А ведь бот «кемпер» уже неожиданность для игрока.
Кот 90% своей жизни находиться в режиме загрузки и ожидания. Возможно это его и спасает от рандомных поступков.
Траектория передвижения — если представить ситуацию, что у бота есть возможность обойти предмет, то почему у него нет возможности перепрыгнуть его? Здесь вопрос уже к тонкостям игры… а вот альтернативу прохода никто не исключал. Смотрим рисунок ниже. В первом кадре показан классический выбор бота верхнего прохода, потому что он ближе. На втором кадре наш бот выбирает именно нижний, поскольку, в третьем кадре бот понимает, что ширина прохода шире, а значит больше возможностей для маневров.
Рис. 8 Траектория передвижения
К сожалению траекторию котов вычислить может только Чак Норис
Можно продолжать выдумать все больше и больше способов, но вывод один. Бот служит в играх, заменой реального человека, как правило слабого противника. Тем самым мы всегда будем хотеть играть с более серьезным противником. А может даже напарником, который «не тупит».
Тактические маневры
Разведка — классический прием, увидев врага, бот открывает огонь, не подозревая что рядом может быть еще один враг. Или есть возможность обойти с тыла. Каким же образом? Смотрим рисунок ниже… Конечно, это сложный прием, учитывая что он запоминает расположение стоящего противника №1, после чего проходит дальше и запоминает расположение противника №2. Но быть такому приему, никто не запрещал.
Кот всегда на стреме, даже когда спит, даже когда он думает что он спит.
Рис. 8 Тактические маневры
Боевой дух — был бы он у бота, он бы говорил так: — «я один, мне страшно, нас много, мы всех победим. Я один и у меня пулемет, я Джон Джей Рэмбо!».
Коллективный режим — всегда было интересно, почему стреляя в реального игрока, его напарник бежит на помощь, а бот нет? Да потому что они автономны друг от друга. Почему бы не сделать их коллективными? Не обязательно ходить всей бражкой, можно например так, одинокий бот встретив такого же бота, начинает к нему держаться по ближе. Ежели одинокий бот встречает компанию своих товарищей, значит все, команда собрана. А значит бегать всей толпой нет смысла. Отсюда и вывод, что этот самый бот будет обходить с тыла, пока его команда производит атаку на врага с фронта. Думаю тут все понятно.
Опять же в коллективном режиме повышается Боевой дух, и они могут реально идти на пролом, нежели по одиночке.
Рис. 9 Приманка
Кот как Джеймс Бонд, всегда один, иногда с кисками.
Приманка — даже если нет коллективного режима, приманкой бот может «заморачивать» игрока. Принцип таков, пострелял -> получил ранение -> отошел назад (в сторону). В случае если есть коллективный режим, рядом могут быть товарищи бота, которые будет ждать его или просто находиться рядом. Игрок последовавший за ботом попадется на приманку. Если напарников рядом нет, то бот — просто ТРОЛОЛО.
Задачи и подзадачи.
И напоследок, у классических ботов всего два режима — задача основная (идти к цели), задача дополнительная (обходить препятствия). Я не беру в расчет стрельбу. Поскольку эта не задача, а метод.
Если расширить задачи и подзадачи, то бот перестанет быть таким предсказуемым, перестанет быть ботом ;)
P.S.: Реализация всех приведенных примеров в код, это другой вопрос.
P.S 2.: Надеюсь моя методика объяснений всем понятна.
Автор: BrownTrigger
Отличный материал. Спасибо за перевод, очень интересные мысли.