- PVSM.RU - https://www.pvsm.ru -
Здравствуйте. Меня зовут Андрей Власенко. Живу в городе Харьков, Украина. По профессии я разработчик ПО. Работаю на должности CIO в компании ApexTech. Хочу рассказать вам о создании нашей игры «Demolition Lander».
Для начала посмотрите небольшой трейлер, который даст представление о том, что получилось в итоге (кадры из игры начинаются с 50ой секунды).
Нет ничего хуже идеи засевшей в голове. Сначала она просто маячит на задворках сознания, потом по прошествии инкубационного периода заставляет тебя действовать. И так, проработав в Enterprise около 7ми лет я твердо решил, что хочу попробовать себя в игростроении и создать игру.
С момента этого решения прошло немало времени и как-то уж совсем неожиданно в один день идея приобрела конкретные очертания.
За обедом мой друг Саша (CEO в ApexTech) и я обсуждали, какие раньше были игры и во что каждый из нас любил играть. Оба вспомнили классическую игру от Atari – Lunar Lander. В процессе обсуждения я начал рисовать корабль с двумя двигателями на салфетке и, так уж вышло, что эти самые двигатели были не симметричные и смотрели в разные стороны. На наших лицах мелькнула едва заметная улыбка. – Вот оно! Механика из Lunar Lander с кораблями оснащенными двумя двигателя, которые в свою очередь управляются отдельными джойстиками. «Это будет хит!»
В дальнейшем концепция обросла разрушаемыми уровнями и элементами экшена, но об этом далее.
тот самый первый корабль
Начать стоит с того, что в компании решили дать этому проекту зеленый свет, но из людей выделили только меня самого.
Игру мы планировали делать под мобильные устройства, поэтому закономерно я задумался об изначальной мультиплатформенности. Игровой движок выбирали из вариаций cocos2d и Unity. Unity после долгих обсуждений мы отбросили по причине того, что движок этот хорош для 3D, а для работы с 2D он кривоват. Плюс к этому у меня был небольшой опыт работы с cocos2d, и выбор сделали именно в его пользу.
Первый прототип был построен на базе cocos2d Javascript. Плюсы этой технологии следующие:
Минусы оказались не менее весомые:
Другими словами, для полноценной игры необходимо нативно реализовывать все тяжелые и платформенно-зависимые (тот же Game Center, или In-App Purchases) части кода. Протягивать их через Javascript bindings и использовать в общем Javascript коде. Процесс не из быстрых и не из приятных.
первый прототип
Ударившись об эти грабли, позиция была пересмотрена. Решили делать пока версию только под iOS на cocos2d-iphone. Не смотря на название, движок отлично работает как на iPhone, так и на остальных Apple девайсах работающих под управлением iOS.
Физику начали реализовывать используя Chipmunk 2D. У некоторых может возникнуть вопрос – почему не Box2D? Ответ прост, на момент создания первого прототипа, Javascript bindings в cocos2d были реализованы только для Chipmunk. При переходе на нативный cocos2d-iphone, решили оставить как есть, о чем в дальнейшем не пожалели.
Прошли несколько недель разработки. Прототип готов. Игровая механика готова. Все летает, двигатели крутятся, уровни большие. Вот уже кажется, что еще немного и можно в App Store выкладывать. Но играть в эту игру скучно. А это означает одно – Gameplay в игре отсутствует.
Вот элементы игровой механики, которые были реализованы на тот момент:
После коллективного мозгового штурма были запланированы следующие элементы:
Утвердив новый функционал было принято решение расширить команду до 4х человек.
Меня всегда захватывали игры в которых в вашем распоряжении было большое пространство для перемещения без каких-либо ограничений или подгрузок, и я стремился реализовать подобное в Demolition Lander. Уровни в игре получились огромные. Если отрисовать весь уровень, то получится изображение размером 65 536 на 16 384. И это не предел – можно их увеличить до 65 536 на 65 536 без особых потерь производительности, но я все же видел процесс игры, как горизонтальный полет над землей с периодическими исследованиями подземных пещер.
Уровень в игре состоит из следующих элементов:
маска уровня
текстуры почвы, кромки, узора кромки и смешивания всех текстур
tile map неба
в итоге отрисовывается уровень
Алгоритм отрисовки уровня состоит из двух частей – загрузка слоев неба и создание параллакса из них; загрузка текстур земли и инициализация шейдера, который эти текстуры накладывает друг на друга.
Одна из самых эффектных особенностей игры требовала весьма ответственного подхода в реализации. Разрушение поверхности должно происходить быстро, синхронизироваться с границами физического тела уровня и графическим отображением.
Для создания и обновления физических границ земли мы использовали функционал Chipmunk 2D Pro, который сканирует текстуру маски рельефа уровня и создает по ней набор тайлов с линиями границ. В дальнейшем при передвижении корабля по уровню, близлежащие тайлы с линиями пересчитываются, а старые выгружаются из памяти.
Сама деформация исполняется в виде изменения текстуры маски в нужных местах и пересчете тайлов с физическими границами. Графически деформация отображается моментально при отрисовки следующего кадра – это результат того, что и физический движок и шейдер земли используют одну и ту же маску.
включен слой отладки физики
Имея на руках полностью рабочую игру с увлекательной игровой механикой, кажется, что App Store, близок, как никогда. Но уровни с названиями Test1, Test2 и один прямоугольный корабль без какого-либо вменяемого дизайна говорят о другом. Пришло время дизайна и контента.
Созданием контента занялись сами. Типы кораблей, их названия, характеристики, названия планет, количество внутриигровых денег на каждом уровне – все решалось на сессиях очередного мозгового штурма.
А вот с дизайном решили нанять фрилансера. Да не просто фрилансера, а гражданина Индии с выдающимся портфолио, отменным английским и вроде бы здравым рассудком. Люди бывают неожиданно обманчивы. Начиная с того, что человек периодически просто не выходил на связь, заканчивая отвратительным качеством рисунков и недопонимаем элементарных вещей, которых мы хотели от него добиться. При этом модель поведения у человека удивляла постоянством – «OK, sir. No problem. It will be done».
После убитой недели времени с фрилансером расстались и занялись поиском дизайнера в команду на постоянной основе.
Искать дизайнера легче тому, кто сам что-то понимает в дизайне. Мы же таковыми не являлись. Судили по присылаемым портфолио. Нравилось – приглашали, смотрели на человека. Так наткнулись на одного уникального «творца». Его портфолио было изумительное, большое количество красивых качественных рисунков в разных стилях, набросков от руки, 3D моделей. Пригласили, побеседовали, с виду адекватный человек. Вечером коллега рассылает всем ссылку на один из рисунков кандидата. Рисунок не его. Как и 80% остальных из портфолио. Мораль – люди лгут, а Google Images хорошо ищет.
В итоге все же нашли дизайнера, который вполне успешно справился с возлагаемыми задачами и стал незаменимой частью нашей команды.
зенитная установка и черная дыра
взрыв бомбы
Прошло еще пару месяцев. Дизайн и контент готовы. На реальных уровнях игра стала тормозить и периодически вылетать при длительном использовании. Приступили к поискам утечек памяти и оптимизации быстродействия.
Из утечек памяти самым больным местом были блоки и их использование совместно с ARC. На втором месте – неправильное построение графа объектов, а именно strong ссылки на объекты которые содержат друг друга (даже через несколько вложенных объектов).
Оптимизации производительности свелись к одному принципу – рисовать и обсчитывать только объекты в поле зрения корабля и досягаемости бомб.
Пол года разработки. Почти готовая игра. Конец возможности собственного финансирования.
Из оставшегося:
Из запланированного:
Первое – это не фантазировать по поводу сроков разработки. Первоначальные ожидания были вложиться в пару-тройку месяцев.
Второе, сразу искать дизайнера в команду и начинать его часть параллельно со всей разработкой. Это сэкономило бы много времени. И никаких фрилансеров.
Ну и третье – нам стоило показывать игру всем, кого это могло заинтересовать, с самого первого прототипа и до текущего состояния. Это собрало бы определенную базу людей «знающих» и «говорящих» о Demolition Lander к моменту выхода проекта на Kickstarter.
Кампания на Kickstarter заслуживает отдельной статьи, которую, если мне выпадет шанс обязательно напишу.
Если коротко, то основополагающими факторами успеха финансирования являются фанатская база, узнаваемость создателя и/или узнаваемость продукта.
Мы сейчас запустили уже вторую кампанию по сбору средств на Demolition Lander. Первую пришлось отменить в связи провальной PR стратегией.
Что будет со второй – не понятно, но настораживающая тенденция есть.
Автор: Andrew_VS
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka/56098
Ссылки в тексте:
[1] Источник: http://habrahabr.ru/post/214177/
Нажмите здесь для печати.