среда, 19 марта 2014 г.

Записки программиста #9. Баланс в игре.

Баланс, скорость прокачки, количество получаемой награды очень важно в любой игре, моя новая игра не стала исключением. До момента создания игры, я особо не заморачивался этим вопросом, но чем ближе конец разработки, тем более остро он встает, и кстати, создание начального баланса требует не малых сил и времени. Основная проблема от которого страдают большинство инди разработчиков – плохой баланс в игре. Возникает это из-за того, что кто пишет код, тот и тестирует, и как следствие подстраивает баланс под себя, в итоге получаем игру в которую очень сложно разобраться и большинство игроков отваливается сразу. Наличие обучающих уровней где все очень просто, решает часть проблем, но только частично.
Опыта в решении данной проблемы у меня не много, но я расскажу с чего начал, что выходит, а что в итоге вышло посмотрим после релиза.
Немного порыскав по просторам интернета, я нашел два графика, мастерства от времени:
  


Для создания первого графика у меня не достаточно не сил не знаний, так что я думаю стоит выбрать нечто среднее. Другими словами, линейная сложность, но уровень мастерства растет быстрее.
Но как оценивать это самое мастерство?! Решил, что стоит собрать статистику, тестировать и руководствовавшись мнением человека, кто будет тестировать, выстраивать сложность в игре, после чего проанализировать статистику и убедиться правильно ли двигаюсь.
С этого и решил начать, вначале я хотел всю статистику вынести в гугл аналитикс, он умеет строить красивые графики, прост в работе и тд, но для оценки нужных мне параметров он подходит плохо, а возможно я просто не умею его готовить, в итоге созрело такое решение: пользовательская статистика будет жить в гугл аналитиксе, а игровая, непосредственно по заездам, у меня в простой таблице, на основе собственно этой статистики и буду формировать рейтинг. План показался мне не плохим, и я стал его реализовывать, спустя некоторое время все заработало и по окончанию заезда, данные отправляются на сервер.
Тестирование решил разбить на два этапа:
  1. Полного тестирования всех карты для всех машин. (альфа тестирование)
  2. Повторное, более массовое тестирование после выравнивания баланса. (бета тестирование)

Альфа тестированием занимался я и еще пару человек. Я специально не стал давать игру всем, тк как игра выглядит и работает на телефоне и как выглядит на десктопе это две разные вещи, а хотелось в бете тесте свежий взгляд на игру.
Тестирование карт, в моем случае не самая простая задача, тк карта создается каждый раз новая, ну точнее из n-возможных вариаций, к примеру 4 и 5 карта насчитывает 57 вариаций, что увеличивает объем тестирования. Другими словами, нужно провести как минимум 57 заездов, чтобы оценить карту и так 5 карт. В этом месте я немного жульничал, тк блоки во всех картах одни и те-же. Такое решение вполне осознанное и этого вполне достаточно, для оценки перспективности игры на целевом рынке.
Для начала я решил задаться целью, что должно быть в итоге, а самое главное, как оценивать, хороший или плохой получился уровень, вот как раз в этом я полностью положился на мою девушку. Создание карты выглядело примерно так: я тестировал по отдельности блоки и наборы блоков для одного уровня сложности. После того как карта я считал готова, тестировала девушка.
Я считаю, что отдавать на тестирование на ранних этапах игру крайне важно.
В момент написания статьи, прошел период альфа тестирования и уже набралась некоторая статистика по игре:
Всего было проведено 209 заездов, суммарное время заездов составило 22756 сек, около 6 с половиной часов! В среднем для каждой машины было проведено 26 заездов, это примерно 42 заезда на каждой карте. На одной из самых больших карт было проведено 70 заездов.
Набрав какую не какую статистику, будем ее анализировать.
Машины оценивать просто, размер багажника и проходимость, она увеличиться для каждой машины, есть конечно свои особенности, но для их нормальной оценки такого количества заездов просто не достаточно.
Для оценки сложности карт, я решил использовать количество заездов и их результат.

