view rogue5/rogue.html.in @ 120:d6b7c3fb37ea

srogue: add and use more md_* portable functions. Privileges and memory usage checks are now more portable.
author John "Elwin" Edwards
date Fri, 02 May 2014 15:06:23 -0700
parents f502bf60e6e4
children
line wrap: on
line source

<!-- Creator     : groff version 1.18.1 -->
<!-- CreationDate: Sat Dec 31 10:58:15 2005 -->
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta name="Content-Style" content="text/css">
<title></title>
</head>
<body>

<h1 align=center><b>A Guide to the Dungeons of Doom</b></h1>

<h2 align=center><i>Michael C. Toy<br>
Kenneth C. R. C. Arnold</i></h2>

<h3 align=center>Computer Systems Research
Group<br>
Department of Electrical Engineering and Computer
Science<br>
University of California<br>
Berkeley, California 94720</h3>


<h2 align=center><i>ABSTRACT</i></h2>

<blockquote>
	<blockquote>
		<p align="justify"><b><i><font size="2">Rogue</font></i></b><font size="2"> is a visual CRT based fantasy game which runs under the 
							UNIX† timesharing system. This paper describes how 
		to play rogue, and gives a few hints for those who might otherwise get 
		lost in the Dungeons of Doom. </font></p>
	</blockquote>
</blockquote>

<h2 align="justify"><b>1. Introduction</b></h2>

<p align="justify">You have just finished your years as a
student at the local fighter&rsquo;s guild. After much
practice and sweat you have finally completed your training
and are ready to embark upon a perilous adventure. As a test
of your skills, 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.</p>

<p align="justify">In preparation for your journey, you are
given an enchanted mace, a bow, and a quiver of arrows taken
from a dragon&rsquo;s hoard in the far off Dark Mountains.
You are also outfitted with elf-crafted armor and given
enough food to reach the dungeons. You say goodbye to family
and friends for what may be the last time and head up the
road.</p>

<p align="justify">You set out on your way to the dungeons and
after several days of uneventful travel, you see the
ancient ruins that mark the entrance to the Dungeons of
Doom. It is late at night, so you make camp at the entrance
and spend the night sleeping under the open skies. In the
morning you gather your weapons, put on your armor, eat what
is almost your last food, and enter the
dungeons.</p>

<h2 align="justify"><b>2. What is going on here?</b></h2>
<p align="justify">You have just begun a game of rogue. Your
goal is to grab as much treasure as you can, find the Amulet
of Yendor, and get out of the Dungeons of Doom alive. On the
screen, a map of where you have been and what you have seen
on the current dungeon level is kept. As you explore more of
the level, it appears on the screen in front of
you.</p>
<p align="justify">Rogue differs from most computer fantasy
games in that it is screen oriented. Commands are all one or
two keystrokes<sup>1 </sup>and the
results of your commands are displayed graphically on the
screen rather than being explained in words<sup>2</sup>.</p>
<p align="justify">Another major difference between rogue and other computer fantasy games is that once you have solved
all the puzzles in a standard fantasy game, it has lost most
of its excitement and it ceases to be fun. Rogue, on the
other hand, generates a new dungeon every time you play it
and even the author finds it an entertaining and exciting
game.</p>

<h2 align="justify"><b>3. What do all those things on the screen mean?</b></h2>
<p align="justify">In order to understand what is going on in
rogue you have to first get some grasp of what rogue is
doing with the screen. The rogue screen is intended to
replace the &ldquo;You can see ...&rdquo; descriptions of
standard fantasy games. Figure 1 is a sample of what a 
rogue screen might look like.</p>

<div align="center">

<table><tr><td>
<pre>
____________________________________________________________


                        ------------
                        |..........+
                        |..@....]..|
                        |....B.....|
                        |..........|
                        -----+------



Level: 1  Gold: 0      Hp: 12(12)  Str: 16(16)  Arm: 4  Exp: 1/0

                          Figure 1
____________________________________________________________
</pre>
</td></tr></table>
</div>
<h3 align="justify"><b>3.1. The bottom line</b></h3>
<p align="justify">At the bottom line of the screen are a few
pieces of cryptic information describing your current
status. Here is an explanation of what these things
mean:<br>
&nbsp;</p>

