RSS

Tag Archives: son of stagefright

AGT

AGT

What with our love of specialization and our tendency to place societal value only on those activities that earn their doers money, the modern world is not terribly kind to the idea of amateurism. See, for example, the popular adjective “amateurish,” which has doubtless crept into a few of my own reviews of one misbegotten game or another over the years. Yet there was a time when amateurism had a more positive connotation, connected to its root in the Latin “amatorem”: “lover.” This view of amateurism celebrates the amateur as someone who does something not for material gain or social prestige, but purely for the love of it. It’s this view which lies behind the requirement that persisted for so many decades that only amateurs — pure of mind, intent, and spirit — could take part in the Olympic Games, a requirement so out of keeping with the currents of modern thought that we now find it difficult to even parse.

But really, truly, sometimes amateurism can bring out the best in us. Leaving to the sports bloggers the question of whether the Olympics lost something when they gave up on amateurism, I’ll say here today that the rise of the amateurs may just have been the best thing ever to happen to the text adventure. Interactive fiction had come just about as far as it could as a slave to the commercial marketplace by the time Infocom died in 1989. Free from the need to shoehorn in graphics, to artificially extend the length of the game, to avoid controversial topics and interesting formal experiments, the amateurs were now primed to take over. With this article, we’ll begin the deeply amateurish story of how that came to be — a story every bit as fascinating and inspiring as the history of Infocom that has consumed so much of my attention over the last four and a half years of blogging.

I mentioned already in my last article my fondness for Jeremy Douglass’s alternative take on interactive-fiction history, which replaces the tragic narrative of a lost commercial golden age with a more even-keeled thoroughgoing narrative of inspired amateurism, leaving the commercial era as an anomalous interstitial period within a longstanding non-commercial “literary salon culture.” Yet I’m not sure that even the anomalous commercial era was quite so anomalous as Douglass might lead us to believe, for the vast majority of people writing text adventures even during the 1980s weren’t trying to make a living at it. Right from the moment that Adventure inspired teams of institutional hackers in various places around the country and the world to try to make a better version of their own, the text adventure has been almost unique in the way it has inspired so many consumers to become producers of their favorite ludic genre. Indeed, that might just be the text adventure’s most inspiring aspect of all. And, far from being strictly a post-1980s phenomenon, it was as true during the alleged commercial era as it remains today.

We’ve seen already how enabling others to roll their own text adventures became something of a cottage industry of its own almost as soon as Scott Adams’s Adventureland, the first microcomputer-based game of its type, arrived on the TRS-80 in late 1978. In the May 1979 issue of SoftSide magazine, Lance Micklus published the BASIC code to his Dog Star Adventure, which would go on to become the sturdy framework for tens of thousands of similar games created in bedrooms, high-school computer labs, and home offices, most of which never traveled much further than the computer used to create them. There followed heaps more magazine listings of BASIC-based text adventures, many of them based on Micklus’s original, along with enough books on the crafting of them to fill a long library shelf.

At the same time, other more specialized text-adventure-creation systems also began to emerge. Only shortly after Dog Star Adventure appeared, Donald Brown began to distribute Eamon, a construction set for “adventure scenarios” that combined elements of text adventures and CRPGs in a way that strikes us as stranger today than it did players back in 1979, when genres were still in flux and the lines between the largely deterministic adventure game and the largely emergent CRPG had not yet been clearly demarcated. In 1982, Allan Moluf and Bruce Hanson released The Adventure System, an authoring system for new games that used the now well-documented Scott Adams format. (Such clever retro-fitting of new technologies onto old would become another thoroughgoing theme of interactive-fiction history, with perhaps the most notable example becoming Graham Nelson’s decision to make his new Inform compiler target the old Infocom Z-Machine in the early 1990s.) But the really big winner among the early text-adventure construction kits was an entry from across the pond: Graeme Yaendle’s The Quill, which almost from the instant of its late 1983 release became the basis for more than one out of every two text adventures released in Britain, thus helping the adventuring culture of Britain and the wider Europe become even more a culture of inspired amateurism than was that of the United States. (The Quill was briefly sold in the United States under the name AdventureWriter, but, being poorly marketed and distributed, never caught on.)

With Infocom being universally regarded as the gold standard in text adventures by 1983 even in Europe (where their games would remain pricey, disk-drive-requiring pieces of foreign exotica for some years yet), the ultimate dream for makers and users of systems like The Quill was a construction kit capable of making Infocom-quality games. That dream would, alas, go unrealized for quite some time. Even the Professional Adventure Writing System (PAWS), Yeandle’s 1986 follow-up to The Quill, had a long way to go to meet that standard. The first popular construction kit capable of fooling a player even momentarily into believing she was playing an Infocom game would rather be an American system called the Adventure Game Toolkit, or AGT, the first system of its kind to be widely used in the United States since Eamon. But before AGT there was the less auspiciously named Generic Adventure Game System, or GAGS, which never became all that popular and was capable of fooling absolutely no one. Nevertheless, any history of AGT must begin with GAGS.

