Project Soup is a 2D open world traditional roguelike RPG with an emphasis on procedurally generated content and emergent gameplay also it was my thesis project. I served as the project's lead designer and lead programmer, working with a team of students who handled art, writing, audio, UI/UX, and additional programming support. The game originally started as a colony sim set in a dungeon with light roguelike elements, but as development progressed, it evolved into a traditional roguelike with a much larger scope.
The game is split into two main areas, the overworld and the dungeon, both procedurally generated. Early on, we hit a major technical challenge with managing and loading the massive open world. My initial approach was to create a fully seamless world with no breaks between areas, but as development continued, I realized this would balloon our development time and create performance issues. My solution was to divide the world into discrete chunks that players could navigate by walking toward the screen edge. This chunk-based system let me implement smarter loading and unloading, which kept memory usage manageable while still maintaining the feeling of an open world.
While researching procedural generation, I came across a this idea that proc gen fails when there's no variation. Players will pick up on repeating patterns and quickly lose interest in exploring generated content. Our early overworld chunks suffered from exactly this problem. They were flat, featureless, and boring to explore.
To solve this, I implemented a cellular automata algorithm for generating rock formations. Think of it like Conway's Game of Life, but repurposed as a map generator. The algorithm would iterate over the chunk grid, applying rules about neighboring cells to create organic-looking rock clusters. This created interesting landmarks in each chunk and added both visual variety and navigational challenge.
One of the coolest features we developed was a procedural book generator. Using Markov chains trained on public domain literature, we created a system that could generate completely unique books for players to find in the game world. Did these books make sense? Not really. But were they interesting and weird? Absolutely. It gave the world the illusion that people had lived in it.
For towns and villages, I built a modular building system using Unity's tilemap tools. I designed various house templates with different materials, layouts, and architectural styles, then wrote a system to serialize that tilemap data into scriptable objects. At runtime, the town generator would procedurally place and arrange these houses, mixing and matching styles to create settlements that felt distinct from one another. Each village had its own character based on which building types appeared and how they were laid out.
On the programming side, I worked with another programmer to implement the game's core RPG mechanics. We built out an experience and leveling system, a turn-based combat system, and a spell and magic system.
Beyond combat, we implemented a skills system that allowed players to have different playstyles, an NPC system with dialogue trees, and a trading system that let players buy and sell items. Getting all these systems to talk to each other was one of the more challenging integration tasks. Making sure that skill levels affected combat effectiveness, that NPC relationships influenced trading prices, and that the turn-based system properly handled both player and AI actions required a lot of careful debugging and refactoring.
This was the first real game project I had led, and it taught me a ton about team management. I learned how to break down large features into assignable tasks, how to communicate technical constraints to artists and designers, and how to manage scope when your ambitions exceed your timeline. One of the biggest lessons was learning when to cut features, knowing the difference between what would be cool to have and what was essential to ship. I also got better at setting realistic milestones and managing team expectations, especially when technical challenges forced us to pivot our approach.