• Move your character with the numpad.
  • Pressing [5] skips a turn. 
  • Trigger a nitro with [space] or [enter] if you have one.
  • (If the game does not react on keyboard inputs click on it and try again.)
  • Alternative controls if you don't have a numpad:
    • Vi keys for movement
    • Pressing [.] skips a turn. 
    • (For QWERTZ-keyboard-layout users [z] can also be used for moving up-left.)

How to play

  • The game is very well explained in this video by ToneHack.
  • This game is about racing to the exit (the stairs) of a dungeon floor.
  • Your goal is to reach the stairs before your opponents do.
    • You loose if your rank is 7th or worse.
    • Better ranking gives better score.
  • There is no combat.
  • Your character is displayed as an "@"-sign.
  • Your opponents are displayed as capital letters.
  • The stairs are displayed as a ">"-sign.
  • You can pick up the following items:
    • : Coins give score
    • : Permanent Speed-Upgrade by 10%
    • : Nitro - Doubles your speed for 10 turns, when ignited.
  • At the beginning you and your opponents all move with the same speed.
  • The speed of your opponents increases with every dungeon-level.
  • Your opponents can only move in 4 directions whereas you can move in 8 directions (including diagonal movement).
    • Diagonal movement enables you to cut corners and use shorter paths when traversing rooms!
  • There are 3 possibilities to overtake opponents:
    • Take advantages of your diagonal movement in rooms.
    • Find a shorter path.
    • Increase your speed by speed-upgrades or nitros.
  • You are supported by a magic navigation system:
    • One possible path to the stairs is always indicated by a colored trace.
    • Be aware: This path is calculated considering 4-way-movement!
    • Therefore it is by no means ideal when you are capable of 8-way-movement!
    • Always consider alternative routes in order to take advantage of your ability to walk diagonal.

Examples how overtaking works

Overtaking by diagonal movement

See how I manage to overtake Runner H by moving diagonal:

This was very close but it worked since I could cut the corner! :-)

Overtaking by taking another route

Here I am overtaking runner H by taking another route so Runner H does not block my way:

Overtaking by igniting a nitro

Here I doubled my speed by igniting  a nitro in order to overtake runner E. The @-sign representing the player is displayed in red as long as the player has double speed. 

How to have fun in your first games

  • Play fast and don't worry too much about perfect movement - it's a racing game! ;-)
  • Just follow your navigation system.
  • Only pick up Items if they lie directly on your way.
  • If you are stuck in traffic, just follow the other runners until there are larger rooms which allow overtaking by diagonal movement.
  • Don't worry about score too much.
  • Just focus on overtaking in your first games and watch yourself climb the rankings shown at the right side of the screen.
  • Just race like this:

How to get a high score

  • In this game you get points in the following situations:
    • When you pick up coins.
    • When you finish races (when you reach the stairs).
  • The points you get for finishing races depend on your ranking:
  • Getting no points in a race also means Game Over for the player.
  • Picking up many Speed-Upgrades and Nitros may help you to survive later levels when your opponents move faster.
  • But be aware that surviving 10 levels ranked 6th gives you as many points as one time finishing 1st!
  • So there is always a trade-off between taking the shortest path and making a detour in order to pick up an item.
  • I'm very curios to find out what scores would be possible in my game. So I would be pleased if you could post your high-scores in the comments below! :-) 


RankWhoScoreDungeon Level
(see video)
(see video)
(see video)

Please post your score in the comments below and you will get listed here. 

If you do not have an and do not want to create one, just post your score in the comments-section of one of the linked videos. I will also check there every now and than and will update this table accordingly.

If your score would be the new top score of this table it would be nice if you could also provide a screenshot of your game-over-screen. You could either post it or link it in your comment or send it per email to gerhard[dot]wonner[at] However if your score does not beat the current top score it is not necessary to provide a screenshot. Just posting the score is enough in this case.


  • This is a score-based game with an infinite number of levels.
  • If you do not know how speed can work in a turn-based game:
    • I implemented the speed-mechanic using the "Speed scheduler" of the rot.js library.
  • In each new level the speed of all opponents is increased according to the following table:
