История разработки и жизни одной маленькой игры. Начало

Habrahabr 7

Мне нравится читать подобные статьи, иногда в них удается почерпнуть хорошие идеи, иногда они вдохновляют, а иногда просто приятное пятничное чтиво про таких же разработчиков. Я решил поведать о своем тернистом пути инди разработчика и рассказать о создание своей небольшой игры и поделиться крупинками опыта. Шел 2013 год, я был искушен разработкой игр, я был молод и любил велосипеды… На тот момент у меня уже была одна игра в моем активе, но это было не серьезно. Эта игра была написана с одной целью – довести её до релиза и этой цели она достигла.

Видео игры
Останавливаться на достигнутом я не собирался и хотел сделать игру, в которую будут играть, ну и конечно которая будет приносить деньги.

У меня уже был не плохой опыт в XNA по части 2д, а также в мобильной разработке на платформе Windows Phone. Разработку новой игры я решил начать с изучения Windows Phone Marketplace, на предмет вакантных мест, с подходящим уровнем сложности. Выбор мой пал на игры подобные «Hill Climb Racing». На тот момент – октябрь 2013 года, «Hill Climb Racing» в магазине приложений не было, были аналоги с убогой графикой и очень примитивные. После небольших раздумий, было решено делать игру с похожей механикой «Hill Climb Racing», но с измененным геймплеем в сторону грузоперевозки, игроку нужно перевезти из точки А в то Б некий груз.

Создание подобной игры, требует использование или создание удобного редактора физики. Unity тогда была как-то не на слуху, да и другие игровые движки стоили денег, которых не было. Ну и конечно зачем брать готовые решения, когда можно все сделать самому?!

При этом Windows Phone обновился до 8 версии, да и разработка под WinRT казалась очень привлекательной. Поэтому я решил мигрировать с XNA на Monogame.

План был такой:

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

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

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

Если с физическим движком я определил сразу – им стал Farseer. То вот с GUI под XNA было все намного сложнее, существующие решения оставляли желать лучшего, с одной стороны их было довольно много, а с другой у них у всех были своя куча минусов. В результате я решил написать свою, а за основу взять подходы библиотеки generalhi GPF и XAMLite, основная причина по которой я взялся за это – куча различных наработок, опыт прошлой игры, где все было самописное. В первую очередь, мне было жалко свои труды, и я хотел объединить их в одно целое и продолжил развивать. За пару очень сложных месяцев я получил:

Редактор физики
Система частиц
GUI (на видео вторая версия GUI)
Также я зачем-то ушел в оптимизацию, без какой то особой надобности, весь графический контент я стал объединять в текстурные атласы и там же сжимать в .xnb с возможностью применить DXT сжатие.

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

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

Изначально я хотел делать игровые заезды полностью автогенерируемыми, но совместить красивую картинку и автогенерацию уровней мне не хватило умений. Я пришел к решению, что есть ландшафт, он разделен на блоки, блоки разделены по сложности. При загрузке карты, блоки перемешиваются в рамках заданной сложности. Мы потратили не мало времени, чтобы состыковать все блоки со всеми.

Эскизы первых машин
Эскизы первых блоков
Запускать игру без серверной части я посчитал плохой идей, а основная цель развития игры была в сторону реал-тайм заездов с другими игроками. В качестве базы данных была использована MongoDB, а в качестве транспорта был использован UDP. Был написан свой бинарный протокол общения с сервером. Сервер был максимально заточен на производительность. На момент релиза он отвечал за регистрацию пользователей, за сбор игровых логов о заездах и на основе их формируется рейтинг, за начисление ежедневного бонуса, за начисления и разблокировки игрового функционала.

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

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

В ходе тестирование сервера на ботах, нормальное максимальное время выполнения серверного тика 100мс, в среднем это обработка около 500 пакетов в тик, что позволяет обрабатывать больше 10 000 единовременных подключений.

Весь графический контент рисовался в векторе, а уже после нарезался под разрешение 1280*768 и упаковывался в текстурные атласы. И уже на конечной стадии разработки стало понятно, что мы вышли за в 90мб для устройств WP71 и поэтому пришлось выходить только на WP80. Сделать графический контент под разрешение 800*480 не проблема, но вот все переупаковывать, переписывать ключи, убило бы кучу времени, поэтому решили отказаться от WP71. А в 2014 году процент устройств WP71 был довольно большой.

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

Тернистый путь разработки удалось завершить только в сентябре 2014 года.

Игра вышла в свет на платформе WP8 с 5 ландшафтами, в последствии их количество было доведено до 7. За заезд начисляются монеты, размер полученной прибыли зависит от количества перевезенных камней, от вида камней, от времени прохождение, как далеко были увезены камни и еще нескольких факторов. Так же мы сделали 9 различных машин, которые можно купить за игровую валюту, но их нельзя было как-либо модифицировать, посчитав, что это не нужных функционал, но об этом в следующей статье…

Промо игры
Выводы:

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

дорога ложка к обеду
На конец 2013 года данная игра была востребована, а вот на конец 2014 – уже мало, тк летом 2014 вышел «Hill Climb Racing» и другие игры.

Я конечно получил бесценный опыт, но хотелось немного большего…

Пишите в комментариях каким аспектам стоит уделить больше внимания или вообще рассказать подробно.