Going down a roguelike rabbit-hole

August 17, 20252 min read

I fondly remember being introduced to roguelike games when I was in college. Several people in my friend group played UMoria and I really remember enjoying how little I knew about what was happening. I wasn’t a big fan of LoTR (I know, blasphemy) but Moria was a neat jumping off point.

Lately, I’ve wanted to look into how rougelikes are built, and because of that I’ve started looking into some resources online. Though I’m not a fan of reddit in general, I have found the rougelike development subreddit to be a great place to start.

I found a ton of tutorials and articles there and decided to start putting a few things together. My first attempt at this was rrogue which was supposed to be a low-effort demonstrator for myself on how I could use go and ebitengine. Using a game engine like ebitengine is much more “modern” than using curses directly and I quickly found myself going off the rails and adding things like ecs and messaging. It became pretty obvious that I would never be able to finish if I didn’t reign the scope in. So, I’ve put it on pause and decided to look at the popular python tutorials for roguelikes at roguelikedev. And most of them are indeed excellent.

However, many of them focused on building on top of an excellent purpose-built roguelike toolkit built in python. And while I was able to get through the tutorials, I felt like I was missing the ‘struggle’ and learning experience that comes with building software from scratch. So, I’ve decided to start from a more basic approach and attempt to build something with as few external dependencies as manageable. This means I’ll be using curses and either python or go to build a classic text-based roguelike.

There was one glaring problem with this approach, I didn’t know anything about curses. So, I hit the python curses tutorial as a guide and tried to document my learnings. The result so far is cursesrogueui. This is a guide I build with code to help me learn to build a rougelike curses UI in python. I’ll be adding to it as I go along.

The next steps will be to start building the roguelike itself. I’ll encoporate what I’ve learned at this point and try to keep documenting things as I go.