Небольшая история от том как я стал разработчиком игр. Постараюсь осветить проблемы, с которыми я столкнулся на своем пути, и поделиться некоторыми цифрами. Программистом работаю давно, с 2001 года, компьютерами занимаюсь с детства, но играми начал заниматься лишь в начале 2014 года. И катализатором этого стала статья на Хабре. Где-то в начале 2014го, читая статейки на Хабре, я нашел статью про то, как один молодой человек сделал простенькую игру для ВК. Простая игра про сражение на самолетиках в 2D. Про саму игру в статье было мало, но меня заинтересовало то, что ему предложили продать игру за 700 баксов. Он отказался и потом пожалел, так как игра принесла ему только убытки. И эта «история успеха» как-то меня вдохновила.

Я подумал, неужели я не смогу сделать подобную игру? Да я таких в месяц смогу написать десяток. Изучая вопрос разработки для веба, я решил выбрать флэш, кажется, в той статье была игра как раз на нем, хотя его закат был уже предрешен. Итак, я начал осваивать флэш, смотреть ролики на ютубе, пытаться повторять небольшие примеры. Больших раздумий о выборе того, что я хочу сделать не было, я хочу сделать свой Command&Conquers со своим сервером и юнитами :) Рисовать я не умею, поэтому я взял картинки от оригинальной игры, которые можно найти на просторах интернета. Я думал, что если что-то выйдет, я закажу арт для игры у того, кто это делать умеет. Когда что-то получалось, то я выкладывал видосы и скрины на своей странице в ВК. Уже не помню, сколько времени я этим занимался, но, как я планировал ранее, сделать море игр в ближайшие недели у меня не получилось. Основная работа так же съедала много времени, и я двигался очень медленно. Немного позже мне предложил помощь в проекте мой давний знакомый Дима, также большой фанат стратегических игр. Он придал проекту ускорение. Более того, как оказалось, он был знаком с художником, который уже участвовал в создании подобных проектов для PC. Поэтому у него уже были наработки, модели зданий и техники.

