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.
(Score: 1, Funny) by Anonymous Coward on Friday May 08 2020, @06:17PM (3 children)
... 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)
🌻🌻 [google.com]
(Score: 2) by hendrikboom on Monday May 11 2020, @12:45PM
MDL in XML?
(Score: 2) by sjames on Friday May 08 2020, @09:18PM
I smell chives...
(Score: 5, Informative) by martyb on Friday May 08 2020, @06:34PM (10 children)
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)
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
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
From the User Environment section of the ITS wiki page:
(Score: 2, Funny) by Anonymous Coward on Friday May 08 2020, @07:13PM (1 child)
Finally someone managed to solve the LISP problem of too many parentheses!
(Score: 2) by hendrikboom on Monday May 11 2020, @01:05PM
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)
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)
> 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
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
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*.
(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
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)
Proofreading before posting much?
(Score: 2) by Dr Spin on Friday May 08 2020, @06:58PM
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)
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]:
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)
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
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)
Perhaps the mistake was a missing hyphen...?
(Score: 2) by Rosco P. Coltrane on Saturday May 09 2020, @09:40AM
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)
I see no mention of the license, which makes this much less interesting. I would hope for MIT, but you never know.
(Score: 0) by Anonymous Coward on Saturday May 09 2020, @12:38AM
https://github.com/devshane/zork/issues/11 [github.com]