§ root / l / g / rogue

Rogue

Rogue aka Rogue: Exploring the Dungeons of Doom was developed first by Michael Toy and Glenn Wichman at the Santa Cruz University of California in 1980 and later Ken Arnold also joined Michael Toy to continue developing the game at the Univerity of Berkeley.

Rogue is a top-down, procedural dungeon crawler with ASCII graphics. It was first developed on a PDP-11/70, a mainframe computer. This means people played at a local terminal but all the game logic was executed on a machine that could be miles away. A mainframe supports multiple users at once but Rogue is a single player game. Rogue was written in C, so was easy to port widely, including being bundled with the BSD operating system.

Exploring the dungeons of doom in Rogue
Exploring the dungeons of doom in Rogue

Rogue inspired a whole genre of games, coining the term roguelike, there are far too many to list but a few notable ones include Nethack, Diablo, Spelunky and more. That said, Rogue isn’t the first game of it’s type, prior to Rogue there was a similar game called Beneath Apple Manor but none of the Rogue developers had played it. Even before Beneath Apple Manor, Orthanc on the PLATO system had randomly generated levels in 1975. Both Beneath Apple Manor and Rogue cite Colossal Cave Adventure and Dungeons and Dragons as inspirations.

Gameplay Video

This gameplay video shows Rogue close to how it would have appeared on a UNIX mainframe.

Setting

Rogue is a top-down, grid based game where the player explores a subterranean dungeon one level at time. Rogue represents the game world with an ASCII grid of 80 by 24 characters. Each dungeon level is made up of rooms linked by corridors and the player character is represented by an @ sign, perhaps a play on “where you’re at”. Everything in the game world is represented by a different ASCII character.

The games loops derive from Dungeons and Dragons much like older CRPGs on the PLATO system. You explore a randomly generated dungeon a tile at time, fighting monsters, finding loot and searching for a staircase to delve deeper into the dungeon.

Goal

The goal is to find the Amulet of Yendor in the dungeon and bring it back up to the surface.

The narrative setting is described below:

The local guildmasters have sent you into the Dungeons of Doom. Your task is to return with the Amulet of Yendor. Your reward for the completion of this task will be a full membership in the local guild. In addition, you are allowed to keep all the loot you bring back from the dungeons.

A Guide to the Dungeons of Doom 📖

Character Creation

There is no character creation in Rogue, instead the game begins with your character on the first level of the dungeon, ready to explore.

The first screen of the game after launching.
The first screen of the game after launching.

The Rogue character always begins at level 1, experience 0 and hit points at 12. The characters strength is either 16 or 18 plus a random number, 1 to 99, of “incremental strength points”. Incremental strength is a Dungeons and Dragons conceit, that represents some additional strength above the maximum of 18.

The character begins the adventure with the following items:

  • a mace (+1, +1)
  • a bow
  • arrows (randomly 25 to 39)
  • ring mail
  • a set of food rations
Starting inventory.
Starting inventory.

The Rogue’s starting mace is enchanted but why two numbers? This again, is the legacy of Dungeons and Dragons. The first number is a bonus to hit, when calculating if an attack connects with the enemy, this number is added as a bonus. The second number is a bonus to damage, once the attack connects an extra point of damage is applied.

We always thought of Rogue as somewhat whimsical and a little off-the-wall, and we envisioned Rodney (the character you play, represented by the @) as kind of a goofy loser, not a brave warrior.

The amulet of Yendor, that the player is after, is the word “Rodney” spelt backwards.

Stats

