Document the evolution of MDL Zork

I think that’s the one I came across while looking for the article, but I noticed it had a transcription error. (It refers to “the section of Zork II [sic] with the Dungeon Master”). Rather than proof-reading the whole thing, I decided to link to scans of the original three-part article instead.

In the early versions of Zork (at least up until the January 1978 version), the content of the sandwich bag is listed in the inventory like “a .lunch”.

Like this:

You are in the kitchen of the white house. A table seems to have been
used recently for the preparation of food. A passage leads to the west
and a dark staircase can be seen leading upward. To the east is a small
window which is open.
On the table is a elongated brown sack, smelling of hot peppers.
A bottle is sitting on the table.
There is some water here [in the bottle]
>get bottle
Taken.
>get sack
Taken.
>invent
You are carrying:
A sandwich bag
A bottle with a water
>open bag
Opening the sandwich bag reveals a clove of garlic, and a .lunch.
>invent
You are carrying:
A sandwich bag with a clove of garlic, and a .lunch
A bottle with a water

I got this explanation from TAA why that is:

In MIDAS (the assembler used on ITS), the mnemonics for the system calls (UUOs, actually) all started with “.”: .OPEN, etc.
.LUNCH? might be taken as a combination of assembly language and Muddle, since Muddle’s predicates all ended with ? (vs. LISP, where they ended with “p”). It meant, “time to get lunch?”
-ta

1 Like

7/1/77 - 387 points

The dates in the “US NEWS & DUNGEON REPORT” is inconsistent for this version. The masthead in the issue says “6/19/77” but both the timestamp and the date for the issue in the description (LDESC) are “7/1/77”. The later date is the more probable date due to the many changes in this version.

This version have 119 rooms, 76 objects and the dictionary contains 155 words.

Notable changes:

  • New section, the Coal Mine. Allegedly designed by BKD and implemented by TAA.
  • New section, Aragain Falls. Allegedly designed and implemented by MARC.
  • The parser now ignores some buzzwords and understands some prepositions and an indirect objects (IN/TO), for example PUT [object] IN [object].Containers can also be opened/closed.

    OPEN TROPHY CASE
    PUT COINS IN CASE
    GET THE LEAFLET
    TIE ROPE TO RAILING

  • The parser now also allows you to answer some of its questions.

    TAKE
    Take what?
    LEAFLET
    Taken.

  • Introduces a vehicle, the Boat.
  • The mailbox and the “US NEWS & DUNGEON REPORT” makes its first appearances.
  • Alternative solution for the cyclops puzzle (“ODYSSEUS” replaces “SINBAD” as word that scares the cyclops and opens the “Strange Passage” to the living room.).
  • The grating can be unlocked and opened for a shortcut between the maze and the forest.
  • Still no grues.
  • SAVE/RESTORE capability. Probably only the implementors could save games due to fears that the system resources could be exhausted. Strangly enough the PDP-10 at MIT wasn’t primarely there to play Zork…
  • Still no time limit on the lantern.

Known bugs:

  • If you die and don’t have the lantern the game will crash during the patchup (the game don’t crash if the lantern havn’t been touched).
  • Crystal trident still has diamond as synonym (it was called “diamond trident” in previous version). The new treasure “diamond” don’t have any synonyms so you can create an unwinnable state if the trident is deposited in the trophy case before the diamond because this makes it impossible to deposit the diamond, the parser can’t resolve what you are refering to.
  • The rainbow in the Aragain Falls area is solid even before you have waved the stick (but the pot of gold appears first when stick is waved).

Startup message
Welcome to adventure.
You are in an open field west of a big white house, with a closed, locked
front door.
There is a small mailbox here.
>
US News & Dungeon Report dated 7/1/77
         US NEWS & DUNGEON REPORT
6/19/77                 Late Dungeon Edition

    We congratulate Mr. PDL, of Project HACK (formerly LCS), who has
successfully explored the entire dungeon.  Only three of the
implementer's heads were placed on poles during this amazing feat.

    Mr. TAA of Cambridge, Mass. discovered today a new section
in the ZORK dungeons in the vicinity of the Slide Room.  No further
details are available, however, as Mr. TAA has not been seen since.

    Mr. MARC, also of Cambridge, Mass. has also discovered a new section