Карта
Всего заездов
Неудачи
% неудач
1
46
5
11%
2
36
8
22%
3
20
9
45%
4
70
45
64%
5
37
22
59%



Данных для точно оценки конечно не достаточно, но по ним можно судить, что начальный баланс в игре имеется, и разработка движется в нужном направлении.
Но как оценить мастерство?!
Для этого нужно взять отдельного человека и посмотреть в зависимости от времени его средний доход монет. Но средний доход зависит на прямую от карты и от машины, на момент тестирования они все открыты, те получаемые данные не будут иметь в этом контексте значения. Это вариант хорош в релизе и на больших цифрах, и мы его обязательно оценим!
Я придумал другой способ, который не плохо подходит для тестирования. Изменение в день среднего времени раунда в игре, на конкретной машине, на конкретной карте.
Теория — это хорошо, но что выходит на практике?
Самая протестированная карта 4, на ней было 70 заездов.
Чаще всего на этой карте ездили на 7,8 и 5 машине, их и возьмем для тестирования, а также 1 машину на первой карте.

Машина
Карта
Количество заездов
1
1
29
5
4
11
7
4
29
8
4
20





Как видите это немного не то, что я ожидал! Я решил на этом месте остановиться и завершить альфа тестирование, и заняться переносом на мобильную платформу. Вернемся к этому вопросу уже после релиза. 

четверг, 6 марта 2014 г.

TruckingMania Demo

Наконец – то получилось выделить время и записать видео с геймплеем игры, это все еще пока альфа, но в целом я доволен, что выходит.

пятница, 28 февраля 2014 г.

Записки программиста #8. Не переоценивайте свои силы!

До этого я обещал, что следующая статья выйдет после релиза, но прошло довольно много уже времени, сроки сдвинулись и я решил написать почему.
Начну из далека, точный временной расчет выполнения программы или игры очень важен, по многим причинам: это расходы на зп сотрудникам (если они есть); программа может быть актуально к планируемому сроку, а после уже нет; заранее подготовленные рекламные ресурсы; не правильное разделение временных ресурсов и как следствие - долей проекта и тд. Не для кого не секрет, что программисты очень часто ошибаются со сроками, но в целом опыт дает знать и можно оценивать сроки выполнения задач вполне сносно, но что делать когда ты не делал какую либо работу, как например в моем случае дизайн уровней. В целом, работу по созданию движка, как я планировал, так все и вышло, но я совсем не думал, что уйдет такое количество часов на проработку уровней и выравнивания баланса, это оказалась кропотливая и длительная работа, вот о ней я расскажу подробнее.
Я уже не раз сталкивался с принцип Парето, когда 20% усилий дают 80% результата, а остальные 80% усилий — лишь 20% результата, но про него, постоянно забывается. Вот собственно я уже полтора месяца борюсь с этими 20%.
На текущий момент игра состоит из 14 различных блоков, точнее первая карта состоит из 3 блоков, вторая из 7, третья из 10 и четвертая с пятой из 14. Это и войдет в первый релиз, постепенно количество блоков будет увеличиваться. На разных картах блоки конечно повторяются с небольшими отличиями, но случайной расположения их между собой дает интересные комбинации, которые порой очень тяжело преодолевать.
Создавать и тестировать всю карту целиком довольно проблематично, поэтому блоки на карте создаются по одному и проверяются на проходимость, после того как каждый блок по отдельности протестирован и получилась полноценная карта, приложение уходит на тестирование, вот тут и проявляются различные особенности: «вот эти препятствия слишком сложные», «тут можно на третей машине проехать зажав газ без проблем» и тд.  Пока идей как ускорить или автоматизировать процесс тестирование нету, точнее идее есть, но они требует серьезных временных затрат и от них временно решил отказаться.
Чтобы тестирование не проходила зря, я решил сразу прикрутить статистику по заездам, это помогает собирать необходимую информацию для дальнейшего выставления цен на карты, автомобили и создания достижений.
И что самое печально, пришлось очередной раз сдвигать сроки по релизу, на текущий момент бета для тестирования, выйдет в начале марта, но об этом я сообщу позднее.



