Статья будет представлять собой описание вещей, которые мы сами не знали до начала разработки, и которыми хотелось бы поделиться с начинающими и не очень разработчиками. На данный момент у нас 200 активных игроков в день, каждый день добавляется еще от 10 до 50, всего зарегистрировано около 5 тысяч. За все время игра принесла порядка 1000$.

О чем игра


Сначала мы решили портировать БК (одна из первых браузерных MMORPG) на телефон, но в процессе идея эволюционировала. Закончили match-3 игрой с элементами RPG и возможностью PvP. В общем, смесь «БК», «Candy Crush» и «Небеса». Игрок воюет с монстрами, развивается, делает квесты, покупает вещи и свитки магии. Бой проходит в поочередном режиме в стиле match-3 с разными кристаллами — лечение, яд, усиление и т.д. Главное новшество — бои с людьми, можно драться со случайными противниками или добавлять друзей и драться с ними.



Небольшая техническая врезка, с полным списком программ и технологий. Кому интересно
Дизайн
Первые версии интерфейса были нарисованы в Balsamiq Mockups — очень удобный инструмент для быстрых набросков дизайна. В нем же рисовали и схемы переходов между экранами:



Клиент
Клиент писали на Objective-C. Трехмерной графики и сложной анимации у нас нет, да и цена большинства фреймворков нас смущала. Мака в нашем распоряжении не было, поэтому на первых порах использовали эмулятор VMware. Как сейчас помню первую запущенную программу — белый фон с распечатанным текстом Zhopa «Hello, world!».
Спустя полгода мы-таки раскошелились на Mac. Билд на нем работает раз в 10 быстрее, поэтому если вы пишете серьезный проект, стоит задуматься о покупке хотя бы Mac mini с самого начала.

Сервер
Сервер писали на PHP, раньше был опыт работы с ним. Для Version control выбрали Assembla. Особенно порадовало, что в связке с Netbeans, на котором мы писали, он встал без запинки.
Базу данных сначала делали на MySQL, таблицы и связи строили в MySQL Workbench, и работали с этим всем через PDO.
Спустя полгода мы решили освоить новую технологию и переписать весь DAL на noSQL. Выбрали MongoDB в виду относительной распространенности и простоты. Книжка “The Little MongoDB book”, не смотря на свои скромные 30 страниц, дает хорошую отправную точку.
Хостинг взяли на Amazon. При всем удобстве у амазона есть ощутимый минус — цена. При практически нулевом траффике получается порядка 200 долларов в год за один вычислительный микро сервер ec2 и одно хранилище s3.

Бета тест
Закачивать игру тестерам на телефоны через Xcode неудобно, и главное, нельзя делать это удаленно. Тут выручил сервис TestFlight, который позволяет устанавливать игру удаленно еще во время разработки.
Кроме поиска багов нужно было получить отзывы по геймплею и интерфейсу. Мы сделали список вопросов и оформили опросом в SurveyMonkey. Простенькая система для опросов, бесплатная и с удобным доступом к результатам.
Одновременно мы послали игру в аппстор на проверку, чтобы потом не терять времени, так как они часто просят что-то переделать. Каково же было наше удивление, когда через 10 дней мы получили аппрув с первого раза.

Итак, приступим.

1. Экономика, статы вещей, балансировка боя и все, что входит в понятие «геймплей»


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

Была идея найти геймдизайнера на стороне, но один умный человек сказал: «Хотите вы или нет, но вам придется вырастить геймдизайнера у себя». Оглядываясь назад, мы понимаем, что он имел ввиду.

Есть отличная статья для начинающих, приводит голову в порядок и объясняет, как это все делается по уму (на английском). Еще можно почитать на Gamasutra статьи Рамина Шакридзе, очень много дает в плане понимая геймплея. Несколько переводов его статей есть и на Хабре.

2. Achievements


Много времени заняло придумать нормальную систему достижений, самая, на мой взгляд, толковая статья (на английском).

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

3. Рейтинги игроков


Поначалу пытались придумать что-то свое, но потом стало понятно, что изобретаем велосипед. Тут на помощь пришла статья «Как правильно сортировать контент на основе оценок пользователей». После прочтения радостно сообщил команде, что теперь «рейтинг высчитывается по нижней границе доверительного интервала Вильсона для параметра Бернулли».

4. Аналитика


