John Morgan's Story of Zoo Keeper

Giant List archive, January 1, 2001

I always thought that Taito's strikingly original Zoo Keeper was conceived in Japan, and details about games developed in Japan are few. In late 2000 I happily discovered that the game was from Taito America in Elk Grove Village, Illinois. Here's the story of the 1983 coin-op classic Zoo Keeper from one of the primary programmers, John Morgan. This is something I honestly never expected to read.

In 1982, Keith Egging was the Director of Creativity (or some weird title like that). He always had a human skull on his desk which opened up on a hinge and was filled with Hershey's kisses. One day a TV news crew came over to do some interview, and Keith showed them around. He took them back into our area and really played it up (feed them some pretty thick bull which they really ate it up). He took them to the farthest office of cubicles and said that this was DEEP THOUGHT—where all the heaviest thinking took place. Of course this was just made up (the office being picked for it's distance only), but hey, they bought it. The main programmers (me, Mark Blazczyk and Rex Battenberg) took off on this and other of Keith's tall tales and frequently made up whoppers about everything under the sun to one up each other with our far fetched stories. Pretty cool for those days.

Anyway, Keith came up with a weird game idea which I was going to program (back in those days there was only one programmer for pretty much all aspects of the entire game). His idea was to have a game where a crab would run around a rectangle on the screen. There were little eggs with faces on them that came out of the inside of the screen and would bounce off the rectangle and take bites out of it. When they went all the way through to the outside of the rectangle they would become tadpoles running around the rectangle edge. If the tadpole touched the crab it would be killed.

The crab would move around the screen and jump over the tadpoles, with it's claws opening and closing. To repair the wall damage where the eggs bit off chunks of the wall, you pressed a button and a thick line would shoot across the screen from underneath the crab and away from it (horizontally or vertically as appropriate). We were going to use the sound of castinets when this line was fired out—he really loved that sound.

This is about the stage where Keith's input finished, and the rest of the changes were almost entirely from my ideas.

Now, as a sidenote, we had no way to get art into the games. So I wrote some software that would allow you to use a modified control panel (with more buttons) so that you could create art (pixel by pixel) on the screen itself, complete with animation control. We hired a part time animator to use it to design the animals, complete with great motion for the time.

Secondly, we had to have sound effect and music. Tom Fosha (another programmer and a bit of a sick puppy in his own right) had been playing around with code to do some sound effects. Note that every sound sample was computer controlled (just like the graphics were). I looked at them and saw that they all either played with the volume of the samples (thus affecting the amplitude), or the duration inbetween the samples as they were output (thus affecting the frequency). I decided to write a single unified piece of code from scratch where you had two 24 byte buffers. One buffer held the volume levels for the looped sample (fairly traditional), and the second held the duration from each sample to the next (cutting a bit of new ground here). I then allowed each of these two waveforms to be independantly controlled. You could smoothly morph a waveform from one to another (again pretty new for that time) or you could slowly add waveforms. You could avoid clipping of the signal (where a value is too positive and becomes negative etc) or you could force it to occur (this had some really weird sounding effects). Since 24 samples is a multiple of 2, 3, 4, 6, 8, or 12, you could have samples which had different frequencies in the samples themselves.

They made me a switchbox with 8 switches, so that I could try out code and use the swithes to select amoung 16 voltage waveforms, and 16 frequency waveforms which combined with the particular controlling code I was trying. With trial and error, I came up with a zillion really weird sounds that I had never imagined. The ones I liked I kept, and that is where all of the sound effects came from in the game. They were all experimentally procedural.

For the musical tunes, Tom Fosha wrote a seperate multi-tone player, and composed the tunes himself which were used for all the melodies in the game. He was really into jazz, and that came over beautifully in the game.

OK, back to the game. I wanted to somehow allow you to shoot out more walls to hold in the eggs. So I put little locks on the screen randomly. When you shot a line which hit a lock, it would shoot two lines out perpendicular to your line. If any of these lines hit another lock, you would get a cascade effect. When enough locks appeared it could be pretty cool visually. But the problem was that so many walls evenly distributed could trap the eggs near the outside of the rectangle (instead of the middle) and they'd just bounce and eat their way out to the outside anyway.

So then I made the distribution of the locks more towards the four corners. This tended to make solid walls around the outer edge, which helped, but you could still trap the eggs near the outside and they'd still escape. That's about the time when I said that seeing a big crab get killed by eggs which turned to little tadpoles was a bit goofy. I suggested that we change the crab to a person who ran around the rectangle and where he ran he would lay bricks which would fill from the outside in. The brick laying would stop if there was an enemy there so that there would be a clear space for it to return to the center.