in the vicinity of Flood Control Dam #3.  The theory here is that he is
now with TAA, probably in the land of the living dead.

    The dungeon guide (Mr. AV) has expanded his intelligence and
will understand some new words.  Among the more useful of these is
PUT with which objects may be placed inside other objects.  He also
is brighter in that he understands answers to some of his own questions
(e.g. Take What?).  It is also possible to open and close objects
which are containers (e.g. the bottle).

How points are scored:

I. Treasures.
                                   Total=trophy,find

Coal Mine:
sapphire bracelet (in Gas Room)        8=  3, 5     Called jewels/baubles in this version
jade figurine (in Bat Room)           10=  5, 5
diamond (made from Coal in Machine)   16=  6,10

Aragain Falls:
emerald (in Buoy in Frigid River)     15= 10, 5
pot of gold (at End of Rainbow)       20= 10,10
statue (in Sandy Beach)               23= 13,10
                                     ---
Treasures Subtotal                    92

II. Accomplishments.

Lower Shaft                           10
                                     ---
Accompishments Subtotal               10


Points from previous version         285
Points in this version               102
                                     ---
Grand Total                          387

This version is possible to play in the PDP-10 ITS emulator.

1 Like

12/12/77 - 500 points

July of '77 continued an intensive period of developing that then settled down when other commitments, like work, require the implementors attention. Development then picked up again later in the fall of '77.

This version have 145 rooms, 156 objects and the dictionary contains 275 words.

Notable changes:

  • Improvements to the parser:
    • GET ALL/EVERYTHING
    • L as abbreviation for LOOK
    • IT for last used item (a bit buggy)
    • Understand adjectives to the noun, GET BLUE CAKE.
    • Understands more prepositions, WITH.
    • Rudimentery TELL for other actors, TELL [actor], “[command]”
  • New section, the Volcano. Allegedly designed and implemented by MARC in July of '77.
  • The Volcano also had the first two “graphics” (the ASCII variant). Probably done by MARC.
  • The Volcano triggered a need of measuring time. MARC implemented a clock deamon and this introduced among other things a time limit on the lantern.
  • All the pits was filled up and now the dark areas contained grues. This change was allegedly done by PDL in July of '77.
  • During the fall of '77 MARC improved the the SAVE/RESTORE capability to only save the variables instead of all the working memory of the Muddle session. This made SAVE accessible to “ordinary” users.
  • New section, Alice in Wonderland. Allegedly designed and implemented by PDL in the fall of '77.
  • D&D style fighting is introduced with the troll and the thief. Allegedly designed and implemented by PDL in the fall of '77.
  • Name change to “Dungeon”.
  • Source code was “stolen” and decrypted from the hidden LCF directory by Ted Hess. This eventually led to Bob Supnik writing a Fortran version during the great blizzard of '78. This version was then maintained and developed parallel to Zork and new features from Zork was implemented in the Fortran version. The Fortran version always retained the name “Dungeon” and the latest version, 3.2b, is almost identical in gameplay to the last version of Zork.
  • Introduces first actor that can be instructed to perform actions.
  • New room behind Land of the Living Dead, the Tomb of the Unknown Implementer.

Startup message
Welcome to Dungeon.
This version created December 12.
You are in an open field west of a big white house, with a boarded
front door.
There is a small mailbox here.
>
US News & Dungeon Report dated 12/12/77
                US NEWS & DUNGEON REPORT
12/12/77                                       Late Dungeon Edition

     In order to get a more-or-less working version, we have
installed one with some known bugs.  In particular, the following
sequence will not work correctly, nor will anything resembling it:
>take
take what?
>frob
what do you want me to do with it?
     Note that if you now respond 'take', the right thing will
happen. In short, the current parser can't handle verbs with missing
objects.  Since it is completely new, we'd appreciate reports of any
other bugs encountered.

FLASH!
     An important change has been made.  When you have been killed,
and the 'patch' question is asked, or if you are confirming a 'quit',
it is now necessary to terminate the response to the question with a
carriage return (you may be surprised to find that this wasn't true
before).  Also, the answer to the 'patch' question is taken to be yes
unless something starting with n, N, f, or F is typed; the answer to
the 'quit' question is no unless something starting with y, Y, t, or
T is typed.

FLASH!
     Another FLAG DAY has been declared for save files.  Yes, ladies
