J-Bird

    Весна навалилась на Крагуевац и нет покоя от котов и птиц. Птицы, скажете вы, при чем здесь птицы, и потянетесь к магической стреле. Стойте, я объясню…


    Последний год iOS-игрушки перестали приносить деньги. Вообще, я обнаружил закон PapaBubaDiop -а: Каждые 2 года доходы от старых iOS игр уменьшаются ровно вдвое. В 11 году я получал $200 в день, в 2013 — $100, в 2015 — $50. В грядущем году революции все говорит о том, что дебет будет $25 в сутки. Грустно, девушки, все вернулось в началу 2000, когда инди-парни получали эмоциональное удовлетворение от разработки и более ничего не получали. Хочу заметить, что дело не только в том, что большие дяди кушают торт без нас. В целом очень повысилось качество приложений и безыскусные поделки не имеют никаких шансов даже на 5-10 бесплатных скачиваний.

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

    Суть:

    1. разработать игру за 1 день.
    2. Проследить — сколько она заработает за месяц.
    3. Проинтерполировать на год, жизнь и один день.
    4. Сравнить с посуточной зарплатой js-кодера из Моршанска.
    5. Угостить всех девушек Хабра шампанским.

    Нормальный план.

    Погнали разработку


    Здесь чуть-чуть учебника. Идеи приложений приходят из вашего прошлого, один из способов — взять свою любимую игру детства, модифицировать гейм-плей (вспомни! тебе не хватало именно такой фичи в оригинальной забаве?). Затем проверить идею вручную, без программирования и вот уже начать кодировать.

    Идея


    В моем случае это древняя DOS игра j-bird — в ней птичка должна обойти все клетки гексагонального поля. После посещения клетка метится другим цветом. Мне всегда хотелось, чтобы птица не просто обходила всю доску, а чтобы цвет клетки доски инверсивно менялся после каждого посещения, чего не было в оригинальной версии игры.

    Видео геймплея очень длинное 500 секунд, не мог оторваться пока не погиб


    Так вот. Разложил колоду карт и проверил, как идея работает. Вообще круто! — восхитился я, и расклад всегда сходится на шестиугольной доске. Если инвертировать не 2 цвета, а три — то игра приобретает два типа четности, как индексы матрицы или кубик Рубика. Математическая теория, как генерить сходящиеся расклады, слишком сложная и тянет на кандидатскую диссертацию по алгебре. Возможно вы найдете более изящное решение — велкам ту комментс.

    Дизайн


    Самому делать дизайн — в день не уложишься. Я купил набор картинок на envato.market. $6. Потом вычтем из дохода.

    Изометрический сет стоит несколько дороже, чем я обычно плачу, а именно $15. Расплачиваясь через Paypal, система накидывает еще $1 за услуги. Но маркет подарил мне сертификат на $10, потому фактические затраты = $6.
    Поскольку лицензия на картинки всегда мутная, то с художниками я проворачиваю следующий трюк. Благодарю его за прекрасный set и прошу за дополнительные деньги дорисовать пару картинок. Художники (хорошие) — всегда заняты и вежливо отказываются, но при этом чувствуют себя неловко. Тут надо брать их тепленькими. Посылаю ссылку на приложение с авторским дизайном, говорю: — Вот, что получилось, хочу игру в магазин выложить. Как считаешь?
    Они с восторгом отвечают: — Конечно, дорогой, пользуйся, выкладывай (только отстань), успехов в продвижении и всех благ!

    Так и тут было, художник, по-моему, русский парень. Но переписывались на английском.

    Звуки


    Звуки вытаскиваю из игр. Скачиваем (на десктопе!!) в iTunes бесплатную игру Angry Birds 1.7.0, open in Finder, переименовываем расширение ipa в zip — разархивируем — далее директория Payload — далее щелкаем правой кнопкой на файле AngryBirdsClassicLight.app — выбираем в меню Show Package Contents. Все, вы в домике! — 100 звуковых файлов в вашем распоряжении.

    Прим. переводчика — в последнее время многие пользуются Unity и пакуют ресурсы в assets. В этом случае вы в пролете, звуки запакованы. С распаковкой я не работаю, это к Шалтаю.

    Swift


    Настолько прекрасен 3.0, что сам процесс кодирования занимает пару часов. Суть программирования — создать UIViewController, присобачить к нему картинки в виде UIImageView объектов, например:

      @IBOutlet weak var bird: UIImageView!
     


    И простой функцией
    bird.center = CGPoint(x:xBird, y:yBird) 
     

    перемещать птичку в нужную точку экрана.

    На самом деле прыжок птицы — это парабола. Нам надо переместить её из точки (xbird,ybird) в точку (xcell, ycell). Параболу заменяем без потери качества на две прямые, подобно тому как мы меняем котангенс на функцию Хевисайда в нейронных сетях. Программно траектория птицы разбивается на два линейных участка

    bird.center = CGPoint(x:xCell, y:yCell+heightOfBird) 
    bird.center = CGPoint(x:xCell, y:yCell) 
     


    Для анимации каждое движение оборачиваем блоком UIView.animate
          UIView.animate(withDuration: 0.15, delay: 0.0, options: .curveEaseOut, animations: {
                self.bird.isHighlighted = xBird>xCell ? true : false
                self.bird.center = CGPoint(x: xCell, y: yCell-heightBird)
            },
                           completion: {finished in
                            if self.pause==0 {
                                self.shift()
                            }
                            UIView.animate(withDuration: 0.35, delay: 0.0, usingSpringWithDamping: 0.25, initialSpringVelocity: 0.0, options: .curveEaseOut, animations: {
                                self.bird.transform = .identity
                                self.bird.center = CGPoint(x: xCell, y: yCell)
                            },
                                           completion: {finished in
                            })
            })
        


    Регулярная сетка 6 на 6 сродни матрице 6 на 6 с нулями выше диагонали. Проблему с тремя цветами, когда расклад не сходится (остается одна клетка) я решил просто. В этом случае позволяю птичке прыгнуть на месте. Все.

    Монетизация


    Подробно про схему монетизации и цифры дохода поведаю во второй части статьи, ровно через месяц 8 марта. Сейчас кратко — в игре использую рекламу от AdMob (ма-а-а-ленький баннер внизу) и ChartBoost (статичное межстраничное объявление), а также встроенные покупки. За $1 доллар докупить 100 жизней, за $2 доллара — 666. Реклама включается, когда игрок первый раз погиб.

    Но. Сейчас игра в магазине находится в 1-долларовом состоянии. По двум причинам.
    Первое, чтобы её заметили, она должна пару недель побыть платной. Затем Sales — в новом бесплатном состоянии при удачном раскладе её начнут качать, возможно более 500 раз за день.

    Релиз


    Игра закончена и выложена в маркет. Кстати, сейчас чертовски благоприятное время для одобрения приложений — обычно 1-2 недельный процесс в январе-феврале занимает менее суток!
    Торопитесь. Скоро начнутся бешеные мартовские гонки. Высокий сезон, все такое… E3 в ЛА. А я там, похвастаюсь, бывал. E3 — это такая игровая выставка. Маечки, ручечки, ну вы понимаете.

    Продолжение следует…
    Поделиться публикацией

    Похожие публикации

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

      +1
      Забыл. Для игры использую бесплатный Шрифт Troika.
        +3
        Звуки вытаскиваю из игр

        А как вообще в App Store к этому относятся?
          +3
          Двушечка в Алькатрасе. Но сейчас Трамп приостановил эту халяву,
          +1
          Я не понял, это перевод или ваша статья о вашей игре?
          Маловато деталей — пишете о доходе, а как добиваетесь его в этой игре? Реклама или что-то продаете?
          Сделано красиво, идеи подобные мне тоже нравятся, несмотря на их старость — последнее время много ремейков.
            +2
            Про переводчика — это стеб, в каком-то смысле я действительно перевел с DOS на iOS. Поскольку все сделано за позавчера, подробно про схему монетизации и цифры дохода поведаю во второй части статьи, ровно через месяц 8 марта. Кратко — реклама от AdMob и ChartBoost, а также встроенные покупки. За $1 доллар докупить 100 жизней, за $2 доллара — 666.

            Сейчас игра в магазине находится в 1-долларовом состоянии. По двум причинам.
            Первое, чтобы её заметили, она должна пару недель побыть платной. Затем Sales — в новом бесплатном состоянии при удачном раскладе её начнут качать, возможно более 500 раз за день.

            Второе, — в текущей версии игроку очень сложно пройти до 10 уровня. Я чуть-чуть добавил времени жизни герою и изменил поведение врагов, чтобы игра стала более проходимой. Но новая версия еще не одобрена.
              0
              Откройте еще секрет — как обстоят дела с чартбустом? Платят они в основном только за инсталлы, а не за клики. Мало кто из игроков будет ставить игру, да и кликать по рекламе тоже. Есть ли доход? Хоть сколько-то существенный.
                +3
                  0
                  Спасибо! Но я немного в шоке, если честно. Неужели кликают, неужели ставят игры с рекламы? Или я чего-то не знаю и что-то делаю неправильно?
                    0
                    я сам иногда ставлю приложения, когда увижу в рекламе
            +1

            @PapaBubaDiop в изометрическом сете что вы купили за 15$ вроде как указано


            Use, by you or one client, in a single end product which end users are not charged for. The total price includes the item price and a buyer fee.

            Уверены что можно продавать игру с такой лицензией на ресурсы?

              +1
              Игра бесплатна. В этом случае можно?
                +1
                Можно, т.к. игру можно использовать бесплатно и не обязательно за нее платить.
                  0

                  Но на данный момент игра ведь платна? :)

                    +1
                    Никто не купит без продвижения) А я не двигаю. Кстати, с художниками я всегда проворачиваю такой трюк, Благодарю его за прекрасный set и прошу за дополнительные деньги дорисовать пару картинок. Художники (хорошие) — всегда заняты и вежливо отказываются, но при этом чувствуют себя неловко. Тут надо брать их тепленькими. Посылаю ссылку на игрушку с авторским дизайном, говорю -Вот, что получилось, хочу такую в магазин выложить? — Они с восторгом отвечают — конечно, пользуйся, выкладывай (только отстань), успехов в продвижении и всех благ!

                    Так и тут было, художник, по-моему, русский парень) Но переписывались на английском.
                      0
                      Эдакий вы хитрец )))
                        0
                        Какова вероятность что «русский парень» тоже сидит на хабре и после прочтения станет более внимательно относиться к своим покупателям? )
                          +1
                          Художники — это люди неба. Они не делят людей на покупателей и прочих. Они видят в нас идеи будущих шедевров. Но от рекламы своих произведений не откажутся — что я бескорыстно делаю)
                  0
                  Реклама через гигантов должна идти в большой объеме…
                  В 2013 я имел 80 евро в месяц за 30к просмотров на ютубе, в 2014 при 40к было в районе 7-9 евро при той же аудитории.

                  Платная подписка и донат — все. Лучше всего — своя реализация и через нормальные системы.
                    0
                    Любопытное задание, автор, продолжайте.
                      0
                      А где традиционный скриншот с уровнем «я полночи не спал, но вы попробуйте решить его в уме за две минуты»?
                        0
                        Тут аркада, мой друг, голову сильно ломать не надо — всего лишь найти оптимальный путь)
                        Но у меня есть игрушка для тебя — сегодня одобрили — мой старый ремейк from 1991.

                        Надо решить паззл. Полдня бьюсь.
                        Шесть труб

                        Съедаются 6 и более правильно собранных труб. Надо очистить всю доску.



                          0
                          Они съедаются по нажатию клавиши «Хавать» или автоматически, как только будет соединено 6 и более труб?
                          И падают на освободившиеся клетки?

                          P. S. Почему до 8 марта проходит ровно месяц, если статья опубликована 12 февраля?
                            0
                            Автоматически и падают под действием силы тяжести. Потому что зима холодная, месяц сжался.
                        +1
                        Сколько лет прошло с Тостера, сколько строк кода утекло, а Вы до сих пор пишите игры и статьи про написание игр- вечный респект!
                          0
                          PapaBubaDiop уже 10-е марта, ждём, ждём.
                            0
                            На сноуборде писать сложно — через неделю отчитаюсь.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое