Разработка игры. Путь от идеи на салфетке до кампании на Kickstarter

в 9:45, , рубрики: chipmunk, cocos2d, game development, Kickstarter, разработка, метки: , , ,

Здравствуйте. Меня зовут Андрей Власенко. Живу в городе Харьков, Украина. По профессии я разработчик ПО. Работаю на должности CIO в компании ApexTech. Хочу рассказать вам о создании нашей игры «Demolition Lander».

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


Рождение идеи

Нет ничего хуже идеи засевшей в голове. Сначала она просто маячит на задворках сознания, потом по прошествии инкубационного периода заставляет тебя действовать. И так, проработав в Enterprise около 7ми лет я твердо решил, что хочу попробовать себя в игростроении и создать игру.
С момента этого решения прошло немало времени и как-то уж совсем неожиданно в один день идея приобрела конкретные очертания.
За обедом мой друг Саша (CEO в ApexTech) и я обсуждали, какие раньше были игры и во что каждый из нас любил играть. Оба вспомнили классическую игру от Atari – Lunar Lander. В процессе обсуждения я начал рисовать корабль с двумя двигателями на салфетке и, так уж вышло, что эти самые двигатели были не симметричные и смотрели в разные стороны. На наших лицах мелькнула едва заметная улыбка. – Вот оно! Механика из Lunar Lander с кораблями оснащенными двумя двигателя, которые в свою очередь управляются отдельными джойстиками. «Это будет хит!»

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

Разработка игры. Путь от идеи на салфетке до кампании на Kickstarter
тот самый первый корабль

Первый прототип. Мультиплатформенность. Выбор движка. Первые заблуждения

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

Игру мы планировали делать под мобильные устройства, поэтому закономерно я задумался об изначальной мультиплатформенности. Игровой движок выбирали из вариаций cocos2d и Unity. Unity после долгих обсуждений мы отбросили по причине того, что движок этот хорош для 3D, а для работы с 2D он кривоват. Плюс к этому у меня был небольшой опыт работы с cocos2d, и выбор сделали именно в его пользу.
Первый прототип был построен на базе cocos2d Javascript. Плюсы этой технологии следующие:

  • код на Javascript
  • один и тот же код работает практически на всех платформах, включая браузеры с поддержкой html5

Минусы оказались не менее весомые:

  • как бы не заверяли разработчики движка – работает он медленно по сравнению с нативными вариантами
  • реализация платформенно-зависимого функционала довольно запутанна и крива

Другими словами, для полноценной игры необходимо нативно реализовывать все тяжелые и платформенно-зависимые (тот же Game Center, или In-App Purchases) части кода. Протягивать их через Javascript bindings и использовать в общем Javascript коде. Процесс не из быстрых и не из приятных.

Разработка игры. Путь от идеи на салфетке до кампании на Kickstarter
первый прототип

Ударившись об эти грабли, позиция была пересмотрена. Решили делать пока версию только под iOS на cocos2d-iphone. Не смотря на название, движок отлично работает как на iPhone, так и на остальных Apple девайсах работающих под управлением iOS.

Физику начали реализовывать используя Chipmunk 2D. У некоторых может возникнуть вопрос – почему не Box2D? Ответ прост, на момент создания первого прототипа, Javascript bindings в cocos2d были реализованы только для Chipmunk. При переходе на нативный cocos2d-iphone, решили оставить как есть, о чем в дальнейшем не пожалели.

Gameplay. А есть ли он?

Прошли несколько недель разработки. Прототип готов. Игровая механика готова. Все летает, двигатели крутятся, уровни большие. Вот уже кажется, что еще немного и можно в App Store выкладывать. Но играть в эту игру скучно. А это означает одно – Gameplay в игре отсутствует.
Вот элементы игровой механики, которые были реализованы на тот момент:

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

После коллективного мозгового штурма были запланированы следующие элементы:

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

Утвердив новый функционал было принято решение расширить команду до 4х человек.

Размеры уровня

Меня всегда захватывали игры в которых в вашем распоряжении было большое пространство для перемещения без каких-либо ограничений или подгрузок, и я стремился реализовать подобное в Demolition Lander. Уровни в игре получились огромные. Если отрисовать весь уровень, то получится изображение размером 65 536 на 16 384. И это не предел – можно их увеличить до 65 536 на 65 536 без особых потерь производительности, но я все же видел процесс игры, как горизонтальный полет над землей с периодическими исследованиями подземных пещер.
Уровень в игре состоит из следующих элементов:

  • маска уровня – greyscale текстура рельефа размером 2048 на 512 (которая, при наложении увеличивается в 32 раза)
  • текстуры почвы, кромки, узора кромки и текстура для смешивания всех текстур вместе с наложением на растянутую маску
  • tile map с текстурами неба и звезд

Разработка игры. Путь от идеи на салфетке до кампании на Kickstarter
маска уровня

Разработка игры. Путь от идеи на салфетке до кампании на Kickstarter
текстуры почвы, кромки, узора кромки и смешивания всех текстур

Разработка игры. Путь от идеи на салфетке до кампании на Kickstarter
tile map неба

Разработка игры. Путь от идеи на салфетке до кампании на Kickstarter
в итоге отрисовывается уровень