and gentlemen, yet another incompatible change has been made to the
save/restore code.  When will it end?

     Things like the bucket should resume working in this version.

     Many people have reported the following message:
'GIN FREE STORAGE- VECTOR ...GOUT TIME= n.nn'
This indicates that a garbage collection is occurring.  Some reports
have this taking up to 30 sec. of cpu time, during which your dungeon
will refuse to respond.  We have added a feature which should prevent
this; if you see such a message, please send mail to DUNGEON@DM
describing the circumstances (particularly number of moves,
save/restore status, and the TIME).  A garbage collection is not
fatal:  your dungeon should be perfectly all right once it finishes
(after the GOUT TIME= message is printed).

How points are scored:

I. Treasures.
                                   Total=trophy,find

Alice in Wonderland:
tin of spices (in Pool Room)          10=  5, 5
crystal sphere (in Dingy Closet)      12=  6, 6
violin (in Steel Box in Round Room)   20= 10,10

Volcano:
stamp (in Purple Book in Library)     14= 10, 4
priceless zorkmid (on Narrow Ledge)   22= 12,10
crown (in Safe in Dusty Room)         25= 10,15
                                     ---
Treasures Subtotal                   103

II. Accomplishments.

Top of Well                           10
                                     ---
Accompishments Subtotal               10


Points from previous version         387
Points in this version               113
                                     ---
Grand Total                          500

This version is possible to play both in the PDP-10 ITS emulator and with slightly modifications to the MDL source code to make it run in Confusion, here. .

Bonus material, the ASCII art:

The Coin
               --------------------------
              /      Gold Zorkmid        \
             /  T e n   T h o u s a n d   \
            /        Z O R K M I D S       \
           /                                \
          /        ||||||||||||||||||        \
         /        !||||          ||||!        \
        |          |||   ^^  ^^   |||          |
        |          |||   OO  OO   |||          |
        | In Frobs  |||    <<    |||  We Trust |
        |            || (______) ||            |
        |             |          |             |
        |             |__________|             |
         \                                    /
          \    -- Lord Dimwit Flathead --    /
           \    -- Beloved of Zorkers --    /
            \                              /
             \       * 722 G.U.E. *       /
              \                          /
               --------------------------