вторник, 14 января 2014 г.

Записки программиста #7. Отступление от планов, шаг в сторону или небольшое крюк?!

Все это время шла разработка игрового движка для игры AlienStorm, о чем я писал раньшеe, где-то в середине октября я принял решение выпустить на движке AlienStorm немного другую игру. Она будет проще, в ней нет AI, где не подразумевается работа с сетью и сроки разработки намного меньше, но которая в полную степень покроет реализованные возможности движка.
Если честно, меня очень пугает неизвестность, неизвестно окупятся ли потраченные силы и время, неизвестно как люди реагируют на монетизацию, не исследованы другие рынки, кроме российского, в общем недостаток опыта и времени сказывался.
Чтобы не отступать сильно от первоначальной игры, я решил выпустить игру в жанре Elasto Mania, в свое время она мне очень нравилась. Первоначальная концепция была таковой: классический уровень с горками, разнообразие транспорта: велосипед, мотоцикл, машина, джип. Немного поразмыслив пришла мысль, что было бы не плохо не просто кататься, а что-нибудь делать, остановился я на идее перевозить камни и другие минералы. В игре будут представлены несколько грузовиков, идея понравилась, но прежде следует изучить рынок. Такое маленькое количество конкурентов на Windows Phone меня просто поразило, несколько убогих проектов и пара более-менее проработанных игр, а на платформе Windows 8 дела обстоят еще хуже. Судя по отзывам игры подобного жанра пользуются спросом. После этого я окончательно решил, что игре быть и взялся за проработку концепта и игровой механики. Идея игры была рассказана паре друзей и в целом она им тоже понравилась, что подтвердило, что этот жанр и мои мысли идут в правильном направлении. Да перебегать с одного на другой проект не хорошо, но думаю в моем случае это был оправданный выбор.
Через некоторое время родился концепт документ. Стоит отметить одну очень мудрую мысль в написании концепта «Стоит продумывать детали от общего к частностям», те сперва стоит продумать общую концепцию, а только потом спускаться вниз. Чтобы не размазывать время, я решил поставить себя в жёсткие временные рамки по выпуску игры. Описание игры на бумаге вскрыло большое количество дыр и до сих пор вскрывает, но без этого никак.
План был такой:
  1. Конец октября, разработанный концепт игры, начало работ над игровым прототипом
  2. Ноябрь, привлечение дизайнера, создания графического контента, работа над игровым прототипом
  3. Конец ноября, готовый прототип игры
  4. Начало декабря, создания музыкального контента, создание игрового процесса, создание игрового контента, тестирование игры, работа над балансом в игре.
  5. Середина декабря, подключение платежных систем, предрелизная подготовка, создание обзоров и подготовка к рекламной компании.
  6. Крайний срок релиза 20 декабря

В целом план вроде как на начало октября казался реальным и до конца ноября я его придерживался. Но потом все пошло немного не так как планировалось. Но начну все по порядку.
Первые проблемы, где взять графический контент, сперва я обратился к друзьям художникам, но к сожалению, все они отказали сославшись на занятость. Изначально я хотел привлечь художника на процентах, по двум причинам – заинтересованность в проекте, тк у меня с художественным восприятием мира так себе, если можно так выразиться, а также не очень хотелось тратить кровно заработанные. Тут собственно и пригодился концепт, он и отправлялся художникам для оценки труда. Кинув зов по инету я пришел к не очень хорошим выводам, что согласны на такие условия только школьники с качеством работа ниже даже моего плохо развитого чувства прекрасного. Такой расклад меня совсем не устраивал и решено было узнать про цены на фрилансе и отдать туда. Расставаться со своими кровными совсем не хотелось, но и другого выбора я не видел. После оценки труда затрат, родилась не плохая мысль: предложить % + деньги, в целом на таких условиях люди стали соглашаться и было из чего выбрать.
И так работа закипела, стали появиться первые наброски машин и карт:



