Блог ☯

четверг, 12 октября 2017 г.

Как создать врагов в игре и какие они бывают?

Сегодня я расскажу как можно создать врагов в игре которую вы делайте в Гейм Мейкер [GameMaker], хотя среда для создания игр вторична так-как я описываю основные принципы которые работают для игр сделанных с помощью любых программ.

Так-же поговорим про врагов в играх вообще, расскажу какие они бывают и по каким принципам можно их классифицировать.

Как создать врагов в игре и какие они бывают?

Тема очень базовая, но я её так и не покрыл в своём YouTube курсе "Основы создания игр". Для начала я расскажу какие бывают враги, какие у них есть основные характеристики, чем отличаются враги в разных игровых жанрах ну и дам примеры. Говорю я про аркады, RPG, TDS и почти все типы одиночных игр кроме стратегий и RTS.



Главные характеристики врагов


Во многих играх у врагов есть всего несколько основных определяющих характеристик:

  • Урон или атака;
  • Скорость атаки, сколько секунд проходит до следующей атаки;
  • Как совокупность - ДПС, урон в секунду;
  • Дальность атаки;
  • Жизни (ХП);
  • Броня. Усложнение механики которое нужно почти всегда только для RPG;
  • Скорость движение - бег;
  • Уникальные особенности и способности.

Вот на самом деле и всё. Почти в любой игре у врагов есть вот такие характеристики и лишь их изменение, а так-же изменение внешнего вида (графического спрайта) отличает одного врага от другого. Часто разработчики вообще ленятся и тупо перекрашивают спрайты дабы создать видимость наличия большого количества врагов.

Лично я раньше любил для своих Инди-Игр описывать характеристики оружия и врагов заранее когда писал простой дизайн-документ.



Какие бывают враги в играх?


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

  • Очень слабый - начальный враг ближнего боя. Маленький урон, медленный, мало ХП. Эти враги служат для обучения и втягивания в игровой процесс, для набора первого опыта и получения первых уровней. Обычно таких врагов много;
  • Стандартный враг ближнего боя. Тут может быть миллион вариаций, но основной принцип именно в том, что это следующая ступень после начального врага. Обычно у него больше жизней, скорость может быть чуть медленнее, а урон почти всегда выше. Эти враги противостоят игроку довольно долго и геймдизайнер регулирует только их численность в зависимости от уровня, разбавляя их другими;
  • Стрелок. Враг который стреляет в героя. В некоторых играх почти все враги будут именно стрелками, но чаще стрелок это некий отдельный враг так-как при большом их количестве игроку бывает сложно с ними справляться. Мало ХП, скорость движения бывает разная, но основная суть что стрелок стреляет. Ими часто разбавляют любых других врагов и они могут быть на многих уровнях. Иногда именно стрелки будут первыми и начальными врагами, это для некоторых типов игр;
  • Жирный и медленный враг. Очень много ХП, высокий урон, медленная скорость движения. Любопытно ведь что какую игру вы не возьмёте в пример, почти всегда там есть такие враги. Часто это как-бы промежуточные боссы. Обычно если такой добирается до игрока то он наносит ему очень серьезный урон;
  • Быстрый враг ближнего боя с высоким уроном. Часто делают и таких врагов. ХП средние, так-как они появляются не на самых первых уровнях, очень высокий урон. Либо они бьют очень медленно, но очень сильно, либо урон у них средний или низкий, но бьют очень быстро. Главное что урон в секунду выходит очень большой и что у них крайне высокая скорость движения. Герою нужно убивать их издалека и не подпускать к себе. Эти враги круто выполняют роль пугал в мрачных и страшных играх, выскакивая из скрытности или из-за углов;
  • Снайпер. Это условный тип врагов в играх по аналогии со стрелком, но отличие в повышенной дальности, медленной скорости стрельбы, но с огромным уроном. Это может быть снайпер с луком, снайпер со снайперской винтовкой или с посохом, неважно. Тут всё зависит от вселенной в которой происходит ваша игра. Такими врагами обычно разбавляют сильных и медленных монстров, либо их ставят на больших и открытых картах в местах куда герою сложно добраться. Часто предполагается что их герой будет убивать так-же с помощью дальнобойного оружия, либо нужно с ними быстро сблизиться и тогда их уже гораздо легче уничтожить;
  • Враг поддержки / маг / спавнер - это всё не совсем категория и понятное дело что невозможно уж прям совсем всех врагов впихнуть в парочку групп, но отчасти врагами являются и спавнеры. Тут могут быть комбинации, типа стрелка который еще и спавнер, или стрелка - мага, либо врага который лечит врагов рядом. Тут уже всё зависит от способностей и конкретной ситуации.
  • Босс. Понятно что это за враги и они могут быть очень разные с кучей способностей, но главная суть босса это очень много жизней (либо брони), чтобы сражение с ним было относительно долгим и игрок его запомнил. 

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

Конечно бывают и другие, бывают быстрые камикадзе, но это тоже как-бы подразделение быстрых врагов ближнего боя с высоким ДПС.

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



Примеры врагов


Я покажу примеры типов врагов которые я описал как из своих игр, так и из популярных.

