Преамбула
Привет! Сегодня я раскажу вам про свой опыт написания игры для мобильных устройств. Немножко о себе: мне 24 года, имею средний опыт программирования под Android. Начал этим заниматься еще с первых версий Android'а, написал несколько простеньких программок, которые поддерживали меня все это время на плаву и давали возможность не искать работу, а так же одну маленькую игру с очень грустной историей (речь не о ней).
Несколько лет назад я решил доказать себе что способен на что-то большее. Захотелось написать то, чем можно было бы гордиться, что можно было бы долго развивать, поддерживать и портировать на разные платформы. Так сказать свое детище. Наверное у многих есть такая мечта. Поскольку я с детства увлекался созданием игр, то и выбор пал именно на игру. Первая моя поделка была игрой в стиле дум, где надо было отстреливать с двустволки летающие головы учительницы математики.
Сразу скажу, что разрабатывалась игра не все это время, частенько я забивал на нее на достаточно длительное время. Но борьба внутри себя не позволила остановиться на пол пути.
Идея
Если уж пишем свой сокровенный проект, то и идея должна быть соответствующая. Если это игра, то это должен быть не клон. Хотелось что-то уникальное, но между тем и не слишком сложное. На тот момент я уже поубавил амбиции и понимал, что создать качественный конкурентноспособный продукт в одиночку весьма сложно.
Выбор жанра пал на runner/endless, наверное потому, что в то время я играл в Doodle Jump. Идея пришла спонтанно, уже даже не вспомню при каких обстоятельствах. Главный герой — шагающая пружинка (да, такая как американская Slinky). Пружинка должна была шагать по ступенькам или платформам, какой конкретно должен быть геймплей и сеттинг я тогда еще не представлял. Стояла задача написать прототип такой пружинки, поэтому я поспешил заказать себе настоящую Slinky американского производства и изучить ее в живую.
Выбор движка
После изучения пружинки в живую, я начал думать как можно это написать. В принципе, вариантов было не много: писать свою математическую модель для симуляции или использовать физический движок. Поскольку я не гений математики, физики и программирования, я выбрал физический движок. Выбор игрового движка изначально пал на Corona по многим причинам — это мультиплатформенность, Lua, Box2D, большое комьюнити и количество разнообразных библиотек.
Первые прототипы пружинки были ужасны. Она была очень корявая, прыгала не правильно и расходовала почти все ресурсы тогдашних мобильных процессоров (если кому интересно, у меня даже есть видео ранних прототипов). Уже тогда я столкнулся с большим ограничением Corona — онлайн билды. Дело в том, что вы можете запускать написанный Lua код моментально на эмуляторе, но если нужно запустить на устройстве — нужно отправлять код на сервер и ждать на выходе готовый APK файл, затем закидывать его на телефон, устанавливать, запускать. Поскольку мне частенько надо было тестировать производительность на телефоне, приходилось делать онлайн билды. Это был ад. Забегая на перед, скажу что физ. модель пружинки тщательно полировалась на протяжении двух лет, поэтому дальше вести разработку на Corona я не мог.
Альтернатива была найдена достаточно быстро — Gideros. У него есть как симулятор для PC, Mac, Linux так и для Android, iOS. Устанавливая симулятор (плеер) на телефон вы можете передавать код по WiFi и тут же его запускать. Очень удобно. После портирования кода на Gideros я заметил еще один его плюс — производительность. Прототип стал бегать быстрее. Точные причины этого мне не известны. Скорее всего это более прямые руки разработчиков этого движка. За все время его использования я нашел и немало косяков, но они не так значительны. Кстати, недавно разработчики Gideros пообещали сделать его Open Source, так что всем советую обратить на него внимание.
Геймплей
Это наверное самая болезненная часть разработки. Придумать новый, хороший геймплей для игры очень сложно. За это время я успел не раз пожалеть о том, что не решился написать очередной клон какой-то популярной игрушки. Больше всего времени в моем случае ушло не на написание кода, а на придумывание/тестирование геймплея. Вариантов было очень много и разных. Иногда я не знал что выбрать. Посоветоваться с друзьями часто не самая хорошая идея, хоть и помогли они мне не мало. Именно с этим связаны мои длительные паузы в написании игры, часто меня посещала депрессия от неспособности придумать что-то путевое.
Еще один важный момент — управление. Здесь я тоже перепробовал все возможные варианты, в итоге остановился на самом, как мне кажется, простом, который не ломает геймплей.
Какой геймплей получился в итоге можете посудить сами. Игра на первый взгляд не далеко ушла от Doodle Jump-а и ему подобных (наверное из-за наличия платформ), но геймплей все же сильно отличается. В первую очередь главным персонажем — пружинкой, обладающей физикой, со всем вытекающим влиянием на геймплей. На моей памяти это единственный раннер/джампер с физикой (если не считать столкновение дудла с платформой физикой).
В общей сложности геймплей получился довольно простой (простите за каламбур), но не для широкой аудитории, а на скилл. Чем дольше вы будете играть — тем больше начнете набирать очков не используя всякие там апдейты и инн-аппы (хотя, признаю, они тоже есть). В конечном итоге, судить о своем геймплее мне очень сложно, посколько я им жил последние два года, и за это время он мне казался от ужасного до гениального. Поскольку скачек и отзывов у меня еще очень мало, прошу вас написать, каков он по вашему мнению. Для меня это очень важно.
Графика и звуки
Времена, когда студенты писали за ночь на коленке игру не имея бюджета и потом получали неплохой выхлоп уже давно прошли. Я это отлично понимал, поэтому для графики и звуков/музыки нанял фрилансеров. На графику ушло приблизительно три месяца, на звуки/музыка три недели. Результатом работы я доволен. Это не вершина искусства, но выглядит на сегодняшний день не плохо. Художник был знакомый, опыта до этого в геймдеве не имел. Но я считаю мне с ним повезло, у него талант и хорошее будущее. Больше всего мы с художником старались над фоном, поскольку события игры развиваются в космосе, мы создали пять очень длинных и красивых фонов, которые плавно прокручиваются по мере приближения пружинки к планете (вот так вот). От себя я добавил партиклы, которые еще более украсили игру. Надеюсь, симпатичная графика привлечет больше женской аудитории, чем немного сбалансирует общую аудиторию игры, любящую игры на скилл.
Большим недостатком графической составляющей в игре я считаю интерфейс, он слишком устаревший и примитивный, совершенно не соответствует сегодняшним стандартам. Это моя вина, я слишком поздно обратил на это внимание, а в очередной раз откладывать релиз не хотел. В планы на будущее входит переписать интерфейс.
Если интересно, бюджет на графику и звуки/музыку ~ $2200.
Монетизация
Тоже очень важный этап разработки. Если не сказать важнейший. Изначально я возомнил себе что пишу мега игру, 100%-ый хит и покоритель топов и без проблем найду себе издателя, а уж он будет заботиться монетизацией. Очень быстро пыл остыл, игрой не заинтересовался никто из более чем 20 издателей. Точнее один заинтересовался — финны из Fingersoft, но через пару писем они просто перестали мне отвечать. Создалось впечатление, что издатели хотят готовый хит на тарелочке, а рисковать не хочет никто.
Перечитав кучу статей про монетизацию я пришел к выводу что лучше баннера ничего не придумаешь, но многие советовали баннер + инн-аппы, причем уточняя, что монетизировать игру на инн-аппах нужно уметь. Перечитав кучу статей про инн-аппы я понял что так и есть, это целое искусство, плюс нужны неимеверные бюджеты на покупку трафика чтоб монетизировать так, как это делают монстры индустрии.
Все же, я решил их добавить, почему бы и нет? Но поскольку я не только разработчик, но и игрок, я отлично понимал какое же это зло, и дабы создать дух честного соревнования в игре, я постарался найти максимальный баланс, чтоб внутренние покупки в лучшем случае сокращали время накопления звездочек, а для того, чтоб поставить рекорд по прежнему нужен был скилл. Если не считать одноразовые бусты — основной товар в игре это разные пружинки (вид и способности, бонусы).
Из возможных баннеров я выбрал полноэкранный баннер от AdMob. Кстати, при любой внутренней покупке баннер отключается. О своих результатах я могу написать позже, если будут желающие узнать.
Технические сложности
Их было предостаточно.
Самая основная проблема всегда была низкая производительность. Главный персонаж — пружинка состоит из большого количества физических обьектов и джоинтов. Это создает большую нагрузку на процессор. Сколько я не старался как-то упростить эту модель, идеально работающей была только определенная конфигурация. Но за время написания игры прогресс не стоял на месте, и сейчас уже на рынок выходят 8-ядерные мобильные процессоры. Это, конечно не значит что играть можно только на них, но минимальной производительностью, необходимой для того, чтоб получать удовольствие от игры, а не плеваться в экран, обладает девайс Nexus S (например). Если с пружинкой я ничего поделать не мог, то мог сделать остальной игровой код максимально быстрым, насколько это вообще было возможно. Мне пришлось досконально изучить Lua, и я оптимизировал код где только мог. Но самый большой толчек в производительности дало использование LuaJIT (кстати, еще один большой плюс Gideros).
Неплохую нагрузку на процессор составили и партиклы. Для них я использовал библиотеку для Gideros — TNT Particles Engine. Хорошая такая библиотека, в ней есть все, что нужно. Я уже даже начинал писать свой нативный аналог, получалось, но разработчик библиотеки написал в блоге что тоже разрабатывает новую, нативную версию, поэтому я решил сосредоточиться на других вещах и подождать его. К сожалению он так ничего и не выпустил.
Чтоб попытаться решить проблему со слабыми девайсами, владельцы которых могут заслуженно налепить единиц, я хотел каким-то образом отфильтровать их в маркете. К сожалению, нет подходящих фильтров в манифесте, кроме как фильтр по экранам. Поэтому игра недоступна для small-screen девайсов вообще, и доступна для normal-screen девайсов только с плотностью экрана hdpi и выше. Для больших экранов игра доступна почти для всех устройств, кроме ldpi. В консоли разработчика Android есть конечно возможность вручную отключать неподходящие модели, но их там более 6000, так что увольте.
Для интерфейса я решил использовать библиотеку Widget Candy, написанную для Corona и Gideros, о чем потом пожалел. При нехилой цене в 50 евро, она обладает целым пучком разных багов, которые приходилось обходить вставляя различные костыли, потому что разработчик не отвечает на багрепорты.
Редкими крешами обладает и Gideros. Пофиксить их невозможно, можно только ждать обновление движка, которое кстати не выходит вот уже более, чем пол года.
Что дальше?
А дальше я буду наблюдать за игрой, читать отзывы и пытаться привлечь новые установки. Четкого плана раскрутки у меня, к сожалению, нет. Необходимо посмотреть окупится ли игра, стоит ли ее дальше развивать, поддерживать. Возможно выпущу версию на iOS в ближайшее время (нужно только перекомпилить).
Не буду скромничать — вот ссылка на игру под Android. Не знаю или так можно делать, да простят меня модераторы.
Всем, кто дочитал этот нудный пост — огромное спасибо! Жду ваших отзывов.
Автор: iamx