The man behind GAGS was one Mark J. Welch, a go-getter who had started working as a freelance technology journalist just a year out of high school in 1976. By the mid-1980s, he was an editor and product reviewer for Byte, the most influential periodical in the computer industry. In his spare time, he tinkered with text adventures, first in BASIC, then in a Pascal-like language called Ada, finally in a new programming environment that was taking the industry by storm, Borland’s Turbo Pascal. He eventually made the leap that Scott Adams and so many professional adventure developers after him had already made, from writing each new game as a custom program on an ad hoc basis to developing a database-driven engine capable of playing many games. That engine became GAGS, which Welch first released in 1985 under the new software-distribution model of shareware; the system was free to copy or download, but happy users were encouraged to register their copy for $15. Welch would also sell the Turbo Pascal source code to those looking to hack the system a bit for themselves for $25, on the condition that they not distribute it further.

Working on business-focused MS-DOS machines with disk drives, relatively fast processors, 80 columns of text, and 256 K or more of memory, Welch was far less constrained than the likes of Graeme Yeandle had been in writing The Quill on a little Sinclair Spectrum. Yet, far from actively chasing the Holy Grail of an Infocom-like game, he kept his goals for GAGS deliberately modest. In a passage as commendable for its honesty as it is questionable in terms of marketing, Welch wrote bluntly in his manual’s introduction that GAGS “cannot be used to write an adventure game with as many complex features as Infocom’s. To do so would require developing a complete adventure-game programming language, as Infocom has done, and would require adventure-game writers to learn a very complex set of rules.” With Welch having thus explicitly rejected the idea of a true programming language for creating text adventures, working with GAGS, like working with The Quill, felt more like an exercise in data entry than it did an exercise in programming. Let’s briefly see how it worked.

A GAGS game is made up of three elements: “rooms,” “nouns,” and “creatures.” All are defined in a single text file, which is then passed to the compiler for transformation into an Infocom-style story file, playable via the GAGS interpreter. The examples that follow are taken from the most popular game ever made with GAGS, a Lewis Carroll pastiche with the appropriately Victorian long-winded title of The Adventures of Alice Who Went through the Looking Glass and Came Back Not Much Changed. [1]I have tinkered here and there with this example game and the next to better illustrate my points. Let’s first look at a room definition.

ROOM 9
  Denser Forest
  East      35 - Dense Forest
  Points 12
END_ROOM 9

ROOM_DESCR 9 -- Denser Forest
The forest is even denser here.  You think perhaps you should turn around and
go back to the garden.  Suddenly you realize the solution to a mathematics
problem that has been eluding you for days.
END_ROOM_DESCR 9

I trust that none of what you see here is terribly hard to divine. Room 9 is called “Denser Forest,” and is a dead end lying to the west of “Dense Forest.” The player receives 12 points upon entering this room for the first time. And after these details we have the text of the room’s description.

Just a couple of other optional details beyond what you see here can be provided in a room definition, defining potentially locked doors blocking departure and the keys that unlock them as well as whether the room is lit or unlit (it’s lit by default). GAGS also lets us end the game, in either victory or death, as soon as the player enters a given room; in fact, this is the only way to declare victory.

“Nouns,” meaning inanimate objects really, are a bit more complicated. Here we have an umbrella.

NOUN 204
  UMBRELLA
  OLD
  There is an old umbrella here.
  Weight    1
  Size    1
  Location  5 - Drawing Room
  Points    0
  Key       0
  ** Can't shoot
  Num_Shots 0
  Unpushable
  Unreadable
  Turnable
  Unplayable
  Unpullable
  Off
  Closable
  Closed
  Unlockable
  Unlocked
  Undrinkable
  Inedible
  Nonpoisonous
  Unmovable
  ** Not_a_light
END_NOUN

NOUN_DESCR 204 -- UMBRELLA
The umbrella has obviously seen better days.  It is frayed around the edges,
the handle is warped, and it bulges unnaturally in several places.
END_NOUN_DESCR 204

TURN_DESCR 204 -- UMBRELLA
You spin the umbrella around a few times. Wasn't that fun?
END_TURN_DESCR 204

