Donut Dilemma is my best TRS-80 Model 1 game.
It is a platform style arcade game like the popular Donkey Kong in the arcades and featured nine different and progressively challenging levels.
The inspiration for Donut Dilemma was my family's Donut Kiosk that we owned
at the time. We had this donut making machine where you filled one end with
dough mix and fresh hot donuts would come out the other. The dough was
automatically dropped into the hot cooking oil, complete with hole in the
middle, via a syncronised plunger. A conveyer belt system would then slowly
push the donut across the oil as it cooked one side of the donut. Then, halfway
across, it would flip the donut over so as to cook the other side. Once cooked,
a convey would lift the donut up and out of the hot oil and into a rotating
dish for the donuts to cool. They were picked up, sugared and packed into
a paper bag for human consumption. Occasionally, something would go wrong,
usually in the part that flips the donuts over, and the donuts would get
all messed up. Seeing this one day, a revelation hit me. Why not do a game
based on a donut factory where everything has gone wrong?
Original Story Pretext
"Angry Angelo has raided Antonio's Donut Factory sending the entire complex
amuck! Donuts have come alive and are jumping around in wild frenzies. Machines
have gone out of control throwing cooking fat, dough and icing sugar everywhere.
You must help poor Antonio climb ladders, jump platforms and ride elevators
to reach the top floor and shut down the factory's power generator which
will restore law and order. But hurry for time is running out!"
In all my previous arcade games, I only had to code for a single scenario
such as the grid in Neutroid or the arena of The Gladiator. In this one,
I had to create nine varying scenarios. So, in starting, I had visions of this
huge and complex program of individual blocks of code for each level but
as it turns out, it was very easy. I found that by designing each level with
common elements, the single main block of code could do all the levels and
would only need to branch out to an individual part to handle the unique
elements of each level. For example, level one had no unique elements so
there was no need for additional code. Level two included the "fat spurters"
so after doing the main parts, it branched to the "fat spurter" code and
animated that part. The third level would branch to the "Sugar Sprinkler"
and so on.
Level 1 - Ladders and Platforms
Level 2 - Fat Spurters
Level 3 - Sugar Sprinkler
Level 4 - Cream Blaster
Level 5 - Conveyer Belts
Level 6 - Chopper Block
Level 7 - Mad Platforms
Level 8 - Berserk Bucket
Level 9 - Power Generator
As in all my games, all graphics were designed on TRS-80 grid paper. No animation
utilities back then! All the levels were designed on this grid paper and
then I wrote the code to recreate them. The basic graphic blocks would be
drawn up and stored into memory using a short BASIC program I wrote and the
code would then transfer the graphics to the main screen. All graphics were
double buffered. I would set aside an area of memory as a copy of the video
display memory. Here I would draw up all the graphics for the next frame
and when done, copy this page to the main display for viewing. This cycle
would repeat itself for each frame. This provided a clean update of each
frame without seeing any graphics being drawn up. One problem was the unsightly
screen interference of the TRS-80. The TRS-80 could not display video while
data was being written to the video memory so when this happened, an ugly
black "tear mark" would appear on the display. Unfortunately, the TRS-80
had no way to syncronise the video beam so that screen updates didn't occur
while it was drawing the display and so all games suffered from this. This
problem wasn't rectified till the TRS-80 Model 4.
Sound effects were all generated by my usual method of creating sound tables
as I had done for Neutroid and The Gladiator. The way this was done was to
write short BASIC programs that created the sound effect data that I wanted.
The sound routine would simply read a byte from these tables and send it
straight to the sound port (cassette port). In order to prevent the game
from freezing while it played a sound effect, I made the routine only play
a short number of bytes at a time and then return to the rest of the code.
On it's next pass, it would play the next block of bytes and return to the
code. This would repeat until the entire table was played. In the meantime,
another sound table could be triggered and the table pointer would shift
to a new table. This didn't allow for two sounds to occur simultaneously
but it did ensure that when a new sound was to occur it happened on cue.
There were no interrupts on the TRS-80 available to setup an interrupt driven
sound routine so this was the best I could do and by adjusting the number
of bytes played on each pass through the sound tables, I could adjust it
so that complex sound could occur without creating any animation stutter.
Donut Dilemma was one of the few (maybe only?) game on the TRS-80 that played
music in the background while you played the game. The music wasn't great
but it was a feature I hadn't seen on any other TRS-80 game at that time. Of course, we
all know how annoying background music can be while playing a game so an
option to disable the music but keep the standard sound effects was included.
If I could have marketed the game properly in the US via a big distributor
like Adventure International or even Big Five Software, I believe it could
have been a big seller. But alas, I was just a small player operating
on a limited budget (nothing) far away from where the real action was, so
again, all my sales were restricted to club meetings and catalogue postouts
to past customers. I felt that this game had so much potential so I did create
a small paying ad into a major computer magazine. This got me a few more
sales and to date, Donut Dilemma was my best selling TRS-80 Model 1 game.
I believe Donut Dilemma to be my best TRS-80 Model 1 game and could have equalled many of the great games of that era on the TRS-80 had it been promoted in the US.