
 _______________
|               |   Casey Schaphorst, Amiga Users of the Heartlands
|  H U S T L E  |   P.O. Box 1432 DTS, Omaha, NE 68101
|_______________|   Wind Dragon Inn (14/614), 402-291-8053
                    (C) Copyright 1987, All Rights Reserved


0. Preliminaries

   Essentially this software is released freely according to that
   great spirit of public domain software ... to avoid exploitation
   the author reserves all rights, with the following waivers...

   Permission is granted to distribute copies of this software
   provided that source and documentation are distributed together.
   Organizations are allowed to distribute Hustle! on a strictly
   non-profit basis only ... a disk-fee to cover cost of materials
   is the only compensation any such organization may seek. No
   permission to modify the source code, credits, or documentation
   is granted. Organizations seeking to distribute this software
   in conjunction with a product of their own must obtain prior
   expressed permission from the author.

   ... and that's enough of that ...


I. Revision History

   1.00  Originally written in MS-Basic for the TRS-80 model I.
   1.10  Bonus block feature added
   2.00  Complete re-write was performed in order to bring the game
           over to the Amiga.
   2.10  Worm movement redesigned to be driven by a circular queue
           which stores direction changes, rather than a queue of
           coordinates occupied by the worm.
   3.00  Multiple timed events were added. Jackpot feature and
           jackpot advance blocks were added.
   3.01  Mutant feature designed into the game, also "Special" Blocks.
   3.10  Number of event timers reduced by categorizing timers in
           general groups, rather than using one timer per block.
           Block plotting algorithm redesigned to be less computation-
           ally expensive. Obstacle feature incorporated.
   3.11  Special Block timer incorporated as a special mode of the
           Special Features Timer (SFT) to further reduce the number
           of timers polled each loop. Special Block requests are
           queued until the SFT is available.
   3.12  Occasionally catastrophic block plotting error fixed, along with
           minor tweaks ... minor bug fixes implemented. Scoring feat-
           ures altered to increase the playability of the game. New
           high score storage format implemented (with provision for
           conversion from 3.11 to 3.12 format). Still no sound.
   4.00  Not yet available ... conversion from AmigaBasic to C.


