← Back to contents

ASCII text — 10K bytes

SHARK! (C) 1989 Jim Webster
All Rights Reserved


         Technical Information About SHARK!
         --------- ----------- ----- -----

   SHARK! uses animation objects (or AnimObs) in a double-buffered screen to
achieve its results.  The shark, and it's prey the perch, are actually 
composed of six such AnimObs, one for each direction.  Each of these AnimObs
are in turn composed of three Blitter Objects, or Bobs, which show each
individual "frame" of the fish as it wiggles back and forth.  When the shark
is swimming horizontally from left to right, for example, you are seeing
a series of alternating Bobs that correspond to only one of six AnimObs,
while the other five shark AnimObs are not shown on screen.
   Each AnimOb also has x and y screen coordinates, as well as velocity
values in both x and y directions.  These velocity values determine how fast
the shark, or perch, can travel in a given direction, and play a large part
in determining how easy -- or hard -- the game is.  In beginner mode, for
example, the overall velocity of the shark is greater than the perch, making
the perch easier to catch.  There are a lot of other variables that go into
SHARK!, however, and the best way to describe them is to describe how you
can run SHARK! from the CLI.





   Customizing SHARK!: Command Line Arguments
   ----------- ------  ------- ---- ---------

   SHARK! can of course be run from Workbench simply by double clicking its
icon.  You can also run SHARK! by entering SHARK! into a CLI or Shell.  Just
typing SHARK! by itself will run it same way as clicking the icon, but if
you add command line arguments, you can have more direct control over the
"playability" of the game.
   The following is a summary of the possible command line arguments, and
the effect each has on the game.  PLEASE NOTE: the arguments must be entered
in the EXACT ORDER given below. Plus, even though SHARK! is a multi-tasking
game, use command line arguments AT YOUR OWN RISK!  I cannot guarantee that
your (hopefully recoverable) RAM disk will survive if you step into these
waters...


    Template:
    SHARK! <pic file> <meal sound file> <death sound file>
           <sharkhungerlevel> <sharkstarvelevel> <clickhungerunits>
           <highspeedhungerunits> <lowspeedhungerunits> <sharkvel>
           <addsharkcycle> <highspeedfactor> <lowspeedfactor> <hardercycle>
           <perchvel> <perchvelLIMIT> <perchvelADD> <randomchangeperch>
           <changeperchlevel> <changeperchlevelADD> <changeperchlevelLIMIT>
           <changeperchodds> <<changeperchoddsADD> <changeperchoddsLIMIT>

   If you wish to use the DEFAULT value for any of the variables above, you
should use a 'd'.  For example,

       SHARK! myocean d mydeathsound

will try to load a picture file named "myocean" as the background, will use
the default meal sound, and will try to load the sampled sound file
"mydeathsound" to replace the default death sound.
   An explanation for each of the arguments, plus their default values, is
as follows:

   pic file: name of an IFF picture file. Default: "ocean".  If "ocean" is
	not in the current directory, and no pic file is specified, you'll
	get a black screen as background.  If the specified pic file can't
	be loaded, SHARK!  will try to load "ocean".

   meal sound file: name of an IFF 8SVX digitized sound file. Default: a
	built-in "gulp" sound, i.e. no file is required.

   death sound file: also an 8SVX sound file. Default: a built-in "gasp"
	sound.

NOTE: You will still be presented with the option of playing at beginner,
intermediate or expert level, and if you make top ten your score will be
saved in whatever level you had chosen for that game.  However, if you use
any of the command line arguments described below, SHARK! will NOT use any
of the settings for your play level choice.

The next seven arguments relate to the shark only, and are all integers:

   sharkhungerlevel: Each time the shark and perch positions are updated and
	displayed onscreen, a counter ticks.  When this counter reaches the
	sharkhungerlevel value, the screen flashes to tell you that the
	shark is "hungry".  When the shark gets a meal, the counter is reset
	to zero.  Default value: 275.

   sharkstarvelevel: the number of counter ticks before the shark (assuming
	no meal) starves to death.  Default value: 400.

   clickhungerunits: When you click the left mouse button to change the
	shark's direction, you use up a little extra "energy", i.e. the
	counter is increased by this value.  This increase happens once
	each time you change direction.  Default value: 20.

   highspeedhungerunits: going fast (by pressing space bar) increases the
	counter by this value each time the screen is updated.  Default
	value: 3.

   lowspeedhungerunits: going normal speed increases the counter by this
	amount.  Normally it's lower than highspeedhungerunits.  Default
	value: 1.

   sharkvel: short for shark velocity.  Divide this number by 64 to get the
	total number of pixel positions the shark moves for each screen
	update.  The x and v velocity, when added together, equal this
	number.  Default value: 308.

   addsharkcycle: The sharks added here are the "baby" sharks in the lower
	right hand corner, of which 3 is the maximum.  Every arcade game has
	these, right?  addsharkcycle tells you how many perch you gotta eat
	before you get another spare.  Default: 10, i.e. every tenth meal
	you get an extra shark, assuming limit of 3 has not been exceeded.

