Monday, May 27, 2019

Game 62: Defender

Holy bee turds, this game is intense. You blink, and you’re dead. Focus on trying to stay alive, and before you know it, one of those green space invaders will have scooped up a colonist on the other side of the planet, and then you’ll have no chance of getting there in time to save him. Miss too many shots while trying to mop up a final cloud of tiny hornet-like aliens, whose electron-high hitboxes and erratic weaving patterns make shooting them like trying to snipe at flies buzzing about a cathedral, and the game will spawn another alien, twice as aggressive and just as impossible to hit.

And yet, it doesn’t feel all that unfair. I found that Defender is very generous with awarding extra lives, and most of my deaths were due being overwhelmed by the sheer amount of stuff happening, or to my own carelessness.

The controls and gameplay are complex for an arcade game of this period. A two-direction joystick controls your altitude, and two buttons are used to thrust or reverse direction. Like Asteroids, you are carried by inertia even when you aren’t thrusting, and although you can reverse direction instantly, this does not cancel out your momentum. You can therefore fly backwards by releasing thrust and reversing, which is often a useful battle tactic. Two more buttons are for your weapons; you have bullets that can (and must) be spammed and leave a laser-like trails streaking across the screen, and you have a limited supply of smart bombs which destroy everything on the screen (usually), and sometimes the carnage continues off-screen as well. Finally, you have a hyperspace button for getting you out of a jam, which just like Asteroids, randomly teleports you to another part of the screen, and will kill you outright about what feels like 25% of the time, which is better odds than in Asteroids.

An attract mode shows you a diorama of the aliens you’ll face.


  • Lander –Green space invaders, who spawn in waves, move slowly (relative to the other aliens) and aimlessly, and fire slow moving bullets at you when they see you, but don’t really pursue you. They’re the only threat to the colonists walking on the surface, except for your own errant shots. They will randomly swoop down at colonists on the surface, and carry them up into space rather quickly. It’s almost futile to try to react to this unless they happen to be very close when it happens, but if you destroy the lander, it will drop the colonist, and you can get 250 points for picking it up, and another 250 for dropping it back on the surface. Crashing into the surface is impossible, thankfully. But if the lander carries the colonist all the way to the top of the screen, the colonist dies and the lander becomes a…
  • Mutant –Faster, more erratic and aggressive landers who ignore colonists and target you while dodging your shots.
  • Baiter – Bullet-firing UFO’s who spawn one at a time and relentlessly target you once the waves of landers are done. They don’t appear at first, but once fewer than four aliens remain, they’ll start appearing every five seconds or so. They may also start spawning if you’re too far away from the action for too long. They’re faster than you, but have trouble reversing direction, making it ideal to let them overtake you and then hit them as they slow down to reverse. Their narrow profile makes hitting them quite difficult. You do not need to kill all of the baiters to end the round.
  • Bomber – Not that big of a threat, they just float around in slow, predictable patterns and drop space mines that usually aren’t too hard to just weave around. It’s very tempting to take them out as targets of opportunity, but landers can kill off your colonists if your attention is divided. I prefer to save them for last, because thanks to the baiters, I want the mop-up phase to end as quickly as possible.
  • Pod – Harmless unless you crash into them. But you must kill them to end the round, and when you do, they release a horde of swarmers. Using smart bombs on pods sometimes destroy the swarmers and scores huge points, but not always.
  • Swarmers – I hate these guys. They swarm, are really hard to hit, and fire shots in big, chaotic clusters. And they don’t count toward the limit for spawning baiters. Ugh…

My best attempt got over 86,000 points, hardly a world record, but it surpasses Eugene Jarvis’ own high score during development.



My strategy was to target the landers first. They’re probably the easiest to kill, and any lander you spare could kill a colonist when you aren’t paying attention and become a mutant.  I’d use smart bombs on clusters of pods, and on landers in the process of abducting colonists who were too high up for me to reach in time, sometimes both at once. After the landers were finished and I’d taken care of any mutants, I’d go after remaining pods and try to deal with the swarms before the baiters started spawning (I was not always successful), and finally kill the bombers. It took me awhile, but I eventually got the hang of using hyperspace in emergencies, which certainly contributed to my longevity.

Around the 60,000 point mark, I clearly felt my concentration starting to wane, and made dumb mistakes like pressing the hyperspace button when I meant to press something else, and forgetting to check the scanner, but I still managed to hang around for another two rounds. The game is, as I mentioned, generous with extra lives, awarding one every 10,000 points, which can be easily achieved every round.

But eventually, the landers nabbed my last few colonists, seemingly all at once. When this happens, the planet is destroyed in a spectacular display of particle effects, and then the landers all become mutants. I was overwhelmed, and lost the last of my lives. Game over.

Wednesday, May 22, 2019

Intermission: 1980/1981

Looking back at the games I played for 1980, the thing that stands out to me the most is just how few pre-1980 ancestors I played. Ancestors are always important predecessors to games on the whale list which did not achieve whale status on their own. Typically, I play ancestors to represent the early and less notable works of a developer prior to their first big hit, such as with the assortment of early Atari games I played leading up to Breakout, or less often, to represent a game with strong direct influence, such as SpaceWar and Table Tennis.

Some of the developers represented here were already introduced during the first phase of Data Driven Gamer.
  • Atari had four 1980 whales, whose earlier works already have ample and perhaps excessive representation.
  • Pac-Man, which I opted not to play, was a smash hit by Namco, which I already introduced with Galaxian and Gee Bee.
  • Wizard of Wor, created by Dave Nutting Associates and published by Midway, was the earliest whale by either company. I had already played two of Dave Nutting Associate’s earliest releases, Gun Fight and 280 Zzzap (both also published by Midway), not as ancestors to any Midway game, but as surrogates for the lost arcade games Western Gun by Taito and Nürburgring 1.

Then there were developers whose first titles were already from 1980.
  • Berzerk was the first video game by Stern Electronics, and so is already the ideal game for introducing the company.
  • Ken & Roberta Williams’ first games were the graphic adventures Mystery House, Wizard and the Princess, and Mission Asteroid, all in 1980.
  • Rogue was the first release that any of developers had worked on. Rogue’s developers later formed the poorly-acronymmed A.I. Design Systems, whose sole gaming products were Rogue ports to non-Unix systems.

Of all the 1980 games I played, only Zork I had a pre-1980 ancestor by the same developers which I hadn’t played yet, which was of course Zork.

The other circumstance for recognizing ancestors is when an earlier game is a major influence. Colossal Cave Adventure, which was one of the first games I played (as an ancestor to 1978’s Adventureland) is a known influence on multiple 1980 games. There was the direct lineage of Adventure->Zork->Zork I, of course, but also to the graphic adventures of Ken & Roberta Williams, who cited Colossal Cave Adventure as their chief influence. Atari’s Adventure was more or less conceived as a graphical remake of Colossal Cave. Rogue’s developers cited it as a major influence, along with 1973’s Star Trek, and did not acknowledge any other games despite having many superficial similarities to mainframe CRPGs of the time.

During this time,I’d also been giving a lot of thought to the idea of a ranking system. I don’t have one, and I’m not sure if I need one, but it feels a little weird to call this project Data Driven Gamer and not even bother quantifying how much I liked the games I played.

On one hand, some games are, in my view, clearly better than others. I’ve often said that Zork is a total improvement on Colossal Cave Adventure. Among the 1980 Sierra games I played, Wizard and the Princess was the best, and I’m inclined to call Mission Asteroid the worst of the three. All are inferior both to Colossal Cave Adventure and Adventureland, let alone Zork.

But how would one go about comparing Zork to Pac-Man? A GIMLET-like system would not work, as these games are good for wildly different reasons. If I were to designate separate categories, with separate scoring systems for each, how would I go about designating these categories? And if, say Pac-Man got a 60 on one grading system and Zork got a 65 in a completely different one, would it make Zork the better game? Or could Zork’s 65 only be compared to other games within its category?

Even within these categories, ranking is a difficult exercise. The Zorks would logically go in the same category, and if I had to compare Zork to Zork I, I think I’d say I enjoyed Zork I more. It is a tighter, more polished game, with a better parser and fewer bad parts. And yet, Zork is the more complete game, with a truly sprawling and interconnected dungeon, some brilliant puzzles that didn't make it into Zork I, and an epic endgame. Zork I, in comparison, is a very fun little treasure hunt with terrific writing and some good puzzles, but doesn’t stand on its own as well unless you play its sequels, which means dealing with the bad puzzles that got cut out from Zork, and some new bad puzzles too.

I’ve floated around a lot of different ideas in my head, and none of them really stuck. One approach that seemed good at first was a simple number, where 0 would mean I did not like a game, 1 would mean I did, 2 would mean I liked it more than any 1, 3 would mean I liked it more than any 2, and so on, with no upper limit to how high the numbers could get. This idea came to a screeching halt when I asked myself if I better liked Space Invaders or Outlaw and I couldn’t decide.