The stats are shown at the bottom of the screen at all time. The descriptions of the stats below, are taken from “A Guide to the Dungeons of Doom” by Michael Toy and Ken Arnold.

  • Level - This number indicates how deep you have gone in the dungeon. It starts at one and goes up as you go deeper into the dungeon.

  • Gold - The number of gold pieces you have managed to find and keep with you so far.

  • Hp - Your current and maximum health points. Health points indicate how much damage you can take before you die. The more you get hit in a fight, the lower they get. You can regain health points by resting. The number in parentheses is the maximum number your health points can reach.

  • Str - Your current strength and maximum ever strength. This can be any integer less than or equal to 31, or greater than or equal to three. The higher the number, the stronger you are. The number in the parentheses is the maximum strength you have attained so far this game.

  • Arm - Your current armor protection. This number indicates how effective your armor is in stopping blows from unfriendly creatures. The higher this number is, the more effective the armor.

  • Exp - These two numbers give your current experience level and experience points. As you do things, you gain experience points. At certain experience point totals, you gain an experience level. The more experienced you are, the better you are able to fight and to withstand magical attacks.

These stats are familiar to both modern gamers and gamers in the 80s who played Dungeons and Dragons or played previous CRPGS. The only thing worth pointing out is that the Level stat on the status bar, tracks how deep you are in the dungeon, not your experience level. The character experience level is displayed next to the Exp stat after a forward slash.

Classes

Rogue doesn’t have distinct classes or any class based skills. All player characters are equally able to fight, equip weapons and armor and read magic scrolls.

Input

Rogue was originally written to be played on mainframes using a dumb terminal. Such terminals use a keyboard quite similar to the keyboards of today.

Rogue makes full use of the keyboard, nearly ever key performs some action. Many of these original keys and commands were adopted by later roguelikes, such as > for going downstairs, Q for Quaffing a potion and so on.

The controls for moving the character around the world are the same as moving a cursor around the Vi text editing software - with h/j/k/l being left/up/down/right. In Rogue, you can also move diagonally. Each move is a single tile and a movement counts as turn, so every other creature takes their move afterwards.

I won’t give a full listing of the actions but here is a selection

  • t - Throw an object.
  • f - Fight until death.
  • m - Move in a chosen direction but don’t automatically pick up an item on that tile.
  • z - Zap a wand or staff in a given direction.
  • ^ - Identity a trap. (Replaced by the more generic examine in later Roguelikes)
  • and so on. A full listing available in the manual.

This many unique keys for interaction seems overwhelming but by playing the game you quickly learn the common ones. Note that many of these actions require follow up information and therefore these actions are stateful. Press m to move, and you enter a “choose movement” state where you need to press a movement key to say which direction you want to move, or cancel the command.

Some later versions of Rogue supported simple marco commands.

Commands are given to rogue by typing one or two characters. Most commands can be preceded by a count to repeat them (e.g. typing 10s will do ten searches).

A Guide to the Dungeons of Doom 📖

Exploration

Rogue is a turn-based game. The player moves a tile at a time to explore each level of the dungeon. The dungeon levels in Rogue are randomly generated and there’s no limit to the number of dungeon levels, each level is generated with a staircase to another level below.

The level generation algorithm was basic but worked well, it’s described below:

“In Rogue, every level is a tic-tac-toe board; it’s exactly nine rooms in a three-by-three grid,” Wichman explained. “We basically divided the screen into those nine areas, and then put a room in each area.”

“[what] We were never happy with was the way rooms were laid out on the dungeon level – always between 6 and 9 rooms in a tic-tac-toe pattern. We wanted to have the levels much more free-form, but we just couldn’t figure out how to do it.”

Dungeons are made up of rooms, corridors and doors, each represented by ASCII characters. Doors open automatically as the character moves through them, which makes a nice change from earlier games that insisted on using special commands to pass through doors such as Beneath Apple Manor or The Dungeon on PLATO.

In most cases when you first enter a room, the entire room is revealed at once with all it’s contents. Corridors, however, are only revealed a tile at a time. Monsters start in the rooms but can wander into the corridors. There are traps and loot littered throughout the rooms. Some doors are secret. Secret doors appear just like walls until the player discovers them by using the s key to search.

Inventory

The inventory in Rogue is a simple list of 24 items. There’s no weight counter or encumberance. Items of the same type stack. So 10 arrows takes up a single slot, rather than 10. Each item in the list has a letter from a to x. Using this letter you can refer to an item from another menu. For instance, if you cast a spell of identify and you’re carrying a red potion then to indicate you want to identify the potion you need to enter it’s letter from the inventory screen.

