Blog » Making roguelikes

Making roguelikes

Part of a series about Grass, a real-time roguelike engine with pretty graphics.

I'm currently working on Grass, a roguelike engine / game / thing. It's nothing concrete yet, but I realized I have things to say about it. Let me start from the beginning, though.

My history with roguelikes

Back when I was 11, I read a newspaper article titled "Does @ have a soul?". It described a fascinating game called NetHack, in which you can play as an @ sign, monsters are letters, the possibilities are endless, and people keep trying to win the game for years.

I had a 386 computer with MS-DOS at the time and I spent a lot of time playing NetHack, even printed the "Guide to Dungeons of Doom" on paper to learn all the commands. I never won, and after some time I moved on to ADOM after reading about it on one of the Polish websites.

ADOM pulled me in for a very long time. After several years of playing it on-and-off, over a particularly long summer break (the one after finishing high school!), I finally started winning.

In many ways, ADOM is a flawed game, but it's also extremely rewarding. I have many happy memories with it. I rescued the tiny girl's puppy countless times. Saved the world… not so many times, but still got to do it with different characters and play styles. I still have the character dump for every one of my winning characters. They also all got posted to Polish ADOM forum, a (long dead now) phpBB based community where I made some long time friends.

And since the earliest days of NetHack, I always wanted to make my own roguelike.

ASCII graphics

The graphics in a roguelike depend on a convention. @ is usually your player, r is a rat, g is a goblin, # is a wall, and so on. You need to learn the convention at first, but then it gets really immersive. Encountering an upper-case D can be really scary, because you know that D means a Dragon and that it's really easy to lose a fight against one (and did I mention there is no restarting from a saved game?)

I vividly remembered the first time I entered the Tower of Eternal Flame. I was so nervous I almost physically felt the heat.

I would compare ASCII graphics to something like chess diagrams. There are a few easy-to-distinguish characters, which you are not supposed to interpret as pictures, but as symbols with a meaning.

That does not mean the graphics cannot be pretty by themselves. Using the right font and colors can do a lot for my enjoyment of the game.

Alternatively, a roguelike game can have a set of graphical tiles. I used to be skeptical because I really like clean, recognizable symbols, and stylistic consistency. Tiles are often less recognizable and make the game uglier. But I've seen some cases where it's done pretty well.

(Dwarf Fortress tileset)

Making my own

Like any roguelike developer, I have many half-formed ideas for my own game. I tried to come up with an engine many times, as I was learning various technologies: C++, Common Lisp, D…

Getting stuck in the initial phase, and "analysis paralysis", is pretty well known in roguelike world. There is just too much freedom! So many ways things can go, and so many features to add! One way to overcome this problem is the Seven Day Roguelike challenge, in which you force yourself to finish something in 7 days. You will not finish your huge project, but you will release something instead of being stuck.

I participated in the 7DRL challenge in 2010, creating Madness, a small game in Python with hallucinations and other visual effects. It was a pretty intense week, with a lot of feature-building at the beginning, and a lot of play-testing and balancing the game towards the end.


And I did it again in 2011 with Dwarftown, a slightly less successful project where I learned Lua, experimented with lighting (torches on the walls!), various map generation techniques (including a dungeon made of Tetris pieces) and Angband-inspired health bars.

Dwarftown: forest Dwarftown: town square

Grass is another attempt at a roguelike. It's not as advanced but I'm enjoying myself so far…

Part of a series about Grass, a real-time roguelike engine with pretty graphics.