The next two arguments are floating point decimal values that pertain to
the shark's speed up and slow down option.

   highspeedfactor: how much faster the shark goes when you put the pedal to
	the spacebar.  Shark's current speed (sharkvel) is multiplied by
	this number.  Default value:  1.5.

   lowspeedfactor: Default: 1.0/highspeedfactor, to bring shark back to
	original speed, but just for ducks you might try something bizarre.

The remaining arguments are integers, and pertain to the perch only.  As the 
game progresses, and you catch more perch, the perch become faster and more
elusive.

   hardercycle:  like addsharkcycle, this pertains to a cyclical event.  In
	this case, how frequently the perch become harder to catch.  Every
	hardercycle meals, a routine called makeharder() is called. 
	Default value: 15.

   perchvel: similar to sharkvel.  Default value : 308, i.e. shark and perch 
	start out with identical velocities.

   perchvelLIMIT: Perch get faster with each call to makeharder(), but only
	up to this limit.  Default value: 320.

   perchvelADD: This number gets added to perchval each time makeharder() is
	called.  Default value : 4.

   randomchangeperch: actually, this is a boolean value, so any non-zero
	value will make it TRUE.  If true, the perch will occasionally
	change direction at random; if not true, it will continue in a
	straight line.  Default value: true.

The remaining arguments pertain to the frequency with which the perch
changes direction.

   changeperchlevel: The perch travels in a straight line until the counter
	reaches this value, at which point the perch MAY change direction
	with each passing screen update.  Default value: 100.

   changeperchlevelADD: With each meal, the next perch MAY change direction
	slightly sooner than the pervious one.  This normally negative 
	number is added to changeperchlevel to lower it.  Default value: -8.

   changeperchlevelLIMIT: how far changeperchlevel can go before 
	changeperchlevelADD has no effect.  Default value: 40.

   changeperchodds: After the counter has reached changeperchlevel, this
	number is used in conjunction with a random number generator to
	determine if the perch actually WILL change direction; this check
	occurs after each screen update.  If changeperchodds is greater than
	a random number between 0 and 99, then the direction change will
	occur before the next screen update.  Default value: 10.

   changeperchoddsADD: in makeharder(), this number is added to
	changeperchodds to increase the likelihood of a direction change
	with each screen update.  Default value: 4.

   changeperchoddsLIMITS: makeharder() will not add changeperchoddsADD if
	changeperchodds has already passed or equaled this limit.  Any
	number above 99 has the same effect as 99.  Default value: 50, i.e.
	no better than 1 in 2 odds of a direction change.

   It may not be real clear to anyone but myself what all these variables
mean, but there's no reason why you can't experiment with them anyway.  In
particular, you may want to max out on speed, but at a certain point you'll
find that occasionally your "collision course" between shark and perch fails 
because the screen update carries the shark past the perch before the
collision test can be made.
   Here are a few interesting arguments you can make:

   Putting highspeedfactor = 2.0 really speeds things up nicely.
   Setting changeperchlevel to 0 will start perch changing direction right
away; setting changeperchodds to a high number, say 30, will really get the
fish jumping around.
   For longer games, set sharkstarvelevel and sharkhungerlevel up high, say
1200 and 1000.
   If you're playing with difficult settings (i.e., fast and shifty perch,
low starve level) you can prolong the game by reducing the number of meals
it takes to get an extra shark; say, set addsharkcycle to 5 instead of 10.

   If you find a particularly good game setting and want to repeat it, you
can make a batch file out of it and then execute the batch file.  For
example, use your favorite text editor and create a file named "xshark",
which consists of one line:

   SHARK! d d d 500 650 10 d d 350

   Make sure this line ends in a carriage return, save file, then enter from
the CLI or shell:

   execute xshark

   This will run SHARK! with sharkhungerlevel set to 500, sharkstarvelevel
to 650, clickhungerunits to 10, and sharkvel to 350; all other variables
will retain their default values.  Along with SHARK!'s support files you
should find several files, each beginning with x, which are batch files I've
already created for your enjoyment, curiosity or disgust.

   Enjoy.  Remember: just when you think it's safe to return to Workbench...

          Jim Webster
          1819 Addison #7
          Berkeley, CA 94703
          415-841-9325