Под катом вас ждет большая и наполненная графикой история, как группа заинтересованных людей за 2 года создали инди-проект уровня ААА (по их мнению)


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

И. Ефремов, Лезвие бритвы


Вместо вступления



Чем вы любите заниматься, когда проводите время с друзьями? Настольные игры? Спорт? Создание революционного стартапа, где надо загружать свои фотографии с фильтрами в общую ленту? Мы с друзьями все это прошли, хотелось чего-то нового, свежего, чего никто из нас раньше не делал (прочь гусарские шутки). Оказалось, что геймдев — это именно то новое и свежее, чего всем хотелось.

Регулярно играл в игры только один из нас, он же и рассказал остальным про популярную карту для Warcraft 3, которая называется Legion TD. Конечно сработала мощная аналогия с DotA — игра тоже начиналась как карта для Варкрафта, но потом была переделана в самостоятельный продукт, очень успешный. С Легионом похожая ситуация — это очень популярная карта, по ней существует фан-сайты и проходят турниры, но люди по-прежнему играют в карту игры, сделанной в 2003 году. Кажется, самостоятельная игра просто обречена на успех.

Youtube-видео с геймплеем оригинальной игры.

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

Так мы в январе 2015 года приступили к разработке нашей игры.

Немного об игровой механике



У игры довольно необычный жанр — мультиплеерный tower defense.

Игровое поле состоит из двух частей — западной и восточной. Команда западной стороны (минимум 1 игрок) играет против восточной. Между ними находится арена (об этом позже):

image
Игровое поле

Одна сторона состоит из четырех слотов (то есть максимум возможна игра 4х4). Каждый игрок строит юнитов-защитников в своем слоте, а со стороны ворот нападают юниты волны (отмечено красным):

image
Карта игровой стороны

Игра состоит из фаз и начинается с фазы строительства:

image
Фаза строительства

После окончания фазы строительства, появляется волна и юниты автоматически сражаются (тут игрок не участвует):

image
Фаза волны

Прорвавшиеся юниты волны идут кратчайшим маршрутом к королю (King slot). Если игрок 1 не смог отбиться (“протек”), а игрок 2 отбился, то его юниты телепортируются к королю и защищают его:

image
Слот короля, в который зашли юниты волны

Особенность состоит в том, что игроки могут не только строить юнитов-защитников, но и подсылать атакующих юнитов врагу. И тут придется ловить баланс по ресурсам, чтобы защититься самому и атаковать противника. Это порождает большое количество стратегий (уйти в глухую оборону и ждать поздних волн, копить ресурсы и снести противника разом и т.п.) — для этого игроки выбирают, за какую гильдию играют (гильдия определяет набор существ, доступных игроку для покупки)

Первый период



Мы разделились: двое взялись за сервер и двое за клиент. Так как оставалось требование играть в игру каждую неделю, нужно было как можно скорее собрать минимально рабочую версию. Мы начали писать сервер на питоне, на нем же сделали примитивный консольный клиент:

image
Первый игровой клиент. Сверху в виде словаря выведено состояние игрового мира, ниже — построенные юниты (буквы Q)


Первые возможности нашего сервера мы тестировали именно на этом консольном клиенте, но довольно быстро пришли к выводу, что надо сразу сфокусироваться на нормальном графическом клиенте. Мы собрали его на Unity, а для моделей использовали бесплатные ассеты из Unity Asset Store:

image
Первая версия графического игрового клиента на Unity

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

В конце концов, в комментариях на Хабре мы познакомились с дизайнером интерфейсов, которого заинтересовал наш проект и он решил попрактиковаться в дизайне игровых интерфейсов.

Так прошли первые месяцы разработки.

Второй период



Дизайнер лихо взялся за дело и довольно быстро отрисовал нам новый интерфейс (“торпедо”, как мы его потом прозвали):

image
Вторая версия игрового интерфейса

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

imageimageimage
Первые наброски персонажей: гоблин в броне, орк и гоблин-механик.

Мы набрали скетчей на первую гильдию, которую назвали Warfactory и начали думать над тем, каким образом получить модели существ. К тому времени мы уже были широко известны в узких кругах и с нами связался Олег, 3D-моделлер с Украины, который заинтересовался участием в проекте. Он же и приступил к созданию первых моделей, а в нашей команде стало 6 человек:

image22image11image04
Один из первых собственных 3D-юнитов — “тарелка”. До сих пор один из моих любимых юнитов в игре.

image15image25image21
Процесс работы над орком (Orc Bruiser)

Мы начали активнее заниматься проработкой собственной графики, юнитов и карты. Так как в Unity Asset Store бесплатные модели были не очень высокого качества, мы решили, что за пару месяцев сможем сделать свою собственную графику.