Inventory in Rogue.
Inventory in Rogue.

You could only hold 24 things at a time because there were only 24 lines that could be shown on the terminal.

Picking up a scroll on the floor by walking on it.

By default you pick up any item you walk across and to remove inventory items you can throw them in a direction or drop them on an neighbouring tile.

The way we designed the game, if you walk over something, you automatically pick it up.

There’s no separate menu to display equipment the character is using, instead that’s indicated directly on the inventory screen. If a piece of armor is worn, it’s description will have the text “(being worn)” appended to it and a similar message for weapons, rings and so on.

Rogue doesn’t have a way to generically use an item. Instead you choose one of the many verbs available as a keypress such as throw, quaff, drop etc. and it then asks you to choose an item to perform the action on. It does nothing to filter the items to apply these actions to, so you’re welcome to tell the your character to quaff a staff and they’ll just say it can’t be done.

Items

Rogue has the following item types:

  • Potions
  • Scrolls
  • Weapons
  • Armor
  • Rings
  • Wands
  • Food
  • Gold

Rogue has many non-trivial items; the potions, scrolls, rings and wands all have special fuctions. These items may adjust different stats or introduce a new special ability. For instance a potion might confuse the character, heal them, poison them, allow them to see invisible enemies and so on.

Food items are either a ration of food or, by default, a slime-mold. By default? Well, in my copy of the the 3.6 source code you can override the secondary food with your own entry, the code asks you to choose the name of a fruit. The default fruit is “slime mold”, a type of living thing (“eukaryotic organisms”) that looks like a slime. This made it into Rogue because “there was a slime mold growing on a drainage pipe behind the dining hall at U.C. Santa Cruz and it became a running joke in the college to put slime mold references in things”.

The see invisible potion when quaffed uses the fruit name as follows:

msg("This potion tastes like %s juice.", fruit);

So, in the default case, this will say “This tastes like slime mold juice”, a line later adopted by Nethack.

Equipment System

Rogue has a basic slot-like equipment system. The character has:

  • one armor slot
  • one weapon slot
  • two ring slots

Each slot is restricted to certain types of equipment. Only weapons can go in the weapon slot etc. When an item is assigned to the slot, it does not move from the main inventory, it still takes up a space there. In Rogue’s verb-first interface, you chose the action and then the target, so for equipping the following verbs are available: w to wield a weapon, W to wear armor, T to take armor off, P to put on a ring and R to remove one. When equipping a ring the player is prompted to choose a hand.

The weapons available are as follows:

  • Mace - 2d4 (thrown 1d3)
  • Sword - 1d10 (thrown 1d3)
  • Bow - 1d1 (thrown 1d6)
  • Arrow - 1d1 (thrown 1d6)
  • Dagger - 1d6 (thrown 1d4)
  • Rock - 1d2 (thrown 1d4)
  • Two-handed Sword - 3D6 (thrown 1d2)
  • Sling - 1d2 (thrown 0d0)
  • Dart - 1d1 (thrown 1d3)
  • Crossbow - 1d1 (thrown 1d1)
  • Bolt - 1d2 (thrown 1d10)
  • Spear - 1d8 (thrown 1d6)

The Rogue starts with a magic mace so most weapons you find in the game are worse, unless they’re enchanted. Weapon attack damage is defined using dice rolls. The mace base damage is 2d4, which means 2 dice of 4 sides giving a range of 2 - 8 damage.

The armors available are:

  • Leather armor - AC 8
  • Ring mail - AC 7
  • Studded leather armor - AC 7
  • Scale mail - AC 6
  • Chain mail - AC 5
  • Splint mail - AC 4
  • Banded mail - AC 4
  • Plate mail - AC 3

Armor uses the original Dungeons and Dragons system of a lower number meaning the armor is better.

Enchantment and Curses

Weapons, rings and armor, found in the dungeon, may be enchanted which gives them better armor or damage bonuses. Enchanted item are generated relatively rarely and the maximum bonus is +3. If the item is cursed, which is slightly more likely, the bonus is subtracted but again to a max of -3.

