Шел 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, основная причина по которой я взялся за это – куча различных наработок, опыт прошлой игры, где все было самописное. В первую очередь, мне было жалко свои труды, и я хотел объединить их в одно целое и продолжил развивать. За пару очень сложных месяцев я получил:
Также я зачем-то ушел в оптимизацию, без какой то особой надобности, весь графический контент я стал объединять в текстурные атласы и там же сжимать в .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» и другие игры.
Я конечно получил бесценный опыт, но хотелось немного большего…
Пишите в комментариях каким аспектам стоит уделить больше внимания или вообще рассказать подробно.
Вторая часть — История разработки и жизни одной маленькой игры. Релиз
Комментарии (17)
engune
16.06.2017 22:21А как насчет обратной совместимости в Windows Phone 10? Игра нормально работает, собранная под 8-ю версию? Я тоже делаю свой движок, уже довольно много всего реализовано, но кроссплатформенный — пока ios & android. Вот как раз планирую сделать поддержку Windows Phone. Какой на текущий момент результат по скачиванию? Отбилось затраченное или вышли на 0?
dampirik
17.06.2017 16:39Из прямых затрат был только художник и то половина, а также различные активности для продвижения, их я отбил и даже в плюсе, но если оценить мои трудозатраты, то нет…
По поводу совместимости. Если приложение написано под wp71, то на wp10 могут (и то не факт) возникать проблемы с разрешениями. Если под wp81, то на wp10 все хорошо.
На текущий момент в игре в районе 1к уникумов в день. Сейчас на Wp мало новых устройств выходит, те в основном это старые пользователи. В 2014 году году был пик в 15к уникумов в день.
Mycolaos
17.06.2017 12:25Интересно было бы увидеть более подробные данные о публикации, скачивании и продвижении.
- Дата выхода (сентябрь 2014, полагаю?)
- Реклама до выхода, во время и после
- Статистика скачиваний в первые дни, первый месяц, каждый год.
- Сколько активных пользователей сегодня.
- Что либо ещё, что может быть интересно по поводу скачиваний или раскрутки.
dampirik
17.06.2017 16:42Спасибо за цели на, что сделать акцент.
Я собираюсь сделать небольшой цикл статей по игре и её жизни, как раз вторая часть и будет про релиз, я её планирую на следующей неделе опубликовать…
kally
17.06.2017 16:58Мой такой комментарий наверное для Вас ой как не первый, и все же я спрошу. Можно ли сделать игру после освоения одного только php?.. В планы входит javascript.
Или для игр особые языки?TheOleg
17.06.2017 17:29На php игры это что-то вроде Комбатса или Территории старых. С джаваскриптом можно допилить до Двара или подобного.
kally
17.06.2017 17:51Я так поняла, что это по сути фермы? Иногда без анимации, иногда с минимумом анимации, да?
TheOleg
17.06.2017 18:11+1Неа, даже фермы это уже или флеш или очень много джаваскрипта.
PHP — для обработки входящих данных, обработка и работка с базой и вывод одной странички. Раньше были популярны браузерные игры на php и простом js, когда весь интерфейс был как, грубо говоря, текстовая страница с картинками.
И PHP хватало, чтобы «показали страницу с инвентарём — игрок нажал надеть штаны — в базе надели штаны — выдали новую страницу и надетыми штанами».
Чтобы делать те же фермы или просто более сложные игры, берут js или flash, через него делается весь интерфейс, анимации, действия и всё всё. Роль PHP в таких играх это, например, получить запрос «купи морковку» и вернуть ответ «морковка куплена», без картинок и прочего.
Wild_ButcheR
22.06.2017 09:36Игры в процессе разработки могут просто потерять тренд или морально устареть. Не легко все это.
dimkss
Эскизы офигенны. Не думали на основе именно эскизов сделать графику?
dampirik
Если честно даже не думали… стиль был выбран изначально.
Видел несколько проектов с похожей рисовкой, если честно не очень пошли, в статике смотрится хорошо, но в динамике не очень. ИМХО
kostus1974
эти рисунки должны анимироваться, как в мультипликации. была (и есть, наверное) такая школа, когда кадры намеренно выполняются «движущимися» штрихами. как пластилин, только штрихами на бумаге.
вот тогда всё смотрелось бы хорошо. наверное )
dimkss
Может запилить сверху шейдер, который будет штихи рисовать?
Правда, боюсь, если эти штрихи геренировать случайно, изображение будет очень сильно мельтешить.
Как вариант — разбить изображение на отдельные штрихи, и их уже чуть-чуть смещать по одиночке во время движения. Но, блин, тогда телефон всю эту радость может не потянуть…
kostus1974
если чистая динамика, то это уже всё надо так рисовать — подвижными векторами, путями.
может проще именно мультипликацию сделать? делают же игры на базе съёмок пластилина. здесь статья была про это из нескольких частей. ничем не отличается от рисованных мультиков.
dampirik
мне кажется это будет интересно смотреться, но это будет такой труд…