Nethack, but without the kitchen sink

I began playing roguelikes in my late high school / early college years and started with Nethack. I never got very far. Since then I’ve been an on-again off-again player of the genre. The game I’ve spent the most time with is Dungeon Crawl Stone Soup (DCSS). It’s also the only roguelike I’ve won. Lately I’ve been dabbling with vanilla Angband and have spent enough time with the original Rogue to learn I’m not very good at it.

The idea that spawned this game - Nethack, but without the kitchen sink - means a more straight forward and simple version of the game. Or perhaps it means a more modernized version of Rogue. Maybe the best way to convey what I want in a game is to list in broad strokes what I don’t like in existing games:

  • Nethack - Too long and complex. I don’t like spoilers and gimmicks that require memorization.
  • DCSS - Too many options. Having to complete the same branches in the same order each game gets cumbersome.
  • Angband - Too long and boring.
  • Brogue - Excellent game, but I enjoy class based systems. Level complexity can also sometimes be cumbersome.
  • Rogue - Very small in scope, no classes, dungeon generation too simple, and game too hard.
  • Rescape - Perfect game, no flaws or bugs.

Rogue Escape

General Design

I’m designing Rescape to be the perfect game for me. It is unlikely that I’ll ever get there, but these are the main design points:

  • A simple ascii roguelike style using typical glyphs to represent the hero, monsters, items, etc
  • Unlike most other games, you start at the bottom of a dungeon and work your way up
  • There are 2 ways to win:
    • SHORT: escape the dungeon and run away
    • LONG: escape the dungeon and then climb the Wizard’s tower to defeat them and take their amulet
  • Available classes are fighter, rogue, and wizard
  • No player race or gender
  • No experience points or character levels
  • There are 3 primary skills: strength, intelligence, and dexterity
  • There are several item categories and types, including weapons, armor, rings, potions, scrolls, books, and amulets
  • Skills, weapons, and armor are enhanced with consumable items, either temporarily or permanently (blessed scrolls and potions can permanently alter the hero or some items)
  • There are two gods that can optionally be worshipped by the player and some monsters
  • Gods may bless your consumable items
  • In place of a “hunger clock” that is integral to most roguelikes, there is a chaotic miasma leaking into the dungeon that slowly envelops each level. This generates monsters (or will mutate existing monsters) and can cause harm to the player. This game dynamic keeps the game moving along

note: many of these components are still in the design phase

Story

The name Rescape is a portmanteau of Rogue Escape.

The game’s story is that you begin trapped at the bottom of a dungeon. Your goal is to escape, and if you choose to do so, climb the wizards tower and take the Amulet of Yendor.

Perhaps your roguish adventurer was captured on their first attempt and this is what happens once they break free.

In the depths of the dungeon one of the Wizard’s experiments has unleashed chaotic magic into the world. Your bonds have been broken and the miasma forces you up to the surface.

Development

I am not a software developer, although I do write code for both my day job and as a hobbyist. In both cases my goal is generally to get something working quickly that accomplishes some kind of task. I probably don’t follow proper techniques or do things very efficiently. For the most part I brute force code into doing what I want it to do. My Go code for this project will sometimes reflect that and be far less than perfect. That said, one reason for doing this is to help me improve.

This project began to help teach myself a modern programming language and I first settled on Rust. Because it was primarily a learning experience and I never expected to actually have anything close to a finished game I did nearly everything from scratch. I wanted to limit use of libraries and do things like field of view, pathfinding, and AI from scratch.

I worked on the project pretty heavily after the COVID 19 lockdowns began in early 2020 and then eventually moved on to other things. In late 2020 when the weather got cold and again there was less to do (still because of COVID) I decided Go was a better language to learn for various reasons and started a few new projects. One of those projects was a rewrite of my unfinished game.

Initially when I ported the code I wanted to use one of Go’s most powerful features: concurrence. This ended up not working out (at least the way I was using it) because I needed game mechanics to be processed in a specific order. Since this is a turn-based game and action is only taken each time the player passes input this is not a huge deal. Performance is luckily not a major factor.

As I write this post (January, 9, 2022) several months have passed since I’ve worked on the game. The first thing I plan to do is revisit the code base and remember what I’ve done, what still needs to be done, and clean things up a bit. After that I’ll create a public GitHub repository.

I know there are several things I want to tackle after that, the first of which is probably the way items, monsters, and actions are engineered. The way things currently work will not scale and was just put in place to get things generally working. This is the largest coding project I’ve ever worked on, so I should also probably get more organized.

As I get back into this I am going to attempt to write blog posts describing some of the more interesting and challenging things along the way.

Your escape begins…