Looking ahead at 1981, then, there are a number of previously-unseen developers coming to the fray, and a deluge of ancestors with them.
  • We have Konami’s first whale, and I’m still working on figuring out which of their earlier games I’ll need to play, as their early history is a bit obscure.
  • Activision, who released their first games in 1980, but none quite made whale status.
  • The literal and metaphorical 800lb gorilla Donkey Kong, and there’s an entire blog dedicated to chronologizing the early history of that particular monkey’s uncle.
  • The first Wizardry, which not only compels me to take a look at Robert Woodhead's one extant game prior to it, but also to go back to PLATO to see the games that inspired him and Greenberg.
  • Castle Wolfenstein by Silas Warner, whose break into game development began with creating PLATO games, including one that inspired Sir-Tech.
  • Sierra’s Crossfire, an unofficial remake of Exidy’s Targ, means looking back at Exidy’s early titles.
  • Galaxy by Avalon Hill means playing some rather impenetrable-looking BASIC wargames, as well as two of the earliest games by wargame auteur Chris Crawford, which were later published by Avalon Hill.

The year is rather front-loaded with arcade games, which typically don't get read as much as my postings on adventures and RPGs, but we are going to see Wizardry and Ultima, and I'm going to tear into their mechanics as much as I can. One arcade game I’m skipping is Atari’s Centipede. I used to own a cocktail cabinet, and I’ve scored 100,000+ points on it. I would not find a replay interesting or rewarding.

It’s honestly a little overwhelming to even think about. The 1981 list is already more than three times longer than the 1980 list. Granted, most of them are quick games that I’ll probably beat or exhaust in a single entry. The longest-looking title on the list is Wizardry, not quite comparable to Rogue or Zork, which combined took up nearly half of my play time on the 1980 list. The PLATO games I’ve selected may prove a bit of a problem to really delve into, as all of them were created with multiplayer in mind.

In the meantime, there are some games that I suspect are going to be troublesome to track down in their original formats, and so I have some questions.

Where can I find a copy of Kevin Tom’s original Football Manager for the Video Genie or TRS-80?

Where can I find a copy Tom Cleaver’s original Galactic Empires for the Apple II? This was released in 1979, and remade as Galaxy by Avalon Hill in 1981. A review in The Space Gamer 1980 suggests that this was a different game, and not simply a re-release.

Can any Nintendo game from before 1979 be emulated?

Where can I find Commodore PET images for Avalon Hill’s B-1 Nuclear Bomber and Midway Campaign?

Are there any copies of Labyrinth of Martagon, or any other Brian Fargo game prior to The Demon’s Forge?

Can any Exidy game from before Circus be emulated? In particular, how about Destruction Derby?

What is the earliest available version of Chris Crawford's Wargy I / Tanktics and Legionnaire? The earliest I’ve found were a Commodore PET image of Tanktics, and an Atari 8-bit game called Centurion which seems to be based on an early version of Legionnaire, but isn't the original.

Monday, May 20, 2019

Game 61: Wizard of Wor

After completing the lengthy, merciless, and chaotic slog that was Rogue, the next whale, and final whale of 1980, is a fast, merciless, and chaotic arcade game, and one I remember quite enjoying.

I had compared Berzerk to Pac-Man with guns, for its gameplay of endlessly running through mazes of dark blue corridors filled with malevolent characters, only that in Berzerk your goal is to kill robots with your laser gun rather than eat dots.

Wizard of Wor, which also came out the same year as Pac-Man, is even more like Pac-Man with guns. The corridors are narrow and prohibit any kind of free wandering, the monsters are fast and unpredictable, and there are even escape hatches on the sides of the screen.

And like Berzerk, Wizard of Wor features voice synthesis, but Wizard of Wor sacrifices quality for quantity. Berzerk only had a handful of short phrases. The Wizard has more than 70 quips, but good luck understanding them, or even hearing them, as the Wizard’s muffled voice tends to get drowned out by the game’s music and sound effects. This isn’t strictly an emulation problem, as I discovered when playing on real hardware at Funspot. I reconfigured MAME’s speaker balance to emphasize the voice channel, but it’s still hard to understand.

It also seems like MAME recently changed the voice chip emulation, because it sounds quite different from how I remember. It sounds less like a Speak & Spell and more like a Voder, and the wizard’s cackles now sound like a raspy “ha ha ha ha” rather than “dot dot dot dah.” It's still not yet classified as having 100% audio emulation yet, but I'd like to think it's more accurate now.

Wizard of Wor also has two-player coop, which must be a real novelty for the time. Most two-player games of the era and beyond were either competitive or simply alternated players. I’ve applauded Atari Space Invaders for adding a fun coop mode, even if it’s actually meant to be competitive. It doesn’t quite avoid the competitive angle, as you’re awarded 1,000 points for shooting your partner. When you play solo, AI takes over the left-side worrior, and is somewhat competent in the early dungeons.

As an endless arcade game, Wizard of Wor doesn’t have any kind of winning condition, but it does have a concrete goal that I could consider “winning”; level 13 is always “The Pit,” a wide open dungeon without any walls at all except for the outer rectangular border. If I could reach it and beat it, then I’d have pretty much seen everything Wizard of Wor had to offer.

Alas, my best attempt ended on level 9, on a maze with lots of long and narrow passageways, which are deathtraps in Wizard of Wor.



To even make it that far, it was crucial to exploit a quirk in the game’s hitboxes. When your worrior is standing off-center from a cell in the grid, being touched by monsters won’t immediately kill you, but instead will push you into the next cell. If they touch you in the front, you’ll be pushed back a cell and will be in a prime position to blast them if you start shooting immediately. If they touch you from behind, you’ll be pushed forward, and they might just move on past you or even turn around and walk away, or they might just walk right into your new position and kill you.

Playing defensively was just as crucial. Your worrior is slow, and before long, the monsters will move really fast. You and they are both vulnerable when turning corners, so it’s better to force them to turn corners to reach you when possible. Long corridors are quite dangerous, because once you fire a laser, you can’t fire again until it hits something, and a long period of defenselessness carries a great danger of a monster flanking you, and monsters can shoot at you down the corridor too.

In time, I learned to recognize the handful of mazes, and to identify key choke points that I could hold defensively, corridors that enemies tended to funnel into from one end, and rarely entered from the other. Of course “rare” does not mean “never,” and I still lost some lives when monsters flanked me from both ends of a corridor.

After seven levels, you enter the “worlord” dungeons, which have a different pool of layouts and tend to have fewer choke points.

I couldn’t reach The Pit, but I did get to it with save states just to see what awaited me.



What a nightmare! There’s nowhere to hide, and seemingly no way to avoid being overwhelmed except to stay off-center on the grid at all times and to be lucky! And that video was my best attempt out of many.

I’d reached my goal with some cheating, but no retrospective of this game could be complete without playing two-player coop, so I enlisted “B” to play a few rounds.



We tried, a few times, to pull off a two-worrior defense, with both of us blocking off two ends of a corridor, but we had to accept that we’re just not coordinated enough for this. We'd struggle just to manuever our worriors into an appropriate corridor together, and even when we succeeded and started shooting outward back-to-back, a monster would eventually breach one of our defenses, and then get the other one of us from behind. We had better luck just covering parts of the map individually.



After Pac-Man, this may actually be my favorite arcade game of 1980. It's certainly the most chaotic, which isn't always a good thing, but in this case the chaos is what makes it fun. I really like the sound design, aside from volume balance issues and garbled speech, and really appreciate the co-op play, which is and has always been a criminally underused feature.

Thursday, May 16, 2019

Identifying the mechanics of Rogue

 

The earliest version of Rogue I can find is 3.6, which has source code available, and formed the basis of the version that I played and finished. It’s written in C, which I know, but the code is still quite terse and difficult to parse, as C code tended to be back in its heyday. But it is surprisingly complete in terms of comments. I say surprisingly, because this isn’t the first game with source code that I have looked at, but the source of previous games such as Zork and Akalabeth provided no inline comments at all.

The following is information that I was able to understand and found shed interesting light on Rogue’s mechanics (e.g. not mundane, self-evident things like explaining how removing your armor works or computery things like bandwidth management).

Note that this is all based on the Rogue 3.6 code. Later versions could be different!

rogue.h

Some data is stored here.

MAXOBJ 9 – There are no more than nine treasures spawned per level.

MAXPACK 23 – You may only carry 22 items in your inventory (the 23rd item won’t fit)

MAXTRAPS 10 – No more than ten traps per level, though in practice you’ll almost certainly never get close to this.

GOLDCALC (rnd(50 + 10 * level) + 2) – A formula that gets used in a few places where gold is concerned. This formula picks a random number between 2 and [51 + 10 * level]. Level refers to dungeon level.

BEARTIME 3 – Bear traps keep you stuck for 3 turns.

SLEEPTIME 5 – Sleep traps put you to sleep for 5 turns.

HOLDTIME 2 – Potions of paralysis incapacitate you for 2 turns.

WANDERTIME 70 – After 70 turns, a monster may wander into the dungeon.

HUHDURATION 20 – Confusion lasts a minimum of 20 turns.

SEEDURATION 850 – Blindness and see invisibility potions last 850 turns.

HUNGERTIME 1300 – Your stomach begins with 1300 food units. Eating fills it an average of 1300 food units.

MORETIME 150 – You’ll be weak at 150 food units, and hungry at twice that.

There are a number of “saves” defined here, including:
  • Poison
  • Paralyzation
  • Death
  • Petrification
  • Breath
  • Magic