Для аналитики использовали Flurry и Google Analytics. У каждой из систем свои плюсы и минусы, только об одном этом можно написать целую статью. Если вкратце, Flurry дает возможность сделать до 300 типов событий, с кучей параметров в каждом. А Google позволяет сделать бесконечное количество типов событий, но всего с одним параметром. Кстати, из разговоров с издателями мы узнали, что они тоже обычно используют больше одной системы аналитики — как одновременно, для перестраховки, так и по отдельности, в тех случаях когда одна удобнее, чем другая.

Замеряли мы, во-первых, собственные метрики, например, с какого раза игроки проходят каждого монстра. И, во-вторых, общепринятые показатели, которые спрашивают издатели — MAU, DAU, ARPU, ARPPU, ARPDAU, K-factor, 2/7/28 day retention.

5. Обучение


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

6. Локализация


Изначально включили языки с максимальным охватом аудиторий — испанский, французский, итальянский, немеций и, конечно, русский. Перевод был нужен качественный, поэтому заказывать дешево и сердито, например, на fiverr мы не решились, вместо этого обратились в Globaloc.de, специализирующимся на переводе игр. Остались очень довольны, хотя ценник немного кусается, около 10 центов за слово.

7. Бот


Монстры в игре играют в match-3, пытаясь убить игрока. Для написания бота мы использовали алгоритм Minimax.

Писали итеративно, каждый раз применяя разные стратегии и сравнивая. Даже ставки делали, какая версия бота победит. В какой-то момент заигрались и монстры начали выбирать такой ход, чтобы оставить противнику наихудшее поле. Оказалось, что писать слишком умного бота нельзя, начинает казаться, что он тот еще жулик, и заранее знает какие камни упадут, хотя это и не так. Чтобы сделать сложного монстра интересным, лучше добавить ему статов, и оставить алгоритм, сопоставимый с тем, что может просчитать живой человек.

8. Content Management System


Очень полезна возможность — делать простые обновления без того, чтобы перезаливать клиент на AppStore. Для этого написали CMS — при каждом подключении клиент сверяется с сервером, и при необходимости докачивает нужные данные. Теперь можно добавлять в игру оружие и целые локации, не перезаливая клиент.
Хотя все проблемы при передаче и битые пакеты должны лежать на плечах TCP, у нас были ситуация, когда на клиенте оказывались наполовину загруженные картинки. Дописали ручную проверку, после скачивания клиент высчитывает md5 полученных данных, сравнивает и при необходимости перезакачивает.

9. Размер приложения


В AppStore есть ограничение на размер приложений, которое можно скачивать через 3G или EDGE. Этот размер является важным критерием и может ощутимо повлиять на количество установок. Наша игра со всей графикой переваливала за разрешенную границу, поэтому чтобы уложиться в заветные 50 МБ, нам пришлось сделать систему фоновой догрузки графики (на момент разработки разрешение было 50 МБ, сейчас подняли до 100). В начальной сборке вшито только 2 локации, остальные монстры и локации докачиваются на фоне по мере прохождения с помощью CMS.

10. Обратная связь и Help


Возможность написать разработчикам прямо из игры очень важна. Если игрок хочет дать совет или пожаловаться на баг, он должен иметь возможность сделать это прямо из игры. В противном случае он напишет это в ревью на аппсторе, и количество звезд в отзыве скорее всего будет меньше, чем на дорогом коньяке. А чем лучше будет ваш Help, тем меньше игроки будут посылать вам вопросов. Для этих целей мы встроили SDK от uservoice.com Они дают возможность динамически менять Help и при желании сделать хоть целую энциклопедию. В той же системе можно отправить и отзыв разработчикам.

11. Иконка игры


С одной стороны, можно было отдать матерому художнику, специализирующемуся на иконках и висящему в топах на сайтах вроде dribbble.com. Связывались, стоит порядка 1500$. В итоге обратились к нашему художнику и денег потратили в 10 раз меньше, и результатом остались очень довольны.

12. Графика
Всю графику заказывали аутсорсом. Изначально была мысль сделать игру только под iPhone, но оказалось, что около половины прибыли игр приходится на iPad, это изменило нашу мысль. Вывод — лучше сразу заказывать всю графику в высоком разрешении, разница в цене небольшая.