I suggested we change the eggs to animals which kept their form when they escaped, and would similarly kill the guy if he didn't jump over them. Since the guy was trying to keep the animals in then it seemed to make sense that he was a Zoo Keeper (I believe this was in a meeting with Ray Heidel, the Engineering Director). So we put a small cage in the center from which the animals escaped. I thought it would be cool to allow the Zoo Keeper to have a net which he used on the escaped animals which would put them back in the cage. And so I made the time line fuse which burned down, and along it were nets which would briefly give the Zoo Keeper this power. The actual art made the net look more like a frying pan (by accident), but that seemed pretty cool so I kept it and gave it an appropriate sound and effect when hitting the animals. I thought it'd be great to flash the entire screen for 1 frame when you did this. It had a pretty amazing subliminal effect on the excitement level.

In the original version, when the animals escaped the rectangle they would randomly decide whether to run clockwise or counter clockwise. This made it hard to survive since you couldn't predict their behavior if they escaped near you, and having roughly half of the animals running each way made it pretty hard to survive for long by jumping over them. So I decided that when the animal escaped, it would run in the direction away from you (where you were at that time). This way they wouldn't escape near you and run into you, so you'd have a lot of warning before they got you.

I made the reward for jumping over animals based on how many animals you jumped over. For each extra animal I roughly doubled the score. This continued for as many animals there were maximum in the game (16ish or so?, it's been a long time :-) So if you jumped a really massive number of animals you would get a gazillion points. But how do you get the animals to clump up for such a massive jump?

That's when I decided to remove the initial bricks around the rectangle at the start of a level. I delayed the initial animals escaping the cage, to give you time to drop down and start laying the wall as you saw fit. The trick was to run in one direction and cover just slightly over 50% of the rectangle with a wall and then just stop. This would allow the animals to immediately escape, but they'd always run away from you which forced them to all go in the same direction. And since they were in the same direction it was easier to survive, and since different animals moved at different speeds, they would tend to clump together periodically so you could wait for that to happen and then jump over a huge number of animals in a single jump—and voila—you could get huge scores!

Now, when the net came out, you would only want to knock in the animals that were running opposite to the direction of the herd. This you'd try to stand near a hole to force the escaping animals to run in the same direction as the herd.

This pretty much completed the game play of the initial level. It was really fun, but I wanted to have something more to break up the monotiny. So I came up with the idea of the ledge screen. You started at the bottom and could jump up on the moving ledges to get to your girl and save her. She was help captive by a gorilla throwing coconuts at you which would kill you (yeah, a bit of inspiration from Donkey Kong was going on here). I think it was Keith who came up with the name of Zeke and Zelda for the Zoo Keeper and his lady.

I decided to make the ledges come out in a predetermined sequence to reward the experienced player in that they would learn their preferred sequence of jumps to get safely to the top. This level was pretty cool, but I wondered what else I could do.

So, I came up with the idea of the escalator screen (similar to the ledge screen but with a different game play layout). This time when Zeke got to the top Zelda would give him a kiss.

Now you could cycle between these 3 levels for as long as a person could survive. If they made it far enough to loop back to levels they'd already done, I'd just speed things up a bit each time. Eventually they wouldn't be able to survive. For added coolness, I made the last escalator level so that when you saved Zelda a curtain would draw down over both of you, and a whole bunch of kisses would be all that appear. I wanted to make the kisses go up and down but we thought that would be a bit too much :-)

Anyway, I got to be pretty good at the game and could survive longer and longer. I decided to add a visually frantic feel to the game at these levels by cycling the color of the outer background. This massive color cycling effect would slightly distort the screen image due to power blooming of the monitor. This really cranked up the adrenaline. I'd survive so long that I'd have the maximum number of animals out in almost the same direction and jumping almost all of them at once occasionally for some phenominal score. This whole time I did this I was wrenching the joystick like I was going to break it off and the whole machine was rocking like the back seat in a drive in. I knew something was happening here.

Then I survived so long that I came to a ledge screen where the ledges had disappeared completely. Seems I found a bug. But the thrown coconuts were bouncing off of them even though they were invisible. So I gave jumping a try. Remember that the ledge sequence was completely predictable and I had gotten quite familiar with it. So I actually had a chance of getting to the top. That's when I decided to not fix the bug, but make it a feature (I guess the old saying "It's not a bug, it's a feature!" really did apply here).

We were ready to test the game. I put in the needed diagnostics so the operator could control it. Since speed of the game was key to how long people could play, I made two operator speed adjustments. The first controlled the speed when a person initially joined. The second controlled the speed when a person played for a long time. We put the machine out on test and I watched the players and timed them with a stopwatch. Then I tweaked these adjustments until they seemed optimal for fun and earnings.

The game went out in 1983 and was about the number three game of the year nationwide, which was quite good. Unfortunately, this was right at the time when the whole arcade market took one huge dive, so the game only sold a fraction of what it would have if completed just a year earlier. As Keith said, "The cash box is a cruel mistress!" It is indeed.