Only poison and magic are actually used by anything.

Odds of a successful save vs. poison are (7 + [Level/2]) * 5%. Level refers to your character level.

Odds of a successful save vs. magic are (4 + [Level/2]) * 5%. That goes for monsters too, who can make save vs. magic checks against some of your attacks, and their character level is used for these checks.

Tables

These tables come from all over the code. In some cases, I’ve added columns that don’t actually appear in the game code directly, but I’ve put them there for clarity.


Monsters:

Vp Name Treasure % Special XP Level AC Damage D-factor
K 0 Kobold 0 ISMEAN 2 1 7 1d4 2.5
J 1 Jackal 0 ISMEAN 2 1 7 1d2 0.75
B 2 Bat 0 0 1 1 3 1d2 0.75
S 3 Snake 0 ISMEAN 3 1 5 1d3 2
H 4 Hobgoblin 0 ISMEAN 3 1 5 1d8 4.5
E 5 Floating eye 0 NOWANDER 5 1 9 0d0 0
A 6 Giant ant 0 ISMEAN 10 2 3 1d6 3.5
O 7 Orc 15 ISBLOCK 5 1 6 1d8 4.5
Z 8 Zombie 0 ISMEAN 7 2 8 1d8 4.5
G 9 Gnome 10 0 8 1 5 1d6 3.5
L 10 Leprechaun 0 NOWANDER 10 3 8 1d1 1
C 11 Centaur 15 0 15 4 4 1d6/1d6 7
R 12 Rust monster 0 ISMEAN 25 5 2 0d0/0d0 0
Q 13 Quasit 30 ISMEAN 35 3 2 1d2/1d2/1d4 4
N 14 Nymph 100 NOWANDER 40 3 9 0d0 0
Y 15 Yeti 30 0 50 4 6 1d6/1d6 7
T 16 Troll 50 ISREGEN|ISMEAN|NOWANDER 55 6 4 1d8/1d8/2d6 16
W 17 Wraith 0 0 55 5 4 1d6 3.5
F 18 Violet Fungi 0 ISMEAN|NOWANDER 85 8 3 000d0 ?
I 19 Invisible Stalker 120 ISINVIS 120 8 3 4d4 10
X 20 Xorn 0 ISMEAN 120 7 -2 1d3/1d3/1d3/4d6 20
U 21 Umber hulk 40 ISMEAN 130 8 2 3d4/3d4/2d5 21
M 22 Mimic 30 NOWANDER 140 7 7 3d4 7.5
V 23 Vampire 30 ISREGEN|ISMEAN 380 8 1 1d10 5.5
D 24 Dragon 100 ISGREED|NOWANDER 9000 10 -1 1d8/1d8/3d10 25.5
P 25 Purple worm 70 NOWANDER 7000 15 6 2d12/2d4 18

“Vp” represents “vorpalness,” a rough measure of how tough the monster type is, and a stat governing which monsters may appear in each dungeon level.

A dungeon level’s “vorpal range” is [dungeon level – 6] to [dungeon level + 3]. Minimum vorpal range is always between 0 and 21, maximum is always 25 or less. Any monster within this vorpal range may spawn in the dungeon level.

Treasure % is the chance that the monster will have an item in its pack, which it will drop when you kill it. The item is determined at the same time the monster spawns, and follows the exact same rules as any other item drop does, except that it does not count toward the nine treasure per level limit. The fact that it’s determined at monster spawn time matters because of a rule that ensures food spawns every three dungeon levels. If a monster spawns carrying food, then this satisfies the “food every three levels” criteria whether you kill the monster or not.

Flags hold the following meaning:
  • ISMEAN – Every round where you can see the monster, there is a 67% chance that it will chase you, unless you are wearing the ring of stealth.
  • NOWANDER – The monster will never be spawned by the wander daemon. It only spans among the initial monsters when you enter a level.
  • ISBLOCK – Doesn’t seem to do anything. Only the Orc has this flag.
  • ISREGEN – Each time it attacks you, there is a 33% chance of it gaining an HP.
  • ISINVIS – Monster icon does not show, unless zapped by a staff of cancellation or if wearing a ring of see invisible. Only the invisible stalker has this flag.
  • ISGREED – Monster will be drawn to gold in the room. Only the dragon has this flag.

Some monsters have special effects when they hit you. These effects only happen once per turn that they hit you, even if the monster hits you multiple times in that turn.
  • Rust monsters put a -1 modifier on your equipped armor, unless you already have an AC of 9 or 10.
  • Floating eyes transfix you, incapacitating you for 2 or 3 turns.
  • Giant ants decrease your strength by 1, unless you save vs. poison or have a ring of sustain strength equipped.
  • Wraith hits have a 15% chance that you lose a level and 1d10 max HP. Your XP will then be set to the amount just below what is needed to level up.
  • Violet fungi prevent you from moving away until you beat them, otherwise get rid of them, or teleport away. They also have a unique damage property, doing 1 damage the first time they hit you, 2 damage the second, 3 damage the third, and so on.
  • Leprechauns steal 5*GOLDCALC from you, unless you save vs. magic. If you succeed, then they only steal GOLDCALC. Either way, they then vanish. If you kill them, then they drop GOLDCALD  gold, or 5*GOLDCALC if you make a successful save vs. magic. This is then added to the existing pile of gold in the room if there is one.
  • Nymphs vanish and steal one randomly chosen magical item, including:
    • Armor with any + or – modifiers
    • Weapons with any + or – modifiers
    • Potions
    • Scrolls
    • Sticks
    • Rings
    • The Amulet of Yendor (!!)
  • The first time you see an umber hulk, you must save vs. magic or be confused for 20-39 turns. Either way, once the check is made you are now immune to that umber hulk’s gaze (but not to the gaze of other hulks). Seeing an umber hulk while already confused adds another 20-39 turns to the clock.

Each monster’s HP is determined by rolling 1d8 for each of its levels. So for instance, a level 2 giant ant gets 2d8 HP.

Some monsters have multiple attacks per turn, and this is indicated by a “/” separating the rolls. For instance, a centaur gets two attacks, both 1d6.

D-factor is my own calculation, and it represents the average amount of damage you can expect to take per turn, with the assumption that you are unable to avoid being hit. Keep in mind it’s just an average; maximums can be significantly larger than this. A Dragon, for instance, can do anywhere from 5 to 46 damage against a defenseless player in a turn, but will average 25.5 per turn.


Treasure types:

Type %
Potion 27
Scroll 27
Food 18
Weapon 9
Armor 9
Ring 5
Stick 5

The above table is used whenever treasure spawns, to randomly determine what its type will be from the probability. Rings and sticks are the rarest kind of treasure, only spawning 5% of the time.


Scrolls:

Scroll % Worth Effect Self-identifying?
Monster confusion 8 170 Next hit permanently confuses the monster
you strike.
No, but your hands glow red.
Magic mapping 5 180 Completes the level map. Yes.
Light 10 100 Illuminates the room. Yes.
Hold monster 2 200 Holds all monsters within two spaces until you
attack them.
No.
Sleep 5 50 You sleep for 4-8 turns. Yes.
Enchant armor 8 130 +1 enchantment to your armor and removes
any curses.
No, but your armor glows.
Identify 21 100 Identifies an item. Yes.
Scare monster 4 180 Drop to become invulnerable until you step
away from the scroll.
No, but you hear laughter (and the scroll is wasted)
if you read it.
Gold detection 4 110 Shows location of gold on the map. Only if there is gold on the map.
Teleportation 7 175 Teleport yourself to a random room in the
level.
Only if the new room is different from the old room.
Enchant weapon 10 150 Equal chance of +1 enchantment to your
weapon’s to-hit or damage property and
removes any curses.
No, but your weapon glows blue.
Create monster 5 75 Create a random monster right next to you. No.
Remove curse 8 105 Removes curses from all equipped items. No, but you “feel somebody is watching.”
Aggravate monsters 1 60 Alerts all monsters in the dungeon No, but you hear a high-pitched hum.
Blank paper 1 50 Nothing No, but “seems to be blank.”
Genocide 1 200 Prevent a monster type of your choice from
ever spawning again.
Yes.

When a treasure spawns and it is determined to be a scroll, the ‘%’ column is used to randomly select what kind of scroll it will be. The worth column is the amount of gold you get for it when you beat the game while still holding it (this didn’t happen to me for some reason!).

Those funky scroll names are generated from a list of “syllable” strings, each of them no more than three characters long. Each scroll gets between 2 and 5 “words,” and each word will consist of between 1 and 3 syllables, randomly chosen from the list.


Potions:

