RSS

Monthly Archives: November 2019

New Tricks for an Old Z-Machine, Part 3: A Renaissance is Nigh

In 1397, a Byzantine scholar named Manuel Chrysoloras arrived in Florence, Italy. He brought with him knowledge of Greek, along with many ancient manuscripts in Greek and Latin that had been lost to the West in the chaos following the collapse of the Roman Empire. This event is considered by many historians to mark the first stirrings of the Italian Renaissance, and with them the beginning of the epoch of scientific, material, and social Progress which has persisted right up to the present day.

In 1993, an Oxford graduate student named Graham Nelson released a text adventure called Curses that, among other things, functioned as an advertisement for a programming language he called Inform, which targeted Infocom’s old Z-Machine. This event is considered by most of us who have seriously thought about the history of text adventures in the post-Infocom era to mark the first stirrings of the Interactive Fiction Renaissance, and with them the beginning of an interactive-fiction community that remains as artistically vibrant as ever today.

Yes, I can see you rolling your eyes at the foregoing. On one level, it is indeed an unbearably pretentious formulation, this comparing of one of the most earthshaking events in human culture writ large with the activities of a small community of niche enthusiasts. Yet, if we can agree to set aside the differences in scale and importance for the moment, the analogy really is a surprisingly apt one. Like the greater Renaissance in Europe, the Interactive Fiction Renaissance prepared a group of people to begin moving forward again by resurfacing old things that had been presumed lost forever. Taking pride of place among those things, being inextricably bound up with everything that followed, was the Z-Machine, functioning first as a means of running Infocom’s classic games, as we saw in the first article in this series; and then as a means of running new games, as we began to see in the second article and will examine in still more detail today.


As Graham Nelson began to pursue the dream of writing new software to run on Infocom’s old virtual machine, he had no access to the refined tools Infocom had used for that task. Thus he was forced to start from nothing — from what amounted to a bare chunk of (virtual) computing hardware, with no compilers or any other software helpers to aid his efforts. He had to start, in other words, at the bare metal, working in assembly language.

Assembly language is the lowest level at which any computer, whether real or virtual, can be (semi-)practically programmed. Its statements correspond to the individual opcodes of the processor itself, which normally encompass only the most granular of commands: add, subtract, multiply, or divide these numbers together; grab the number from this local register and put it into that memory location; etc. Assembly language is the primordial language which underpins everything, the one which must be utilized first to write the compilers that allow programmers to develop software in less granular, more structured, more human-friendly languages such as C, Pascal, and BASIC.

Already at this level, however, the Z-Machine separates itself from an ordinary computer. Alongside the rudimentary, granular opcodes that are common to any Turing-complete computer, it implements other opcodes that are absurdly baroque. The “read” opcode, for example, does all of the work of accepting a full line of text from the keyboard, then separating out its individual words and “tokenizing” them: i.e., looking them up in a dictionary table stored at a defined location in the virtual machine’s memory and converting them into the codes listed there. Another opcode, “save,” simply orders the interpreter to save the current state of the machine to disk, however it prefers to go about it; ditto the “restore” opcode. These complex and highly specialized opcodes exist because the Z-Machine, while it is indeed a Turing-complete, fully programmable anything machine in the abstract, is nevertheless heavily optimized toward the practical needs of text adventures. Thus an object table meant to represent rooms and things in the world of a game is hard-coded right into its memory map, and there are other single opcodes which encapsulate relatively complex tasks like looking up or changing the properties of an object in the world, or moving one object into another object.

Strictly speaking, none of this is really necessary; the Z-Machine is far more complicated than it needs to be in abstract terms. Infocom could have created a robust virtual machine which implemented only traditional low-level opcodes, building everything else out in the form of software libraries running on said virtual machine. But they had a strong motivation for hard-coding so many of the needs of a text adventure right into the virtual hardware: efficiency. A baroque opcode like “read” meant that all of the many steps and stages which went into accepting the player’s command could take place at the interpreter level, running natively on the host computer. Implementing a virtual machine of any sort was a serious challenge on a 1 MHz 8-bit computer like an Apple II or Commodore 64; Infocom needed every advantage they could get.

By the time of Graham Nelson’s experimentation with the Z-Machine, most of the concerns that had led Infocom to design it in this way had already fallen by the wayside. The average computer of the early 1990s would have been perfectly capable of running text adventures through a simpler and more generic virtual machine where the vagaries of the specific application were implemented in software. Nevertheless, the Z-Machine was the technology Graham had inherited and the one he was determined to utilize. When he began to work on Inform, he tailored it to the assumptions and affordances of the Z-Machine. The result was a high-level programming language with an unusual degree of correspondence to its underlying (virtual) hardware. Most obviously, the earliest versions of Inform couldn’t make games whose total compiled size exceeded 128 K, the limit for the version 3 Z-Machine they targeted. (This figure would be raised to 256 K once Inform began to target the version 4 and 5 Z-Machine.)

Yet this limitation was only the tip of the iceberg. Each function in Inform was limited to a maximum of 15 local variables because that was all that the stack mechanism built into the Z-Machine allowed. Meanwhile only 240 global variables could exist because that was the maximum length of the table of same hard-coded into the Z-Machine’s memory map. Much of Inform came to revolve around the Z-Machine’s similarly hard-coded object table, which was limited to just 255 objects in version 3 of the virtual machine. (This limitation was raised to 65,535 objects in the version 4 and 5 Z-Machine, thereby becoming in practice a non-issue.) Further, each object could have just 32 attributes, or states of being — its weight, its open or closed status, its lit or unlit status, etc. — because that was all that was allowed by the Z-Machine’s standard object table. (Starting with version 4 of the Z-Machine, objects could have up to 48 attributes.) All of the dynamic data in a game — i.e., data that could change during play, as opposed to static data like code and text strings — had to fit into the first 64 K of the story file, an artifact of the Z-Machine’s implementation of virtual memory, which had allowed it to pack 128 K or more of game into computers with far less physical memory than that. This limitation too was inherited by Inform despite the fact that by the early 1990s the virtual-memory system had become superfluous, a mere phantom limb which Inform nevertheless had to accept as part of the bargain with the past which it had struck.

Indeed, having been confronted with so many undeniable disadvantages arising from the use of the Z-Machine, it’s natural for us to ask what actual advantages accrued from the use of a fifteen-year-old virtual machine designed around the restrictions of long-obsolete computers, as opposed to taking the TADS route of designing a brand new virtual machine better suited to the modern world. One obvious answer is portability. By the early 1990s, several different open-source Z-Machine interpreters already existed, which between them had already been ported to virtually every computing platform in the world with any active user base at all. Any Inform game that Graham Nelson or anyone else chose to write would become instantly playable on all of these computers, whose combined numbers far exceeded those to which Mike Roberts, working virtually alone on TADS, had so far managed to port his interpreter. (The only really robust platform for running TADS games at the time was MS-DOS; even the Macintosh interpreters were dogged by bugs and infelicities. And as for Graham’s favored platform, the British-to-the-core Acorn Archimedes… forget about it.)

In reality, though, Inform’s use of the Z-Machine appealed at least as much to the emotions as to technical or practical considerations. The idea of writing new games to run on Infocom’s old virtual machine had a romantic and symbolic allure that many found all but irresistible. What better place to build a Renaissance than on the very foundations left behind by the storied ancients? Many or most of the people who came to use Inform did so because they wanted to feel like the heirs to Infocom’s legacy. Poor TADS never had a chance against that appeal to naked sentimentality.

Even as Inform was first gaining traction, it was widely known that Infocom had had a programming language of their own for the Z-Machine, which they had called ZIL: the “Zork Implementation Language.” Yet no one outside of Infocom had ever seen any actual ZIL code. How closely did Inform, a language that, like ZIL, was designed around the affordances and constraints of the Z-Machine, resemble its older sibling? It wasn’t until some years after Inform had kick-started the Interactive Fiction Renaissance that enough ZIL code was recovered to give a reasonable basis for comparison. The answer, we now know, is that Inform resembles ZIL not at all in terms of syntax. Indeed, the two make for a fascinating case study in how different minds, working on the same problem and equipped with pretty much the same set of tools for doing so, can arrive at radically different solutions.