<table border="0" width="100%" id="table1" cellspacing="3" cellpadding="3">
	<tr>
		<td width="7%" valign="top">
		<p align="justify">Level</td>
		<td>
		<p align="justify">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.</td>
	</tr>
	<tr>
		<td valign="top">
		<p align="justify">Gold</td>
		<td>
		<p align="justify">The number of gold pieces you have managed to find and keep with you 
		so far.</td>
	</tr>
	<tr>
		<td valign="top">
		<p align="justify">Hp</td>
		<td>
		<p align="justify">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.</p>

		</td>
	</tr>
	<tr>
		<td valign="top">
		<p align="justify">Str</td>
		<td>

<p align="justify">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 num- ber,
the stronger you are. The number in the parentheses is the
maximum strength you have attained so far this
game.</p>

		</td>
	</tr>
	<tr>
		<td valign="top">
		<p align="justify">Arm</td>
		<td>
		<p align="justify">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.</p>

		</td>
	</tr>
	<tr>
		<td valign="top">
		<p align="justify">Exp</td>
		<td>
		<p align="justify">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.</p>

		</td>
	</tr>
</table>

<p align="justify">&nbsp;</p>

<h3 align="justify"><b>3.2. The top line</b></h3>
<p align="justify">The top line of the screen is reserved for
printing messages that describe things that are impossible
to represent visually. If you see a &ldquo;--More--&rdquo;
on the top line, this means that rogue wants to print
another message on the screen, but it wants to make certain
that you have read the one that is there first. To read the
next message, just type a space.</p>


<h3 align="justify"><b>3.3. The rest of the screen</b></h3>
<p align="justify">The rest of the screen is the map of the
level as you have explored it so far. Each symbol on the
screen repre- sents something. Here is a list of what the
various symbols mean:</p>
<table border="0" width="100%" id="table2" cellspacing="3" cellpadding="3">
	<tr>
		<td width="7%" align="center" valign="top">
		<p align="justify">@</td>
		<td>
		<p align="justify">This symbol represents you, the adventurer.</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">- |</td>
		<td>
		<p align="justify">These symbols represent the walls of rooms.</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">+</td>
		<td>
		<p align="justify">A door to/from a room.</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">.</td>
		<td>
		<p align="justify">The floor of a room.</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">#</td>
		<td>
		<p align="justify">The floor of a passage between rooms.</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">*</td>
		<td>
		<p align="justify">A pile or pot of gold.</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">)</td>
		<td>
		<p align="justify">A weapon of some sort.</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">]</td>
		<td>
		<p align="justify">A piece of armor.</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">!</td>
		<td>
		<p align="justify">A flask containing a magic potion.</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">?</td>
		<td>
		<p align="justify">A piece of paper, usually a magic scroll.</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">=</td>
		<td>
		<p align="justify">A ring with magic properties</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">/</td>
		<td>
		<p align="justify">A magical staff or wand</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">^</td>
		<td>
		<p align="justify">A trap, watch out for these.</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">%</td>
		<td>
		<p align="justify">A staircase to other levels</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">:</td>
		<td>
		<p align="justify">A piece of food.</td>
	</tr>
	<tr>
		<td align="center" valign="top">
		<p align="justify">A-Z</td>
		<td>
		<p align="justify">The uppercase letters represent the various 
		inhabitants of the Dungeons of Doom. Watch out, they can be nasty and 
		vicious.</td>
	</tr>
</table>


<h2 align="justify"><b>4. Commands</b></h2>
<p align="justify">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). Commands for which counts make no sense have the count 
ignored. To cancel a count or a prefix, type &lt;ESCAPE&gt; . The list of commands is
rather long, but it can be read at any time during the game
with the &ldquo;?&rdquo; command. Here it is for reference,
with a short explanation of each
command.<br>
&nbsp;</p>

<div align="center">

<table border="0" cellspacing="3" cellpadding="3" id="table3">
	<tr>
		<td valign="top" align="left">
		<p>?</td>
		<td align="justify">
		<p align="justify">The help command. Asks for a character to give help 
		on. If you type a “*”, it will list all the commands, otherwise it will 
		explain what the character you typed does.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>/</td>
		<td align="justify">
		<p>This is the “What is that on the screen?” command. A 
		“/” followed by any character that you see on the level, will tell you 
		what that character is. For instance, typing “/@” will tell you that the 
		“@” symbol represents you, the player.</td>
	</tr>
	<tr>
		<td nowrap align="left" valign="top" colspan="2">
		<p>h, H, ^H</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		&nbsp;</td>
		<td align="justify">
		<p align="justify">Move left. You move one space to the left. If you use 
		upper case “h”, you will continue to move left until you run into 
		something. This works for all movement commands (e.g. “L” means run in 
		direction “l”) If you use the “control” “h”, you will continue moving in 
		the specified direction until you pass something interesting or run into 
		a wall. You should experiment with this, since it is a very useful 
		command, but very difficult to describe. This also works for all movement
