Space Invaders (Amstrad CPC) by Copper France
A downloadable game
SPACE INVADERS
This is Space Invaders for the Amstrad CPC!
Keyboard left and right arrows are used to move the laser and SPACE to fire.
The goal is to defeat wave after wave of descending aliens to earn as many points as possible.
TECHNICAL PART
The game works on all Amstrad CPC (using only BASIC 1.0)
1) Control Characters
The game use a lot of Control characters to replace MODE, PAPER, BORDER, INK, SYMBOL in only one PRINT in the first line :
MODE is CHR$(4)+"1" FOR MODE 1
PAPER is CHR$(14)+"0" FOR PAPER 0
BORDER is CHR$(29)+CHR$(64+0)+CHR$(64+0) for BORDER 0,0
INK is CHR$(18)+CHR$(64+v)+CHR$(64+v) for INK v,v
SYMBOL is CHR$(25)+CHR$(i)+CHR$(a)+CHR$(b)+CHR$(c)+CHR$(d)+CHR$(e)+CHR$(f)+CHR$(g)+CHR$(h) for SYMBOL i,a,b,c,d,e,f,g,h
CHR$(12) is also used to clear the screen
CHR$(8),CHR$(9),CHR$(10),CHR$(11) are used to move cursor one character to the left, right, bottom and top for example to draw the green bunkers.
2) POKE &B28B,79
This POKE is used to work around a PRINT bug on CPC 464 when using control characters in strings.
Indeed, the size of text is not calculated correctly and the text is wrapped even if it fits in window.
This POKE is used to simulate a 80 columns windows in MODE 1 to avoid this wrap.
On other machine this POKE has no visible or harmful effects.
3) PEEK from screen memory
Instead of using COPYCHR$() which don't exists on CPC 464 I used PEEK from screen memory.
The second line of the screen (&C800-&C7FF) was used because the 4 first pixels was different for all 3 aliens and shots so only one PEEK is needed to know what is hit.
Values depend of PEN used :
PEN 1
48 is Alien 1
32 is Alien 2
112 is Alien 3
16 is Player shot
96 is Alien shot
PEN 2
15 is Bunker
PEN 3
17 is first part of Mystery alien
255 is second part of Mystery alien
4) Listing description
Line 1: Graphics initialization in one PRINT / Variables initializations for graphics tiles / Go in line 10 to finish initializations
Line 2: Work around POKE / Printing score, bunkers / Printing lifes / Drawing vertical line / Aliens wave array initializations / Variables initialization
Line 3: Player moves / Current alien moves / Checking bottom reached / Next alien / Player display
Line 4: Waiting vertical blank / Mystery alien / 4 musical notes
Line 5: Alien shot
Line 6: Player shot
Line 7: Alien hit checks
Line 8: End of wave checks / Mystery hit checks
Line 9: Player explosion / Life update and game over checks / DATA for tiles's strings and 4 musical notes
Line 10 : Game Over / Variable initialization / Sound initialization / Alien moves precalculation / Go to first wave
5) Variables
z$ : CHR$(0)
w$ : Triple CHR$(0)
a$() : Aliens tiles
b$ : Bunker tile
s$ : Laser tile
m$ : Mystery alien tile
p : Score
i : Current alien index
x,y : Horizontal / Vertical loops
x(),y() : Aliens position
s$() : Aliens tiles
o : Offset for starting line of aliens (to increase difficulty of aliens waves)
n : Aliens remainging
j : Current alien move index
u : Player move offset
q : Mystery horizontal position or 0 if not active
r : Mystery move offset (1 / -1)
m$() : Mystery alien tiles (0 when moving to the left 2 when moving to the right)
e,f : Alien shot position (e=0 if no shot)
b : Alien shot screen memory address for quick tests
z,y : Player shot position (z=0 if no shot)
a : Player shot screen memory address for quick tests
s : Byte read at player shot video screen memory address
c : Alien type (or 0 if no aliens or mystery)
m,k : Used to iterate over aliens
Status | Released |
Rating | Rated 5.0 out of 5 stars (2 total ratings) |
Author | BASIC 10Liner |
Genre | Action |
Tags | 8-Bit, Amstrad CPC, basic, basic10liner, schneider-cpc |
Install instructions
HOW TO RUN IN THE WINAPE 2.0 BETA 2 EMULATOR
1) With the dsk
File / Drive A: / Insert Disk Image... or CTRL+F1
Choose the invaders.dsk file
then just type :
RUN"INVADERS
2) With the invaders_full.bas file :
Select all the text in an editor and Copy in the clipboard with CTRL+C
In the WinAPE emulator use File / Paste or CTRL+F11
You can also use Settings / High Speed (1000%) or Shift+F4 to speed up copy (restore normal speed with Settings / Normal Speed (100%) or Shift+F3)
After the Paste :
RUN 100
then
RUN
Comments
Log in with itch.io to leave a comment.
Would Copper France be interested in making achievements for it on RetroAchievements?
https://retroachievements.org/game/26654
I forwarded your question.
Awesome port game !
Very impressive Space Invaders on 10 lines code!