I should first of all note that nouns are numbered from 201, so this is actually only the fourth object defined in the game. We see here that “umbrella,” the one-word name of the noun, can be prefaced by the adjective “old,” which could potentially be very useful for parser disambiguation if there happen to be two umbrellas in the game. “There is an old umbrella here” is the message which will be appended to the description of a room that happens to contain the umbrella. It has a weight and a size of 1 for purposes of inventory juggling, and it begins the game in room 5, the “Drawing Room.” The umbrella awards the player no points for picking it up for the first time.

The parameters that come next neatly summarize virtually every possibility for object interaction in a GAGS game. A noun can be a key unlocking a certain door or another noun; this one is not. A noun can be shootable, possibly with limited ammunition. A noun can be pushable, readable, turnable, playable, or pullable, each verb leading to a simple textual description of the result; in this case, turning the umbrella yields, “You spin the umbrella around a few times. Wasn’t that fun?” A noun can be turned off or on, can be closable and if so either closed or open, can be lockable and if so either locked or unlocked, can be drinkable or edible and if one or the other can be poisonous. A noun can be moveable or unmoveable; in this case, somewhat oddly, the player can’t actually pick the umbrella up, which renders the weight and size parameters moot. Finally, a noun can be a light source.

Let’s look at one more noun.

NOUN 205
  DAGGER
  SMALL
  There is a small dagger here.
  Weight    1
  Size    1
  Location  204 - UMBRELLA
  Key       0
  Points    5
  ** Can't shoot
  Num_Shots 0
  Unpushable
  Unreadable
  Unturnable
  Unplayable
  Unpullable
  Off
  Unclosable
  Open
  Unlockable
  Unlocked
  Undrinkable
  Inedible
  Nonpoisonous
  Movable
  ** Not_a_light
END_NOUN

NOUN_DESCR 205 -- DAGGER
The dagger is small but very sharp.
END_NOUN_DESCR 205

So, the dagger is a moveable object found inside the closed umbrella. This is the sort of thing that often passes for a puzzle in a GAGS game; note that the player is awarded 5 points just for picking the dagger up for the first time.

Let’s now have a look at a creature.

CREATURE 301
  BANDERSNATCH
  FROOBIOUS
  There is a Froobious Bandersnatch here.
  Location 9
  Weapon   205
  Threshhold 5
  Time_Thresh 5
  Hostile
END_CREATURE

CREATURE_DESCR 301
The Bandersnatch is snorting and drooling.  It seem to harbor no very
honorable intentions towards you.
END_CREATURE_DESCR 301

Creatures are numbered from 301, so our froobious bandersnatch is actually the first creature to be described. He lives in room 9, our aforedescribed Denser Forest. The parameters that follow “Location” serve to drive home the real main interest of the GAGS system: combat. In that respect, GAGS would seem to owe more philosophically to Eamon than it does to Infocom. Yet its combat is implemented in a rather peculiarly  unsatisfying way even in comparison to that less than ideal older system. Each hostile creature has a single noun — a key to a different sort of lock, one might say — that is capable of killing it instantly. All others are useless against it. In the case of the bandersnatch, then, said noun is the dagger. The “Threshold” parameter tells us that the player can make up to 5 unsuccessful attacks — presumably, using various objects to poke at it, hoping to find the right one — before the bandersnatch gets aggravated enough to kill her. The “Time_Thresh” of 5 tells us that the bandersnatch will kill the player anyway if she remains in his presence for 5 turns; in other words, no matter what the player does, if she doesn’t attack the bandersnatch with the dagger within 5 turns of arriving in the Denser Forest, she’s a goner. And “Hostile” of course tells us that the bandersnatch is, well, hostile; if he was “Friendly” instead, the “Threshold” and “Time_Thresh” would be meaningless.

With all possible verbs and interactions hard-coded into the engine, authors working with GAGS were largely restricted to the hoariest of hoary text-adventure chestnuts: locks and keys, light and darkness, the inevitable mazes. But most of all, games tended to develop (devolve?) into an exercise in finding the right thing to use to bash each monster in the player’s way. That’s certainly the case in the game we’ve just been looking at, which sees Alice cutting a bloody swathe through Wonderland, taking out jabberwocks and knaves with a violent aplomb that would make even the makers of the recent girl-powery films blush. Even a croquet ball gets coded up as a monster to be bashed with an “umbrolly” — a different umbrella from the inexplicably unmovable one we saw earlier — in a clumsy attempt to work around the limitations of GAGS.

Unsatisfactory though it was in so many ways as a piece of hard technology, GAGS did have a number of softer qualities going for it. Young though he still was, Mark Welch had been working for almost a decade already as a technical writer by the time he released GAGS. He knew how to describe how his system worked clearly and completely, and how to put his best foot forward generally when it came to every aspect of GAGS’s presentation. One might even say that his extensive documentation of GAGS marks the beginning of the tradition of literate, thoughtful writing about the art and technology of interactive fiction that remains a welcome aspect of the amateur community to this day.

