Bruce

Aug 2, 20223 min

Vertical Shmup - Part 10 - A spot of housekeeping

Now that we've got most of the basics of the game working, let's take a break and tidy up the presentation of the game a bit.

First let's add an intro menu:

MENU: EVENTS > INTRO MENU

EVENT INTROMENU
 

 
WAITKEY
 
BORDER 0 ; black border
 
COLOUR 68 ; green text on black
 
CLS ; clear the screen
 
LET CONTROL = 99
 
WHILE CONTROL >= 99
 
PRINTMODE 1
 
AT 4 7
 
PRINT "RETURN TO ARCADIA"
 
PRINTMODE 0
 
AT 8 10
 
PRINT "1. KEYBOARD"
 
AT 10 10
 
PRINT "2. KEMPSTON"
 
AT 12 10
 
PRINT "3. SINCLAIR"
 
AT 14 10
 
PRINT "4. REDEFINE"
 
LET CONTROL = 99
 
WHILE CONTROL = 99
 
IF KEY OPTION1
 
LET CONTROL = 0
 
ENDIF
 
IF KEY OPTION2
 
LET CONTROL = 1
 
ENDIF
 
IF KEY OPTION3
 
LET CONTROL = 2
 
ENDIF
 
IF KEY OPTION4
 
CLS
 
WHILE KEY OPTION4
 
ENDWHILE
 
AT 7 12
 
PRINT "PRESS KEY FOR:"
 
AT 9 12
 
PRINT "LEFT"
 
DEFINEKEY LEFT ; the key pressed will be the new LEFT key
 
AT 11 12
 
PRINT "RIGHT"
 
DEFINEKEY RIGHT ; the key pressed will be the new RIGHT key
 
AT 13 12
 
PRINT "THRUST"
 
DEFINEKEY UP ; the key pressed will be the new THRUST key
 
AT 15 12
 
PRINT "FIRE"
 
DEFINEKEY FIRE1 ; the key pressed will be the new FIRE key
 
AT 17 12
 
PRINT "PAUSE"
 
DEFINEKEY FIRE3 ; this will be the PAUSE key
 
LET CONTROL = 100
 
CLS
 
ENDIF
 
ENDWHILE
 
ENDWHILE
 
CLS
 

Next, we'll tidy up the Game Initialisation event:

MENU: EVENTS > Game Initialisation:

EVENT GAMEINIT
 

 
LET L = 1 ; Level (starts at 1)
 

 
LET LIVES = 3
 
AT 0 14
 
DISPLAY LIVES
 

 
AT 0 1
 
SHOWSCORE
 

 
AT 0 25
 
SHOWHIGH
 

Now lets add a 'Get Ready message to the screen every time the player starts (including after being killed if they still have lives left:

EVENT RESTARTSCREEN
 

 
LET S = 0 ; initialise the sprite counter
 
AT 0 1 ; position the cursor Line 0 Column 1
 
SHOWSCORE ; display the score
 

 
AT 10 12 ; Cursor at L10 C2
 
REPEAT 10 ; do this 10 times
 
READ A ; read next item into A
 
CHR A ; Display A
 
DELAY 5 ; short wait
 
ENDREPEAT ; all items displayed?
 
DELAY 100 ; longer wait
 

 

 
DATA 'G' 'E' 'T' ' ' 'R' 'E' 'A' 'D' 'Y' '!'
 

 

 

 

Next, the Kill Player event:

MENU: EVENTS > KILL PLAYER

EVENT KILLPLAYER
 

 
SUBTRACT 1 FROM LIVES ; reduce number of lives remaining
 
AT 0 16 ; update the lives in the score bar
 
DISPLAY LIVES
 
CLW ; clear the play area
 

And finally, for now, the Lost Game event:

MENU: EVENTS > LOST GAME

EVENT LOSTGAME
 

 

 
AT 10 12 ; Cursor at L10 C2
 
REPEAT 10 ; do this 10 times
 
READ A ; read next item into A
 
CHR A ; Display A
 
DELAY 5 ; short wait
 
ENDREPEAT ; all items displayed?
 
DELAY 100 ; longer wait
 

 

 
DATA 'G' 'A' 'M' 'E' ' ' 'O' 'V' 'E' 'R' '!'

And for a touch of visual flourish, we ll add a starfield to the play area, add this line in to your Main Loop 1 event:

STAR DOWN ; vertical star field

I'm also going to select a new font.

Now lets test it:

And there you go, if you have reached this point you should have a small, but fully functioning, vertical shoot 'em up! My version is currently using just under 13Kb of memory, so we have plenty left to play with. At some point we're going to want to add some sound, maybe add some powerups, but next I want to improve the Alien sprite so that it points in the right direction that it is travelling.

    290
    0