Friday, March 22, 2019

Game 54: Zork (PDP-10 version)

If you want to follow along and play the same way as me, download Confusion, a Zork-compatible MDL interpreter here:

Download the MDL code (slightly modified to run on Confusion) here:

You *must* read the Confusion readme to get anywhere with it.

Or you could just play an Inform port here:

My first exposure to Zork was a late Macintosh port released in 1984, played on a friend’s computer. I didn’t own a computer at the time, and my exposure to video games at that point was essentially Nintendo, Spectrum Holobyte’s Tetris, and the odd coin-op game at the local ice cream parlor. The experience of Zork was mind-blowing; for the first time, a game wasn’t bound to the normal rules of its programming. In Super Mario Bros, I could do nothing but walk to the right and jump, destined to follow Mario in one direction through a finite series of prearranged levels consisting of bricks, coins, and water. Other games on the system followed even tighter constraints, with the game boundaries limited to what was laid out on the screen.

Zork was a three dimensional world, seemingly endless in all directions, with no two regions alike, and most mind-blowingly of all, I could tell the game what I wanted to do by typing instructions in natural English, and it would understand. I would wander around the forest, smell the foliage, climb the trees, and Zork obliged with detailed descriptions and new discoveries about the world. I’d look for a way into the white house with the boarded front door, stumble onto a corner with a window, and try opening it. When it worked and I found my way in, it didn’t feel like I had solved a video game puzzle that was placed for me to solve. The white house was simply there, and being tantalized by the boarded up front, I had found a way in. And I wasn’t supposed to be there.

Even as I played through Colossal Cave Adventure during this blog’s first few months, it couldn’t compare to Zork. This may partly had been due to Zork being my first exposure to the genre, and captured a sense of magic and awe that I may be immune to nowadays. I now better understand the sort of programming and design that goes into these games, having played and dissected so many for decades. But I feel it’s much more than that; Zork offered compact, yet lush and detailed prose with multiple layers of texture, and Adventure offered mostly terse descriptions unconcerned with anything but function.

The rank undergrowth prevents eastward movement.

Furthermore, Zork’s parser is an amazing piece of work, and was crucial to cementing the illusion of actually interacting with the game world, and not simply choosing from predetermined possible actions. Adventure’s interface accepted two-word commands following a strict <verb, noun> format – GO NORTH, GET LAMP, LIGHT LAMP, UNLOCK GRATE, KILL DRAGON, etc, and felt like an extension of the rigidly procedural operating system environment that the game was running on. Follow-ups by Scott Adams and Ken/Roberta Williams worked in much the same manner, but with a smaller vocabulary. Zork understood commands such as “kill the troll with my sword,” and was generally free of guess-the-verb situations. And amazingly, this parser worked even better when they translated it to the 8-bit microcomputers where Adams and Williams had needed to make compromises.

As part of some preliminary work for this replay, I showed a version of Zork to my friend “C,” who hardly ever uses technology that doesn’t involve touchscreens, and has little patience for video games from any era. She found it as instantly engaging as I did on that Macintosh so long ago, was glued to the screen for a good two hours, and deemed it “smarter than Alexa.”

There are essentially two different games that can be called Zork, each with many extant versions and platforms. The original Zork was directly inspired by Don Woods’ Adventure, seemingly without any other computer game reference material to draw from. It was developed from 1977-1979 at MIT, on a DEC PDP-10 mainframe (as was Woods’ Adventure before it). This was the computer of choice for the hackers of time, and despite having been in service since 1963, far surpassed the abilities of the microcomputers of the time.

In 1980, when Zork’s developers decided to bring it to the microcomputer software market, they would have to cut large portions of the game to make it fit. It would be largely rewritten, condensed, and polished up, and most the cut portions would later become recycled into Zork II, Zork III, and Sorcerer.

If you are casually familiar with Zork but not with this history of it, then the game you think of as “Zork” is almost certainly the cut-down, more widely played microcomputer version. That’s the game I played on the Macintosh so long ago, and it’s the game that’s been widely distributed since. Either way, introduction excluded, this post is about the original mainframe “Zork,” which I played in a somewhat inauthentic form in 2004, and have opted to replay.

Henceforth, “Zork” will refer to the mainframe title, and “Zork I” will refer to the microcomputer game. Zork I is the whale, Zork is the ancestor.

Like with so many other mainframe games, the problem of figure out which version represents the original experience isn’t simple. Zork was developed continually, and information on its version history is fragmented. A “final” MDL version from 1981 postdates the release of Zork I, and may be the only extant MDL version out there. But there had also been a port of a transitional version to FORTRAN called “Dungeon,” which was widely circulated at the time, and formed the basis of ports to DOS, Amiga, and Atari ST, platforms far more powerful than the 8-bit microcomputers of 1980 and more than capable of the full Zork experience.

Then there is the port to Inform, essentially a re-creation that’s considered to be very close to the original. This is the version I played in 2004, and the fact that it is technically a remake is one of the reasons I’ve opted to replay in a more authentic manner.

Ultimately, I decided to play the final MDL version, running in Confusion, as I haven’t found a way to make it run in a PDP-10 emulator, and according to a Github discussion group may never be possible, as the original ITS MDL compiler may not exist anymore. Zork MDL has bugs, and there’s no good way to know if the bugs are authentic or if they’re introduced by Confusion. But all of the other options have even bigger yellow flags for my historical angle.

If you’re playing along with Confusion, you’ll want to launch “mdli” from the command line, and not from within Windows Explorer. This is because whenever you save, it boots you back to the command prompt.

I used Cmder, as it served me well before.

So far, so good. Next you need to use this command – case sensitivity matters!
<FLOAD “run.mud”>

And that’s it! We’re in Zork.

Henceforth, you can save a few seconds by re-launching mdli with this command (case sensitivity does not matter except for the “-r” part):

One annoyance is that you only get one save game slot. Your only commands are “save” and “restore,” with no ability to specify slots or filenames. You can get around this by going into your “MTRZORK” folder and making copies of and renaming the ZORK.SAVE file, but it’s not terribly convenient.

I think that’s enough background. Now to actually replay Zork, and see how much of my memory has left me over the years.


  1. In your last screenshot there it says: "This Zork created March 21 2019."
    I am assuming this date itself is the created or modified date from the file system, but does it mean Zork has random elements?

    1. Sort of. This isn't the date that the source code was created or modified, but rather the date that the source code was compiled. The initial FLOAD command compiles the MDL into a byte code.

      Zork does have random elements, but I have no idea if the compilation date has anything to do with them or not.


Most popular posts