Поведение врагов в 2D играх. Конструктор разработчика

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

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

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

Предупреждаем также, что эта статья касается врагов в 2D-пространстве. Некоторые из советов применимы к 3D-врагам, но различия в размерах и направлениях движения между 2 и 3D игровыми пространствами намного больше, чем кажется на первый взгляд.

как придумать врага для игры
Отличный дизайн и размещение врага на примере ретро-игры

Поведение врага – Состояния и триггеры

Поведение врага можно охарактеризовать тремя основными пунктами:

  • Движение – как враги двигаются
  • Качества – их сущность
  • Возможности – что они делают

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

Ниже вы найдете списки атрибутов для каждой из категорий. Противник получается интереснее, если смешивать и соединять атрибуты в уникальные состояния, а затем дальше углублять их с помощью ряда триггеров. Самые распространенные враги имеют не более двух состояний с одним триггером, но Боссы отличается тем, что часто имеют четыре и более состояний с множеством триггеров. С такими боссами тяжело бороться (см. например Axiom Verge).

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

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

Пояснения закончились, переходим прямо к атрибутам.

Движение

Stationary (неподвижный) – враг вообще не двигается.

Walker (пешеход) – враг ходит или бежит по земле. Пример: Гумба в Супер Марио.

Riser (растишка) – враг может увеличиться в высоту (часто, может расти из ниоткуда). Примеры: цветы-пираньи из Super Mario и грязевой человек из Castlevania.

Ducker (ныряльщик) – враг может уменьшиться в высоту (в том числе, уходя в пол). Пример: цветы-пираньи из Super Mario.

Faller (падающий) – враг падает с потолка на землю. Обычно эти враги – капли кислоты или слизи.

Jumper (прыгун) – враг может прыгать или отскакивать от поверхности. Некоторые прыгают вперед, некоторые вверх-вниз. Примеры: пружины в Donkey Kong, Tweeter в Super Mario 2, Ninji в Super Mario 2.

Floater (летун) – враг может плавать, летать или левитировать. Пример: летучие мыши в Castlevania.

Sticky (клейкий) – враг приклеивается к стенам и потолку. Спарк из Super Mario 2.

Waver (волновик) – враг движется по синусоидальной кривой. Пример: голова медузы из Castlevania.

Rotator (вращатель) – враг вращается вокруг неподвижной точки. Иногда фиксированная точка перемещается или может перемещаться в соответствии с любым другим атрибутом движения в этом списке. Кроме того, направление вращения может измениться. Пример: Rotodisc Super Mario 3, реактивные снаряды из Batman от Sunsoft (обратите внимание, что центром их вращения является игрок).

Swinger (раскачивающийся) – враг качается у неподвижной точки. Пример: махающие ножи из Castlevania.

Pacer (шагающий туда-сюда) – враг меняет направление движения в ответ на триггер (например, доходит до края платформы). Пример: Красный Купа в Super Mario.

Follower (преследователь) – враг следует за игроком (часто используется в играх с видом сверху). Пример: жучки из Zelda 3.

Roamer (бродяга) – враг меняет направлении движения на случайной основе. Пример: Октороки из Legend of Zelda.

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

Teleporter (телепортер) – враг может телепортироваться из одного места в другое. Пример: Визробы из Zelda.

Dasher (двигающийся с ускорением) – в определенном направлении враг движется со скоростью больше, чем его нормальная. Пример: змеи-веревки из Zelda.

Ponger (прыгун) – враг отскакивает от стен по прямой линии, вопреки законам физики. Пример: пузыри из Zelda 2.

Geobound (геометрический) – враг физически привязан к геометрии уровня, иногда проявляется как геометрия уровня. Примеры: спайки из Megaman, цветы-пираньи из Super Mario, белый дракон из Castlevania.

Tethered (привязанный) – враг привязан к геометрии уровня цепью или веревкой. Пример: Чейн-чомпы из Super Mario.

Swooper (налетчик) – парящий враг, который налетает, часто (но не всегда) возвращаясь в исходное положение). Пример: Летучие мыши в Castlevania, свуперы в Super Mario, злобное солнце в Super Mario 3.

Mirror (зеркальный) – враг подражает движениям игрока. Иногда враг движется в противоположном по отношению к игроку направлении. Пример: Гории из Zelda 3.

Качества