Another move by Welch would prove if anything even more influential. Looking to encourage people to use his system, he decided to sponsor a contest for GAGS games, with a submission deadline of September 30, 1986. His justification for doing so rings in concert with the justifications for the hundreds of interactive-fiction contests that have been held since, not least the big one that began in 1995: to get people to actually finish and publish their games. “The main purpose of the contest was to encourage people to share the games they’d written using GAGS,” he says. “A lot of people had started games, spending quite a few hours on them, but stopped before they’d really finished them, or before they’d really made them playable.” Entrants were mailed on disk to Welch, who judged them personally, selecting Alice as the winner. (There is unfortunately no historical record of how many and which other games were submitted for judging.) The author of Alice, one Douglas Asherman, received $100 for his efforts and got to see his game distributed with GAGS from then on. Alice received a further boost when some enterprising hackers worked out how to make the GAGS interpreter output and input text over a modem connection. The game became a fixture among so-called “door games” — simple, text-based games hosted by computer bulletin-board services — for several years thereafter, thereby becoming available for play by many owners of the non-MS-DOS computers that still made up the vast majority of the home market going into the second half of the 1980s.

David M. Malmberg

David Malmberg

It was shortly after Welch’s first and only GAGS contest that David Malmberg, the real hero of our story today, entered the scene. A business analyst by day at the San Francisco headquarters of Foremost-McKesson — a $4 billion corporation with fingers in such diverse pies as chemicals, liquor, food, and pharmaceuticals — Malmberg had long since become a microcomputer convert by night, having purchased his first Commodore PET well before the 1970s were history. He contributed regularly to the magazines, beginning with the very first issue of Compute!, the magazine destined to become home computing’s biggest, in the fall of 1979. With two small children at home, he developed a special interest in computers as teaching tools, particularly as tools for teaching programming. In 1982, he wrote and published through Human Engineered Software— a company he had been instrumental in funding as part of his day job — an application/toy for the Commodore VIC-20 called Turtle Graphics, a simple language for graphics programming aimed at children. Eventually ported to the Commodore 64 as well, Turtle Graphics wound up selling 80,000 copies in the heyday of the first home-computer boom. Meanwhile Malmberg also nurtured a strong interest in text adventures, publishing a few of his experiments in that direction as BASIC and PILOT type-in listings in the magazines.

Given his interest in text adventures and programming systems suitable for the non-expert, Malmberg was the perfect candidate to embrace and extend GAGS. As soon as he encountered Mark Welch’s simple adventure system, he mailed off for the source code and started studying it on his daily one-hour rail commute to and from work, teaching himself Turbo Pascal as he did so. He soon contacted Welch to inform him of the enhancements he had already begun to implement, looking to see if a partnership might be a possibility. But when he met Welch for lunch he found the latter interested not so much in partnering as in washing his hands of the whole endeavor. Welch, who had recently scaled back his work as a tech journalist to begin attending law school at Berkeley, was simply burnt-out on a system that, despite the contest and the relative popularity of Alice among BBS sysops and public-domain software traders, had never quite taken off as he had hoped. Malmberg promptly made him a very generous offer indeed: he would take the entire operation off his hands, assuming all responsibility for enhancing and supporting the system, but continue to pay Welch 50 percent of all the profits it generated. Welch, unsurprisingly, jumped at it. The sharply limited GAGS was about to become the much more useful AGT.

The core of Malmberg’s enhancements is a system of something he called “meta-commands,” which allow the author to make things happen that aren’t hard-coded into the system’s preconceptions. An AGT game which uses meta-commands has a new “command file” and a “message file” to go with the standard GAGS database definitions. The command file consists of a long string of entries to be checked against the player’s typed command. When matches are found, customized things of the author’s choosing can happen, possibly outputting custom text from the message file.

The examples that follow are drawn from the source code to A Dudley Dilemma, an early AGT game for which I’ll be providing more context soon. We’ll look at some of the code which implements Dudley‘s light source, a flashlight, in a much more sophisticated way than would have been possible in GAGS. Since A Dudley Dilemma is still very old-school in spirit, the implementation will include a dwindling battery, a complication that wouldn’t have been possible in GAGS.

In the standard database-definition file, we have two versions of the flashlight, representing it in its unlit and lit states. (While you read over the definitions that follow, do note the new ability to provide additional synonyms for nouns beyond a simple name and adjective — one of Malmberg’s various other modest but welcome enhancements to the core of the old GAGS system.)