II. Instructions

   A. Object

   Hustle is an arcade-style game presently written in AmigaBasic for the
   Amiga. It was inspired by a similar, though much cruder, version of
   the game which was demonstrated to me on a TRS-80 in 1981. After seeing
   the demonstration, I decided that I could have done a much better job
   and set out to create my own improved version of the game.

   In Hustle! you control a voracious 'worm' which scrambles about a
   predetermined playfield in search of 'food blocks'. Your worm scores
   (eats) a food block simply by making contact with it, i.e. running
   into it. Food blocks appear at intervals on the playfield, and remain
   fixed in position for a variable amount of time before they 'spoil'
   and wink out. There are a few types of food blocks:

      (1) Regular       Most common type of food block. Hitting three
                        of these successively awards Bonus Blocks.
                        Hitting more than three successively is
                        similarly very beneficial.

      (2) Bonus         Bonus blocks appear after three *successive*
                        regular blocks are scored. There are
                        three kinds of Bonus Blocks: (1) Advance
                        Multiplier, (2) Score Jackpot, and (3)
                        Mutant. In Mutant Mode, you are virtually (!!)
                        indestructable for a certain period of time.

                        The Advance Multiplier Bonus Block can be
                        used to advance the multiplier to 5x. After
                        this, the Adv. Mult. Block awards the Jackpot
                        and schedules the appearence of a Special Block.

      (3) Special       Special blocks only appear at certain times.
                        They invoke one of several possible features
                        such as worm shrinking, elective mutant,
                        super Jackpot award, Obstacle clearing, etc.

                        An 'elective mutant' can be activated, once
                        achieved, at any time by pressing  the "-"
                        key on the numeric keypad (for those of you
                        who played before reading, this is probably
                        the tidbit for which you were searching).

                        When the multiplier reaches 5x, certain Spec-
                        ial blocks, when hit, will advance the
                        multiplier beyond 5x.

      (4) Adv Jackpot   Up to 3 of these targets may be in the play-
                        field at once. In general, the better you
                        play, the more adv. targets you get. The first
                        adv. Jackpot target appears when you achieve
                        a bonus multiplier of 2. Scoring these targets
                        awards no points, but increases the value of
                        the Jackpot.

      (5) Obstacles     Small "Jolly-Rogers" will appear on the screen.
                        These skull-and-crossbones objects must be
                        avoided at all times, since hitting one ends
                        your game. A game may have up to ten of these
                        Obstacles. Obstacles, like other targets,
                        move after a variable period of time.

                        Certain Special Blocks, when hit, will erase
                        all the Obstacles from the playfield and
                        award points for erasing displayed Obstacles.

   Scoring any type of food block will cause your worm to grow! Scoring
   Adv. Jackpot targets cause your worm to grow the least amount of
   all, while other food blocks induce a more vigorous growth.

   The game ends when your worm hits any type of object which isn't a
   food block, i.e. Obstacles, the walls of the playfield, or the worm's
   own trailing body (!!). In the beginning of the game, the worm's body
   is small and hardly an obstacle, but as food blocks are consumed the
   worm's own hulking corpus fast becomes the most formidable obstacle.
   Mutant mode causes the worm to be slightly less sensitive to head
   injury in a way which is left up to the player to figure out.


   B. Score/Status Window

   To the right of the playfield on the game screen is the Score/Status
   Window. The information in this window consists of. . .

      (1) Score         The number of points (calories?) which you
                        have accrued is displayed in the score box.

      (2) Block Value   The block value indicates the base (unmodified)
                        number of points that are awarded when a Regular
                        block is scored. Failing to reach Regular Blocks
                        before they spoil causes a penalty to be assess-
                        ed against the Block Value.

      (3) Multiplier    This indicates the factor by which the Block
                        Value is multiplied when points are awarded
                        for scoring a regular block.

      (4) Jackpot       The current number of points (calories?)
                        contained in the Jackpot is displayed next to
                        this prompt. The Jackpot will never contain
                        fewer than 1000 points. Failing to reach
                        Jackpot Scoring blocks in time causes some of
                        the nutitional value of the Jackpot to spoil
                        (yeah, right...).

      (5) Length        The number of millimeters in length that your
                        worm spans is displayed here. At the beginning
                        of the game, worms are 3mm. The maximum reason-
                        able size for a worm in this game is about
                        1.5 to 2 meters (!!!).

      (6) Kinks         The number of kinks (direction changes) in
                        the body of the worm is displayed here. Each
                        turn made by the head of the worm causes this
                        number to grow. As the tail catches up to and
                        turns around these kinks, this number shrinks.

      (7) % Occupancy   The total 'area' represented by the playfield
                        is 2250 square mm's. The number displayed here
                        is the percentage of this area which is occ-
                        upied by your worm. You will notice that when
                        occupancy reaches even 10%, the size of the
                        worm is problematic.


   C. Movement


   In its current inception, Hustle remains extremely easy to play ... all
   that one actually does during the game is control the movement of a
   voracious 'worm' which scrambles about its predetermined playfield in
   search of 'food blocks.' Movement is simple: one can only go up, down,
   left, or right. Movement changes are effected by pressing the following
   keys on the numeric keypad, or in the cursor arrow cluster:


                 8 (Up)                         Up Arrow
                 |                                  |
      (Left) 4 --+-- 6 (Right)         Left-Arrow --+-- Right Arrow
                 |                                  |
                 2 (Down)                      Down Arrow



   Direction changes are processed, in general, as soon as the proper
   key is pressed. Since this game is in 'real-time' movement occurs
   continuously unless the game is purposely paused.

   A direction change causes a 'kink' to occur in the trailing body of
   the worm. This kink will remain until the tail of the worm catches up
   to the kinked area, and changes its direction around the kink. The
   number of kinks in your worm is displayed in the scoring/status
   window. Certain scoring features depend on the number of kinks in
   your worm. Because it is these kinks which are queued, there is a
   certain limit to the number of direction changes which can be pending
   at the same time ... skilled players may wish to reduce the value of
   QSize to see how well they do when they must be conservative about
   the number of course changes they make (please be aware that no
   permission is granted to distribute modified copies of the source
   code).


   D. Scoring Strategies

   Much of this is left to the player to discover. One should remember
   that scoring three *successive* Regular blocks invokes the appearence
   of a Bonus type of block (Advance Multiplier, Score Jackpot, Mutant).
   Missing a Regular food block after previously hitting one or two
   causes the block counter to be zeroed, and the worm must start all
   over again and hit the next three blocks in succession in order to
   achieve a Bonus block. A count of successive Regular food blocks that
   have been scored is kept in the Scoring/Status window.

   Never miss a Score Jackpot block! Your Jackpot can grow to enormous
   proportions!