If you attempt to drop or remove a cursed item, you get the message “You can’t. It appears to be cursed.”. Curses can be removed by reading a remove curse scroll or an enchant scroll.

Combat

Rogue is not real time. If you don’t touch the keyboard, time is frozen. Everytime you do press a key to perform an action, everything else in the game also takes a turn. To attack in Rogue you merely attempt to move on to the enemies position. Your attack is then calculated and if the enemy lives, they’ll perform a counter attack. If you’re adjacent to an enemy and move away from them, they’ll have a chance to attack you as you escape.

The combat calculations are based on Dungeons and Dragons. Rogue does a “do you manage to hit the enemy” and a “how many points you hit the enemy for” calculation.

The tohit calculation is:

to_hit_threshold = (21 - character_level) - opponent_armor_class;
return roll("1d20") + (weapon_hit_bonus + str_bonus) >= to_hit_threshold 

Let’s say you have no magic weapon and you’re not particularly strong, so weapon_hit_bonus and str_bonus are both zero. Then let’s put you at level 1, and let’s say the enemy is a zombie with an armor class of 8. In that case the above formula would become:

return roll("1d20") >= 12

That comes out to a 45% chance to hit the zombie for a not strong, no magic weapon, level 1 adventurer. Damage is determined by weapon stats, and a mace’s damage is 2d8.

damage = damage_bonus + weapon_dice_roll + str_bonus;

The damage_bonus comes from the enchantments on the weapon, rings etc. The code is in fight.c if you want to check it out yourself.

To engage in ranged combat you must use the throw command, even for shooting a bow! If you throw arrows and have a bow equipped they do 1d6 damage versus 1d1.

Magic

The magic system in Rogue is based around items. If you have magic scroll you may read it, trigger the effect and then the scroll is spent and disappears. Drinking a potion is a similar one use affair. However if you find a wand then it has a number of charges that allow it to be used multiple times, however the number of charges is secret. You won’t know how many charges a wand had until it stops working.

The scare monster scroll is a special kind of scroll. Monsters are scared of the scroll itself. The player is supposed to drop the scroll in, say a doorway, and then runaway. If you read a scare monster scroll it disappears without any effect.

Monsters

In the version of Rogue source code I have access to, 3.6, these are monsters:

  • giant ant
  • bat
  • centaur
  • dragon
  • floating eye
  • violet fungi
  • gnome
  • hobgoblin
  • invisible stalker
  • jackal
  • kobold
  • leprechaun
  • mimic
  • nymph
  • orc
  • purple worm
  • quasit
  • rust monster
  • snake
  • troll
  • umber hulk
  • vampire
  • wraith
  • xorn
  • yeti
  • zombie

Each monster is represented by one of twenty-six ASCII characters, this constraint and the influence of Dungeons and Dragons helped define the monsters in the early versions of Rogue.

Legend Odinson Q: No one asked the most important question. WHY AN EMU?! […]
Glenn Wichman A: Why not an emu? (Finding a monster for every letter is hard)

Some of these monster were later changed to prevent any copyright issues with Dungeons and Dragons content. To me, what is most suprising about this early list of monsters is that there’s no r for a giant rat, a classic CRPG early enemy.

Monster AI is basic. It is mostly a combination of waiting, random movement and chasing. Monsters don’t necessarily only chase the player, Dragons have a special case where they’ll chase any gold on the floor.

Staying too long on a level means eventually a “wandering monster” may spawn. Only a certain subset of the monsters may be spawned as wandering monsters. On death, monsters drop any loot they’re were carrying.

Advancement

Experience is gained by killing monsters and at certain hard coded thresholds you advance to the next level. Your maximum level is 20. Gaining a level means you increase your max hp by 1D10, assuming I’m reading the code correctly!

Levelling up in Rogue.
Levelling up in Rogue.

Here are the thresholds, and you start at level 1:

  • 10
  • 20
  • 40
  • 80
  • 160
  • 320
  • 640
  • 1280
  • 2560
  • 5120
  • 10240
  • 20480
  • 40920
  • 81920
  • 163840
  • 327680
  • 655360
  • 1310720
  • 2621440