NOUN 201
  Flashlight
  Black
  There is a rechargeable flashlight here.
  LOCATION 0
  SIZE 9
  NOUN_SYNONYMS Light Flash
END_NOUN

NOUN_DESCR 201
The flashlight is one of the rechargeable kind that never seems to work when
you need it.  It is off at the moment.
END_NOUN_DESCR

NOUN 202
  Flashlight
  Black
  There is a rechargeable flashlight here.
  LOCATION 0
  IS_LIGHT
  ON
  SIZE 9
  NOUN_SYNONYMS Light Flash
END_NOUN

NOUN_DESCR 202
The flashlight is one of the rechargeable kind that never seems to work when
you need it.  It is presently on.
END_NOUN_DESCR

Now, let’s turn to the command file.

COMMAND LIGHT FLASHLIGHT
  Present 201
  TurnFlagON 2
  SwapLocations 201 202
  PrintMessage 14
  DoneWithTurn
END_COMMAND

Every turn, the game checks to see whether the player’s command matches “light flashlight,” or appropriate synonyms thereof, as it works its way down through the list of meta-commands. If so, a script written in a custom programming language of about 170 possible commands is run — exactly the “complete adventure-game programming language” that Welch had so explicitly disavowed in his original GAGS documentation. If we have a match, we first check to see if noun 201, the unlit flashlight, is “Present,” meaning it is in the current room or being carried or worn by the player. If it isn’t, the script is terminated right here, and the game proceeds on to test the player’s command against the remaining commands in the file. If it is, we continue with the script by turning flag 2 on. The flags, another of Malmberg’s additions, are 255 on/off switches that the author can use to keep track of whatever she wishes. In this case, flag 2 tracks the state of the flashlight.

The next command, “SwapLocation,” swaps the locations of the unlit flashlight, which is being carried by the player or at least in the room with her, with the lit flashlight, which is presumably in room 0, an inaccessible holding area for nouns and creatures not currently in play. Next we print message 14 from the custom-message file. It looks like this:

MESSAGE 14
You turn the $NOUN$ on.
END_MESSAGE

“$NOUN$” here is, as you may have gathered, a stand-in for the object of the player’s command, in this case the flashlight.

The final line of the script, “DoneWithTurn,” informs the game that we’ve successfully carried out the player’s command and that it should not continue working its way through the command file checking for further matches, as it would have done had we bailed on the first line of the script. Thus we can effectively prioritize certain reactions over others by placing them earlier in the command file.

So, we now have a flashlight that we can turn off and on, but we still need to figure out how to make its battery run down. In addition to the 255 flags at our disposal, we have 25 variables, each capable of storing an integer. We use variable 1 to represent the current charge of the flashlight; it starts at 100 and should decrement by 1 each turn that the flashlight is lit. Thus very early in the command file, we have this:

COMMAND ANY
  FlagON 2
  SubtractFromVariable 1 1
END_COMMAND

“COMMAND ANY” means that this script will fire every single turn, regardless of what command the player has entered. In the script that follows, we first check to see if flag 2, representing the state of the flashlight, is set. If it isn’t, meaning the flashlight is turned off, we bail, continuing with the later command entries. If it is, meaning the flashlight is turned on, we proceed to subtract 1 from variable 1. Note that there is no “DoneWithTurn” entry in this script, meaning processing of the command file will always continue whether we’ve actually done anything here or not.

The command definitions that immediately follow the one above give warnings to the player as the battery runs lower and the flashlight dims. I’ll leave decoding them as an exercise for you.

COMMAND ANY
  FlagON 2
  Present 202
  VariableEquals 1 50
  PrintMessage 10
END_COMMAND

MESSAGE 10
** The flashlight seems to be getting dimmer! **
END_MESSAGE

COMMAND ANY
  FlagON 2
  Present 202
  VariableEquals 1 20
  PrintMessage 11
END_COMMAND

MESSAGE 11
** The flashlight is definitely much dimmer now. **
END_MESSAGE

COMMAND ANY
  FlagON 2
  Present 202
  VariableEquals 1 5
  PrintMessage 12
END_COMMAND

MESSAGE 12
** The flashlight fades to a dull orange. **
END_MESSAGE

Finally, the flashlight may expire entirely:

COMMAND ANY
FlagON 2
VariableEquals 1 0
TurnFlagOFF 2
SwapLocations 202 233
Present 233
PrintMessage 13
END_COMMAND

MESSAGE 13
** The flashlight sputters and goes out! **
END_MESSAGE

Note that in this case we swap out the lit flashlight for yet another noun representing the same object, this time a dead version of the flashlight.

