97

Ensora - опыт разработки игры в GameMaker Studio 2

Всем доброго времени суток!

Давно читаю Пикабу и вот, когда нашелся настоящий повод, решил оформить свой первый пост :)

С 2020 года я занимаюсь разработкой игры под названием "Ensora" - это 2D-шутер с видом сбоку про путешествия на далёкой пустынной планете в поисках еды и ресурсов. Вдохновленный такими проектами как Fallout, The Outer Worlds и This War of Mine, я приступил к делу.

Для работы выбрал как мне показалось самый удобный игровой движок для 2D - GameMaker Studio 2 (GMS 2). В 3D разработку сразу лезть не стал, так как большого опыта за спиной у меня тогда не было. Решил, что лучше брать посильные задачи, чем в погоне за ультра графикой и реализмом бросить дело на полпути.

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

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

1) Прицельная стрельба.

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

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

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

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

2) Мягкая езда на байке.

Здесь я воспользовался встроенной в движок системой физики. Байк создается как три физических тела: корпус и два колеса. Они связываются пружинами, которые в зависимости от моих настроек отражают мягкость подвески. Можно гонять по скалам и не отбить задницу главного героя.

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

3) Инвентарь.

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

Я же не придумал ничего лучше, чем создать ДВЕ сетки 5х4 клеток (как в крестиках-ноликах). В первой сетке я храню название предмета, который там лежит. Во второй сетке - количество этого предмета. И при любом перетягивании лута у меня происходит пересчет двух этих сеток. У ящиков, соответственно, по две такие же сетки 4х4. В игре, разумеется, всё видно так, словно в клетке лежит один объект с таким-то количеством.

Не самое элегантное решение, но оно работает. Что ж...

Для торговли, крафта, улучшений и прочего в игре создано более 50 предметов лута.

4) Загрузка уровней.

Здесь пришлось много импровизировать, поскольку игру я хотел сделать в разрешении FullHD, с большим количеством графики и анимации. Движок GMS 2 лучше подходит для создания пиксель-арт игр или небольших проектов высокого разрешения (хотя при большом желании в нем можно создавать даже 3D игры).

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

Здесь на помощь пришел существующий в GMS 2 инструмент разбивки текстур на группы. Я написал свой скрипт загрузки, а каждой игровой комнаты создал список нужных текстур. При загрузке уровня скрипт сравнивает 2 списка:
- список уже загруженных текстур в память;
- список текстур, которые потребуются в локации, куда пришел игрок.
Проще говоря, проверяется: что сейчас нужно в комнате? Лишнее выгружаем из памяти, нужное догружаем. Мы вернулись на корабль? Догружаем группу "ship". Мы покинули пустыню и она больше не отображается? Убираем из памяти группу "desert".

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

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

Проект в свет я всё еще не выпустил, однако планирую сделать это совсем скоро - в январе 2023 года.

Страница игры в Steam:
https://store.steampowered.com/app/2112210/Ensora/

Если Вам интересно попробовать эту игру - добавляйте её свой список желаемого!
Спасибо за внимание.

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

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

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

0
DELETED
Автор поста оценил этот комментарий

больше и не скажешь !

Иллюстрация к комментарию
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Не узнал мем, нагуглил по картинке, узнал мем, но лучше бы не узнавал))
Окей, тоже мнение.

показать ответы
3
DELETED
Автор поста оценил этот комментарий

Выглядит симаптично. Правда, где-то темновато, где-то странные цвета эффектов...


Планируете сразу в релиз в январе? По ощущениям нужно ещё очень много полировки. Или плейтесты (кем-то кроме автора) уже были и всё в целом ок?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Насчет темноты на видео-ролике я тоже вижу, но это то ли эффект пережимки файла, то ли в видео-ролике что-то. В игре картинка светлее, это точно. Впрочем, перепроверю)

По выпуску планы такие, да. Тестами-полировкой сейчас активно занимаемся, никаких каникул.

Автор поста оценил этот комментарий

Это гибрид Gravity defied с Contra? Соболезную.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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

Соболезнования это по поводу жанра? Дайте хоть в релиз выйти, потом уж вместе погорюем :)

показать ответы
0
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Спасибо.

1
DELETED
Автор поста оценил этот комментарий

Добавил. Поиграю. Жди критики)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Спасибо, ценю любую обратную связь)

1
Автор поста оценил этот комментарий
Молодец! Очень неплохо, тем более с нуля Без опыта. Желаю допилить проект и удачного запуска
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Благодарю за добрые слова!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества