Roguelike
Автор: Никульшин Павел Андреевич БПИ221
Алгоритм генерации комнат
- Игрок заходит в комнату и вызывает триггер "Зашел в комнату".
- Этот триггер вызывает генерацию выходов из комнаты, для этого программа ищет специальные стрелки перехода в новую комнату (в папке Exits) и на их месте спавнит новые комнаты.
- Если стрелка ведет в более сложную комнату, но на ней стоит тэг "Difficult", тогда генерируется более сложная комната, иначе комната той же сложности, что и текущая.
- Если игрок попадает в более сложную комнату, то на входе генерируется аптечка.
- Если данная комната - последняя (победная) вместо обычной комнаты заспавнится финишная комната. В генераторе комнат хранится переменная, которая содержит сколько комнат осталось игроку пройти до финиша.
- После генерации данной комнаты, уже не нужные комнаты удаляются.
Генерация содержимого комнат
- После генерации комнаты, просходит генерация её содержимого.
- В комнате стоит область, в которой будут генерироваться ловушки, враги и бафы.
- Программа генерации объектов получает границы возможной области и всевозможные параметры объектов (сколько и кого нужно заспавнить, какой урон, с какой скоростью двигаются и тд.).
- Программа генерирует поочередно: ловушки (статические), врагов (динамические) и бафы (неуязвимость).
- Для этого выбирается N раз случайная точка из доступной области (при генерации ловушек учитывается их размеры, чтобы они не пересекались друг с другом, в остальных случаях проверок нет) и в ней генерируется нужный объект.
- Для врагов еще случайным образом генерируются две точки, между которыми они будут ходить.
Принцип изменения сложности комнаты
- Если игрок проходит в комнату с такой же сложность, что и предыдущая, то параметры генерации остаются прежними.
- Если игрок проходит в более сложную комнату, то, при её генерации, берутся различные параметры комнаты-родителя (сколько ловушек, как сильно бьют и тд.) и умножаются на задаваемые коэффициенты для этих параметров (Все они хранятся в Data Table и могут быть легко отредактированы). В генерацию новой комнаты передаются уже измененные параметры прошлой.
- Таким образом, при переходе в новую комнату, она либо останется такой же по сложности, либо станет сложнее (но не легче).
Дополнительно
- Из бафов была реализована временная неуязвимость.
- Статическая ловушка представлена в виде шыпов, которые выдвигаются из пола, когда игрок к ним подходит (или пропрыгивает над ними).
- Все важные параметры для генерации комнат хранятся в Data Table.
- Идею по способу генерации уровня увидел в данном туториале тык.
- Также были использованы некоторые бесплатные ассеты из fab.