III. Caveats, etc.

   Hustle! v.3.11 is comparable in overall speed to v.1.10 which ran
   on the TRS-80 Model I ... "How can this be?!?", I hear you cry.
   1.78 MHz on a 8/16 bit Z80 vs. 7.16 MHz on a 16/24 bit 68000 ... one
   would expect that the Amiga is faster. In fact, it is MUCH faster,
   but much of the added speed is sacrificed in supporting the extended
   features ... v.1.10 serviced only one timer. In addition, the
   simplicity of the TRS-80 allowed an advantage: its memory-mapped
   display area could be used to store the playfield ... do you see the
   beauty of this system? Each character on the screen represented a
   byte in the memory-mapped display memory. I didn't need to DIMension
   a separate array in memory, since I could simply use the display
   memory to contain the playfield information. In AmigaBasic, the
   workings of display are, as yet, wholly alien to me. As a result
   many of the operations that occur are duplicated, i.e. a block
   must be plotted on the screen, and also mapped into the DIMensioned
   playfield grid (Grid(x,y)). In v.3.11+, each screen event has a corres-
   ponding Grid(x,y) event which is redundant ... and this induces some
   overhead that is not present in the TRS-80 version. In addition, a
   pixel on the TRS-80 is about the same size as a block of 8x4 pixels
   on the Amiga screen. As a result, the 'pixel-size' corresponding
   to each location in Grid(x,y) is an 8x4 block of pixels. It is well
   that the Amiga has hardware graphics support, since the 32:1 plotting
   of pixels that occurs on the Amiga, in this case, is still very
   much faster than the TRS-80 (...naturally...).

   The mouse serves no purpose in this game, and can be a nuisance if
   left in the playfield. Furthermore, activating the MENU button will
   permanently erase the strip of screen in which the menu bar appears.
   It's best just to move the mouse pointer completely off the screen.

   For best results, the key repeat delay in the preferences for the
   disk on which you have Hustle! installed should be set to a rather
   long value. Because the Amiga's own console input device queues
   up key-presses, and because Hustle! only processes one key per
   movement round, absent-mindedly leaving a key pressed while moving
   will cause a large number of key-presses to be queued. This will
   result in a delay of several rounds before you will be able to
   change directions ... the consequences are likely to be fatal.

   As with all AmigaBasic programs, the start of the game will be very
   slow and jerky until AmigaBasic has the opportunity to learn the
   addresses of all the labels in the program ... this can't be avoided.

   This program pushes AmigaBasic to its limit, in terms of speed, in
   order to achieve an 'arcade-style' of smoothness. Multitasking many
   kinds of other programs with AmigaBasic will slow the game down
   significantly.

   Later in the game, as more features are activated, servicing of
   the various game 'timers' (more like counters) becomes more freq-
   uent. This will cause the game to drag somewhat, especially when
   several timed events are pending at the same time. The decrease in
   performance is noticable, but not intolerable.

   Re-writing this game into an object executable form will eliminate
   all of these problems.

   For those of you who are familiar with Amiga Hardware, esp. the
   display, you may have some ideas about how the efficiency of this
   game can be improved ... I would enjoy hearing them:

                          Casey Schaphorst
                    Wind Dragon Inn (Fido 14/614)
                            Bellevue, NE
                   402-291-8053 (300/1200/2400 bps)
   