Мы пообщались и решили сделать игру вместе. У нас был один программист, это я, художник Сашка и сценарист Дима. Мы договорились, как будем делить шкуру неубитого медведя, придумали название проекта и взялись за работу. Через некоторое время мы отказались от ВК и начали делать игру под мобилки. Так как часть проекта уже разрабатывалась мной на флэше, то и было решено не уходить с него, используя Adobe AIR, можно было писать практически под любую платформу. ( Небольшое отступление, пишу про флэш, как будто оправдываюсь, если честно, не особо понимаю всех нападок на эту технологию, все как будто вместе обиделись на флэш и дружно ушли с него. Мне вообще нравится флэш, поэтому больше никаких оправданий.

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

Игра не отличалась какими — то фишками, все игровые механики были заимствованы из различных стратегических игр конца 90х — начала 2000х.

Так как игра сделана в изометрическом стиле, то все используемые объекты состояли из заранее отрендеренных картинок. Сейчас их более 8000. Сашка часто их перерисовывал и давал мне наборы, зачастую меняя имена картинок, и это приводило к тому, что и код нужно было править, и в определенный момент пришлось написать уже отдельную программу, которая бы систематизировала картинки и писала код, чтобы этими наборами можно было легко пользоваться. Это экономило много времени. Тумана войны изначально не было, потом я сделал некий костыль из черной картинки, которую “дырявил” овалами, а затем я подсмотрел алгоритм рисования тумана в движке stratagus. Сам ландшафт-карта в игре была нарисована одной картинкой. На карте заранее указывались места, где нельзя было перемещаться. Для этого я написал некий редактор, где можно было обозначить эти места некими прямоугольниками. А уже в игре загружал их в массив и постоянно перебирал, наткнулся ли юнит на данный прямоугольник или нет. Что удивительно, это было очень быстро, да и карты составлялись с наименьшим количеством данных мест. Алгоритмов поиска пути я не знал, и по какой — то удивительной причине решил изобрести свой, несмотря на то, что в интернете можно было нагуглить уже готовые на AS3. Когда юнит натыкался на такой невидимый прямоугольник, обозначающий некое препятствие, например скалу, он начинал поворачиваться по часовой стрелке (на самом деле я уже не помню, в какую сторону он начинал поворачиваться, да это уже и не важно), проверял, может ли он туда идти и продолжал идти, либо снова поворачивал.

Ну и снова ложился на курс. На самом деле, он мог поворачивать в разные стороны в зависимости от ситуации. Это выглядело ужасно, более того, для того, чтобы игроки не теряли деньги из-за тупости сборщиков и разработчика, мы сделали сборку ресурсов с помощью грузовых вертолетов, которые летали, и им не требовалось объезжать препятствия. Такие чудные решения были практически везде. Сам контент я загружал с сервера. Для этого я сделал сервер дома, и он стабильно раз в неделю был недоступен по несколько часов, что не позволяло новым пользователям запустить игру вообще. И вот такое чудо мы решили выложить в магазин приложений гугла. И где-то в ноябре, если верить статистике, 16-го числа 2014 года игра вышла на андроиде. Игра содержала массу ошибок, на некоторых устройствах она могла вообще не стартануть, а если стартовала, могла не запуститься из-за невозможности скачать атласы и миссии, но, на удивление, она была встречена тепло. Многие игроки писали положительные отзывы и просили поправить различные глюки.

image

Постепенно я отказался от домашнего сервера и в качестве хранилища контента для игры, арендовал место для сайта, купил домен, и проблему с закачками на этом закрыл. Художник начал рисовать новую сторону конфликта, Дима начал работать над сценарием кампании. А я решил сделать сервер для игры через интернет. Монетизация в игре была сделана назойливой рекламой, но она ничего не приносила, 50-100 баксов в месяц. Весь этот “доход” мы отдавали художнику.

image
Вот так вот выглядел доход за первый месяц

Сервер игры


У меня был опыт написания сервера на C++, это совсем простое клиент-серверное приложение с использованием сокетов, в котором у меня было 2-3 клиента Но тут требовалось изобрести велосипед покруче. Я выбрал C# так как к тому времени уже долгое время программировал на нем, а также Microsoft SQL Server для хранения статистики. Нагуглил пример сервера на C#, начал разбираться с реализацией сокетов на AS3 (буду в дальнейшем писать про флэш так). Идея была проста, у меня юниты уже имели очередь команд, которые затем выполняли, нужно просто при добавлении команды юниту на одном устройстве, передавать ее на сервер, а сервер будет эту команду отправлять второму устройству, и обратно. А также некие сервисные функции, авторизации на сервере, создание комнаты, контроля версий игры, игра очень часто обновлялась, в нее добавлялись новые юниты, исправлялись ошибки, и это требовало, чтобы игроки играли одинаковыми версиями и т.п. Относительно быстро мне удалось написать рабочий сервер. И, о чудо! мы можем играть друг с другом! Создание комнат я прикрутил намного позже, а вначале игроки просто могли лишь выбрать карту для создания игры, а второй игрок должен был нажать присоединиться к серверу, и тогда они соединялись и играли на карте, которую выбрал создавший игру игрок. И этот сервер располагался снова у меня в квартире. Постепенно я довел мультиплеер до более- менее приличного вида. Сейчас на одной карте могут играть до 8 игроков, в различных вариантах, до 3-х команд. Также статистику игры и некоторые функции можно смотреть на сайте игры, который я написал на ASP.net. Все игры, которые происходят на сервере, сохраняются в xml файлах, которые можно скачать и посмотреть на клиенте с несколькими режимами скорости. Храню реплеи на диске, а не в базе и их накопилось уже достаточно большое кол-во. Не уверен, что это хорошая идея, но запихивать более 100 гиг реплеев в базу, тоже нет желания. За победу в игре начисляется рейтинг, с небольшими изменениями, это рейтинг рассчитанный по системе ЭЛО. Периодически я сталкивался с различными проблемами оптимизации, необходимости разбираться с приемами асинхронности, нехватки места на сервере и многим другим. И я в конце концов арендовал нормальный сервер. Сначала виртуальный, а потом уже настоящий.

Читеры


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

image

Боты


Игроков на сервере было немного. Некоторые стали боятся терять рейтинг и поэтому не играли. Нужно было добавить обезличенного игрока, которому не обидно проиграть и который мог бы развлекать игроков. Нужен бот. Для написания бота, нужно было решить ряд задач. Если очередь строительства зданий написать просто, то нахождение подходящего места на карте для строительства, это уже сложнее. В офлайн миссиях я, например, заранее прописывал для ИИ места, где он мог строить здания. Но если противник будет строить все по заданному плану и ставить здания в одних и тех же местах, будет не интересно, нужно что- то другое. И я придумал, как можно тут схалтурить. Мне не давала покоя мысль, что на сервере хранятся все игры и в них есть все места, где игроки уже строились, играя друг против друга. Нужно просто систематизировать эту информацию и использовать… Так, стоп. А что если я вообще буду использовать полностью стратегию строительства и выпуск юнитов реального игрока, который когда-то уже играл на этой карте и был в том же месте, где сейчас находится бот? Заметит ли кто-то такую подмену? А для честности я еще и буду контролировать выпуск юнитов тем, сколько денег он заработал. Сама игра не эмулировалась на сервере, а работала полностью на клиенте, создавшем игру, и некоторые моменты было сложно понять. Например, сервер не мог знать точного положения подвижных юнитов на карте, информация о положении была лишь в момент, когда юнит заканчивал выполнение команды идти, и еще масса информации была неизвестна серверу. Но я счел их не столь существенными, нужно было иногда передавать на клиент юнитам команду, чтобы они атаковали ближайших противников. Мне показалось этого достаточным. Также я добавил несколько фишек боту, это возможность захватывать свои здания обратно, если их кто- то захватил инженером и не успел продать, необходимость восстанавливать свои здания, если их уничтожили, и многие другие функции, необходимые для выживания на поле боя. На удивление, бот “прижился”. Игроки играют с ним довольно охотно. И даже сильные игроки, немного зазевавшись, иногда могут проиграть своей же тактике, сыгранной месяц назад против того же бота или реального игрока, но все же надо признать, что до хорошего игрока он не дотягивает. Сейчас бот сыграл уже более 311 тысяч игр, и в 40% битв он выиграл.

Платная версия игры


Когда художник полностью нарисовал вторую сторону конфликта СССР, до этого у нас была лишь одна — альянс, мы захотели ее попытаться продать. Я точно не помню, когда в игре появились покупки, но также мы решили еще и сделать платную версию игры, в которой не было рекламы и была вторая сторона без покупки. Многие глюки были устранены и даже появился нормальный алгоритм поиска пути. Карты картинками были заменены на тайловые, которые рисовались уже стандартными инструментами. Кампания была переведена на английский язык, уже нормальным переводчиком, а не собственными силами.

image

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

image

В июне 2015-го года мы запустили платную версию нашей стратегии, и это было совсем не плохо. Игра долго держалась в топах платных стратегий в России и еще в некоторых странах. И принесла где- то 1000$ за первый месяц. Это был первый нормальный доход с игр, я поверил, что этим можно что-то заработать. За все время платная версия на андроиде принесла примерно 22K $ (уже с вычетом гугла).

image

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

Локализация


Про переводы стоит сказать отдельно. В игре сейчас уже 7 языков кроме русского. Большинство переводов мне сделали игроки из разных стран, либо бесплатно, либо за совсем незначительное вознаграждение. Был очень смешной момент. Как-то зайдя на сервак мультиплеера, я заметил резкий рост кол-ва игроков, буквально в 10-ки раз. С одной стороны, это меня обрадовало.

Поглядел статистику показа рекламы, там никаких изменений не заметил. Поглядел некоторые ip игроков, все они были из Китая. Погуглил и нашел на китайских просторах интернета свою игру, полностью локализованную. Кто -то ее распотрошил, перевел все вплоть до картинок и выложил. Также в игре была удалена реклама, разблокированы различные платные функции и т.п. Я смог извлечь из этого выгоду, взял оттуда китайский перевод и поставил себе в игру! Украл перевод из украденной у меня игры. Обновил версии и отключил возможность играть старыми. Удивительным образом игра была очень популярна в Таиланде, хотя не имела локализации из 1.3 М скачиваний 250 тыс скачиваний в Таиланде, который идет первым, за ним Россия с 160 тысячами. Этот график я покажу немного позже.

image

Озвучка игры


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

Музыка в игре была написана нашим художником Александром, а некоторые композиции написал нам Юрий (GraYaSDF).

Реклама


Пока игра не приносила ничего кроме удовольствия, мыслей ее рекламировать не возникало. Потом решил попробовать. Почта была забита предложениями всяких блогеров запихнуть игру в какой-нибудь топ обзор на их каналах. Я несколько раз попробовал такой тип рекламы и полностью разочаровался. Никакого толку от подобных обзоров у меня не было, а денег некоторые просили больше, чем игра приносила за месяц. Единственно, что действительно окупилось, это реклама на 4pda. Там есть некая программа для разработчиков, где вам могут написать статью про вашу игру. И это единственная реклама, которая у меня действительно окупилась. Но тоже, скорее всего, зависит от игры. Никаких инсталляций я не покупал.

image

Так выглядит график установок игры. Определить закономерность, из-за чего закачки могут расти или падать, я не смог. Рост может быть и при росте плохих оценок, а падение — при росте дохода и уменьшении ANR. Один раз при переходе на новый номер андроид sdk я не попробовал проинсталлировать игру на новом устройстве для теста, а там, как выяснилось потом, запретили писать в папку документов, или требовалось специальное разрешение от пользователя. И игра пару дней, как я полагаю, просто не запускалась на новых устройствах. И тем не менее, игра показала большой рост загрузок, к сожалению этого графика у меня не осталось, но мы его обсуждали в своей небольшой команде. Иногда падения носят как будто искусственный характер, это особенно заметно в начале 2018-го года. Они как будто режутся на определенное кол-во. Кстати, это падение было у многих разработчиков.

Другие платформы


Также я выпустил игру на iOS, и потом в стим. Это очень просто, используя технологию Adobe Air. Некоторое время, у меня была даже браузерная версия игры в ВК. Но там даже близко не было тех скачиваний что на андроиде. Поэтому основной платформой для меня является андроид.

Другие мои игры


Я написал про одну игру. На самом деле их уже три. Они по сути являются одной, так как сделаны на одном движке и являются закосами под уже варкрафт — Warage и дюну — Expanse.

image

Заключение


Выпуская последующие игры после первой, которые были уже на голову качественней и более высокой степенью готовности, заметил, что так просто не вырваться в топы гугл магазина, как это было с первой игрой в конце 2014-го. Есть куча контента для стратегий, но заметил, что добавление контента, не приводит к какому-либо росту инсталлов. Поэтому пока не решил, заниматься ли улучшением уже имеющихся игр или начать новый проект, изучать ли новую технологию и вообще заниматься ли играми дальше. В любом случае, даже не осуществив задумку по выпуску множества небольших игр, как мне кажется, я смог провести последние 7 лет с пользой, освоив новое направление. И все благодаря той небольшой статье о самолетиках. Надеюсь моя статья будет кому-то полезна, а может кого-то вдохновит на разработку игр.