by Brian Dear
As things kept getting better for PLATO, in terms of more funding and more students and more educational institutions signing up for it, and more instructors using it in their curricula, things kept getting worse for the gamers. As PLATO grew in the mid-1970s, with more and more simultaneous users vying for time, the system engineers at CERL instituted a cyber-austerity regime, lowering the TIPS limit to 15. “This forced another rewrite,” Daleske says, as Empire had become sluggish, nearly unplayable, with stutters and stops and exasperating pauses from auto-breaks occurring at the most inopportune moments of combat.
While Daleske kept working from the PLATO terminal in the education building, Chuck Miller and Gary Fritz worked from the computer science building, which now had two PLATO terminals of its own. “Pretty much Daleske, Fritz, and I monopolized the terminals as much as we could,” says Miller. “Pretty much all night…and we’d get a gallon-sized thing of Spanish peanuts, and bring in either a six-pack or a gallon of Kool-Aid, and waste our lives away.”
Miller loved the game but grew frustrated at Daleske’s lack of progress in rewriting Empire to behave better under the tighter TIPS constraints. Daleske’s excuse: a girlfriend, who was “taking a lot of my focus,” he says. So Miller and Fritz got more involved, with design input from Mike Rodby. (Rodby’s PLATO fling was brief. “He’s the only person I know who got interested in PLATO, learned everything he could know, and then got bored with it, in six months.” Rodby eventually went on to work on databases for the NASA space program.)
Then CERL lowered the limit again, to 10 TIPS. It was like an insult, a direct affront against every Empire player on PLATO. How could they? What did they think this thing was? A computer-based education system? Didn’t they realize the universe needed conquering? Empire at 10 TIPS just didn’t cut it, and the game was at risk of losing its growing audience and, by now, dominance, over another hugely popular game of the time, the former cream of the crop…Airfight.
—
Daleske and Warner and the others at Iowa State were not the only PLATO game authors in those days who’d become minor deities to the growing horde of gamers. Brand Fortner, located right at CERL, had already written Airfight, which seemed destined from the very start to be an insanely popular game. There had been nothing like it before. It was another PLATO first, in the long, long line of PLATO firsts: a first-person-perspective, multiplayer, shoot-’em-right-out-of-the-sky flight simulator. And until Empire came along, it had ruled the PLATO gaming world.
Fortner had stumbled upon a simple PLATO game called Air Ace, where you could type in some parameters, press NEXT, and “about ten seconds later,” says Fortner, “it would redraw line graphics of the cockpit and you would see outside of the plane. And I thought, Well, that is an interesting idea, but gee, wouldn’t it be nice if you could fly a lot faster and shoot down other people?”
By today’s standards, Airfight’s graphics and realism, like every other PLATO game, are hopelessly primitive. But in the 1970s Airfight was simply unbelievable. These rooms full of PLATO terminals weren’t “PLATO classrooms,” they were PLATO arcades, and they were free. If you were lucky enough to get in (there were always more people wanting to play than the game could handle), you joined the Circle or the Triangle teams, chose from a list of different airplane types to fly, and suddenly found yourself in a fighter plane, looking out of the cockpit window to the runway in front of you, with the control tower far down the runway….You’d hit “9” to set the throttle at maximum, “a” for afterburners, “w” a few times to pull the stick back (using those PLATO arrow keys again), and then NEXT NEXT NEXT NEXT NEXT NEXT NEXT to update the screen as you rolled down the runway, lifted off, and shot up into the sky to join the fight. It might be seconds or minutes, depending on how far away the enemy airplanes were, before you saw dots in the sky, dots that as you flew closer and closer turned into little circles and triangles. (So they weren’t photorealistic airplanes—it didn’t matter. You didn’t notice. This was battle. This was Airfight.) As you got closer and closer to one of these planes, the circles and triangles got more defined—still small, still pathetically primitive by today’s standards—but you knew you were getting closer and that’s all that mattered. As you got closer and closer you hit “s” to put up your sights, to aim. Eventually, if you were good, or lucky, or both, you would be so close that you’d see a little empty space, an opening, inside the little circle or triangle icon. That’s when you were close enough to see what players called “the whites of their eyes” and that’s when you let ’em have it: SHIFT-S to shoot. SHIFT-S again. And again. Until you’d run out of ammo and KABOOM! It was glorious.
And it was addictive. People stayed up all night playing Airfight. If you went to a room full of PLATO terminals, you’d hear the clack-clack-clack-clack-clack-CLACKETY-CLACK-CLACK-BAM-BAM!-WHAM!-CLACK-CLACK! of everyone’s keyboards, as the gamers pounded them, mostly NEXT-NEXT-NEXT’ing to update their view and their radar displays (another innovation of this game—in-cockpit radar displays, showing you where the enemy was).
—
Airfight was a TIPS hog, but Empire was even worse because it was juggling far more information in real time than Airfight: four teams instead of two, more than two dozen planets, not to mention all those armies, multiple weapon types, torps firing in every direction. At some point around this time, a very few, very lucky PLATO gamers discovered a neat little trick to cheat the growing autobreak problem. They called it “TIPS cooling.” “Very few” and “very lucky” because to successfully cool your TIPS required a near-impossible set of conditions: a) you were lucky enough to find a PLATO terminal tucked away in some tiny little room in some obscure building somewhere on your campus; and b) for some reason the room was off-limits to the public without some sort of permission; and c) you had keys and could keep the room locked; and d) you were able to crawl out of bed early enough and get to the building and up the stairs to the room and get in and fire up the terminal and sign on; and e) you were disciplined enough to just sign yourself on, go into Empire, scoot over to some far corner of the galaxy where no one would want to come to shoot you down, press SHIFT-TERM, and leave the terminal just sitting there with its “What term?” prompt with its infinite Skinnerian patience just waiting for you to type a term, but instead you would get up, leaving yourself signed on in Empire with the TERM prompt sitting there, locking the door behind you, so no one else could enter the room and use the terminal. If you could pull off all of those things, were you in for a treat. By evening, your average TIPS were down to zero point zero. This was Pass GO and Collect $200, Get Out of Jail Free, and Free Parking all wrapped up in one. The hours and hours of inactivity would flat-out fool the “governor,” or whatever the electronic autobreak cop was called somewhere deep inside the mainframe, and you could play Empire and raise hell without the fear of any auto breaks at all. It helped if you were good.
Games have always been one of the most resource-hogging, CPU-intensive types of applications written for computers. Today’s PC and videogames use huge amounts of memory and superfast processors to accomplish that 3D realism and smooth animation speed that players have come to expect. To understand how limiting 10 or even 20 TIPS are in present-day terms, think of it this way: if your Mac or Windows personal computer ran at only 10 TIPS, it might take a week just to boot the machine, let alone do anything with it.
Empire was just the sort of thing that pushed the envelope of the PLATO system’s capacity. The game had to keep track of who was in what ship; which ships belonged to which teams; where each ship was located in space; how fast each ship was going; how hot the engines were running on ship; how well each ship’s shields were holding; what to display every time you replotted your screen; how many armies were on each planet; which team those armies belonged to; whether a planet was neutral, at war, or at peace; whether any given player had declared war or peace with another team; where all the photon torpedoes were at any instant and what direction they were each head
ing; the lifetime of each torpedo (they self-detonated after traveling a certain distance); whether or not a torpedo had come close enough to an enemy ship to explode; which photon torpedoes were detonated, and how long their detonation explosion icons should be displayed. The list went on. Empire had to juggle all of this and do it in such a way that nobody noticed. With 10 TIPS that was nigh impossible. A major code rewrite was sorely needed.
“The biggest piece of code was the section that tested for collisions between objects,” says Daleske. “This required a comparison of x and y coordinates for a square in which the object was the center….To determine if a point was within that square took up to four compares. These compares and the branching (like ‘goto’) code took a lot of the CPU time.”
Fortunately, it just so happened that the CERL system staff had been working on a new series of TUTOR commands for managing arrays, or lists, of data, as well as tools for searching for particular values within those arrays. Two TUTOR commands had come out around this time, -find- and -findall-.
-Findall- seemed particularly interesting and had the potential to solve Empire’s TIPS problems. “I was determined that if we could use the -findall- command, the TIPS count could be lowered,” says Daleske. So Daleske, Miller, and Fritz began working on figuring out how to use -findall- such that if you fed the right data to the -findall- command in just the right way, it would spit back some data that told you exactly what you wanted to know. They camped out in a classroom in the education building, filling the three full-size blackboards with notes, drawings, and formulas.
The -findall- command is one of the trickier ones in TUTOR. With it you could search for occurrences of a particular value within a list of variables. If you wanted to know how many students got a perfect score on a test, you could feed -findall- the list of scores, tell it you were looking for all of the 100s, and it would tell you the total number that had perfect scores, and even which entries in the list those were. The command had an optional “mask” feature, which you could use to search only certain bits of a variable, rather than the whole thing.*1 This masking feature was key to the Empire programmers. If only they could figure out how to lay out the array’s bits, and what kind of mask to use.
“We filled those boards with various ideas of how to do masking,” says Daleske. They worked for weeks on the problem, finally figuring out a solution for masking an arbitrary square. “We came up with a way,” says Fritz, “of expressing an object’s position in space in a 60-bit pattern such that you could do a -findall- on this array, and boom, there you had a list of all the objects that were in your proximity, and then go ahead on that reduced set, and do all the distance calculation.” This bit pattern included your ship type, whether you were at peace or war with other teams, your x and y coordinates in space, and which display magnification mode you were using, all encoded in such a way that you were essentially asking -findall-, “Show me everybody within a certain distance of where I am.” It was a brilliant hack, amazingly arcane, yet it worked beautifully. “It made an incredible difference in the performance of the system,” Fritz says. And it was almost impossible to explain to anyone. “The mapping mechanism even after I documented it would still take a half hour to explain it to anybody,” says Miller. “And it would still take me another half a day to sit down and figure out what the hell it was I did again.”
“It seems magical to have a single mask be able to return a list of object candidates, but it worked,” says Daleske. “In my opinion, this saved the playability of the game.”
They didn’t stop there. Always on the hunt for reducing the TIPS load, they rewrote parts of the game so that the processing was distributed among the different users playing the game—in effect, spreading the TIPS load out over the whole player community rather than putting the load on any one user. The code was designed such that each user in the program would update the movements of torps and ships and check for collisions. “This in effect made the design of the game like a time-sharing operating system.” It would not be the first time that authors of multiplayer PLATO games would create system architectures that modeled themselves after the PLATO system itself. It just made too much sense to not do it that way.
In the summer of 1976, Daleske, Fritz, and Miller went to Des Moines to attend a Star Trek convention. Each brought a printout copy of Empire’s source code, and each got, in a “We’re not worthy” moment, their printout autographed by none other than Gene Roddenberry. (Roddenberry had visited UI in November 1974 for a standing-room-only auditorium lecture.)
EMPIRE printout signed by Gene Roddenberry, 1976 Credit 30
By August 1976, Daleske had run out of money for school and had wound up taking a job at Control Data Corporation in Minneapolis. But before he left, he worked out an arrangement with Gary Fritz and Chuck Miller to be the custodians of Empire, to continue maintaining the code. Around this time, copyrighting PLATO lessons was all the rage, now that CDC had begun its effort to market PLATO commercially, so they filed for a copyright. Ultimately, the agreement was that Gary Fritz and Chuck Miller would own the copyright, but Daleske’s and (at Daleske’s insistence) Warner’s roles would also be recognized and all four would share in any future royalties.
—
A key to the fun of Empire was its messaging feature, something that so many other multiplayer PLATO games before and after also offered. Empire users could send messages to all players, to a single specific player, or to an entire team. “Of course, you had to stop fighting to type out a message and send it,” says a former Empire gamer, “so this didn’t happen in battle, and you could turn messages OFF in case (as was thought of) a teammate would flood you with messages*2 during a heated battle, slowing down your terminal processing speed. But the point about messages was, you dogged your opponent. Get a kill, send them a message. You could be as nice or as cruel as you thought was wise, knowing they’d be right there in two minutes to battle with you again. It was a lot, mentally, like basketball, and no coincidence a lot of the guys that were Empire heads were also hoops heads.”
One day Bill Galcher and Tim Halvorsen, both part of the rat pack of PLATO student programmers at CERL, were sitting at their terminals down in the basement of the foreign language lab—a vast sea of some eighty PLATO terminals, the largest PLATO classroom in the world—conveniently located near their apartment. Galcher and Halvorsen were just doing their normal PLATO thing when a group of strangers, neither Bill nor Tim recognized, stopped by.
“Excuse me, are you Bill and Tim?”
“Yuh, hi. Who the hell are you?”
“Oh, I’m Gary Fritz.”
“Th-th-the Empire Gary Fritz? Wow!” A true PLATO god, right here in the foreign language lab!
Fritz introduced the others, all of whom had come from Iowa as well. Tim and Bill couldn’t believe these guys had come all the way from Iowa.
“We had to come.”
“Why?”
“Well, it’s Mecca!”
—
It was a night that started out just like any other Empire night on PLATO in the mid-1970s—the room full of terminals jam-packed, gamers flailing away at each other, all’s well with the Empire universe—when all of a sudden—holy Randu, look at that—a giant orange carrot appeared on-screen. Desperate messages began pouring out from everyone in the game:
“What the @(#*^&%* is THAT!?!?”
“I don’t know, but it just destroyed my ship!”
“Me too!”
“HEY!! It went into the Fed home system, and Earth is GONE!!!!”
Over the 1976 Christmas break, Chuck Miller and another friend who’d become hooked on PLATO, Jim Battin, modified Empire’s code to add a surprise element to the game—something right out of one of the most popular Star Trek episodes, “The Doomsday Machine.” Just as it had been depicted in the TV show, this Doomsday Machine was miles long and it ate whole planets for breakfast, spaceships for snacks, and like in Moby-Dick, upon which the original television screenpl
ay had been loosely based, this was the story of a ship’s captain obsessed with defeating a monster that could not be defeated. Except now, in Empire, there were thirty ship captains, all with the same obsession.
It didn’t take long that first night for everyone in the game to realize that the orange carrot didn’t care if you were a Fed, a Rom, an Orion, or a Klingon. It didn’t care if there were 101 armies or one army to defend a planet, or if the planet had a pretty-sounding name, good location. Nothing mattered, not to this monster, this relentless planet killer. It knew only one thing—like the great white shark in Jaws, the blockbuster that had come out two summers before, it lived to eat. The thing would just decide to go after some planet, and when it reached it, it would first wipe out the armies, huge gulps at a time, and then in the blink of an eye, the planet was just gone. Then it would turn and head for some other planet—there didn’t seem to be any pattern, it might be another nearby planet, or one across the galaxy. The unpredictability just added to the sheer terror of the thing.
Players abruptly suspended any sense of team loyalty, battle-just-for-the-sheer-fun-of-it, or mission to conquer the galaxy—they set aside everything that made Empire Empire—and they all joined forces to take on the killer carrot together.
The desperate messages continued flying by—Empire’s program memory only had space for thirty one-liner messages for the whole game, and when it filled up, the way it was supposed to work was the oldest message was erased, and the newest message added. In a normal active game, it might take a minute for the buffer to recycle, but now the messages were flying so fast, the buffer was filling and recycling itself in a mere ten, twenty seconds.
“Where is it!?!?”
“How do you kill it?”
“Don’t shoot at me, man, we’ve got this thing to get!”
“What have you tried…?”