Eaten by a Grue: podcast on Infocom games, text adventures and interactive fiction
monsterfeet.com
monsterfeet.com
Disclaimer: I'm married to the author, so I might be biased :P To be fair though, I read a very early copy, and thought it was solid. It's only gotten much, much better since what I read. The head of the small press publishing it has compared it to Microserfs.
This sounds kinda cool.
You can also put it on your "want to read" list on Good Reads (linked in my OP) and should get information about release via that. The Amazon page (also available via the Good Reads page) also seems to have a way to get information about release.
Sorry if I seem like I'm dumping a bunch of information, just trying to convey what my wife told me about how to get what you're looking for/be helpful/give as many options as possible for people to get information depending on what they're comfortable with :)
I've been around this culture for a long time. I was on Slashdot, Digg, Reddit, and now HN. I've ascended in NetHack more than 10 times (and beaten a bunch of other Roguelikes as well). I've heard about the Infocom games repeatedly over the years.
I've tried to play Zork several times and I just don't get it. Every single time I end up in the maze of twisty little passages and I give up. What am I supposed to do? I tried dropping various objects as breadcrumbs and mapping the damn thing on graph paper... well, it turns out to be non-Euclidean. WTF is that? Is this tedious, bizarre exercise supposed to be fun? Will somebody help me get it?
Many better infocom games have been written since zork and there is even a fairly active community of infocom enthusiasts on sites like IFDB (infocom database) http://ifdb.tads.org/ if you really want to try getting into infocom games try looking at the higher rated ones on that site. My first complete playthrough and all time favorite infocom games is called Vespers and I would highly recommend it as a primer to the infocom medium.
I have yet to ascend in NetHack, though. I was into https://alt.org/nethack/ for a time...
Ah, just noticed you can play the DOS version of Zork Zero here: http://playdosgamesonline.com/zork-zero-the-revenge-of-megab... Or here: https://archive.org/details/msdos_Zork_Zero_-_The_Revenge_of...
KQ and Zork are both iconic for various reasons, but none of those reasons are because the games are particularly good. They wantonly kill the player, they let you get into unwinnable states, they have puzzles that are essentially impossible. . . hey, it was a new genre, folks were still figuring things out.
In the case of text adventures, I'd suggest starting with something like Anchorhead (long, horror), Lost Pig (short, humorous) or Savoir-Faire (medium, historical-ish).
I played its variants, _Adventure_ and _Dungeon_, for many many hours when a teen. Pity all my maps, Zorkmids, and rolls of printed transcripts have vanished. Most memorable was an evening having the whole family involved figuring out how to defeat the Cyclops (who was programmed with a surprisingly extensive repertoire of boredom & eating you).
https://github.com/itafroma/zork-mdl/blob/be079a4ed234071222...
Once you know the trick, the rest is annoying busywork, and adding a maze has been considered bad design in most text adventures made after the Zork era.
The generally annoying thing about text adventures is that if you hit a puzzle you don't get, your progress can grind into total halt. There's no alternative strategies or just getting lucky like there is in roguelikes. And there are plenty of badly designed games where after having the puzzle explained, you'll go "how was I supposed to figure out THAT?" (Zork 2 has a couple infamous puzzles like this.) If you want to get text adventures, you might want to just use hints when needed to get through a few so you'll get a sense of what the games consider appropriate hints and puzzles.
I guess I reached a point where I said "this is just too complex, it can't be the right solution, there's got to be a smarter way to do this". So to find out that there isn't a smarter way just makes me think it's a terrible puzzle design.
I agree it's a little tedious by modern standards but it's really not that complicated. If I recall correctly you can represent the entire thing with about 5-10 boxes connected by a couple lines between them plus a bunch of little loops where the player remains in the same place.
It's a succinct area of the map. Perhaps you should try again with a fresh perspective.
Of course, this is a cleaned up version once I had discovered all the connections; while mapping, each passage would be drawns as a straight one-way connection until bi-directional relationships were discovered.
The chart on the bottom shows the same maze in the form of an adjacency matrix, showing which rooms are connected to which, and by which direction. Again, the rooms are banded by number of steps from the exit. Note that pairs of rooms with bi-directional connections can be discovered by noticing filled cells whose positions are symmetrical about the diagonal of the chart.
The 3 x 3 square in the upper corner is a sort of simple compass I came up with for navigating the maze; it tells you which way to go based on the "shape" (i.e. which directions have exists) of the room. Even though not all room shapes are unique, if you follow those directions you are guaranteed to get out relatively quickly.
The worst one of this type, is the official solution to getting money from the slot machine in Leisure Suit Larry. You have to save the game state, play the slot machine, and if you win you save game state again. If you lose, you restore form the last save point, and repeat as necessary (until you get enough money). So there is no way to get past that puzzle without "breaking the 4th wall", so to speak.
https://github.com/itafroma/zork-mdl/blob/be079a4ed234071222...
; "SUBTITLE A SEEDY LOOKING GENTLEMAN..."
So if you want to make a map by dropping objects, be sure to kill the thief first, otherwise he will rob you blind and take all the objects you dropped.
(<NOT .DEAD?>
<COND (<MEMQ .STILL <HOBJS .HACK>>
<PUT .HACK ,HOBJS <SPLICE-OUT .STILL <HOBJS .HACK>>>
<PUT .HOBJ ,OCONTENTS (.STILL)>
<PUT .STILL ,OCAN .HOBJ>)>
<PUT .HACK ,HOBJS <SET HH <ROB-ROOM .RM .HH 100>>>
<PUT .HACK ,HOBJS <SET HH <ROB-ADV .WIN .HH>>>
<PUT .HACK ,HFLAG T>
<COND (<AND <N==? .OBJT .HH> <NOT .HERE?>>
<TELL
"A seedy-looking individual with a large bag just wandered through
the room. On the way through, he quietly abstracted all valuables
from the room and from your possession, mumbling something about
\"Doing unto others before..\"" ,LONG-TELL1>)
(.HERE?
<SNARF-OBJECT .HOBJ .STILL>
<COND (<N==? .OBJT .HH>
<TELL
"The other occupant just left, still carrying his large bag. You may
not have noticed that he robbed you blind first.">)
(<TELL
"The other occupant (he of the large bag), finding nothing of value,
left disgusted.">)>
<REMOVE-OBJECT .HOBJ>
<SET HERE? <>>)
But first be sure to hand him (or let him steal) the jewel encrusted egg before you kill him, since he's the only one with nimble enough fingers to open the egg without breaking it, to get to the clockwork canary inside. Once you retrieve the opened egg from his lair, take the canary to the tree and wind it, and you will receive a beautiful brass bauble! <SET EGG <SFIND-OBJ "EGG">>
<MAPF <>
<FUNCTION (X)
#DECL ((X) OBJECT)
<COND (<G? <OTVAL .X> 0>
<PUT .HACK ,HOBJS <SET HH <SPLICE-OUT .X .HH>>>
<INSERT-OBJECT .X .RM>
<COND (<==? .X .EGG>
<SETG EGG-SOLVE!-FLAG T>
<TRO .X ,OPENBIT>)>)>>
https://github.com/itafroma/zork-mdl/blob/be079a4ed234071222... <OBJECT ["EGG"]
["BIRDS" "ENCRU"]
"jewel-encrusted egg"
<+ ,OVISON ,TAKEBIT ,CONTBIT>
EGG-OBJECT
(<GET-OBJ "GCANA">)
(OFVAL 5
OTVAL 5
ODESC1 "There is a jewel-encrusted egg here."
OCAPAC 6
ODESCO
"In the bird's nest is a large egg encrusted with precious jewels,
apparently scavenged somewhere by a childless songbird. The egg is
covered with fine gold inlay, and ornamented in lapis lazuli and
mother-of-pearl. Unlike most eggs, this one is hinged and has a
delicate looking clasp holding it closed. The egg appears extremely
fragile.")>
<OBJECT ["BEGG" "EGG"]
["BROKE" "BIRDS" "ENCRU"]
"broken jewel-encrusted egg"
<+ ,OVISON ,TAKEBIT ,CONTBIT ,OPENBIT>
<>
(<GET-OBJ "BCANA">)
(OCAPAC 6
ODESC1 "There is a somewhat ruined egg here.")>
<OBJECT ["GCANA" "CANAR"]
["CLOCK" "MECHA" "GOLD" "GOLDE"]
"clockwork canary"
<+ ,OVISON ,TAKEBIT>
CANARY-OBJECT
()
(OFVAL 6
OTVAL 2
ODESC1 "There is golden clockwork canary here."
ODESCO
"There is a golden clockwork canary nestled in the egg. It has ruby
eyes and a silver beak. Through a crystal window below its left
wing you can see intricate machinery inside. It appears to have
wound down.")>
<OBJECT ["BCANA" "CANAR"]
["BROKE" "CLOCK" "MECHA" "GOLD" "GOLDE"]
"broken clockwork canary"
<+ ,OVISON ,TAKEBIT>
CANARY-OBJECT
()
(ODESC1 "There is a non-functional canary here."
ODESCO
https://github.com/itafroma/zork-mdl/blob/be079a4ed234071222... <DEFINE EGG-OBJECT ("AUX" (BEGG <SFIND-OBJ "BEGG">) (EGG <SFIND-OBJ "EGG">))
#DECL ((BEGG) OBJECT)
<COND (<AND <VERB? "OPEN">
<==? <PRSO> .EGG>>
<COND (<TRNN <PRSO> ,OPENBIT> <TELL "The egg is already open.">)
(<EMPTY? <PRSI>>
<TELL "There is no obvious way to open the egg.">)
(<==? <PRSI> <SFIND-OBJ "HANDS">>
<TELL "I doubt you could do that without damaging it.">)
(<TRNN <PRSI> <+ ,WEAPONBIT ,TOOLBIT>>
<TELL
"The egg is now open, but the clumsiness of your attempt has seriously
compromised its esthetic appeal.">
<BAD-EGG .BEGG>)
(<TRNN <PRSO> ,FIGHTBIT>
<TELL "Not to say that using the "
1
<ODESC2 <PRSI>>
" isn't original too...">)
(<TELL "The concept of using a "
1
<ODESC2 <PRSI>>
" is certainly original.">
<TRO <PRSO> ,FIGHTBIT>)>)
(<VERB? "OPEN" "POKE" "MUNG">
<TELL
"Your rather indelicate handling of the egg has caused it some damage.
The egg is now open.">
<BAD-EGG .BEGG>)>>
https://github.com/itafroma/zork-mdl/blob/be079a4ed234071222... <DEFINE CANARY-OBJECT ("AUX" (HERE ,HERE) (TREE <SFIND-ROOM "TREE">))
#DECL ((HERE TREE) ROOM)
<COND (<VERB? "WIND">
<COND (<==? <PRSO> <SFIND-OBJ "CANAR">>
<COND (<AND <NOT ,SING-SONG!-FLAG>
<OR <MEMBER "FORE" <STRINGP <RID .HERE>>>
<==? .HERE .TREE>>>
<TELL ,OPERA>
<SETG SING-SONG!-FLAG T>
<INSERT-OBJECT <SFIND-OBJ "BAUBL">
<COND (<==? .HERE .TREE>
<SFIND-ROOM "FORE3">)
(.HERE)>>)
(<TELL
"The canary chirps blithely, if somewhat tinnily, for a short time.">)>)
(<TELL
"There is an unpleasant grinding noise from inside the canary.">)>)>>
https://github.com/itafroma/zork-mdl/blob/be079a4ed234071222... <PSETG OPERA
"The canary chirps, slightly off-key, an aria from a forgotten opera.
From out of the greenery flies a lovely songbird. It perches on a
limb just over your head and opens its beak to sing. As it does so
a beautiful brass bauble drops from its mouth, bounces off the top of
your head, and lands glimmering in the grass. As the canary winds
down, the songbird flies away.">The "one lousy point" Don Woods Commemorative stamp featured an image of a Frobozz Magic Lamp Company brass lantern with "Donald Woods, Editor Splelunker Today" printed beneath. One of these stamps was part of the Treasures of Zork.
+--v----v----v----v----v--+
| _______ |
> One / \ G <
| Lousy / \ U |
> Point | ___ | E <
| | (___) | |
> <--)___(--> P <
| / / \ \ o |
> / / \ \ s <
| |-|---------|-| t |
> | | \ _ / | | a <
| | | --(_)-- | | g |
> | | /| |\ | | e <
| |-|---|_|---|-| |
> \ \__/_\__/ / <
| _/_______\_ |
> | f.m.i.c. | <
| ------------- |
> <
| Donald Woods, Editor |
> Spelunker Today <
| |
+--^----^----^----^----^--+
That's what passed for "graphics" back then.
More stamps, bills, portraits and coins:http://mirrors.ibiblio.org/interactive-fiction/solutions/Dun...
Dropping objects is the right way to map it out. It's totally solvable, although a little bit unpredictable (because the thief may happen into a room you've mapped and pick up your object), and the directions aren't reversible in the obvious way.
The problem with this analogy is that in real life I know how to turn around and go back through the door I just arrived from. It does not matter how much the passageway twisted around, unless the door or passageway physically moved I can turn around and go right back through it.
In Zork, this is not the case. My character is effectively blind but has a compass built into his brain. When he walks through a door he is immediately teleported to the middle of the next room so he has no idea which door he just came through. This is silly and obnoxious.
So: run away from enemies, lure them into traps, throw stuff at them, cast your spells, etc. Until you have a good idea of how powerful a monster is at melee combat, assume it's totally unsafe to fight.
After that, it's a matter of exploring and trying to gather as much information as you can. In a lot of Roguelikes, this means identifying your items, either formally or informally. Carrying an inventory full of completely unidentified items is not helpful.
I remember a few of them with a tiny red filter you had to lay on top of the book to see the text behind it. These were the days where games came in full sized boxes with plenty of cool additions.
So no, I don't recommend playing Zork, but I do recommend reading the wikipedia and other articles about it so you can know the history, but there many great modern text-adventure games out there (or you might even try writing your own) for enjoying the medium.
But yeah, there are much better free Inform/parser games out there that are set in the Zork universe. Even for Infocom, I found Enchanter and Sorcerer much better. (Never finished Spellbreaker.)
In those days, there were no graphics. None. There was no animation. Apple and IBM had not created microcomputers yet. There was no Amiga or Commodore.
At this time, in the mid to late 70's, high school students were just getting access to paper terminals that "dialed in" over coupler modems. Taking a programming class was an elective and few did.
There also wasn't any D&D or role playing games. None of this existed.
So along comes these two free games on these school mainframes; Adventure and Dungeon (later split into three commercial Zork games).
They had the audacity of allowing you, the player, to type anything you wanted, and the computer would respond, at that time, very intelligently. By today's standards it may seem simple, but back then, it was the equivalent of playing Assassin's Creed today.
This seemingly "open world" gaming changed everything about computers. It inspired everything that came after, including video games and still is the foundation of much of the standard game play of today.
Now. Zork was old school "IF". It was hard, illogical at times, and on a fairness scale probably as high as it gets. But puzzles are puzzles. If you like easy puzzles or puzzles that give you a cheat sheet, then are you really being challenged or are you just looking for entertainment?
I prefer a challenge because that _is_ what entertains me.
So first realizing that the Thief in Zork will steal all your possessions (whether you drop them or not), then realizing you have to kill him, then realizing he's the only one that can open the egg, then realizing that he's really hard to kill in certain situations, then realizing you can use the DIAGNOSE command to warn you when you're about to die so you can run away and get better.
To me, that's not boring at all. That is essentially the same kind of challenging puzzle you'll find in any of today's video games.
It's just that the "graphics" are in your head. Not on a screen.
From a historical perspective, even though D&D was published in 1974, its influence didn't kick in until years later.
I tend to explain it as "World of Warcraft without graphics", but "rapid-paced AD&D" is a fair approximation, too. The medium gives the people running the show a lot of flexibility in how they guide collaborative stories - no need to wait on art assets!
An Infocom adventure would have known how to handle "Siri, continue playing podcast".
but for some reason my favorite zork game isn't a text adventure, it's Zork Grand Inquisitor. Humor, actors, acceptable graphics. man I love that game.
It's a Zork wrapper written in Elixir.
"Exploring the original Zork source code with Graphviz and an interactive d3 map, using JavaScript and an extension of Peter Norvig's Python Lisp parser to handle MDL."
It's also here on github: https://github.com/itafroma/zork-mdl
It is fascinating to read, and really beautiful code, quite understandable even if you don't know MDL, and practically a form of literature.
I played the original Zork on MIT-DM and also the Infocom versions of course. Reading the source code is like seeing the behind-the-scenes underground rooms and passages at Disneyland!
While I was playing Zork, I found a bug. First some context: when you're battling the troll, you can give things to him, and he eats them! Sometimes he drops his axe, and you can pick it up and kill him with it. He blocks the exits until you kill him.
So I tried "give axe to troll," and he ate his own axe, then cowered in terror: "The troll, disarmed, cowers in terror, pleading for his life in the guttural tongue of the trolls." Not satisfied with that, I tried "give troll to troll", and he devoured himself: "The troll, who is remarkably coordinated, catches the troll and not having the most discriminating tastes, gleefully eats it."
...Except that I still could not get out of the exit, because every time I tried, it said "The troll fends you off with a menacing gesture."
I figured there must be a troll flag that wasn't getting cleared when the troll devoured itself. And sure enough, I found it in the code, and it's called "TROLL-FLAG!-FLAG"!
Here is an excerpt of the MDL troll code, where you can see the bug, where it should clear the troll flag when the troll devours itself, but doesn't (well that's how I would fix it!):
https://github.com/itafroma/zork-mdl/blob/be079a4ed234071222...
<COND (<VERB? "THROW" "GIVE">
<COND (<VERB? "THROW">
<TELL
"The troll, who is remarkably coordinated, catches the " 1 <ODESC2 <PRSO>>>)
(<TELL
"The troll, who is not overly proud, graciously accepts the gift">)>
<COND (<==? <PRSO> <SFIND-OBJ "KNIFE">>
<TELL
"and being for the moment sated, throws it back. Fortunately, the
troll has poor control, and the knife falls to the floor. He does
not look pleased." ,LONG-TELL1>
<TRO .T ,FIGHTBIT>)
(<TELL
"and not having the most discriminating tastes, gleefully eats it.">
<REMOVE-OBJECT <PRSO>>)>)
(<VERB? "TAKE" "MOVE">
<TELL
"The troll spits in your face, saying \"Better luck next time.\"">)
(<VERB? "MUNG">
<TELL
"The troll laughs at your puny gesture.">)>)
(<AND ,TROLL-FLAG!-FLAG
<VERB? "HELLO">>
<TELL "Unfortunately, the troll can't hear you.">)>>
The troll bugs are also in Zork I! Here's a newspaper article from January 8 1985 about "Infocom Glitches Bug Game Players"!http://articles.sun-sentinel.com/1985-01-18/features/8501020...
And here's another article from March 29, 1985: "Zork I Fuddles Mental Health With Choices":
http://articles.sun-sentinel.com/1985-03-29/features/8501120...