image
Скриншот игры той поры. В игре уже добавлен наш собственный интерфейс, а слева можно увидеть ту самую “тарелку”.

По скриншоту заметно, что самое неказистое (помимо всего остального) — плоская зеленая карта с прямоугольными серыми стенками. Мы решили посвятить некоторое время левел-дизайну и сделать красивую карту.

image00image27image23image05image02image08
Некоторые элементы работы над объектами карты

Работа над картой затянулась и мы пришли к выводу, что проблема в недостатке человеческих ресурсов. Мы бросили клич по тематическим группам и довольно быстро нашли ребят, которым было интересно участие в команде — текстурщики, моделлеры и аниматоры. Таким образом, команда разрослась с 6 человек до 12, но мы стали работать сразу над несколькими направлениями. Одновременно скетчилось несколько юнитов, дизайнилась карта и новая гильдия (Order of Dragon).

Третий период



Это период самой активной работы над проектом. Мы созванивались всем коллективом раз в неделю, выделяли блок задач по серверу, клиенту, скетчам, моделям и текстурам, подбивали итоги прошедшей недели и в завершение собрания играли в нашу игру. Постепенно наша собственная графика появлялась в клиенте и это дополнительно мотивировало.

Мы также сошлись во мнении, что первый интерфейс ни на что не годен и сделали вторую версию интерфейса:

image
Внешний вид игры, когда мы активно работали над развитием карты и игровых моделей

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

image
Внешний вид карты, который мы некоторое время считали финальным состоянием

image
Внешний вид игровой стороны (вид из редактора)

Весной 2016 года мы запустили обещанный закрытый бета-тест, на который пригласили первых игроков (суммарно получилось очень мало). Вот такой ролик мы подготовили для закрытой беты:


Ролик, подготовленный нами к первому закрытому бета-тесту.

Четвертый период



Долгая и однообразная работа без ощутимого результата утомительна. Примерно к лету 2016 года стало понятно, что продуктивность упала, команда устала и нужна понятная цель. В качестве такой цели мы выбрали запуск Greenlight, чтобы показать игру сообществу и получить людей для запуска бета-теста. Изначально мы планировали запускать Гринлайт в ноябре, но подготовка графики, промо-ролика и мелких фиксов сильно затянулась, в итоге мы выходим на гринлайт только сейчас.

Для Гринлайта мы еще больше улучшили визуальную составляющую карты, полностью закончили 2 гильдии (Warfactory и Order of Dragon), а также подготовили специальный ролик (его также можно посмотреть на нашей странице в Гринлайте):


Ролик, который мы подготовили специально к запуску Greenlight

Я предлагаю вам посмотреть несколько свежих скриншотов из игры, чтобы сформировать впечатление, как она выглядит сейчас (особенно в сравнении с тем, как она выглядела изначально):

image10image19image29image18
Свежие скриншоты игры

Немного об инструментах



Мы с самого начала старались придерживаться Scrum, соблюдали все основные процедуры: формировали бэклог, проводили планирование итерации, в конце итерации демо и ретроспектива.

В качестве доски мы взяли Trello и какое-то время счастью не было предела. Но с ростом команды оказалось, что не каждый член команды готов поддерживать свои тикеты в актуальном состоянии, перевешивать задачи в “В работе” и “Готовое”. Какое-то время я пытался делать это за них, но казалось, что это ужасно неэффективно.

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

Третий инструмент, к которому мы подошли — таблица в Google Docs

image
Скриншот нашей таблицы за период с июня по ноябрь

Такая таблица позволяет отслеживать готовые задачи и проваленные (отмечены черным). Желтым мы отмечали задачи, сделанные с опозданием. Цветовая разметка столбцов таблицы — разные направления разработки (сервер, клиент, UI, графика). Быстрого взгляда на таблицу достаточно, чтобы увидеть, какие направления буксуют, кто из команды частенько проваливает сроки, а кто наоборот подходит ответственно. Такой формат оказался самым удачным. В качестве вишенки на торте — история изменений файла, чтобы отслеживать ошибки и находить, кто себе “накручивает баллы” (доступ к редактированию таблицы имеют несколько членов команды).

Заключение



В моем рассказе опущены многие интересные моменты: как мы воевали с сетевым взаимодействием и как в итоге его реализовали. Как мы боролись за производительность сервера и целиком его переписали c Python на Go, как мы оптимизировали клиент и добавлали туда графические эффекты. Все это мы можем рассказать в будущих наших статьях. А пока — записывайтесь на бету, оставляйте отзывы и голосуйте за нас на нашей странице в Greenlight!
Поделиться с друзьями
-->

Комментарии (0)