Как мы делали ретрошутер «Бунт: Блок Ч»
Недавно мы выпустили «Бунт: Блок Ч» — шутер от первого лица про зачистку тюремного комплекса, в котором начался бунт.
Игрок попадает в некий блок «Ч», пробивается через камеры, котельные, карцеры и двор, ищет ключи и переключатели, открывает тайники и постепенно добирается до боссов.
Проект начинался с небольшого браузерного прототипа. В нём уже можно было ходить по уровню, стрелять и отбиваться от заключённых. Затем прототип стал расти, и вокруг коротких перестрелок появилась кампания из двадцати уровней.
Игру мы собирали вместе с Codex. Часть артов и моделей создавалась с помощью ИИ, после чего их приходилось дорабатывать.
Сначала были коридоры и несколько врагов
Первая версия была устроена довольно просто.
Игрок появлялся в тюремном блоке, собирал оружие и убивал нужное количество противников. После убийства нужного количества врагов, открывался выход на следующий уровень.
Для раннего прототипа этого хватало. Уже работали основные вещи:
- вид от первого лица;
- пять видов оружия;
- разные противники;
- взрывающиеся бочки;
- тайники в стенах;
- подбор патронов, брони и аптечек;
- физика тел после смерти.
По мере тестирования стало понятно, что одной лишь стрельбы, мало. Уровни проходились слишком быстро и были похожи друг на друга.
Тогда в игре появились ключи, запертые двери, переключатели и отдельные помещения, которые нужно исследовать. Выход перестал открываться сам по себе. Сначала приходится найти путь к пульту, пережить несколько боёв и только затем возвращаться к двери.
Кампания из двадцати уровней
Кампанию мы разделили на четыре главы. У каждой главы свои помещения, освещение, набор противников и опасности.
Первые уровни знакомят игрока с обычными врагами и основами стрельбы. Дальше появляются поджигатели, стрелки, крепкие противники, бомберы и враги, которые оставляют кислотные лужи.
Каждый пятый уровень заканчивается встречей с боссом. Боссы получили отдельный запас здоровья, собственные атаки и поведение. Один делает тяжёлые удары вблизи, другие используют дистанционные атаки и заставляют постоянно бегать.
С боссами пришлось поработать отдельно. После первой итерации их можно было без особого риска водить по кругу и расстреливать. Позже мы добавили проверку дистанции, переработали ближнюю атаку и усилили давление на игрока во время боя.
Как устроена генерация уровней
Большая часть уровней собирается заново при каждом запуске.
Генератор создаёт комнаты и коридоры, соединяет их, выбирает места для врагов, предметов, тайников, ключей и выхода. Благодаря этому знакомая глава каждый раз проходится немного иначе.
Но у генерации есть ограничения. Между стартом и переключателем должен существовать проходимый маршрут. Ключ нельзя положить за дверью, которую он открывает. Пульт не должен оказаться в той же комнате, что и запертый выход. В комнатах должно хватать противников, а пустые помещения не должны занимать половину уровня.
После добавления декора список правил стал заметно длиннее.
Сначала трубы перекрывали окна. Компьютерные стойки вставали перед дверями камер. Решётки висели в воздухе или закрывали соседний проём. Ключ мог лежать внутри стены, а оружие вращалось внутри двери.
Для каждого крупного объекта мы задали свою область и запретили пересечения. Трубы, шкафы и оборудование получили коллайдеры. Для настенного декора появились отдельные проверки свободного места.
В процедурном уровне мало было сделать красивый объект. Генератор должен понимать, где этот объект разрешено ставить.
Пять видов оружия
В игре есть дубинка, пистолет, дробовик, автомат и тяжёлое оружие.
Дубинка выручает, когда закончились патроны. Её дальность удара несколько раз менялись, потому что удар с слишком коротким расстоянием часто не доставал до противника.
Пистолет остаётся надёжным оружием для точной стрельбы. Автомат быстро расходует боезапас, зато хорошо справляется с группами. Тяжёлое оружие подходит для крупных целей и скоплений врагов.
Больше всего времени занял дробовик. Мы меняли разброс, дистанцию и урон дробин. Позже добавили пробивание нескольких противников: первая цель получает полный урон, следующая — 66%, третья — 33%, четвёртая — минимальный урон.
Так дробовик остаётся самым сильным оружием в тесном коридоре.
Для выстрелов мы добавили вспышки, отдачу оружия, движение камеры и реакцию прицела в разных ситуациях. Попадание по противнику сопровождается отдельным визуальным откликом. Удар дубинкой тоже получил собственную реакцию, чтобы контакт ощущался весомее.
Противники и их поведение
У каждого класса противников свои здоровье, скорость и способ атаки.
Обычные заключённые стараются сократить дистанцию.
Стрелки ищут позицию для ведения огня.
Щитовики прикрывают себя.
Поджигатели бросают бутылки,.
Бомберы опасны даже после того, как игрок подошёл слишком близко.
Со временем к базовым правилам добавились и другие:
- противник замечает игрока только в пределах обзора и при прямой видимости;
- получив урон, он реагирует независимо от расстояния;
- атакованный противник предупреждает союзников в соседних помещениях;
- потеряв игрока и не получая урона некоторое время, он прекращает преследование;
- взрывы задевают окружающих противников и самого игрока.
Навигация оказалась одной из самых капризных частей проекта.
Враг мог повернуться к игроку и остаться на месте. Несколько противников иногда выбирали одну точку и собирались в углу. На длинном маршруте скорость движения менялась из-за слишком частого перерасчёта пути. Бывали и обратные ситуации, когда враг замечал игрока сквозь стены и из-за углов.
Поэтому одной карты навигации оказалось недостаточно. Понадобились проверки прямой видимости, запасные точки движения, выход из застревания и разведение соседних агентов. Теперь противники способны передавать сигналы группе и искать путь к месту, где они заметили игрока.
Документы и развитие между уровнями
На уровнях спрятаны документы. Они рассказывают о событиях в блоке, заключённых, сотрудниках и причинах бунта.
Документы также связаны с развитием персонажа. За найденные документы игрок получает очки, которые можно потратить между уровнями на прокачку перков.
Перки разделены на общие и оружейные. Общие немного повышают здоровье, урон, запас патронов или скорость перезарядки. Оружейные же ветки развивают конкретное оружие: меняют его боезапас и эффективность в подходящей ситуации.
Баланс полной прокачки мы проверяли отдельно. Складывающиеся бонусы быстро превращали отдельные виды оружия в имбу. Поэтому прибавки сделали небольшими, а специализации распределили по веткам.
Визуальный стиль
Мы выбрали низкополигональную графику с крупными пикселями, с освещением и ограниченной палитрой. Нам хотелось получить грубую картинку как в старых шутерах.
С текстурами окружения возникла отдельная проблема. При растяжении модели кирпичи и плитка превращались в длинные полосы, а после общей правки сетка на некоторых объектах стала вдвое плотнее. В итоге масштабирование пришлось считать по размеру поверхности, а не задавать одним значением для всего уровня.
Также пришлось следить за направлением полигонов. Перевёрнутая грань делает стену прозрачной с одной стороны. Одна такая ошибка способна открыть игроку соседнюю комнату, вывернуть пол или превратить обычную перегородку в одностороннее зеркало.
Сохранения
По мере роста кампании увеличивался и объём сохранения.
Игра запоминает текущий уровень, найденные документы, открытые записи, перки, достижения, настройки и часть статистики. А после обновления игры старое сохранение должно пройти миграцию и сохранить все доступные данные.
Одна из сборок показала, насколько легко здесь ошибиться. Кнопка «Продолжить» находила файл, но новый формат не принимал часть прежних полей. В результате игрок видел начало кампании и считал, что прогресс исчез.
После этого мы добавили резервные копии, более осторожную миграцию и проверку загруженных данных до их сохранения в новом формате. Для площадок с облачной синхронизацией пришлось учитывать ещё и конфликт локальной и удалённой версий.
Кто в итоге сделал игру
Основная идея, правила, проверка сборок и решения по развитию проекта оставались за нами.
Codex помогал писать и перерабатывать код, искать причины ошибок, готовить тесты, собирать версии и приводить в порядок большие объёмы игровых текстов.
Другие ИИ инструменты использовались для части арта и вариантов оформления.
Самым долгим этапом стала обычная итерация. Запустить уровень, увидеть застрявшего врага или трубу перед окном, исправить правило генерации, собрать новую версию и проверить всё ещё раз.
Сейчас в «Бунт: Блок Ч» есть двадцать уровней, четыре главы, пять видов оружия, несколько классов противников, боссы, документы, тайники, достижения и система перков.
Поиграть в браузерную версию можно на
Яндекс Играх, VK Play и VK Mini Apps, а совсем скоро и в Steam
Если будете играть, нам особенно полезно узнать, как ощущаются стрельба и сложность кампании, хватает ли патронов и где противники ведут себя странно.