Первая неточность в расчете графика и срока релиза - это прием работ. Тут стоит немного отступить и раскрыть небольшие особенности игры. Игровой уровень представлен независимыми блоками, на момент старта игры их решено было сделать 18, также между собой они поделены по сложности, пока на 3 уровня. При старте карта формируется из этих блоков. Те одним из требований к контенту, что визуальные составляющие этих блоков должны стыковаться между собой, как оказалась это не самая простая задача. После чего текстуры попадали ко мне, в редакторе я создавал физическое представление мира по этим текстурам и уже созданный блок вставлялся в карту. Мы провозились очень долго, пока не была придуман способ проверки.
Как все гениальное, он был довольно просто – была написана программа в пару строк: проверяем нужную папку, подцепляем файлы изображений все, выводим все их в ряд во всех возможных вариациях каждый с каждым, да теперь проверка требовала тоже времени, все-таки для одной только карты 324 варианта стыковок блоков, но уже стало намного проще.
Второй подводный камень, совсем не верно было выделено время на создание уровней, да, сами уровни и машины создавать не так сложно, но вот места выгрузки и загрузки требуют не малого времени и парой конечный результат совсем не радует.
Все это сместило сроки по проекту как минимум на полтора месяца, а выпускать игру перед самым новым годом толку мало, решено было релиз перенести на после новогодних праздников, на первую половину февраля.

По поводу музыкального сопровождения, я обратился в пару студий цена вопрос встала в районе 300-600 убитых енотов, если честно я прифегел, изначально я планировал на музыку отдать не больше 5 000 руб. Но с этим вопросом мне помогает разобраться мой друг, сейчас уже сделана половина звуков и пока результат мне очень нравится.


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

понедельник, 30 декабря 2013 г.

Итоги 2013 года

Я хотел бы подвести итоги уходящего года, чего удалось достичь за год, что осталась только в планах и что планируется на Новый 2014 год Лошади.

Слова любимым

Приложение за год существенно развилось, добавилось большое количество новых поздравлений, в планах добавить возможность отправки сообщения через социальную сеть вконтакте. Также появилась небольшая группа в вконтакте. На этом приложение были проведены существенны работы по изучению рекламы в приложениях.
Также имеется версия под Windows 8, там счетчик немного странные цифры показывает я сомневаюсь в их адекватности, нужно будет решить этот вопрос, как-то только устаканиться вопрос с 8.1 и дойдут руки.
Сейчас приложение участвует в конкурсе «Лучшее приложение года» и имеет не плохие шансы, не забудьте проголосовать, если еще этого не сделали! ;-)
За год, бесплатную версию приложения, скачали 270 000 пользователей, а суммарное количество пользователей перевалило за 325 000, это очень хорошие показатели, а платную 3 250.
За 2013 год рост посещаемости составил более чем в 2.5 раза, но на самом деле он намного больше, тк счетчик посещаемости появился в октябре 2012 года, пока пользователи обновились, да и сравнивать праздничные месяцы в начале года с концом, не очень правильно, тк приложение ориентировано на праздники, но даже так. 

Web – название самого первого счетчика в приложение
Paid и paid buy – платная версия приложения не купленная и купленная соответственно
Free – бесплатная версия приложения

AlienStorm

