SGDK. Студия для создания платформеров.

Предисловие.

На протяжении некоторого времени, я, на игровом движке Godot, разрабатываю студию для простого создания игр под Sega Genesis, средствами SGDK. Данная студия, по сути, является продвинутым генератором кода.

Проекты созданные на студии.

Тестовый платформер сделанный в студии. Есть несколько уровней и босс в конце.

Босс из игры

Скачать с itch.io

Установка студии.

  1. Скачайте студию с Google Drive, и разархивируйте её.
  2. В папке со студией, переместите файлы эмулятора BlastEm, в папку Emulators/BlastEm
  3. Установите SGDK, если еще этого не сделали.
  4. Готово, осталось запустить её.

Знакомимся со студией.

При запуске вас встретит такое окошко (версия студии может отличаться).

Справа, при нажатии на кнопку Support my work, вы можете поддержать меня монеткой на Boosty. Полученные деньги пойдут, в первую очередь, на поддержание сайта. Т.к. сайт в год кушает по 3360 рублей, а доход с рекламы составляет 5р в день, т.е. чтобы выйти в 0, нужен доход 9.3р в день. Ладно, продолжим.

Нажмите кнопку New project, и создайте проект.

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

Изучаем интерфейс.

Рассмотрим левую часть интерфейса.

Видим оранжевые кнопки, отвечающие за меню:

  • Entity Definitions — редактор типов entity (объектов на уровне, которые могут взаимодействовать с игроком, а могут и не взаимодействовать).
  • Bullet Definitions — редактор типов bullet (пулек, которые могут взаимодействовать с entity)
  • Project Settings — настройки проекта
  • Global Variables — здесь редактируются глобальные переменные.

И синие, отвечающие за текущий слой:

  • Entity — для взаимодействия с entity (добавления, удаления, настройке).
  • Positions — на этом слое указываются позиции, данные позиции можно использовать в коде entity, например, для ограничения движения.
  • Collision — на этом слое рисуется карта коллизии, т.е. можно указать где можно пройти, а где нельзя.

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

В нем вы можете:

  • Перемещать уровень на ЛКМ
  • Редактировать параметры уровня на ПКМ
  • Перемещаться по миру на колесико мыши

Теперь, нажмите ПКМ по уровню.

Разберем меню:

  • Delete Level — удаляет уровень (не работает, если это единственный уровень)
  • Add Level — создает новый уровень.
  • Change Bga — меняет BG_A слой уровня, слева можно выбрать между Map mode и Image mode, либо вообще не загружать BG_A, нажав на крест.
  • Change Bgb — тоже самое, но для BG_B.
  • Messsage Packs — открывает меню, в котором прописываются сообщения (их можно вывести на экран, но об этом позже).
  • Local Variables — открывает меню, в котором прописываются локальные переменные для уровня.

Разбор примера

Рассмотрим работу в студии на примере тестового платформера. Сперва:

  1. Скачайте проект платформера с github.
  2. Поместите его по пути StudioType/SGDK/Projects, и назовите PlatformerChallenge
  3. Загрузите данный проект в студии.
Загрузка проекта в студии

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

Слой Entity

Попробуйте расставить entity на уровне. Для этого:

  • Выберите слой entity
  • Выберите entity в списке ниже
  • Для добавления, нажимайте ЛКМ, для удаления ПКМ.

При нажатии на entity, справа открывается меню, где вы можете редактировать параметры entity.

Entity Definitions.

Теперь, откройте Entity Definitions.

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

Сейчас я коротко объясню что к чему:

  • Зеленый список отвечает за добавление (+), удаление entity (X). Имя entity указывается в Entity Name.
  • При выборе entity с зеленого списка, появляется желтый cписок, в котором прописываются поля (или переменные), конкретного типа entity, их также можно удалить (X), изменить, и добавить (+).
  • При выборе поля из желтого списка, появляются настройки поля в синем блоке. В нем, вы можете установить значение поля.

Ранее, когда я говорил о том что entity могут взаимодействовать с игроком а могут и не делать этого, я говорил о переключателе Add trigger, который добавляет trigger к entity.

Trigger — это невидимый квадрат с которым игрок может взаимодействовать. Действие на игрока зависит от типа триггера, и значения его переменных.

Также, в версии 1.9 beta появился Complex Entity Editor (название временное). Данная кнопка открывает меню, в котором вы можете в один entity вложить 10 других. Данное меню совсем новое и следовательно забагованное, пока, лучше его не используйте.

Bullet Definitions.

Тот же Entity Definitions, только для пулек. Пули могут взаимодействовать с entity, но не взаимодействуют с игроком.

Project Settings.

Здесь задаются:

  • Размер тайла карты коллизии (Collision Cell Size) — в большинстве случаев, лучше ставьте 16×16 т.к. это уменьшить вес карты коллизии в 2 раза, сэкономив место в роме.
  • Run from current level — при сборке, запускает игру с текущего уровня (с того на котором в последний момент была мышка).
  • Add EntityMerged Slots — указывает дополнительное количество слотов под entity (на случай если одно entity захочет создать другое).
  • Add BulletMerged Slots — то же самое что и Add EntityMerged Slots, только для пулек.
  • Turn on gates — при стыковке одного уровня с другим, на месте их соприкосновения генерируются ворота. Данные ворота позволяют вам переходить между уровнями в игре, с сохранением координат относительно пола.
  • Show trigger rects — показывает квадраты триггеров и пулек в игре
  • Entity Load Optimization — указывает способ оптимизации загрузки entity. Смена оптимизации загрузки entity требует изменения кода entity, имейте это ввиду.

Global Variables.

Коротко об этом меню:

  • Type — отвечает за тип переменной
  • Name — указывает имя переменной
  • Default Value — значение, которое присваивается переменной.

Слой Positions.

Слева, выберите слой Positions. Для установки позиций используйте ЛКМ, для удаления ПКМ.

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

Слой Collision.

Выберите слой Collision.

В этом режиме вы можете рисовать карту коллизий ЛКМ, и на ПКМ убирать тайлы. Также, стрелкой отмечен список, в котором вы можете выбрать нужный тайл.

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

Разбираем шаблоны (code_template)

В папке с проектом откройте папку code_template (путь_до_студии/StudioType/SGDK/Projects/PlatformerChallenge/code_template). Вы увидите следующие папки.

Рассмотрим каждую из них:

  • addNewEntity — хранит шаблоны добавления entity на сцену в игре.
  • addNewEntityBullet — тот же самый addNewEntity, но для пулек.
  • collisionMapTypes — здесь вы можете добавлять типы тайлов в карту коллизий, для этого закиньте png в соответствующую папку (8×8 или 16×16).
  • customScripts — хранит скрипты которые могут быть активированы триггером, каждый кадр, перед загрузкой уровня и после.
  • inc — заменяет inc папку в SGDK проекте (тот что находится в папке build), своими файлами.
  • showEntity — шаблон entity, важнейшая часть среди этих папок, отвечает за логику entity.
  • showEntityBullet — то же самое что и showEntity, но для пулек
  • src — перезаписывает папку src в SGDK проекте.
  • triggerType — хранит типы триггеров и их логику.

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

И меняйте код движка. Только не удаляйте подобного типа комментарии.

//$entityDefaultConsts$

На них ориентируется студия при генерации кода.

Заключение.

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

Итоговый результат.

Пожалуйста отключи блокировщик рекламы, или внеси сайт в белый список!

Please disable your adblocker or whitelist this site!