Bruce

Aug 2, 20223 min

Enemy Spawner Event

This is the engine room of Shmupkit. The Spawner itself is a blank sprite, and it's event controls which enemies should be spawned, where, how many and sets up all the parameters that control the enemy which are passed to the enemy event.

It's basically a data table of values that are read from whenever the player progresses to a new level/attack wave.

The Spawner makes sure the right sprites, numbers of sprites and delays between sprites are spawned correctly, and ensures there aren't too many sprites on screen at once which could otherwise cause display issues.

EVENT SPRITETYPE7
 
; VARIABLES
 
; =======================================================
 
; DIRECTION - availabe for use in your game
 
; SETTINGA - STATUS:
 
; 0 = GET DATA FOR NEXT LEVEL
 
; 1 = SPAWN ALIENS
 
; SETTINGB - TIMER BETWEEN SPAWNS
 
; AIRBORNE - SPAWNER MOVEMENT (not implemented yet)
 
; JUMPSPEED - # OF ENEMIES SPAWNER
 
; ========================================================
 

 

 
; ALIEN SPAWNER
 
; ============
 

 

 
IF SETTINGA = 0 ; first time we run this
 
LET JUMPSPEED = 0 ; reset the enemies spawned counter
 
LET SETTINGB = 0 ; reset the timer
 
RESTORE ; start from the beginning of the data table
 
REPEAT L ; get the data for this level
 
READ AIRBORNE ; get the spawner movement
 
READ X ; get starting x position
 
READ Y ; get starting y position
 
READ J ; get the enemy sprite type
 
READ K ; get the enemy image
 
READ E ; how many enemies in this level?
 
READ G ; delay between releasing each enemy
 
READ P ; points for a kill
 
READ C ; colour
 
READ W ; weapon
 
READ H ; fire weapon probability
 
READ Q ; min height to release weapons
 
READ I ; x distance for alien weapon triggering
 
ENDREPEAT
 
LET D = E ; how many kills to get bonus?
 
LET F = E ; enemies remaining
 
ADD 1 TO SETTINGA ; prevent this running again
 
ENDIF
 

 

 

 
IF SETTINGB = G ; has timer reached the delay point?
 
IF JUMPSPEED < E ; are there still enemies left to spawn?
 
IF S < 9 ; are there 10 or less enemies already on screen?
 
SPAWN J K ; spawn an enemy
 
ADD 1 TO JUMPSPEED ; increment the number spawned
 
SPAWNED ; switch to the enemy sprite
 
LET DIRECTION = 0 ; set its initial direction to 0
 
ENDSPRITE ; return to the spawner
 
ENDIF
 
ELSE ; all enemies in this level have been spawned
 
IF F = 0
 
ADD 1 TO L ; get ready for next level
 
IF L = 13 ; have we reached the end of the levels?
 
LET L = 1 ; yes, start again
 
ENDIF
 
LET SETTINGA = 0 ; get data for next level
 
ENDIF
 
ENDIF
 
LET SETTINGB = 0 ; reset the timer
 
ENDIF
 

 
ADD 1 TO SETTINGB ; increment the timer
 

 

 

 
; Alien Spawner Data Table
 
;=========================
 
DATA 0 132 8 5 2 8 8 5 67 1 10 100 8
 
DATA 0 100 8 5 2 10 8 10 68 1 10 100 32
 
DATA 0 232 16 5 2 12 6 15 69 1 8 100 100
 
DATA 0 8 32 5 2 6 6 15 70 1 8 100 8
 
DATA 0 232 146 5 2 6 6 20 71 1 4 100 8
 
DATA 0 8 146 5 2 6 6 20 66 1 4 100 8
 
DATA 0 40 8 5 2 6 8 5 69 1 2 140 8
 
DATA 0 200 8 5 2 6 8 5 69 1 2 140 8
 
DATA 0 200 8 5 2 6 8 5 69 1 2 140 8
 
DATA 0 8 128 5 2 6 8 5 67 1 10 100 8
 
DATA 0 80 8 5 2 6 8 5 67 1 10 100 8
 
DATA 0 80 8 5 2 6 8 5 67 1 10 100 8
 

480
0