Esta é a sala das máquinas do Shmupkit. O próprio Spawner é um sprite em branco e o seu evento controla que inimigos devem surgir, onde, quantos, e define todos os parâmetros que controlam o inimigo e que são passados ao evento Enemy.
Basicamente é uma tabela de dados com valores que são lidos sempre que o jogador avança para um novo nível ou vaga de ataque.
O Spawner garante que os sprites certos, o número de sprites e os intervalos entre sprites são gerados corretamente, e evita que haja demasiados sprites no ecrã ao mesmo tempo, o que de outra forma poderia causar problemas de visualização.
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