Dungeon LevelOpponent SpeedIncrease
  • As you can see, this is an nonlinear function since the increase of the speed also increases!
  • The increase of the players speed is on the other hand limited by the amount of Speed-Upgrades he finds.
    • Since the number of Speed-Upgrades does not increase from level to level, this means that the player will at some point no longer be able to catch up to the opponents and will eventually loose.
    • The better the player performs, the farther he gets and the higher his score will be.
  • In order to prevent all opponents from using the same path they sometimes get "confused" and take alternative paths which are inferior to the shortest path.
    • This lowers the difficulty and enables the player to get ahead of them even with lower speed.
  • The items are somehow automatically balanced due to the game mechanic:
    • E.g. if I decided to double the bonus of a certain item this would only affect the maximal length of a detour an optimal playing player would take into account in order to get this item. 

Roguelike elements

  • Procedural generated dungeons
  • Permadeath since Game-over means Game-over
  • The whole game is around an implicit hunger-clock since you inevitably loose if you lurk around too long in one level.
  • Turn-based
  • Grid-based
  • Resource management: The player decides when to use his nitros. They can be taken to the next level.

Credits and links

  • This game was created during the 7DRL Challenge 2019.
  • I was inspired to take part in this challenge by Roguelike Radio and the videos from Jupiter_Hadley.
  • I used  the JavaScript roguelike-library rot.js by Ondřej Žára.
  • The sound effects have been taken from the following sources:
  • The idea of having an 8-way moving character outmaneuvering 4-way moving characters is stolen from "Ananas aus Caracas". This is a game one develops when doing the rot.js-tutorial. My game is based on my own version of "Ananas aus Caracas" which I kept extending after finishing the tutorial.
  • The animated screenshots where created using the software ScreenToGif.
Updated 8 hours ago
Published 15 days ago
AuthorGerhard Wonner
Tags2D, Seven Day Roguelike Challenge, Roguelike, Turn-based
Average sessionA few minutes
AccessibilityColor-blind friendly, High-contrast

Development log


Log in with to leave a comment.

(1 edit)

156! Very fun game, very polished and innovative. Is it okay to ask for source code?

My strategy is always go for upgrades, go for nitros that are <10 away (sometimes more), save the vast majority of them for lategame.


I got 113 points after 11 Races. Fun game!

Thank you for playing my game and providing your score. I added your name and score to the high-score-table on my game-description. Currently you are in third place.


Managed to get to Dungeon Level 12 with 91 points. 

Feel pretty happy about that score. Probably could have scored higher if I didn't get greedy trying to go after power ups in the last level.

Thank you for playing my game and providing your score. I added your name and score to the high-score-table on my game-description. Currently you are in fifth place.


55 on level 10!

Hello Patrick Davison,

thank you for playing my game and providing your score.

I added your name and score to the high-score-table on my game-description. Currently you are in fifth place.

I am looking forward to play your game Ellipsis which will be one of the games I plan to play next


I tried. I failed to best Xecutor and Tone:

I did however, record my efforts!

Hello Rogueliker,

thank you so much for playing my game at your Youtube-channel and providing your score!

I added your name and score to the high-score-table on my game-description. 

In the moment you are in third place which is better than myself! So your video is a great opportunity for me to get better at my own game since it's the first time I can actually watch someone playing it better than myself! It's interesting to see how you deviate from the proposed route quite a bit in order to get upgrades or to avoid the paths of opponents. I already learned some tricks since you do some overtaking moves I did not considered to be possible! :-)


Glad to offer some insight! It's fun how people approach situations differently. Also luck had a decent factor in mine since I blindly set off sometimes with mental coin flips to choose routes. Never get caught behind someone and was it using the nitros to sneak around corners that you hadn't thought about?

I actually never did it like you did it by cutting two corners at once. But as I saw you doing it a penny dropped inside my head that this is obviously possible when using a nitro!

But I have to say that I did only finished 2 complete games so far. While playtesting I always stopped playing once I saw something I wanted to fix. And after fixing it, I always started a new game from scratch. After the deadline was over I mainly played the other entries of the 7DRL challenge and watched videos about them. And of course I enjoyed to read the comments about my game.

Once the high-score-table has been settled, I will have another try to get listed as high as possible.


