zblast SD - 4k entry for 2003 Minigame Compo

Public domain by Russell Marks (rus@svgalib.org)
Compression code by Paolo Ferraris, used with permission.

for 128k Spectrum (only)


NB: It won't work if a Microdrive or any other additional hardware
which effectively moves PROG is being used. So don't do that.

NB2: If it hangs when you run it, you're not running it on a Spectrum
128 in 128 mode! *Make sure* you're emulating a 128 before loading.


zblast SD is a fairly manic shoot-em-up. It's a simplified rewrite of
a vector-based game I originally wrote in 1993 (see
http://www.svgalib.org/rus/zblast/ ).

When you first load the game, it'll decompress. The border flashes for
a few seconds while this is going on.

The basic idea of the game is this - shoot everything.

That said :-), some other details:

- Getting hit loses you energy. But when your ship appears blue (after
  being hit), it cannot be harmed. If you get hit when your energy is
  at zero, it's game over.

- If you don't get hit at all during a wave, you get 10 extra energy
  points. You'll probably want to stock up on these in the earlier
  waves.

- The large purple and blue baddies generate smaller baddies, so try
  to kill off the big baddies first. If you don't, you'll soon be
  facing a wall of bullets. :-)

- There are 20 different waves, only 3 of which are random (and even
  those remain basically the same). If you finish all 20, you start
  again, but with hardly any speed control on the game (so it's a
  *lot* faster most of the time). If you finish all 20 yet again, you
  repeat them indefinitely with no speed control at all. :-)

- Don't assume that all baddies of the same type take the same number
  of hits to destroy. It varies. (Though it's preset rather than
  random, so it'll always be the same on a wave-by-wave basis.)

- The collision-detection in zblast is intentionally biased; the
  blaster things at the left/right sides of your ship don't count as
  part of it as far as being hit is concerned, only the middle bit
  counts. But on the other hand, you do have to shoot the main body of
  the larger ships for it to count as a hit.

- The debris which appears when you destroy a baddie is harmless.

- The first few levels are a bit dull, because I didn't want it to get
  hard too early (a mistake I made last year with dotathon). Things
  start getting a bit more interesting at around waves 5 and 6.

For control you have the option of either keyboard, or Kempston
joystick (most emulators support Kempston joystick emulation, though
you may have to enable it). At the title screen, press 1 to start the
game using keyboard control, or 2 for joystick.

The keyboard controls are:

Q      up
A      down
O      left
P      right
Space  fire

You can hold down fire to get auto-fire, but you should be able to get
a faster firing rate by hammering the button. Still, you're best off
using auto-fire most of the time, and saving the hammering for when
you really need a burst of speed.

I should note that, while the game runs absolutely fine on a real
Spectrum or with decent emulation, if you run it under emulation on
older PCs with newer emulators (for example) it can struggle. This is
because the game uses the 128's dual screens for double-buffering,
which is unusual on the speccy (the only commercial game I can think
of that used this approach was Ghouls 'n' Ghosts, but demos commonly
use high-speed screen switching for certain effects) and requires the
emulator to do a *lot* of redrawing. So check your emulator is running
at 100% speed before writing the game off as too slow. :-)

FWIW, a few notes on differences from the original Linux version:

- Sprite-based 2D rather than vector-based on a rotated 3D plane. The
  original's play area is much taller/deeper.

- The two-channel music is a bit crude by comparison :-), and rather
  faster.

- 20 waves rather than 35; 5 enemy types rather than 7; no PDC shot;
  no concept of each group of five waves being a "level" (though it's
  still implicit - waves 5/10/15/20 are among the hardest). Most waves
  were cut down slightly, with fewer enemies and the like.

- The original's design for the biggest enemy type (which was too big
  to be workable in a 4k game) was dropped, and replaced with a new
  one.

- It runs at 25fps max (the first time around) rather than 70fps.

- You don't get points for hitting something, only for destroying it.
  And the scores have been reduced by a factor of ten, as otherwise
  all scores would now have ended in a zero. :-)

- It's a lot easier, partly due to the auto-fire support.

Finally, in case anyone hadn't realised, the "SD" in "zblast SD"
stands for super-deformed; this version feels a bit like that compared
to the original. :-)

-Rus.
