Author Topic: [7drl 2017] Rogue, Fighter, Mage in: the Goblin Caves [Finished]  (Read 10904 times)


  • Newcomer
  • Posts: 12
  • Karma: +0/-0
    • View Profile
    • Email
Rogue, Fighter, Mage in: the Goblin Caves

You control a party of three characters in their quest to kill the Goblin King. This is a fantasy roguelike, with an intricate system of magic spells and combat. Each of your three characters has strengths you'll have to play to and weaknesses you'll have to work around. The Goblin Caves are treacherous: full of secrets, traps, monsters and powerful magic.

On the technical side, although RFM is a traditional roguelike in flavour and theme and in the basic language of the game (you'll use 'w' to wield weapons, 'a' to wear armor, etc), it experiments with roguelike mechanics to create a tactically rich adventure.

  • There are no bump attacks. Melee combat happens at the end of the turn. When you end your turn, characters in your party that are next to enemies will fight with one of those enemies. (You press SPACE to end your turn.)
  • Spells and ranged attacks and so on are placed on a stack. When a spell is cast, or when an enemy comes into view, you'll have a chance to respond by firing an arrow yourself, or casting another spell. This lets you do things like teleport away if an arrow is coming your way, or immediately return a volley of arrows if you're fired upon. (You press ENTER to resolve events.)
  • The spell casting system is involved, with many sorts of interactions between items and magic. If Mage can correctly manage her magical resources, she will be able to wreck devastation with her spellbook, and win duels with other mages.

This game was made for the 7drl 2017 challenge. Builds for Windows, macOS and Linux are available.


Version 1.1c (March 15th 2017) github downloads:
  • macOS signed .app bundle (tested on a circa 2014 MacBook Air with Sierra 10.12.2 and a circa 2016 iMac with Sierra 10.12.3)
  • Linux binary (tested on Debian 8 with libsdl2-2.0.0 and gcc 4.9)


If you're delving in before reading the Player's Manual, here are the only things you need to know:

Press TAB to change characters. Press SPACE to end your turn. Press ENTER to resolve pending events. You can shoot (press x), cast spells (press c) and read scrolls (press r) and change characters even if there are pending events. Hold ? for a list of commands. Normally, you can't move around enemies that you are fighting: you have to retreat by moving orthogonally away from them (there are some exceptions).


I released a 7DRL version on March 12th 2017 github downloads:
  • macOS executable (tested on a circa 2014 MacBook Air with Sierra 10.12.2 --- known issues for retina monitors, resolved in version 1.1c)
The 7DRL version has some issues on higher resolution monitors, and also must be run on the command line with the current directory set to the same directory that the executable is in. Version 1.1c builds are the same as the 7DRL version contentwise (even down to the bugs), but with display issues fixed, and support for Linux and Windows. The latest version is always available on and here. The next version will fix the known issues (listed below) and add some more spells and enemies, and gameplay tweaks to improve flow.

Basic Commands
  • ARROWS - Move. You can also use ijkl to move (like a right handed wasd). There is no diagonal movement. To toggle vi-like orthogonal movement (hjkl instead of ijkl), use Ctrl+VI (i.e., hold Ctrl, v and i all at once).
  • TAB/SHIFT+TAB - Switch between the characters in your party. Use TAB to switch to the next character, or SHIFT+TAB to switch to the previous character.
  • Hold ? or / - Help?! Hold down ? or / to show a list of all of the available commands.
  • SPACE - End your turn.
  • RETURN - Yield priority. (This is explained below: You must do this if the green priority bar appears on the bottom of the screen.)
  • DELETE - View inventory and statistics.
  • F1 - Return to the main menu.
  • Ctrl+C - Quit the game (you will be prompted).


A summon spell is countered.


Mage and fighter unleash a volley of arrows against an unsuspecting group of goblins.


Mage is in a magical duel with a vampire, and Rogue has been slain by an arrow to the head.


  • Version 1.1c - (March 13th 2017)

  - Fixed problems with large monitors. (Although you may still want to run in windowed mode on a large monitor, by passing the "--windowed" command line argument).
  - Made it so that the executable can be run regardless of what the current directory is set to.
  - Codesigned the mac binaries.

  • Version 1.1 - 7DRL version (March 12th 2017)

Known Issues

These problems are known to exist for version 1.1c.
  • If your last characters die in an explosion or fireball, you won't receive a "You have lost. (Press F1)" message. If that happens, you can still press F1 to return to the main menu (and you've still lost).
  • Creatures and players don't drop their equipment when they're killed. This makes it quite hard to replenish your supply of arrows or bolts. (This was caused by a last minute addition of looting corpses.)
  • Under some circumstances, you can attack & be attacked through walls. (It's pretty rare --- not sure what triggers it.)
« Last Edit: March 28, 2017, 07:18:17 PM by mathpunk »


  • Newcomer
  • Posts: 12
  • Karma: +0/-0
    • View Profile
    • Email
Player's Manual
« Reply #1 on: March 10, 2017, 11:50:42 AM »
Priority System

When you cast a spell, fire an arrow, or when an enemy comes into view during the enemy's turn, or when a trap is sprung, you gain priority. This is indicated by a green bar at the bottom of the screen, and the addition of an event to the "Spells & Arrows" column. You can then 1) press ENTER to try and resolve the event OR 2) queue up additional events.

While you have priority, you may cast additional spells, fire more arrows, or perform a small set of other actions (for example, if the Rogue has the quick draw skill, he may wield a bow or knife, and the mage may turn a page of her spellbook). If you perform any of these actions while you have priority, you will maintain priority. The number of actions you can perform is limited only by concerns such as the amount of magic you have available, or the firing rate of your bow (and also by the fact that you can only perform this limited set of "instant" actions: you can't move, or get items, for example). Once you've decided to stop performing actions, you must yield priority to attempt to start resolving the events that you've queued up.

To yield priority, press ENTER. When you yield priority, if you didn't queue up any events since the last time you gained priority, then the first event will resolve. Otherwise, if you have queued up events, then enemies will once again get a chance to queue up some additional events if they can and want to do this (i.e., they can respond to your responses).

The bottom line of the mechanic is just this: whenever you have priority, do as many actions as you want and can do, and then start pressing ENTER to resolve them one at a time. Each time you press ENTER, either the event will resolve, OR an additional event may be queued up (the latter will happen if an enemy responds to your event). IF you want & can respond to that additional event, do so, otherwise just keep pressing enter.

Example: It is your turn, and Mage casts magic missile targeting a goblin shaman (press c, select magic missile by pressing the corresponding number key or by clicking on "magic missile" with the mouse, then select goblin shaman with the mouse). You gain priority. You try to resolve the magic missile (press ENTER). Then, instead of allowing your magic missile to resolve, the goblin shaman casts counterspell targeting your magic missile. Now, you will once again gain priority and the "Spells & Arrows" column will display "magic missile" and "counterspell". If you move your mouse over "counterspell" you can see that it is targeting "magic missile" (this is also indicated in a message). You can try to cast a counterspell of your own targeting the goblin shaman's counterspell, but maybe you don't have enough available magic. That means you'll have to let the goblin shaman's counterspell resolve (press ENTER). The counterspell resolves and the magic missile is countered. Now there are no events on the stack, and your turn resumes normally.

Spellbook Manipulation

Every magic user has a spellbook with a certain number of pages (Mage's spellbook starts with three pages). The runes of 3 or 4 spells are written on each page. If a magic user has enough available magic, he or she can cast spells from the page that the spellbook is currently open to (press c). The amount of available magic required (the magic cost) of a spell is written next to the name of the spell in all menus, indicated by a number of plus signs.

If there are no spells left on the current page of a magic users' spellbook, or if none of the spells are currently useful, the magic user can turn to the next page of their spellbook (press t). This can be done instantly, but usually only once per turn. Magic users can never turn back to previous pages of their spellbook, although there are some ways in which the previous pages can be recovered (for example, if Mage is on the last page of her spellbook, and a paper monster lands an attack on her, the last page of her spellbook will be destroyed, and she will now have her spellbook open to the second last page).

There are several ways to add pages to a spellbook, for example by casting spellbind. This spell targets a scroll that the caster is currently carrying, and binds the scroll to the end of the caster's spellbook. This new page will now carry up to 4 copies of the spell inscribed on the scroll. The precise number of copies depends on the magic users' level, and the level of the scroll being bound.

Some spells and effects can cause the pages of a spellbook to be reordered, or the contents of a page of a spellbook to be changed. Combining this with spellbinding allows magic users to efficiently cast the spells they desire.

Full Commands

      ARROWS/ijkl - move
      o - open door
      O - close door
      w - wield
      W - stop wielding
      a - wear
      A - stop wearing
      x - shoot
      d - disarm trap
      g or , - get item
      c - cast spell
      r - read scroll
      t - turn page of spellbook
      G - drop item
      SPACE - end turn
      TAB - next character
      SHIFT+TAB - previous character
      RETURN - yield priority (lower green bar = you have priority)
      DELETE - show inventory/statistics
      ~ - view message backlog
      ? - help (this menu)
      F1 - main menu
      Ctrl+VI - toggle vi movement
      Ctrl+C - quit
« Last Edit: March 28, 2017, 07:19:30 PM by mathpunk »


  • Newcomer
  • Posts: 12
  • Karma: +0/-0
    • View Profile
    • Email
Cyclopedia - Floor 1
« Reply #2 on: March 10, 2017, 04:37:56 PM »
Cyclopedia - Floor 1

This chapter provides a complete description of all monsters, items and spells that can spawn on the first floor of the Goblin Caves. Spoiler warning!

  • g goblin - Vile and green, ranks of Goblins infest these caves. Their razor sharp claws and mouthfulls of fangs are deadly, as are their primitive bows, daggers and clubs. Some Goblins are known to use magic.
  • m rust monster - This ancient insect scuttles around slowly and blindly on its six legs, seeking out metal with its antennae. A single touch will cause any metal item to rust. The rust monster is resistant to damage from magic sources.
  • m paper monster - A close cousin of the rust monster (but with an appetite for scrolls and spellbooks), and similar in anatomy. Its exoskeleton is white and covered with leafy sheets. The paper monster is most feared by the Mage. An attack by the paper monster landed on a Mage will cause the last page of her spellbook to disintegrate (this is called grinding).
  • j jackal - Aggressive, medium sized canine.
  • b bat - The common bat is mostly harmless. But care should be taken as Vampires are known to take this form.
  • w wolf - The wolves howl, the serpents hiss / The sun to me is dark / And silent as the moon. (--Nick Cave)
  • B owlbear - Woe for the Fighters who face this fearsome foe. A weird crossing of the owl and the bear. Its beak can pierce armor and few can escape its claws.


The following spells can all be found on the first floor of the Goblin Caves. The amount of magic expended for each of these spells (the magic cost) is listed beside the name of the spell in brackets. If the spell can be found on a scroll as well as in a spellbook, this is indicated by a question mark after the magic cost.

  • counterspell (2) - When you cast counterspell, choose a target spell that is currently on the stack. When counterspell resolves, the target spell is countered.
  • healing spell (1?) - This spell heals all damage that has been inflicted to target creature or player. You must target a creature or player within your line of sight.
  • cause wounds (1?) - This spell causes a target creature or player to be wounded. A scroll of cause wounds can be wielded like a weapon, in which case it deals a wound with each landed attack.
  • magic missile (1?) - Shoot a magical missile at any target square. Magic missiles always hit their mark. You must target a creature or player within your line of sight. Unlike cause wounds, magical missiles have a maximum/minimum range.
  • fireball (3?) - A 3x3 square of tiles is consumed in a magical fireball. Like magic missile, fireball has a maximum/minimum range.
  • cantrip (1?) - When a cantrip spell resolves, you gain some magic and also get a chance to reorder the pages of your spellbook a bit.
  • break arrows (1) - All bolts, arrows, darts and magic missiles that are currently in the air are broken.
  • magic mapping (1) - The current floor of the Goblin Caves is revealed.


These items are found in your starting loadout, wielded by monsters on the first floor of the Goblin Caves, or scattered about those corridors.

Blade Weapons

All blade weapons deal extra damage against unarmed opponents, or opponents that are not themselves wielding a blade weapon of their own. Blade weapons can also be used defensively to block or ward off attacks. Wild animals (such as the wolf or owlbear) are particularly susceptible to attacks from blade weapons.
  • / knife - Can be wielded instantly with "quick draw" skill.
  • / dagger
  • / short sword
  • / sword
  • / longsword

Ranged weapons

  • ) short bow  - Can be wielded instantly with "quick draw" skill.
  • ) long bow
  • ) cross bow - You can only shoot it on your turn.


  • \ club
  • [ shield - Can be used along side sword, dagger or spear.
  • | spear - The spear bearer can launch a free attack against an enemy moving orthogonally into combat against the bearer.
  • ( arrow
  • ( bolt


  • [ helmet - Provides some defence against headshots.
  • ] leather armor
  • ] robe
  • | staff - The staff can be used to launch diagonal attacks.

The following scrolls are available in the initial loadout.

  • ? scroll of healing
  • ? scroll of cause wounds
  • ? scroll of fireball
  • ? scroll of magic mapping


Rogue starts the game with two of these five skills:

  • detect/disarm - Rogue has an increased probability of detecting traps. Rogue can also attempt to disarm traps. If a nearby trap is not detected, or if disarming a trap fails, Rogue won't get any more chances to detect or disarm it.
  • read scrolls - Rogue can read scrolls and unleash their magic. Rogue also starts with a few scrolls of his own.
  • infiltrate - Rogue can move orthogonally around monsters without being blocked by them.
  • knife fighting - Rogue is skilled with the knife: he can deliver deadly strikes.
  • quick draw - Rogue can immediately draw his knife or bow, without expending an action.
« Last Edit: March 17, 2017, 10:01:23 PM by mathpunk »


  • Newcomer
  • Posts: 12
  • Karma: +0/-0
    • View Profile
    • Email
Technical Notes
« Reply #3 on: March 11, 2017, 06:45:58 PM »
Technical Notes

Floor Design

The Goblin Caves are a maze of interconnected rooms and cooridors. Each floor is a compact 66 x 47 tiling of squares, with walls possible only on the edges of the tiles. The floors are generated using a random graph based context free grammar [1,2]. The organization of the levels takes some inspiration from the Hero Quest board game (the full Hero Quest board even has positive probability under the grammar).

Here's an example of one of the floors mapped out using a scroll of magic mapping:



  • If you have problems getting Rogue, Fighter, Mage to run, try using the command line argument "--windowed" to disable fullscreen mode.
  • Post any problems in this thread, or message me on github.
[1] Mcguinness, C., Ashlock. D. Incorporating required structure into tiles. 2011. IEEE Conference on Computational Intelligence and Games.
[2] Adams, D. Automatic generation of dungeons for computer games. 2002. University of Sheffield, UK.
« Last Edit: March 18, 2017, 03:28:06 PM by mathpunk »


  • Newcomer
  • Posts: 12
  • Karma: +0/-0
    • View Profile
    • Email
Re: [7drl 2017] Rogue, Fighter, Mage in the Goblin Caves. [Finished]
« Reply #4 on: March 12, 2017, 07:23:15 PM »
Success! A more-or-less feature complete version compiles and runs. Currently there's only a macOS version but I'll compile for linux and windows soon. If you like this game: post any questions, comments or bug findings here. I'll maintain a list of known issues in the posts above.
« Last Edit: March 12, 2017, 09:28:51 PM by mathpunk »


  • Newcomer
  • Posts: 12
  • Karma: +0/-0
    • View Profile
    • Email


  • Rogueliker
  • ***
  • Posts: 656
  • Karma: +0/-0
    • View Profile
    • Email
Re: [7drl 2017] Rogue, Fighter, Mage in: the Goblin Caves [Finished]
« Reply #6 on: March 15, 2017, 12:54:26 AM »
This one sounds pretty cool. Will definitely check it out when a windows version is complete.


  • Newcomer
  • Posts: 12
  • Karma: +0/-0
    • View Profile
    • Email
Re: [7drl 2017] Rogue, Fighter, Mage in: the Goblin Caves [Finished]
« Reply #7 on: March 15, 2017, 09:58:13 PM »
This one sounds pretty cool. Will definitely check it out when a windows version is complete.

Thanks for your interest, Legend. Windows executable is now available! It was compiled using clang 3.9.1 targeting i686-w64-mingw for 32bit and 64bit Windows. It should run without any additional libraries: DLLs are included for mingw, and SDL 2.0.5. It was tested on Windows 7 and Windows 10 with an Intel Xeon E5-2676 processor. Building and testing was done on Amazon workspaces (Windows 7 value bundle and Windows 10 value bundle), would love to hear about any trouble running.
« Last Edit: March 15, 2017, 11:24:08 PM by mathpunk »


  • Newcomer
  • Posts: 12
  • Karma: +0/-0
    • View Profile
    • Email
Cyclopedia - Floor 2 and beyond
« Reply #8 on: March 17, 2017, 09:54:50 PM »
Cyclopedia - Floor 2 and beyond

Here you'll find hints and mild spoilers for floor 2 and lower floors, and more explanations of the mechanics. Read no further if you don't want to be spoiled! (7drl version 1.1 from March 12th and also 1.1c).

  • Each time one of your characters slays an enemy with a sword (long, short or a generic sword), he/she will have a chance at advancing their sword fighting skill. Once they have advanced that skill enough, they'll learn "sword fighting", which will give them added advantages in attacking certain classes of enemies (such as unarmed humanoids and wild animals). They will also get advantages in defending against unarmed enemies, or enemies wielding blade weapons.
  • You can learn the knife fighting skill in the same way as the sword fighting skill: A character can gain the "knife fighting" skill by slaying enough enemies with the knife. The knife fighting skill gives you larger bonuses against unarmed opponents, and can be used to deliver devastating assassination blows.
  • Debris and furniture provide cover against ranged attacks. If a player or monster is standing behind debris or a furniture, relative to the origin of a ranged attacked, then the chance of that attack landing is reduced. Debris and furniture only provide cover if they're at the end of a missile's trajectory: if you're behind cover, then that cover won't effect your own attacks (unless your target is very close). Cover can't protect you against magic missiles.
  • You can be injured in three main ways: damage is a reduction in health that is regenerated at a rate of one damage per turn. Wounds affect your maximum health and are dealt by critical hits, "cause wounds spells", and by some other sources. You can clear all of your wounds using a heal spell. Finally, your maximum health can be reduced through the drain attacks of undead monsters. There's no way to recover your maximum health, aside from gaining levels.



These weapons are found beyond the first floor of the Goblin Caves.

  • | Halbert - "The halberd consists of an axe blade topped with a spike mounted on a long shaft, and a hook or thorn on the back side of the axe blade" -- Wikipedia. The halbert is heavy, so a character will not be able to wield it efficiently unless they are quite strong. It can attack diagonally (like the staff), and also provides free attacks against opponents moving straight towards you (like the spear).
  • / null sword - Whenever a spell is cast, if the spellcaster is within the field of view of a null sword, and if that null sword has not already activated, then the null sword will activate by casting a counterspell targeting that spell. Null swords are not initially identified (they will just show up as "sword"), but once they activate they will become identified. You can use this to your advantage by carrying a null sword to counter the first magical attack of a mage, or you can be surprised by it when your own spell is countered.
« Last Edit: March 28, 2017, 04:11:55 PM by mathpunk »