Score 124, Level 16

That's more fun and addictive than one might think :)

Wow, we have a new high-score!

I added your name and score to the high-score-table on my game-description. In the moment you are in first place.

I am curious if someone could beat this!

Your game P.A.P.A. roguelike is on my list of games I wanna try next. 


This is a fantastically fun idea for a roguelike.  I haven't internalized the Vim keys and I'm playing on a laptop, so I don't have a numpad, so it would be really helpful to be able to just remap the keys, but even with my clumsy Vim-key playing, it was pretty fun and compelling.  Great job!

Thank you for trying my game! I will try your game Battle Weary soon.

I am sorry that my game did not provide the appropriate controls. The configurable key-mapping is a good idea. But I think it is quite an effort to implement it properly.

What keys would you prefer for playing? Maybe you could use the arrow-keys for the cardinal directions (right hand) and name me your preferred keys for the diagonal movement (maybe left hand). If they would not interfere with the already existing controls I could easily implement them for you. Do you think [q], [w], [a], [s] could work for the diagonal movement?

Do you know if the rules of the 7DRL-Challenge allow me to update my game by additional controls after the deadline?

But I think it is quite an effort to implement it properly.

Yeah, it can be a bit of a pain to have keys be fully configurable.  An easy compromise might be to have a set of keysets you choose from at the start of the game, and then you just read those to get the key you want.  So, instead of doing something like:

//    Checking for moving left:
if (event.keyCode == ROT.VK_NUMPAD4) { move( -1, 0 ); } your code, you would instead do something like:

//    Somewhere during startup:
var numpadKeySet = { keySetName: "Numeric Pad Keys", left: ROT.VK_NUMPAD4 };
var arrowKeysKeySet = { keySetName: "Arrow Keys", left: ROT.VK_LEFT };
//    When the user selects a keyset:
var currentKeySet = arrowKeysKeySet;
//    Checking for moving left:
if (event.keyCode == currentKeySet.left) { move( -1, 0 ); }

Then, you could set a different keySet depending on the type of key bindings you want, and the behavior is abstracted away.  Later, you could have a functionality that would let players define a custom keySet.

Do you know if the rules of the 7DRL-Challenge allow me to update my game by additional controls after the deadline?

There's another thread in the 7DRL forums about this you can read for more detail, but the short version is that it's okay to update the game as long as it's clear and feasible how the 7DRL reviewers can play the end-of-compo release version.  So you could update it, but be sure to leave the original release version up and clearly marked for reviewers.

Thank you for the very detailed explanation Lone Spelunker. Good idea to have the different predefined keysets to choose from. I will see if I could implement this during the next weekend. What could a possible alternative to the numpad look like. Do you think [q], [w], [e], [a], [d], [z], [x], [c] could be a proper choice? I do not want [s] to skip a turn since a lot of people are use to the [w], [a], [s], [d] controls and therefore would accidentally skip a turn when they want to move southwards. So my choice for skipping a turn would still be [.] as for the vi-keys.

Since my game is playable in browser, I cannot provide two different downloads in order to keep the original 7DRL-version. So I think I will need to host a second game page for the updated game and link to it from the original 7DRL-game-page.

Well, maybe you could do a keyset based around I-J-K-L as the cardinal directions? Or maybe I-J-L-comma? And I think W-A-S-D could actually work if you make space be the pauser.

You know, another option would be to just support screen clicks on the display.  That would solve a lot of the issues for people using laptops.


Fun game!  Made it to Dungeon Level 18 and Score 118 but in the end the other racers were too fast!


Wow, quite an impressive score! 

I think I need to get a little more practice in my own game. ;-)

I added your name and score to the high-score-table on my game-description. In the moment you are in first place.


Hello Tone,

I am sorry to tell you that you are no longer at position 1 of my High-Score-Table. :-(

Xecutor just submitted a score that is slightly higher than yours!

But maybe you just give my game RunToTheStairs another go and get back to the top of the ranking again! ;-)


I see the gauntlet has been thrown  :-)

Don't worry, I'll be giving RunToTheStairs another go soon.  That score was only my second game, after all  ;-)

