Последний год iOS-игрушки перестали приносить деньги. Вообще, я обнаружил закон PapaBubaDiop -а: Каждые 2 года доходы от старых iOS игр уменьшаются ровно вдвое. В 11 году я получал $200 в день, в 2013 — $100, в 2015 — $50. В грядущем году революции все говорит о том, что дебет будет $25 в сутки. Грустно, девушки, все вернулось в началу 2000, когда инди-парни получали эмоциональное удовлетворение от разработки и более ничего не получали. Хочу заметить, что дело не только в том, что большие дяди кушают торт без нас. В целом очень повысилось качество приложений и безыскусные поделки не имеют никаких шансов даже на 5-10 бесплатных скачиваний.
Это не значит, что ваше добротно сделанное инди-приложение не принесет денег. Принесет, но не более того, что получает php-разработчик в российской глубинке.
Для проверки своего тезиса, что халява закончилась и разработка игры превратилось в простое ремесло я провел эксперимент.
Суть:
- разработать игру за 1 день.
- Проследить — сколько она заработает за месяц.
- Проинтерполировать на год, жизнь и один день.
- Сравнить с посуточной зарплатой js-кодера из Моршанска.
- Угостить всех девушек Хабра шампанским.
Нормальный план.
Погнали разработку
Здесь чуть-чуть учебника. Идеи приложений приходят из вашего прошлого, один из способов — взять свою любимую игру детства, модифицировать гейм-плей (вспомни! тебе не хватало именно такой фичи в оригинальной забаве?). Затем проверить идею вручную, без программирования и вот уже начать кодировать.
Идея
В моем случае это древняя DOS игра j-bird — в ней птичка должна обойти все клетки гексагонального поля. После посещения клетка метится другим цветом. Мне всегда хотелось, чтобы птица не просто обходила всю доску, а чтобы цвет клетки доски инверсивно менялся после каждого посещения, чего не было в оригинальной версии игры.
Так вот. Разложил колоду карт и проверил, как идея работает. Вообще круто! — восхитился я, и расклад всегда сходится на шестиугольной доске. Если инвертировать не 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)
Maklaud
12.02.2017 08:45+1Я не понял, это перевод или ваша статья о вашей игре?
Маловато деталей — пишете о доходе, а как добиваетесь его в этой игре? Реклама или что-то продаете?
Сделано красиво, идеи подобные мне тоже нравятся, несмотря на их старость — последнее время много ремейков.PapaBubaDiop
12.02.2017 10:53+2Про переводчика — это стеб, в каком-то смысле я действительно перевел с DOS на iOS. Поскольку все сделано за позавчера, подробно про схему монетизации и цифры дохода поведаю во второй части статьи, ровно через месяц 8 марта. Кратко — реклама от AdMob и ChartBoost, а также встроенные покупки. За $1 доллар докупить 100 жизней, за $2 доллара — 666.
Сейчас игра в магазине находится в 1-долларовом состоянии. По двум причинам.
Первое, чтобы её заметили, она должна пару недель побыть платной. Затем Sales — в новом бесплатном состоянии при удачном раскладе её начнут качать, возможно более 500 раз за день.
Второе, — в текущей версии игроку очень сложно пройти до 10 уровня. Я чуть-чуть добавил времени жизни герою и изменил поведение врагов, чтобы игра стала более проходимой. Но новая версия еще не одобрена.Maklaud
12.02.2017 15:55Откройте еще секрет — как обстоят дела с чартбустом? Платят они в основном только за инсталлы, а не за клики. Мало кто из игроков будет ставить игру, да и кликать по рекламе тоже. Есть ли доход? Хоть сколько-то существенный.
Dwite
12.02.2017 12:39+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.
Уверены что можно продавать игру с такой лицензией на ресурсы?
PapaBubaDiop
12.02.2017 12:40+1Игра бесплатна. В этом случае можно?
zharikovpro
12.02.2017 19:04+1Можно, т.к. игру можно использовать бесплатно и не обязательно за нее платить.
xytop
12.02.2017 20:23Но на данный момент игра ведь платна? :)
PapaBubaDiop
12.02.2017 20:39+1Никто не купит без продвижения) А я не двигаю. Кстати, с художниками я всегда проворачиваю такой трюк, Благодарю его за прекрасный set и прошу за дополнительные деньги дорисовать пару картинок. Художники (хорошие) — всегда заняты и вежливо отказываются, но при этом чувствуют себя неловко. Тут надо брать их тепленькими. Посылаю ссылку на игрушку с авторским дизайном, говорю -Вот, что получилось, хочу такую в магазин выложить? — Они с восторгом отвечают — конечно, пользуйся, выкладывай (только отстань), успехов в продвижении и всех благ!
Так и тут было, художник, по-моему, русский парень) Но переписывались на английском.frangovalex
12.02.2017 22:08Какова вероятность что «русский парень» тоже сидит на хабре и после прочтения станет более внимательно относиться к своим покупателям? )
PapaBubaDiop
12.02.2017 22:10+1Художники — это люди неба. Они не делят людей на покупателей и прочих. Они видят в нас идеи будущих шедевров. Но от рекламы своих произведений не откажутся — что я бескорыстно делаю)
nikitasius
12.02.2017 22:10Реклама через гигантов должна идти в большой объеме…
В 2013 я имел 80 евро в месяц за 30к просмотров на ютубе, в 2014 при 40к было в районе 7-9 евро при той же аудитории.
Платная подписка и донат — все. Лучше всего — своя реализация и через нормальные системы.
LoadRunner
13.02.2017 09:14А где традиционный скриншот с уровнем «я полночи не спал, но вы попробуйте решить его в уме за две минуты»?
PapaBubaDiop
13.02.2017 11:56Тут аркада, мой друг, голову сильно ломать не надо — всего лишь найти оптимальный путь)
Но у меня есть игрушка для тебя — сегодня одобрили — мой старый ремейк from 1991.
Надо решить паззл. Полдня бьюсь.
Шесть труб
Съедаются 6 и более правильно собранных труб. Надо очистить всю доску.
LoadRunner
13.02.2017 12:22Они съедаются по нажатию клавиши «Хавать» или автоматически, как только будет соединено 6 и более труб?
И падают на освободившиеся клетки?
P. S. Почему до 8 марта проходит ровно месяц, если статья опубликована 12 февраля?PapaBubaDiop
13.02.2017 12:53Автоматически и падают под действием силы тяжести. Потому что зима холодная, месяц сжался.
KysokZla
14.02.2017 18:05+1Сколько лет прошло с Тостера, сколько строк кода утекло, а Вы до сих пор пишите игры и статьи про написание игр- вечный респект!
PapaBubaDiop
Забыл. Для игры использую бесплатный Шрифт Troika.