As I described in an article long ago, ZIL was essentially a subset of the general-purpose programming language MDL, which was used heavily during the 1970s by the Dynamic Modeling Group at MIT, the cradle from which Infocom sprang. (MDL was itself a variant of LISP, for many years the language of choice among artificial-intelligence researchers.) A bare-bones implementation of the famous brass lantern in Zork I looked like this in ZIL:

<OBJECT LANTERN 
           (LOC LIVING-ROOM) 
           (SYNONYM LAMP LANTERN LIGHT) 
           (ADJECTIVE BRASS) 
           (DESC "brass lantern") 
           (FLAGS TAKEBIT LIGHTBIT) 
           (ACTION LANTERN-F) 
           (FDESC "A battery-powered lantern is on the trophy 
             case.") 
           (LDESC "There is a brass lantern (battery-powered) 
             here.") 
           (SIZE 15)>


Inform has a fairly idiosyncratic syntax, but most resembles C, a language which was initially most popular among Unix systems programmers, but which was becoming by the early 1990s the language of choice for serious software of many stripes running under many different operating systems. The same lantern would look something like this in a bare-bones Inform implementation:

Object -> lantern "brass lantern"
  with name 'lamp' 'lantern' 'light' 'brass',
    initial
      "A battery-powered lantern is on the trophy case.",
    description
      "There is a brass lantern (battery-powered) here.",
  after [;
    SwitchOn:
      give self light;
      StartDaemon(self);
    SwitchOff:
      give self ~light;
  ],
  size 15,
  has switchable;


After enough information about ZIL finally emerged to allow comparisons like the above, many Infocom zealots couldn’t help but feel a little disappointed about how poorly Infocom’s language actually fared in contrast to Graham Nelson’s. Having been designed when the gospel of object-oriented programming was still in its infancy, ZIL, while remarkable for embracing object-oriented principles to the extent it does, utilizes them in a slightly sketchy way, via pointers to functions which have to be defined elsewhere in the code. (This is the purpose of the “ACTION LANTERN-F” statement in the ZIL code above — to serve as a pointer to the routine that should run when the player tries to light the lantern.) Inform, on the other hand, allows all of the code and data associated with an object such as the brass lantern to be neatly encapsulated into its description. (The “SwitchOn” and “SwitchOff” statements in the Inform excerpt above explain what should happen when the player tries to light or extinguish the lantern.) A complete implementation of the Zork I lantern in Inform would probably fill a dozen or more lines than what we see above, monitoring the charge of the battery, allowing the player to swap in a new battery, etc. — all neatly organized in one chunk of code. In ZIL, it would be scattered all over the place, wired together via a confusing network of pointers. In terms of readability alone, then, Inform excels in comparison to ZIL.

Most shockingly of all given the Infocom principals’ strong grounding in computer science, they never developed a standard library for ZIL — i.e., a standardized body of code to take care of the details that most text adventures have in common, such as rooms and compass directions, inventory and light sources, as well as the vagaries of parsing the player’s commands and keeping score. Instead the author of each new game began by cannibalizing some of the code to do these things from whatever previous game was deemed to be most like this latest one. From there, the author simply improvised. The Inform standard library, by contrast, was full-featured, rigorous, and exacting by the time the language reached maturity — in many ways a more impressive achievement than the actual programming language which undergirded it.

Because it was coded so much more efficiently than Infocom’s ad-hoc efforts, this standard library allowed an Inform game to pack notably more content into a given number of kilobytes. The early versions of Curses, for example, were already sprawling games by most standards, yet fit inside the 128 K Z-Machine. Later versions did move to, and eventually all but fill, the version 5 Z-Machine with its 256 K memory map. Still, the final Curses offers vastly more content than anything Infocom ever released, with the possible exception only of Zork Zero (a game which was itself designed for a version 6 Z-Machine that took the ceiling to 512 K). Certainly any comparison of A Mind Forever Voyaging and Trinity — both famously big games with a story-file size pegged to the version 4 and 5 limit of 256 K — to the final version of Curses — story-file size: 253 K — must reveal the last to be an even more complex, even more expansive experience.

So, the Inform development system could hold its head up proudly next to ZIL; in fact, it was so well-thought-through that ZIL would thoroughly disappoint by comparison once hobbyists finally learned more about it. But what of Curses itself, the game with which Inform was so indelibly linked during the first few years of its existence? Was it also up to the Infocom standard?



Before delving into that question in earnest, I should perhaps elaborate a bit on Graham Nelson’s own description of Curses from the previous article.

In the game, then, you play the role of a rather hapless scion of a faded aristocratic family. Aristocratic life not being what it once was, you’ve long since been forced to register the familial mansion with the National Trust and open it up to visitors on the weekends in order to pay the bills. As the game proper begins, your family is about to take a jaunt to Paris, and you’ve come up to the attic — a place in as shabby a state as the rest of the house — to look for a tourist map you just know is lying around up here somewhere.

It's become a matter of pride now not to give up. That tourist map of Paris must be up here somewhere in all this clutter, even if it has been five years since your last trip. And it's your own fault. It looks as if your great-grandfather was the last person to tidy up these lofts...

Attic
The attics, full of low beams and awkward angles, begin here in a relatively tidy area which extends north, south and east. The wooden floorboards seem fairly sound, just as well considering how heavy all these teachests are. But the old wiring went years ago, and there's no electric light.


A hinged trapdoor in the floor stands open, and light streams in from below.

In the best tradition of shaggy-dog stories, your search for the map turns into an extended adventure through space and time. You just keep finding more and more secret areas and secret things in the attics and the grounds surrounding the house, including a disconcerting number of portals to other times and places. The whole thing eventually comes to revolve around an ancient familial curse reaching back to the time of Stonehenge. If you manage to get to the end of the game — no small feat, believe me! — you can finally lift the curse. And, yes, you can finally find the bloody Paris tourist map.

It’s hard to know where to start or end any discussion of Curses. It’s one of those works that sends one off on many tangents: its technology, its historical importance, its literary worth as a writing exercise or its ludic worth as an exercise in design. Faced with this confusion, we might as well start with what Curses has meant to me.

For Curses is indeed a game which carries a lot of personal importance for me. I first discovered it about four or five years after its original release, when I was working a painfully dull job as a night-shift system administrator — a job which paid not so much for what I did each night as for my just being there if something should go wrong. I had, in other words, copious amounts of free time on my hands. I used some of it playing a bunch of post-Infocom text adventures which I hadn’t previously realized existed. Because they looked — or could be made to look — like just another scrolling terminal window, they suited my purposes perfectly. Thus my memory of many a 1990s classic is bound up with those nights in a deserted data center — with the strange rhythm of being awake when everyone else is asleep, and vice versa.

Of all the games I played during that time, Curses made one of the greatest impressions on me. I was still young enough then to be profoundly impressionable in general, and I found its casual erudition, its willingness to blend science with poetry, mathematics with history, to be absolutely entrancing. Having been a hopeless Anglophile ever since I first heard a Beatles record at circa six years old, I was well-primed to fall in love with Graham Nelson’s dryly ironic and oh-so-English diction. In fact, as I began to write more seriously and extensively myself in the years that followed, I shamelessly co-opted some of his style as my own. I like to think that I’ve become my own writer in the time since that formative period, but some piece of Graham is undoubtedly still hiding out down there somewhere in the mishmash of little ticks and techniques that constitute my writer’s voice.

For all that Curses entranced me, however, I never came close to completing it. At some point I’d get bogged down by its combinatorial explosion of puzzles and places, by its long chains of dependencies where a single missed or misplaced link would lock me out of victory without my realizing it, and I’d drift away to something else. Eventually, I just stopped coming back altogether.

I was therefore curious and maybe even slightly trepiditious to revisit Curses for this article some two decades after I last attempted to play it. How would it hold up? The answer is, better than I feared but somewhat worse than I might have hoped.

The design certainly shows its age. I have less patience than ever today for walking-dead scenarios that are as easy to stumble into as they are here. I wholeheartedly agree with Graham’s own statement that “Curses is by any reasonable standard too hard.”

So far, so expected. But I was somewhat more surprised by my crotchety middle-aged take on the writing. Mind you, some aspects of it still bring a smile to my face; I still can’t resist saying, “It’s a wrench, but I’ll take it,” every time I pick up a wrench in real life, much to my wife’s disgust. (Luckily, as she’d be the first to point out, I’m not much of a handyman, so I don’t tend to pick up too many of them.) In other places, though, what used to strike me as delightful now seems just a little bit too precious for its own good. I can still recognize the influence it had over me and my own writing, but it does feel at times like an influence I’ve ever so slightly outgrown. Today, things like the game’s quotation of the lovely Dorothy Parker poem “Inventory” — “Four be the things I’d been better without: Love, curiosity, freckles, and doubt.” — when you first type the command of the same name can feel just a little bit facile. Curses is constantly making cultural cross-connections like these, but they’re ultimately more clever than they are profound. It’s a game packed with a lot of cultural stuff, but not one with much to really say about any of it. It instead treats its cultural name-dropping as an end unto itself.

Curses strikes me as a young man’s game, in spite of its showy erudition — or perhaps because of it. It was written by a prodigious young man in that wonderful time of life when the whole world of the intellect — all of it — is fresh and new and exciting, when unexpected pathways of intellectual discovery seem to be opening up everywhere one looks. In this light, Emily Short’s description of it as a game about the sheer joy of cultural discovery rings decidedly true. Graham himself recognizes that he could never hope to write a game like it today; thus his wise decision not to return to the well for a sequel.

But to fairly evaluate Curses, we need to understand its place in the timeline of interactive fiction as well as in the life of the man who created it. It’s often billed — not least by myself, in this very article’s introduction — as the game which kicked off the Interactive Fiction Renaissance, the first of a new breed which didn’t have to settle for being the next best thing to more Infocom games. It was the first hobbyist game which could stand proudly shoulder to shoulder with the best works of Infocom in terms of both technical and literary quality.

On the face of it, this is a fair evaluation — which is, after all, the reason I’ve deployed it. Yet the fact remains that Curses‘s mode of production and overall design aesthetic mark it as a distinctly different beast from the best later works of the Renaissance it heralded. While the games of Infocom certainly were an influence on it, they weren’t the only influence. Indeed, their influence was perhaps less marked in reality than one might imagine from the game’s intimate connection to the Z-Machine, or from its borrowing of some fairly superficial aesthetic elements from Infocom, such as the letterboxed literary quotations which were first employed to such good effect by Trinity. While Curses‘s technology and its prose were unquestionably up to the Infocom standard, in spirit it verged on something else entirely.

In the beginning — the very beginning — text adventures were written on big institutional computers by unabashed eggheads for a very small audience of other eggheads. Games of this type were expected to be hard; questions of fairness rarely even entered the conversation. For these games weren’t just designed for single eggheads to play and conquer — they were rather designed for entire teams of same; adventure gaming in these early days was regarded as a group activity. These games were made publicly available while still works-in-progress; their mode of production bore an ironic resemblance to modern attitudes about “software as a service,” as manifested in modern gaming in things like the Steam Early Access program. In fact, these text-adventures-as-a-service tended not to ever really get finished by their designers; they simply stopped growing one day when their designers left the institution where they lived or simply got bored with them. Graham Nelson was exposed to this tradition early on, via his first encounters with the Crowther and Woods Adventure. (Remember his telling reminiscence: “It seemed like something you were exploring, not something you were trying to win.”) When he came to Cambridge in 1987, he was immersed in a sustained late flowering of this design aesthetic, in the form of the text adventures made for the Phoenix mainframe there.

This attitude cut against the one which Infocom had long since come to embrace by the time Graham arrived at Cambridge: the notion that text adventures should be interactive fictions, soluble by any single player of reasonable intelligence in a reasonable amount of time. As the name “interactive fiction” would imply, Infocom adopted a fundamentally literary mode of production: a game was written, went through lots of internal testing to arrive at some consciously complete state, and then and only then was sent out into the world as the final, definitive work. Infocom might release subsequent versions to fix bugs and incongruities that had slipped through testing, just as the text of a book might receive some additional correcting and polishing between print runs, but Infocom’s games were never dramatically expanded or overhauled after their release. Post-Curses, the hobbyist interactive-fiction community would embrace this Infocom model of production almost exclusively. In fact, a game released “before its time,” still riddled with bugs and sketchily written and implemented, would attract the most scathing of rebukes, and could damage the reputation of its author to the point that she would have a hard time getting anyone to even look at a subsequent game.

Yet Curses was anything but an exemplar of this allegedly enlightened interactive-fiction production function. Graham Nelson’s game grew up in public like the institutional games of yore, being expanded and improved in six major stages, with more than two years elapsing from its first release to its last. Betwixt and between them, Graham shared yet more versions on a more private basis, both among his local peer group and among the burgeoning community of Curses superfans on the Internet. As each new version appeared, these armies of players would jump into it to find the new puzzles and give their feedback on what else might be added to or improved, just as an army of MIT students once did every time the people who would eventually found Infocom put up a new build of the PDP-10 Zork. There are, for example, seven separate ways to solve an early puzzle involving the opening of a stubborn medicine bottle in the final version of Curses, most of them the result of player suggestions.

So, Curses should be understood as an ongoing creative effort — almost, one might say, a collaboration between Graham Nelson and his players — that grew as big as it could and then stopped. A scrupulous commitment to fairness just wasn’t ever in the cards, any more than a rigorously pre-planned plot line. In a telling anecdote, Graham once let slip that he was surprised how many people had finished Curses at all over the years. It was designed, like his beloved Crowther and Woods Adventure, to be a place which you came back to again and again, exploring new nooks and crannies as the fancy took you. If you actually wanted to solve the thing… well, you’d probably need to get yourself a group for that. Even the hint system, grudgingly added in one of the later versions, is oblique; many of the hints come from a devil who tells you the exact opposite of what you ought to be doing. And all of the hints are obscure, and you’re only allowed three of them in any given session.

All of which is to say that, even as it heralded a new era in interactive fiction which would prove every bit as exciting as what had come before, Curses became the last great public world implemented as a single-player text adventure. It’s an archetypal Renaissance work, perched happily on the crossroads between past and future. Its shared debt to the institutional tradition that had stamped so much of interactive fiction’s past and to the Infocom approach that would dictate its future is made most explicit in the name of the language which Graham developed alongside the game. As he told us in the previous article in this series, the first syllable of “Inform” does indeed refer to Infocom, but the second syllable reflects the habit among users of the Cambridge Phoenix mainframe of appending the suffix “-form” to the name of any compiler.

Speaking of Inform: Curses also needs to be understood in light of its most obvious practical purpose at the time of its creation. Most new text-adventure creation systems, reaching all the way back to the time of Scott Adams, have been developed alongside the first game to be written using them. As we’ve seen at some length now in this article and the previous one, Inform was no exception. As Graham would add new features to his language, he would finds ways to utilize them in Curses in order to test them out for himself and demonstrate them to the public. So, just as Inform reflects the Z-Machine’s core capabilities, Curses reflects Inform’s — all of them. And because Inform was designed to be a powerful, complete system capable of producing games equal in technical quality to those of Infocom or anyone else, the puzzles which found their way into Curses became dizzying in their sheer multifariousness. Anything ZIL could do, Graham was not so subtly implying, Inform could do as well or better.

Here, then, the Infocom influence on Curses is much more pronounced. You can almost go through the Infocom catalog game by game, looking at the unique new interactive possibilities each release implemented and then finding a demonstration somewhere in Curses of Inform’s ability to do the same thing. Zork II introduced a robot to which the player’s avatar could issue verbal commands, so Curses does the same thing with a robot mouse; Enchanter had an underground maze whose interconnections the player could alter dynamically, so Curses has a hedge maze which let its player do the same thing; Infidel drew hieroglyphic symbols on the screen using groups of ASCII characters, so Curses has to demonstrate the same capability; etc., etc. (One of the few Infocom affordances that doesn’t show up anywhere in Curses is a detailed spell-casting system, the linchpin of the beloved Enchanter trilogy — but never fear, Graham wrote an entirely separate game just to demonstrate Inform’s capabilities in that area.) If all this doesn’t always do much for the game’s internal coherence, so be it: there were other motivations at work.



Graham Nelson’s own story of the first release of Curses is stamped with the unassuming personality of the man. On May 9, 1993, he uploaded it to an FTP site connected with the Gesellschaft für Mathematik und Datenverarbeitung — a research institute in Bonn, Germany, where a friendly system administrator named Volker Blasius had started an archive for all things interactive fiction. He then wrote up a modest announcement, and posted it to the Usenet newsgroup rec.arts.int-fiction — a group originally set up by stuffy academic hypertext enthusiasts of the Eastgate stripe, which had since been rudely invaded and repurposed by unwashed masses of text-adventure enthusiasts. After doing these things, Graham heard…nothing. Feeling a little disappointed, but realizing that he had after all written a game in a genre whose best days seemed to be behind it, he went about his business — only to discover some days later that his incoming Usenet feed was bollixed. When he got it fixed, he found that his little game had in fact prompted a deluge of excitement. No one had ever seen anything like it. Just where had this mysterious new game that somehow ran on Infocom’s own Z-Machine come from? And where on earth had its equally mysterious author gone to after releasing it?

It really is hard to overstate the impact which Curses, and shortly after it Inform, had on the interactive-fiction community of 1993. Text adventures at that time were largely an exercise in nostalgia; even all of the work that had been done to understand the Z-Machine and make new interpreters for it, which had been such a necessary prerequisite for Graham’s own work, had been done strictly to let people play the old games. While some people were still making new games, none of them could comprehensively stand up next to Infocom at their best. Yes, some of them evinced considerable creativity, even a degree of real literary ambition, but these were held back by the limitations of AGT, the most popular text-adventure development system at the time. Meanwhile Adventions, the makers of the most polished games of this period, who were wise enough to use the technically excellent TADS rather than the more ramshackle AGT, were more competent than inspired in churning out slavish homages to Zork. All of the absolute best text adventures, the ones which combined literary excellence and technical quality, were still those of Infocom, and were all more than half a decade old.

And then along came Curses as a bolt out of the blue. Even if we wish to argue that some aspects of it haven’t aged terribly well, we cannot deny how amazing it was in 1993, with its robust determination to do everything Infocom had done and more, with its distinct and confident literary sensibility, and not least — the appeal this held really cannot be emphasized enough — the fact that it ran on Infocom’s own virtual machine. It dominated all online discussion of text adventures throughout the two years Graham spent continuing to improve and expand it in public. The gravitational pull of Curses was such that when Mike Roberts, the creator of TADS, released an epic of his own later in 1993, it went oddly unremarked — this despite the fact that Perdition’s Flames was progressive in many ways that Curses distinctly wasn’t, making it impossible to lock yourself out of victory, prioritizing fairness above all other considerations. It stands today as the better game in mechanical terms at least, recommendable without the caveats that must accompany Graham’s effort. Yet it never stood a chance in 1993 against the allure of Curses.

And so it was that the quiet, thoughtful Englishman Graham Nelson — hardly the most likely leader of a cultural movement — used Curses and Inform to sculpt a new community of creation in his own image.

Graham’s technological choices became the community’s standards to a well-nigh shocking extent. The version 5 Z-Machine, the last and most advanced of its text-only iterations to come out of Infocom, had only been used by a few late Infocom games, none of them hugely beloved. Thus its implementation had tended to be a somewhat low priority among interpreter writers. But when Curses outgrew the 128 K memory space of the version 3 Z-Machine fairly early in its release cycle, and Graham stepped up to the 256 K version 5 Z-Machine, that decision drove interpreter writers to add support for it; after all, any Z-Machine interpreter worth its salt simply had to be able to play Curses, the sensation of the text-adventure world. Thus the version 5 Z-Machine became the new standard for the hobbyist games that followed, thanks not only to its expanded memory space but also to its more advanced typography and presentation options. (Graham would later define two new versions of the Z-Machine for really big games: an experimental and seldom-used version 7 and a version 8 which did come into common use. Both would allow story files of up to 512 K, just like Infocom’s graphical version 6 Z-Machine.)

Graham was utterly disinterested in making money from his projects. He made Inform entirely free, destroying the shareware model of AGT and TADS. David Malmberg, the longtime steward of AGT, stepped down from that role and released that system as well as freeware in 1994, signalling the end of its active development. Mike Roberts did continue to maintain and improve TADS, but soon bowed to the new world order ushered in by Inform and made it free as well. Not coincidentally, the end of the era of shareware text adventures as well as shareware text-adventure development systems coincided with Graham’s arrival on the scene; from now on, people would almost universally release their games for free. It’s also of more than symbolic significance that, unlike earlier hotbeds of text-adventure fandom which had coalesced around private commercial online services such as CompuServe and GEnie, this latest and most enduring community found its home on the free-and-open Internet.

It’s important to note that Graham’s disinterest in making money in no way implied a lack of seriousness. He approached everything he did in interactive fiction with the attitude that it was worth doing, and worth doing well. In the long run, his careful attention to detail and belief in the medium as something worthy of serious effort and serious study left as pronounced a stamp on the culture of interactive fiction as Inform or Curses themselves.

In 1995, he produced “The Z-Machine Standards Document,” which replaced years of speculation, experimentation, and received hacker wisdom with a codified specification for all extant versions of the Z-Machine. At the same time that he worked on that project, he embarked on The Inform Designer’s Manual, which not only explained the nuts and bolts of coding in the language but also delved deep into questions of design. “The Craft of Adventure,” its included essay on the subject, remains to this day the classic work of its type. Working with what was by now an enthusiastic hobbyist community which tempered its nostalgia for the medium’s commercial past with a belief in its possibilities for the present and future, Graham even saw The Inform Designer’s Manual — all 500-plus pages of it — printed as a physical book, at a time when self-publishing was a much more fraught endeavor than it is today.

But the most amusing tribute to the man’s sheer, well-earned ubiquity may be the way that his personality kept peeking through the cracks of every game made with Inform, unless its author went to truly heroic lengths to prevent it. His wryly ironic standard responses to various commands, as coded into the Inform standard library — “As good-looking as ever” when you examined yourself; “Violence isn’t the answer to this one” when you gave in to frustration and started trying to beat on something; “You are always self-possessed” when you attempted to take yourself — proved damnably difficult to comprehensively stamp out. Thus you’d see such distinctly non-Nelsonian efforts as zombie apocalypses or hardcore erotica suddenly lapsing from time to time into the persona of the bemused Oxford don wandering about behind the scenes, wondering what the heck he’d gotten himself into this time.



Seen with the hindsight of the historian, the necessary prerequisites to an Interactive Fiction Renaissance aren’t hard to identify. The Internet gave text-adventure fans a place to gather and discuss the games of the past, as well as to distribute new ones, all unbeholden to any commercial entity. Free Z-Machine interpreters made it easy to play Infocom’s games, widely recognized as the best of their type ever made, in convenient ways on virtually every computer in existence. Activision’s two Lost Treasures of Infocom collections made the complete Infocom canon easy to acquire, placing all text-adventure fans on an even footing in the course of providing them with their equivalent of The Complete Works of William Shakespeare. And then Graham Nelson came along and gave so much: a superb programming language in Inform, a superb demonstration of where interactive fiction could go in the post-Infocom era in Curses, documentation that exceeded the standard of most professional efforts, and, perhaps most of all, a living example of how interactive fiction was worth taking seriously in all its aspects, worth doing completely and well — and forget worrying about making money out of it. So, my next statement is as cringe-worthy as it is inevitable: Graham Nelson became interactive fiction’s Renaissance Man.

Now, it was just a matter of time before all of these forces forged something rather extraordinary. The year after Graham arrived on the scene in such exciting fashion was actually one of the quietest in the history of text adventures in terms of new releases; AGT was dying, while Inform was just beginning to pick up steam as an entity separate from Curses. But the following year, 1995, would see an embarrassment of worthy releases, large and small, trying all sorts of things, even as the cultural capstone to the new edifice of post-Infocom interactive fiction — an annual Interactive Fiction Competition — arrived to complete the construction process. The events of 1993 had been the harbinger; 1995 would become the true Year One of the Interactive Fiction Renaissance.

(Sources: the book The Inform Designer’s Manual by Graham Nelson; Stephen Granade’s timeline of interactive fiction on Brass Lantern; archives of rec.arts.int-fiction and rec.games.int-fiction, available on the IF Archive. My warmest thanks go once again to Graham Nelson for sharing so much of his story for these articles.

Curses remains available for free. It can of course be played on any Z-Machine interpreter.)

 
46 Comments

Posted by on November 22, 2019 in Digital Antiquaria, Interactive Fiction

 

Tags: , , ,

New Tricks for an Old Z-Machine, Part 2: Hacking Deeper (or, Follies of Graham Nelson’s Youth)

Earlier this year, I reached out to Graham Nelson, the most important single technical architect of interactive fiction’s last three decades, to open a dialog about his early life and work. I was rewarded with a rich and enjoyable correspondence. But when the time came to write this article based on it, I found myself on the horns of a dilemma. The problem was not, as it too often is, that I lacked for material to flesh out his personal story. It was rather that Graham had told his own story so well that I didn’t know what I could possibly add to it. I saw little point in paraphrasing what Graham wrote in my own words, trampling all over his spry English irony with my clumsy Americanisms. In the end, I decided not to try.

So, today I present to you Graham Nelson’s story, told as only he can tell it. It’s a rare treat given that Graham is, like so many people of real accomplishment, usually reluctant to speak at any length about himself. I’ll just offer a couple of contextual notes before he begins. The “Inform” to which Graham eventually refers is a specialized text-adventure programming language by that name targeting the Z-Machine (and much later a newer virtual machine known as Glulx which has finally come to supersede Infocom’s venerable creation); Inform has been the most popular tool of its type through the last quarter-century. And Curses is the first full-fledged game ever written with Inform, a puzzly yet eminently literary time-traveling epic which took the huddled, beleaguered text-adventure diehards by storm upon its release in 1993, giving them new hope for their beloved form’s future and inspiring many of them to think of making their own games — using Inform more often than not. In the third and final article of this series on the roots of the Interactive Fiction Renaissance, I’ll examine both of these seminal artifacts in depth with the detachment of a third party, trying to place them in their proper historical context for you. For today, though, I give you Graham Nelson unfiltered to tell you his story of how they — and he — came to be…


Great Baddow, the quiet Essex village where Graham Nelson grew up.

I was born in 1968, so I’m coeval with The White Album and Apollo 8. I was born in Chelmsford, in Essex, and grew up mainly in Great Baddow, a quiet suburban village. There were arable farms on one side, where in those days the stubble of the wheat would still be burned off once a year. (In fact, I see that the Wikipedia page for “stubble burning” features a photo from the flat countryside of Essex, taken in 1986. The practice is banned now.) My street, Hollywood Close, had been built in the early 1960s on what used to be Rothman’s Farm. The last trees were still being cut down when I was young, though that was mainly because of Dutch Elm Disease. The houses having been sold all at once, to young families of a similar age, my street was full of seven-year olds when I was seven, and full of fifteen-year olds when I was fifteen. I went to local schools, never more than walking distance away. My primary school, Rothman’s Junior, was built on another field of the same farm, in fact.

My father Peter was an electronics engineer at English Electric Valve. My mother Christine — always “Chris” — was a clerical civil servant before she had me, at the National Assistance Board, which we would call social security today. In those days, women left work when they had a child, which is exactly what she did when she had me and my brother. But later on she trained as a personal assistant, learning Pitman shorthand, which I never picked up, and also typing, which I sort of did: I am a two-fingered typist to this day, but unusually fast at it. I did try the proper technique, but on our home typewriter, my little finger just wasn’t strong enough to strike an “A”. Or perhaps I saw no reason to learn how other people did things.

My parents had met in school in Gosport, a naval village opposite Portsmouth, on the south coast of England. As a result, both sides of my family were in the same town; indeed, we were the eccentric ones, having moved away to Essex. My many aunts, uncles, second cousins, and so on were almost all still in Portsmouth, and we would stay there for every holiday or school break. In effect, it was a second home. Though I didn’t know him for long, a formative influence was my mother’s father Albert, a navy regular who became a postman in civilian life. He was ship’s cook on HMS Belfast during the Second World War; my one successful poem (in the sense of being reprinted, which is the acid test for poems) is in his memory.

None of these people had any higher education at all. I would be the first to go to a university, though my father did the correspondence-course Open University degree in the 1970s, and my mother went to any number of evening classes. (She ended up with a ridiculous number of O-levels, rather the way that some Scouts go on collecting badges until their arms are completely covered.) They both came from genuinely poor backgrounds, where you grew a lot of your own food, and had to make and mend. You didn’t buy books, you borrowed them from the library — though my grandmother did have the Pears Cyclopaedia for 1938 and a dictionary for crosswords. But I didn’t grow up in any way that could be called deprived. My father made a solid middle-class income at a time when that could keep a family of four in a house of their own and run a car. He wasn’t a top-bracket professional, able to sign passport applications as a character reference, like a doctor or a lawyer, but he was definitely white-collar staff, not blue-collar. Yes, he worked in a factory, but in the R&D lab at one end. This is not a Bruce Springsteen song. He would not have known what to do with a six pack of beer.

My brother Toby, who later became a professional computer programmer working at Electronic Arts and other places, was two years younger than me, which meant he passed through school with teachers expecting him to be like me, which he both is and isn’t. He’s my only sibling, though I now also have a brother-in-law and sister-in-law. “Graham” and “Toby” are both definitely unusual names in England in our generation, which is the sort of thing that annoys you as a child, but is then usefully distinctive in later life. At least “Graham” is unabbreviable, for which I have always been grateful.

The local education authority would have expected me to pass the eleven-plus exam, and move up the social ladder to King Edward VI Grammar School, the best in the area by far. But my parents, who believed in universal education, chose not to enter me. So at eleven and a half, I began at Great Baddow Comprehensive School. I didn’t regret this then, and don’t now. I had some fine teachers, and though I was an oddity there, I would have been an oddity anywhere. Besides, I had plenty of friends; it wasn’t the social snake-pit which American high schools always seem to be on television.

Until around 1980, there were no commercial home computers in the UK, which was consistently a couple of years behind the United States in that respect. But my father Peter was also an electronics hobbyist. Practical Electronics magazine tended to be around the house, and even American magazines like Byte, on occasion; I had a copy of the legendary Smalltalk number of Byte, with its famous hot-air-balloon cover. But the gap between these magazines — and the book in my school library about Unix — and reality was enormous. All we had in the house was a breadboard and some TTL chips. Remarkably, my father nevertheless built a computer the size of a typewriter. It had no persistent storage; you had to key in opcodes in hex with a numeric keypad. But it worked. It was a mechanism with no moving parts. It’s hard to explain now how almost alchemical that seemed. He would give a little my-team-has-won-again cheer from his armchair whenever the BBC show Tomorrow’s World used the words “integrated circuits”. (I think this was a little before the term “microchips” came into common usage, or possibly the BBC simply thought it a vulgar colloquialism. They were more old-school back then.)

Until I was twelve years old, then, computing was something done on mainframes – or at any rate “minis” like the DEC VAX, running payroll for medium-sized companies. Schools never had these, or anything else for that matter. In the ordinary way of things, I would never have seen or touched a real computer. But I did, on just a few tantalising occasions.

Great Baddow was not really a tech town, but it was where Marconi had set up, and so there were avionics businesses, such as the one my father worked for, English Electric Valve. Because of that, a rising industry figure named Ian Young lived in our street. His two boys were just about the same age as me and my brother, and he and his wife Gill were good friends of my parents — I caught up with them at my parents’ sixtieth wedding anniversary only a few weeks ago. Ian soon relocated to Reading as an executive climbing the ranks of Digital Equipment Corporation, then the world’s number two computer company after IBM, but our families kept in touch. A couple of times each year my brother and I would go off to spend a week with the Youngs during the school holidays. This is beginning to sound like a Narnia book, and in a way it was a little like that. Ian would sportingly take us four boys to DEC’s headquarters — in particular, to the darkened rooms where the programmers worked, in an industrial space shared with a biscuit factory. (Another fun thing about the Youngs was that they always had plenty of chocolate-coated Club biscuits from factory surplus.) We would sit at a VT-220 terminal with a fluorescent green screen and play the DECUS user group’s collection of games for the VAX. These were entirely textual, though a few, like chess or Star Trek, rendered a board using ASCII art. Most of these games were flimsy nothings: a boxing simulator, I remember, a Towers of Hanoi demo, and so on. But the exception was Crowther and Woods’s Adventure, which I played less than a year after Don Woods’s canonical first version was circulated by DECUS. Adventure was like nothing else, and had a depth and an ability to entrance which is hard to overstate. There was no such thing as saving the game — or if there was, we didn’t know about it. We simply remembered that you had to unlock the grating, and that the rusty iron rod would… and so on. Our sessions almost invariably ended in one of the two unforgiving mazes. But that was somehow not an unsatisfying thing. It seemed like something you were exploring, not something you were trying to win.

It was, of course, maddening to be hooked on a game you could play perhaps once every six months. I got my first actual computer in 1980, for my twelfth birthday: an Acorn Atom. I had the circuit diagram on my wall; it was the first and last computer I’ve ever owned which I understood the physical workings of. My father assembled it from the kit form. This was £50 cheaper — not a trivial sum in those days — and was also rather satisfying for him, both because it was a lovely bit of craftsmanship to put together (involving two weekends of non-stop soldering), and also because he was never such a hero to his son as when we finally plugged it in and it worked flawlessly. Curious how much of this story appears to be about fathers and sons…

At any rate, I began thinking about implementing “adventures” very early on. This was close to impossible on a computer with 12 K of RAM (and even that only after I slowly expanded it, buying 0.5 K memory chips one at a time from a local hardware store). And yet… I can still remember the epiphany when I realised that you could model the location of an object by storing this in a byte which was either a room number or a special value to mean “being carried”. I think the most feasible creation I came up with was a procedurally-generated game on a squared grid, ten rooms wide by infinity rooms long, where certain rooms were overridden with names and puzzles. It had no title, but was known in my family as “the adventure of Igneous the Dwarf”, after its only real character. My first published game was an imitation of the arcade game Frogger for the Acorn Atom. I made something like £70 in royalties from it, but it really had no interactive-fiction content of any kind.

My first experience of commercial interactive fiction came for the BBC Micro, the big brother of the Acorn Atom; my father being my big brother in this instance, since he bought one in 1981. The Scott Adams line made it onto the BBC Micro, and so did ports of the Cambridge mainframe games, marketed first by Acornsoft and then by Topologika. I thus played some of the canonical Cambridge games quite a while before going to Cambridge. (Cambridge was then the lodestone of the UK computing industry; things like the BBC Micro and the ARM chip are easily overlooked in Cambridge’s history, given the university’s work with gravity, evolution, the electron, etc., but this was not a small deal at the time.) In particular, the most ambitious of the Cambridge games, Acheton, came out from Acornsoft on a disk release, and I played it. This was an extraordinary thing; in the United Kingdom, few computer owners had disk drives, and no more than a handful of BBC Micro games were ever released in that format.

I made something fractionally like a graphical adventure, called Crystal Castle, for the BBC Micro. (In 2000, Toby helpfully, if that’s the word, found the last existing cassette tape of this, digitised it to a WAV file, signal-processed the result, and ended up with about 22 K of program and data. To our astonishment, it ran.) It was written in binary machine code, which thus had no source code. Crystal Castle was nearly published, but the deal ultimately fell through. Superior Software, then the best marque for BBC Micro stuff, exchanged friendly letters with me, and for a while it really did look like it would happen. But I really needed an artist, and a bit more design skill. So, they passed. I imagine they had quite a large slush pile of games on cassette sent in by aspiring coders back then. You should not think of me as a teenage entrepreneur; I was mostly unsuccessful.

I did get two BBC Micro games published in 1984 by a cottage-industry sort of software house somewhere in Essex, run by a local teacher. Anybody who could arrange to duplicate cassette tapes and print inlay cards could be a “software house” in those days, and quite a lot of firms with improvised names (“Aardvark Software”, etc.) were actually people running a mail-order business out of their front rooms. They sold my two games as one, in that they were side A and side B of the same cassette. The games had the somewhat Asimovian names Galaxy’s Edge and Escape from Solaris. I honestly remember little about them, except that Escape from Solaris was a two-handed game. To play, you had to connect two BBC Micros back-to-back with an RS-423 cable, and then you had to type alternate commands. One program would stall while the other was active, but the thing worked. I cannot imagine that these games were any good, but the milieu was that of alien science being indistinguishable from magic. The role-playing game Traveller may have been an influence, I suppose, but my local library had also stocked a great deal of golden-age science fiction, and I had read every last dreg of it. (I hadn’t, at that time, played Starcross, though I’d probably seen Level 9’s Snowball.) I do not still have copies, and I am therefore spared the moral dilemma of whether I should make them publicly available. I did get a piece of fan mail, I remember, by someone who asked if I was a chemist. From this memory, I infer that there were some science-based puzzles.

The Quill-written games weren’t any influence on me, nor really the Magnetic Scrolls ones. The Quill was a ZX Spectrum phenomenon — and the Spectrum came from Acorn’s arch-enemy Sinclair. I think my father regarded it as unsound. It certainly did not have a keyboard designed to the requirement that it survive having a cup of coffee poured through it, as the BBC Micro did. But it did have an enormous amount of RAM — or rather, it didn’t consume all of that precious RAM on screen memory. The way that it avoided this was a distasteful hack, but also a stroke of genius, making the Spectrum a perfect games machine. As a result, those of my friends whose fathers knew anything about computers had BBC Micros, and the rest had Spectrums. It is somehow very English of us to have invented a new class distinction in the 1980s, but I rather think we did. Magnetic Scrolls were a different case, since they were adopting an Infocom-like strategy of releasing for multiple platforms, but they came along later, and always seemed to me to be more style than substance. The Pawn was heavily promoted, but I didn’t care for it.

I really must mention Level 9, though. They wrote 200-room cave adventures – albeit sometimes the cave was a starship – and by dint of some ingenious compression were able to get them out on tape. In particular, I played through to completion all three of the original Level 9 fantasy trilogy: the first being an extended version of the Crowther and Woods Adventure, the second and third being new but in the same style. I still think these good, in some relative sense. Level 9’s version of the Crowther and Woods Adventure, Colossal Adventure, was the first version which I fully explored, so that it still half seems to me like the definitive version. Ironically, none of Level 9’s games had levels in the normal gaming sense.

I didn’t play any of Infocom’s games until, I think, 1987. I bought a handful, one at a time, from Harrod’s in Knightsbridge — a department store for the rich and, it would like to imagine, the socially elite. I was neither of those things, but I knew what I wanted. Infocom’s wares were luxury goods, and luxury goods tend to stay on the shelves until they sell. Harrod’s had a modest stock, which almost nobody else in the UK did, though you could find a handful of early Infocom titles such as Suspended for the Commodore 64 if you trawled the more plebeian electronics shops of Tottenham Court Road. The ones I bought were CP/M editions of some of the classic titles of 1983 to 1985: Enchanter, I remember, being the first. These we were able to run on my brother’s computer, which was an Amstrad, a British machine built for word processing, but which — thanks to the cheapness of Alan Sugar, Amstrad’s proprietor, a sort of British version of Commodore’s Jack Tramiel — ran CP/M rather than MS-DOS.

That was just after I had begun as an undergraduate at Cambridge and joined the mainframe there, Phoenix, as a user. Each user had an allocation of “shares”, which governed how much computing time you could have. As the newest kid to arrive, I had ten shares. There were legends of a man in computational chemistry, modelling the Schrödinger equation for polythene, who had something like 10,000. At any rate, ten shares was only just enough to read your email in daytime. To run anything like Dungeon, the IBM port of Zork, you had to sit up at night — which we did, a little. I think Dungeon was the only externally-written game playable on Phoenix; the others were all homegrown, using TSAL, the game assembler written by David Seal and Jonathan Thackray. As I wrote long ago, to me and others who played them those games “are as redolent of late nights in the User Area as the soapy taste of Nestlé’s vending-machine chocolate or floppy, rapidly-yellowing line printer paper.” As I noted earlier, most of them ultimately migrated to Acornsoft and Topologika releases.

But there were other social aspects to Phoenix as well. There was a rudimentary bulletin board called GROGGS (the “General Reverse-Ordered Gossip-Gathering System”) and it was tacitly encouraged by the Phoenix administrators because it stopped people abusing the Suggest program as a noticeboard. (We did not then have access to Usenet.) GROGGS was unusually egalitarian — students and faculty somewhat mingled, which was not typical of Cambridge then. Its undoubted king was Jonathan Partington (JRP1), a young professor who had a generous, playful wit. The Phoenix administrators dreaded his parodies of their official announcements. In his presence, GROGGS was a little like the salon in which the hangers-on of Oscar Wilde would attempt to keep up. Numerous people had a schtick; mine was to mutate my user-name to some version of the Prufrockian “I am not Prince Hamlet”. Commenting on the new Dire Straits album, I would post as “I am not Mark Knopfler”. That sort of thing. Jonathan wrote some of the Cambridge mainframe games. He taught me for a few second-year options.

There was also a form of direct messaging, the “notify” command, and you had the ability to link your filespace to somebody else’s, in effect giving them shared access. At some point Mark Owen and Matthew Richards, inseparable friends at Trinity College, observed that these links turned the users of Phoenix into a directed graph — what we would now call a social network. Mark and Matthew converted the whole mainframe into a sort of adventure game on this basis, in which user filespaces were the rooms, and links were map connections between them. You could store a little text file in your filespace as your own room description. Mark and Matthew’s system was called MEGA, a name chosen as an anagram of GAME. Mark went on to take a PhD in neural networks, back in the days when they didn’t work and were considered a dead end; he eventually wrote a book on signal processing. Matthew, a gifted algebraist and one of the nicest people I have ever known, died of Hodgkin’s disease only a couple of years into his own PhD — the first shock of death close up that most of us had known. The doctors tried everything to keep him alive. There’s no length they won’t go to with a young, strong patient, however cruel.

At any rate, back in the days of MEGA, it occurred to me that more could be done. Rather than storing just a single room description, each user could store a larger blob of content, and we would then have a form of MUD. This system, jointly coded by myself and a CS student called John Croft, was called TERA (I forget why we didn’t go up from MEGA to GIGA — perhaps there already was one?) and its compiler was “teraform”. This is the origin of the “-form” suffix in Inform’s name.

Cambridge mathematics degrees were in four parts: IA, IB, II, and III. Part III was an optional fourth year, which now earns you a master’s, but which for arcane funding reasons didn’t in my day. The Part III people were the aspiring professionals, hoping for a PhD grant at the end of it. Only seven or eight were available, which lent a competitive edge to a social group which was all too competitive already. I was thoroughly settled in Cambridge, living in an old Victorian house off Trumpington Street with four close friends, down by the river meadows. It was a very happy time in my life, and I had absolutely no intention of giving it up. As a geometer, I was hoping to be a research student of Frank Adams, a legendary topologist but a man with an awkward, stand-offish character. I’m now rather glad that this didn’t happen, though I’m sorry about the reason, which was that he died in a car crash. The only possible alternative, the affable Ray Lickorish, was just going on sabbatical. And so I found myself obliged to apply to Oxford instead. I was very fortunate to become the student of Simon Donaldson, only the fifth British mathematician to win the Fields Medal. (He is warmly remembered at St Anne’s College, where I now am, not for the Fields, or the Crafoord Prize, or for being knighted, or winning a $3 million award — not for any of that, but for having been a good Nursery Fellow, looking after the college crèche.) Having opened up a new and, almost at once, a rapidly-moving field of study, Simon was over-extended with collaborators, and I wasn’t often a good use of his time. Picture me as one of those plodding Viennese students Beethoven was obliged to give piano lessons to. But it was a privilege even to be present at an important moment in the history of modern geometry, and in his quietly kind way, Simon was an inspirational leader.

So, although I did find myself a doctoral perch, I had time on my hands — not work time, as I had plenty to do on that front, but social time, since everyone I knew was back in Cambridge. I read a great many books, buying up remaindered Faber literary paperbacks from the Henry Pordes bookshop in Charing Cross Road, London, whenever I was passing through. The plays of Tom Stoppard, Alan Bennett, David Hare; the poems of Philip Larkin, Seamus Heaney, Auden, Eliot, and so forth. I wrote a novel, which had to do with two people who worked in a research lab doing unethical things attempting to control chimpanzees. He took the work at face value, she didn’t, or perhaps it was the other way around. By the time I finished, I knew enough to know that it wasn’t any good, but in so far as you become a writer simply by writing, I had become a writer. I then wrote four short stories, and a one-act play called A Church by Daylight (a title which is a tag borrowed from Much Ado About Nothing). This play was thin on plot but had to do with loss. I wasn’t much good at dialogue, and in some way I boiled the play down to its essence, which was eventually published as a twelve-line poem called “Requiem”.

It was during my second year as a DPhil student that The Lost Treasures of Infocom came out. At this time my computer was an Acorn Archimedes with a 20 MB hard drive. I bought the MS-DOS box because I could read the story files from the MS-DOS disks, even if I couldn’t run the MS-DOS interpreter. I had no modem or network access from my house, and could only get files on or off by taking a floppy disk to the computing-service building right across town. I used the InfoTaskforce interpreter to actually play the games on my Archimedes.

So, I would say that the existence of a community-written interpreter was an essential precondition for Inform. In the period from 1990 to 1992, there were two significant Infocom-archaeology projects going on independently, though they were certainly aware of each other: the InfoTaskforce interpreter, and a disassembler called “txd” by Mark Howell. The InfoTaskforce people were based in Australia, and I had no contact with them, but I saw their code. Mark, however, I did exchange emails with. I remember emailing him to ask if anyone had written an assembler to make new games for the Z-Machine, and he replied with some wording close to: “Many people have had many dreams”. I set myself the task of faking a story file just well enough to allow it to execute on the InfoTaskforce interpreter.

I recall that my first self-made story file computed a prime factorisation and then printed the result. Except that it didn’t. I would double-click on the story file, and nothing would happen. I would assume that this was because there was some further table in the story file which I needed to fake: that the interpreter was refusing my file because it lacked this table, let’s say. As a result, I got into a cycle of making more and more elaborate fakes, always with negative results. Eventually I found that these faux story files had been correct all along; it was just that the user interface for the Acorn Archimedes port of the InfoTaskforce interpreter displayed nothing onscreen until the first moment when a game’s output hit the bottom of its virtual display and caused a scroll event. My story files, uniquely in the history of the Z-Machine, simply printed a few lines and then quit. They didn’t produce enough output to scroll, so nothing ever showed up onscreen. (This is why, for several years, the first thing that an Inform-written game did was to print a run of newlines.) So, when I finally managed to make a story file which factorised the numbers 2 to 100, and found that it worked correctly, I had a fairly elaborate assembler. This was called “zass”, and eventually became Inform 1.

The project might have gone no further except for the arrival of Usenet and the rec.arts.int-fiction newsgroup. Suddenly my email address was one which people could contact, and my posts were replied to. I was no longer on GROGGS, talking to a handful of people I knew in real life; I was on Usenet, talking to those I would likely never meet. People didn’t really use Inform much until around Inform 3, but still, there was feedback. An appetite seemed to exist.

A curious echo of the fascination the Z-machine held is that a couple of tiny story files produced by me in the course of these experiments — I remember one with two rooms in it and a few sample objects, one of them a football — themselves started to be collected by people. Of course there were soon to be lots of story files, an unending supply of them. But for just a brief period, even the output of Inform had a sort of second-hand glory reflected onto it.

Inform 1 was the result of my experiments to synthesise a story file, so it preceded Curses; it’s not that I set out to create both. Still, I did once write that Inform and Curses were Siamese twins, though the expression makes me flinch now. It’s not a comedic thing to be born conjoined. That aside, was it true, or did it simply sound clever? It’s true in part. I steadily improved Inform as I was building up Curses in size, and Curses undeniably played a role as a proof of concept. Numerous half-finished interactive-fiction systems had been abandoned with no notable games to their credit, but TADS, especially, shone by having been used for full-scale works. Yet this linkage is only part of the story.

In retrospect, the decision to write Curses fits with the pattern of imitation which you tend to find in the juvenilia of writers. I had read some novels, I wrote a novel; I had read some plays, I wrote a play; and so on. Lost Treasures may have played the same role for me, in computer-game terms, that those 1980s Faber & Faber paperbacks played in literary terms. But I also wrote Curses as an entertainment for my friends back in Cambridge, who attacked it without mercy. A very early version caused hilarity not so much for its intrinsic qualities as because the command “unlock fish” crashed it right out.

The title alludes to the recurring ancestral curses of the Meldrew family, each generation doomed never quite to achieve anything. (Read into that what you will, but it caused my father to raise an amused eyebrow.) The name was actually a hindrance for a while. In the days of Archie and Veronica and other pre-Web systems for searching FTP sites, “curses” was a name already taken by the software library for text windows on Unix.

What is Curses about? A few years ago Emily Short and I were interviewed, one after another, at the Seattle Museum of Pop Culture. Emily described Curses as being about the richness of culture and the excitement of discovering it. This may be an overly generous verdict, but I see what she means. Curses has a kind of exuberance to it. The ferment of what I was reading infuses the game, and although most people saw it as a faithful homage to Infocom, it was also a work of Modernism, assembled from the juxtaposed fragments of other texts. At Meldrew Hall, I could connect everything with everything.

There were four main strands here. Most apparent is the many-volume Oxford History of England, an old-school reference work, which lined up on my shelf in pale blue dust jackets. I had collected them by scouring second-hand book shops with the same assiduity as a kid completing an album of football stickers. Something of each went into Curses, from Roman England (Vol. I) through to society paintings by Sir Joshua Reynolds, and so on. The second strand was Eliot and The Waste Land, not solely for its content but also for its permissive style, as if it had authorised me to throw everything together. The third strand was classics: I was reading a lot of those “Cambridge Companion to Ancient Greek Philosophy” type of books, and I liked to grab the picturesque parts. Lastly, of course, the fourth strand is Infocom. Some of the puzzle design is lovingly imitative of Lebling, especially. The hieroglyphics from Infidel make a direct appearance. I also took affectionate swipes at the conventions, as with the infamous “You have missed the point entirely” death incurred simply by going down from the opening room, or the part where the narrator awards some points and then, a few turns later, takes them back again. Or the devil, who gives hints, all of which are lies. People actually filed bug reports over that. But really, I don’t think I did anything so transgressive that Infocom might not have done the same itself.

Those four strands are the main ingredients, but I should also acknowledge the indirect influence of the 1980s turn towards magical realism in fantasy novels, where it became possible to marry the fantastical with the merely historical. I had certainly read John Crowley’s Little, Big, for example. You could, at a stretch, say that Curses lies in the same genre.

The art of the Modernist collage is to somehow provide some cement which will hold the whole thing together. In the case of Curses, that cement is provided by the continuity of the Meldrew family and of the house – to which, and this is crucial, the player is always returning, and which ramifies with endless secret rooms. Moreover, you always experience the house through its behind-the-scenes places, joined in a skeletal way around the public areas which you never get to visit. The game is at its best when this cement is strongest, with the puzzles directly related to family members or to the house’s nooks and crannies. It loses coherence when it goes further afield, and this is why a final proposed addition, to do with the subway systems of various world cities all being joined up, was dropped. It didn’t feel like Curses any more. The weakest parts of Curses are the last parts added, and I suspect that the penultimate release is probably a better experience than the final one.

I am sometimes asked if Curses was autobiographical. As the above makes clear, in one sense yes, in that it’s a logbook of my reading. And in another obvious sense, no: I never actually teleported to ancient Alexandria. Nor have I ever lived in a grand house. My family home was built around 1960. It had seven rooms, none of them secret, and its map was an acyclic graph. There were early players who imagined that I might really be from some cadet branch of the landed gentry, with spacious grounds out of my window. This was not the case. Our estate consisted of one apple tree and two gooseberry bushes. All the same, England is not like America in this respect. Because of the Second World War, and because of inheritance tax, the great stately homes of England had essentially all become public places by the time I was a child. A routine way to entertain visiting grandparents was to take them around, say, the Jacobean manor house at Hatfield, where the Cecils had lived since the reign of James I. You didn’t have to be at all rich to do this.

The Attic area of Curses, where the game begins, does also contain just a little of my real family. The most intriguing place in my childhood home was, for sure, the attic, because it was so seldom accessible to me: a windowless but large space, properly floored, but never converted into a living area. My father would develop photographs up there, pouring chemicals into a tray, under a red lamp with a pull-cord switch. He would allow me to pull this cord. The house also had an airing cupboard — that is, a space around the hot-water boiler where towels could be dried. In this cupboard, my mother at one time made home-brew wine, in a sort of slow chemistry experiment with evil-looking demijohns. My brother doesn’t really make an appearance in Curses, which I’m sad about now, but it’s essential that the protagonist has ancestors rather than contemporaries. Though the protagonist has a spouse and children, mentioned right up front, they never appear, which I think is worth noting in a game where almost everything else that is foreshadowed eventually comes to pass.

Curses is by any reasonable standard too hard. In its first releases, I would update it with new material each time I made bug fixes, so that the game evolved and grew. Some players would play each version as it came out, and this enabled them to get further in, because they had prior experience from earlier builds. A dedicated fan base sent in bug reports, my favourite being that the brass key could not be picked up by the robot mouse, because brass is non-magnetic. The reward for any bug reported was that the reporter could nominate a new song to be added to the radio’s playlist, provided that it was both catchy and objectively dreadful. It would be interesting to extract that playlist now and put it on Spotify.

Feedback from players gave Curses a certain polish, but it wasn’t the only thing. I think it’s noteworthy that, just as Infocom had an editor as well as play-testers, so too I had an editor for at least part of the process: Gareth Rees, a Cambridge friend, author of the very wonderful Christminster. Richard Tucker also weighed in. I have the impression that before 1992 works of interactive fiction didn’t have much quality control, not so much because people didn’t want it, but because networking conditions didn’t allow for it.

To my great regret, the source code for Curses is now lost. It was for a while on a disk promisingly labelled “Curses source code”, but that disk is unreadable, and not for want of trying. Somewhere in my many changes of address and computer, I lost the necessary tech, or damaged it. (And Jigsaw too, alas.) It wouldn’t be hard to resurrect something, by working from a disassembly of the story file: there’s actually a tool to turn story files into Inform 6 out there somewhere. I occasionally think of asking if anyone would like to do that, and perhaps produce a faithful Inform 7 implementation.

Today, people play Curses with a walkthrough by their sides. But the game never quite goes away. Mike Spivey told me recently that he introduced himself to modern interactive fiction – “modern” interactive fiction – by playing Curses in 2017. A few people, at least, still tread Meldrew Hall. I remain fond of the place, as you can probably gather from the length of this reminiscence. Once in a blue moon I am tempted to write a sequel, Curses Foiled. But no. Sometimes you really can’t go back.

 
 

Tags: , , ,