ICanFly посмортем

История разработки одной игры…

pigs_colored

Как все начиналось.

Началось все просто. Я работал в одной фирме по разработке соц. игр. Там же познакомился с Александром. Он геймдизайнер. Александр знал художника Анну. Вообщем-то так и понеслось. Стоит отметить, что у нас у всех был опыт в геймдеве (может и не очень большой, но был). Закрутилось все где-то в ноябре 2011,а закончилось в мае 2013.

Первые наброски.

Концепт.

Концепт.

background

objects_1

objects_2

shop

pigs

Для взаимодействия.

Сразу же после начала работы встал вопрос о том, как вообще взаимодействовать друг с другом (все мы делали игру в свободное от основной работы время). Пробовали использовать бесплатный Project Pier, но не прижился. После полугода, а может быть и раньше, остановились на Google Docs. Плюсы: у всех есть аккаунт, ничего дополнительно не надо ставить, хорошо видно, кто что добавлял, изменял и комментировал. Собственно это нас и подкупило.

Для продуктивности.

Спустя по-моему полгода, мы поняли, что так продолжать будет тяжело. Сроки, которые мы поставили для себя в начале проекта, мы уже давно слили (и не один раз). Проекту не видно края. Ну и тому подобные депрессивные мысли. В ходе обсуждения проблемы было решено использовать некоторое подобие скрама, т.е. одна неделя на спринт. Перед спринтом голосом по скайпу обсуждались задачи, которые сделали и которые планируем сделать. Планируемые задачи заполняли на отдельном листе документа в Google Docs, разделенные по колонкам «код», «арт» и «геймдизайн».

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

Распределение задач.

Распределение задач.

Спустя некоторое время мы пришли к упрощенному виду скрама. Мы просто выписали все задачи, которые нам необходимы для завершения проекта, разделили их на три колонки (см. рис. выше), задали им приоритеты и собственно начали их выполнять. Плюсом было то, что сразу стало видно прогресс над проектом, сколько всего задач осталось, сколько выполнено и т.п. нюансы. Для меня это выступило своего рода мотиватором и помогло ускорить работу над проектом.

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

По коду.

Все самописное. Что не получалось допереть как сделать, подсматривал в интернете.

Для сохранения конфигов игры и прочей информации было принято решение использовать таблицы в Google Docs. Собственно алгоритм очень прост: при старте игра считывала из Google Docs все конфиги, парсила их и запоминала. В конфигах хранится очень разная информация: от силы притяжения земли до типов и свойств объектов в мире.

Настройки игры.

Настройки игры.

Настройки магазина.

Настройки магазина.

Для возможности добавить рандомное распределение объектов в игровом мире, была добавлена возможность задавать вероятность появления объектов через формулы. Для того, что бы игра потом могла их считать, заюзал библиотеку D.eval (пример).

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

Для твининга использовалась библиотека GreenSock. Она всегда меня радовала своей производительностью и простотой в использовании. Всем советую.

Физика — самописная. Для поиска столкновений использовался алгоритм Sweep and Prune. Подробнее на хабре. После внедрения данного алгоритма удалось выкрасть несколько фпс (по данным подсчета методом пристального глаза).

Так как объекты в игре постоянно создаются и удаляются — это заставляло постоянно работать Garbage Collector. Для того что бы не мучать его, было принято решение использовать пулы объектов. На все про все ушло около 3 часов. В итоге после нескольких минут игры, уровень спользуемой памяти устаканивался на одном уровне и больше не рос вверх. Все довольны, все смеются, едем дальше.

Так как практически вся графика в игре растровая пришлось думать о том, как ее сжать. После недолгих поисков была найдена программа ImageOptim для Mac. Под Windows есть похожая FileOptimizer. В итоге удалось выиграть около 1.5 мегабайт.

По музыке/звукам.

Музыку и звуки заказавали у Ressa Schwarzwald, т.к. нам понравилось как она поработала со звуком в игре Always Up.

Эволюция игры.

Первая рабочая версия игры.

Первая рабочая версия игры.

Добавлено немного красок.

Добавлено немного красок.

Попытка сделать бесшовный мир.

Попытка сделать бесшовный мир.

Добавлены элементы GUI, магазин, ачивки и т.п.

Добавлены элементы GUI, магазин, ачивки и т.п.

Добавлены новые типы обеъктов, возможность переодевать свина.

Добавлены новые типы обеъктов, возможность переодевать свина.

Финальная версия игры. Высота игры была уменьшена с 700 до 600 пикселей.

Финальная версия игры. Высота игры была уменьшена с 700 до 600 пикселей.

Эволюция окна магазина.

Первая версия окна магазина.

Первая версия окна магазина.

Вторая версия окна магазина.

Вторая версия окна магазина.

Финальная версия окна магазина. Ачивменты были вынесены на отдельную вкладку.

Финальная версия окна магазина. Ачивменты были вынесены на отдельную вкладку.

Финальная версия окна магазина. Ачивменты.

Финальная версия окна магазина. Ачивменты.

Форум.

После того как разработка игры была на финишной прямой, было решено выложить ее на форум flashgamedev.ru. Всем кто отозвался хочу сказать спасибо, так как ваши советы помогли увидеть то, на что наши замыленные глаза уже не обращали внимания. Так же стало ясно, что у некоторых людей игра не помещается на экран. Это было связанно с тем, что изначально мы выбрали размер игры 500 * 700, а у игроков часто размер экрана бывает n*768. Пришлось перерисовывать прелоадер, главное меню и некоторые элементы интерфейса.

Продажи.

Собственно продажи шли волнами. После первого затишья сделали рассылку. Может совпало, а может и правда рассылка сделала свое дело, но подключились более крупные спонсоры. После очередной волны затишья было решено вызвать Last Call. Цена после Last Call подросла на 10%, что тоже не плохо.

Итого торги длились около месяца и была принята ствака на праймари с возможностью продавать сайтлоки после 30 дней.

Было так же интересное предложение с покупкой праймари и дальнейшим портированием спонсором на мобилки (нам проценты с продаж), но этот спонсор потом сдулся.

Ход торгов.

Ход торгов.

Основная информация по продажам.

Основная информация по продажам.

Запуск игры.

Игра отправилась в плавание где-то в начале апреля 2013 (т.е. от начала разработки игры до ее запуска прошло около 1.5 года). За три месяца игра набрала примерно 370к плеев.  Поиграть можно тут или тут. Ссылки на мочибот: количестко загрузок, клики по more_games, количество побед в игре.

Итоги.

  • 4000 (собственно праймари).
  • 1000 (за перерисованное лого спонсора + новые анимации в игре).
  • 1300 (кизи — вставили возможность использования их валюты и добавили три новых премиум товара: магнит, ракета, камикадзе).
  • Несоизмеримое (опыт).

3 комментария

  1. Попробуйте использовать trello.com, для задач. Очень похоже на ту табличку, которую делали в гугл доках.

    • Спасибо за наводку. Выглядит гораздо удобнее, чем наша таблица с задачами. Обязательно попробуем =) Изначально выбор пал на Google Docs из-за того, что мы могли там же хранить настройки игры и некоторые другие файлы.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *