Dungeon Wizard
Unreal Engine 5 Rogue-Like Game
Isometric, Modular, Procedural
1 Month Group Project
Currently Unreleased as of April, 2024
Dungeon Wizard is a small rogue-like where player upgrade is centered on a spellcrafting system to reach the end of a procedurally generated dungeon.
I acted as a level designer, level artist, and Blueprint (BP) programmer. Most programming work was handled by my friend Archie Short in C++/BP, though I assisted in BP scripting of level module sequencing, AI behavior, stage hazards, and UI. Several other members assisted in additional gameplay concepts and provided original audio work.
At the time of writing, the game is near finished, though my work, documented here, is completed. The game was originally planned as an entry for the 7 Day Rogue-Like Jam, but due to technical hurdles and unexpected team unavailability, the submission deadline was missed.
Design
At the start of the project, our group met and decided on our concept for the rogue-like jam. We landed on a fantasy game in which the player is a wizard that advances their existing roster of spells with new modifiers as they go.
Due to time and workload constraints, the game only features a single "layer" and no boss fight. The player wins by navigating to the end of the procedurally generated level.
You can see our original design plans in a spreadsheet here.
Modular Level Design
Due to the spacial limitations of rogue-likes, it was especially convenient to utilize a modular kit in creating a large number of rooms with consistent dimensions. Eager to work with UE5's modeling mode, I created the core modular kit, myself, in-engine. An additional asset-store pack was utilized for smaller props and characters.
This core modular kit included pieces representing 2x2 meter spaces of varying heights. The origins of the static meshes were set to facilitate the quickest possible usage during level design.
Level design work involved creating a series of room modules with hazards and enemy spawn points. Each room was designed to be entered from either side in order to squeeze more variation from less rooms. Due to the large programming workload on this project, a dynamic system for handling occluding walls did not exist and see-through variations of each modular piece were modeled, along with manually created, rotated room variations.
Enemies spawn in a number of waves and in a quantity depending on the room's size. Smaller rooms get single waves of few enemies while larger rooms get two larger waves. In larger rooms, the first waves included spawns towards the center of the rooms, where the player would not be in at the start, while second waves spawned towards the exits, assuming that the player had moved into the center space while dodging enemies in the first wave.
Rooms feature additional hazards in the form of death pits and swinging blades. Swinging blades create a rhythmic timing challenge as they are placed on thin platforms the player must dodge through while being chased by enemies.
Rooms with death pits feature small platforms the player can dodge boost over to, like stepping stones. Rooms featuring these also heavily featured ranged enemies in order to discourage players from camping on these islands where melee enemies could not reach.
In the end, I created 16 rooms of unique dimension, each featuring several variations that were rotated and featured different door positions, enemy spawns, set dressing, up to a total of 61 rooms.
Blueprint Scripting
I used UE5's BP system for implementing a number of features into the game, including module sequencing, enemies, hazards, and UI.
I created several modular Actor BPs for handling the module system, in which each module had a manager that would communicate with its entrance/exit doors and enemy spawns, in order to facilitate multiple waves of enemies. The tool was designed in a way that new room modules can be created with functioning doors and waves by someone with no programming knowledge.
I scripted two of the enemy types that appear in the game, the heavy and the archer. I utilized UE5's Behavior Trees in tandem with BP scripting in their implementation. The archer enemy maintains a distance with the player from which they fire arrows, while the heavy will slowly stomp towards the player and throw a teleport spell towards them in order to close distance.
I handled the implementation of the main menu, the pause menu, the restart menu, and the player health bar.