Please create an account to participate in the Slashdot moderation system

 



Forgot your password?
typodupeerror
×
Programming Entertainment Games IT Technology

Crowther's Original Adventure Source Code Found 309

drxenos writes "I don't know how many of you are fans of old-school text adventures (interactive fiction), but Will Crowther's original Fortran source code has been located in a backup of Don Woods's old student account. For fans like me, this is like finding the Holy Grail."
This discussion has been archived. No new comments can be posted.

Crowther's Original Adventure Source Code Found

Comments Filter:
  • by Anonymous Coward on Tuesday August 14, 2007 @08:16AM (#20223235)
    Increased memory (both RAM & Disc storage) availability has allowed us to make our code more readable.
    I looked at the various FORTRAN files and am amazed at the spaghetti GOTO maze which, although messy, was probably the only way to do things in FORTRAN at the time with no structuring capability.


    A random example:

    IF(K.NE.1) MASK1="177*M2(K)
            IF(((A(J).XOR."201004020100).AND.MASK1).EQ.0)GOTO 3
            IF(S.EQ.0) GOTO 2


    Wow! Is that the opposite of self-documenting code or what?

  • Reversed causation (Score:5, Interesting)

    by dazedNconfuzed ( 154242 ) on Tuesday August 14, 2007 @08:40AM (#20223419)
    Those interactive books came about because of Adventure.
  • by scottsk ( 781208 ) on Tuesday August 14, 2007 @08:44AM (#20223449) Homepage
    The adventure source is a great find. I've been looking for the Scheme source tarball from the 1986-1987 period (i.e. when SICP was still new) for over a year, with no success. The changelog is online, and shows the work that was done in that period, but none of the tarballs still exists. Anyone have a Scheme distribution tarball from late 1987? I would like to run the code from that time along with the book to do screen captures, etc for something I'm working on.
  • by Xiaran ( 836924 ) on Tuesday August 14, 2007 @08:51AM (#20223515)
    My first expose to Collosal Cave was when I was about 10ish... my Dad was a programmer(mainframes... mostly IBM, sperry etc) and I played it on a Sperry mainframe terminal. It may be hard to imagine for someone like yourself that has probably grown up with high resolution, high powered desktop PCs... but playing it for me was eye opening in the extreme. I suspect Im not alone and many other got hooked on development and technology because of interactive stuff like the good old original adventure.

    xyzzy
  • by LMacG ( 118321 ) on Tuesday August 14, 2007 @09:00AM (#20223607) Journal
    Ah, the old computed GOTO. In the first line, the value of KQ is used as an index to the list of labels. If KQ=1, GOTO 5014, if KQ=2, GOTO 5000, etc. etc. If KQ is outside the range (0 or greater than 4), then no GOTO is performed, so you'd hit the PAUSE statement. Looks like it's essentially saying "this shouldn't happen".

    2027 is similar, there's just a lot more possible values. That rogue 1 is a continuation indicator, it would have been in column 6 on your punch card.
  • by junge_m ( 410514 ) on Tuesday August 14, 2007 @09:20AM (#20223821) Homepage
    This is why the grandmaster of 'Literate Programming', Donald Knuth, has done a translation into his CWEB Language which is totaly devoid of jumps and other 'dirty' Fortan:
    http://www.literateprogramming.com/adventure.pdf [literateprogramming.com]
  • EAMON!!!! (Score:4, Interesting)

    by WED Fan ( 911325 ) <akahige@NOspAm.trashmail.net> on Tuesday August 14, 2007 @09:31AM (#20223905) Homepage Journal

    This was fun. I remember running it on a teletype terminal in programming class (damn, thats old) BANG BANG BANG BANG BANG. You couldn't do a quick CLS to hide the evidence when the instructor came by, "Do you think paper grows on trees?" he yell. Of course all was forgiven when we showed him our course work was done. Then, he made us write our own dungeon code.

    Much later, Don Brown(?) came out with EAMON [wikipedia.org], with a write your own framework. Fun fun fun.

  • by ari_j ( 90255 ) on Tuesday August 14, 2007 @10:06AM (#20224255)
    I'm not sure about the PDP-11 era, but as early as the mid-80's it was common to use .doc to indicate that something was a general document as opposed to a .ltr, .mem, or the like. The word processor used was irrelevant. (We used XyWrite at the time.) MS Word commandeering .doc is a relatively new phenomenon - the .doc extension itself is not.
  • by SimHacker ( 180785 ) * on Tuesday August 14, 2007 @10:41AM (#20224707) Homepage Journal

    Zork was the reason I got on the ARPANET, back around 1980 or so. I was using Bruce's Northstar BBS that had an adventure game that Bruce had written in Basic, and he told me how to play Zork: first, dial up the NBS TIP, connect to MIT-AI (the command was "@L 134", because the ARPANET had 8 bit host numbers, and AI was 134), and apply for an account to learn Lisp. Once that was granted, I connected to MIT-DM ("@L 70"), and logged in as URANUS, password RINGS, used :CHUNAME to change my user name, and waited until one of the two people playing Zork quit, to take their slot. Later somebody told me the magic words to use to get an account on DM, so I applied for my own account on DM, claiming that I wanted to "Learn MDL for calculus and algebraic applications". The source code to Zork was well hidden. DM ran a weird version of ITS that had some kind of file security or cloaking, it was rumored. I was always looking for the Zork sources, but never found it on DM.

    Years later I googled for a unique phrase that was only in the original DM version of Zork, and this URL popped up: http://retro.co.za/adventure/zork-mdl/ [retro.co.za]

    The original MDL source to Zork is really beautiful code that's almost as fun to read as it was to play. I had discovered a bug in the InfoCom version of Zork, which turned out to be in the original sources. When you're fighting the troll who's wielding an Axe, you can give anything to the troll and he will eat it. So I tried "give axe to troll" and he ate his axe, then cowered in the corner! Better yet you can go "give troll to troll" and he will eat himself and disappear, unfortunately not clearing the troll flag that is required to leave the room, so if you try to leave it prints a message saying the troll fends you off with a menacing gesture, and stops you from leaving. Sure enough, in the original sources [retro.co.za], there is a troll flag!

    -Don

  • by smellsofbikes ( 890263 ) on Tuesday August 14, 2007 @10:45AM (#20224757) Journal
    Along with Adventure, we spent a lot of time on a VAX 11/785 (I believe) playing a game called Hunt. It was multiplayer and each screen showed a top-down section of the maze you were in, like larn, only past that it was like a FPS -- you wandered around, finding ammo, then shooting at other players you saw, using different weapons. A certain amount of ammo let you shoot a bullet, somewhat more a grenade, somewhat more yet an enormous blast that blew up part of the maze, and a whole lot of ammo let you shoot napalm, that ran along corridors without destroying anything (but would pursue people who were running.) I've been trying to find the sourcecode for it for years but haven't even found anyone who has heard of it. Anyone here?
  • Re:Fight the power (Score:2, Interesting)

    by ShawnCplus ( 1083617 ) <shawncplus@gmail.com> on Tuesday August 14, 2007 @10:58AM (#20224935) Homepage
    I wouldn't really be surprised even though Diku and SMAUG are the most prevalent there are a lot of PennMUSH servers out there. Though people have destroyed Richard Woolcock's Godwars codebase and flooded the proverbial market with them I'm continually amazed at innovations people make in new games and many times I come across some that are much more complex than any graphical MMO. Richard Woolcock's Godwars 2/Gladiator Pits 3 codebase is insanely complex and has a fighting system that's richer and deeper than 95% of the console fighting games. It's a bit sad that some people have forgone the license restrictions and decide to make a profit off their games.
  • by spun ( 1352 ) <loverevolutionary@@@yahoo...com> on Tuesday August 14, 2007 @11:07AM (#20225035) Journal
    You are in a debris room filled with stuff washed in from the surface. A low wide passage with cobbles becomes plugged with mud and debris here, but an awkward canyon leads upward and west. There is a PDP-10 with a card reader and terminal here. A box of punchcards sits nearby.
    > get box
    You now have the box of punchcards.
    > input cards
    You carefully feed the cards into the card reader.
    > look terminal
    The terminal says:
    YOU ARE STANDING AT THE END OF A ROAD BEFORE A SMALL BRICK
    BUILDING. AROUND YOU IS A FOREST. A SMALL
    STREAM FLOWS OUT OF THE BUILDING AND DOWN A GULLY.
  • British BASIC dialects had something even better.

    The TRULY calculated GOTO/GOSUB statement!

    On a Beeb or Speccy, you could quite happily write stuff like

    50 INPUT A
    55 IF A<1 OR A>5 THEN GOTO 50
    60 GOTO 900+100*A


    This sort of thing didn't work on machines running Microsoft BASIC (which even used to throw a hissy fit if you tried to GOTO a non-existent line number. Beebs and Speccies just carried on from the next higher line number. Meant you could aim GOTO statements at REM statements without fear that stripping them to free up RAM later on would break things). BBC BASIC had the usual ON num_expr GOTO num_expr,num_expr,num_expr ... and later versions introduced ON ... PROC.

    Neither the BBC nor the Spectrum, however, had the absolutely classic feature found on the Camputers Lynx ..... which actually supported fractions in line numbers! So the old "going up in tens" thing wasn't quite so necessary, as you could always squeeze in a line 10.5 between lines 10 and 11 if you had to.
  • by fm6 ( 162816 ) on Tuesday August 14, 2007 @12:40PM (#20226303) Homepage Journal
    Yeah, Perl has gotos (computed and otherwise) but it also has block structure. Which is why few Perl programmers ever have occasion to write a goto. (I don't think I ever have.) Perl's readability problems are exactly the opposite of FORTRAN's. Where FORTRAN's designers knew too little about artificial language theory, Perl's designers know way too much! Indeed, Larry Wall started out as a linguist, and can't seem to stop dreaming up clever language constructs. The result is a language that has a nasty tendency to bring out the poet in the programmer. Why is that a bad thing? Because, as any English 101 student will tell you, reading poetry is hard work.
  • The Lynx was very much the exception, even in the UK (where most people wrote their own BASIC rather than licence one from Microsoft). It had no concept at all of integers; every number was stored within the program as a floating-point number (and only rendered at display time). If you used "2.5E4" for a line number, it would show up in any LISTing as 25000, because 25000 has few enough digits not to need to be displayed in scientific notation. If you used PEEK, you'd see instead of the ASCII codes for the digits that make up the number an unprintable character meaning "number follows", and the number in internal representation. Non-printing character codes were also used as shorthand forms for BASIC keywords and functions.

    BBC BASIC used 32-bit integers (denoted in variable names by a trailing %) and 40-bit floating point numbers, but 16-bit line numbers. Spectrum BASIC used a 40-bit internal representation for all numbers (integers -65536..+65536 were represented specially, using an exponent of -128, and a "mantissa" formed from a "sign byte" of either 0 or 255, the units, the 256es and zero; the Spectrum's internal calculator respected this special representation as far as possible and only ever converted a specially-represented integer to its floating-point representation if a calculation step exceeded the representable range) except for line numbers, which were 16-bit. Also on the Spectrum, the "reserved word" characters weren't non-printing; they just shew up as the word in full.

    Anyway, integers are fixed-precision. They just go up in ones because that's convenient for people. If you want to have fractions to two places (e.g. if you're working with money), just multiply everything by 100 (and then think of it as pence as opposed to pounds). And be creative how you print it :) There's no reason (apart from convention) why it has to be 10, 100 or 1000, either ..... you could work in units of a third of an olde english fluid ounce, and divide by 60 to get pints. But that just would be silly.
  • by Mr. Protocol ( 73424 ) on Tuesday August 14, 2007 @05:16PM (#20230175)
    This story mildly creeps me out.

    I worked down the hall from Willie Crowther when I was at BBN, and I asked him about why he wrote it ("I had some ideas on parsing response analysis I wanted to try"). I think I at least used to have a copy of the Fortran source code salted away on my account somewhere, though I'd probably have a problem laying my hands on it now. I just wasn't aware that anyone was looking for it.
  • by prockcore ( 543967 ) on Tuesday August 14, 2007 @06:21PM (#20230811)

    The computed goto is the ancestor of the switch construct of languages like C.


    In fact, a switch in Java gets compiled into a computed goto in jasmin.
  • by Fortran IV ( 737299 ) on Tuesday August 14, 2007 @07:44PM (#20231507) Journal
    The IBM 1130 [ibm1130.org] had a FORTRAN compiler that could run in 4K "words" (8KB). It was somewhat limited—for instance, the arithmetic IF was the only branching statement available. But it could compile quite large programs, I was told; my school had a FORTRAN circuit-analysis program 20,000 cards long (5 full drawers in a card cabinet) that could allegedly be compiled successfully—over a period of several hours, presumably.

To the systems programmer, users and applications serve only to provide a test load.

Working...