Слабый - начальный враг ближнего боя. Из популярных игр мы можем брать вообще почти любую и там они будут, например Diablo II.

Как создать врагов в игре и какие они бывают?

Один из первых врагов в игре - падший

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

Механики могут быть разными, но принципы остаются. Это первый враг и у него мало жизней (ХП), слабый урон, но таких врагов много. Вся фишка в том, что игрок сражается с ними вначале в качестве обучения и для набора опыта. Так-же это условное "мясо".

Правда в Диабло характеристики очень сильно растут если возрастает уровень сложности, но суть не меняется так-как характеристики героя тоже сильно растут.

Если смотреть на ту-же Диабло, то далее тот-же самый враг будет уже с посохом (шаман) и это пример типичного стрелка, которого помещают в кучу слабых врагов ближнего боя чтобы придать этой банде больше эффективности.

В Диабло шаманы будут еще и воскрешать падших, можно придумывать очень много подобных способностей и их сейчас нет смысла описывать, но суть-то в том, что Шаман будет типичным стрелком вот и всё.

На самом деле способности и особенности врагов крайне важны и могут сильно определять игру, но в общем виде нет возможности всё это описать, хотя ниже я укажу основные типы способностей врагов (и героя) которые уже давно стали классикой.

В качестве моего примера базового врага я покажу корабль из Space Rush:

Как создать врагов в игре и какие они бывают?

Мой YouTube канал про создание игр в GameMaker - Econ Dude содержит не одно видео про эту игру, но в целом вы тут и сами всё видите.

Спрайт и основные характеристики: ХП, урон, скорость атаки и скорость движения. Мы посмотрим на то, как создать врагов в игре GameMaker подробнее чуть позже, но суть та-же. Мало жизней, слабый урон, довольно редкие атаки и средняя скорость, может даже быстрая. Главное запускать таких врагов пачками в самом начале.


Кроме того есть и видео про спавны где я рассказываю как их делать, довольно полезно посмотреть и его в рамках этой темы.

По той-же механике и логике (спавнов, точек, зданий, областей) которые плодят монстров делается и скорость атаки врагов.

Это тот-же самый таймер (alarm) который срабатывает каждые Х секунд создавая объект (пулю) либо откатывая КД на удар в ближнем бою. Так-же если вы делайте врагов в GameMaker то гляньте и другие видео на ютуб канале (либо почитайте статьи в блоге, раздел - создание игр) где уже есть почти все ответы на технические вопросы.

Если вы думайте что вся эта логика врагов работает только для TDS (Top Down Shooter) и RPG, то вы ошибаетесь. Это работает и для обычных 3D шутеров, которые я вам не рекомендую пытаться делать в рамках первых проектов.

Как создать врагов в игре и какие они бывают?

Shotgun guy (Doom)

Из-за механики шутеров (которая со времён первого Doom принципиально не так уж и сильно изменилась) множество врагов это стрелки, но и тут, даже в древней первой части, у парня с дробовиком есть в руках тот-же дробовик и у врага те-же характеристики.

30 жизней, 9 - 45 общего урона если попадают все дробинки (вблизи), есть скорость движения, которая в подобных играх с узкими пространствами не так важна, но есть и скорость реакции, что куда важнее, а так-же скорость перезарядки.

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

В качестве компенсации делайте его время реакции, точность и перезарядку хуже чем у героя, но в целом оружие то-же самое.

Мой пример тут это игра Lonely Dude которую я делал в рамках конкурса GameDev.ru:



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

Характеристики их оружия 1 к 1 как у героя:

Как создать врагов в игре и какие они бывают?

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



Конкурс как пример


Один раз я затевал конкурс среди своих подписчиков про который есть видео и серия статей. Так вот, в этом конкурсе я ставил условие - 3 разных врага:

Как создать врагов в игре и какие они бывают?

Девушка старшненькая, но уж как умею... Мои рисунки тут, если интересно

Так вот, я оценивал то, как участники конкурса сделали врагов и условие было такое, что враги должны принципиально отличаться друг от друга.

Есть три больших поста в блоге где я разбираю игры участников и там я рассказываю что имеется в виду под этим и как сделать так, чтобы враги отличались.

В конкурсе я старался донести то, что враги должны быть принципиально разными и те, кто делал их таковыми, получали больше всего баллов.

Вот очень короткое видео где я разбираю одну игру:



Вот тут разработчик показал классическую модель (как и почти все участники). Слабый враг ближнего боя, стрелок и некий жирный моб.



Способности врагов 


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

Первое, хотя это обычно делается только в RPG, это типы урона. Если делать к примеру физический урон, урон от взрыва и урон от яда (например), то у вас уже огромное количество вариаций в плане создания врагов. Можно не только делать разные виды брони для героя, но и разную устойчивость у врагов.

В пример я опять приведу свою аркаду к которой я выкладывал пак спрайтов:

Как создать врагов в игре и какие они бывают?

В моей игре есть несколько разных эффектов, но мы посмотрим на два, это урон по области и отравление (назвал коррозия так-как отравление корабля как-то стрёмно).

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

