zblast SD (Amstrad CPC version)
zblast SD is a fairly manic shoot-'em-up. It is a simplified rewrite of a
vector-based game for Linux that was originally written in 1993 by Russell
Marks (see <http://www.svgalib.org/rus/zblast/>). Russell wrote a version for
the ZX Spectrum for the 2003 Minigame competition, in which it was voted 4th
in the 4K category (see <http://starbase.globalpc.net/minigame/>) - although in
my opinion, it should have won! Nicholas Campbell (that's me) then converted it
to the Amstrad CPC.
zblast SD is public domain by Russell Marks (<email@example.com>).
Differences between the ZX Spectrum and Amstrad CPC versions
- The Amstrad CPC version is a lot slower than the ZX Spectrum version. Unlike
the Spectrum version, the sprites on the CPC screen require more memory, and
after every frame, they must be cleared from the screen *properly*. The
Spectrum version sets the attributes of each cell on the screen to black
(therefore making the player think that it has been removed), but it doesn't
actually clear the sprite itself from the screen! The CPC version also uses
fully transparent sprites, which slows things down even more; the sprites on
the Spectrum are transparent in a way, but not fully so.
- The lack of speed compared to the Spectrum version means that the game needs
to be made more difficult. On the Spectrum version, if the blasters on the
left- and right-hand sides of your ships touch a baddie or a bullet, the
player does not lose any energy. On the CPC version, if *any* part of the
ship touches a baddie or a bullet, the player loses energy. The length of
time your shield lasts after being hit has also been reduced considerably.
- On the Spectrum version, if the player somehow manages to complete 20 waves,
the game restarts at wave 1, but with the game speeded up a lot!
Unfortunately, the game is already running at its maximum speed on the CPC
version and cannot be speeded up any further. :-(
- The file size of the CPC version is a lot larger than the Spectrum version.
There are three reasons for this.
1) I have not compressed the CPC version.
2) As mentioned above, the sprites on the CPC version require more memory.
Sprites must also be defined for each type/colour of baddie and bullet,
whereas the colours of the sprites on the Spectrum version can be changed
simply by altering the cell attributes on the screen.
3) The CPC version also has to store a font for the ASCII character set, to
allow text to be displayed. The Spectrum version uses and modifies the
- The CPC version works on all models of Amstrad CPC, whereas the Spectrum
version will not work on 16K or 48K machines. :-)
Playing the game
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
- 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
- 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 at wave 1.
- 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.)
- You 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 that Russell made with another Minigame competition entry,
dotathon). Things start getting a bit more interesting at around waves 5 and
For control you have the option of either keyboard or joystick control. At the
title screen, press 1 to start the game using keyboard control, or 2 for
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
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.
Tools used to program zblast SD for the Amstrad CPC
- Advanced Art Studio by OCP - the best art package for the Amstrad CPC, used
to design the sprites (which are stored on the zblast SD development disc as
SPRITES.SCR and SPRITES.PAL).
- CPCXFS - a command line-based tool for manipulating DSK files, which are used
by Amstrad CPC emulators.
- Crimson Editor - a text editor for Windows, used to edit C and Z80 source
- DOSCopy - a utility for the Amstrad CPC to transfer files to and from MS-DOS
formatted discs, used to test zblast SD on the real thing.
- MinGW and MSYS - used for compiling C programs to generate additional files
for zblast SD, and putting all of the files that make up zblast SD together.
- Paint Shop Pro - an art package for Windows, used to convert Russell's 24-bit
colour, high resolution artwork for zblast SD into a 4-bit colour, low-
resolution loading screen for the Amstrad CPC. :-)
- zmac - a command line-based Z80 assembler, used for assembling the Z80 code
for zblast SD.
Of course, many Amstrad CPC emulators were used as well for testing - Arnold,
CaPriCe32, CPCE, Multi-Machine, NO$CPC and WinAPE. SPIN and Spectaculator were
my ZX Spectrum emulators of choice for comparing my Amstrad CPC version of
zblast SD with Russell's original version.
Compiling zblast SD for the Amstrad CPC
I used MinGW and MSYS (see <http://www.mingw.org/>) to compile zblast SD. This
is a Windows utility that emulates a Unix shell and includes all sorts of GNU
utilities, including the GNU C Compiler (GCC). The makefile that is included
with the source code is designed to be used with MinGW. You may need to alter
it if you are using a different compiler and/or operating system.
You will also need CPCXFS and zmac to be able to compile zblast SD. These can
be downloaded from the following locations:
CPCXFS - <ftp://ftp.nvg.ntnu.no/pub/cpc/utils/cpc/cpcxfs.zip>
zmac - <ftp://ftp.nvg.ntnu.no/pub/cpc/utils/cpc/zmac.zip>
Both of these files include source code, and an executable file for use with
Windows. CPCXFS is rather buggy when used with MinGW, and I don't know enough
about C to be able to fix these problems. :-( However, it works OK in forced
batch mode. If you're using MinGW, you will need to use the standard GNU make
command rather than mingw32-make; this is CPCXFS's fault again.
1. Once you have set up all of these programs, unzip the source code for zblast
SD and note the directory where it is stored.
2. Open the Makefile file that comes with the source code in a text editor and
change the variables if necessary. (On MinGW, you can specify the exact
location of a file by using e.g. CPCXFS=/c/cpc/cpcxfs/cpcxfs.exe). If you
are using an operating system other than Windows, ensure that the variable
exec_suffix is blank.
3. Now run MSYS and go to the directory where you have unzipped the source
code. You do this by typing e.g. 'cd /c/cpc/zblastsd/src/' (without the
4. Type 'make' (without the quotes) and hope that everything works. :-)
If you are running an Amstrad CPC emulator while compiling zblast SD, you must
ensure that it is not currently using either the development or the game discs;
otherwise, the make program will be unable to access these discs and the
compilation process will fail!
List of files in the source code
- zblastsd_dev.dsk - the zblast SD development disc. This is a DSK file for use
with Amstrad CPC emulators. It contains the files 'sprites.scr' and
'sprites.pal'. sprites.scr is a standard 16K screen which contains the
sprites and font used by zblast SD, and it is used by the 'sprtodat' program.
sprites.pal is an OCP Advanced Art Studio palette file which stores the
screen mode and inks.
- levels.asm, main.asm, music.asm, sound.asm - Z80 source code files for the
- loader.asm - a Z80 source code file for the loader, which displays the
programming credits, loads the title screen, and then loads the game.
- bmptoscr.c, sprtodat.c, tuneconv.c - C source code files to generate programs
that convert data into formats that are suitable for use on a CPC or the
zmac Z80 assembler.
- lilting.csf, macrospec.csf - data for the two tunes used in zblast SD.
Russell Marks wrote these, and I don't have a clue how to create my own
tunes! These files are used by the 'tuneconv' program.
- zblastsd_cover.jpg, zblastsd_logo.png - the cover artwork and logo for
zblast SD, used in making the file 'zblastsd.bmp'.
- zblastsd.bmp - the bitmap file containing the title screen, showing what it
should look like on an Amstrad CPC. This file is used by the 'bmptoscr'
- Makefile - the makefile used by the 'make' program.
I hope that you enjoy playing zblast SD on the Amstrad CPC, and appreciate why
it is not as fast as the ZX Spectrum version. This is the first time that I
have tried to convert a Spectrum game to the CPC, and it is the result of two
months of work (as I knew very little about the Spectrum's hardware before
Nicholas Campbell, 17th May 2005