Вся графика стоила порядка 20.000$ — более 40 полноразмерных персонажей и монстров, десятки локаций, вещей, ачивок и т.д.

За время разработки сменилось около 10 художников, в итоге заканчивали с 3 постоянными, каждый из которых отвечал за свой фронт работ.

Заказать графику такого проекта под ключ у студии будет стоить от 50.000$. Вывод: иметь художника в команде очень круто.

13. Музыка


Мы заказали у композитора комплект звуков для всех действий в игре и две главных музыкальных темы — в бою и вне боя. Очень интересный опыт. Сложно объяснить в техзадании, как вот та кнопка должна «клацать», а для описания музыки в бою эпитета «героическая» оказывается недостаточно.

Озвучка, по сравнению с графикой, стоила совсем недорого, порядка 500$.

14. Издатели


С самого начала мы решили, что будем выпускаться при помощи паблишера. Сделав трейлер и презентацию, мы разослали их 20-ти самым крупным издателями. Ответили треть, среди них были Chillingo, BigFish и Alawar. Из того, что предлагали нам, доля паблишера составляет 35-50% от чистой прибыли, после вычета комиссии Apple и прямых затрат на покупку траффика (если игроки приводятся не из других игр издателя). Большинство просили рабочую демку на TestFlight. Некоторые написали подробные отчеты о наших недостатках, поэтому написать издателям уже на этапе разработки в любом случае полезно.

Ни с кем из хороших издателей договориться сразу не получилось, поэтому мы решили сами делать Soft Launch — запуск на маленьких рынках с целью отточить геймплей и монетизацию. Нужны были небольшие англоязычные рынки, поэтому были выбраны Австралия, Н.Зеландия и Малайзия.

Мы увидели 2 основных пути работы с издателями:
1. Связаться еще на этапе разработки. Издатели могут очень помочь с геймплеем и монетизацией. Плюс мотивация, что в этом мире есть кто-то еще, кто заинтересован в успехе игры.
2. Полностью закончить игру, сделать Soft Launch, собрать метрики и отточить игру. И уже с цифрами обратиться к издателям. В случае хороших показателей сможете получить более выгодные условия. Сложность заключается в том, что нужно самим набрать критическую массу игроков.

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

И напоследок немного о нас
Мы команда из 4 человек, и это наша первая игра. Разделение было таким:
Дизайн — 1 креативщик
Клиент — 1 программист
Сервер — 1.5 раздолбая
Геймплей — 0.5 человека

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

Первый эскиз логотипа и его конечный вариант:



Работали мы практически все выходные на протяжении двух лет, плюс пару часов каждый день после работы. То есть фактически это примерно год 5-ти дневной работы 4-х человек.

В завершение еще пару примеров начальных набросков и конечных результатов.

Бой


Рюкзак