Алгоритм отрисовки уровня состоит из двух частей – загрузка слоев неба и создание параллакса из них; загрузка текстур земли и инициализация шейдера, который эти текстуры накладывает друг на друга.

Реализация разрушаемой поверхности земли

Одна из самых эффектных особенностей игры требовала весьма ответственного подхода в реализации. Разрушение поверхности должно происходить быстро, синхронизироваться с границами физического тела уровня и графическим отображением.
Для создания и обновления физических границ земли мы использовали функционал Chipmunk 2D Pro, который сканирует текстуру маски рельефа уровня и создает по ней набор тайлов с линиями границ. В дальнейшем при передвижении корабля по уровню, близлежащие тайлы с линиями пересчитываются, а старые выгружаются из памяти.
Сама деформация исполняется в виде изменения текстуры маски в нужных местах и пересчете тайлов с физическими границами. Графически деформация отображается моментально при отрисовки следующего кадра – это результат того, что и физический движок и шейдер земли используют одну и ту же маску.

Разработка игры. Путь от идеи на салфетке до кампании на Kickstarter
включен слой отладки физики

Игра готова? – Нет

Имея на руках полностью рабочую игру с увлекательной игровой механикой, кажется, что App Store, близок, как никогда. Но уровни с названиями Test1, Test2 и один прямоугольный корабль без какого-либо вменяемого дизайна говорят о другом. Пришло время дизайна и контента.

Созданием контента занялись сами. Типы кораблей, их названия, характеристики, названия планет, количество внутриигровых денег на каждом уровне – все решалось на сессиях очередного мозгового штурма.
А вот с дизайном решили нанять фрилансера. Да не просто фрилансера, а гражданина Индии с выдающимся портфолио, отменным английским и вроде бы здравым рассудком. Люди бывают неожиданно обманчивы. Начиная с того, что человек периодически просто не выходил на связь, заканчивая отвратительным качеством рисунков и недопонимаем элементарных вещей, которых мы хотели от него добиться. При этом модель поведения у человека удивляла постоянством – «OK, sir. No problem. It will be done».

Пример работы

Разработка игры. Путь от идеи на салфетке до кампании на Kickstarter
одна из «лучших» его работ

После убитой недели времени с фрилансером расстались и занялись поиском дизайнера в команду на постоянной основе.
Искать дизайнера легче тому, кто сам что-то понимает в дизайне. Мы же таковыми не являлись. Судили по присылаемым портфолио. Нравилось – приглашали, смотрели на человека. Так наткнулись на одного уникального «творца». Его портфолио было изумительное, большое количество красивых качественных рисунков в разных стилях, набросков от руки, 3D моделей. Пригласили, побеседовали, с виду адекватный человек. Вечером коллега рассылает всем ссылку на один из рисунков кандидата. Рисунок не его. Как и 80% остальных из портфолио. Мораль – люди лгут, а Google Images хорошо ищет.

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

Разработка игры. Путь от идеи на салфетке до кампании на Kickstarter
зенитная установка и черная дыра

Разработка игры. Путь от идеи на салфетке до кампании на Kickstarter
взрыв бомбы

Оптимизация и утечки памяти

Прошло еще пару месяцев. Дизайн и контент готовы. На реальных уровнях игра стала тормозить и периодически вылетать при длительном использовании. Приступили к поискам утечек памяти и оптимизации быстродействия.
Из утечек памяти самым больным местом были блоки и их использование совместно с ARC. На втором месте – неправильное построение графа объектов, а именно strong ссылки на объекты которые содержат друг друга (даже через несколько вложенных объектов).
Оптимизации производительности свелись к одному принципу – рисовать и обсчитывать только объекты в поле зрения корабля и досягаемости бомб.

Итог. Готовность – 90%

Пол года разработки. Почти готовая игра. Конец возможности собственного финансирования.
Из оставшегося:

  • арт на некоторых планетах / уровнях
  • доработка звука и музыки
  • оптимизация для старых Apple устройств
  • тестирование и еще раз тестирование

Из запланированного:

  • мультиплеер
  • больше типов оружия
  • больше планет и уровней
  • порт на мобильные платформы, Ouya, PC и MAC

Что можно было сделать лучше

Первое – это не фантазировать по поводу сроков разработки. Первоначальные ожидания были вложиться в пару-тройку месяцев.
Второе, сразу искать дизайнера в команду и начинать его часть параллельно со всей разработкой. Это сэкономило бы много времени. И никаких фрилансеров.
Ну и третье – нам стоило показывать игру всем, кого это могло заинтересовать, с самого первого прототипа и до текущего состояния. Это собрало бы определенную базу людей «знающих» и «говорящих» о Demolition Lander к моменту выхода проекта на Kickstarter.

Кампания на Kickstarter

Кампания на Kickstarter заслуживает отдельной статьи, которую, если мне выпадет шанс обязательно напишу.
Если коротко, то основополагающими факторами успеха финансирования являются фанатская база, узнаваемость создателя и/или узнаваемость продукта.
Мы сейчас запустили уже вторую кампанию по сбору средств на Demolition Lander. Первую пришлось отменить в связи провальной PR стратегией.

Что будет со второй – не понятно, но настораживающая тенденция есть.

Автор: Andrew_VS

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js