Под катом вас ждет большая и наполненная графикой история, как группа заинтересованных людей за 2 года создали инди-проект уровня ААА (по их мнению)
Тут я полностью старомоден и не выношу гнильцы, привлекающей любителей дичи с тухлятинкой, заплесневелого сыра, порченых людей и некрасивых поступков. Для меня любое произведение искусства, будь то книга, фильм или живопись, не существует, если в нем нет глубоко прочувствованной природы, красивых женщин и доблестных мужчин…
И. Ефремов, Лезвие бритвы
Вместо вступления
Чем вы любите заниматься, когда проводите время с друзьями? Настольные игры? Спорт? Создание революционного стартапа, где надо загружать свои фотографии с фильтрами в общую ленту? Мы с друзьями все это прошли, хотелось чего-то нового, свежего, чего никто из нас раньше не делал (прочь гусарские шутки). Оказалось, что геймдев — это именно то новое и свежее, чего всем хотелось.
Регулярно играл в игры только один из нас, он же и рассказал остальным про популярную карту для Warcraft 3, которая называется Legion TD. Конечно сработала мощная аналогия с DotA — игра тоже начиналась как карта для Варкрафта, но потом была переделана в самостоятельный продукт, очень успешный. С Легионом похожая ситуация — это очень популярная карта, по ней существует фан-сайты и проходят турниры, но люди по-прежнему играют в карту игры, сделанной в 2003 году. Кажется, самостоятельная игра просто обречена на успех.
Youtube-видео с геймплеем оригинальной игры.
К тому времени у меня был опыт в быстро растущей компании, где активно применялись современные Agile-практики и я предложил спроецировать их на наш проект. Мы договорились работать над игрой недельными итерациями, составляя задачи на текущую итерацию в начале неделе и проводя демо в конце. В качестве демо мы выбрали формат игры — мы должны сыграть в нашу игру, воспользоваться новыми фичами, добавленными за итерацию. Таким образом, мы всегда поддерживаем игру в рабочем состоянии, плюс видим прогресс собственными глазами.
Так мы в январе 2015 года приступили к разработке нашей игры.
Немного об игровой механике
У игры довольно необычный жанр — мультиплеерный tower defense.
Игровое поле состоит из двух частей — западной и восточной. Команда западной стороны (минимум 1 игрок) играет против восточной. Между ними находится арена (об этом позже):
Игровое поле
Одна сторона состоит из четырех слотов (то есть максимум возможна игра 4х4). Каждый игрок строит юнитов-защитников в своем слоте, а со стороны ворот нападают юниты волны (отмечено красным):
Карта игровой стороны
Игра состоит из фаз и начинается с фазы строительства:
Фаза строительства
После окончания фазы строительства, появляется волна и юниты автоматически сражаются (тут игрок не участвует):
Фаза волны
Прорвавшиеся юниты волны идут кратчайшим маршрутом к королю (King slot). Если игрок 1 не смог отбиться (“протек”), а игрок 2 отбился, то его юниты телепортируются к королю и защищают его:
Слот короля, в который зашли юниты волны
Особенность состоит в том, что игроки могут не только строить юнитов-защитников, но и подсылать атакующих юнитов врагу. И тут придется ловить баланс по ресурсам, чтобы защититься самому и атаковать противника. Это порождает большое количество стратегий (уйти в глухую оборону и ждать поздних волн, копить ресурсы и снести противника разом и т.п.) — для этого игроки выбирают, за какую гильдию играют (гильдия определяет набор существ, доступных игроку для покупки)
Первый период
Мы разделились: двое взялись за сервер и двое за клиент. Так как оставалось требование играть в игру каждую неделю, нужно было как можно скорее собрать минимально рабочую версию. Мы начали писать сервер на питоне, на нем же сделали примитивный консольный клиент:
Первый игровой клиент. Сверху в виде словаря выведено состояние игрового мира, ниже — построенные юниты (буквы Q)
Первые возможности нашего сервера мы тестировали именно на этом консольном клиенте, но довольно быстро пришли к выводу, что надо сразу сфокусироваться на нормальном графическом клиенте. Мы собрали его на Unity, а для моделей использовали бесплатные ассеты из Unity Asset Store:
Первая версия графического игрового клиента на Unity
Такой клиент уже позволял строить юнитов с гораздо более мелкой сеткой, наблюдать различные их состояния (атака, ходьба), смотреть, правильно ли они перемещаются.
В конце концов, в комментариях на Хабре мы познакомились с дизайнером интерфейсов, которого заинтересовал наш проект и он решил попрактиковаться в дизайне игровых интерфейсов.
Так прошли первые месяцы разработки.
Второй период
Дизайнер лихо взялся за дело и довольно быстро отрисовал нам новый интерфейс (“торпедо”, как мы его потом прозвали):
Вторая версия игрового интерфейса
Мы решили, что такого интерфейса хватает, чтобы тестировать игру без рвотных позывов и приступили к проработке внешнего вида игровых существ. Ни у кого из нас не было опыта проектирования игровой графики, поэтому мы начали с зарисовок. Тут участвовал не только наш дизайнер, но и друзья, знакомые и вообще все желающие приобщиться к отечественному инди-геймдеву.
Первые наброски персонажей: гоблин в броне, орк и гоблин-механик.
Мы набрали скетчей на первую гильдию, которую назвали Warfactory и начали думать над тем, каким образом получить модели существ. К тому времени мы уже были широко известны в узких кругах и с нами связался Олег, 3D-моделлер с Украины, который заинтересовался участием в проекте. Он же и приступил к созданию первых моделей, а в нашей команде стало 6 человек:
Один из первых собственных 3D-юнитов — “тарелка”. До сих пор один из моих любимых юнитов в игре.
Процесс работы над орком (Orc Bruiser)
Мы начали активнее заниматься проработкой собственной графики, юнитов и карты. Так как в Unity Asset Store бесплатные модели были не очень высокого качества, мы решили, что за пару месяцев сможем сделать свою собственную графику.
Скриншот игры той поры. В игре уже добавлен наш собственный интерфейс, а слева можно увидеть ту самую “тарелку”.
По скриншоту заметно, что самое неказистое (помимо всего остального) — плоская зеленая карта с прямоугольными серыми стенками. Мы решили посвятить некоторое время левел-дизайну и сделать красивую карту.
Некоторые элементы работы над объектами карты
Работа над картой затянулась и мы пришли к выводу, что проблема в недостатке человеческих ресурсов. Мы бросили клич по тематическим группам и довольно быстро нашли ребят, которым было интересно участие в команде — текстурщики, моделлеры и аниматоры. Таким образом, команда разрослась с 6 человек до 12, но мы стали работать сразу над несколькими направлениями. Одновременно скетчилось несколько юнитов, дизайнилась карта и новая гильдия (Order of Dragon).
Третий период
Это период самой активной работы над проектом. Мы созванивались всем коллективом раз в неделю, выделяли блок задач по серверу, клиенту, скетчам, моделям и текстурам, подбивали итоги прошедшей недели и в завершение собрания играли в нашу игру. Постепенно наша собственная графика появлялась в клиенте и это дополнительно мотивировало.
Мы также сошлись во мнении, что первый интерфейс ни на что не годен и сделали вторую версию интерфейса:
Внешний вид игры, когда мы активно работали над развитием карты и игровых моделей
Работа над картой очень сильно затянулась, изначально названный срок в 2 месяца вылился почти в год работы. В итоге мы приняли волевое решение отбросить работу над всем остальным и доделать карту до финального состояния.
Внешний вид карты, который мы некоторое время считали финальным состоянием
Внешний вид игровой стороны (вид из редактора)
Весной 2016 года мы запустили обещанный закрытый бета-тест, на который пригласили первых игроков (суммарно получилось очень мало). Вот такой ролик мы подготовили для закрытой беты:
Ролик, подготовленный нами к первому закрытому бета-тесту.
Четвертый период
Долгая и однообразная работа без ощутимого результата утомительна. Примерно к лету 2016 года стало понятно, что продуктивность упала, команда устала и нужна понятная цель. В качестве такой цели мы выбрали запуск Greenlight, чтобы показать игру сообществу и получить людей для запуска бета-теста. Изначально мы планировали запускать Гринлайт в ноябре, но подготовка графики, промо-ролика и мелких фиксов сильно затянулась, в итоге мы выходим на гринлайт только сейчас.
Для Гринлайта мы еще больше улучшили визуальную составляющую карты, полностью закончили 2 гильдии (Warfactory и Order of Dragon), а также подготовили специальный ролик (его также можно посмотреть на нашей странице в Гринлайте):
Ролик, который мы подготовили специально к запуску Greenlight
Я предлагаю вам посмотреть несколько свежих скриншотов из игры, чтобы сформировать впечатление, как она выглядит сейчас (особенно в сравнении с тем, как она выглядела изначально):
Свежие скриншоты игры
Немного об инструментах
Мы с самого начала старались придерживаться Scrum, соблюдали все основные процедуры: формировали бэклог, проводили планирование итерации, в конце итерации демо и ретроспектива.
В качестве доски мы взяли Trello и какое-то время счастью не было предела. Но с ростом команды оказалось, что не каждый член команды готов поддерживать свои тикеты в актуальном состоянии, перевешивать задачи в “В работе” и “Готовое”. Какое-то время я пытался делать это за них, но казалось, что это ужасно неэффективно.
Первым делом качестве замены Трелло мы попробовали командный форум. Каждую неделю публиковался план на итерацию, в конце недели мы сверяли, какие задачи сделаны и по каким просрочка. Эта схема проще Трелло, ее значительно легче поддерживать, но сложно отслеживать, кто затягивает выполнение своих задач или пропускает собрания.
Третий инструмент, к которому мы подошли — таблица в Google Docs
Скриншот нашей таблицы за период с июня по ноябрь
Такая таблица позволяет отслеживать готовые задачи и проваленные (отмечены черным). Желтым мы отмечали задачи, сделанные с опозданием. Цветовая разметка столбцов таблицы — разные направления разработки (сервер, клиент, UI, графика). Быстрого взгляда на таблицу достаточно, чтобы увидеть, какие направления буксуют, кто из команды частенько проваливает сроки, а кто наоборот подходит ответственно. Такой формат оказался самым удачным. В качестве вишенки на торте — история изменений файла, чтобы отслеживать ошибки и находить, кто себе “накручивает баллы” (доступ к редактированию таблицы имеют несколько членов команды).
Заключение
В моем рассказе опущены многие интересные моменты: как мы воевали с сетевым взаимодействием и как в итоге его реализовали. Как мы боролись за производительность сервера и целиком его переписали c Python на Go, как мы оптимизировали клиент и добавлали туда графические эффекты. Все это мы можем рассказать в будущих наших статьях. А пока — записывайтесь на бету, оставляйте отзывы и голосуйте за нас на нашей странице в Greenlight!
Поделиться с друзьями