Potion % Worth Effect Self-identifying?
Confusion 8 50 Confuses you 20-27 turns.
If already confused, then 20-27 turns are added to the
confusion clock.
Yes
Paralysis 10 50 Incapacitates you for 2 turns. Yes
Poison 8 50 Lowers your strength by 1-3. Nullified by a ring of
sustain strength.
Yes
Gain strength 15 150 Increases strength by 1. Yes
See invisible 2 170 See invisible stalkers for 850 turns, lights the current
room, and cures blindness.
No, but
“tastes like slime-mold juice.”
Healing 15 130 Restores 1d4 HP for each character level.
Cures blindness.
Yes
Monster detection 6 120 Shows positions of monsters on the level. Only if the level has monsters.
Magic detection 6 105 Shows positions of magic treasures on the level. Only if the level has magic treasure.
Raise level 2 220 Level up. Yes.
Extra healing 5 180 Restores 1d8 HP for each character level.
Cures blindness.
Yes.
Haste self 4 200 Hastes you 4-7 turns.
If already hasted, you faint for 0-7 turns.
While hasted, monsters only move every other turn.
Yes
Restore strength 14 120 Restores strength to the maximum that you ever attained. No, but “tastes great –
you feel warm all over.”
Blindness 4 50 Blindness for 850 turns. Yes.
Thirst quenching 1 50 None. No, but “tastes dull.”


Rings:

Ring % Worth Effect
Protection 9 200 Equivalent to -1 AC per enchantment level. Can be cursed/negative.
Add strength 9 200 +1 strength per enchantment level. Can be cursed/negative.
Sustain strength 5 180 Prevents strength loss. Consumes 1 food per turn.
Searching 10 200 Free search every time you move. Two rings mean two free searches.
A 33% chance per turn of consuming 1 food.
See invisible 10 175 Lights the room when equipped. Reveals invisible stalkers.
Adornment 1 100 None.
Aggravate monster 11 100 Cursed. Makes all monsters target you.
Dexterity 8 220 +5% to-hit chance per enchantment level. Can be cursed/negative.
Increase damage 8 220 +1 melee damage per enchantment level. Can be cursed/negative.
Regeneration 4 260 Regenerate 1 HP per turn. Consumes 2 food per turn.
Slow digestion 9 240 A 50% chance per turn of adding 1 food to your stomach.
Two rings basically means you’ll never need to eat again.
Teleportation 9 100 Cursed. 2% chance of teleporting to a random room each time you move.
Two rings mean slightly less than a 4% chance of teleporting, and a very small chance of
teleporting twice.
Stealth 7 100 Mean, sleeping monsters don't wake up when you see them. No effect on wandering monsters.

Left or right handedness doesn’t seem to have any effect on what a ring does.

When a ring of add strength, protection, dexterity, or increase damage spawns, there is an equal 1/3 chance of it being +1, +2, or cursed -1.

Rings with enchantment values get an additional worth bonus of (20 * [enchantment value]). If cursed, then the ring is worth 50, total.


Sticks:

Stick % Worth Zap effect
Light 12 120 Illuminate the room.
Striking 9 115 Must be zapped at a monster in melee range. Behaves like a melee swing of 1d8 with a +3, +3 bonus.
There’s a 5% chance that the damage will be 3d8+3 instead.
Lightning 3 200 A projectile with 6d6 damage. Can bounce off walls and hit you. Monsters (or you) may save vs. magic.
Fire 3 200 Same as lightning.
Cold 3 200 Same as lightning.
Polymorph 15 210 Transform the monster to another selected randomly.
Magic missile 10 170 A projectile with 1d4 damage. Monsters may save vs. magic.
Haste monster 9 50 Hasted monster moves twice per turn. Haste and slow cancel each other out.
Slow monster 11 220 Slowed monster moves every other turn. Slow and haste cancel each other out.
Drain life 9 210 Drain half of your remaining HP, and do that much damage to all monsters in the room,
spread evenly among them.
Nothing 1 70 Really, nothing!
Teleport away 5 140 Teleport a monster to a random room.
Teleport to 5 60 Teleport a monster right next to you.
Cancellation 5 130 Reveal invisible stalkers.

Sticks can be staves or wands. Each magic-type of stick is assigned only one of these physical forms at the start of the game, e.g, if you find a staff of light, you will not also find a wand of light.

Sticks normally have 3-7 charges. Sticks of light have 10-19 charges.

Sticks can be equipped. Staves have a melee damage of 2d3. Wands can be equipped or thrown and have melee and throw damage of 1d1.

Sticks of striking are 1d8 with a +3, +3 enchantment. This is separate from their zap ability.

If you equip a staff of striking and hit a monster, or throw a wand of striking at a monster and hit, then it will lose its charges and any further ability to inflict damage.

Sticks usually do not self-identify. Exceptions are sticks of light, and sticks of polymorph.

Sticks get an additional worth bonus of (20 * [remaining charges]).


Armor:

Armor AC % Worth
Leather armor 8 20 5
Ring mail 7 15 30
Studded leather armor 7 15 15
Scale mail 6 13 3
Chain mail 5 12 75
Splint mail 4 10 80
Banded mail 4 10 90
Plate mail 3 5 440

AC uses old D&D rules, where lower AC is better.

When armor spawns, there is a 20% chance of cursed armor with a -1 to -3 disenchantment (adds to the AC), and an 8% chance of enchanted armor with a +1 to +3 enchantment (subtracts from the AC).

Rust monsters’ attacks permanently lower your armor’s enchantment by 1, but it does not become cursed, even if the enchantment reaches negative levels.

Enchanted armor gets a worth multiplier of [1 + (10 * [Enchantment level])]. So for instance, +2 splint mail that I finished with would have gotten a 21x multiplier, and would be worth 1680 gold. Rusted or cursed armor with a negative enchantment value is worth nothing, but doesn't cost you anything either.


Weapons:

Name Melee damage Throw damage Special Worth
Mace 2d4 1d3 0 9
Long sword 1d10 1d2 0 15
Short bow 1d1 1d1 0 75
Arrow 1d1 1d6 BOW|ISMANY|ISMISL 1
Dagger 1d6 1d4 ISMISL 2
Rock 1d2 1d4 SLING|ISMANY|ISMISL 1
Two-handed sword 3d6 1d2 0 30
Sling 0d0 0d0 0 1
Dart 1d1 1d3 ISMANY|ISMISL 1
Crossbow 1d1 1d1 0 15
Crossbow bolt 1d2 1d10 ISMANY|ISMISL 1
Spear 1d8 1d6 ISMISL 2

For weapons without the ISMISL flag, the melee and throw damage columns work as you would expect. But for weapons with the ISMISL flag, throw damage only applies when you have the corresponding launcher equipped. E.g. – if you have a bow equipped, throwing arrows does 1d6 damage, and otherwise, throwing arrows does 1d1. Consequently, daggers and darts always do melee damage, because they don’t have any corresponding launchers. Either this is a bug, or I’ve misunderstood the logic here.

ISMANY means that when this weapon spawns it will be a stack of several, and count as one item for inventory limit purposes. Items that spawned separately will belong to separate stacks, even if they are the same item!

Enchanted weapons might have two separate enchantments, such as your starting +1, +1 mace. The first number is the to-hit bonus, and the second number is the damage bonus.

When spawning a weapon, there is a 10% chance of a cursed weapon with -1 to -3 to-hit penalty, and a 5% chance of an enchanted weapon with a +1 to +3 to-hit bonus.

Enchanted weapons get a worth multiplier of [1 + (10 * [Sum of enchantments])]. So for instance, the +1, +1 mace you start with gets a 21x multiplier, and is worth 168 gold. Weapons with negative enchantments are, like the armor, worth nothing.


Other items with value:

Food 2
Amulet 1000

chase.c

When moving, confused monsters have an 80% chance to move randomly instead of in their selected direction. Non-confused Invisible Stalkers always have a 20% chance, and non-confused Bats always have a 50% chance. The randomly selected direction will always be a legal move, and will never result in a confused thing bumping into walls. Each time a confused monster moves randomly, there is a 5% chance that the confusion disperses.


command.c

Searching has a 20% chance to find secret doors and a 50% chance to find hidden traps. It does nothing if you are blind.


daemons.c

Healing has two logic paths depending on your character level.
  • At levels 1-7, you heal one point every [21-LVL*2] turns without fighting.
  • At levels 8+, you heal between 1 and [LVL-7] points every three turns without fighting.

After 70 turns, a “wander” daemon activates. When activated, every fourth move has a 1/6th chance that a monster will spawn and deactivate the daemon. Monsters spawned this way will immediately be hostile toward the player.

Your stomach holds 2000 food units. Every turn, this decreases by 1, unless you are holding the amulet. Rings can further empty your stomach, or in the case of rings of slow digestion, fill it.

At 300 food units, you’ll feel hungry. At 150 food units, you’ll feel weak. At 0 food units, every move has a 20% chance that you faint instead, which incapacitates you for between 4 and 11 turns.


fight.c

Whenever you swing or throw a weapon, this is your chance of hitting:
  ([Your level] + [Enemy AC] + [Strength to-hit bonus] + [Dexterity bonus] + [Weapon to-hit bonus] + [Launcher to-hit bonus]) * 5%

AC follows old D&D rules where lower AC is better.

Strength to-hit bonus is determined as follows:
  • At 18/100 strength, +3 to-hit bonus.
  • At 18/51 strength, +2 to-hit bonus.
  • At 17+ strength, +1 to-hit bonus.
  • At 6 strength or less, a [STR-7] to-hit penalty.

Dexterity bonus is determined entirely based on your equipped rings of dexterity, if any. For instance, if you have a ring of +2 dexterity and a ring of +1 dexterity, then you would get a +3 dexterity bonus.

Enchanted weapons have one or two “+” modifiers. The first of them is the to-hit bonus, and the second, if present, is the damage bonus. If you threw your weapon, then the weapon bonus is determined by the thrown weapon, not the equipped weapon.

