zookeep: MAME ROM Information.
Zoo Keeper (c) 1982 Taito America Corp..
Zoo Keeper is a superb, fast-paced arcade game in which the player takes control of Zeke the zoo-keeper. Many of the animals at Zeke's zoo are running wild and have captured Zeke's girlfriend, Zelda. Zeke must recapture as many animals as possible and rescue his sweetheart from the animals' clutches.
Zoo Keeper features 2 different, alternating play fields, with each level having its own task to complete; as well as a final 'bonus screen'. The three levels are as follows :
On the first play field, players must move Zeke around the outside of an animal enclosure, constantly re-building the enclosure wall that the animals are set on destroying. Any wild animals that are loose must be jumped over or the player will lose a life. The level's timer is represented as a fizzing fuse, and along this fuse are a number of bonus items such as beer or a net for catching escaped animals. When the timer's fuse reaches an item, it will appear on screen and can be picked up. Once the timer makes it to the word 'End', the current level is completed and play moves on to the next level. The bonus items that occasionally appear include mugs of beer, ice cream sundaes, clover clubs, watermelons, etc.
If Zeke manages to pick up a net, he will be able to capture the animals and put them back into the Zoo. The net will eventually disappear and the captured animals will try to escape once more by breaking through the enclosure wall. Zeke will have to continue building the wall around the Zoo until the time is up. At the end of the level, bonus points are awarded for every animal inside the wall. Animals found on this level are snakes, moose, camels, rhinos, elephants and a lion.
On the second, more difficult play field, Zelda is tied to a palm tree and Zeke must rescue her by jumping to the top of the screen via a series of moving platforms; dodging the coconuts thrown by a mischievous monkey. On each of the platforms, various foods and drinks can collected to earn extra points. Sometimes, one of the ledges will have a 'Free Game' sign that will grant the player a free credit. While Zelda is tied up, she says 'save me', and whenever Zeke gets knocked out by one of the deadly coconuts, she says 'Oh, no!' If Zeke makes it all the way to the top and rescues her, she says 'My Hero' and a bonus of 5000 points is awarded.
The first and second screens are alternated before the player finally reaches the third and final 'bonus screen'. Here, Zeke must jump over the herds of charging animals that are running from a cage at the foot of an escalator. Zeke must reach the escalator behind the animals' cage and make his way up to the next floor, where a second escalator - replete with more charging animals - awaits. Zeke must reach the top of the second escalator to rescue the trapped Zelda.
After Zeke has rescued Zelda on the final screen, the game begins again with an increased level of difficulty.
- TECHNICAL -
Upright cabinet dimensions : 67'' (170cm) High x 24'' (61cm) Wide x 30'' (76cm) Deep.
Upright cabinet weight : 280 lbs (126kg).
Prom Stickers : ZA03-ZA10 / ZV03-ZV10
Main CPU : (2x) M6809 (@ 1.25 Mhz), M68705 (@ 1 Mhz)
Sound CPU : M6802 (@ 921.6 Khz)
Sound Chips : Discrete
Screen orientation : Horizontal
Video resolution : 256 x 240 pixels
Screen refresh : 60.00 Hz
Palette colors : 1024
Players : 2
Control : 4-way joystick
Buttons : 1
- TRIVIA -
Originally called "King Crab", Zoo Keeper was one of the few American-designed games that Taito released (with "Space Dungeon" and "Qix" being two others).
Here's a story straight from John Morgan, one of the programmers : "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 castanets 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 in between 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 independently 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 switches to select among 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 separate 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 & 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 monotony. 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 pre-determined 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 phenomenal 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 initiall 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.".
Shawn Cram holds the official official record for this game with 21,849,650 points on 06/15/2003.
- UPDATES -
Early machines had a bug in which the player could turn the machine off and on and get one or two free credits.
- SCORING -
As time progresses, you can pick up items that will give you points. Among one of the items is a white mallet. When you get the mallet the background will turn blue for about seven seconds. Any animal you come in contact with will return to the cage. In round one, for example, where you have to tend to five elephants, the first three items are mugs of root beer, worth 120, 250, and 500 points; the white mallet, the last item, scores 1,000 points. When time runs out, the stage is completed, and points are scored for every animal that is still inside the wall. The six animals, in order of ferocity :
Elephant : 250 points.
Snake : 500 points.
Camel : 1,000 points.
Rhinoceros : 2,000 points.
Moose : 4,000 points.
Lion : 30,000-60,000 points.
When not tending to the wall, you can jump over the animals to score points :
One animal : 100 points.
Two animals : 500 points.
Three animals : 2000 points.
Four animals : 6000 points.
Five animals : 15,000 points.
Six animals : 30,000 points.
Seven animals : 60,000 points.
Eight animals : 120,000 points.
Nine animals : 250,000 points.
Ten animals : 500,000 points.
Eleven animals : 1,000,000 points.
- TIPS AND TRICKS -
* Zoo Keeper contains a little-known free game feature. You can go into option and set the 'Free Game Rate' to 99 to make it appear more frequently. If it's set to 0, it won't come out at all. The Zoo Keeper Flyer actually has a note saying that the free game feature maybe prohibited in some states! - The free game icon pops up on one of the platforms on the 3rd screen (coconuts). It comes out like one of the bonuses, but instead it says 'Free Game' in a little box. When it appears, it has it's own little tune too (and it usually pops up opposite of where you are, so if you are at the bottom of the screen, it will come out at the top).
* Use A Benefit Free Try : Start the game, build the first wall of bricks a bit without jumping and immediately crash into an animal. If you have never jumped before, you won't lose a life. The game will simply advise you that you need to jump over animals to avoid them and round 1 will start again from its beginning. Best of all, you get to keep the wall of bricks that you built a bit. Of course, this being the first level, chances are you don't exactly need the extra help - but hey.
* An Obscure Trick : On the coconut boards, when you jump onto the top ledge, you get some points. Jump off the ledge then onto it again; you'll get twice as many points. And again, for four times as many. The bonus keeps doubling until 300K per land. The best board to try this on is the board where the ledges are invisible. It's kind of hard to jump on then off, but so few coconuts are thrown that you have lots of room for error.
- STAFF -
Designed by : John Morgan, Keith Egging
Programmed by : John Morgan, Rex Battenberg, Mark Blazczyk
Music and sound effects by : Tom Fosha
- PORTS -
* Consoles :
Sony PlayStation2 (2005, "Taito Legends")
Microsoft XBOX (2005, "Taito Legends")
* Computers :
PC [MS Windows] (2005, "Taito Legends")
- SOURCES -
The Giant List of Classic Game Programmers, http://www.dadgum.com/giantlist/
0.29 [John Butler, Ed. Mueller]
SETUP and TEST MODE:
- The first time you run the game, it will ask the location. You can change the name using F5/F6 and F2, then F1 to proceed through all the configuration screens, or just reset (F3).
- Keep F2 pressed to enter test mode, then F1 to advance to the next test.
- There are no dipswitches, press F1 to enter the service mode, then F1=Next screen, F2=Next line, F5=Up and F6=Down.
- 0.122u6: Changed M68705 CPU4 clock speed to 4MHz.
- 0.115u2: Changed VSync to 76.293945Hz.
- 10th December 2006: Mr. Do - We have Zoo Keeper bezel, cleaned up by Ad_Enuff.
- 0.37b16: Changed M6802 CPU3 clock speed to 921600 Hz, M68705 MCU to 1MHz and palettesize to 1024 colors.
- 0.35b4: Fixed cpu1 rom ($8000).
- 28th February 1999: Nicola fixed Zoo Keepers from crashing on the first bonus life stage.
- 0.35b6: Replaced M6803 CPU3 with M6802 and M6805 CPU4 with M68705.
- 0.35b4: Added new maincpu ($8000).
- 0.35b3: Nicola Salmoria added clone Zoo Keeper (set 2) and properly emulated the 68705 protection in Zoo Keeper. Added M6805 (2MHz) CPU4 and 3rd coin slot. Changed description of clone 'Zoo Keeper (set 2)' to '(set 3)'. Renamed (zookeepa) to (zookeep3). Known issues: Every time you start the emulation, you get a free credit. This is due to the 68705 based protection.
- 0.33b7: Nicola Salmoria added clone Zoo Keeper (set 2). Changed parent description to 'Zoo Keeper (set 1)'.
- 0.31: John Butler merged the Qix and Zookeeper drivers, they now also support rotation.
- 0.30: Changed description to 'Zoo Keeper'.
- 0.29: John Butler added Zookeeper (Taito 1982). Early attempt at a Zookeeper driver, based on the Qix one, which unfortunately doesn't work yet [John Butler, Ed Mueller]. ZooKeeper uses the same hardware as Qix (two 6809 CPUs). One CPU for data and sound and the other for video. Communication between the two CPUs is done using a 4K RAM space at $0000 which both CPUs have direct access. FIRQs (fast interrupts) are generated by each CPU to interrupt the other at specific times. The coin door switches and player controls are connected to the CPUs by Mototola 6821 PIAs. These devices are memory mapped as shown below. The screen is 256x256 with eight bit pixels (64K). The screen is divided into two halves each half mapped by the video CPU at $0000-$7FFF. The high order bit of the address latch at $9402 specifies which half of the screen is being accessed. Timing is critical in the hardware. The data CPU must have an interrupt signal generated externally at the right frequency to make the game play correctly. The address latch works as follows. When the video CPU accesses $9400, the screen address is computed by using the values at $9402 (high byte) and $9403 (low byte) to get a value between $0000-$FFFF. The value at that location is either returned or written. The scan line at $9800 on the video CPU records where the scan line is on the display (0-255). Several places in the ROM code wait until the scan line reaches zero before continuing.
- 26th April 1993: Dumped Zoo Keeper (set 1).
Recommended Games (Animals):
Video Vince and the Game Factory
Romset: 78 kb / 20 files / 43.0 zip
MAME XML Output:
|    ||<game name="zookeep" sourcefile="qix.c">|
|    ||    ||<description>Zoo Keeper (set 1)</description>|
|    ||    ||<year>1982</year>|
|    ||    ||<manufacturer>Taito America Corporation</manufacturer>|
|    ||    ||<rom name="za12" size="4096" crc="4e40d8dc" sha1="dd7923dcb55a2a1ae0f2029caf5a8904a9ebe8b1" region="maincpu" offset="8000"/>|
|    ||    ||<rom name="za13" size="4096" crc="eebd5248" sha1="ebe7f8c436bfefa4236f603fbcbd38d2f4cfd2bd" region="maincpu" offset="9000"/>|
|    ||    ||<rom name="za14" size="4096" crc="fab43297" sha1="daa5a780bc9f171da0f6db5319b1519caa09c6c9" region="maincpu" offset="a000"/>|
|    ||    ||<rom name="za15" size="4096" crc="ef8cd67c" sha1="f3a2e12ccfa45eb77c2a6e0d9cc0601b99273fd3" region="maincpu" offset="b000"/>|
|    ||    ||<rom name="za16" size="4096" crc="ccfc15bc" sha1="56ac6e89825fcde9cf7aeb5d0765a02f5474174a" region="maincpu" offset="c000"/>|
|    ||    ||<rom name="za17" size="4096" crc="358013f4" sha1="dd3fae69bf460f89c71e7c78d229dd86605c5950" region="maincpu" offset="d000"/>|
|    ||    ||<rom name="za18" size="4096" crc="37886afe" sha1="a0cc902b2d253466e21c4fbf9d3339069fe79ebe" region="maincpu" offset="e000"/>|
|    ||    ||<rom name="za19" size="4096" crc="bbfb30d9" sha1="bc6bd5525b159bee7b08b6967cd3088b7bd10fee" region="maincpu" offset="f000"/>|
|    ||    ||<rom name="za5" size="4096" crc="dc0c3cbd" sha1="8335cd91bbacc680a3a98a5242d4cb5a6f61b2b5" region="videocpu" offset="a000"/>|
|    ||    ||<rom name="za3" size="4096" crc="cc4d0aee" sha1="05c0025e96b432088b46100051a2c780e46b7457" region="videocpu" offset="10000"/>|
|    ||    ||<rom name="za6" size="4096" crc="27c787dd" sha1="1142790d875573d0c39d846aba4b06946fd2bc88" region="videocpu" offset="b000"/>|
|    ||    ||<rom name="za4" size="4096" crc="ec3b10b1" sha1="44303ab923d776052ca4d2d09a6a4315d67adc4b" region="videocpu" offset="11000"/>|
|    ||    ||<rom name="za7" size="4096" crc="1479f480" sha1="bd0e9eead0f1213eb3b9653c73257bc704346ab0" region="videocpu" offset="c000"/>|
|    ||    ||<rom name="za8" size="4096" crc="4c96cdb2" sha1="67e506462317d882c4e5c2e16318411d4958ac63" region="videocpu" offset="d000"/>|
|    ||    ||<rom name="za9" size="4096" crc="a4f7d9e0" sha1="a958b4d305bb397aa46d8fdab9dc7e472237ca11" region="videocpu" offset="e000"/>|
|    ||    ||<rom name="za10" size="4096" crc="05df1a5a" sha1="30797838c25cca038023c188cd9fa45277c4190d" region="videocpu" offset="f000"/>|
|    ||    ||<rom name="za25" size="4096" crc="779b8558" sha1="7312e63c23d92c9c52e93cc445a718bc8fe35a0a" region="audiocpu" offset="d000"/>|
|    ||    ||<rom name="za26" size="4096" crc="60a810ce" sha1="d97e5acea0ef1c208f8e5e95024c83dd6bc9b028" region="audiocpu" offset="e000"/>|
|    ||    ||<rom name="za27" size="4096" crc="99ed424e" sha1="e4e543dcb77f153aeb78904d11b95381d039299e" region="audiocpu" offset="f000"/>|
|    ||    ||<rom name="za_coin.bin" size="2048" crc="364d3557" sha1="049d0759750c576187053306e07984b1e5877df7" region="mcu" offset="0"/>|
|    ||    ||<chip type="cpu" tag="maincpu" name="M6809" clock="1250000"/>|
|    ||    ||<chip type="cpu" tag="videocpu" name="M6809" clock="1250000"/>|
|    ||    ||<chip type="cpu" tag="audiocpu" name="M6802" clock="3686400"/>|
|    ||    ||<chip type="cpu" tag="mcu" name="M68705" clock="4000000"/>|
|    ||    ||<chip type="audio" tag="lspeaker" name="Speaker"/>|
|    ||    ||<chip type="audio" tag="rspeaker" name="Speaker"/>|
|    ||    ||<chip type="audio" tag="discrete" name="DISCRETE"/>|
|    ||    ||<display tag="screen" type="raster" rotate="0" width="256" height="256" refresh="76.293945" pixclock="5000000" htotal="256" hbend="0" hbstart="256" vtotal="256" vbend="0" vbstart="256" />|
|    ||    ||<sound channels="2"/>|
|    ||    ||<input players="2" buttons="1" coins="3" service="yes" tilt="yes">|
|    ||    ||    ||<control type="joy" ways="4"/>|
|    ||    ||</input>|
|    ||    ||<driver status="good" emulation="good" color="good" sound="good" graphic="good" savestate="supported" palettesize="0"/>|