Minilop Retroware

MPAGD SHMUPKIT

Evento do gerador de inimigos

2 de agosto de 2022

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

Tudo sobre MPAGD SHMUPKIT