The Stamp
---v----v----v----v----v----v----v----v---
|                                        |
|          ||||||||||        LORD        |
>         !||||      |      DIMWIT       <
|         ||||    ---|     FLATHEAD      |
|         |||C     CC \                  |
>          ||||       _\                 <
|           ||| (____|                   |
|            ||      |                   |
>             |______|       Our         <
|               /   \     Excessive      |
|              /     \      Leader       |
>             |       |                  <
|             |       |                  |
|                                        |
>    G.U.E. POSTAGE        3 Zorkmids    <
|                                        |
---^----^----^----^----^----^----^----^---

1/23/78 - 500 Points

There are no new sections added in this version but there are bug fixes and a couple of improvements to the parser. There are also a couple of text changes but I will analyze this in more depth in the next version (it’s from only a week later) when there is source code to compare between the 12/12/77 version vs the 24/1/78 version.

Notable changes:

  • Parser improvements:
    • Refering to objects with IT works much better in this version.
    • Automatic TAKE when handling objects in room.
    • It is possible to bunch objects together with AND or a comma (,) for the verbs TAKE, DROP and PUT.
      • PUT FOO AND BAR AND BLETCH IN TROPHY CASE
      • PUT FOO, BAR AND BLETCH IN TROPHY CASE
  • The bug where the rainbow always is solid is fixed.
  • The trapdoor stays open when it is opened for a second time.
  • It is possible to retrieve treasures from the trophy case.

Startup message
Welcome to Dungeon.
This version created January 23.
You are in an open field west of a big white house, with a boarded
front door.
There is a small mailbox here.
>
US News & Dungeon Report dated 1/17/78
                US NEWS & DUNGEON REPORT
1/17/78  				       Late Dungeon Edition

!!!!!FLAG DAY!!!!!
    Another incompatible change has been made in save/restore.  This
was necessary to correct the omission of fighting strength from
things saved; since that was incompatible anyway, we made numerous
other changes simultaneously.  There is now a version number
associated with save files; thus old save files will refuse to
restore into your Dungeon, rather than destroying it.

    New commands 'bug' and 'feature' (with various synonyms) have
been added.  They cause a file to be written out; it is hoped that
such files will eventually be directed to the maintainers.

    Another new version of the parser has been installed.  The
newest features are:
	1. Phrases like 'pick up', 'put down', etc. may work.
	2. Expressions like 'pile of leaves' now work.
	3. 'On lamp' does not work.  Use 'Turn on lamp' or some such.
	4. Multiple objects may be specified for certain verbs.
	   The following forms are recognized:
	     a. 'Put foo and bar and bletch in trophy case'
	     b. 'Put foo, bar, and bletch in trophy case'
	     c. 'Put foo, bar, bletch in trophy case'
	   The following forms will never work:
	     a. 'Put foo bar bletch in trophy case'
	     b. 'Put foo bar and bletch in trophy case'
	5. Referencing self may occasionally work.
	6. In case you forgot, 'everything' and 'valuables' are valid
	   as object names for TAKE, PUT, and DROP.

Known bugs:

  • LIGHT [OBJECT] WITH MATCH doesn’t work for all burnable objects. For some objects you need to use the syntax BURN [OBJECT] WITH MATCH instead.
1 Like

Here is a reminder how you can play these old Zork versions online on an emulation of the PDP-10 ITS:

  1. telnet to its.pdp10.se port 10003 (I use Kitty on Windows).

  2. When you see Connected to the KA-10 simulator MTY device, type Control-Z
    The terminal will answer:

TT ITS.1650. DDT.1547.
TTY 23
2. Lusers, Fair Share = 99%
THIS IS TT ITS, A HIGHTY VOLATILE SYSTEM FOR TESTING

For brief information, type ?
For a list of colon commands, type :? and press Enter.
For the full info system, type :INFO and Enter.

You may have to set the correct terminal type.
Try :TCTYP AAA or :TCTYP DATAPOINT

PLEASE LOG IN!  Type ":login", your name, and Enter.
Please log out when your are done.
  1. Log in with :login [something]
:login jondoe
TT: JONDOE; JONDOE MAIL - NON-EXISTENT DIRECTORY
  1. :listf madman will list the contents of the MADMAN directory.
:listf madman
TT   MADMAN
FREE BLOCKS #2=5417 #3=7166 #0=6088 #1=4654 #4=793 #5=743 #6=5065 #7=1450
  2   MADADV DEC12  119 ! 12/12/1977 22:48:06
  5   MADADV HELP   3   9/14/2020 09:04:35
  5   MADADV INFO   1   9/14/2020 09:04:35
  0   MADADV JAN11  124 ! 1/11/1978 03:12:56
  2   MADADV JAN23  144 ! 1/23/1978 00:26:53
  0   MADADV JAN24  121 ! 1/24/1978 23:21:37
  0   MADADV JAN26  121 ! 1/26/1978 00:47:30
  0   MADADV JAN28  121 ! 1/28/1978 14:45:07
  0   MADADV JAN7   122 ! 1/7/1978 16:30:09
  2   MADADV JUL1   88 ! 7/1/1977 00:01:02
  2   MADADV JUN12  65 ! 6/12/1977 22:46:51
  2   MADADV JUN14  66 ! 6/14/1977 03:29:10
  0   MADADV SAVE   65 ! 6/12/1977 22:46:51
  0   MADMAN SAVE   115 ! 12/4/1977 17:44:35
  6   OMADAD SAVE   115   12/4/1977 17:44:35
  1   TRV    SAVFIL 105 ! 6/27/1977 21:58:25
  1   TV     FILE   301 ! 6/24/1977 21:50:41
  2   ZORK   BUG    0 ! 9/28/2020 22:45:18
  7   ZORK   LOG    2 ! 1/26/2021 12:45:44

  1. To play the 12/12/77 version of Zork you will need to start MUDDLE version 54 and then restore the correct game file (note that the dollar sign ($) means that you press the [ESC]-button here to execute the command in MUDDLE):
*:mud54
MUDDLE 54 IN OPERATION.
LISTENING-AT-LEVEL 1 PROCESS 1
<RESTORE "MADMAN; MADADV DEC12">$
Welcome to Dungeon.
This version created December 12.
You are in an open field west of a big white house, with a boardedfront door.
There is a small mailbox here.
>
  1. When done, type quit in then game.
  2. And then :logout from the session.

The files in the MADMAN directory works and corresponds to these versions:

Issue date Filename       Points  CRC
6/12/77    MADADV JUN12   285 pts 0x4DC4
6/14/77    MADADV JUN14   285 pts 0x1A61
7/1/77     MADADV JUL1    387 pts 0x2D46
12/12/77   MADADV DEC12   500 pts 0x5A53
1/17/78    MADADV JAN23   500 pts 0xFA9A
1/24/78    MADADV JAN24   500 pts 0x265E
1/24/78    MADADV JAN26   500 pts 0x4B17
1/24/78    MADADV JAN28   500 pts 0xCCB0
2 Likes

12/4/77 - 500 Points

This version currently crashes on startup with this message:

I'm sorry, you seem to have encountered an error in the program.
Send mail to DUNGEON@MIT-DMS describing what it was you tried to do.
This version created December 4.

DANGEROUS-INTERRUPT-NOT-HANDLED!-ERRORS
MPV!-INTERRUPTS
#WORD *710000464247*
Your score is 23748389065 [total of 500 points], in -1 moves.
This score gives you the rank of Wizard.

This version have 145 rooms, 152 objects and the dictionary contains 284 words.

US News & Dungeon Report dated 12/3/77
                US NEWS & DUNGEON REPORT
12/3/77  				       Late Dungeon Edition

     Dungeon will now print the creation date of the current version
when it comes up.  This is defined to be an essential part of any bug
report.  The date will also be printed when a fatal error occurs, and
is available via the 'version' command.

     Many people have reported the following message:
'GIN FREE STORAGE- VECTOR ...GOUT TIME= n.nn'
This indicates that a garbage collection is occurring.  Some reports
have this taking up to 30 sec. of cpu time, during which your dungeon
will refuse to respond.  We have added a feature which should prevent
this; if you see such a message, please send mail to DUNGEON@DM
describing the circumstances (particularly number of moves,
save/restore status, and the TIME).  A garbage collection is not
fatal:  your dungeon should be perfectly all right once it finishes
(after the GOUT TIME= message is printed).

     Some relatively gross bugs were recently fixed in save/restore. 
Unfortunately, some of them caused bad save files to be written out. 
The only factor affected was the scoring:  if you're using an old
save file (before November 20 or so), your score almost certainly
will not be valid.  Sorry about that.  The fixes were otherwise
compatible.

     Certain overly friendly behavior by the thief in his hideout has
been eliminated.

1/7/78 - 500 Points

This version currently crashes on startup with this message:

I'm sorry, you seem to have encountered an error in the program.
Send mail to DUNGEON@MIT-DMS describing what it was you tried to do.
This version created January 7.

PURE-LOAD-FAILURE!-ERRORS
FIELD
Your score is 23748389065 [total of 500 points], in -1 moves.
This score gives you the rank of Wizard.

This version have 147 rooms, 148 objects and the dictionary contains 283 words.

US News & Dungeon Report dated 1/1/78
US NEWS & DUNGEON REPORT
1/1/78                 Late Dungeon Edition

             Happy New Year!

    Please get ZORK by typing ZORK^K to DDT rather than :ZORK.
This will prevent the accidental creation of multiple ZORKs.

    Another new version of the parser has been installed.  The
newest features are:
        1. Phrases like 'pick up', 'put down', etc. may work.
        2. Expressions like 'pile of leaves' now work.
        3. 'On lamp' does not work.  Use 'Turn on lamp' or some such.
        4. Multiple objects may be specified for certain verbs.
           The following forms are recognized:
             a. 'Put foo and bar and bletch in trophy case'
             b. 'Put foo, bar, and bletch in trophy case'
             c. 'Put foo, bar, bletch in trophy case'
           The following forms will never work:
             a. 'Put foo bar bletch in trophy case'
             b. 'Put foo bar and bletch in trophy case'
        5. Referencing self may occasionally work.

OLD FLASH!
     An important change has been made.  When you have been killed,
and the 'patch' question is asked, or if you are confirming a 'quit',
it is now necessary to terminate the response to the question with a
carriage return (you may be surprised to find that this wasn't true
before).  Also, the answer to the 'patch' question is taken to be yes
unless something starting with n, N, f, or F is typed; the answer to
the 'quit' question is no unless something starting with y, Y, t, or
T is typed.

1/11/78 - 500 Points

This version currently crashes on startup with this message:

I'm sorry, you seem to have encountered an error in the program.
Send mail to DUNGEON@MIT-DMS describing what it was you tried to do.
This version created January 11.

PURE-LOAD-FAILURE!-ERRORS
FIELD
Your score is 23748389065 [total of 500 points], in -1 moves.
This score gives you the rank of Wizard.

This version have 147 rooms, 148 objects and the dictionary contains 293 words.

US News & Dungeon Report dated 1/9/78
                US NEWS & DUNGEON REPORT
1/9/78                                         Late Dungeon Edition

    New commands 'bug' and 'feature' (with various synonyms) have
been added.  They cause a file to be written out; it is hoped that
such files will eventually be directed to the maintainers.

    The arrangement of the dungeon has been changed slightly in a
couple of places.

    Another new version of the parser has been installed.  The
newest features are:
        1. Phrases like 'pick up', 'put down', etc. may work.
        2. Expressions like 'pile of leaves' now work.
        3. 'On lamp' does not work.  Use 'Turn on lamp' or some such.
        4. Multiple objects may be specified for certain verbs.
           The following forms are recognized:
             a. 'Put foo and bar and bletch in trophy case'
             b. 'Put foo, bar, and bletch in trophy case'
             c. 'Put foo, bar, bletch in trophy case'
           The following forms will never work:
             a. 'Put foo bar bletch in trophy case'
             b. 'Put foo bar and bletch in trophy case'
        5. Referencing self may occasionally work.

OLD FLASH!
     An important change has been made.  When you have been killed,
and the 'patch' question is asked, or if you are confirming a 'quit',
it is now necessary to terminate the response to the question with a
carriage return (you may be surprised to find that this wasn't true
before).  Also, the answer to the 'patch' question is taken to be yes
unless something starting with n, N, f, or F is typed; the answer to
the 'quit' question is no unless something starting with y, Y, t, or
T is typed.

1/24/78, 1/26/78, 1/28/78 - 500 Points

These versions are almost identical to each other and to the previous one (1/23/78). There is a new issue of the “US News & Dungeon Report” and, I assume, a couple of bugfixes.Most notable bugfix is the one from the previous version with LIGHT and BURN.
There is also source code available to the 1/28/78 that is, with some changes, possible to play in Confusion. In the Confusion version the half finished end-game is added. The end-game is playable all the way until the last puzzle with the wizard and the parapet where the game breaks down.

All these versions have 147 rooms, 145 objects and the dictionary contains 297 words.


Startup message 1/24/78
Welcome to Dungeon.
This version created January 24.
You are in an open field west of a big white house, with a boarded
front door.
There is a small mailbox here.
>
Startup message 1/26/78
Welcome to Dungeon.
This version created January 26.
You are in an open field west of a big white house, with a boarded
front door.
There is a small mailbox here.
>
Startup message 1/28/78
Welcome to Dungeon.
This version created January 28.
You are in an open field west of a big white house, with a boarded
front door.
There is a small mailbox here.
>
US News & Dungeon Report dated 1/24/78
                US NEWS & DUNGEON REPORT
1/24/78                                        Late Dungeon Edition

    When an error is encountered in this version, you will be asked
for a description of the problem immediately, just as if you had used
the 'bug' command.  We hope that this will improve the handling of
such problems.

    A reminder that save files created before 1/17 will not work in
this version; fortunately, the program is clever enough to figure out
whether a particular save file can be used or not.

    New commands 'bug' and 'feature' (with various synonyms) have
been added.  They cause a file to be written out; it is hoped that
such files will eventually be directed to the maintainers.

    In addition to 'take foo and bar', the parser now claims to
understand things like 'take foo and read bar', 'take foo and read
it', and so on.

1 Like

Source code 12/12/77 → 1/28/78

For 12/12/77 and 1/28/78 have the source code been partially restored from MIT backup tapes. Below is a table of the relevant files needed to make a complete, playable game. They are listed in the order they need to be loaded and have a short description of the files purpose. Note that on the PDP-10 ITS each file has two filenames, each up to six characters long. Here they are listed as filename and extension. Conventionally the first filename was the name of the file and the second filename was used as iteration, practically a version number. Files with “?” as version number is missing and have been recreated from later versions.

12/12/77	1/28/78
--------	-------
PRIM.?		PRIM.?		Definition of MDL extensions.
DEFS.63		DEFS.89		Definition of types, structs, functions and macros.
MAKSTR.7	MAKSTR.25	Definition of MDL extensions for IF. Practically ZIL.
TELL.?		TELL.?		Definition of TELL.
ACT1.38		ACT1.71		Action-routines for the locations in the 285 points version.
ACT2.27		ACT1.37		Action-routines for the coal mine, the aragain falls and the volcano. 
ACT3.13		ACT1.18		Action-routines for Alice in wonderland.
ROOMS.99	ROOMS.165	Guts of frob:  Basic verbs, command reader, parser, vocabulary hackers.
NP.93		NP.168		Parser
MELEE.?		MELEE.105	Action-routines and definitions for fighting, D&D style. 
DUNG.56		DUNG.129	Definition for rooms and objects.

My ambition is to make a deeper analysis, in following posts, of the changes in each individual file.

1 Like

I discovered a nice little trick one can do when playing on the PDP-10 ITS. If you login as one of the defined “WINNERS” on the emulator, the game will not KILL the MDL environment when quitting or stopping the execution (Ctrl-G). You will remain in MDL and can there inspect variables. Unfortunately are all the FUNCTIONs compiled so you can’t see the source code for those. Sure WINNERS are MARC, PDL, TAA or BKD.

Example:

THIS IS TT ITS, A HIGHTY VOLATILE SYSTEM FOR TESTING

For brief information, type ?
For a list of colon commands, type :? and press Enter.
For the full info system, type :INFO and Enter.

You may have to set the correct terminal type.
Try :TCTYP AAA or :TCTYP DATAPOINT

PLEASE LOG IN!  Type ":login", your name, and Enter.
Please log out when your are done.
:login marc

To see system messages, do ":MSGS<CR>"
:mud54
MUDDLE 54 IN OPERATION.
LISTENING-AT-LEVEL 1 PROCESS 1
<RESTORE "MADMAN;MADADV JAN28">$
Welcome to Dungeon.
This version created January 28.
You are in an open field west of a big white house, with a boardedfront door.
There is a small mailbox here.
>
*ERROR*
CONTROL-G?
LISTENING-AT-LEVEL 2 PROCESS 1
,HERE$
#ROOM [WHOUS "West of House" NORTH SOUTH WEST EAST FDOOR MAILB <>]

The <1 .OBLIST> contains all the names of the defined variables and functions (an OBLIST is a lookup list Muddle uses to parse the code to the right variable or function (ATOM) in the current context).
,ROOMS prints out all the room definitions and ,OBJECTS print all the object definitions. The vocabulary is stored in its own OBLIST called WORDS, <MOBLIST WORDS>.

I’m gonna update earlier posts with new information I gained by this. I, for example, found out how you open up the “Strange Passage” in the 285 point versions. I’m also gonna add some statistical info on each game.

EDIT: You can also change things in the game like: modifying texts, rewriting functions (<SET REDEFINE T> and then replace existing function with your own). When you’re finished you just call and the game save a new MADMAN; MADADV SAVE-file that is a new modified game!

2 Likes

Is there anyway in MDL to ‘decompile’ functions?

E.g. in Common Lisp, if we define a function:

CL-USER> (defun foofunc (x y) (* x y))
FOOFUNC

Then if we try to eval it, we just get:

CL-USER> (eval #'foofunc)

#<FUNCTION FOOFUNC>

But there are other functions we can apply, e.g. function-lambda-expression:

CL-USER> (function-lambda-expression #'foofunc)
(LAMBDA (X Y) (BLOCK FOOFUNC (* X Y)))
T
FOOFUNC

(There’s also things like inspect.)
I don’t know MDL well enough to know if there could be equivalents.

I’m certainly no expert on MDL but my understanding is that almost everything in the end are what’s called an ATOM.

Example:

If you define a FUNCTION (and assign it to an ATOM, it is possible to have FUNCTIONs that’s not assigned to ATOMs. Lets not get into that.).

<DEFINE HELLO ()
  <PRINT "Hello, world!">
>

The ATOM HELLO is assigned the specified code. If you look at the ATOM it look something like this:

,HELLO
#FUNCTION (() <PRINT "Hello, world!">)

I.e an ATOM of the TYPE FUNCTION.

Unfortunately when, on the PDP-10 ITS, the MDL code is compiled the functions becomes machine language and are no longer available. They become just like the built-in functions and only display their call sign.

,SPARSE
%<RSUBR-ENTRY '[REMOVE-OBJECT SPARSE #DECL ("VALUE" <OR ATOM FALSE VECTOR> <
VECTOR [REST STRING]> <OR ATOM FALSE>)] 9902>

It should be possible to reverse engineer that into some psuedo-code, but that is far beyond my knowledge.

Have a look at the issues over at the PDP-10 IRS project. There are some knowledgeable person there that was at MIT during the 70s and sometimes even some old imp gives some insight.

1 Like

I see. I suppose the PDP-10 keeping the uncompiled version of the function around would eat up extra memory, and is not done for that reason (and compiling-on-demand would make things slower).

Exactly. If you try to feed the full 616 points version of Zork the MDL interpreter starts to complain about memory and garbage collection problems.

I think one user have access to a compiler to MDL version 55 that works and that he has successfully compiled it. Unfortunately MIT hasn’t released this version of MDL with its compiler yet, but hopefully they will, soon. The compiler for the MDL version 54 & 56 havn’t been found as far as I know.

1 Like

MIT have released some new source code and some new compiled games from July 1977, March 1978 & March 1979. I’ve extracted the new issues of “US News & Dungeon Report” and updated the fifth post in this thread with the relevant information.

The source from July 1977 is incomplete but is from the 387 points version and the source from March 1978 look nearly complete and is the first with the complete end-game so it’s the 500 points version + 100 points end-game.

According to @larsbrinkhoff this exhaust all the Zork material that have been located on old backup tapes for the ITS.

I intend to revisit this subject now that Mini-Zork 2 is almost finished.

2 Likes

Both the source code for Zork 3 & MDL Zork have this remark before the “Zork Royal Puzzle” section:

"SUBTITLE CHINESE PUZZLE SECTION (COURTESY OF WILL WENG)"

MDL Zork also have this ASCII-art for the gold card:

 ____________________________________________________________
|							                                 |
|              FROBOZZ MAGIC SECURITY SYSTEMS	             |
|    Door Pass                  Royal Zork Puzzle Museum     |
|							                                 |
|                     #632-988-496-XTHF			             |
|							                                 |
|							                                 |
|     USE OF THIS PASS BY UNAUTHORIZED PERSONS OR AFTER	     |
|   EXPIRATION DATE WILL RESULT IN IMMEDIATE CONFISCATION    |
|							                                 |
|							                                 |
|                              (approved)		             |
|                              Will Weng		             |
|                               789 G.U.E.		             |
|							                                 |
|                                        Expires 792 G.U.E.  |
|____________________________________________________________|

The “Will Weng” mentioned here surely must refer to Will Weng who was the crossword puzzle editor in New York Times, 1969-77?

@eriktorbjorn pointed out that in earlier versions you can fight with the cyclops. This feature dissappeared between 1/28/78 and 12/11/79 but the messages are still there in the later versions (they are still there in Zork 1). It’s not clear if it’s intentional that the possibility of fighting dissappeared or some sort of bug. It’s a shame, though, because the messages are sometimes witty and always brutal but the end is always the same, you die! (Cyclops strength is 10,000, the troll, for comparison has the strength 2).

Examples:

"The Cyclops rushes you, but runs into the wall."
"The Cyclops gets a good grip and breaks your arm."
"The monster smashes his huge fist into your chest, breaking several
ribs." 
"A flying drop kick breaks your jaw."
"The Cyclops seems unable to decide whether to broil or stew his
dinner."
"The Cyclops, no sportsman, dispatches his unconscious victim."

In the later games the message is always:
"The cyclops ignores all injury to his body with a shrug."

2 Likes

Just to add to the confusion, not only are the cyclops fight messages still in Zork I, the cyclops is still in the table of “villains” which makes it look like you should be able to fight him. But apparently the code that loops through it skips the last entry, so he won’t. In the buggy, unreleased 1984 version of Mini-Zork I the cyclops entry was removed (probably to save space), so there it’s the thief who won’t fight you.

From what I remember (it’s been some time since I tried), if you do try to enable the cyclops fight in Zork I you’ll automatically win because he’s unarmed and thus considered defenseless. So it’s a little bit more work than it first seems.

2 Likes