Apart from maximum hitpoints no other stats are increased when gaining a level but some calculations take the character level into account when determining the outcome of various events, for instance resisting a posion attack.

Systems

Rogue had a number of Dungeons and Dragons inspired systems as well a few novel systems created to balance the game or to achieve it’s goal of being an adventure that would be fun, and hopefully suprising, for the developers to replay.

In the source Rogue has a lot of special cased code but there’s a few widely used systems. One central system it calls “fuses”, where a fuse is a piece of code that gets called after X number of turns. This can be used to track things like hunger, status effects such as confusion, posion and so on. In Rogue this is a list of function pointers with a counter to determine which turn the effect triggers.

Scoring System

Rogue was played on mainframes, i.e. many players played on the same server. The game itself is strictly single player but there’s a scoreboard shared with every other user of that system. Scores are based the amount of loot you recover from the dungeon. Every item you carry has a hidden worth stat and these values are summed up to give you a score when you win the game. Any gold pieces carried are added on to this score.

You have joined the elite ranks of those who have escaped the Dungeons of Doom alive. You journey home and sell all your loot at a great profit and are admitted to the fighters guild.

Rogue is an originator CRPG but it’s interesting that scoreboards were quite a common feature of early CRPGs, such as PLATO’s The Dungeon aka pedit5.

Hunger

The dungeon levels in Rogue have limited food and as a player your characters “food clock” runs down turn-by-turn. This forces the player to keep advancing deeper into the dungeon, in search of food, and prevents players from being able to grind to victory.

Traps

In Rogue, traps are hidden on certain grid squares. When you step on a hidden trap, it’s activated and appears on the map. Traps are never removed and can be reactivated by walking on the trap position again. The player can also reveal traps using the search command. There’s a 50% chance of finding a trap when searching.

Rogue has the following types of trap:

  1. Trapdoor - You drop down to the next dungeon level. No chance to avoid this if you’ve activated it.
  2. Bear Trap - You cannot move for a three turns. No chance to avoid.
  3. Sleep Trap - You cannot do any action for five turns. No chance to avoid.
  4. Arrow Trap - An arrow attack is performed, there’s a chance to avoid this and if you do the arrow is added in the world.
  5. Teleport Trap - Teleports you to a random place in the dungeon.
  6. Dart Trap - 1d4 damage with a chance to dodge. If you are hit your strength is reduced by 1. If you’re wearing a ring of sustain strength then you strength is not drained.

Any trap placed in the dungeon has an equal chance of being any one of the traps listed above. To decide if a level has any traps at all a 1d9 is rolled and if the result is less than the current dungeon depth then no traps are placed. This means from level 10 onwards all levels will have traps. At level 1 you have 1 in 9 chance of having traps.

Once it’s been determined a level will have traps, the game decides how many to generate. The maximum number that can be generated is 10 and more traps are generated on deeper levels (the level depth divided by 4).

Status Effects

Status effects in Rogue may apply to the player character as well as the monsters. These include confusion, sleep, “hold monster”, “See invisible”, “Regeneration” etc. These are gained via reading scrolls, drinking potions or some enemy attacks.

Knowledge System

Is this the first game with unidentified items? It’s certainly the first game that has Rogue’s knowledge system where you do not identify particular instances of an item, instead you identify types of item.

In Rogue, the function of all scrolls, potions, right, wands and staves is unknown each time the player starts the game.

When the player encounters one of these items in the game they have a simple description based on their appearance. A player might pick up a Purple Potion, then he might pick up another Purple Potion. In Rogue, these potions have the same description and are therefore the same but the player doesn’t know what the potion does. Let’s say the player drinks the potion and they get the in-game message “You feel stronger, now. What bulging muscles!”, the player now automatically knows this a strength potion, all Purple Potions now appear as a “A potion of strength”.

How Rogue learns.
How Rogue learns.