Вот такая банальная схема с несколькими типами урона может придать врагам большую глубину сделав игровой процесс интереснее. Если вы вкачались в отравление, вы легко убиваете одних врагов, но с другими будут проблемы и т.д.

Всё это работает не только для ролевых игр (хотя тут не РПГ, а аркада с элементами РПГ). Иногда что-то подобное есть в других жанрах.

Если мы вспомним Team Fortress 2 то там есть множество любопытных эффектов:

  • Отравление;
  • Поджог;
  • Урон по области;
  • Критический выстрел;
  • Увёртливость;
  • Лечение;
  • Регенерация;
  • Вампиризм;
  • Усиление;
  • Оглушение;
  • Удар сзади.

И еще куча всего. Таким образом добавив способностей и эффектов в шутер создатели добились прекрасного эффекта, хотя это и не одиночная игра, но ничего не мешает делать всё это почти в любом жанре. Почти все это делают и в MMORPG.

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


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

Добавляя в игру элемент точности и разброса (рандома) вы делайте её более непредсказуемой. Иногда это интереснее, иногда нет. В онлайн играх это убивает влияние скила и играет на руку новичкам, но в одиночных это не так плохо.



Враги как часть атмосферы игры


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

Как и оружие, а так-же локации.

Дам два примера. Первый это одна из моих любимых игр - Готика (Gothic 1-2), но схожая ситуация с сериями Fallout и The Elders Scrolls.

Как создать врагов в игре и какие они бывают?

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

Вообще я считаю Gothic 2 шедервов в плане геймдизайна и дизайна уровней.

Когда вы первый раз шли за барьер к замку где паладины держали оборону от орков, этот момент всем врезался в память. От орков нужно было убегать, даже если каким-то чудом вы побеждали одного, могли прибежать и другие.

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

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

Крайне крутые и атмосферные враги были так-же в Half Life 2. Там они являлись частью истории игрового мира и атмосферы, но запомнились они почти всем.

Я упоминал этот момент в своём длинном видео про дизайн уровней:



Однако важно не только это, важен так-же и баланс награды за убийство врагов.



Награда за убийство врагов и общий баланс


Плохим балансом и левел-дизайном можно испортить любую игру.

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

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

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

В видео про дизайн уровней я довольно много про это рассказываю.

Именно поэтому нужны базовые слабые враги вначале и многократное тестирование игр.



Как сделать врагов в Гейм Мейкер (GameMaker)?


Ну вот мы и добрались до технических моментов. Их я уже много раз показывал в своих видео, но тут кратко повторю как делаются враги в GMS.

  • Создание нового объекта;
  • Рисование спрайта;
  • Присвоение основных характеристик (ХП, Урон, скорость и т.д.);
  • Движение;
  • Атака;
  • Смерть и награда.

Вот в принципе все этапы. Создание нового объекта это вообще первичная вещь которую мы все умеем делать. Там нужно нажать буквально пару кнопок и я не вижу смысла это описывать. Про рисование спрайта тоже не могу многое рассказать так-как сам не самый большой специалист в графике, но можете посмотреть какие-то мои видео где я рисую, может быть поможет вам освоить какие-то очень базовые вещи:


На самом деле у меня есть уже тонна видео где я рисую, к примеру есть длинное видео где я с нуля делаю игру про танки. Там я создаю врагов и рассказываю про это:


Это видео очень длинное, но там как раз всё что вам нужно

Далее идёт присвоение врагу основных характеристик. Тут есть много методов, лично я делаю это через локальные переменные.

Вставляем в событие (event) создания (create) код:

Как создать врагов в игре и какие они бывают?

Вот пример кода:

hp=100 // жизни (ХП)
dmg=5 // урон
hit_speed=2 // скорость атаки
speed=3 // скорость движения

Далее нам нужно будет вытаскивать от сюда эти переменные и использовать их. Переменные тут локальные и могут быть проблемы например с уроном, его иногда проще прописывать в пуле (снаряде) чем тут. С жизнями я думаю всё понятно, при контакте с пулей героя мы их вычитаем и если они меньше 0 то убиваем врага:

hp-=global.hero_dmg // вычитаем урон героя 
if hp<=0 then instance_destroy()

Это прописывается либо при контакте пули героя с врагом (не для пули, а для моба - other). Либо можно прописать постоянную проверку здоровья у врага, но это не хорошо.

Атака делается при контакте с героем (коллизия), дистанционная делается с помощью создания пули либо через счётчик (alarm), либо через step (шаги).

В любом случае считается КД на атаку.

Про скорость атаки я уже писал и делал видео (аналог справнов). А про движение тоже есть отдельная статья и видео: Основы создания игр: движение - game maker

Движение зависит от типа игры, если это движение к герою то обычно делаем через step и следование (move_towards_point) с избеганием препятствий.

Для более простых игр всё еще легче.

При смерти либо вы делайте отдельные объекты опыта и денег которые нужно собирать (это более казуальный вариант), либо сразу прибавляете это герою.

Вот такая статья на сегодня. Если какие-то вопросы, спрашивайте тут в комментах, либо вступайте в паблик ВК про создание игр и спрашивайте там в обсуждении, ответим.

Всем удачи в создании игр!