The launcher bonus applies only if you throw a missile weapon, and only if you have an appropriate launcher equipped. It is determined by the equipped launcher.

On a successful hit, damage is determined by this formula:
[Base damage roll] + [Weapon damage bonus] + [Launcher damage bonus] + [Ring damage bonus] + [Strength damage bonus]

Base damage roll is standard D&D style dice rolls. A 2d4 mace rolls two four-sided dice. Each weapon has two base damages; one for melee, one for being thrown. Thrown damage is only used if you throw a melee weapon, or if you throw a missile weapon and have an appropriate launcher equipped. If you throw an arrow while having a sword equipped, then the arrow’s melee damage is used.

Weapon damage bonus is the weapon’s second “+” modifier, if it has one.

Launcher damage bonus applies only when throwing missiles and only when you have an appropriate launcher equipped. It is the launcher’s second “+” modifier, if it has one.

Ring damage bonus is determined entirely based on your equipped rings of increase damage.

Strength damage bonus is determined as follows:
  • At 18/100 strength, +6 damage
  • At 18/91 strength, +5 damage
  • At 18/76 strength, +4 damage
  • At 18/1 strength, +3 damage
  • At 18 strength, +2 damage
  • At 16+ strength, +1 damage
  • At 6 strength or less, a [STR – 7] damage penalty

When a monster swings at you (and some monsters can swing multiple times in a turn), the chance for you to get hit is:
 ([Monster’s level] + [Your AC] – [Your protection bonus]) * 5%

The AC is your AC, and again, lower AC is better.

Protection bonus is determined by your equipped rings of protection, if any.

Monsters don’t have weapons, rings, or strength bonuses or penalties, so the damage done on a hit is always determined by their base damage roll(s).

The text when you hit or miss (e.g. “you scored an excellent hit on the snake”) is chosen randomly, and does not indicate anything except whether you hit or missed.


init.c

This file is where most of the data lives.

You begin with 1300 food units in your stomach.

A new player has a 1% chance of starting with 18 strength. When this happens, an additional “exceptional” bonus factor is rolled with a 1d100. This factor is used for strength bonus calculations, as outlined above. Otherwise, a new player gets 16 strength.


main.c

Rogue’s world is bound to the size of your terminal window. It expects a minimum of 70 columns and 22 lines, but won’t object if your window is even bigger, and there doesn’t seem to be any real limit. I imagine that if you were to maximize a terminal window on an 8K monitor and then run Rogue in it, you’d have a terrifyingly huge game world where you’d starve to death exploring the first level.

You always start with the same gear. Only your arrows are random, and will be between 25 and 39 in count.


misc.c

When you eat food rations, there’s a 30% chance that the food tastes awful, and you gain 1 XP. There’s no other effect of the food’s taste.

Any food that you eat adds between 1100 and 1499 food units to your stomach, up to a maximum of 2000 units.

The following tiers of exceptional strength exist beyond 18:
  • 18/[1-50]
  • 18/[51-75]
  • 18/[76-90]
  • 18/[91-100]

If your strength is 18, then increasing your strength will take you to the next tier of exceptional strength, with the exceptional stat chosen randomly in the range of the tier, except for at the very top tier, where the rules are a bit complicated and not really worth going into. Losing strength while exceptional will take you down a tier.


monsters.c


On dungeon levels 26 and below, mimics can be disguised as the Amulet of Yendor.


move.c

The odds of getting hit by a dart trap are:
 (12 + [Your level]) * 5%

I think I am getting that right, that the higher your character level, the more likely you are to get hit, which means that at character level 8 you are guaranteed to be hit. The function seems to be badly coded. Dungeon level would make more sense than player level. It also looks like the code is meant to take the armor class into account, but it uses the base armor class rather than the equipment armor class, and your base AC is always 10 no matter what armor you have equipped.

A successful dart hit does 1d4 damage and lowers your strength by 1.

The odds of getting hit by an arrow trap are:(10 + [Your level]) * 5%

An arrow does 1d6 damage.


newlevel.c

If you have the amulet, and the level you are on is not the deepest you’ve been to yet (i.e. you are now climbing stairs to go up instead of down), then no treasure will spawn.

The game keeps track of how many levels have been generated without spawning food. When this reaches 3 or more, the next treasure spawn is guaranteed to be food.

There is a [Level * 10%] chance that the dungeon level will have traps in it. At dungeon level 1, this is a 10% chance. At dungeon levels 10 and higher, this is a 100% chance.

If any traps are generated, then the number of traps will be a random number between 1 and [Dungeon level / 4], with a minimum of 1 and a maximum of 10.

When a trap is created, the type of trap is randomly selected, and the odds are equal for each trap type.

Every time you enter a new dungeon level for the first time, there will be nine chances for treasure to spawn. Each chance is 35%. No treasure spawns when visiting dungeon levels that you’ve been to before, though treasure-carrying monsters may still spawn.

The amulet is guaranteed to spawn if the dungeon level is 26 or below, and the player hasn’t found an amulet yet.


room.c

There is a 50% chance that any given room will have gold, provided the current dungeon level is the deepest you have gone to yet (meaning that gold will not spawn when you ascend stairs after finding the amulet). Rooms with gold have an 80% chance of having a monster. Rooms without gold have a 25% chance of having a monster.


things.c

When spawning treasure, if no food has been spawned in three dungeon levels, then the next treasure is guaranteed to be food. Otherwise, there is an equal chance of the treasure being food, a potion, a scroll, a weapon, armor, ring, or stick.

When spawning food, there is a 10% chance of spawning a slime-mold. There’s no difference except eating a slime-mold grants 1 XP and produces a different message.

Monday, May 13, 2019

Rogue: Won!*

I beat Rogue, but I had to really relax my savescumming rules to do it.

After days of struggling to survive for even 30 minutes from about the halfway point with decent stats, it was time to change my rule. Xorns continued to be nightmarish opponents who would kill me as soon as I stepped into a dark room, and umber hulks even deadlier opponents who I’d often run into in the middle of a dark room, get confused, and then be eviscerated while unable to fight back.

My new rule for Rogue – after dying five times in a row without making any progress, I could permit myself to save once on the next level, instead of needing to play for 30 minutes.

Furthermore, I switched to DOSBox SVN-Daum, so that I could use save states instead of Rogue’s built-in save function which strips my weapon of enchantments. I figured I would need those enchantments, and I'm pretty sure I was right.

I beat Rogue this way, and what follows is a log of my various lives grouped by the savepoint where I started.

Savepoint L15

Try 1 – I found two scrolls of enchant weapon and used them right away. At character level 10, I was strong enough to take on xorns, but only if one-on-one and only if at nearly full health. Some undetected trapdoors dropped me to level 19, where I got drained to level 8 by some unlucky hits by wraiths. An umber hulk in the dark confused me, but I used a staff of teleportation to cast it away before it could kill me. Unfortunately, a xorn was in the dark too. I teleported it away, but it just teleported to another place in the same room. My staff ran out of charges, and the xorn killed me.

Try 2 – I found a ring of stealth, and noticed that enemies didn’t pursue me any more unless I attacked them first. So I ignored xorns unless I was at full health. On level 19, I killed a xorn in a tunnel, but behind it was ANOTHER xorn. So I ran, only to be blocked by a Quasit on the other end of the tunnel.



Try 3 – Wraiths, dart traps, and a rust monster enfeebled me. I narrowly beat a xorn, only to be killed by invisible stalkers while waiting to regenerate.

Try 4 – Found a scroll of enchant weapon, and used it. Found some banded mail, equipped it, and enchanted it. A xorn on the next level down killed me even though I was at full health and had AC of 3, the lowest I’d achieved yet.

Try 5 – An undetected teleport trap zapped me to a dark room with a quasit and rust monster. A troll also crept up on me while fighting them. In my weakened state, I went to a corridor to try to rest, where a lurking xorn finished me off.

Checkpoint unlocked.

Level 15 – I killed a leprechaun, took its gold, and found a scroll of identify. A hidden passageway led to a nymph, which I killed and took its treasure, a scale mail. I found a ring of increased damage, killed some wraiths without trouble, and found a scroll of enchant weapon which I used right away. I quicksaved right at the staircase to level 16.

Stats: Level 9, Str 18/39, Mace +4/+3, Scale mail +0, +2 ring of increase damage, 3 rations remain

Savepoint L16

Try 1 – I nearly got killed by a xorn and had to use a scroll of hold monster to get away. While waiting to regenerate, I got killed by another xorn.

Try 2 – Walked into a corner, and suddenly two umber hulks just appeared out of nowhere, trapping me. Fortunately, neither one confused me. Unfortunately, they just slashed me to death instead.



Try 3 – Found a ring of slow digestion. Fought a xorn in a tunnel, then got killed by another xorn while waiting to regenerate.

Try 4 – Fought a troll and a xorn. Attacked by a xorn while waiting to regenerate, and won. Killed by a third xorn while waiting to regenerate from that attack.

Try 5 – Ran into a teleport trap and got confused by an umber hulk in the room I teleported into. Used a scroll of hold monster to keep it from killing me, but then got killed by an invisible stalker in the room while I was running around confused.