That’s a cool system but there’s another level to it. Let’s say the player picks up a Yellow Potion and they drink it. This time it’s a magic detection potion that shows scrolls and other potions nearby BUT none of these are nearby. The player has used a potion but it’s magically ability did not reveal itself. In that case the player does notautomatically know this potion is “A potion of magic detection”, instead the player is asked to name the potion. So the player might write “Non-dangerous potion” and from then on, all Yellow Potions will be called “Non-dangerous potion”. Then later if they use this potion successful or identify it’s purpose with magic it will be finally renamed “A potion of magic detection”.

How Rogue's knowledge system works when picking up an item.
How Rogue's knowledge system works when picking up an item.

This a type of exploration but instead of geography it’s knowledge, even if that knowledge is just a simple list of unknown length with each item having a “known” or “unknown” flag set. Taken from the 3.6 code here’s the setup for knowledge tables:

bool s_know[MAXSCROLLS]; // Does he know what a scroll does
bool p_know[MAXPOTIONS]; // Does he know what a potion does
bool r_know[MAXRINGS];   // Does he know what a ring does
bool ws_know[MAXSTICKS]; // Does he know what a stick does

Interestingly the C language doesn’t have a bool type out of the box. The bool comes from the curses library. All that’s happening here is; you have a boolean that can be set as true or false for every item that exists in the game. If the flag is true then the player knows what is is, if false they’re using it blind. Every item in the game has a unique number that can be used as index into these _know tables.

The id number is stored in the object struct in “rogue.h” here:

struct object {
  // ... lots of other properties

  int o_which; // Which object of a type it is 

  // ... 
};

Sometimes you discover an item by using it automatically.

when WS_LIGHT:
  // Ready Kilowat wand. Light up the room
  ws_know[WS_LIGHT] = TRUE;

Sometimes you need to use the item in the right way or under the right circumstances.

when P_MFIND:
  // Potion of monster detection, if there are monters, detect them
  if (mlist != NULL)
  {
    wclear(hw);
    overwrite(mw, hw);
    show_win(hw, "You begin to sense the presence of monsters.--More--");
    p_know[P_MFIND] = TRUE;
  }
  else
    msg("You have a strange feeling for a moment, then it passes.");

The comment tells us this is a potion of monster detection but the knowledge flag is only set to true if there are monsters around to be detected. If you use an item for the first time and fail to discover what it does, Rogue invites you to guess and give it a name. That way you at least know the items you’ve tried, even if you’re not exactly sure what they do.

In some cases you cannot gain knowledge of an item type with out using an identify spell on one of the instances of those items.

char* s_guess[MAXSCROLLS];  // Players guess at what scroll is 
char* p_guess[MAXPOTIONS];  // Players guess at what potion is 
char* r_guess[MAXRINGS];    // Players guess at what ring is 
char* ws_guess[MAXSTICKS];  // Players guess at what wand is 

It’s hard to know when the knowledge system was introduced but it wsas either there from the start or some before 1981 which is where the above source code is dated to.

Development

Development originally began with Glenn Wichman at the University of Santa Cruz in California. Glenn joined the university with a plan learn about tabletop game design by choosing his own modules. There Glenn enocountered text adventures games on the University’s PDP-11. He wanted to write his own in BASIC and while attempting this he met Michael Toy. Michael was already familiar with programming and together they traded ideas and wrote text adventures. At this time they were both 19.

From these initial games grew a desire to write a game that would be procedurally generated, so that it would be fun and unexpected even for the author.

One of the things we wanted to do was create a game we could enjoy playing ourselves. Most of the existing adventure-type games had “canned” adventures – they were exactly the same every time you played, and of course the programmers had to invent all of the puzzles, and therefore would always know how to beat the game. We decided that with Rogue, the program itself should “build the dungeon”, giving you a new adventure every time you played, and making it possible for even the creators to be surprised by the game.

