Space Pirate: От ТЗ до игры для джема за 6 дней

Иногда так выходит, что работая над одним проектом для какого-либо задания, вы замечаете отличную возможность пропихнуть этот же проект в другую стезю, немного улучшив его. Так, например, многие игры для гейм-джемов выходят в полноценный релиз. И именно так Space Pirate попал в фестиваль Keep Calm Do Games!

Небольшое вступление: Space Pirate, изначально, это тестовое задание, созданное для заявки на участие в проекте Gamebox. Gamebox — амбициозный проект от Skillbox для своих студентов игрового направления. В его рамках ученики с разным набором талантов соберутся в группы и начнут усердно трудиться сообща над своими собственными идеями и различными техническими заданиями от крутых студий.

Узнать о курсах Skillbox можно тут — https://skillbox.ru/. Я сам уже несколько месяцев учусь на курсе по Разработке игр на Unreal Engine 4. Несмотря на то, что у меня уже есть опыт работы с движком, курс и его преподаватели мне отлично помогают поддерживать «хватку» и узнавать что-то новое.

Так при чём тут космический пират?

Space Pirate — это небольшой экшен, который предлагает выжить в опасной ситуации, когда на тебя из ниоткуда набрасываются полчища противников.

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

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

Правила игры просты - не столкнись с космо-копом и набери как можно больше очков. Тривиально, но затягивает!
Правила игры просты - не столкнись с космо-копом и набери как можно больше очков. Тривиально, но затягивает!

Основа, база, начало!

После выбора технологий, которые помогут мне реализовать идею…

Unreal Engine 4 — Игровой движок, здесь мы собираем игру

Blender3D - 3Д редактор, тут мы готовим и редактируем модели для игры

Adobe Photoshop 2015 — 2Д редактор, для текстур, картинок и прочего

Audacity - редактор аудио, здесь можно отредактировать музыку и подготовить эффекты

MagicaVoxel — крутой редактор воксель-моделей. Это типа 3Д пиксель-арт. Быстро и красиво!

Spacescape - редактор космических скайбоксов. Поможет заменить небо на космос!

Visual Studio 2019IDE для редактирования С++ кода. Поможет настроить геймплей

Blueprints - визуальный скриптинг, встроенный в Unreal Engine 4. С их помощью и будем создавать логику игры

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

…нужно было реализовать базовые механики нашего персонажа. В Space Pirate это передвижение и стрельба.

Полёт и повороты

Как подобает космическому кораблю (в нереалистичном игровом пространстве!), корабль нашего пирата должен плавно поворачивать, набирать и снижать скорость.

Вот так логика движения вперёд и поворотов выглядит в движке на Blueprints:

А вот так уже выглядит полёт:

Ракеты

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

Красная ракета с тепловым следом позади
Красная ракета с тепловым следом позади

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

Противники и подсчёт очков

Одной настройки игрока для «базы» игры недостаточно. Нужна хоть какая-то цель, какой-то челлендж, вызов игроку. Поэтому миру космо-пирату нужны космо-копы, которые будут на него охотиться. Если пират заденет одного из копов, то дни пирата сочтены. Но за каждую прожитую секунду игрок получит +1 к счетчику очков. А за уничтоженного копа +10 или больше, в зависимости какого копа он убил.

Космо-коп, версия ЮНИТ-28. История умалчивает о других 27-ми версиях.
Космо-коп, версия ЮНИТ-28. История умалчивает о других 27-ми версиях.

Чтобы сделать игру интересней, нужны различные виды противников. Для этого я создал противника «родителя» и задал ему переменные, которые буду редактировать, в зависимости от типа противника. Вот как выглядит настройка параметров космо-копа:

Настроить можно как здоровье и скорость копа, так и параметры его внешнего вида.
Настроить можно как здоровье и скорость копа, так и параметры его внешнего вида.

Передвижение противников осуществляется по линейной траектории вперёд, без какого-либо ускорения.

Развиваем кор-геймплей

Space Pirate построена вокруг полёта и стрельбы по космо-копам. Чтобы это дело было не супер-однообразно я создал систему появления противников. Как система держит игрока в тонусе:

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

Благодаря системе появления противников в игре появился прогресс. На первых порах появляется не так много противников и игроку дано время подготовиться:

Далее, игроку предстоит сразиться уже с внушительным количеством противников:

Виды копов

Знакомьтесь: Обычный Коп, Большой Коп, Быстрый Коп, Стреляющий Коп-Армеец, Стреляющий Босс-Коп. Последний появляется на 500 и на 1000 очков.
Знакомьтесь: Обычный Коп, Большой Коп, Быстрый Коп, Стреляющий Коп-Армеец, Стреляющий Босс-Коп. Последний появляется на 500 и на 1000 очков.

