Stories
Slash Boxes
Comments

SoylentNews is people

posted by Fnord666 on Friday May 08 2020, @05:32PM   Printer-friendly
from the frobizz dept.

Source code for seminal adventure game Zork on dead mainframe exhumed onto GitHub:

Source code for seminal adventure game has been Zork[sic] recovered and published on GitHub.

While classic adventure games (aka interactive fiction) are well represented in the Internet Archive - there's plenty of playable Zork versions here - this new trove is source code that's been retrieved from the Massachusetts Institute of Technology, Tapes of Tech Square (ToTS) collection at the MIT Libraries Department of Distinctive Collections (DDC).

If you access the repo and its README you're told the source was written "in the MDL programming language written on a PDP-10 timeshare computer running the ITS operating system".

[...] The code in the repo comes from 1977, before the game was commercialised but at a time it was informally distributed.


Original Submission

This discussion has been archived. No new comments can be posted.
Display Options Threshold/Breakthrough Mark All as Read Mark All as Unread
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
(1)
  • (Score: 1, Funny) by Anonymous Coward on Friday May 08 2020, @06:17PM (3 children)

    by Anonymous Coward on Friday May 08 2020, @06:17PM (#991752)

    ... if "dead mainframe" is code for "eaten by a grue".

    (look, it's Zork; there's going to be grue jokes.)

    • (Score: 4, Informative) by JoeMerchant on Friday May 08 2020, @09:08PM (1 child)

      by JoeMerchant (3937) on Friday May 08 2020, @09:08PM (#991806)

      <PSETG SWIMYUKS
         '["I don't really see how."
           "I think that swimming is best performed in water."
           "Perhaps it is your head that is swimming."]>
      <GDECL (SWIMYUKS) <VECTOR [REST STRING]>>

      <DEFINE SWIMMER ("AUX" (SWIMYUKS ,SWIMYUKS))
          #DECL ((SWIMYUKS) <VECTOR [REST STRING]>)
          <COND (<RTRNN ,HERE ,RFILLBIT>
             <TELL
      "Swimming is not allowed in this dungeon.">)
            (<TELL <PICK-ONE .SWIMYUKS>>)>>

      <DEFINE GRUE-FUNCTION ("AUX" (PRSA <1 ,PRSVEC>))
          #DECL ((PRSA) VERB)
          <COND (<==? .PRSA ,EXAMI!-WORDS>
             <TELL
      "The grue is a sinister, lurking presence in the dark places of the
      earth.  Its favorite diet is adventurers, but its insatiable
      appetite is tempered by its fear of light.  No grue has ever been
      seen by the light of day, and few have survived its fearsome jaws
      to tell the tale.">)
            (<==? .PRSA ,FIND!-WORDS>
             <TELL
      "There is no grue here, but I'm sure there is at least one lurking
      in the darkness nearby.  I wouldn't let my light go out if I were
      you!">)>>

      --
      🌻🌻 [google.com]
    • (Score: 2) by sjames on Friday May 08 2020, @09:18PM

      by sjames (2882) on Friday May 08 2020, @09:18PM (#991811) Journal

      I smell chives...

  • (Score: 5, Informative) by martyb on Friday May 08 2020, @06:34PM (10 children)

    by martyb (76) Subscriber Badge on Friday May 08 2020, @06:34PM (#991756) Journal

    This brings back memories!

    First, the code is a variant of LISP, except "<" and ">" replaced "(" and ")", respectively. The first parameter is the operator; subsequent parameters were operands, each of which could, in turn, be nested. (foo (bar baz) (buz qux)) would invoke foo; the first operand to foo would be the result of what came from bar operating on baz and the second operand to foo would be the result of buz operating on qux.

    ITS [wikipedia.org] (on which this was developed) was in many respects a precursor to TENEX [wikipedia.org] and later TOPS-10 and TOPS-20. I recall my amazement when I first saw automatic command completion... including prompting of permitted operands.

    The operating system provided a kind of version control. Each time a file was updated, the new file would be provided an incremented suffix. So, if I edited a file "foo.3" and saved the changes, a file "foo.4" would automatically be created. The last-numbered version of a file would be used by default. So, in this case "foo" would default to reference "foo.4" One could, of course, refer to explicit versions of a file. There was a command to set the number of maximum "backups". During a burst of rapid code development, a value of 10 could be useful. Otherwise, 3 seemed to provide a compromise between verbosity of listing files, and access to prior versions.

    See, for example, a diff between the files "act1.37" and "act1.38" or between "np.92" and "np.93".

    The file "madadv.help" provides a synopsis of the syntax accepted by the game. The reference to only 5 characters being needed to distinguish commands and objects has an interesting backstory. The system was designed around 36-bit "words". One could conveniently pack 5 characters (7-bits each) per word. Basically ASCII with no high-order bit.

    Lastly, there were some low-level commands needed in these sources to save and restore games. Also there are hard-coded things like "" and "" which are for Carriage Return and Linefeed, respectively.

    Given the timeframe, 1977(!) and the fact that the Altair 8800 [wikipedia.org] did not yet exist, it is amazing what they were able to construct with the comparatively limited resources available at the time!

    --
    Wit is intellect, dancing.
    • (Score: 3, Funny) by Rosco P. Coltrane on Friday May 08 2020, @06:42PM (1 child)

      by Rosco P. Coltrane (4757) on Friday May 08 2020, @06:42PM (#991762)

      Just you wait until they rediscover the PDP-7 port of Castle Wolfenstein. Ah, the memories! Rendering 3D in realtime on punchcards was friggin' costly though...

      • (Score: 3, Insightful) by Ethanol-fueled on Friday May 08 2020, @07:31PM

        by Ethanol-fueled (2792) on Friday May 08 2020, @07:31PM (#991793) Homepage

        Ah, those were the good ol' days, back when Nazis were actually the bad guys and killin' 'em was fun, especially later between the 3D of Wolf 3D and the legendary exploding Hitler-head of Bionic Commando.

        Then every new game with Nazis started becoming a heavy-handed lesson about heroes being communist interracial lesbian love-triangles featuring at least one butch tranny, and bad guys being Christian White Males whether or not they were actual Nazis. And every straight White woman paired with a Black male of Western-African origin. I guess it's what happens when the game design industry gets taken over by people like these. [nocookie.net]

    • (Score: 3, Informative) by carguy on Friday May 08 2020, @06:56PM

      by carguy (568) Subscriber Badge on Friday May 08 2020, @06:56PM (#991771)

      From the User Environment section of the ITS wiki page:

      The environment seen by ITS users was philosophically significantly different from that provided by most operating systems at the time.[2]

              Initially there were no passwords, and a user could work on ITS without logging on.[4] Logging on was considered polite, though, so people knew when one was connected.
              To deal with a rash of incidents where users sought out flaws in the system in order to crash it, a novel approach was taken. A command that caused the system to crash was implemented and could be run by anyone, which took away all the fun and challenge of doing so. It did, however, broadcast a message to say who was doing it.
              All files were editable by all users, including online documentation and source code.
      ...

    • (Score: 2, Funny) by Anonymous Coward on Friday May 08 2020, @07:13PM (1 child)

      by Anonymous Coward on Friday May 08 2020, @07:13PM (#991787)

      Finally someone managed to solve the LISP problem of too many parentheses!

      • (Score: 2) by hendrikboom on Monday May 11 2020, @01:05PM

        by hendrikboom (1125) Subscriber Badge on Monday May 11 2020, @01:05PM (#992795) Homepage Journal

        There's a more effective way to do this. Pick *one* other character (I picked '/' decades ago. Some people may prefer ';' to '/')

        Then treat phrases like

              ( a b c / d e f / g / h j . k)

        as equivalent to

            ( a b c ( d e f (g ( h j . k ))))

        This eliminates a *lot* of parentheses.
        And it works well when you redesign a few other Lisp bits of Lisp syntax:

        (let a b c) instead of (let ((a b)) c)

        Then you can write
        ( let a b
        / if (eq a 'foo) e
        / let c d
        / let e f
        / onion soup c e
        )

        The syntactic counterpart of tail recursion.
        An order of magnitude reduction in parentheses.
        Intermingling 'if' and 'let' is easy without deep nesting.
        No significant change in Lisp philosophy.
        Code and data are still as equivalent as before.
        Leads to a coding style in which the (syntactically) largest operand of an operator tends to be the last one.

        There's a Racket #lang module that does this with '#/'. Not nearly as neat in my opinion, but here it is:
        https://docs.racket-lang.org/parendown/index.html [racket-lang.org]

    • (Score: 3, Interesting) by hubie on Friday May 08 2020, @07:33PM (3 children)

      by hubie (1068) Subscriber Badge on Friday May 08 2020, @07:33PM (#991795) Journal

      Ah yes, that is the same version control I remember from VAX/VMS. You'd go along for a while and then you could type "purge" to keep only the highest numbered file. Accidentally purging copies I wanted to save happened from time to time.

      If I may go off on a tangent, another thing I remember from VMS was that DECNET was all connected together. You could change directory from your account to someone else's just like you do on unix, but you could also do it across the world by typing (I think) OTHER_MACHINE::other_directory. You had the equivalent of the user permissions on unix, but you could easily mount a disk across the world as if it was mounted to your machine. I miss those days. I didn't need software that uses 50% of my computer resources to be constantly running in the background and scanning for "threats" and such.

      • (Score: 0) by Anonymous Coward on Friday May 08 2020, @10:00PM (1 child)

        by Anonymous Coward on Friday May 08 2020, @10:00PM (#991842)

        > I didn't need software that uses 50% of my computer resources to be constantly running in the background and scanning for "threats" and such.

        Yes because you spent 50% of *your* resources doing that. Someone automated it and now you're butthurt. Aw you're butthurt.

        • (Score: 3, Touché) by Runaway1956 on Saturday May 09 2020, @01:31AM

          by Runaway1956 (2926) Subscriber Badge on Saturday May 09 2020, @01:31AM (#991923) Journal

          You've seen the T-shirt that says "stupidity should hurt"? What they meant was, stupidity should hurt the stupid people. Specifically, stupidity should hurt the people who designed an insecure system, as well as those people who pay good money for the "privilege" of running those insecure systems.

          Upgrade to *nix.

      • (Score: 2) by martyb on Saturday May 09 2020, @03:33AM

        by martyb (76) Subscriber Badge on Saturday May 09 2020, @03:33AM (#991946) Journal

        Back in the early 80s when I was at DEC, I remember printing on a line printer (with just 2 or 3 pages of 132-column, green-bar paper) the a map of the *entire* DECNET network. With plain old ASCII characters for *everything*.

        +-----------+    +-----------+
        | MAR-VAX-1 |----| MAY-T20-3 |--- ...
        +-----------+    +-----------+
              |                |
              |                +----
             ...

        (There was more but I had to chop it out to bypass the site lameness filter for "too much whitespace or repetition".)

        DECNET -- yes, local or remote -- from the user side of things they were equivalent (except for network delays, of course!).

        I've occasionally wondered how much DECNET path-names influenced Microsoft's UNC [wikipedia.org] names.

        --
        Wit is intellect, dancing.
    • (Score: 2) by krishnoid on Friday May 08 2020, @10:01PM

      by krishnoid (1156) on Friday May 08 2020, @10:01PM (#991844)

      First, the code is a variant of LISP, except "<" and ">" replaced "(" and ")", respectively.

      What profane manner of heathenry is this? Capture the blasphemer and bring him before us!

  • (Score: 2) by Rosco P. Coltrane on Friday May 08 2020, @06:37PM (6 children)

    by Rosco P. Coltrane (4757) on Friday May 08 2020, @06:37PM (#991759)

    Source code for seminal adventure game has been Zork recovered

    Proofreading before posting much?

    • (Score: 2) by Dr Spin on Friday May 08 2020, @06:58PM

      by Dr Spin (5239) on Friday May 08 2020, @06:58PM (#991773)

      Not experience lisp need you ((((( +*&=_8,... no carrier

      --
      Warning: Opening your mouth may invalidate your brain!
    • (Score: 4, Touché) by martyb on Friday May 08 2020, @06:59PM (4 children)

      by martyb (76) Subscriber Badge on Friday May 08 2020, @06:59PM (#991774) Journal

      The typo was in the original on The Register.

      https://web.archive.org/web/20200508152054/https://www.theregister.co.uk/2020/05/08/zork_source_code_released/ [archive.org]:

      Source code for seminal adventure game has been Zork recovered and published on GitHub [archive.org].

      I'll add a [sic] to make it clear that the mistake existed in the original. Thanks for pointing it out.

      --
      Wit is intellect, dancing.
      • (Score: 0) by Anonymous Coward on Friday May 08 2020, @10:09PM (1 child)

        by Anonymous Coward on Friday May 08 2020, @10:09PM (#991851)

        I always mix up seminal and semeny.

        As in: "The Prize recognized the seminal contributions Adrian had made to the embryonic field of single cell electrophysiology."

        and: "It tastes semeny "

        • (Score: 0) by Anonymous Coward on Saturday May 09 2020, @11:13AM

          by Anonymous Coward on Saturday May 09 2020, @11:13AM (#991995)

          I was confused about "Angel's prostate fall" in a church hymn for the longest time.

          I won't go much further than say I thought the angels were pleasuring themselves, and seminal fluids were being produced. Well, preachers did come out of semenaries. I knew that had something to do with the prostrate gland. Apparently if one did not release the pressure, they soon couldn't pee.

          Anyway, I'm glad we had sex education. Seemed all my confusion did at home and church just got everyone all upset.

      • (Score: 0) by Anonymous Coward on Saturday May 09 2020, @02:18AM (1 child)

        by Anonymous Coward on Saturday May 09 2020, @02:18AM (#991932)

        Perhaps the mistake was a missing hyphen...?

        Source code for seminal adventure game has-been Zork recovered and published

        • (Score: 2) by Rosco P. Coltrane on Saturday May 09 2020, @09:40AM

          by Rosco P. Coltrane (4757) on Saturday May 09 2020, @09:40AM (#991986)

          Perhaps journalism these days consists in putting on a silly hat and hoping for the best when writing an article.

  • (Score: 2, Insightful) by sorpigal on Friday May 08 2020, @11:37PM (1 child)

    by sorpigal (6061) on Friday May 08 2020, @11:37PM (#991881)

    I see no mention of the license, which makes this much less interesting. I would hope for MIT, but you never know.

(1)