Історія з російського А(АА)-інді геймдеву на одному прикладі



Під катом вас чекає велика і наповнена графікою історія, як група зацікавлених людей за 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 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.