Смерть космо-пирата

При столкновении с копом пират умирает. Взрывается, предлагая игроку сразиться с копами ещё раз. Для пущей эффектности этого драматичного момента я использовал разрушаемую модель, тряску камеры и поочередно выскакивающие буквы словосочетания GAME OVER. Прямо как в Metal Gear Solid!

Подбираемые прокачки корабля

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

Некоторые выпадают часто и не несут за собой огромного эффекта, как например Ракета, которая просто даёт +1 к боезапасу. Но в то же время есть редкие улучшение, например Плазменный щит-таран, который, грубо говоря, даёт кораблю 3 дополнительные жизни!

Space Pirate: От ТЗ до игры для джема за 6 дней

Слева-направо:

  1. Ракета - даёт +1 к боезапасу
  2. Перегрузка космического двигателя — разгоняет движок корабля, пират передвигается и ускоряется быстрее.
  3. Триплет - на небольшое время вы стреляете двумя дополнительными ракетами на определённый градус влево и вправо. Дополнительные ракеты не заимствуют боеприпасы.
  4. Аимбот - ракеты могут наводиться на цель и преследовать её. Отлично работает в комбинации с Триплетом.
  5. Плазменный щит-таран — перезаряжает щиты вашего корабля. Вы можете выдержать до 3-ёх столкновений. Каждое столкновение моментально убивает любого противника.

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

// Called every frame void APickup::Tick(float DeltaTime) { Super::Tick(DeltaTime); // Если игрок не мёртв - каждый кадр двигать улучшение на ВекторНаправления, умноженный на Скорость if (!Cast<AGamebox_SpacePiratesGameModeBase>(GetWorld()->GetAuthGameMode())->bIsPlayerDead) { AddActorWorldOffset(MovementVector * Speed); } }

Финальные штрихи

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

В последние дни работы над игрой мне пришла в голову довольно забавная идея — сделать роботизированный голос, который будет всячески комментировать действия игрока и подбадривать его. Так родился Z.A.K. — бортовой ИИ Космо-пирата. Вот одна из его фраз, когда вы проигрываете:

Uhmm.. how about another one?

Z.A.K., Бортовой ИИ корабля космо-пирата

Вообще, Z.A.K. это мой голос, записанный и отредактированный в Audacity. Вы можете сделать так же, или даже лучше, просто дублируя дорожку вашей речи. Впоследствии измените высоту тона у одной дорожки в минус 12 раз, а у другой — в минус 5. Или просто поиграйте со значениями и подберите свой робо-голос!

Заключение: подготовка игры к джему!

Для того, чтобы игра попала на стол жюри KeepCalmDoGames, надо сделать пару формальностей. Во-первых — создать страничку игры на сайте itch.io. Так вышло, что Space Pirate стала моей первой игрой на этом сайте, так что одно жизненное достижение выполнено!

Во-вторых — подготовить минутное видео с геймплеем игры.

Ну и в-третьих — рассказать об игре на DTF! Если вы это читаете, значит всё прошло успешно!

А по-сему, предлагаю посмотреть на несколько минут геймплея Space Pirate:

И опробовать игру самостоятельно! Скачать игру можно прямиком с её страницы на itch.io: https://sidebail.itch.io/spacepirate. Игра сделана только для ПК на Windows!

При попытке установить игру Windows Defender может заявить, что он доблестно "защитил" ваш ПК от недоброжелательного софта. Всё это конечно бред, Space Pirate не имеет в себе никаких вирусов, можете даже проверить файл другим антивирусом. Если же вы супер-аккуратный пользователь, то для вас я оставил архив с игрой на том же сайте. Просто скачайте его, распакуйте и запустите файл с расширением .exe

Если поиграете, то обязательно поделитесь своим рекордом в комментариях!

1652
Мой рекорд! Попробуйте одолеть его!

А с вами был…

Владимир В. В.
Геймдев-энтузиаст, геймплей-программист, геймер

Если хотите познакомиться получше, то меня можно найти на:

Огромное спасибо!

Было ли интересно читать?
Да, круто!
Хррррр.. а? Что? Я просто уснул, тягомотина какая-то..
44
3 комментария

За такую трудоёмкую работу, однозначно респект и уважение. Вот бы в Юнити научиться еще. А то я сам пока осваиваю Blender.

1
Ответить

Ооо, спасибо! Юнити отличный вариант для старта, заодно язык программирования С# подучишь. Удачи с блендером! 

1
Ответить