Home Updates Messages SandBox

Finer Details of Roguelike Interface

Let me start with a screenshot, so that everyone knows what I am talking about. Ladies and gentelmen, the traditional roguelike user interface:

                                                a) some food
                           -------------------- b) +1 ring mail [4] being worn
                           |................... c) a +1,+1 mace in hand
                           |................@.. d) a +1,+0 short bow
                           |................... e) 28 +0,+0 arrows
                           |...*....?.....?.... --press space to continue--
                           -----+---------------                       #
                                                                       #
                              -----+-------------                      #
                              |                 |                      #
    ---------------+--     ###+    %     ]      |           ############
    | *              |     #  |                 +############          #
    |                +######  |                 |
    |                |        |                 |
    --------+---------        -------+-----------
            #                        #
            #                        ####
            #                     ------+--
            #                     |       |
           ##                     |       |
           ########               |!     *|
                  ################+       |
                                  ---------
Level: 1  Gold: 0      Hp: 12(12)   Str: 16(16) Arm: 4  Exp: 1/7

Impressed? I didn't think so. So here's the deal: you see an ascii-art representation of a dungeon map. You can move around it with the "@" symbol. Letters represent monsters, other symbols represent… other things, mostly parts of the dungeon or items lying on the ground. Except for the eight movement commands (plus up and down), you can also search, wait and read, quaff, eat, throw, wear, take off, put on, drop, or zap items. You also automatically pick up items and attack monsters by walking into them. You also have a number of commands for examining the game status, like listing various parts of your equipment, amount of gold, items identified so far, etc. That's about it. Ah, there is a status line at the bottom and a message line at the top. If there is more than one message, you have a "more" prompt, and you have to press space to see the next message. You also have to press space after having displayed various status information in additional lists. There are additional movement commands for running until you hit an obstacle, and an optional count before any command, to repeat it.

Modes

This interface, inspired in large part by the Vi text editor, is inherently modal. The number of modes is, however, surprisingly small:

All those modes only take very short time – usually just a single keystroke. The player spends almost all the time in the "walking around" mode. It's also the default mode to return to after any commands.

Optimizations

This interface is heavily streamlined and optimized, mostly in two ways.

Slow terminals

When Rogue was written, you used text-based hardware terminals connected to the mainframe computers with very slow connections. To ensure smooth playing experience, all commands are at most few characters and the output is minimized.

There are two mechanisms for entering multiple commands: you can precede any command with a count, and you can use "run" commands instead of walking, which makes you move in the given direction until you hit an obstacle or something important happens. When executing these commands, the screen is not updated.

The map is not scrolled – it fits on the screen in whole. Explored fragments stay on the screen, only floors of rooms are replaced with spaces when you leave a room, to indicate that you no longer see them. Messages are displayed at the top line, which can be quickly updated.

Direction prompt doesn't display any message until an incorrect reply is provided – this makes it extremely fast in the most common case. Item prompts don't display the lists of items unless explicitly asked to – instead the letters of item slots are displayed in pickup messages, so that the player can memorize them and doesn't have to check the list every time. All kinds of lists are displayed near the right edge of screen, to make use of the "clear to the end of line" command of terminals.

Habituation

When we do certain moves often enough, we learn them by rote, so that we can perform them without concentrating on them or thinking. This happens always when the moves are repeated, regardless of our intentions. This interface is designed in such a way, that this learning is helpful and doesn't cause undesired accidents. Each command is invoked with a different key press, and should be invoked in different situation. The only case when the same key is reused is when it's a part of a compound command – when you press several keys in some order. This is similar to typing words and makes the compounds into different moves. It is impossible to accidentally select a scroll to read when in fact you meant to quaff a potion – the commands for doing those two different things are different.