Lament
A 2D Roguelite game that explores the concept of the five stages of grief.
For the second semester of my second year at university, we were assigned groups and had to adapt a classmate's GDD from the previous semester.
What I built
- ▸A procedurally-generated dungeon, with obstacles and healing items
- ▸A player-upgrades skill tree with prerequisites
- ▸Player movement, interactivity, health and attacks
- ▸Enemy AI — enemy states, attacks, movement and health
Procedurally generated dungeon
An essential part of this game and any rogue-like — this was the key feature I spent most of my time on, fixing bugs and developing features throughout.
The early version of the dungeon was built from pseudo-code found on the Binding of Isaac Fandom Wiki and analysis of the game Moonlighter. It got an early prototype running, but with several bugs:
- Rooms instantiating on top of one another
- Dungeons varying too widely in size
- Room exits leading to dead ends (the wall of another room)
After identifying and fixing these, I wrote up the process in more detail on my blog. I then added further polish:
- Room camera swapper
- Doors closing on player entrance
- Doors opening on room completion
- Variable dungeon size (a public int, adjustable in the inspector)
- Final room — exit / boss entrance

Skill tree
Also core to roguelikes as a whole: completing a run and upgrading the player character to make future runs stronger.
I mocked up the skill tree first to work out the UI layout and what needed building on the code side, then focused on:
- Spending "points" in the skill tree
- Skills depending on prerequisites
- Skills staying unlocked from run to run
The skills didn't do anything yet, but this framework made it much easier to wire up working skills afterward. It's built from:
- A player-skills singleton, tracking the player's unlocked skills
- A player manager, tracking the player's skill points
To apply a skill's effect, I built a method that takes whichever skill the player bought and switches on it to call into the player manager, which also tracks HP, damage, speed, and more. More detail on the build in my blog.