Checkpoint unlocked

Level 16 – I found a splint mail, the best armor I located yet. I held onto it but didn’t wear it, as rust monsters were still on the loose. I killed some yetis and wraiths without trouble.

Stats: Level 9, Str 18/39, Mace +4/+3, Splint mail +0, +2 ring of increase damage, 3 rations remain

Savepoint L17

Try 1 – Killed an umber hulk, got killed by another while waiting to regenerate.

Try 2 – Killed by a xorn in 1:1 combat.

Try 3 – While fighting a xorn in the dark, an umber hulk snuck up on me from behind.



Try 4 – Kept missing a solo xorn and got killed by it.

Try 5 – Killed by a solo xorn.

Checkpoint unlocked.

Level 17 - Killed two xorns, quaffed a healing potion. Found a potion of strength and quaffed it. Easily killed two wraiths, a quasit, and two centaurs. Killed another xorn without too much trouble. Saved near the staircase.

Stats: Level 10, Str 18/55, Mace +4/+3, Splint mail +0, +2 ring of increase damage, 2 rations remain

Savepoint L18

Try 1 – Confused and killed by an umber hulk.

Try 2 – Confused and killed by an umber hulk.

Try 3 – Decided to try avoiding encounters and just head down as often as possible. I found staircases and trapdoors pretty quickly. I encountered one umber hulk in a dark room who confused me, but I read a scroll of hold monster and snuck away. Soon I found the amulet of Yendor on level 26!

That’s the comma to my right.


Unfortunately, my good luck ended soon after. After climbing back to level 25, I almost immediately stepped on a trapdoor back to level 26, and from there stepped into ANOTHER trapdoor and fell down to level 27! When I climbed up to level 25, I stepped on yet another trapdoor back to level 26. I encountered several umber hulks during this time, though I was able to actually beat some, partly thanks to having another scroll of hold monster, and I also found a staff of striking, which can be used accurately even while confused. I killed many vampires too, and gained a level. But eventually I encountered the umber hulk that did me in.

Try 4 – This one was an adventure.

I continued my stealth strategy. I found purple worm, and killed it from afar with my bow and arrows.
Deep on level 4, I found an umber hulk and a xorn, and ran, hoping to find a staircase. Instead, I found a dragon. Crap!



Fortunately, I had picked up a scroll in the last level which I knew to be a scroll of scare monster. This is exactly the kind of situation where you need one. Unfortunately, Rogue is still really mean about it in two ways.

First, the way you use a scroll of scare monster is completely unintuitive. If you read it, it crumbles to dust and you hear maniacal laughter in the distance. The manual for the later Epyx version explains how to use it properly; you must drop it, and then you will be invulnerable until you move from that space. There’s no in-game indication or anything in the original instructions saying that this is how you are supposed to use it.

Second, there are only two ways you’d even know you’re carrying a scroll of scare monster. The first would be if you already wasted one by reading it, and you happen to know that “maniacal laughter” means it’s a scare monster scroll, and then you happened to find another scroll of that type and remember the name of the first one. These scrolls are so rare that finding two seems improbable. The other is if you used a scroll of identification, and given how rare these scrolls are, it seems like a waste to use one on another scroll.

Neither applied to me; I knew what this scroll type was from wasting one on a previous attempt in the same save file, so I dropped it and killed the helpless monsters surrounding me, and instantly gained a level from the dragon kill.

The next room north, I fell into a trapdoor where an angry dragon attacked me for big damage. I read a scroll of confusion, hit it to make it confused, and then killed it as it punch-drunkenly flew around the lair in confounded circles.

Sadly, the adventure came to an end the way it had so many times before. Confused by an umber hulk in the dark, and then killed, as I had run out of toys to help me deal with this situation.

Try 5 – I got confused by an umber hulk in the dark, then read a scroll of hold monster to keep him in place as I fumbled around until the effect wore off. Then I attacked him at full health, and lost anyway.

Checkpoint unlocked

Level 18 – Found a ring of stealth and another scroll of enchant armor. Found a scroll of confuse monster. Encountered one umber hulk, who did not confuse me, and I beat without trouble. Encountered no further umber hulks, but killed wraiths, quasits, invisible stalkers, and trolls without trouble. Encountered a rust monster, but it didn’t attack, so I had time to remove my armor before killing it. I used both scrolls of enchant armor on my splint mail, figuring it unlikely I’d find anything better. I saved near the stairs.

Stats: Level 10, Str 18/55, Mace +4/+3, Splint mail +2, +2 ring of increase damage, ring of stealth, 2 rations remain

Savepoint L19

I don’t completely understand how the ring of stealth works. Sometimes enemies don’t pursue me, sometimes they do without provocation. But it gives me a chance against the umber hulks. Often I’d walk right into an umber hulk in the dark and get confused, but it wouldn’t attack. Then I could just wait in the dark until the confusion ran off and fight it one on one, which usually meant victory for me.

Try 1 – Tried to kill a purple worm by firing arrows at it from the other side of the room. Got killed.

Try 2 –During this try, I stumbled into an umber hulk in the dark and got confused, but it didn’t attack at all, so I just waited out and then killed it. In another level, I found a purple worm in a tiny room.

Not risking it!

In the levels to come, I found a staff of “teleport away” and the amulet.

While looking for the stairs, I fought a hostile vampire while a dragon nearby slept.



I noticed that once you have the amulet, no more treasure spawns, not even gold or food! But you also don’t get hungry.

On level 24, I fell into a trapdoor. While searching for the stairs, I encountered an umber hulk and an awake xorn.



So I used a scroll of hold monster to freeze both and waited out the confusion, then killed them both pretty easily.

Searching all of the walls for a way out gets very tedious. Lucky thing I’m not prone to hunger any more.


On level 23, I got confused by a pursuing umber hulk, and then used a staff of teleportation to zap it elsewhere.

Finally, after getting hit by numerous poison darts draining my strength back to 16, I got killed by a lousy invisible stalker of all things.

Try 3 – On level 24, I wasted a whole bunch of time trying to find a secret door, and when I found it got ambushed by a throng of xorns and umber hulks. I went through one judicious cast of drain life and multiple consumables just to barely survive. But I ran into another hostile umber in a passageway to the room which must have held the staircase. I used my last goodie, a scroll of confusion, and managed to land a lucky hit on it while flailing aimlessly. I managed to retreat from it into the previous room, but it followed, and finished me off.

Try 4 – Double-teamed by a hostile xorn and umber hulk.

Try 5 – Victory!

I kept stealthing my way downward. In a long room I killed a sleeping dragon with my bow and arrows, instantly gained a level, and also got a strength potion.

The need to search for walls from levels 20-26 was ridiculous. You can easily spend five rounds on every single potential spot, find nothing, and then make further sweeps of every single wall, again and again, until you finally find the secret door in a spot that you’ve searched more than 20 times, because you’ve searched every spot more than 20 times. And by then, plenty of hostile and alert monsters had spawned in the rooms ahead. I inadvertently skipped some levels by falling into trapdoors.

Once I found the amulet, the journey up through levels 26 to 20 were equally ridiculous, only worse because this time I really didn’t want to fall into any trapdoors (and I did, twice, even falling down to level 27 at one point). I would search with every single step, and even then I still stepped into plenty of traps, usually because my searching failed to reveal it, but sometimes because muscle memory from repeatedly tapping S, forward, S, forward often made me blunder right into the very trap that I had just revealed. Monsters remained dangerous. I didn’t run into many wandering umber hulks this time, but one proved a close call.

But I eventually reached level 18, and from there on I had no more real troubles. While dnd would force me to contend with juiced-up monsters with levels in the 7000’s almost every step of the way back to the surface once I stole the ORB, and DND's general monster encounter rate would go through the roof, Rogue simply had me fight the monsters that would normally appear in each level, getting easier with each staircase I climbed. In fact, in my hurry to finish the game, I rushed through the remaining levels, stepping into whatever traps I would. I did fall into one trapdoor, and got hit by several darts, but I didn’t really need my enhanced strength any longer. The journey upward was long but speedy.

Light! How long it’s been since I’ve seen you.

Absolutely nothing standing between me and victory now.


Weirdly, it didn’t record my final score. Maybe it’s a bug in the RRP port that nobody caught because even the developers couldn’t beat it?

I’m pretty happy with the experience I got, but I shudder to think of what it takes to truly beat this game fair and square. Umber hulks can’t be outmuscled, and you can’t count on getting a steady supply of hulk-busting toys like scrolls of confusion, holding, and magic wands. Only the ring of stealth did anything to improve my long term survival odds, and even then there are just so many ways you can be blindsided by chaotic events in the dungeon of doom and die. If I were to replay and ever find a super rare scroll of genocide again, I know which monster type I’d eradicate, and even then, victory would be a long shot.

Chester Bolingbroke at CRPG Addict beat a later DOS version of Rogue in four months fairly, but didn’t mention medusas (the equivalent of umber hulks) even once, and the only special gear he mentioned was finding a ring of slow digestion and enchanted plate armor. Not to disparage his accomplishment, but I have to wonder if umber hulks were nerfed in later versions. I certainly would do that if I were going to revise this game.




