–WARNING: LOTS OF WORDS INCOMING–
As my friends and colleagues are aware, my favourite hobby outside the academic sphere is gaming. In particular I have a fondness for very difficult games that require some tactical thinking to survive — so I’m a big fan of roguelikes.
For those of you who don’t know what a roguelike is, I’ll share with you a too-lengthy post I made on Facebook by way of explanation:
My game is a ‘roguelike’, a genre named for a very popular game in this style from 1980 called Rogue. There’s some debate about how to define roguelikes precisely, but generally they’re characterised by:
1) Turn-based gameplay — you take a turn, then the enemies. You can take as long as you like to think about each action and its consequences.
2) Randomly-generated levels — often you dive into a very long, multi-level dungeon full of monsters, items and fiendish traps, and every level is randomly generated each time you play, meaning you never run out of levels to play and no play-through is ever the same. In my game dungeons are generated using BSP trees which is a pretty common method.
3) Permanent death — if your character dies, that’s it, you have to start over from the beginning! What’s more, most games (including mine) automatically save the entire game state after every move, and overwrite your saved game when you reload a save, meaning that you can’t ever go back to a previous turn. Every action has permanent consequences.
4) Text-based graphics are usually a feature of every roguelike in the classic style, even today in 2016. Graphical modes are normally an option nowadays too, but many people prefer text mode (including me) because once you get used to it the text actually makes it much easier to determine exactly what’s in front of you at any given time, which is important because…
5) …while the graphics are often simple, the gameplay is normally quite complicated. Hundreds of items, monsters, and environmental features are in these games, all of which can interact in tons of different ways — not needing to make fancy animations for everything means developers can go nuts with the gameplay systems.
Anyway those are the main features you see in the genre — most of the major games in the genre are completely free, so I recommend trying them. The site RogueBasin has links to the five ‘major roguelikes’ right on the front page — ADOM, Angband, Crawl, NetHack and ToME. In my opinion Crawl or ToME are probably the easiest places to start, given they have pretty nice visuals and decent tutorials for new players. Angband is a long-time classic and has a decent graphical mode included as well. NetHack is famous for having insanely detailed game systems and item interactions, but is a bit overwhelming for newcomers.
My game is very early in development, although the core gameplay systems are all functional (random dungeons, character progression, combat, item and magic systems) and it’s fully playable. Not bad IMO given I only started making it five days ago, but there’s a long way to go yet. My goal is to add at least one new gameplay feature, monster, item, etc. every day for the next couple months so I can gradually build up a complex but balanced gameplay experience.
Given that this is my first-ever foray into making a complete game — I don’t count my failed attempts to write code for the GameBoy Advance back in 2005 — I’m pretty pleased with my progress, and it’s certainly been an enjoyable and challenging way to spend a few days of my summer holiday.
I started off by following the Complete Roguelike Tutorial using Python 2.7 with Libtcod — this gets you a complete, playable prototype (albeit very simple). Since then I’ve added quite a few major features, each of which has required learning a bunch of new algorithms or techniques:
- A* pathfinding for monsters
- Random dungeon generation via BSP trees
- A graphical version (using free 16×16 tiles made for Angband)
- A more complex combat system including dicerolls and critical hits
- Damage-over-time (poison attacks)
- A complete ranged combat system including ammo tracking and relevant attributes for the player and enemies
- Several new AI routines designed for specific enemies, i.e.:
- Wolves that call for their pack mates when in trouble
- Snakes that stay at a distance and spit poison
- Enemy archers who try to get the drop on you
Now that the core gameplay systems are mostly there, and the return to academic life is looming, I’ll be slowing down significantly from here. My goal is to build on this foundation bit by bit over the coming weeks and months, until I have a cohesive 20-floor dungeon-crawl experience with quite a few dozen monsters, items and weapons to discover. This is a bit of an experiment for me, and I may not release this game to the larger world and instead bank this experience for a better follow-up project. Having said that, once it’s in a more complete state I’d welcome any interested play-testers!
I should note that if I do end up releasing this it’ll be completely free, and probably open-source, assuming my code isn’t too embarrassing.
Since this is ostensibly an academic blog I should say that part of what pushed me to finally take the plunge and try to make something like this was actually some of the students I advised last academic year. A large proportion of my advisees were game development students, and I wished I’d had more domain-specific knowledge to help them through certain problems. Now at least I can tell them where to look when I hear from students who are stuck on pathfinding, AI issues, etc.!
Before I leave you, a screenshot of the fabulous ASCII graphics I’ve been staring at for hours on end:
And for the ASCII-shy, a screenshot of the graphical version:
More to come later — the graphical version is very much a side-project at the moment, so expect that to be spruced up as time goes on. I’m planning to switch to the stylishly lo-fi tiles of Oryx Design Lab — they’re simple, visually clear, and as they’re uncoloured I can tint them a million ways to represent the requisite dozens of variations of every imaginable monster that roguelikes generally have.
If you think I’m exaggerating — NetHack variant Slash ‘Em Extended boasts 12,221 monster species. I think I’ll stop long before the 12,000 mark though.
That’s enough out of me for today — I’ll post updates on here every so often, if I find any particularly interesting techniques or come up with a version polished enough to distribute.