26th April 2001From my earliest programming days, I've been writing Adventure games. In the decade from 1980 to 1990, I started more than twenty, although I have done much less since then - I guess this is a downside to programming for a living. This document is a more or less exhaustive list of all the Adventure games I've written, in chronological order.
Anyway, in among all the articles that seemed to be from another world - describing mainframe adventure games with hundreds of locations! - was one that was more at the level I could work at: an infinite 3D maze program for the Commodore Pet (easy to adapt for a VIC-20), which generated the maze from a random-number generator seeded by the player's co-ordinates. Very elegant. (I wrote a very simple reimplementation in Perl a while back, which you're welcome to if you'd like to see it.)
I extended this in small ways - for example, by explicitly placing a small number of ``treasures'' in difficult-to-reach places.
It used an ``parallel linear array'' data structure, (what we now call ``a FORTRAN array of structures''), which survived essentially unchanged right through to the Commodore 64 Zonk. There were two sets of arrays representing locations and objects:
Zonk, as it was originally called, read location data and bitmapped graphics from fixed-length records in a random access disk file. The fixed length was marginally over 1k, and the bitmaps were able to fit comfortably in this space, since they were monchrome 128x48! (Actually, the TRS-80 had a 64x16 screen, and among the characters in its 8-bit-wide set are the 64 possible combinations of six on/off blocks packed into a character space, two across and three down. This means that the bitmaps contained text and pictures built from puncuation characters as well as the bitmap stuff).
As far as I remember Zonk eventually grew to about 120 locations with six or seven full-screen graphics - by which time, its name has changed to Anaujiram, and eventually to Sarg. (Yes, both of these names are rather peurile backward spellings of drugs. And we thought we were so clever.)
It being the early 80s when floppy disks were a dangerously exciting novelty, we had to write a bespoke program for creating the disk-file with the locations. And of course we needed a bespoke image-editing program too.
In addition to the ``real'' loctions, Sarg included a 125-location 3D maze (5x5x5), implemented as a basically separate program embedded in the main one. It was called ``The Maze of Arnold F. W.'', a very cryptic bow in the direction of Pink Floyd's Final Cut album which we were listening to a lot at the time - this gives a rough dating of the game.
At the time, we were very proud of Zonk. This just shows what you can get away with by means of never having played the real Zork.
The guys at the magazine hadn't told me they were going to use my program, so when I saw it in the magazine, I didn't immediately recognise it as mine - I thought to myself, ``this seems like a good game, I think I'll type it in''! Ah, the thrill of sudden realisation!
The idea was to start on the Earth, get yourself killed and thus progress to Hell, and eventually find Jacob's Ladder, which could be climbed into Heaven. (Er, my theology has moved on a bit since then! :-)
The four games in the Magic Mirror series were all written very close together, in a matter of a few months. I had my game mechanics all worked out, and I was on a roll with the plotting. I wish I could remember now why they didn't make it out there into the hands of the public - the way I remember it, it just sort of never happened, which I think is a real loss. Apart from anything else, it means that I've lost whatever chance I might once have had of playing these lost games again.
Unlike the other games in this series, it required a VIC-20 with not 8k but 16k expansion - and since I didn't own a 16k board, I had to borrow one from a school-friend, Richard Monk, in order to write it. Seems strange in these days when 4M of memory is considered woefully inadequate. [Meta-note: I wrote that last sentence in 1997 or '98. As I write now, in 2001, 4M is truly laughable - most people now consider 64M unusable. No doubt by the time you read this, people will look sniffily on any computer whose memory is so tiny as to be measured in something as piddly as megabytes. Plus ca change.]
Of all my games that have been lost to posterity, this is the one that I would most like a chance to play again. I remember it somehow being invested with a strong sense of atmosphere, and having more-interesting-than-average puzzles. I have often tried to recapture elements of the plot to Cornucopia, as it rather bizzarrely ended up being called, but I have never succeeded to my own satisfaction. I particularly remember a tricky initial portion, necessary to get into the caves where the game took place, and a huge underground cavern with trees growing in it.
The ``design'', to dignify it with a more complete name that it deserves, was sort of inspired by the Ravenloft AD&D module, which was unusual in that the main bad-guy - a vampire, in this case - was interesting in his own right, was a man with a mission rather than mere combat-fodder. At the time, that was unusual enough in AD&D, and absolutely unheard-of in computer adventures. (Of course, it was only unheard of because I'd only read Zork adverts, never played the game - and therefore, I'd never met the thief.)
There's much, much more about CoC on the Causes of Chaos section of this site.
Technically, this was a small step forwards from Causes of Chaos, in that I started to formalise the separate notions of players and characters, and consequently to think in more abstract terms. Only a small step, though.
I also wrote a lot of stuff to do a limited form of graphical combat (based primarily on reaction speed), and got as far as coding up the first twenty or so locations of the game, with their objects and some puzzles. The game foundered not for technical reasons, but simply because I lost momentum on designing the game's plot: the ideas just wouldn't come, probably because of the limitations of Arthurian Britain. This is a shame because (A) I would have made a lot of money, and (B) I had some good ``grand scheme'' ideas for the plot - in particular, that it would not be possible to win the final battle: Arthur always loses, in the manner of a Grand Tragedy.
The Camelot introductory screen was a lot prettier than the Causes of Chaos one: in particular, I was able to design separate Olde English sprites for each of the letters of the word CAMELOT, and slide them on to the screen one at a time, which was a very nice effect. There were vague plans to make a loading screen by videoing the members of the church I was then a member of, dressed up as knights, and digitising the result - this gives a rough date for the game, since I must have been seventeen or so.
Like most of the games I wrote in this period, it was never what you could call ``finished'' - I think my mind was going too fast for my typing fingers to keep up! But There was enough of it that it would be interesting to play again (in particular, I'd love to know the details of the puzzles.)
In the mean time, I decided with Zonk to concentrate on using the C64's capabilities more fully, and on playability. This meant that in programming terms, there were more new ideas here than in most of my games. One detail was that I built infrastructure that allowed me to use all 64k of the 64's RAM, by storing text in the 16k that's ``hidden'' behind the kernal and BASIC ROMs, swapping the necessary blocks in and out as necessary with little machine code routines.
A more significant change was that I finally broke away from the old two-word ``VERB NOUN'' input format, allowing multiple-word noun clauses; and there was a certain amount of intelligence in understanding what the player intended. For example, the game included (among other things) a stone key, a bronze key, and a bronze statue. If you said ``GET KEY'' when both were present, the game would ask which you meant, so that you had to say ``GET BRONZE KEY'' - or just ``GET BRONZE'' for short, although of course that would also be ambiguous if the bronze statue was also present. But if you were carrying one key and the other was present, then ``GET KEY'' would do the right thing. And ``DROP KEY'' would do the opposite, but also right, thing. Cool.
One other innovation (for me - good games had been doing it for years) was the introduction of what I termed ``abstract objects'' - things like ``self'', ``air'', ``ground'', etc., which are always there.
Zonk re-used some of the old Cornucopia puzzles (though lots didn't make it in, and thus were lost, most likely forever.) But there were a lot of new and very complex puzzles in there too - I particularly remember one insanely involved sequence involving an electrified floor, a negative gravity generator, a steel rope, a chasm and some rubber gloves (though, OK, I admit it, the details elude me!)
The big advances in what I was trying to achieve here were twofold. Firstly, I wanted to represent hierarchies of objects: for example, the herring is in the glass case, which is in the wooden box, which is at the forest clearing. And secondly, I wanted to build a ``real'' parser for the English language, using a formal BNF grammar expressed in yacc.
Neither of these goals was fully realised. The first one worked so far as it went, although it achieved containment using linear data structures and trickery with negative indexes and suchlike. In this, it pointed the way for what I was shortly to do with MUNDI, and then revisit with more suitable data structures in Herring. The second goal, I think, was a chimera: English is just not suited to formal parsing, in part because it's not possible for a lexical analyser to reliably identify words as being particular parts of speech. (For example, consider how to lex and parse the old chestnut PLANT THE POT PLANT IN THE PLANT POT.)
So I didn't get very far with adv (about two thousand lines of code) before I threw it all away and started again on what would become MUNDI. Fortunately for my own sense of history, I had the sense to archive what I'd done up to that point, and this distribution is essentially that archive.
(Also at around this time - in October 1987 - I wrote a short article, ``adv1.ms'' about how to write adventure games in BASIC. This was commissioned for a magazine that was edited by Ian Cottee's sister.)
For much, much more about MUNDI, see the MUNDI section of my site.
I have an embronic Herring section.
Download links and documentation are in the sac section.
At the last count, that's more than 20 adventure games I have been involved in. Most of them I have designed and written myself, one or two have been co-written, and a few have never reached the degree of completion that merits the word ``written''. Still. It's plenty, isn't it?