NOUN 233
  Flashlight
  Dead
  There is a dead flashlight here.
  LOCATION 0
  SIZE 9
  NOUN_SYNONYMS Light Flash
END_NOUN

I’d like to look at just one more aspect of Dudley‘s handling of light and darkness, one that illuminates (sorry!) yet one more of Malmberg’s critical additions to the GAGS template. For the first time with AGT, it became possible for the author to define her own new verbs to augment the modest suite of text-adventure staples that are built into the system. Malmberg gave custom verbs the counter-intuitive name of “dummy verbs,” presumably because they do nothing if the author doesn’t explicitly handle them in her game’s command file. A Dudley Dilemma uses 30 dummy verbs, of which we’ll look at just one: “charge,” also known as “recharge,” “plug,” and “insert.” For A Dudley Dilemma, being old-school but not completely heartless, does give the player a way to recharge her flashlight.

DUMMY_VERB16 CHARGE RECHARGE PLUG INSERT

In the original version of A Dudley Dilemma, the flashlight can be recharged from only one location, one which happens to be equipped with a handy electrical outlet.

ROOM 48
  Round Room
  NORTH 24
  SOUTH 47
  EAST 50
  WEST 49
  LIGHT 1
END_ROOM

ROOM_DESCR 48
This is a roughly circular room with exits to the north, south, east and west.
There are several old steam pipes and cracked conduits running through here,
and the fumes from one of them make you slightly dizzy.
There is an electrical outlet here.
END_ROOM_DESCR

I won’t belabor the implementation of charging unnecessarily, as the code is quite readable on its own. When the player types something like “recharge flashlight,” we first step through a series of possible failure states and their resulting messages, arriving eventually if none of them apply at actually topping off the flashlight and sending her on her way. Once again, I encourage you to take a few minutes to work your way through it if you’re at all interested in getting a feel for how AGT really worked in practice. And besides, if you’re like me you might just find this sort of thing fun.

COMMAND CHARGE LIGHT
  IsCarrying 201
  PrintMessage 81
  DoneWithTurn
END_COMMAND

MESSAGE 81
The flashlight must be ON to be recharged.
END_MESSAGE

COMMAND CHARGE LIGHT
  IsCarrying 202
  VariableGT 1 20
  PrintMessage 67
  DoneWithTurn
END_COMMAND

MESSAGE 67
The flashlight doesn't need to be recharged (yet).
END_MESSAGE

COMMAND CHARGE LIGHT
  NOT AtLocation 48
  IsCarrying 233
  OR
  IsCarrying 202
  VariableLT 1 20
  PrintMessage 68
  DoneWithTurn
END_COMMAND

MESSAGE 68
Guess you'd better find someplace to plug it in!
END_MESSAGE

COMMAND CHARGE LIGHT
  AtLocation 48
  IsCarrying 202
  VariableLT 1 20
  SetVariableTo 1 100
  PrintMessage 66
  DoneWithTurn
END_COMMAND

MESSAGE 66
You plug the flashlight in and recharge it.
END_MESSAGE

COMMAND CHARGE LIGHT
  AtLocation 48
  IsCarrying 233
  SwapLocations 233 202
  TurnFlagON 2
  SetVariableTo 1 100
  PrintMessage 66
  DoneWithTurn
END_COMMAND

I hope these examples may begin to convey how ingenious Malmberg’s extensions to GAGS really were; they turned a system useful only for making the most simplistic of games into one of the most powerful systems for making amateur text adventures that had yet been seen.

But AGT had still more going for it beyond its technical affordances. Perhaps even more so than Mark Welch, David Malmberg had the skills to present his brainchild in the best possible light. He registered a little company, which he dubbed Softworks, to handle the system, and expanded Welch’s original documentation to fully explain all of his own new additions, replete with examples. Asked in an interview years after AGT’s heyday what aspects of the system he was proudest of, he placed “the quality of the documentation” on the same level as the meta-commands. Justifiably so: the instruction manual ballooned to 223 printed pages of friendly, readable prose, dwarfing in both quality and quantity the manuals included with most boxed commercial software. In fact, AGT became in a sense a physical product. Those who paid the $35 registration fee were shipped not only three disks full of the latest version of the compiler along with heaps of sample code and sample games but also the manual in spiral-bound hardcopy. All the effort spent in looking serious paid off in others choosing to take AGT seriously. In what can only be described as a major coup for Malmberg, AGT was given a full-fledged and generally very positive review in the February 1989 issue of the glossy newsstand magazine Computer Gaming World, an achievement of which very few other shareware products could boast.