U did this in your second try!! That sounds like you are a quite talented rogueliker and racer. ;-)

Hello Tone, 

I just learned that you also host a Youtube-channel. I would be pleased if you could record your next attempt to climb back to the top of the high-score-table just like Rogueliker and cubicDisco did.

If you do, I would also link your video and channel from the high-score-table in my game-description, just like I did with the others.


I was already planning on doing a video for RunToTheStairs, I'll let you know when I upload it  :-)


Thank you Tone. I am looking forward to see it! :-)


Actually, I first played this on twitch if you want to see a player's first reactions and commentary as I figure the game out  :-)
(I wouldn't link this to the high scores list, just thought you might like to see it.)

Thank you for showing me this. I really enjoyed watching it! :-)

I like how you and that guy (Canight) in the chat are discussing and analyzing what would be the best strategy in different situations. I learned a lot about my game!

The idea behind having a limited view is that you have to weigh your risks in some situations. You always see the distance counters of all runners and know your speed and that of your opponents. So you should always be able to judge if a detour to an item is worth the risk or not. If the suggested path of your navigation system flips tells you that there is no dead end. If it does not flip you can judge that you are getting in trouble, even if you can not see everything. If the player could see everything, optimal play would often just involve a lot of counting of ground tiles in order to judge which way would work best. So I decided against that and implemented the navigation system instead.


Wow!  This is surprisingly addictive.  I haven't gotten too far, but diagonal movement is definitely key here.  I'm interested in the pathfinding mechanics.  It looks like the player path to the exit is pretty straightforward, but how are you determining the other characters?  Is it based upon where they start in the level?

My high score: 38 points after 8 races.

Thank you for playing my game and providing your score! :-)

I just created a High-Score-Table in my game-description and added your name to it.

The pathfinding of the navigation system as well as that of all the opponents is done with the A* algorithm of rot.js using a topology of 4, which allows only orthagonal movement. So if the player just strictly follows his navigation system, he will not be able to overtake anyone. 

But you are right, the diversity of the paths is mainly achieved by a variation of the starting locations of all characters. The player always starts at the very west of the level (y-coordinate is randomized).  Runner H starts a few steps to the east compared to the player (y-coordinate is also randomized) giving him a small advantage since the goal is always in the very east of the level (y-coordinate is also randomized). Runner G starts a even more in the east and so on. So the runner with the best starting position should be runner A in most cases. Since the dungeon and the y-positions are all randomized the starting position of player A is not always the best and that of the player is not always the worst, it is just a tendency.

Another mechanism to achieve route-diversity is confusion. Runners get sometimes confused if others in front of them are using the same path. In this case a new path is calculated trying to avoid the paths of the runners in front of the confused runner.

Can you add vi-key support?  I don't actually own a computer with a numpad :(

Hello samspot, thank you for the helpful feedback!

I implemented the vi-key support like it is described here. Like suggested I implemented the [.]-key to skip a turn.

Could you please test for me if the implementation is correct since I am not used to these controls myself.

(For QWERTZ-keyboard-layout users [z] can also be used for moving up-left. Don't know if this makes any sense, but it's possible now.)

Perfect!  Thank you :)

Thank you for your help!

I will try out your game RERL soon.


Thanks, this game is fun!  I enjoy trying to figure out how to pass the other racers.  Some limited wall destruction could be neat if you ever enhance it.

(1 edit)

Good idea! 

I consider to integrate this. Maybe I could introduce another collectible item called "drill" which enables you to remove one wall element by bouncing it. I think the drill must be consumed when being used. But analog to the nitros the player can collect many of them, allowing him to dig longer tunnels by investing the corresponding amount of drills.

Unfortunately I cannot implement it now since the deadline is over.

I will do the integration after the voting is accomplished.


Very nice! I like how the distance counter creates a feeling of tension even though the racing is turn-based, because you know you have to overtake someone as the distance to finish grows short.

Thank you for your nice comment red_kangaroo! :-)

I would be pleased if you would post your score!

I will check out your game "Quest for Gore and Vengenace" soon.

I will, once I get a good one. :D

Thanks, it's not much but I had fun making it.

(1 edit)

My current high-score is 69 points on dungeon level 10.