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

Зачем использовать разные уровни?

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

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

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

Как генерировать уровни

Мы рассмотрели два возможных способа генерации уровней.

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

Наше решение состояло в том, чтобы вручную создать несколько уровней и использовать их вариации. Для этого мы добавили в нашу игру два новых узла: «GenerationVariation» и «GenerationNOOutOfK».

Первый узел (GenerationVariation) имеет два возможных состояния: выбрано и не выбрано. Если выбран GenerationVariation, он удаляет все дочерние узлы, которые не являются частью selected,
а если GenerationVariation не выбран, все узлы, которые являются частью selected, будут удалены. Таким образом, GenerationVariation может, например, напоминать стену или дверь и, таким образом,
позволяет нам вносить небольшие изменения в созданные вручную уровни. Но эти небольшие изменения могут сильно повлиять на то, как будет проходить уровень.

Но как GenerationVariation решает, выбрана она или нет? Просто, это не так, это то, что делает GenerationNOutOfK. GenerationNOutOfK выбирает n узлов из k дочерних узлов. Таким образом
мы можем, например, разместить несколько столов в комнате, а узел GenerationNOutOfK может выбрать несколько столов для сохранения и отказаться от остальных. Поскольку столы не будут видны в тумане войны, это может привести
к большему количеству сюрпризов для атакующей игры.

Чего мы достигли на этой неделе

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

До следующей недели
- Team Highrise