Rogue isn’t the first Roguelike; CRPG Addict considers Beneath Apple Manor, Dungeon Campaign, and Brian Sawyer’s Dungeon to be Roguelikes that predate it. I haven’t played any of these, as they appear to have been developed independently of Rogue, and aren’t clear ancestors of any whales on my list.

Wikipedia also lists pedit5, dnd, and Telengard as Roguelikes, and if we include them, then we must also include Daniel Lawrence’s DND. Between these four “DNDlikes,” Rogue most strongly resembles DND, for its turn-based combat, ASCII graphics, the monsters with diverse battle tactics, and the sheer variety of equipment and stuff in the dungeon. DND also is unique among these DNDlikes for featuring a class system, including a fighter class who is capable of facing middleweight monsters in melee combat, but never learns any spells, and may only use magic items found in the dungeon. Which, again, anticipates the experience of Rogue.

I don’t know if Glenn Wichman or Michael Toy had played any of these games by 1980; they both went to school at Santa Cruz and worked on Rogue at UC Berkley, which doesn’t really tell me whether or not they’d have had access to the Purdue University or DEC networks where DND was hosted and played. Telengard wasn’t commercially available until at least 1981, but earlier versions may have been distributed or at least demoed as early as 1978. Without any specific evidence suggesting otherwise, I feel I have to assume Rogue’s developers hadn’t seen DND. The similarities are abstract enough that I can accept it is a coincidence that two different computer programmers interpreted aspects of Dungeons & Dragons in the same way. There's nothing as blatantly copied as, say, DND's Excelsior Transporter.

Just as DND brought innovations not seen in previous games, so did Rogue. Among the most important is the randomized dungeon layout. At 80x25 cells, the raw grid is larger than DND’s 20x20 or dnd’s 9x9, and yet it feels smaller than either thanks to the very strict dungeon layout template, where each floor consists of no more than nine rectangular rooms laid out in a 3x3 pattern and the corridors connecting them, not to mention how it the entire floor always fits on your screen.

Then there is the fact that leaving the dungeon to rest is simply not an option. In all of the DNDlikes, knowing when to retreat to the surface to recover your HP/SP is a crucial tactic. Here, the only way out of the dungeon is to quit, die, or find the amulet and return with. Nor can you reasonably grind easy levels for XP and gear, as levels don’t restock with loot, you can’t return to previous levels until you’ve found the amulet, and scarce food supplies force you to keep moving downward.

In spite of some balance issues (which may have been improved on by later versions), and heavy reliance on luck (which I understand is still the case in all versions), Rogue is generally a much better game than any of the DNDlikes that I played.

I'm currently reviewing the source code for Rogue version 3.6 to better understand its mechanics and data. The code itself is terse and rather difficult to understand in a lot of places, but it's also heavily commented, which is both good and unexpected. My next post, and last post on Rogue, will be an analysis on just how Rogue works, with things like monster and item charts and explanations on how obscure mechanics work, and even bugs (for instance, poison dart traps are probably not meant to hit you every single time, but they always do).

Monday, May 6, 2019

Rogue: Savescum Lite

I’d reached my limit for playing Rogue completely honestly, and accepted that I’m just not going to beat it without some cheating. For now I’m sticking to my original rule – that I must play earnestly for 30 minutes before saving is permitted, and any restarts or restores will restart this timer.

Even with this allowance, it means I have to survive in Rogue for 30 minutes before I’m allowed to make any saves, and even this is quite a task, thanks to Rogue’s brisk gameplay.

During my first game with this rule, I avoided using potions and scrolls unless my inventory was full, made sure to explore each of the nine sectors in every map, and starting around level 7, I searched with each step into a new sector, to reduce the chances of stepping into a trap, which can be game ruining. This did slow the pace of the game down somewhat. By the time I hit level 10, my 30 minutes had elapsed, and I made my first save and backup.

One really good thing that happened was that when I read a scroll to save inventory space, it turned out to be an enchant weapon scroll. I had two of them, so I read the other, permanently upgrading my mace to +3.

But some bad things happened too.
  • I equipped plate mail that turned out to be cursed -3. That wasn’t too bad, but the Rust Monsters made it nearly useless and still unremovable.
  • I got stung by ants several times, reducing my precious strength to 11.
  • I ran out of food on level 9, and was weak with hunger by the time I made my save.

That last point was a real problem. I saved and then used this temporal anchor to inventory the level and my stock. There was only one ration on this floor, and it was a good walk away, near the stairs, at which point I’d be passing out every few steps from hunger, and I had no way to remove the curse on my armor or restore my strength to its original state. To have any real chance of victory, I’d need the RNG to be cooperative on the next few floors and give me a potion of restore strength, a scroll of remove curse, and several rations, and I was stuck on a rough starting point.

So I restarted. This next time, I played similarly, and I still got stung by ants several times, and even sprung a dart trap, bringing my strength down to 6. But around level 8, my inventory was full, and to save space I drank an unidentified potion which turned out to be one of restore strength!

On entering the last unexplored room in the level, 29 minutes had elapsed since the start of this run. I had 3 rations, wasn’t hungry, could soon descend to level 9, and then save my game under better circumstances than the last time. But there was a dilemma; I had a full inventory, and there was a scroll in this room. If I wanted this scroll, I’d have to pick something from my inventory to drop or consume, but what? I wasn’t going to just around for the 30 minute mark to hit and savescum there, that would break my “earnest play” rule, and partly defeat the purpose of my savescum restrictions in the first place.

I decided to abandon a two-handed sword, because in my experience, enchanted weapons are rare (I’m not sure if I ever encountered one), and I figured my already enchanted mace was preferable to an unenchanted two-handed sword.

So I did it, descended, and saved once the 30m timer hit.

As my rules don’t prohibit me from restoring a save as often as I want to, I took this opportunity to take inventory, by using my identify scrolls and reloading. I had:
  • 3 rations of food
  • 2 scrolls of remove curse
  • 2 scrolls of identify
  • A scroll of enchant weapon
  • A scroll of hold monster
  • 2 potions of strength
  • 3 potions of healing
  • 2 potions of poison
  • A potion of magic detection
  • A potion of confusion
  • +1 ring mail (equipped)
  • A +1 mace (equipped)
  • A +0 short bow
  • 37 +0 arrows

Something didn’t seem right, though. Didn’t I start with a +1, +1 mace and a +1 bow? With a backup save in tow, I tried saving again and reloading, and made an unpleasant discovery.

My mace turned into a +0! Turns out that when you save, your weapons lose an enchantment.

Annoying, but not necessarily the end of the world. I still had an unused scroll of enchant weapon in the backed up save file which I could use to restore one of those weapons, and with any luck (and I had unlimited luck) I might discover more of them in the lower levels. Just the price of savescumming, I guess. I have to wonder, though, is a bug, or by design? If by design, then it’s a clever way to fight savescumming abuse.

Level 9 would also contain an additional food ration, and nothing else, but the RNG had been plenty generous with the last eight levels. And with this being my new anchoring point, I’d have plenty of chances to replay from a good position, and to get lucky again with the levels yet to come.

Of particular note is that I had two potions of strength, enough to raise me to the maximum level of 18. Terrific if I could manage to keep my strength, and I now had ample opportunities to try.

One other benefit of savescumming is that the function of unidentified potions, scrolls, rings, and wands are pretedermined and baked into the save file. Every time I’d encounter an unrecognized item, I could identify it once, and rest assured it would be the same thing in future lives.

Rust monsters, giant ants, and the occasional poison dart trap continued to be great nuisances, though not deadly. Death came at the hands of centaurs, trolls, and invisible stalkers, once my strength had been drained enough that my +2 enchanted mace wasn’t enough to deal with them. My salvation, I figured, must be to once again locate a potion of restore strength.

Quite a few attempts later, things finally went smoothly for 30m, a period of time that went by less briskly thanks to the need to search every step. I found a studded leather armor, which turned out to be cursed, but it would make acceptable rust monster bait, and I also found a scroll of enchant armor, which was wasted on this suit, and another scroll of enchant weapon, which I used right away to bring my mace to +2.

Things weren’t perfect, mind you. Searching every step is tedious, drains food pretty quickly, and it still doesn’t guarantee finding traps. At one point I was forced to step through a trap because it blocked the only passage out of a room, and sure enough, it was a strength sapping trap. Ants would drain it further, with my heavily rusted suit of cursed armor unable to defend against their blows. But my luck turned around on level 13, when I found another potion of restore strength, and between it and the next level, another three scrolls of enchant weapon! A nymph also dropped a scroll of enchant armor, and another potion of add strength brought me to 18/39, representing “exceptional” strength in D&D format.

This time, when the 30m timer hit and I felt I was in good shape, I saved *before* going down the stairs to level 15 instead of after. I figured I could really use the extra dice rolls. After backing up and restoring, my +2 mace had become a +0 mace, but my scrolls could make it better.

Restoring, I decided to play one last round from this point to see what awaited. Giant ants weren’t spawning any more, and I didn’t see any rust monsters in level 17 either, so I put my enchanted ring mail back on and buffed it with the scroll. I even found two more strength potions, buffing me to 18/89. The next level down, I got shredded by a xorn.

I was full health four turns ago!


This feels disheartening. I’ve had unrealistically good luck to make it this far with these kind of stats, and the xorn still ripped me to bits like it was nothing. And even worse things await farther down below. What does it actually take to beat this game?