Despite such welcome exposure, Malmberg quickly learned, as would many text-adventure fans who attempted to turn their loves into business propositions after him, that there just wasn’t a lot of money to be made in text-only adventure games. Able to encourage his users to register only by offering them the hardcopy documentation, telephone support, and, as he put it, “a warm glow from having supported at least one of the many shareware products you probably use” along with his own “eternal gratitude,” he would over the lifetime of AGT average only 100 or so copies “sold” per year — and even that income he of course had to split equally with his silent partner Mark Welch. At least an order of magnitude more people used unregistered copies to experiment with game design, and often to make and release complete games without ever bothering to pay the registration fee. Superficially professional though Malmberg’s presentation managed to be, AGT was always at heart a labor of love; it certainly never gave him cause to think of quitting his day job in favor of becoming a text-adventure mogul.

The people who made games with AGT, especially in the earliest years, were a far-flung, disconnected group by any standard, and doubly so in comparison to the close-knit Internet-based community that would follow them. I spoke to two former AGT authors in preparing this article and the next, and was surprised to learn that neither felt himself to be a part of any community at all really. With modems still fairly scarce and online services still fairly expensive in the late 1980s, Malmberg himself became the principal conduit binding many AGT users together, to whatever extent they were bound together at all. In 1988, shortly after releasing the first version of AGT, he made the hugely important decision to reconstitute Mark Welch’s one-off 1986 GAGS contest as an annual event. The rules were simple: all entrants had to have been made using AGT, had to have been first publicly released during the calendar year of the contest in question, and had to be posted to Softworks by December 31 of said year. Malmberg personally would, as he put it, “consider each game’s originality, cleverness, fiendishness, humor, raw cunning, and professionalism” to arrive at a winner.

The institution of the AGT contest as an ongoing annual tradition was a landmark event. Since 1989, the year when the 1988 batch of AGT games was judged, not a year has passed without a major annual contest dominating the interactive-fiction calendar. Until 1994, that contest would be Malmberg’s AGT competition, which would be held six times in all. Picking up neatly thereafter in 1995, it would be the Interactive Fiction Competition, which is closing in on its 22nd iteration as of this writing.

In due course, amateur interactive-fiction authors would begin to probe relentlessly at the boundaries of the medium, experimenting wildly and discovering many worthy (and a fair number of unworthy) new approaches to the art of the humble text adventure. In these early days, however, with Infocom dying, the text-adventure corpus was more in need of triage than surgery. Accordingly, early AGT authors didn’t concern themselves overmuch with new frontiers. They rather applied themselves diligently to simply, as a later interactive-fiction publication would put it, “helping to keep text adventures alive.”

In short, if the only way for them to have new text adventures was to make them themselves, then that’s exactly what they’d do. The AGT user base was overwhelmingly made up of diehard Infocom fans, drawn from that hardcore of a few tens of thousands who never abandoned the company as graphics got better and other, flashier genres stole the hearts of the vast majority of the computer-gaming public. Their numbers may not have been large enough to support a company like Infocom anymore, but there were more than enough of them to keep the flame burning via amateur creations in the Infocom tradition.

Given the circumstances of their creation, it’s not surprising to find that most early AGT games can be described to one degree or another as Infocom homages. Indeed, some of them are perhaps better described as Infocom pastiches, absolutely crammed full of echoes of the puzzles and environments their makers fairly worshiped. But this hardly invalidates them as experiences. Personally, having spent the last four and a half years intermittently immersed in the lore of Infocom in writing this blog, I feel myself all too much in tune with the mindset that led to the early AGT games.

And there is I think a unique quality to even many of the most slavish of the AGT Infocom homages that’s worth mentioning. To a much greater degree than the games of Infocom and other commercial publishers, AGT games feel like personal expressions of their creators. In later years, jokes and no small amount of scoffing would be attached to Everyone’s First Game, which inevitably begins in said everyperson’s bedroom and proceeds to play out in an environment interesting and meaningful to absolutely no one beyond the author’s friends and family. Yet the same tendency that spawns that phenomenon constitutes I think an important part of the text adventure’s ongoing fascination. In a ludic world obsessed with high-concept, world-saving, galaxy-spanning plots, text adventures can provide a window into the more modest but — for me, anyway — far more interesting lives of real people. If we agree with the folks who say that one of the most important functions of art is to provide a glimpse at how the proverbial other half lives, then that’s a noble quality indeed. When we look back today to the AGT games of decades ago, they take on an additional layer of interest as historical documents in their own right of the times and places that spawned them.

These are qualities that both of the early AGT games I’d like to introduce and recommend to you today evince in spades. Both are old-school puzzlefests in the Infocom tradition, but both were created by clever, interesting people who give us a chance to walk in the shoes they were wearing in the vanished United States of almost three decades ago.

