Процедурно генерируемое безумие

Всем привет, давно думал сделать на dtf пост про то как я делаю игру, но было лень. Честно говоря мне и сейчас лень, поэтому не спрашивайте каким образом появилась эта статья!

Расскажу вам о том, как я начал и продолжаю делать процедурно генерируемый сурвайвл-рогалик на Unity.

Процедурно генерируемое безумие

Почему процедурная генерация? Потому что это весело и позволяет нанести игрокам больше удовольствия за счет меньшего количества контента (что особо важно для соло разработки). Все игры над которыми я до этого работал были основаны на конечном контенте. И самое неприятное в таких играх, это то что они рано или поздно заканчиваются. Поэтому решил попробовать что-то новенькое для себя.
Расскажу немного про лор игры и чтобы не нагружать лишней терминологией все будет обрисовано общими красками.
События происходят в ближайшем будущем. Некая компания открыла удивительный и особо эффективный источник энергии, но проблема оказалась в том, что для создания этих генераторов требуется крайне редкий металл, который практически не встречается на земле. Поэтому семимильными шагами началось строительство космических кораблей, которые смогли бы добывать металлы в космосе и доставлять их на землю. Не без помощи чудесных генераторов, у них это получилось и первые корабли успешно слетали на луну и доставили на землю достаточно большое количество породы. Но на луне не оказалось нужного металла, поэтому разработки продолжились и спустя некоторое время корабль послали на Марс. По неизвестным причинам, первый корабль вышел из строя и был заброшен на марсе. Но зато он обнаружил тот самый металл под поверхностью. Тогда вслед за ним отправили ещё один корабль, который успешно "загрузился" и полетел домой. Хоть во время полета и были выявлены множественные неполадки, но в компании решили что все обойдется и доставить заветный металл надо любой ценой. Но не обошлось. Во время входа в атмосферу корабль начал буквально рассыпаться на части и орошил достаточно большую территорию вокруг космодрома радиоактивными обломками.
Вокруг места крушения был организован кордон и начата немедленная эвакуация населения, однако вскоре все работы внутри кордона были приостановлены, а количество патрулей и вышек вокруг места крушения удвоено. Помимо самой радиации на месте крушения солдаты и спасатели столкнулись с необъяснимыми вещами: дикие звери вели себя странно, а те что получали несовместимые с жизнью ранения продолжали ходить как ни в чем не бывало. Оказалось, что помимо металлов космолет захватил с марса и некую псевдо-органическую дрянь, которая стала катализатором мутаций на месте крушения.
События игры проходят через несколько лет после катастрофы, когда уровень радиации в ближней к кордону области стал уменьшаться. Первоначально туда начали прорываться мародеры с целью наживиться на заброшенных домах и обломках космолёта, однако вскоре они натолкнулись и на различные артефакты, порождённые беспрерывными мутациями.
На этом моменте вы скорее всего подумали: "Да он просто очередной сталкер делает!". И да, и нет. Я планирую различных мутантов и артефакты, но с точки зрения механик это совершенно иная игра.
Начать хотя бы с того, что это "псевдо-платформер": все локации это сосиски по которым ходишь влево-вправо. Каждая сосиска длинной в 1км и имеет "проходы" на соседние сосиски. Всего в игре генерируется порядка 300-500 игровых сосисок, которые соединены между собой в один большой сосисочный мир.

Извиняюсь за неинформативное месиво, это отладочная отрисовка карты
Извиняюсь за неинформативное месиво, это отладочная отрисовка карты

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

Хрущевки генерируются процедурно
Хрущевки генерируются процедурно

Хоть игра и предполагается как песочница-выживалка, но это ложь и провокация! На самом деле это рогалик (рог-лайт для тех кто передергивает на корректность терминологии). В самом простом сценарии у игрового персонажа проблемы с законом и ему не остается ничего, кроме как скрыться за кородоном и заработать денег, чтобы вернуться назад и сделать себе "новую личность". Цель простая и прямая как палка: заработать миллион денег и подкупить военных, чтобы тебя пропустили в цивилизованный мир. Итак, с каждым прохождением игрок будет пополнять базу данных об артефактах, открывать новый шмот и новых персонажей со своими сценариями.
И чтобы скрасить времяпрепровождение игрока за зарабатыванием денег, как раз таки начинается процедурное безумие!

Процедурное безумие в естественной среде

Первое на что надо обратить внимание это погода в игре. У каждой локации она своя собственная: температура, ветер, давление и т.д. Погода перемещается по глобальной карте за счет фронтов и циклонов. Чтобы все не сводилось в полный хаос, у игры имеется определенный "прогноз погоды" в зависимости от сезона. И в соответствие с ним добавляется больше теплых/холодных циклонов, чтобы менять происходящее в ту или иную сторону. Но честно признаться, система получилась на столько инертной и хаотичной, что эти самые "прогнозы" зачастую не успевают воплощаться в жизнь, как приходят новые и начинают менять погоду уже в другую сторону.

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

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

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

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

Процедурно генерируемое безумие

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

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

Хоть я уже и проделал достаточно много работы, но игра по-прежнему на стадии технодемки и не дотягивает даже до альфы. Впереди ещё много работы и как только будет заметный прогресс, то постараюсь рассказать вам ещё что-нибудь об игре.
А на этом всем спасибо, все свободны! Если вам понравился пост и вы хотите меня поддержать, то можете отправить фотографию красивого кота в комментарии.

47
41 комментарий

Комментарий недоступен

9
Ответить

А в чем проблема? Биндинг оф айзек аналогично процедурно генерируется и я бы не назвал его не интересным.

3
Ответить

Комментарий недоступен

7
Ответить

Комментарий недоступен

4
Ответить

Да почему это априори мех. Если руки из нужного места, есть опыт и деньги на ассеты из стора, вполне можно в реализм, имхо. Грамотную стилизацию тоже не каждый осилит. 

3
Ответить

Ммммм, процедурно генерируемые хрущевки....

4
Ответить

В реальности они стандартизированы - их 1-2 вида. Разница лишь в остеклении который наносили граждане на балконы

1
Ответить