AlienStorm – игра и игровой движок для 2д игр, вид сбоку с физикой и другими интересными вещами.
Разработка игры началась зимой 2012 года, в 2013 году она была полностью переосмыслена и стал разрабатываться игровой движок под эту игру. Работа над ним была проделана не малая, а если учесть, что он писался в свободное от основной работы время то для меня он вообще золотой. К концу года движок уже практически был готов и первой игрой на нем планировала выйти, как раз AlienStorm. За время его написания, я уже довольно сильно оброс знаниями, чтобы понять, что начинать стоит с чего-то по проще, ведь по мимо того чтобы сделать игру есть много других вопросов, о юзабилити, о монетизации, о раскрутке. Проект AlienStorm задумывался изначально довольно масштабным, после небольших размышлений и оценки текущего рынка игр, осенью этого года, родился еще один проект, о котом я пока не чего не говорил, Trucking mania это небольшая игра в лучших традиция эластомания.

Именно она будет первой игрой на движке AlienStorm. Изначально она планировалась к самому концу 2013 года, но к сожаление сроки пришлось немного изменить и планируется выпустить её в начале 2014 года. Более подробно о не я расскажу в цикле статьей «Записки программиста».

Вот собственно и все что произошло за 2013 год и ожидается в начале 2014, я считаю, что в целом неплохо для хобби, ведь есть еще основная работа и девушка :-)

Поздравляю всех с наступающим Новым 2014 годом! Желаю творческих успехов! Чтобы все Ваши зарождающиеся проекты доживали до дедлайна и приносили не только удовольствие, но и деньги! Пусть Год Лошади заберет всю лень и дарует максимальную производительность :-D
С НАСТУПАЮЩИМ!!




пятница, 15 ноября 2013 г.

Записки программиста #6. Что мы знаем о монетизации?!

Недавно я задался вопросом, что я вообще знаю о монетизации мобильного приложения.
Я думаю стоит выделить три группы:
  • Реклама в приложении
  • Продажа приложения
  • Покупки внутри приложения
Остановимся на каждой группе в отдельности.

Реклама в приложении
Я бы ее разделил на две большие категории:
  1. Реклама внутри приложения, как баннер как правило 480*80Это один из самых простых способов рекламы. Вы выбираете рекламного провайдера по региону в котором у него есть реклама, а лучше выбирать как можно больше и оставлять за собой возможность регулировать выбор без обновления приложения. Это необходимо делать для того, чтобы если у одного из провайдеров будут низкие цены на клики можно было переключиться на остальных.В плане получения денег, тут все просто, количество прибыли зависит от времени одной сессии и количества пользователей, ну и от цены за клик у конкретного провайдера.
  2. Большой фул скрин баннер.На текущий момент, я не видел провайдера для российского рынка которые торгуют такими баннерами. Как правило их вставляют в момент старта приложения, в момент выхода или после игровой сессии в играх. Цены за показ такого баннера как правило намного выше, но и недовольство пользователя тоже возрастает.
Добавление рекламы в приложение порождает ряд недовольных пользователей и иногда проскакивают гневные отзывы по поводу рекламы, но если приложение хорошее, а реклама не сильно навязчивая, то их почти нет.
И так, что по поводу денег, этот вопрос наверное интересует всех. Тут как я и говорил, все просто - 10 000 сессий в день * (10 минут на одну сессию / 30 сек показ баннера) = 200 000 показов баннера в день. Цена за 1000 показов в районе 6-10 рублей (это в переводе на клики, в текущих реалиях среди российских провайдеров рекламы на Windows Phone). 
200 000 / 1000 * (6-10)=1200-2000 рублей в день. Откуда брать статистику? Вы все еще не прикрутили не google analytics или flurry, ну вы даете…
Немного еще цифр, нахождение на первой странице в серединке, в разделе топ бесплатных среди российского рынка дает примерно в районе 1к загрузок в день.
И на последок, очень вкусным я считаю, заключение рекламных отношений с какой ни будь компанией, в рамках рекламы её или её продукции внутри вашего приложения, но все мои изыскания в этом пока потерпели неудачу, возможно просто мало этому уделяю времени.