My inventory:
  • 3 rations of food
  • A scroll of remove curse
  • 2 scrolls of identify
  • 3 scrolls of enchant weapon
  • A scroll of hold monster
  • A scroll of enchant armor
  • 4 potions of healing
  • A potion of magic detection
  • +1 ring mail
  • -2 studded leather armor (equipped)
  • A +0 mace (equipped)
  • +0 short bow
  • 37 +0 arrows
  • 10 +0 darts

Wednesday, May 1, 2019

Rogue: The first stab

With the issue of version settled, I’ve started playing Rogue as it was reconstructed by Rogue Restoration Project. There’s some detailed documentation bundled with version 3.6.1 as plain text files – the earliest example of this that I’ve seen, and something that would have only been possible on a game designed to run from a computer operating system, as opposed to just booting from a disk. With version 3.6.3 it’s been upgraded to HTML. There’s ingame help too, but it’s quite sparse.



That’s it. There’s no guideline on what all of the ASCII symbols you see in the game mean, no explanation of the screen layout, no explanation for what “examine/set options” actually does, and no elaborate backstory. All of that’s to be found in “dod36.txt,” a text document titled “A Guide to the Dungeons of Doom.”

I am a senior apprentice at the fighter’s guild (why is it called Rogue, then?), and am sent into the Dungeons of Doom as a final exam, to earn membership by finding the Amulet of Yendor. After days of arduous journey through the Dark Mountains, I have arrived at the dungeon entrance. Equipped with nothing but a sword (lies, you start with an enchanted mace and short bow), armor, and a few remaining rations, I camped for the night and descended at the crack of dawn.

It’s said that Rogue was inspired by Adventure and Star Trek. The guide alludes to this, mentioning multiple times how it takes advantage of computer monitors by writing characters to arbitrary positions on the screen to create dynamic pseudo-graphics, rather than just printing updates to the game status line-by-line like a teletype as Adventure and Star Trek did. It further compares itself to puzzle-oriented fantasy games, stating that they cease to amuse once the puzzles have been solved, while Rogue is infinitely replayable with its infinite number of dungeons to explore and conquer.

Stats are basic compared to other CRPGs, even at the time. We have the usual XP, gold, level, and HP numbers, which work about as you’d expect them to. Beyond that, there is only strength and AC, which are like D&D. Strength caps at 18, and AC decreases as your armor improves.

Some of the commands are anachronistic, meant for a time when terminals were slow and CPU time was expensive. For instance, a “run” command causes the character to repeatedly move in a single direction until something interesting happens, and only then return control to the player. You can also repeat a command a fixed number of times by typing a number before the command keystroke. For instance, typing “10s” executes ten searches, which can still be handy for finding a stubborn secret passage. It can also be useful for resting for a long time, as you will automatically stop if a monster attacks you.

The manual has a list of armors, which is nice, but no list of weapons.

Type AC
Leather 8
Studded / ring 7
Scale 6
Chain mail 5
Banded / splint 4
Plate 3

My first trip into the dungeons of doom ended twelve levels below the surface, at the hands of a yeti while also being flanked by a centaur and an armor-ruining rust monster.




Along the way, while struggling with the controls, I picked up on many things about how the Rogue works, and some mysteries too.

Although you start with a bow and some arrows, I’m not really sure how you’re supposed to use them. There’s no discrete “attack” command, you just walk into enemies to attack them with your equipped weapon. The only way I found to hit enemies with arrows from afar is to throw them, and I can’t tell if equipping a bow first makes this more effective or not.

Scrolls and potions are one-use items with randomly determined effects. The color of a potion corresponds to its randomly chosen effect. For instance, I drank an ecru potion and felt sick. The next ecru potion I found was described as “poison.” Scrolls have gibberish incantations like “tuezant vombyt temviv.” Even after using these items, it wasn’t always clear what they had done.

I found some magic rings, but couldn’t find a good way to tell what they do. You can equip two at once. Eventually I found a scroll of identify, which I used to identify one of my equipped rings, and it turned out to be a ring of +1 dexterity. I’m not sure what that does exactly, since Rogue doesn’t have a dexterity stat. I really wish scrolls of identify were a bit more common, I found four more rings before my demise on level 12.

I also found a good number of magic wands, but couldn’t quite figure out how wands work. There is a “zap” command which invokes the power of a wand of your choice, but this only seemed to do anything with the first wand I found; it damaged a nearby enemy and from then on the wand was identified as a “wand of magic missiles.” It didn’t produce an effect from that wand every time I tried, and none of the other wands seemed to do anything at all.

Gold is scattered around the dungeon but doesn’t seem to do anything. The guide suggests it’s just there for high score purposes.

I found a long sword and dagger, but lacked any way of telling if they were better than my enchanted mace.

Level 4 seemed to be unsolvable.



At this point, I had explored all of the passages and hadn’t found the level exit yet. It turned out there are hidden doors which can only be revealed by using the ‘s’ key everywhere.



Eventually it dawned in on me that each dungeon level is divided into a 3x3 grid, and each of the nine sectors of this grid either contains a room, or a corridor junction, or a corridor dead-end. If a level seems to be fully mapped out but not all sectors have been visited, then it’s worthwhile to search the walls of rooms adjacent to these uncharted sectors.

Your typical 3x3 dungeon grid


Treasure sometimes appears in great quantities.

That’s two scrolls, two wands, and a pile of gold.


Some enemies do more than just damage you.
  • Giant ants are awful. A successful hit saps your strength, permanently.
  • Floating eyes can temporarily paralyze you, but don’t seem to hurt you directly.
  • Leprechauns steal a good portion of your gold and disappear. This doesn’t bother me that much.
  • Rust monsters do no damage, but have a high hit rate which reduces your armor’s effectiveness with each successful hit. It’s good to remove your armor before fighting them, but they can easily catch you offguard and land a hit or two first.
  • Nymphs steal something from you and then disappear.

In one dungeon level, I carelessly walked over a dart trap multiple times, not realizing that it reduced my strength each time I got hit by it.

I did run low on HP a few times, but recovered it just by waiting it out. This left me hungry each time, a situation rectified by eating a ration, of which I found many lying around in the dungeon. Sometimes the rations tasted good, sometimes not, but there was no obvious difference in their effect.

The deeper you go, the more likely rooms are to be dark, which makes exploring them pretty annoying, and deadly if you bump into a monster that you really don’t want to go toe-to-toe with.

In a second run, I found three scrolls of identify, and with them, found that weapons and staffs can also be identified. I identified two weapons, both revealed as +0, and one staff, which revealed it to be a “staff of cancellation” and showed it to have five charges, but I couldn’t figure out what using it does. Ultimately in this run, I just ran headlong into too many giant ants. I’m not really sure what you’re supposed to do when you enter a room and there’s an ant right in your face, but my repeated fights with the ants left me drained of strength, and ultimately a centaur finished me off.

In another notable run, I found and identified a ring of regeneration early on, and with it, my HP was rarely not full. I also found a scroll of genocide somewhere near level 10, and it asked me to name a monster type to eradicate. I chose the ants, of course. Alas, food became scarce over the next few levels, and random traps kept dumping me down to the deeper dungeons before I was done exploring the current floor. Rust monsters in the dark kept eroding my armor faster than I could remove it, and I was constantly swapping in and out of my least damaged armor. Around level 16 I ate my last ration, soon grew weak, and then fainted in front of a hostile yeti who pummeled my half-starved carcass to death.

And in another playthrough, I took my armor off in any level with rust monsters, only putting it back on when fighting tough monsters like yetis, found a strength-restoring potion on level 13 which restored everything the ants had taken from me, and had 10 units of food by the time I reached level 14. I was character level 8, had 16 strength, 43 HP, and 4 AC splint mail. I seemed to be in pretty good shape. Then a troll clobbered me to death in three hits.

In some additional playthroughs, I also discovered:
  • Wraiths, which usually miss, but sometimes drain a level when they don’t.
  • Invisible Stalkers, which hit like trolls and move erratically, but aren’t too bad if fought in a corridor.
  • Xorns, which do frightening amounts of damage.
  • Umber Hulks, which inflict confusion and then do frightening amounts of damage.
One of the recurring dilemmas is figuring out what you use your precious scrolls of identify on. The best candidates seem to be staves, wands and rings, because they can be quite powerful, and often it's the only way to know what they do. Potions seem like a waste, as you can just drink them to find out what they do, and most of the time it's immediately beneficial, though there's a very small chance of drinking a truly nasty potion of blindness. Scrolls are more situational, and (so far) never do anything too horrible as long as you don't read unidentified scrolls in battle, but there are also some really powerful scrolls that are wasted if not used when you need the effect, such as scrolls of remove curse and scrolls of hold monster. Identifying weapons and armor seems like a waste, as I have not even once found an enchanted weapon, and armor can be identified by wearing it. Sometimes armor is cursed, but it usually isn't, and curses can be removed with remove curse or enchant armor scrolls.

As I write this, I have made at least 25 attempts, and none took me farther than level 19. It's been entertaining, but constantly replaying the early levels is getting monotonous. I think I am done with playing Rogue straight, and moving forward will savescum sparingly.