-WARNING: MORE GAME NERD STUFF-
So in my evening hours I’ve been working away on the roguelike game development project. For the most part I’ve been really pleased with how well it’s trucking along — I’ve seen a number of other roguelike projects out there using Libtcod that fizzled out way before adding this amount of content, so I feel confident I can finish this project.
Having said that, it’s requiring a ton of changes in my coding practices. Even in just a couple of weeks of development time, my game has expanded to the point where every addition has a large number of potential interactions with all the other game components, so I’ve had to give in and embrace version control. Every change is archived on my own machine, then on Google Drive, and finally uploaded, checked, and merged into the master code branch on GitHub. I’ve never bothered to do this before, but with this project (where just adding a new potion can cause weird stuff like making monsters stop moving completely until I find some minor malfunction) I’ve found I need to make it as simple as possible to back up a step when something goes strange.
I’ve added a few major gameplay additions since my last post. One of them appears right at the start of the game — you can now choose a character role when you start the game. Fighters are focused on close-range combat, Knights carry a shield which gives them great survivability, Archers are great at long-distance but weak up close, and finally Wizards are incredibly fragile but start with powerful spells. Here’s a wizard who’s just managed to turn a wolf to stone:
You might notice that I’ve been experimenting with the ASCII visual presentation too — the plan is to have some colour schemes for each set of dungeon levels, and each set will have particular characteristics and terrain hazards too. I’ve also changed the lighting slightly, heightening the contrast between explored and unexplored squares, and I’ve changed the font to a 16×16 version of Terminal that I think is a bit easier on the eyes.
Since I’ve introduced Wizards, I’ve also introduced the beginnings of a magic system — although there’s a lot left to do in this area. I’ve followed the lead of other roguelikes and developed a system of wand items — these drop randomly in the dungeon or from certain enemies, and give you a limited number of uses of a specific spell. I’ve added eight wands, each with two varieties, as a first test of the magic system and how it affects play. Later I’ll be adding a system for Wizards to learn spells permanently, a resource system to restrict usage, and more detailed stats for players and monsters to make certain spells more effective against particular opponents.
I particularly enjoyed making the Petrification effect — it turns the monster into stone, of course, which then blocks visibility and movement. So you can use it tactically to block off other monsters and restrict their movement or vision. When you tire of it you can destroy the statue and it crumbles into rocks (which you’ll be able to use as ammo for a sling, once I make that).
As for monsters, I’ve added a few of those, but more importantly I’ve added a random mutation system for monster creation. When a monster is generated, there’s a small chance that the monster will be mutated either one or two times, and each mutation will add statistical bonuses and special abilities, as well as alter the monster’s name and display colour. I’ve only added six mutators so far, but that’s already enough to significantly increase the game variety. Honestly I probably spend more time play-testing than I really should when I have coding time — but I think that’s a good sign if I’m already finding it fun to play! The mutators will be even better once I add more monster types — these are taking time as each monster type has it’s own AI function which takes a lot of testing to get right.
Here’s a Fighter who’s run into a Hellfire Troll, a significantly stronger mutation of the already difficult Troll:
All told it’s been a productive week. My goal for the weekend is to jazz up the dungeon environment significantly, first by setting up the visual themes and names for each level subset, then developing a system for adding terrain features, some of which will be interactive (think stuff like lakes, lava flows, grass, fungus, rock pillars, etc.).
After that there’s some major tasks in my development plan:
- Flesh out the magic system (which will need a bunch of interrelated items and systems to go with it)
- AI and game systems for allied characters (in some circumstances players will be able to raise some troops, by resurrecting dead monsters or brainwashing living ones)
- Methods for random generation of items
Again none of these are new ideas — my design goal here is simply to make a complete roguelike in the classic style, with just a bit more playability and transparency. Once it’s done I’ve got some ideas for game #2 — but I’m not allowing myself to think much about that now!
Speaking of roguelikes in the classic style, thanks to some dedicated roguelike fans out there you can actually still play the original Rogue on modern computers. It’s still quite playable, albeit mercilessly hard — winning Rogue is a real accomplishment.
You can also still play Moria — the seminal early roguelike based on Tolkien which later spawned Angband. Really though I’d recommend trying Angband if you want to try a classic roguelike — it’s much more user-friendly, has lots more content, and has a graphical mode.