Всё о разработке игры Not Battle City

January 1, 2021 - Reading time: 5 minutes

Недавно выла выпущена игра, посвященная моей любимой игре на NES - Танчики Battle City. Игра бесплатная и уже доступна на сайте itch.io:

Далее я расскажу, что из себя представляет ремейк игры, а так же саму разработку.

Название Not Battle City было выбрано ещё в начале разработке от балды, но так как мне не удалось придумать название по лучше - решил оставить как есть. К тому же можно сделать игру слов - "Нет, это не Танчики, это - "Не Танчики"" (No, it's not "Battle City", it's "Not Battle City").

Сделать именно такую игру я решил по нескольким причинам: 1) Хотел иметь хотя бы один завершенный проект на MonoGame; 2) Как то отвлечься от предыдущего проекта, на который потратил больше года; 3) Идея сделать такую игру родилась ещё в 2013 году, и всё это время я бывало вспоминал о ней.

Так, в октябре 2020 я начал разработку.

Так меня приветствовала Visual Studio почти каждую неделю

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

Вражеский ИИ научился передвигаться

Выстрел!

Но что бы было не так "имбово", точность выстреля будет зависит от радиуса кружочка от прицела: чем он больше - тем выше погрешность выстрела. Погрешность плавно понижается если курсор не двигать и не перемещать танк (и на оборот). В итоге, что бы сделать точный выстрел - нужно как минимум секунду не двигаться.

Дальше мне захотелось добавить ещё больше реализма - рикошет!

Рикошет - это когда снаряд вместо нанесения урона просто отскакивает от танка, слегка меняя угол полёта. менялся много раз. В начале это был шанс в N процентов, но потом было решено ещё более реалистичным заменить на формулу. Рикошет мог сработать в 100% случаи, когда снаряд попадает по танку, который стоит под 45 градусов относительно траектория полета этого снаряда (я много нервов потратил на такую формулу).

Ну а потом я научил стрелять ботов...

Играть стало в разы интереснее. Да, погрешность выстрела у бота тоже есть, но бот стреляет сразу как точность будет достаточно высокой. В таких условиях победить бота можно было только если заранее караулить его. Поэтому пришлось добавить ему искусственную задержку перед выстрелом.

Дождь из башен

Что бы сделать игру интереснее, не хватало лишних спецэффектов. Например: след от гусениц:

В финальной версии они конечно менее заметные по ряду причин, но натереть своё любое укрытие было возможным:

Неудачные эксперименты с дымом:

Далее я добавил разрушаемость (система была заранее протестирована на стресс-тест):

Однако игра была легкой из-за того, что вражеские танки всегда были на виду. Поэтому я решил сделать их невидимыми, пока не попадут в поле зрения танка игрока:

Вау, стало ещё интереснее! Теперь раскатывать по карте в открытую и убивать всех на лево и на право уже не выйдет. Находится в открытой области стало смертельно опасно - один точный выстрел и ты убит. Даже когда боту нужно время на прицелиться и "подумать", игрок может не успеть вовремя отреагировать, когда не знает заранее где враг. Если в панике сделать выстрел, то точность может быть всё ещё высокой и снаряд пролетит мимо, а времени на спрятаться уже не будет.

Продолжаю добавлять контент: 4 тира танков и радар. Из всех доступных бонусов оригинальной игры, я на первое время взял временное бессмертие. Оно понятно как работает. Радар же позволял временно увидеть противников на карте (однако показывал только позицию, но не уточнял какой конкретно там танк).

Добавил к танкам систему повреждений. Суть такова: у танка есть уровень, который зависит от тира самого танка (от 1 до 4). Защита и урон равен этому уровню. Что бы уничтожить танк - нужно нанести урон выше его уровню защиты. Если же урон ниже или равен защите, то танк выживает и помечается как "поврежденный". В таком состоянии любой следующий урон будет смертельным.

Однако, уровень защиты танка варьируется от того, в какую часть танка попадет снаряд. Передняя часть укреплена, поэтому попадание по этой части увеличивает защиту танка на 1. Задняя часть танка наоборот - слабо укреплена (защита -1). По бокам нет эффекта.

В итоге, стрелять танку в 'лоб' крайне неэффективно.

Что насчет вражеского танка 4-го тира, его я решил сделать особенным. Он самый толстый, но медленный. Его конечно можно убить с одного выстрела, НО - если то сделать не удастся, то танк включить бессмертие на 30 секунд (который можно сбить сразу выстрелом).

Скрытая механика: учитывая, что вражеских танков не видно за блоками - для них был добавлен звук мотора. Однако он не статичный (как в оригинале), а динамичный. Громкость зависит от дистанции ближайшего врага (чем ближе - тем громче). Плюс к атмосферности (и некоторым фобиям). Эта механика хоть как то позволяет понять, что где то рядом враг...

Скольжение по льду:

Работает почти как в оригинале - танк продолжает движение некоторое время.

Уровней в игре 15. Некоторые всё ещё продолжают обновляться для баланса. В оригинальной игре было 35 карт, но там они меньше по размеру и проходятся быстрее. Какой-то конечной цели тоже нет. После прохождения последней 15 карты начинается второй цикл, при котором резко повышается сложность (враги быстрее спавнятся и стреляют почти моментально). На третьем цикле враги смогут подбирать бонусы (если конечно кто-то сможет пройти второй цикл).

Моей целью было доделать игру до конца 2020 года, поэтому многие идеи пришлось отложить. Отполировав интерфейс и баланс, выложил игру в сеть. Идеи были следующие:

  • Все запланированные модификации (их более 10)
  • Режим кампании
  • Микро-блоки
  • Мультиплеер

Для кампании нужно будет покупать танки, аблики для него и выполнять миссии. За выполнение миссий даются очки как валюта. Некоторые миссии платные. ТАк же в этом режиме будут новые механики: вражеская артиллерия, минные поля, турели и огромные танк-боссы.

Про микроблоки. Сейчас в игре сетка тайлов 32х32. Хочу уменьшить до 16х16, сохранив при этом структуру карт. Это значит что один блок кирпича будет состоять из 4-х маленьких его частей, которые можно разрушать по отдельности.

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

EFLFE