Map Generation
In order to make each run feel different and unique, I created a two-pass procedural generation algorithm that separates dungeon layout from room placement. It first uses a random-walk strategy with constraint checks to build a cohesive grid layout of standard rooms, backtracking whenever it hits a dead end. Once a layout is made, a second pass analyzes the map to swap specific standard rooms with key focal points like boss, shop, and challenge rooms. The number of total rooms and focal points can be adjusted as well. Given the limited time frame, rather than generating each room, the game uses prebuilt rooms and places a number of them during the map building process.
Combat System
For combat, I implemented a system which uses 2D box colliders to indicate both hitboxes and hurtboxes. I wanted to separate this from the player or any particular enemy so objects/hazards in the scene could utilize these to deal or take damage. For the player and enemys I sync the hitboxes to their attack visuals via the in-engine animator. This way the level designers can easily manipulate where these hitboxes are as well as other values like damage and knockback.
Enemy AI
All enemies, including the boss, use a state machine combined with triggers and semi-frequent raycasts to move around and attack. If the player is not within one of their detection triggers, they will move around idly, using raycasts to avoid walls/ledges. If the player is in the detection trigger, and a raycast from the enemy to the player hits, then depending on factors like the player's relative location, which attacks the enemy has done previously, and if the enemy was just recently attacked, enemies have set moves they can do. This way they feel more alive, reacting to the player's actions.
Credits/Concept Art Menu
For Shape Slasher, I wanted a menu that held all the concept art not shown off in the main gameplay portion of the game, so everyone's work can be properly shown off. I passed the idea onto the team's UI artist/designer and they came up with the idea for half/half menu with credits on one side and a scrolling concept art menu on the other side. The concept art menu was a bit difficult to implement due to the shape and alignment of the buttons, but I made a script to control navigation input and automatically scroll the menu depending on which button was highlighted, making sure the scrolling stops when the top or bottom is reached.