Комментарии (26)


  1. esc
    01.04.2015 15:36
    +3

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

    Я лично никогда стараюсь не работать с отдельными элементами, отобранными от контекста. Сначала рисуется основа (структура, подложка), потом на ней уже элементы. Чтобы понимать, как все будет смотреться вместе.

    Вот этот скрин неплох: habrastorage.org/files/98b/a28/646/98ba28646c364dd9abd9b7ed1e57d5fe.jpg (по крайней мере, левая часть), а тот, что в шапке статьи и habrastorage.org/files/62c/17a/d25/62c17ad251134a3fa413cf28d31858f2.png слабоваты, имхо.


  1. Temirkhan
    01.04.2015 16:19
    +2

    В принципе, если учитывать то, что вся графика делалась на аутсорсе, сделано неплохо, но цена как-то смущает. Тем более, что полноты картины нет — не состыкуются все элементы воедино.

    В свое время довольно много играл в Puzzle Quest 1-2. Идея хорошая, но по своим знакомым(заядлым игрокам match3), знаю, что им такой стиль довольно быстро надоедает. Зато могут месяцами сидеть на «тысяче каком-то» уровне инди кота.


    1. Neocor Автор
      01.04.2015 18:28
      +1

      В плане того, что цена смущает, нужно учитывать, что графики действительно много, по паре скринов это сложно понять.
      В статье в основном боевые скрины, но вокруг есть еще целый отрисованный мир: hsto.org/files/214/44b/ce1/21444bce100d4714996112b420cee47b.jpg


      1. Temirkhan
        01.04.2015 20:43

        Маленький вопрос, чтобы все-таки хоть какую-то ясность внести:
        по какому курсу были потрачены 20 кусков зелени? Полмиллиона, конечно, целая зарплата полугодовая для хорошего дизайнера(может и ошибаюсь), но если речь идет о миллионе с лишним — это совершенный ахтунг


        1. Neocor Автор
          01.04.2015 20:53

          Это еще по старому курсу, последняя графика была заказана где-то с пол года назад


  1. Bytamine
    01.04.2015 16:30
    +2

    Почему решили делать только для iOS?


    1. Neocor Автор
      01.04.2015 18:36

      Программист, писавший клиент, как раз только выучил Objective-C, поэтому начали с iOS, решив в случае успеха допилить Андроид позже. В конце это стало серьезной проблемой, так как многие издатели были готовы взять игру только в случае если будет версия под Андроид.


      1. alexrublev
        01.04.2015 19:14

        А можно ссылку на игру?


        1. Neocor Автор
          01.04.2015 19:20

          itunes.apple.com/app/id647591341
          Иконка сейчас другая, проверяем какая лучше идет


          1. RedRoseSinging
            02.04.2015 12:10

            Лично мне больше нравится та, что в данной статье приведена.
            Текущая иконка из AppStore вызывает ощущения… недоделанности, возможно?


      1. GrigoryPerepechko
        18.04.2015 11:01

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


  1. toxicdream
    01.04.2015 19:45

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


  1. Neocor Автор
    01.04.2015 20:04

    Это так, отличная внимательность :) Изначально название статьи включало в себя и их, но потом укоротили, очень уж громоздко было


  1. murr
    01.04.2015 20:28
    +1

    Прекрасная статья с кучей полезных ссылок, спасибо!

    Честно говоря не подозревал, что набор 2д графики для мач-3 будет стоить СТОЛЬКО.


  1. HeadWithoutBrains
    01.04.2015 21:58

    Оказалось, что писать слишком умного бота нельзя, начинает казаться, что он тот еще жулик, и заранее знает какие камни упадут, хотя это и не так


    Ха. Это вы правильно. В некоторых играх из за особо «умных» ботов у меня было впечаление, что они действительно жульничают и знают какие камни упадут. Например в Puzzle Quest 2 дальше середины игры такое чувство очень часто возникало.


  1. stansult
    01.04.2015 23:51

    Очень интересная статья, спасибо.

    Насчёт иконки – у меня одного ассоциация с упячкой?


  1. Rinat
    02.04.2015 13:52

    Стоимость графики норм, даже с текущим курсом.
    А вот звук где делали?
    Интересно взглянуть тз на озвучку


    1. Neocor Автор
      03.04.2015 07:39

      Игра озвучивалась в две фазы

      1. Первый набор эффектов и две основные музыкальные темы — обратились к фрилансеру по озвучке, пользовались обычными биржами труда по поиску фрилансеров.
      Стоит обратить внимание на музыкальное образование человека, так как в большинстве своем выложенные примеры работ представляют из себя просто наборы звуков, расставленные в рандомальном порядке.
      Желательна предыдущая работа над джинглами, какие-то оформленые мелодии или целые композиции.
      Это важно еще и потому, что человек без умения именно писать музыку (не оранжировать) не сможет сделать правки по комментариям а-ля «чуть веселее, менее восточно и т.д.

      Полностью ТЗ
      1. Фоновая музыка вне боя и музыка в бою
      Было длинное описание как мы себе представляем музыку, в частности приводились трейлеры других игр со сносками что и где понравилось:
      www.youtube.com/watch?v=0ZRq16i7W00 FXs and music very good
      www.youtube.com/watch?v=8xPUdFaraoQ Great mood
      www.youtube.com/watch?v=YsCpDaSooWA Use of main music theme in trailer
      www.youtube.com/watch?v=oJnj0RQRNiI Good example of tactile sounds of falling stones

      2. Эффекты в игре
      Мы выдали список эффектов с описанием где и как они будут применяться, композитор сделал первый набор звуков как он их себе представляет, а потом уже по каждому из них в отдельности мы делали исправления.

      Набор звуков вне боя:
      Получение дропа (открытие сундука из рюкзака, с карты)
      Нажатия на кнопки (переход по локациям, нажатие на кнопки назад, все что триггер нажатия) один звук на все эти евенты
      Начало боя
      Получение ачивки\уровня\бонуса (выплывающие сверху нотификация)
      Покупка чего либо (звон монет при снятии денег)

      В бою:
      Победа (при вылете сплеша с надписью You win)
      Поражение(при вылете сплеша с надписью You lose)
      Выбор камня при своем ходе (когда начинает подсвечиваться золотой рамкой)
      Использование спелла (вылетает на противнике или на игроке по верх образа)
      Последнии 3-5 секунда перед окончанием хода, тиканье и в итоге звук таймаута
      При совпадении 3 и более камней. Нужно сделать несколько эффектов похожих друг на друга с небольшой вариацией, одинаковой длительности
      Совпадение мечей обычный удар.
      Совпадение сильны удар. (удар с бустом, удар с критом, удар с критом и бустом, все один усиленный звук)
      Совпадение бустов (синие стрелочки) поднимают усиление удара до 100%
      Совпадение сердечек (просиходит лечение)
      Совпадение капель — вытягивают жизнь из противника передают игроку
      Совпадение 3 звезд эффект молнии сносит все строчку (или столбец)
      Совпадение 4-5 звезд преобразются в случайный камень (эффект преобразование, а дальше один из выше перечисленных эффектов самого камня)
      Соппадение черепков — проходит яд по противнику который снимает жизни на протяжении 3 ходов.
      Эффект действия яда — вылетает последующий ход когда на персонаже висит яд, ввиде черепка на персонаже.


  1. katleta
    02.04.2015 16:59

    Напишите, пожалуйста, если можно еще одну статью по тому «как вы именно связывались с паблишерами».
    На что делать упор при описании своего продукта, может быть статьи, ссылки, адреса.
    Почему-то во всей статье именно это заинтересовало)


    1. Neocor Автор
      03.04.2015 08:03
      +1

      На целую статью тут материала и не наберется, опишу процесс тут:
      1. Сначала мы составили список паблишеров, подойтут статьи навроде этой, описывающие крупнейших издателей на данный момент
      2. Сделали трейлер и презентацию, нужно быть готовым также выслать версию на TestFlight, в случае если игра еще нигде не доступна, большинство паблишеров просят TestFlight
      3. Прошлись по списку паблишеров и разослали всем письмо с описанием. У некоторых на сайте есть формы отправки, некоторые оставляют почту, специально для разработчиков игр.

      Полностью письмо, которое мы посылали
      Hello,
      We are an indie team of developers.
      We developed a F2P game for iOS (iPhone + iPad), the game is combination of match-3 and MMORPG.
      The innovation is that players can fight versus other real players.

      Currently the game is in soft launch phase and we are looking for publisher to reach the global market.
      More info can be found in trailer and presentation:
      www.youtube.com/watch?v=fLwHQFqQJlc
      docs.google.com/presentation/d/1NwUibInNcS-zes-lYl2Qn8j6Le6oE5oO4rEVrzEHsZs/edit?usp=sharing

      Game is available on Appstore in Australia, Israel, Russia and some other countries.
      Please contact us if you are interested in publishing our game or need additional details.

      Thanks in advance,
      EKZA team.


      1. katleta
        03.04.2015 11:08

        Спасибо за предоставленную информацию.


  1. fo0x
    04.04.2015 14:37

    $1000 это до выхода в Америке?


    1. Neocor Автор
      04.04.2015 14:46

      Да, это до выхода, на Америку мы запустились одновременно с публикацией на Хабре


  1. RudkoDmitry
    07.04.2015 10:25

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


    1. Neocor Автор
      08.04.2015 09:25

      Спасибо за столь лестный отзыв
      Да, делали чуть больше двух лет, но не фул тайм, после работы и по выходным


  1. GrigoryPerepechko
    18.04.2015 11:11

    >> Хотя все проблемы при передаче и битые пакеты должны лежать на плечах TCP, у нас были ситуация, когда на клиенте оказывались >>наполовину загруженные картинки.
    TCP гарантирует дедупликацию, переотправку и правильный порядок в рамках соединения. Разумеется если соединение было разорвано по какой либо причине — данные уже не дойдут.

    Если грузить картинки по HTTP — есть еще забавная проблема с http прокси провайдеров, которые возвращают свою авторизационную страничку без редиректа с 200 кодом. И у юзеров вместо картинок будут html'ки.