One day Michael showed up with a library of code routines called “curses”, which had been created by Ken Arnold at UC Berkeley, based on the work of Bill Joy. This library made it easy to create “graphics” on “dumb terminals” using “cursor addressing” to put “ascii art” on the screens… skipping over lots of background information there, but I’m already going on too long. Anyway, it gave us the opportunity to make whole different sorts of games from what we had done before. But they had to be written in “C” and Michael had mastered “C” but I was still learning it. We created several simple graphical games but then Michael said, “could we create a graphical adventure game?”

Ken Arnold Curses library gave Michael and Glenn the ability to write ASCII-like characters relatively quickly anywhere on the screen, this combined with their desire for a graphical adventure and interest in D&D gave rise to the idea of the computer creating the dungeon.

Shortly after Rogue started making the rounds, Toy’s focus on computers and games caught up with him. His grades got him kicked out of UC Santa Cruz. He lined up a job in the computer labs at UC Berkeley, where he hoped that pursuing knowledge of computers in return for a paycheck instead of grades would serve him better.

Around 1982, Michael’s attention to Rogue and computer games caused him to suffer poor academic performance, and he was kicked out of the school, shortly finding employment at University of California, Berkeley in their computer lab where he met up with Ken Arnold. At this point Rogue somewhat forked, Glenn in Santa Cruz continue working on his version of Rogue and at Berkeley Michael and Ken worked on their own version. Shortly after Glenn stopped working on his version of Rogue and the Micheal and Ken’s Rogue became the official line, such that one existed.

In interviews Glenn mentioned he had a preference for not spelling things out i.e. monster hit points are not displayed.

Legacy

Rogue was widely available and very popular which made it particularly influential.

The creator of the C programming language and co-creator of the Unix system, Dennis Ritchie, claimed that Rogue “wasted more CPU time than anything in history.”

While it may not have been the first game to introduce procedural levels, fog of war, unidentified items and permadeath, it certainly popularised these ideas. It’s also one of the few games orginating on the UNIX platform. Perhaps these UNIX origins are why Rogue and many ASCII-style Roguelikes found it hard to achieve commercial success.

Like many games created in academic context, development never really stopped, there was a playable version of Rogue in 1980 but six years later the game was still being extended, which makes dating any particular innovation quite hard.

Rogue’s move to Berkeley was fortuitous. U.C. Berkeley was the home of a particularly popular version of UNIX called BSD (Berkeley Standard Distribution). Version 4.2 of BSD UNIX included Rogue – suddenly, the game was available on university computers all over the world. At the time, there was no other game like it. Over the next 3 years, Rogue became the undisputed most popular game on college campuses.

Rogue was not opensource and therefore any early Roguelikes such as Hack were written from scratch.

A whole genre of games are now referred to as roguelikes and there’s even a paper called “The Berlin Interpretation” about what traits a game should have to be counted as part of this genre. The term Roguelike became popular almost a decade after Rogue was written, in the early 1990s.

Rogue’s identification and knowledge system is a first and is widely emulated in future roguelikes.

Epyx

Rogue was distributed for free on mainframe computers. Michael Toy and Jon Lane later tried to commercialize Rogue for IBM-PCs and this version of Rogue was ultimately published by Epyx. The PC Rogue wasn’t considered a commercial success but was widely pirated and played. It’s the version of Rogue available on Steam. The IBM PC used the PC’s expanded character set making the ASCII graphics a little more readable and replacing the @ symbol with ☺.

The PC box art for Rogue.
The PC box art for Rogue.
Gameplay of the IBM-PC version of Rogue.
Gameplay of the IBM-PC version of Rogue.
Influences

In the Eggplant podcast Glenn talks about how he played Dungeons and Dragons in both highschool and college and that Rogue was initially an attempt to make a Dungeons and Dragons game for the computer.

❖ Adventure
“We were both big fans of Adventure,” recalls Wichman, “and we were musing about whether we could do a graphic Adventure-like game. I didn’t think it would be possible, but then Michael came up with the overhead map view idea, and it all started to fall into place.”
❖ Dungeons and Dragons
“In the very first version, the monsters and their strengths and abilities were very closely modelled on Dungeons & Dragons,” explains Wichman, “but we quickly changed this to avoid getting in trouble with Gygax and Arneson.”