Продажа приложения
Я использую ставшую уже классической схемой. Есть раскрученное бесплатное приложение с рекламой и есть платное без рекламы, которое рекламируется в бесплатном.
За все время существование платной версии, а это 8 месяцев было 183 покупки по 33 руб
– 30% магазину = 4183,20 руб. Бешенные деньги =)
Некоторые добавляют расширение функционала в платной версии, это приносит значительно большую прибыль, но в сравнении с рекламой в тех же приложениях она существенно меньше.
Также, если с триалом все просто, купил человек платную версию открылись новые уровни, а в вопросе покупки другого, платного приложения, то что-то нужно делать с игровым прогрессом, а то многие пользователи будут не довольны, что порождает лишний геморрой.
Если судить по магазину, то крупные издательские дома выпускают платные приложения, которые хорошо оттестированы и как правило не обновляются. Тут в первую очередь играет опыт издателей в плане, что они хорошо уже знаю, что нужно игрокам, знают, как правильно раскрутить игру и отбить свои затраты. Насколько это хороший способ в прибыли не возьмусь сказать однозначно, тк пока мало опыта в этом и нету понятия как у них устроит процесс выпуска игры на рынок.

Покупки внутри приложения
Название говорит само за себя и на текущий момент наверное самый вкусный кусок пирога, на нем я постараюсь остановиться побольше, во первых из-за своих коварных интересов в этой области, во вторых упорядочить то, что я уже знаю и немного подчерпнуть новых знаний.
Почему вкусный кусок пирога? Да потому, что переход игры с pay-to-play на free-to-play приносит довольно серьезный доход, а если привнести в реалии мобильной разработки то и продвигать бесплатные/условно бесплатные игры намного проще.
Исходя из этого, свою новую игру я буду монетизировать по схеме f2p.
Давайте попробуем разобраться, что это за зверь и что и как следует делать…
Про различные способы монетизации хорошо написано в статье на хабре «Мошеннические методымонетизации в free-to-play играх» и «Игры free-to-play: как сделать их успешными». Есть еще куча других статьей, но я считаю, что это наиболее полезные.
Из всего, что написано в статьях и крутилось у меня в голове, я выделил бы несколько аспектов:
  1. Первый уровень должен отлично выверен, чтобы пользователю с первых минут понравилось играть именно в эту игру, тк я считаю, что именно первая сессия определяет, будет ли он играть в нее в дальнейшем. Интерфейс должен быть максимально простым и понятным, чтобы как можно меньше шагов отделяло игрока от игры, а игровой хелпер коротким и не навязчивым.
  2. Плавный прогресс в игре, ведь чем дольше он будет играть, тем больше шанс, что он что-либо купит.

Вывод:
У меня пока очень мало навыков, чтобы создать эффективную модель монетизации по типу free-to-play, но оступаться я не собираюсь. Поэтому, пока, я решил довольствоваться малым. Игру я позиционирую как убийцу времени, поэтому игра должна быть интересной и иметь возможность пройти ее полностью без вложения денег. Вложение денег существенно упростит и ускорит прогресс в игре, но не более. Валюта в игре будет единая, вводить дополнительную валюту я не вижу смыслы. Так же если игрок покупает единовременно больше денег, то он получает скидку в виде дополнительной валюты.

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

среда, 13 ноября 2013 г.

MD5Core старый баг...

Недавно на работе, работая над мобильным xmpp клиентом, столкнулся с такой забавной вещью при авторизации, никак не получалось авторизоваться на рабочем сервере, с корректными данными, используя md5. Unit tests с тестовыми данными проходят, путем долго дебага и сравнивания нашли проблему в либе MD5Core.
Оказывается - эта либа считает неправильно хеш, если длина равна 56, 120, 184, 248 и тд…
На это наткнулся после 2 лет успешного использования, мда, жизнь меня к такому не готовила…
Ошибка оказывается это известная от 5 июль 2011…
Лечиться путем изменения
if (cbSize <= 56) на  if (cbSize < 56)
Забавно до слез!