commands.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>j</td>
		<td align="justify">
		<p align="justify">Move down.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>k</td>
		<td align="justify">
		<p align="justify">Move up.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>l</td>
		<td align="justify">
		<p align="justify">Move right.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>y</td>
		<td align="justify">
		<p align="justify">Move diagonally up and left.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>u</td>
		<td align="justify">
		<p align="justify">Move diagonally up and right.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>b</td>
		<td align="justify">
		<p align="justify">Move diagonally down and left.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>n</td>
		<td align="justify">
		<p align="justify">Move diagonally down and right.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>t</td>
		<td align="justify">
		<p align="justify">Throw an object. This is a prefix command. When followed with a 
		direction it throws an object in the specified direction. (e.g. type
&ldquo;th&rdquo; to throw something to the
left.)</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>f</td>
		<td align="justify">
		<p align="justify">Fight until someone dies. When followed with a direction this will force you to fight the creature
in that direction until either you or it bites the big
one.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>m</td>
		<td align="justify">
		<p align="justify">Move onto something without picking it up. This will move you one 
		space in the direction you specify and, if there is an object there you 
		can pick up, it won’t do it.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>z</td>
		<td align="justify">
		<p align="justify">Zap prefix. Point a staff or wand in a given direction and fire it. 
		Even non-directional staves must be pointed in some direction to be 
		used.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>^</td>
		<td align="justify">
		<p align="justify">Identify trap command. If a trap is on your map and you can’t 
		remember what type it is, you can get rogue to remind you by getting 
		next to it and typing “^” followed by the direction that would move
you on top of it.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>s</td>
		<td align="justify">
		<p align="justify">Search for traps and secret doors. Examine each space immediately 
		adjacent to you for the existence of a trap or secret door. There is a 
		large chance that even if there is something there, you won’t find it, 
		so you might have to search a while before you find something.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>&gt;</td>
		<td align="justify">
		<p>Climb down a staircase to the next level. Not surprisingly, this can only be done if you are
standing on staircase.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>&lt;</td>
		<td align="justify">
		<p>Climb up a staircase to the level above. This can’t be done without 
		the Amulet of Yendor
in your possession.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>.</td>
		<td align="justify">
		<p>Rest. This is the “do nothing” command. This is good for waiting and 
		healing.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>,</td>
		<td align="justify">
		<p>Pick up something. This picks up whatever you are currently standing on, if you are
standing on anything at all.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>i</td>
		<td align="justify">
		<p>Inventory. List what you are carrying in
your pack.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>I</td>
		<td align="justify">
		<p>Selective inventory. Tells you what a single item in your pack is.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>q</td>
		<td align="justify">
		<p align="justify">Quaff one of the potions you are carrying.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>r</td>
		<td align="justify">
		<p align="justify">Read one of the scrolls in your pack.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>e</td>
		<td align="justify">
		<p align="justify">Eat food from your pack.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>w</td>
		<td align="justify">
		<p align="justify">Wield a weapon. Take a weapon out of your pack and carry it for use 
		in combat, replacing the one you are currently using (if any).</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>W</td>
		<td align="justify">
		<p align="justify">Wear armor. You can only wear one suit of armor at a time. This 
		takes extra time.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>T</td>
		<td align="justify">
		<p align="justify">Take armor off. You can’t remove armor that is cursed. This takes 
		extra time.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>P</td>
		<td align="justify">
		<p align="justify">Put on a ring. You can wear only two rings at a time (one on each 
		hand). If you aren’t wearing any rings, this command will ask you which 
		hand you want to wear it on, otherwise, it will place it on the unused 
		hand. The program assumes that you wield your sword in your right hand.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>R</td>
		<td align="justify">
		<p align="justify">Remove a ring. If you are only wearing one ring, this command takes 
		it off. If you are wearing two, it will ask you which one you wish to 
		remove,</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>d</td>
		<td align="justify">
		<p align="justify">Drop an object. Take something out of your pack and leave it lying 
		on the floor. Only one object can occupy each space. You cannot drop a 
		cursed object at all if you are wielding or wearing it.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>c</td>
		<td align="justify">
		<p align="justify">Call an object something. If you have a type of object in your pack 
		which you wish to remember something about, you can use the call command 
		to give a name to that type of object. This is usually used when you 
		figure out what a potion, scroll, ring, or staff is after you pick it 
		up, or when you want to remember which of those swords in your pack you 
		were wielding.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>D</td>
		<td align="justify">
		<p align="justify">Print out which things you’ve discovered something about. This 
		command will ask you what type of thing you are interested in. If you 
		type the character for a given type of object (<i>e.g.</i>
&ldquo;!&rdquo; for potion) it will tell you which kinds of
that type of object you&rsquo;ve discovered (<i>i.e.</i>, figured out what they 
		are). This command works for