GeoIgnore (игнорирование) – враг игнорирует особенности геометрии уровня и может проходить сквозь твердые преграды. Примеры: ротодиск из Super Mario 3, различные летающие существа.

GeoDestroyer (разрушение – враг может уничтожить блоки геометрии уровня. Примеры: Боузер в Super Mario 3, Бо-бомб.

Shielder (защита) – атаки игрока не защитываются при ударе с определенного направления или угла, или если они попадают в определенное место на враге. Пример: рыцари из Zelda 2.

Reflector (отражение) – отражает попавшие в него атаки дальнего боя.

Damager (повреждение) – игрок получает повреждения при столкновении с ним. Самое распространенное качество.

Redamager (обратный удар) – игрок сам получает урон при ударе во врага. Пример: электрическая слизь (buzz blob) в Zelda: Link to the Past.

Secret spot (секретная точка) – урон может быть нанесен только при попадании в определенно место на «теле» врага. Противоположность Защищенного. Этим качеством обладают многие боссы.

Invulnerable (неуязвимость) – врага нельзя убить или нанести ему ущерб. Примеры: в основном элементы геометрии уровня (шипы, падающие блоки, огонь), но также и существа наподобие Братьев Бу в Super Mario 3.

Reanimator (реанимация или воскресение) – враг оживает после смерти. Примеры: скелеты в Castlevania и Super Mario.

Regenerator (регенерация) – здоровье врага с течением времени восстанавливается.

Secret Weakness (секретная уязвимость) – враг уязвим по отношению к определенному типу атак (огонь, магия, стрелы и т.д.) Пример: ящер Додонго в Zelda (уязвим для бомб).
Hard to Hit (трудно попасть) – в этих противников очень сложно попасть в обычных диапазонах атаки игрока. Они часто бывают очень быстрыми или очень маленькими. Пример: шипастая слизь Мью в Zelda 2.

Segmented (сегментирование) – эти враги составлены из небольших отдельных предметов или существ. Каждый отдельный сегмент часто может быть уничтожен независимо, враги как правило (но не всегда) напоминают змею. Пример: Манхандла в Zelda, кактус Покей в Super Mario.

Bumper (отталкивание) – эти враги действуют по принципу бамперов в пинболе, быстро отталкивая игрока (или другие объекты). Пример: жучки из Zelda 3.

GeoMimic (подражание) – враги обладают свойствами геометрии уровня. Чаще всего это означает, что игрок может стоять на них. Примеры: большинство врагов в Mario 2, сигма в Megaman X, бык Катоблепас в Castlevania.

Alarm (сигнализация) – враг или объект, который заставляет реагировать другого противника или объект.

Meta-vulnerable (мета-уязвимость) – врага можно победить с помощью действий, выходящих за рамки обычного игрового процесса: поменяв настройки в игре, купив оружие в приложении, рассказав про игру в социальной сети, играя в положении вверх ногами с акселерометром/компасом, играя в хорошо освещенной комнате, создавая шум в микрофон и т.д. Пример: заключенный Вполголос (Pol’s Voice) в японской версии Zelda.

Враги из серии игр Марио
Враги из серии игр Марио

Возможности

Melee Attack (атака ближнего боя) – враг атакует в непосредственной близости от героя.

Emitter (излучение) – враг «испускает» другого врага или снаряд. Этот тип очень похож на Метателя. Основное различие в том, что Метатели бросают объект, который они подобрали или сделали, в то время как у Излучателя бесконечное количество снарядов. Примеры: Билл-пушки из Super Mario 3, Лакиту в Super Mario, многие враги с огнестрельным оружием, спаунеры из Gauntlet.

Thrower (бросок) – враг может бросаться чем-либо (предметами, игроком, другим врагом). Часто, но не обязательно, сочетается с возможностью Носильщика. Примеры: скелеты, которые кидают бочки в Castlevania, Жук Бастера в Super Mario 3.

Grower (увеличение) – враг может расти в размерах.

Shrinker (уменьшение) – враг может уменьшаться в размерах.

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

Carrier (перенос предметов) – враг может нести другого врага, предмет или героя. Это достаточно общая классификация, она включает в себя врагов, которые подбирают игрока, «съедают» и снова выплевывает его, или же захватывает и ограничивает движение игрока. Пример: хозяин стен в Zelda.

Splitter (раскалывание на части) – враг может разбиться на несколько других врагов, при этом уничтожив себя. Примеры: слизь в Rogue Legacy, Вире и Бири в Legend of Zelda.

Cloner (клонирование) – враг может создать копию себя. Чаще всего копия является точной, но иногда добавляются небольшие изменения (меньше здоровья, выше скорость и т.д.). Главный враг не разрушается при клонировании. Пример: Гини в Zelda.

Morpher (морфинг) – враг превращается во врага другого типа. Иногда это временно, а иногда он превращается в нескольких врагов другого типа.

Sapper (истощение сил) – враг может привести к изменению статистики игрока (уменьшение скорости, уменьшение высоты или невозможность прыжка, невозможность атаки и т. д.). Эти эффекты могут быть как постоянными, так и временными.

Latcher (запирание способностей) – враг также может изменить статистику игрока и его способности, но делает это только привязавшись к игроку. Пример: мини-гумбы в Mario 3, Лайк Лайки в Zelda.

Hider (прятание) – враг может скрыться от игрока. Как правило, враг скрыт до тех пор, пока игрок не окажется на заданном расстоянии или наоборот, противник скрывается, когда игрок приближается. Пример: цветы-пираньи в Mario.

Exploder (взрыв) – враг может уничтожить себя и нанести повреждения за счет взрыва. Пример: мины во многих играх, Бо-бомбы в Mario.

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

Charger (задержка атаки) – перед тем, как переключиться на другой вид поведения, враги ненадолго останавливаются. Пример: волки в Castlevania (останавливаются перед тм, как броситься на игрока).

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

Триггеры

Random (случайный) – враг случайным образом переключается в новое состояние.

Timed (время) – враг переключится в новое состояние через определенный промежуток времени.

Time Cycle (суточный ритм) – враг переключает состояния в зависимости от времени суток. Например, спит ночью, активен в течение дня.

Distance Traveled (пройденное расстояние) – враг прошел определенное расстояние.

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

Post-Ability (последующее действие) – враг только что совершил действие, например, враг стреляет в базуку, затем скрывается за элементами геометрии уровня.

Occupies Volume (занимает объем) – враг переместился в определенный объем пространства. Это может быть зона воды или же невидимое глазом пространство, обозначающее границы города.

Stat Value (значение статистики) – враг меняет поведение в зависимости от значений своей статистики или статистики игрока. Пример: здоровье врага падает ниже 10%, и он взрывается; игрок имеет более 500% очков магии, и враг старается высосать их.

Line of Sight (линия зрения) – враг может (или должен) лично «видеть» игрока, другого врага или объект.

Scripted Event (событие в скрипте) – запрограммированное событие заставляет врага изменить поведение.

Someone Else (кто-то еще) – триггер срабатывает из-за действий другого врага. Пример: Здоровье одного из врагов падает ниже 20%, поэтому на персонажа набрасываются другие враги.

Death (смерть) – здоровье врага истощено до 0% или он умирает каким-то еще путем.

Переменные поведения врага

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

  • Скорость движения
  • Высота прыжка
  • Длина и амплитуда у синусоиды прыжка
  • Диапазон атаки
  • Радиус повреждения при взрыве
  • Размер врага
  • Расстояние преследования героя
  • ..и так далее

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

Повеселитесь!

Вы получили классный список, в котором можно смешивать и сочетать элементы. Он похож на конструктор Lego для монстров! Вы также можете воспользоваться небольшим интерактивным сервисом от создателя этого списка (доступно на английском), в котором можно конструировать поведении врагов и даже создавать его на основе генератора случайных сочетаний. Не стесняйтесь экспериментировать с ним и получайте удовольствие! Ведь это и есть самое главное при разработке игр.

Большое спасибо за sharing, ребята! Ваша помощь бесценна,— блогу без этого не обойтись.
Если Вам понравилась статья — пошарьте, пожалуйста, в Facebook или Google+
  • Vostrugin

    Хорошая статья. Месяц назад читал в оригинале. Помогает, когда идеи вот прям закончились 🙂

    • Если не секрет, каких интересных врагов удалось получить?)

      • Vostrugin

        Я использовал статью косвенно, мне нужны были, да и сейчас нужны, идеи ловушек для 2D пространства. Не помню на какие конкретно ловушки натолкнула статья, но с того момента появились: ловушка-пила, которая перемещается по полу от стены к стене; настенный стреломёт, с ограниченным кол-вом стрел; живой кактус, который неподвижен и может стрелять только в спину врага.

        • Стреломет звучит интересно, он становится «ступенькой» на стене после того, как расстреляет все стрелы?

          • Не совсем, проще, он крепится на стену. Ваша идея крутая, нужно записать 🙂
            В игре есть гости, которых нужно прогонять ловушками, ходят они примитивно по полу из комнаты в комнату.
            Я бы показал гифкой, но не в курсе можно ли тут вставлять ссылки )

          • Снизу слева есть мааленькая иконочка с картинкой — по идее можно вставить и гифку, не пробовал. А кстати, попробую котика какого загрузить. По идее —
            работает 🙂 https://uploads.disquscdn.com/images/d8ab4f9e5d6c123fec935510011289db0ed6f054cfb078078ed0498d15469305.gif

          • Котик есть. Кнопку видел, засомневался, что сайт гифку съест 🙂
            На гифке как раз пила и стреломёт.
            https://uploads.disquscdn.com/images/c2a16478b844253387ee412666a3520b3d1f17fd193ac55a9dc6fbc442afba8f.gif

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

          • Вроде не писал. В моём случае это смесь tower defence с головоломкой.
            В дом к игроку вламываются «гости», которые тырят всё самое ценное. Цель — расставить правильно ловушки, чтобы максимально быстро и с минимальными материальными потерями выпроводить гостей. Вот старое геймплейное видео, так будет понятнее. https://youtu.be/ufALIBxRxfY?t=8s

          • Арт симпатичный) Сами рисуете? Геймплейно не очень понял зачем мебель расставлять, почему не генерировать комнаты уже с мебелью на уровнях, а расставлять только ловушки..

          • Это в повествование на видео косячок. На обычных уровнях игрок расставляет только ловушки и взаимодействует с предустановленными механизмами.
            Отдельно у игрока есть убежище, где он за золото может обустраивать дом. Декорации для убежища открываются за звёзды (получаемые за уровни). Декорации дают очки роскоши, которые открывают спец уровни.
            За арт спасибо 🙂 Первый этап (5 уровней) жена рисовала. Остальное уже рисовал я, а она была консультантом 🙂

          • Жена — художница, муж — программист, это же можно студию сделать 🙂 Семья геймз

  • Ori

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

    • Можно вместе повспоминать врагов из других игр или попридумывать новых: я на форуме теммку создал http://coremission.net/topic/obsujdenie-dizaina-vragov-v-2d-igrah/

      • Хотел отписаться там, но что-то не приходит письмо с подтверждением 🙁

        • Грустно, в спаме точно нет? Бесплатный почтовый сервер с движком сайта видимо не всегда хорошо работает. А какой логин или почту искать, может я руками активирую?

          • В спаме нет. Пытался через некоторое время получить пароль через «Забыли пароль», но тоже пусто. Логин Vostrugin, почта max.vostrugin@gmail.com. Спасибо 🙂

          • Получилось только установить какой-то и я послал его на почту) Надеюсь получиться залогиниться и обсудить врагов! 🙂

  • Miheev Michail

    Суховато же, годится далеко не всюду. Если сильно доработать, то можно получить что-то вроде «списка всех возможных сценариев», сценаристы поймут. Но сервис интересный)

  • Rihard

    Доброго времени суток, в наставники возьмете?)

    • Привет, а чему учить будете)?

      • Rihard

        Ой извините пожалуйста , я выразился противоположно)) правильному.
        Хотел Вам написать в ученики возьмете?)чтобы вы наставником были, буду учить все что вы скажете.
        Изучаю основы JS)) Чайник короче я. Но желания есть.
        https://learn.javascript.ru/js что скажете про этот ресурс , обучаюсь по нему.

        • Привет! Учить не могу, могу подсказать и кое-что посоветовать, если что-то спросите 🙂 Лучше всего на форуме: coremission.net/forums (могут быть проблемы с авторизацией, отправка сообщений барахлит — пишите сюда тогда: https://goo.gl/R7CGvo)

  • Из современных игр, если не все, то большинство поведений есть в binding of isaac

  • Zakoldun

    Ссылки на оригинал статьи не приводите?