The first game I’ll heartily recommend is the one we’ve been using as an example of AGT programming: A Dudley Dilemma, winner of the 1988 AGT Competition. Written by Lane Barrow, at the time a PhD candidate in literature at Harvard, it takes place in and around the very same university; the name of the game is a play on Harvard’s Dudley House for nonresident undergraduates. A Dudley Dilemma is a fine addition to the longstanding tradition of collegiate interactive fiction, its depiction of life at Harvard as loving and entertaining in its own way as were The Lurking Horror‘s homages to Harvard’s cross-town counterpart MIT — a university which, incidentally, also makes a cameo appearance in A Dudley Dilemma; it is, after all, just a short subway ride away.

The second game is Son of Stagefright, the winner of the 1989 AGT Competition (Malmberg was, in addition to his other qualities, a very good judge). It was written by Mike McCauley, an avid participant in another inspiring form of amateur creativity: community theater. The theater in which Son of Stagefright is set isn’t based directly on any one real place, being rather a conglomeration of various playhouses McCauley had known. But it’s a fascinating place to explore nevertheless, dripping with McCauley’s love for thespianism and his great good humor in all its many nooks and crannies.

Both of these games will seem a little rough around the edges in comparison to a more polished modern work created with a more polished modern programming language, but I do urge you to give them a fair chance. Being written in the tradition of Infocom means among other things that they are interested in challenging you but not in stymieing you entirely. Their puzzles are almost entirely fair and reasonable, and occasionally inspired. Son of Stagefright even offers a very clever embodied hint system that dribbles out nudges via a magic book you discover.

Both games will run in AGiliTy, a modern interpreter for AGT story files, or the one-size-fits-all interpreter Gargoyle; the latter would be my first recommendation. In either case, the file ending in “.D$$” is the one you want to open with the interpreter. There is, however, an important caveat in the case of A Dudley Dilemma: the original Competition-winning version of the game doesn’t play quite correctly in AGiliTy or Gargoyle, rendering it unwinnable. But never fear: I’ve been in touch with Lane Barrow, and he’s provided a newer version which we’ve tested and found to work perfectly in the modern interpreters. Along the way, he’s also cleaned up a few of the original game’s less felicitous old-school puzzles, and packaged the whole together with DOSBox to make it a one-click play for those running Windows who’d prefer to play it through the original AGT interpreter rather than AGiliTy or Gargoyle. If you do choose to play through DOSBox, you’ll get to enjoy some pictures of the scenes described; these aren’t essential by any means, but they do add a little something to the experience. Regardless of how you play, just please make sure to use this new “remastered” version if you wish to play A Dudley Dilemma for reasons of fun (as opposed to historical investigation) today. (I’ll be uploading this version to the IF Archive as well to assure that it’s preserved in perpetuity.)

I have something special planned for my next article which I hope will deepen still further your enjoyment of A Dudley Dilemma. But there’s no need to wait for that to get started. Just go ahead and play these games — either or both of them. They’re both worth it, fine testaments to the new era of creative empowerment spawned by AGT. In later years, when still better systems became available, many proponents of those newer systems would come to scoff at AGT for the many limitations that Malmberg couldn’t quite manage to overcome, and even at those authors who continued to stick with the system well beyond its real or perceived sell-by date. In its day, however, AGT represented a wonderful advance that empowered text-adventure fans to take the medium into their own keeping just in the nick of time, just as Infocom collapsed. Had AGT (or something equivalent to it) not come along when it did, the post-Infocom history of adventures in text would read very, very differently. AGT laid the groundwork for the decades of proud amateurism — amateurism in the very best sense — that were still to come. I look forward to continuing to explore its legacy in future articles.

(Sources: Computer Gaming World of February 1989 and May 1989; Commodore Power/Play of Fall 1982, Summer 1983, Fall 1983, Winter 1983, Spring 1984, June/July 1984, August/September 1984, and April/May 1985; Compute! of Fall 1979, March 1981, July 1981, and April 1982; Micro of April 1981, October 1981, September 1982, November 1982, and September 1983; Personal Computing of September 1982; The Games Machine of September 1982; Byte of February 1985; New York Times of March 18 1981 and January 10 1982; the various documentation included with the various versions of GAGS and AGT; Stephen Granade’s interview with David Malmberg; Mark Welch’s blog post about GAGS and AGT. Most of all, my thanks to Lane Barrow and Mike McCauley for corresponding with me about their fondly remembered time as AGT authors.)

Footnotes

Footnotes
1 I have tinkered here and there with this example game and the next to better illustrate my points.
 
 

Tags: , ,