potions, scrolls, rings, and staves and
wands.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>o</td>
		<td align="justify">
		<p align="justify">Examine and set options. This command is further explained in the 
		section on options.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>^R</td>
		<td align="justify">
		<p>Redraws the screen. Useful if spurious messages or transmission 
		errors have messed up the display.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>^P</td>
		<td align="justify">
		<p align="justify">Print last message. Useful when a message disappears before you can 
		read it. This only repeats the last message that was not a mistyped 
		command so that you don’t loose anything by accidentally typing the 
		wrong character instead of ^P.</td>
	</tr>
	<tr>
		<td align="left" valign="top" colspan="2">
		<p>&lt;ESCAPE&gt;</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		&nbsp;</td>
		<td align="justify">
		Cancel a command, prefix, or count.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>!</td>
		<td align="justify">
		<p align="justify">Escape to a shell for some commands.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>Q</td>
		<td align="justify">
		<p align="justify">Quit. Leave the game.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>S</td>
		<td align="justify">
		<p align="justify">Save the current game in a file. It will ask you whether you wish to 
		use the default save file.
<i>Caveat</i>: Rogue won&rsquo;t let you start up a copy of
a saved game, and it removes the save file as soon as you
start up a restored game. This is to prevent people from
saving a game just before a dangerous position and then
restart- ing it if they die. To restore a saved game, give
the file name as an argument to rogue. As
in</p>
		<p align="justify">% rogue
<i>save_file</i></p>
		<p align="justify">To restart from the default save file (see below), run </p>
		<p align="justify">% rogue -r</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>v</td>
		<td align="justify">
		<p align="justify">Prints the program version number.</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>)</td>
		<td align="justify">
		<p align="justify">Print the weapon you are currently wielding</td>
	</tr>
	<tr>
		<td height="28" align="left" valign="top">
		<p>]</td>
		<td height="28" align="justify">
		<p align="justify">Print the armor you are currently wearing</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>=</td>
		<td align="justify">
		<p align="justify">Print the rings you are currently wearing</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p>@</td>
		<td align="justify">
		<p align="justify">Reprint the status line on the message line</td>
	</tr>
</table>

</div>

<h2 align="justify"><b>5. Rooms</b></h2>
<p align="justify">Rooms in the dungeons are either lit or
dark. If you walk into a lit room, the entire room will be
drawn on the screen as soon as you enter. If you walk into a
dark room, it will only be displayed as you explore it. Upon
leaving a room, all monsters inside the room are erased from
the screen. In the darkness you can only see one space in
all directions around you. A corridor is always
dark.</p>

<h2 align="justify"><b>6. Fighting</b></h2>
<p align="justify">If you see a monster and you wish to fight
it, just attempt to run into it. Many times a monster you
find will mind its own business unless you attack it. It is
often the case that discretion is the better part of
valor.</p>

<h2 align="justify"><b>7. Objects you can find</b></h2>
<p align="justify">When you find something in the dungeon, it
is common to want to pick the object up. This is
accomplished in rogue by walking over the object (unless you
use the &ldquo;m&rdquo; prefix, see above). If you are
carrying too many things, the pro- gram will tell you and it
won&rsquo;t pick up the object, other- wise it will add it
to your pack and tell you what you just picked
up.</p>

<p align="justify">Many of the commands that operate on
objects must prompt you to find out which object you want to
use. If you change your mind and don&rsquo;t want to do that
command after all, just type an
&lt;ESCAPE&gt; and the command will be
aborted.</p>

<p align="justify">Some objects, like armor and weapons, are
easily dif- ferentiated. Others, like scrolls and potions,
are given labels which vary according to type. During a
game, any two of the same kind of object with the same label
are the same type. However, the labels will vary from game
to game.</p>