Опыт разработки 2D action/RPG в Game Maker

Гифочка кривая пока что, да) 

Здравствуйте! Меня зовут Александр, я ведущий разработчик инди-студии Sempiternal Rain, хочу рассказать о процессе создания нашей новой игры INFIDELITY. Red Sunrise (далее IRS) в движке Game Maker, да и в целом самой программе тоже хочу уделить внимание. Выбор пал на этот движок по простой причине - я уже давно в нем работаю, а переучиваться времени и желания пока что нет.

IRS - пиксельная 2D action/RPG в сеттинге Sovietpunk вдохновленная Hyper Light Drifter про СССР, псионику и внеземной разум. Подробно про игру напишу позже в подсайте "Инди"

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

Топ-3 Steam, ого!
Топ-3 Steam, ого!

Среди этих игр можно отметить - Undertale, Hotline Miami (она сделана на версии движка 2007 года!), Katana Zero, Risk of Rain, Loretta.

Game Maker относительно несложен в изучении, в его основе лежит встроенный язык GML, похожий и на C++, и на Python, но его отличает сильная упрощенность, наряду с широкими возможностями. Несмотря на это он довольно гибкий (хотя для некоторых будет казаться неудобным специфическое ООП движка, тут "классы" из обычного ООП зовутся "объектами", а сами "объекты" из ООП - "экземплярами объектов") и позволяет реализовывать многие идеи.

Простота языка заключается в том, что многие вещи которые нужно делать в обычных языках по типу С++, в Game Maker отсекаются. Например, не нужно присваивать типы данных для переменных(это делается автоматически) и вообще объявлять их заранее, ставить точки с запятой, при объявлении массивов не нужно указывать их размер. В движке зарезервировано множество команд для манипуляции над объектами - измерение расстояния, перемещение и трансформация, рисование на экране текста, проверка нажатий и прочее. Программирование в Game Maker событийно-ориентированное, то есть код срабатывает при выполнении каких-либо триггеров, событий - допустим создался враг и у него в событии "создание" можно прописать количество здоровья.

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

Интерфейс программы и чуть-чуть кода
Интерфейс программы и чуть-чуть кода

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

Противники реализованы через встроенные функции поиска путей, измерения расстояний, проверки столкновения и прочего. Для написания простейшего ИИ самое то. Поведение реализуется через автоматы состояний написанные с помощью switch. Простым языком - у противника есть несколько состояний "покой", "преследование", "бегство", "смерть" и прочее, переключаясь между этими состояниями враги меняют свое поведение в зависимости от ситуации.

Потребовались некоторые знания базовой математики 7-го класса, но и то в целом для понимания самого движка - градусы, система координат, коэффициенты всякие. Базовые вещи)

Пришлось столкнуться с кое-какими "непонятками" движка, который любит вставлять иногда палки в колеса:> Изначально из коробки некоторые детали работают криво и их придется исправлять вручную. Так, сейчас игра при изменении ее разрешения начинает люто искажать пиксели, естественно это исправимо, нужно лишь подумать как это починить.

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

  1. Подходит только для 2D игр. Хоть и в GM есть возможности для создания 3D - они не идут ни в какое сравнение с Unity, UE или Godot;
  2. Сыроватость движка, отсутствие некоторых базовых компонентов, которые приходится реализовывать вручную - освещение, адаптация экрана под разные мониторы, неудобное создание интерфейсов;
  3. Откровенно слабый функционал для создания мультиплеера (но разработчики над этим сейчас работают);
  4. Иногда GM после обновления не загружает проекты сделанные на старых версиях движка. Для таких случаев есть стабильная LTS-версия, получающая только самые важные обновления;
  5. Плохой компилятор игр в HTML5;
  6. Ужасный машинный перевод на русский язык, к примеру слово "Аlarm"(будильник) было переведено как "Аларм", да, транслитом на русский, а слово "Room" переведено как "Рум" :)
  7. Медленное развитие движка.

Но не смотря на это он имеет и множество положительных сторон:

  1. Простота освоения относительно других движков, также в GM есть визуальный скриптинг, хотя писать код в целом более удобно и менее громоздко, но на первых порах освоения программы подойдет;
  2. Для изучения движок полностью бесплатен и платить нужно только за экспорт проекта;
  3. Обширные возможности, позволяющие создать двухмерную игру в любом жанре;
  4. Кроссплатформенность - игры можно экспортировать на Windows, MacOS, Linux, Android, iOS, HTML5 и даже Xbox и PlayStation;
  5. Большая документация, описывающая большинство возможностей программы;
  6. Совместимость с разными сервисами - Steam, Google Play, App Store, Яндекс Игры, GamePush, GameDistribution и прочее;
  7. Поддержка шейдеров.

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

P.S. Прошу вас добавить в желаемое наш проект в Steam, еще раз спасибо!

21
14 комментариев

Смотрел гайды автора на ютубе.Удивился,что он и тут есть :D

3
Ответить

гайды вообще лучшие Х)

2
Ответить

Привееет) Да, это я)

1
Ответить

Очень любопытная статья :)

2
Ответить

Большое спасибо:>

1
Ответить

Топчик

2
Ответить

Благодарю, KEsHa)

Ответить