;--------------------------------------------------------- ; Wing Warriors 18/04/2016 (SEGA MASTER SYSTEM GAME) ; By Fran Del Pino Cuesta (Fran Matsusaka & Miki Matsuoka) ;--------------------------------------------------------- ;.include "segamastersystem.z80asm" .define FALSE 0 .define TRUE 1 .define SOUND_ON TRUE ; 0=Off; 1=On .define CHEAT_STAGE FALSE ; 0=Off; 1=On .define NO_COLLISION FALSE ; 0=Off; 1=On .define CHECK_BOSS TRUE ; 0=Off; 1=On ;--------------------------------------------------------- ; CONSTANTS ;--------------------------------------------------------- .define FP_BITS 4 .define BUFFER_SIZE 4096 .define S_NUM_SPR 25 ; Numero de SPRITES select mode .define S_NUM_ATR 27 ; Numero de Atributos de Sprite select mode .define KEY_UP 1 .define KEY_UP_RIGHT 2 .define KEY_RIGHT 3 .define KEY_DOWN_RIGHT 4 .define KEY_DOWN 5 .define KEY_DOWN_LEFT 6 .define KEY_LEFT 7 .define KEY_UP_LEFT 8 .define KEY_A 9 .define KEY_B 10 .define KEY_RESET_FALSE 0 .define KEY_RESET_TRUE 1 .define ROWLEN 24 .define VRMADR 6144 .define HI_SCORE 12000 .define MAX_BULLETS 8 .define MAX_ENEMIES 8 .define MAX_EXPLOSIONS 8 .define MAX_ITEMS 4 .define MAX_EBULLETS 48 .define SPR_Y_NODRAW 209 .define EDATA_HOTX 0 .define EDATA_HOTY 1 .define EDATA_SHOTX 2 .define EDATA_SHOTY 3 .define EDATA_LIFE 4 .define EDATA_SCORE 6 .define EDATA_INTSP 8 .define EDATA_EXPLS 9 .define EDATA_LEGHT 10 .define ESIZE_SMALL 16 .define ESIZE_BIGER 16*3 .define BULLET_SIZE 8 .define EBTYPE_BALL1 1 .define EBTYPE_BALL2 2 .define EBTYPE_TRIANGLE 0 .define PERFECT_SCORE 5000; .define GFXMODE_TILE 0 .define GFXMODE_SPRT 1 ; System flikering .define MAX_SPRITES 64 .define INVULNERABLE_FRAMES 160 .define BLINK_FRAMES 20 .define BLINK_FRAMES2 10 .define DEAD_FRAMES 50 .define PLAYERST_INIT 0 .define PLAYERST_FLYING 1 .define PLAYERST_DEAD 2 .define EXP_SMALL_MECHA 0 .define EXP_SMALL_HUMAN 1 .define EXP_MEDIUM_MECHA 2 .define EXP_MEDIUM_HUMAN 3 .define EXP_BIG_MECHA 4 ; ENEMIES ----------------------- ; stg 1 enemies .define ENEMYTYPE_ZAKO 0 .define ENEMYTYPE_ITEMZAKO 1 .define ENEMYTYPE_SPEEDBIRD_1 2 .define ENEMYTYPE_SPEEDBIRD_2 3 .define ENEMYTYPE_BIGSHIP1 4 .define ENEMYTYPE_BIRDMAN 5 .define ENEMYTYPE_BOSSSTG1 6 ; stg 2 enemies .define ENEMYTYPE_TANK 7 .define ENEMYTYPE_ITEMTANK 8 .define ENEMYTYPE_BIGSHIP2 9 .define ENEMYTYPE_FRONTHUMAN 10 .define ENEMYTYPE_BACKHUMAN_1 11 .define ENEMYTYPE_BACKHUMAN_2 12 .define ENEMYTYPE_BOSSSTG2 13 .define ENEMYTYPE_LIGHTBALL2 14 ; stg 3 enemies .define ENEMYTYPE_3ZAKO 15 .define ENEMYTYPE_3ITEMZAKO 16 .define ENEMYTYPE_SPEEDNINJA_1 17 .define ENEMYTYPE_SPEEDNINJA_2 18 .define ENEMYTYPE_BIGSHIP3A 19 .define ENEMYTYPE_BIGSHIP3B 20 .define ENEMYTYPE_NINJA 21 .define ENEMYTYPE_KAMIKAZE_1 22 .define ENEMYTYPE_KAMIKAZE_2 23 .define ENEMYTYPE_BOSSSTG3 24 .define ENEMYTYPE_LIGHTBALL3 25 ; ENEMY STATES ------------------ .define ENEMYST_COMING 0 .define ENEMYST_AIMING 1 .define ENEMYST_ESCAPING 2 .define ENEMYST_DEAD 3 ; 50 hz > 8,55771428 ; 60 hz > 7,13142857 .define EB_INCY_1 3 .define EB_INCY_2 7 .define EB_INCY_3 10 .define EB_INCY_4 14 .define EB_INCY_5 18 ; integer increments .define E_INCY_1 1 .define E_INCY_2 2 .define E_INCY_3 4 .define E_INCY_4 5 .define E_INCY_5 6 .define E_INCY_6 8 .define E_INCY_7 9 .define E_INCY_8 10 .define E_INCY_9 12 .define E_INCY_10 13 ; sub pixel increments (8-bit shift) .define E_INCY_SUB_075 128+64 .define E_INCY_SUB_050 128 .define E_INCY_SUB_033 85 .define E_INCY_SUB_025 64 .define E_INCY_SUB_012 32 .define E_INCY_SUB_006 16 ; sub pixel increments (8-bit shift) .define E_INCY_1_DIV_2 128 .define E_INCY_1_DIV_3 85 .define E_INCY_1_DIV_4 64 .define E_INCY_1_DIV_6 42 .define E_INCY_1_DIV_8 32 .define E_INCY_1_DIV_16 16 .define E_INCY_1_DIV_32 8 .define E_INCY_1_DIV_48 6 .define E_INCY_1_DIV_64 4 ;E_ACCY_X 1 ;(((((320 << FP_BITS) / 240) * GAME_MAXFPS) / GAME_FPS) * GAME_MAXFPS) / GAME_FPS; .define E_ACCY_1 1 .define E_ACCY_2 2 .define E_ACCY_3 4 .define E_ACCY_4 5 .define E_ACCY_5 6 .define E_ACCY_6 8 .define E_ACCY_7 9 .define E_ACCY_8 10 .define E_ACCY_9 12 .define E_ACCY_10 13 ; sub pixel increments (8-bit shift) .define E_ACCY_SUB_075 128+64 .define E_ACCY_SUB_050 128 .define E_ACCY_SUB_033 85 .define E_ACCY_SUB_025 64 .define E_ACCY_SUB_012 32 .define E_ACCY_SUB_006 16 ; sub pixel increments (8-bit shift) .define E_ACCY_1_DIV_2 128 .define E_ACCY_1_DIV_3 85 .define E_ACCY_1_DIV_4 64 .define E_ACCY_1_DIV_6 42 .define E_ACCY_1_DIV_8 32 .define E_ACCY_1_DIV_16 16 .define E_ACCY_1_DIV_32 8 .define E_ACCY_1_DIV_48 6 .define E_ACCY_1_DIV_64 4 .define SCROLL_INC 1 .define SCROLL_INCY 1 .define BOSSCOME_FRAMES 128 .define SIZEX 256 .define SIZEY 192 .define GAME_SIZEX 192 .define GAME_SIZEY 192 .define GAME_SIZEX2 192/2 .define GAME_SIZEY2 192/2 .define GAME_SIZEX3 192/3 .define GAME_SIZEY3 192/3 .define GAME_SIZEX4 192/4 .define GAME_SIZEY4 192/4 .define GAME_SIZEX8 192/8 .define GAME_SIZEY8 192/8 .define GAME_SIZEX12 192/12 .define GAME_SIZEY12 192/12 .define GAME_SIZEX16 192/16 .define GAME_SIZEY16 192/16 .define GAME_SIZEX24 192/24 .define GAME_SIZEY24 192/24 .define GAME_SIZEX32 192/32 .define GAME_SIZEY32 192/32 .define GAME_SIZEX48 192/48 .define GAME_SIZEY48 192/48 .define GAME_SIZEX64 192/64 .define GAME_SIZEY64 192/64 .define SINCOS_BITS 15 ; game states .define ST_PLAYING 1 .define ST_BOSS_COMING 2 .define ST_BOSS_TALKING 3 .define ST_BOSS_PLAYING 4 ; enemy array data .define ENEMY_Y 0 .define ENEMY_Y_SUB 1 .define ENEMY_X 2 .define ENEMY_X_SUB 3 .define ENEMY_SPRITE 4 .define ENEMY_COLOR 5 ; sprite buffer array data .define SPRITE_Y 0 .define SPRITE_X 1 .define SPRITE_INDEX 2 .define SPRITE_COLOR 3 ; hud .define HUD_NAME_CHAR 1800h+25+(1*32) .define HUD_FACE_CHAR 1800h+25+(2*32) .define HUD_HEART_CHAR 1800h+25+(5*32) .define HUD_PWRUP_CHAR 1800h+25+(6*32) .define HUD_SCORE1_CHAR 1800h+25+(9*32) .define HUD_SCORE2_CHAR 1800h+26+(10*32) .define HUD_SCOREX2_CHAR 1800h+29+(11*32) .define HUD_HISCORE1_CHAR 1800h+25+(13*32) .define HUD_HISCORE2_CHAR 1800h+26+(14*32) .define HUD_EXTENDS1_CHAR 1800h+25+(17*32) .define HUD_EXTENDS2_CHAR 1800h+26+(18*32) .define HUD_DEBUG 1800h+25+(20*32) ; speed enemy initial y .define SPEED_ENEMY_INIT_Y GAME_SIZEY4 + GAME_SIZEY16 ; during these first frames bullet will have an extra of damage .define CLOSE_DAMAGE_FRAMES 4 ; show x2 text close to score text .define SHOW_X2_FRAMES 120 ; max lifes we can get by scoring .define MAX_EXTENDS 2 .define CONTROLLER_BIT_UP 0 .define CONTROLLER_BIT_DOWN 1 .define CONTROLLER_BIT_LEFT 2 .define CONTROLLER_BIT_RIGHT 3 .define CONTROLLER_BIT_BUTTON_1 4 ; Button 1 is the one on the left, also labelled START 1 START 2 .define CONTROLLER_BIT_BUTTON_2 5 ; Button 2 is on the right. O O .define CONTROLLER_BIT_PAUSE 6 ; Pause button is treated like a controller button and is mirrored to both pads. .export CONTROLLER_BIT_UP, CONTROLLER_BIT_DOWN, CONTROLLER_BIT_LEFT, CONTROLLER_BIT_RIGHT, CONTROLLER_BIT_BUTTON_1, CONTROLLER_BIT_BUTTON_2, CONTROLLER_BIT_PAUSE ;============================================================== ; WLA-DX banking setup ;============================================================== .memorymap defaultslot 0 slotsize $c000 ; $80000=512, $40000=256, $20000=128, $10000=64Kb, $c000=48Kb, $8000=32Kb, $4000=16Kb slot 0 $0000 slotsize $2000 slot 1 $c000 ; The RAM is a single slot starting at $C000 and is $2000 bytes big .endme .rombankmap bankstotal 1 banksize $c000 banks 1 .endro /* .MEMORYMAP SLOTSIZE $4000 SLOT 0 $0000 SLOT 1 $4000 SLOT 2 $8000 DEFAULTSLOT 2 .ENDME .ROMBANKMAP BANKSTOTAL 2 BANKSIZE $4000 BANKS 2 .ENDRO */ ;============================================================== ; CONSTANTS ;============================================================== ; The PORT defines let me work out what's going on when we IN and OUT ; to the different subsystems of the SMS! ; In this case, the VDP (video and stuff) chip. .define NAMTBL 0 .define PORT_VDPControl $bf .define PORT_VDPStatus $bf .define PORT_VDPData $be .define PORT_VDPVCount $7e .define PORT_SN76489 $7f .define PORT_IOPortAAndB $dc .define PORT_IOPortBAndMisc $dd .define VDPCommand_VRAMWrite $4000 .define VDPCommand_RegWrite $8000 .define VDPCommand_CRAMWrite $c000 .define VDPCommand_VRAMWriteByte $40 .define VDPCommand_RegWriteByte $80 .define VDPCommand_CRAMWriteByte $C0 .define VRAM_PatternRAM $0000 .define VRAM_NametableRAM $3800 .define VRAM_SpriteATRAM $3F00 .define VRAM_SpriteAT_Y_RAM $3F00 .define VRAM_SpriteAT_XN_RAM $3F80 .define VRAM_NametableRAM_Highbyte $38 .define VDP_Status_VBlank_bit %10000000 .define VDP_Register_SpriteATBase $05 .define VDP_Register_ScrollX $08 .define VDP_Register_ScrollY $09 .define VDP_Register_HBlankCounter $0A ;Port $DC: I/O port A and B ;Bit Function ;7 Port B Down pin input ;6 Port B Up pin input ;5 Port A TR pin input ;4 Port A TL pin input ;3 Port A Right pin input ;2 Port A Left pin input ;1 Port A Down pin input ;0 Port A Up pin input ; ;Port $DD: I/O port B and miscellaneous ;Bit Function ;7 Port B TH pin input ;6 Port A TH pin input ;5 Cartridge slot CONT pin * ;4 Reset button (1= not pressed, 0= pressed) * ;3 Port B TR pin input ;2 Port B TL pin input ;1 Port B Right pin input ;0 Port B Left pin input .macro VBLANK_TOKEN_INIT xor a ld (var_VBlankTokenReady),a ; Eat token by setting it to zero .endm ;============================================================== ; SDSC tag and SMS rom header ;============================================================== .sdsctag 1.0,"Wing Warriors","Hell bullet game","Mr Matsusaka" ;============================================================== ; Boot section ;============================================================== .org $0000 .section "Init" force di ; disable interrupts im 1 ; Interrupt mode 1 ld sp,$dff0 ; default stack pointer address. jp INIT ; jump to main program .ends ;============================================================== ; Vblank/HBlank handler ;============================================================== .org $0038 .section "Interrupt handler" force ex af,af' ; save accumulator in its shadow reg. in a,$bf ; get vdp status / satisfy interrupt. ld (PORT_VDPStatus),a ; save vdp status in ram. ex af,af' ; restore accumulator. ei ; enable interrupts. ret ; return from interrupt. .ends ;============================================================== ; Pause button handler ;============================================================== .org $0066 .section "Pause handler" force push af ld a,1<>>>>>>>>>>>>>>>>>>>> Controller UP <<<<<<<<<<<<<<<<<<<<<<<<< ld a,(var_ControllerStatus.1.StatusHit) ; We want to see what's been hit on controller 1 (port A = player 1) bit CONTROLLER_BIT_DOWN,a ; Set zero flag depending on whether the bit has been hit: jp z,main_up_is_not_pressed ; Execute handler only if start is pressed ; Check top limit ld a,[m_iMenuIndex] cp 1 jr z,TO_REPAINT_MAIN ; Move down inc a ld [m_iMenuIndex],a ;ld a,SND_MENU_MOVE ;call PLAY_SND_FX jr TO_REPAINT_MAIN main_up_is_not_pressed: ; >>>>>>>>>>>>>>>>>>>> Controller DOWN <<<<<<<<<<<<<<<<<<<<<<<< ld a,(var_ControllerStatus.1.StatusHit) ; We want to see what's been hit on controller 1 (port A = player 1) bit CONTROLLER_BIT_UP,a ; Set zero flag depending on whether the bit has been hit: jp z,main_down_is_not_pressed ; Execute handler only if start is pressed ; Check top limit ld a,[m_iMenuIndex] or a jr z,TO_REPAINT_MAIN ; Move up dec a ld [m_iMenuIndex],a ;ld a,SND_MENU_MOVE ;call PLAY_SND_FX jr TO_REPAINT_MAIN main_down_is_not_pressed: ; >>>>>>>>>>>>>>>>>>> Controller BUTTON 1 <<<<<<<<<<<<<<<<<<<<<<< ld a,(var_ControllerStatus.1.StatusHit) ; We want to see what's been hit on controller 1 (port A = player 1) bit CONTROLLER_BIT_BUTTON_1,a ; Set zero flag depending on whether the bit has been hit: jp z,TO_REPAINT_MAIN ; Execute handler only if start is pressed ;@@TO_NEXT_STATE: ;ld a,SND_MENU_SELECT ;call PLAY_SND_FX ld a,(m_iMenuIndex) or a jp z,INIT_SELECT jr INIT_ABOUT TO_REPAINT_MAIN: jp REPAINT_MAIN ; loop LOAD_TITLE: ;============================================================== ; Load palette ;============================================================== ; 1. Set VRAM write address to CRAM (palette) address 0 (for palette index 0) ; by outputting $c000 ORed with $0000 ld a,0 out ($bf),a ld a,$c0 out ($bf),a ; 2. Output colour data ld hl, SET_TITLE_PAL ld b, (SET_TITLE_PAL_END - SET_TITLE_PAL) ld c,$be otir ;============================================================== ; Load tiles to TILE BANK (limited to 448 (0x1c0)) ;============================================================== ; Load tiles ld de,$4C00 ; VRAM write address ld hl,SET_TITLE_TIL ; Source address call LoadTiles4BitRLENoDI ;============================================================== ; Load tiles to TILE BANK (limited to 448 (0x1c0)) ;============================================================== ; Load tiles ld de,$4000 ; VRAM write address ld hl,SET_FONT_TIL ; Source address call LoadTiles4BitRLENoDI ret ;============================================================== ; ABOUT ;============================================================== INIT_ABOUT: xor a ld [m_iFrame],a ld [m_iPage],a PAINT_ABOUT: ld hl,NAMTBL+(11*32) ; Direccion origen en VRAM ld bc,256 ; nº de bytes a rellenar xor a ; a=0 - Valor a rellenar call FILVRM ; BIOS –Fill block of VRAM with data byte ld a,[m_iPage] or a jr nz,@@DRAW_PAGE2 ; Programmed by ;@@DRAW_PAGE1: ld hl,TXT_ABOUT_1a ; Source address ld de,NAMTBL+11+(11*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ld hl,TXT_ABOUT_1b ; Source address ld de,NAMTBL+6+(12*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ; Art by ld hl,TXT_ABOUT_1e ; Source address ld de,NAMTBL+13+(14*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ld hl,TXT_ABOUT_1b ; Source address ld de,NAMTBL+6+(15*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ; Music by ld hl,TXT_ABOUT_1c ; Source address ld de,NAMTBL+12+(17*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ld hl,TXT_ABOUT_1d ; Source address ld de,NAMTBL+10+(18*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory jp @@END_DRAW_PAGES @@DRAW_PAGE2: ; Special thanks ld hl,TXT_ABOUT_2a ; Source address ld de,NAMTBL+9+(11*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ld hl,TXT_ABOUT_2b ; Source address ld de,NAMTBL+9+(14*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ld hl,TXT_ABOUT_2c ; Source address ld de,NAMTBL+8+(15*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ld hl,TXT_ABOUT_2d ; Source address ld de,NAMTBL+10+(16*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ld hl,TXT_ABOUT_2e ; Source address ld de,NAMTBL+9+(17*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ld hl,TXT_ABOUT_2f ; Source address ld de,NAMTBL+11+(18*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory @@END_DRAW_PAGES: ld a,1 ld [m_iLockKeys],a REPAINT_ABOUT: ; control de frames ei ; turn interrupts on. halt call PSGFrame ; process next music frame call PSGSFXFrame ; process next SFX frame RUN_ABOUT: call controller_update ; hemos presionado fuego ; >>>>>>>>>>>>>>>>>>> Controller BUTTON 1 <<<<<<<<<<<<<<<<<<<<<<< ld a,(var_ControllerStatus.1.StatusHit) ; We want to see what's been hit on controller 1 (port A = player 1) bit CONTROLLER_BIT_BUTTON_1,a ; Set zero flag depending on whether the bit has been hit: jr z,TO_REPAINT_ABOUT ld a,[m_iPage] or a jr z,@@TO_NEXT_PAGE ; back to main menu ld hl,NAMTBL+(11*32) ; Direccion origen en VRAM ld bc,256 ; nº de bytes a rellenar xor a ; a=0 - Valor a rellenar call FILVRM ; BIOS –Fill block of VRAM with data byte jp PAINT_MAIN @@TO_NEXT_PAGE: ld a,[m_iPage] inc a ld [m_iPage],a jp PAINT_ABOUT TO_REPAINT_ABOUT: jp REPAINT_ABOUT ; loop ;============================================================== ; SELECT ;============================================================== INIT_SELECT: ; variable initialization ld a,1 ld [m_iLockKeys],a xor a ld [m_iGameStage],a ld [m_iP1_Index],a ld [m_bP1_SelectFrame],a ld [m_bP1_SelectBalls],a ld [m_iFrame],a ld [m_iBoss_NumLifes],a ld a,PLAYERST_INIT ld [m_iP1_State],a ld hl,0 ld [m_iP1_Points],hl ; Esto lo realizamos para que no se vea nada en la pantalla ; Mientras colocamos los CHR y los Colores en la VRAM call DISSCR ; BIOS deshabilitar la pantalla ;============================================================== ; PORTRAID 1st - Load palette ;============================================================== ; 1. Set VRAM write address to CRAM (palette) address 0 (for palette index 0) ; by outputting $c000 ORed with $0000 ld a,0 out ($bf),a ld a,$c0 out ($bf),a ; 2. Output colour data ld hl, SET_SELECT1_PAL ld b, (SET_SELECT1_PAL_END - SET_SELECT1_PAL) ld c,$be otir ;============================================================== ; PORTRAID 1st - Load tiles to TILE BANK (limited to 448 (0x1c0)) ;============================================================== ; Load tiles ld de,$4BC0 ; VRAM write address ld hl,SET_SELECT1_TIL ; Source address call LoadTiles4BitRLENoDI ;============================================================== ; PORTRAID 2st - Load palette ;============================================================== ; 1. Set VRAM write address to CRAM (palette) address 0 (for palette index 0) ; by outputting $c000 ORed with $0000 ld a,16 out ($bf),a ld a,$c0 out ($bf),a ; 2. Output colour data ld hl, SET_SELECT2_PAL ld b, (SET_SELECT2_PAL_END - SET_SELECT2_PAL) ld c,$be otir ;============================================================== ; PORTRAID 2st - Load tiles to TILE BANK (limited to 448 (0x1c0)) ;============================================================== ; Load tiles ld de,$5A60 ; VRAM write address ld hl,SET_SELECT2_TIL ; Source address call LoadTiles4BitRLENoDI ;============================================================== ; PORTRAID 3st - Load tiles to TILE BANK (limited to 448 (0x1c0)) ;============================================================== ; Load tiles ld de,$4B40 ; VRAM write address ld hl,SET_SELECT3_TIL ; Source address call LoadTiles4BitRLENoDI ; Borrar los 768 Bytes de la Name Table - NAMTBL en VRAM ; Originalmente la BIOS rellena la NAMTBL con los valores del 0 al 255 en cada tercio por eso lo relleno todo con 0 ld hl,NAMTBL ; Direccion origen en VRAM ld bc,768 ; nº de bytes a rellenar xor a ; a=0 - Valor a rellenar call FILVRM ; BIOS –Fill block of VRAM with data byte PAINT_SELECT: ld hl,SET_SELECT1_MAP ; Source address ld de,NAMTBL+3+(5*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM ld bc,8 ; Number of CHR ld a,15 call LDIRVM_RECT ld hl,SET_SELECT2_MAP ; Source address ld de,NAMTBL+12+(5*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM ld bc,17 ; Number of CHR ld a,15 call LDIRVM_RECT ; Character names ld hl,TXT_KAI ; Source address ld de,NAMTBL+3+(21*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ld hl,TXT_GAIA ; Source address ld de,NAMTBL+12+(21*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ld hl,TXT_RAIDEN_SMALL ; Source address ld de,NAMTBL+21+(21*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM ld bc,8 call LDIRVM ; BIOS – Copy block to VRAM, from memory ld hl,TXT_THUNDER ; Source address ld de,NAMTBL+3+(22*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ld hl,TXT_WIND ; Source address ld de,NAMTBL+12+(22*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ld hl,TXT_FIRE ; Source address ld de,NAMTBL+21+(22*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ; Put texts on screen ld hl,TXT_SELECT ; Source address ld de,NAMTBL+10+(1*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM_TEXT ; BIOS – Copy block to VRAM, from memory ; BIOS enable screen call ENASCR REPAINT_SELECT: ; control de frames ei ; turn interrupts on. halt call PSGFrame ; process next music frame call PSGSFXFrame ; process next SFX frame ; ball adorns ld a,[m_bP1_SelectFrame] inc a ld [m_bP1_SelectFrame],a cp 5 jp nz,@@BLINKING xor a ld [m_bP1_SelectFrame],a ; put select frame to 0 ld a,[m_bP1_SelectBalls] or a jr z,@@BALLS_HIDE cp 3 jp z,@@BLINKING inc a ld [m_bP1_SelectBalls],a jr @@BALLS_DRAW @@BALLS_HIDE: inc a ld [m_bP1_SelectBalls],a ld hl,GFX_BLACK ; Source address ld bc,1 ; Number of CHR ld de,NAMTBL+3+(5*32) ld a,3 call LDIRVM_RECT ; BIOS – Copy block to VRAM, from memory ld de,NAMTBL+12+(5*32) ld a,3 call LDIRVM_RECT ; BIOS – Copy block to VRAM, from memory ld de,NAMTBL+21+(5*32) ld a,3 call LDIRVM_RECT ; BIOS – Copy block to VRAM, from memory ld de,NAMTBL+10+(17*32) ld a,3 call LDIRVM_RECT ; BIOS – Copy block to VRAM, from memory ld de,NAMTBL+19+(17*32) ld a,3 call LDIRVM_RECT ; BIOS – Copy block to VRAM, from memory ld de,NAMTBL+28+(17*32) ld a,3 call LDIRVM_RECT ; BIOS – Copy block to VRAM, from memory @@BALLS_DRAW: ld hl,NAMTBL+3+(5*32) call GET_SELECT_LEFT_TILE ex de,hl ld a,[m_bP1_SelectBalls] or a jr z,@@BLINKING ld hl,GFX_SELECT_BALL_1 ; Source address ld bc,1 ; Number of CHR que tiene el texto call LDIRVM_RECT ; BIOS – Copy block to VRAM, from memory ld a,[m_bP1_SelectBalls] add a,a add a,a add a,a add a,a add a,a ld l,a ld h,0 ld de,NAMTBL+10+(20*32) ex de,hl sbc hl,de call GET_SELECT_LEFT_TILE ex de,hl ld a,[m_bP1_SelectBalls] ld hl,GFX_SELECT_BALL_3 ; Source address ld bc,1 ; Number of CHR que tiene el texto call LDIRVM_RECT ; BIOS – Copy block to VRAM, from memory ; blinking letters @@BLINKING: ld a,[m_iFrame] inc a ld [m_iFrame],a cp 20 jr z,@@BLINK_DRAW cp 40 jr nz,RUN_SELECT ; blinking erase ld hl,GFX_BLACK ; Source address ld de,NAMTBL+5+(3*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM ld bc,23 ; Number of CHR que tiene el texto call LDIRVM ; BIOS – Copy block to VRAM, from memory xor a ld [m_iFrame],a jr RUN_SELECT @@BLINK_DRAW: ld a,[m_iP1_Index] ld d,0 ld e,a ld hl,NAMTBL+5+(3*32) call GET_SELECT_LEFT_TILE ex de,hl push bc ld hl,TXT_1P ; Source address ld bc,5 call LDIRVM ; BIOS – Copy block to VRAM, from memory pop bc RUN_SELECT: call controller_update ; Move P1 bat ; >>>>>>>>>>>>>>>>>>> Controller LEFT <<<<<<<<<<<<<<<<<<<<<<< ld a,(var_ControllerStatus.1.StatusHit) ; We want to see what's been hit on controller 1 (port A = player 1) bit CONTROLLER_BIT_LEFT,a ; Set zero flag depending on whether the bit has been hit: jr z,@@FREE_LEFT1 ; Check if is the first frame to press ld a,[m_iP1_Left] cp 1 jr z,@@RIGHT1 ld a,1 ld [m_iP1_Left],a ;ld a,SND_MENU_MOVE ;call PLAY_SND_FX ; Move left xor a ld [m_bP1_SelectFrame],a ld [m_bP1_SelectBalls],a ld a,[m_iP1_Index] dec a ; Check if index is smaller than 0 cp -1 jr nz,@@ENDIF_P1L_NEG ld a,2 @@ENDIF_P1L_NEG: ld [m_iP1_Index],a jr SELECT_CONTROL_CHECK_END @@FREE_LEFT1: ld b,a xor a ld [m_iP1_Left],a ld a,b @@RIGHT1: ; >>>>>>>>>>>>>>>>>>> Controller RIGHT <<<<<<<<<<<<<<<<<<<<<<< ld a,(var_ControllerStatus.1.StatusHit) ; We want to see what's been hit on controller 1 (port A = player 1) bit CONTROLLER_BIT_RIGHT,a ; Set zero flag depending on whether the bit has been hit: jr z,@@FREE_RIGHT1 ; Check if is the first frame to press ld a,[m_iP1_Right] cp 1 jr z,SELECT_CONTROL_CHECK_END ld a,1 ld [m_iP1_Right],a ;ld a,SND_MENU_MOVE ;call PLAY_SND_FX ; Move right xor a ld [m_bP1_SelectFrame],a ld [m_bP1_SelectBalls],a ld a,[m_iP1_Index] inc a ; Check if index is bigger than 2 cp 3 jr nz,@@ENDIF_P1R_NEG xor a @@ENDIF_P1R_NEG: ld [m_iP1_Index],a jr SELECT_CONTROL_CHECK_END @@FREE_RIGHT1: xor a ld [m_iP1_Right],a SELECT_CONTROL_CHECK_END: ; >>>>>>>>>>>>>>>>>>> Controller BUTTON 1 <<<<<<<<<<<<<<<<<<<<<<< ld a,(var_ControllerStatus.1.StatusHit) ; We want to see what's been hit on controller 1 (port A = player 1) bit CONTROLLER_BIT_BUTTON_1,a ; Set zero flag depending on whether the bit has been hit: jr nz,LEAVE_SELECT TO_REPAINT_SELECT: jp REPAINT_SELECT ; loop LEAVE_SELECT: ;ld a,SND_MENU_SELECT ;call PLAY_SND_FX ld a,[m_iP1_Index] ld d,0 ld e,a ld hl,NAMTBL+3+(5*32) call GET_SELECT_LEFT_TILE ld [m_iPage],hl xor a ld [m_iFrame],a ld [m_bP1_Selected],a ; precalculate move speed ld hl,m_iP1_AxisInc ld [m_iP1_AxisIndex],hl ld hl,CONTROL_INC ld [m_iP1_ControlInc],hl call INIT_PLAYER_CONTROL_AXIS ; precalculate move speed (faster) ld hl,m_iP1_AxisIncFast ld [m_iP1_AxisIndex],hl ld hl,CONTROL_INC_FASTER ld [m_iP1_ControlInc],hl call INIT_PLAYER_CONTROL_AXIS LEAVE_SELECT_LOOP: ; control de frames ei ; turn interrupts on. halt ld a,[m_iFrame] cp 48 jr nc,LEAVE_SELECT_WHITE_END ld a,[m_bP1_Selected] inc a ld [m_bP1_Selected],a cp 2 jr z,LEAVE_SELECT_WHITE cp 4 jr z,LEAVE_SELECT_DRAW jr LEAVE_SELECT_WHITE_END LEAVE_SELECT_DRAW: xor a ld [m_bP1_Selected],a ld hl,SET_SELECT1_MAP ; Source address ld de,NAMTBL+3+(5*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM ld bc,8 ; Number of CHR ld a,15 call LDIRVM_RECT ld hl,SET_SELECT2_MAP ; Source address ld de,NAMTBL+12+(5*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM ld bc,17 ; Number of CHR ld a,15 call LDIRVM_RECT jr LEAVE_SELECT_WHITE_END LEAVE_SELECT_WHITE: ld hl,GFX_BLACK ; Direction of tiles to draw ld de,[m_iPage] ; Direction to draw in the char table ld bc,8 ; Num of chars ld a,15 ; Num lines to draw call LDIRVM_RECT_R LEAVE_SELECT_WHITE_END: ld a,[m_iFrame] inc a cp 150 jr z,INIT_GAME_INTRO ld [m_iFrame],a jp LEAVE_SELECT_LOOP ;--------------------------------------------------------- ; GET SELECT FIRST VRAM ;--------------------------------------------------------- GET_SELECT_LEFT_TILE: ld a,[m_iP1_Index] ld e,a add a,a add a,a add a,a add a,e ld d,0 ld e,a add hl,de ret ;============================================================== ; GAME INTRO ;============================================================== INIT_GAME_INTRO: ; Esto lo realizamos para que no se vea nada en la pantalla ; Mientras colocamos los CHR y los Colores en la VRAM call DISSCR ; BIOS deshabilitar la pantalla ; stop music call PSGCancelLoop .IF CHEAT_STAGE == TRUE ld a,[$FBE5+6] ;F2 bit 6,a jp nz,notF2pressed ld a,1 ld [m_iGameStage],a ld a,2 ld [m_iP1_PwrUp],a jr INIT_PLAYER_VARIABLES notF2pressed: ld a,[$FBE5+6] ;F3 bit 7,a jp nz,notF3pressed ld a,2 ld [m_iGameStage],a ld a,3 ld [m_iP1_PwrUp],a jr INIT_PLAYER_VARIABLES notF3pressed: .ENDIF ld a,[m_iGameStage] or a jr nz,DONT_INIT_PLAYER_VARIABLES INIT_PLAYER_VARIABLES: ; player power ups = 1 ld a,1 ld [m_iP1_PwrUp],a ; player lifes = 3 ld a,3 ld [m_iP1_Lives],a ;ld [m_iP2_Lives],a ; life extends xor a ld [m_iLifeExtends],a ld hl,[LIFE_EXTENDS] ld [m_iExtendsScore],hl ld hl,[m_iExtendsScore] ld de,TXT_EXTENDS_SCR call Num2Ascii ; Extra bullet X ld a,[m_iP1_Index] add a,a ld d,0 ld e,a ld hl,BULLET_EXTRA_X add hl,de ld a,[hl] ld [m_iBulletExtraX_Left],a inc hl ld a,[hl] ld [m_iBulletExtraX_Right],a DONT_INIT_PLAYER_VARIABLES: ; Inicializamos variables xor a ld [m_iScrollRow],a ld [m_iScrollFrame],a ld [m_iGamePause],a ld [m_iWhiteScreen],a ld [m_bRedrawShip],a ld [m_iSprDrawFrame],a ld [m_iNumSpr],a ld [m_bP1_Shoot_A],a ld [m_bFramePair],a ld [m_bFrameTrio],a ld [m_bFrameQuad],a ld [m_iP1_InvFrame],a ld [m_iP1_DeadFrame],a ld [m_iDrawStringFrame],a ld [m_iDrawStringLetter],a ld [m_iCurrentSpawnedEnemies],a ld [m_iCurrentKilledEnemies],a ld [m_iShowX2Text],a ld [m_iBoss_CommingFrame],a ld hl,m_iExplosionStruct ld [m_iExplosionPointer],hl ld a,1 ld [m_iLockKeys],a ld [m_iP1_Invulnerable],a ld hl,0 ld [m_iScrollY],hl xor a ld [m_iP1_WingSprite],a ld [m_iP1_WingFrame],a ld [m_iWingFrames],a ;ld a,8 ;ld [m_iP2_WingFrame],a ;ld a,1 ;ld [m_iP2_WingIndex],a ld [m_iP1Y+1],a ld [m_iP1X+1],a ld a,GAME_SIZEX2 ld [m_iP1X],a ld a,GAME_SIZEY-1 ld [m_iP1Y],a ld a,1 ld [m_bCanShoot],a ld a,ST_PLAYING ld [m_iGameState],a ld hl,HI_SCORE ld de,TXT_POINTS_HIS call Num2Ascii ; get the number of enemies in this stage ld a,[m_iGameStage] ld b,0 ld c,a ld ix,ENEMY_SPAWN_NUMBER add ix,bc ld a,[ix+0] ld [m_iStageNumEnemies],a ; the boss max life ld ix,ENEMY_DATA_BOSS_LIFE add ix,bc add ix,bc ld h,[ix+0] ld l,[ix+1] ld [m_iBoss_MaxLife],hl ; the index in rom of the first enemy to check ld ix,ENEMY_SPAWN_FIRST_INDEX add ix,bc add ix,bc ld l,[ix+0] ld h,[ix+1] ld [m_iEnemySpawnIndex],hl ; get next enemy to spawn scroll Y ld d,[hl] inc hl ld e,[hl] ld [m_iEnemySpawnNext],de ; re-init bullets ld bc,MAX_BULLETS-1 ld hl,m_bBulletsActive ld de,m_bBulletsActive+1 ld [hl],0 ldir ; re-init enemies ld bc,MAX_ENEMIES-1 ld hl,m_bEnemyActive ld de,m_bEnemyActive+1 ld [hl],0 ldir ; re-init enemy bullets ld bc,MAX_EBULLETS-1 ld hl,m_bEbulletActive ld de,m_bEbulletActive+1 ld [hl],0 ldir ; re-init items ld bc,MAX_ITEMS-1 ld hl,m_bItemActive ld de,m_bItemActive+1 ld [hl],0 ldir ; re-init explosions ld bc,MAX_EXPLOSIONS-1 ld hl,m_bExplosionActive ld de,m_bExplosionActive+1 ld [hl],0 ldir ; Score ld hl,PERFECT_SCORE ld [m_iDefensiveScore],hl ; Erase sprites call CLRSPR ; Clean sprite buffer ;call CLEAN_SPRITES ; Borrar los 768 Bytes de la Name Table - NAMTBL en VRAM ; Originalmente la BIOS rellena la NAMTBL con los valores del 0 al 255 en cada tercio por eso lo relleno todo con 0 ld hl,NAMTBL ; Source address in VRAM ld bc,768 ; nº of bytes to fill xor a ; a=0 - Value to fill call FILVRM ; BIOS – Fill block of VRAM with data byte .breakpoint ei halt ; Player 1 face (primer banco) ld a,[m_iP1_Index] add a,a ld b,0 ld c,a ld iy,SET_GAMEFACE_PAL add iy,bc ld ix,m_iPaletteBuffer ld a,[iy+12] ld [ix+12],a ld a,[iy+13] ld [ix+13],a ld a,[iy+14] ld [ix+14],a ld a,[iy+15] ld [ix+15],a ld iy,SET_GAMEFACE_TIL add iy,bc ; Load tiles ld de,$4BC0 ; VRAM write address ld l,[iy+0] ld h,[iy+1] call LoadTiles4BitRLENoDI ; Put faces on screen ;ld ix,SET_GAMEFACE_1_MAP ;add ix,bc ;ld l,[ix+0] ;ld h,[ix+1] ;ld de,NAMTBL+12+(5*32) ; LOCATE 6,2 : Destino la NAMBTL en VRAM ;ld bc,6 ; Number of CHR ;ld a,3 ;call LDIRVM_RECT ; Put x2 tiles in VRAM ld de,$4E00 ; VRAM write address ld hl,SET_FONT_X2_TIL call LoadTiles4BitRLENoDI ; Load hud ornament graphics to VRAM ld de,$4E40 ; VRAM write address ld hl,SET_ORNAMENT_UP_TIL call LoadTiles4BitRLENoDI ld de,$4EA0 ; VRAM write address ld hl,SET_ORNAMENT_DOWN_TIL call LoadTiles4BitRLENoDI ; BACKGROUND CHARS ; get current stage index ld a,[m_iGameStage] add a,a ld b,0 ld c,a ld ix,SET_STAGE_MAPS_MAP add ix,bc ld l,[ix+0] ld h,[ix+1] push hl push bc ; load CHRs to RAM ld de,m_iCharStgMaps ld bc,2*176+256 ldir pop bc pop hl ; load CLRs to RAM push bc ld de,m_iCharStgMaps+(24*18) ld bc,144 ldir pop bc ; load stage char ld ix,SET_STAGE_MAPS_TIL add ix,bc ld l,[ix+0] ld h,[ix+1] ld de,$4EE0 ; VRAM write address ld hl,SET_STAGE_1_MAPS_TIL call LoadTiles4BitRLENoDI ; BIG SHIP ; Unpack ship ; PLAYER NAME ld a,[m_iP1_Index] or a jr z,@@SAVE_NAME_KAI cp 1 jr z,@@SAVE_NAME_GAIA cp 2 jr z,@@SAVE_NAME_RAIDEN @@SAVE_NAME_KAI: ld a,3 ld de,TXT_KAI jr @@SAVE_NAME_END @@SAVE_NAME_GAIA: ld a,4 ld de,TXT_GAIA jr @@SAVE_NAME_END @@SAVE_NAME_RAIDEN: ld a,6 ld de,TXT_RAIDEN @@SAVE_NAME_END: ld [m_iP1_NameLenght],a ld [m_iP1_NamePointer],de ;ld ix,m_iP1_NamePointer ;ld [ix+0],e ;ld [ix+1],d ; Enable screen. call ENASCR PAINT_GAME: call PAINT_GAME_HUD REPAINT_GAME: ; frame control ei ; turn interrupts on. halt ld a,[m_iGameStage] add a,a ld b,0 ld c,a ld ix,SET_STAGE_MAPS_TIL add ix,bc ld l,[ix+0] ld h,[ix+1] ld hl,SET_STAGE_1_MAPS_TIL ; get current stage index ld a,[m_iGameStage] add a,a ld b,0 ld c,a ld ix,SET_STAGE_MAPS_MAP add ix,bc ld l,[ix+0] ld h,[ix+1] RUN_GAME: jp REPAINT_GAME PAINT_GAME_HUD: ld hl,SET_ORNAMENT_UP_MAP ; Source address ld bc,6 ; Number of CHR que tiene el texto ld de,HUD_NAME_CHAR-32 ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ld hl,GFX_HUD_FACE_A ; Source address ld de,HUD_FACE_CHAR ; LOCATE 6,2 : Destino la NAMBTL en VRAM ld bc,6 ; Number of CHR que tiene el texto ld a,3 call LDIRVM_RECT ; BIOS – Copy block to VRAM, from memory ; Score: ld hl,SET_ORNAMENT_UP_MAP ; Source address ld bc,6 ; Number of CHR que tiene el texto ld de,HUD_SCORE1_CHAR-32 ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ld hl,TXT_SCORE ; Source address ld bc,6 ; Number of CHR que tiene el texto ld de,HUD_SCORE1_CHAR ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ld hl,SET_ORNAMENT_DOWN_MAP; Source address ld bc,6 ; Number of CHR que tiene el texto ld de,HUD_SCORE1_CHAR+64 ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ; Hi-Score: ld hl,SET_ORNAMENT_UP_MAP ; Source address ld bc,6 ; Number of CHR que tiene el texto ld de,HUD_HISCORE1_CHAR-32 ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ld hl,TXT_HISCORE ; Source address ld bc,6 ; Number of CHR que tiene el texto ld de,HUD_HISCORE1_CHAR ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ld hl,SET_ORNAMENT_DOWN_MAP; Source address ld bc,6 ; Number of CHR que tiene el texto ld de,HUD_HISCORE1_CHAR+64 ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ; Extends: ld hl,SET_ORNAMENT_UP_MAP ; Source address ld bc,6 ; Number of CHR que tiene el texto ld de,HUD_EXTENDS1_CHAR-32 ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ld hl,TXT_EXTENDS ; Source address ld bc,6 ; Number of CHR que tiene el texto ld de,HUD_EXTENDS1_CHAR ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ld hl,SET_ORNAMENT_DOWN_MAP; Source address ld bc,6 ; Number of CHR que tiene el texto ld de,HUD_EXTENDS1_CHAR+64 ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ; Extends2: ld hl,TXT_EXTENDS_SCR ; Source address ld bc,5 ; Number of CHR que tiene el texto ld de,HUD_EXTENDS2_CHAR ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ; Player 1 Lives ld a,[m_iP1_Lives] ld hl,GFX_HUD_HEART ; Graphic source address ld de,HUD_HEART_CHAR ; LOCATE 6,2 : Destino la NAMBTL en VRAM ld b,0 ; Number of CHR que tiene el texto ld c,a ; Number of CHR que tiene el texto call LDIRVM ; BIOS – Copy block to VRAM, from memory ; Player 1 Power-up ld a,[m_iP1_PwrUp] ld hl,GFX_HUD_POWER ; Graphic source address ld de,HUD_PWRUP_CHAR ; LOCATE 6,2 : Destino la NAMBTL en VRAM ld b,0 ; Number of CHR que tiene el texto ld c,a ; Number of CHR que tiene el texto call LDIRVM ; BIOS – Copy block to VRAM, from memory ; Player 1 name ld a,[m_iP1_NameLenght] ld c,a ld hl,[m_iP1_NamePointer] ld de,HUD_NAME_CHAR ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ret REPAINT_GAME_HUD: ld hl,[m_iP1_Points] ld de,HI_SCORE sbc hl,de jp c,@@JUMP ld hl,[m_iP1_Points] ld de,TXT_POINTS_HIS call Num2Ascii @@JUMP: ; repaint points ld hl,[m_iP1_Points] ld de,TXT_POINTS_SCR call Num2Ascii ld hl,TXT_POINTS_SCR ; Source address ld bc,5 ; Number of CHR que tiene el texto ld de,HUD_SCORE2_CHAR ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ; x2 text ld hl,SET_FONT_X2_MAP ; Source address ld a,[m_iShowX2Text] or a jr z,REPAINT_X2 dec a ld [m_iShowX2Text],a ld hl,TXT_X2 ; Source address REPAINT_X2: ld bc,2 ; Number of CHR que tiene el texto ld de,HUD_SCOREX2_CHAR ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ld hl,TXT_POINTS_HIS ; Source address ld bc,5 ; Number of CHR que tiene el texto ld de,HUD_HISCORE2_CHAR ; LOCATE 6,2 : Destino la NAMBTL en VRAM call LDIRVM ; BIOS – Copy block to VRAM, from memory ; trazas tracitas ;ld hl,[m_iScrollY] ;ld hl,[m_iTraza] ;ld a,[m_iStageNumEnemies] ;ld a,[m_iCurrentSpawnedEnemies] ;ld a,[m_iBoss_ShootFrame] ;ld hl,[m_iEnemyAimAngle] ; Get frame first array index ;ld de,TXT_TRAZAS ;call Num2Ascii ;ld hl,TXT_TRAZAS ; Source address ;ld bc,5 ; Number of CHR que tiene el texto ;ld de,HUD_DEBUG ; LOCATE 6,2 : Destino la NAMBTL en VRAM ;call fLDIRVM ; BIOS – Copy block to VRAM, from memory ret ;============================================================== ; GAME_BOSS_COMING ;============================================================== INIT_BOSS_COMING: .ends .include "include/msx_bios.asm" .include "include/math.asm" .include "include/unpack.inc" ;============================================================== ; Data ;============================================================== .section "data" free ; VDP initialisation data VdpData: .db $04,$80,$80,$81,$ff,$82,$ff,$85,$ff,$86,$ff,$87,$00,$88,$00,$89,$ff,$8a VdpDataEnd: SET_FONT_TIL: .INCBIN "res/gfxs/gfx_font.til" SET_FONT_X2_TIL: .INCBIN "res/gfxs/set_x2.til" SET_FONT_X2_MAP: .dw $0070, $0071 SET_ORNAMENT_UP_TIL: .INCBIN "res/gfxs/gfx_ornament_up.til" SET_ORNAMENT_UP_MAP: .dw $0076 $0077 $0078 $0278 $0277 $0276 SET_ORNAMENT_DOWN_TIL: .INCBIN "res/gfxs/gfx_ornament_down.til" SET_ORNAMENT_DOWN_MAP: .dw $0072 $0073 $0074 $0274 $0073 $0075 GFX_BLACK: .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000, .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 GFX_HUD_HEART: .db 94,94,94,94,94,94 GFX_HUD_POWER: .db 95,95,95,95 SET_SELECTOR_MAP: .dw $003B,$003C,$023B ;GFX_SPHERE_R: GFX_SELECT_BALL_1: GFX_SELECT_BALL_3: .dw $005E,$005E,$005E .ends .section "data_gfx_kitmaker" free SET_KITMAKER_PAL: .include "res/gfxs/gfx_logokit.pal" SET_KITMAKER_PAL_END: SET_KITMAKER_MAP: .include "res/gfxs/gfx_logokit.map" SET_KITMAKER_MAP_END: SET_KITMAKER_TIL: .INCBIN "res/gfxs/gfx_logokit.til" .ends .section "data_gfx_title" free SET_TITLE_PAL: .include "res/gfxs/gfx_logogame.pal" SET_TITLE_PAL_END: SET_TITLE_MAP: .include "res/gfxs/gfx_logogame.map" SET_TITLE_MAP_END: SET_TITLE_TIL: .INCBIN "res/gfxs/gfx_logogame.til" .ends .section "data_gfx_select_1" free SET_SELECT1_PAL: .include "res/gfxs/gfx_select_1.pal" SET_SELECT1_PAL_END: SET_SELECT1_MAP: .include "res/gfxs/gfx_select_1.map" SET_SELECT1_MAP_END: SET_SELECT1_TIL: .INCBIN "res/gfxs/gfx_select_1.til" .ends .section "data_gfx_select_2" free SET_SELECT2_PAL: .include "res/gfxs/gfx_select_2.pal" SET_SELECT2_PAL_END: SET_SELECT2_MAP: .include "res/gfxs/gfx_select_2.map" SET_SELECT2_MAP_END: SET_SELECT2_TIL: .INCBIN "res/gfxs/gfx_select_2.til" .ends .section "data_gfx_select_3" free SET_SELECT3_TIL: .INCBIN "res/gfxs/gfx_select_3.til" .ends .section "data_gfx_stg_1" free SET_STAGE_1_MAPS_PAL: .include "res/gfxs/set_stg1_maps.pal" SET_STAGE_1_MAPS_PAL_END: SET_STAGE_1_MAPS_MAP: .include "res/gfxs/set_stg1_maps.map" SET_STAGE_1_MAPS_MAP_END: SET_STAGE_1_MAPS_TIL: .INCBIN "res/gfxs/set_stg1_maps.til" .ends .section "data_gfx_stg_2" free SET_STAGE_2_MAPS_PAL: .include "res/gfxs/set_stg2_maps.pal" SET_STAGE_2_MAPS_PAL_END: SET_STAGE_2_MAPS_MAP: .include "res/gfxs/set_stg2_maps.map" SET_STAGE_2_MAPS_MAP_END: SET_STAGE_2_MAPS_TIL: .INCBIN "res/gfxs/set_stg2_maps.til" .ends .section "data_gfx_stg_3" free SET_STAGE_3_MAPS_PAL: .include "res/gfxs/set_stg3_maps.pal" SET_STAGE_3_MAPS_PAL_END: SET_STAGE_3_MAPS_MAP: .include "res/gfxs/set_stg3_maps.map" SET_STAGE_3_MAPS_MAP_END: SET_STAGE_3_MAPS_TIL: .INCBIN "res/gfxs/set_stg3_maps.til" .ends .section "data_gfx_game_face_1" free SET_GAMEFACE_1_PAL: .include "res/gfxs/set_game_face_1.pal" SET_GAMEFACE_1_PAL_END: SET_GAMEFACE_1_TIL: .INCBIN "res/gfxs/set_game_face_1.til" .ends .section "data_gfx_game_face_2" free SET_GAMEFACE_2_PAL: .include "res/gfxs/set_game_face_2.pal" SET_GAMEFACE_2_PAL_END: SET_GAMEFACE_2_TIL: .INCBIN "res/gfxs/set_game_face_2.til" .ends .section "data_gfx_game_face_3" free SET_GAMEFACE_3_PAL: .include "res/gfxs/set_game_face_3.pal" SET_GAMEFACE_3_PAL_END: SET_GAMEFACE_3_TIL: .INCBIN "res/gfxs/set_game_face_3.til" .ends .section "data_gfx_game_face_map" free GFX_HUD_FACE_A: .dw $0000 $0001 $0002 $0003 $0004 $0005 .dw $0006 $0007 $0008 $0009 $000A $000B .dw $000C $000D $000E $000F $0010 $0011 SET_STAGE_MAPS_PAL: .dw SET_STAGE_1_MAPS_PAL, SET_STAGE_1_MAPS_PAL, SET_STAGE_2_MAPS_PAL, SET_STAGE_2_MAPS_PAL, SET_STAGE_3_MAPS_PAL, SET_STAGE_3_MAPS_PAL SET_STAGE_MAPS_MAP: .dw SET_STAGE_1_MAPS_MAP, SET_STAGE_1_MAPS_MAP, SET_STAGE_2_MAPS_MAP, SET_STAGE_2_MAPS_MAP, SET_STAGE_3_MAPS_MAP, SET_STAGE_3_MAPS_MAP SET_STAGE_MAPS_TIL: .dw SET_STAGE_1_MAPS_TIL, SET_STAGE_1_MAPS_TIL, SET_STAGE_2_MAPS_TIL, SET_STAGE_2_MAPS_TIL, SET_STAGE_3_MAPS_TIL, SET_STAGE_3_MAPS_TIL SET_GAMEFACE_PAL: .dw SET_GAMEFACE_1_PAL, SET_GAMEFACE_2_PAL, SET_GAMEFACE_3_PAL ;SET_GAMEFACE_MAP: .dw SET_GAMEFACE_1_MAP, SET_GAMEFACE_2_MAP, SET_GAMEFACE_3_MAP SET_GAMEFACE_TIL: .dw SET_GAMEFACE_1_TIL, SET_GAMEFACE_2_TIL, SET_GAMEFACE_3_TIL .ends ;============================================================== ; Controller abstraction code! ;============================================================== ;.bank 0 ; Within the ROM: .section "controller_code" free ; hit = 0 to 1 ; held = 1 to 1 ; released = 1 to 0 ; idle = 0 to 0 .struct ControllerStatus ; Stores the current state of the joystick as an array of bits. StatusCurrent db StatusPrevious db ; Stores the transitional resultant state of the joystick as an array of bits. StatusHit db StatusHeld db StatusReleased db StatusIdle db .endst .define ControllerStatus_size 6 ; size of one instance. .define ControllerStatus_section_size ControllerStatus_size*2 ; size of all instances. ; Invalidates the crap outta everything. ; You should call this at the start of your game. controller_init: xor a ld (var_PauseNMITriggered),a ld b,ControllerStatus_section_size ld hl,var_ControllerStatus controller_init_memory_clear_loop: ld (hl),a inc hl djnz controller_init_memory_clear_loop ret ; Call this every frame to collect the current state of the controller from the I/O ports ; and massage it into a friendly format, and store it in the var_ControllerStatus instances. ; ; To query against the controllers, you can do the following: ; ld a,(controller.1.statushit) ; We want to see what's been hit on controller 1 (port A = player 1) ; bit CONTROLLER_BIT_BUTTON_1,a ; Set zero flag depending on whether the bit has been hit: ; jp z,start_is_not_pressed ; Execute handler only if start is pressed ; START HANDLER GOES HERE. ; start_is_not_pressed: ; ; Of course, you can do a conditional call 'CALL NZ,do_something_on_start' instead if you prefer, if that boats yer' float. controller_update: ; Push old state both both controllers explicitly. ; We have to do this before the port interaction bit-splatter recipe. ld a,(var_ControllerStatus.1.StatusCurrent) ld (var_ControllerStatus.1.StatusPrevious),a ld a,(var_ControllerStatus.2.StatusCurrent) ld (var_ControllerStatus.2.StatusPrevious),a ; Populate new states ld a,(var_PauseNMITriggered) ; The seventh bit comes from the PauseNMI, read it now! ld c,a ; Put the pause bit contribution in c, both controllers can use this. xor a ; Clear the pause flag after the controller update. ld (var_PauseNMITriggered),a in a,(PORT_IOPortAAndB) ; The first six bits of PortA come from this port. cpl ; I don't like the active-low inputs, so I'm using to invert them here ld b,a ; There may be 'problems' if we repeatedly IN the controller port (remember the Amiga voltage crap?) and %00111111 or c ; The seventh bit comes from the PauseNMI! ld (var_ControllerStatus.1.StatusCurrent),a ; Store current state for port A ld a,b ; Get the original reading back to modify it a bit: and %11000000 ; Only the two two bits of the original reading are relevant for port B ld b,a in a,(PORT_IOPortBAndMisc) ; The rest of the bits come from this port. cpl ; I don't like the active-low inputs, so I'm using to invert them here and %00001111 ; Only the lower four bits are relevant for port B or b ; And apply the top two bits from the original reading rlca ; Rotate two to the left to put them in the proper place. rlca or c ; The seventh bit comes from the PauseNMI! ld (var_ControllerStatus.2.StatusCurrent),a ; Store current state for port B ; Update composite bit arrays. ; This has to loop twice for the two controllers. ; We constantly inc HL to go through both 6 byte structure instances in a smart looking loop. ld hl,var_ControllerStatus.1 ld d,2 controller_update_composite_state_construction_loop: ; Load the state bit arrays into B and C. ld b,(hl) inc hl ld c,(hl) inc hl ; b = current, c = previous, hl = pointing at 'Hit' ; HIT = current & !previous ld a,c cpl and b ld (hl),a inc hl ; HELD = current & previous ld a,b and c ld (hl),a inc hl ; RELEASED = !current & previous ld a,b cpl and c ld (hl),a inc hl ; IDLE = !current & !previous = !(current or previous) ld a,b or c cpl ld (hl),a inc hl dec d jp nz,controller_update_composite_state_construction_loop ; And that's Camel! ret ;--------------------------------------------------------- ; Tabla de movimientos ; el primer valor suma o resta 1 a la coordenada Y ; el segundo valor suma o resta 1 a la coordenada X ; el valor 0 ni suma ni resta nada a las coordenadas ;--------------------------------------------------------- CONTROL_AXIS: .db 0, 0 ; 0 - Sin movimiento .db 8, 0 ; 1 - Mover arriba .db 6, 6 ; 2 - Mover arriba-derecha .db 0, 8 ; 3 - Mover derecha .db 6, 6 ; 4 - Mover abajo-derecha .db 8, 0 ; 5 - Mover abajo .db 6, 6 ; 6 - Mover abajo-izquierda .db 0, 8 ; 7 - Mover izquierda .db 6, 6 ; 8 - Mover arriba-izquierda CONTROL_AXIS_NEG: .db 0, 0 ; 0 - Sin movimiento .db -1, 0 ; 1 - Mover arriba .db -1, 0 ; 2 - Mover arriba-derecha .db 0, 0 ; 3 - Mover derecha .db 0, 0 ; 4 - Mover abajo-derecha .db 0, 0 ; 5 - Mover abajo .db 0,-1 ; 6 - Mover abajo-izquierda .db 0,-1 ; 7 - Mover izquierda .db -1,-1 ; 8 - Mover arriba-izquierda CONTROL_INC: .db 64-8 .db 72-8 .db 48-8 CONTROL_INC_FASTER: .db 64+8 .db 72+8 .db 48+8 INIT_PLAYER_CONTROL_AXIS: ld iy,CONTROL_AXIS ld ix,CONTROL_AXIS_NEG ld a,0 INIT_PLAYER_CONTROL_AXIS_LOOP: push af ld a,[iy+0] or a jr z,INIT_PLAYER_CONTROL_AXIS_NEXT ld d,0 ld e,a ld hl,[m_iP1_ControlInc] ld a,[m_iP1_Index] ld b,0 ld c,a add hl,bc ld h,[hl] call Mul8b ; get if negative ld a,[ix+0] or a jr z,SAVE_AXIS ex de,hl ld hl,$0000 sbc hl,de SAVE_AXIS: pop af push af ex de,hl ld hl,[m_iP1_AxisIndex] add a,a ld b,0 ld c,a add hl,bc ld [hl],d inc hl ld [hl],e INIT_PLAYER_CONTROL_AXIS_NEXT: pop af inc iy inc ix inc a cp 18 jr nz,INIT_PLAYER_CONTROL_AXIS_LOOP ret .ends .section "utils_num2ascii" free ;---------------------------------------------------------- Num2Ascii: ;Input: HL = number to convert, DE = location of ASCII string ;Output: ASCII string at (DE) ;---------------------------------------------------------- ld bc,-10000 call Num1 ld bc,-1000 call Num1 ld bc,-100 call Num1 ld c,-10 call Num1 ld c,b Num1: ld a,'0'-1 Num2: inc a add hl,bc jr c,Num2 sbc hl,bc ld [de],a inc de ret ;--------------------------------------------------------- .ends .include "text/english.asm" ; include texts .include "include/PSGlib.inc" ; include sound library ;--------------------------------------------- ; PLAYER DATA ;--------------------------------------------- .section "player data" free BULLETS_POWER: ; x2 x2 x3 x3 x4 .db 6, 8, 9, 10, 11, 4, 5, 6, 7, 8 ; ray ; x2 x2 x3 x3 x4 .db 5, 7, 8, 9, 10, 6, 7, 8, 9, 10 ; wind ; x2 x2 x2 x2 x3 .db 7, 9, 10, 11, 12, 8, 9, 10, 11, 12 ; fire BULLET_EXTRA_X: .db -16, 0, -20, 4, -16, 0 LIFE_EXTENDS: .dw 12000, 24000, 50000, 0;, 65000 .ends ;--------------------------------------------- ; ENEMY DATA ;--------------------------------------------- .section "enemy data" free ;(23 bytes) ENEMY_DATA_SPRITE: ; stg 1 enemies .db 49*4 ; normal ship .db 49*4 ; normal ship .db 50*4 ; speed birdman 1 .db 51*4 ; speed birdman 2 .db -1 ; bigger ship .db 52*4 ; birdman .db 52*4 ; boss ; stg 2 enemies .db 53*4 ; normal tank .db 53*4 ; item tank .db -1 ; bigger ship .db 52*4 ; human .db 55*4 ; human back 1 .db 58*4 ; human back 2 .db 60*4 ; boss .db 62*4 ; light ball ; stg 3 enemies .db 49*4 ; normal ship .db 49*4 ; item ship .db 50*4 ; speed ninja 1 .db 51*4 ; speed ninja 2 .db -1 ; bigger ship a .db -1 ; bigger ship b .db 52*4 ; ninja .db 49*4 ; kamikaze 1 .db 49*4 ; kamikaze 2 .db 61*4 ; boss .db 62*4 ; light ball ;(23 bytes) ENEMY_DATA_WIDTH: ; hotspotx, bulletx, bullety, gfxmode, expossion type ; stg 1 enemies .db (ESIZE_SMALL/2) + BULLET_SIZE ; normal ship .db (ESIZE_SMALL/2) + BULLET_SIZE ; normal ship .db (ESIZE_SMALL/2) + BULLET_SIZE ; speed birdman 1 .db (ESIZE_SMALL/2) + BULLET_SIZE ; speed birdman 2 .db (ESIZE_BIGER/2) + BULLET_SIZE ; bigger ship .db (ESIZE_SMALL/2) + BULLET_SIZE ; birdman .db (ESIZE_SMALL/2) + BULLET_SIZE ; boss ; stg 2 enemies .db (ESIZE_SMALL/2) + BULLET_SIZE ; normal tank .db (ESIZE_SMALL/2) + BULLET_SIZE ; item tank .db (ESIZE_BIGER/2) + BULLET_SIZE ; bigger ship .db (ESIZE_SMALL/2) + BULLET_SIZE ; human .db (ESIZE_SMALL/2) + BULLET_SIZE ; human back 1 .db (ESIZE_SMALL/2) + BULLET_SIZE ; human back 2 .db (ESIZE_SMALL/2) + BULLET_SIZE ; boss .db (ESIZE_SMALL/2) + BULLET_SIZE ; light ball ; stg 3 enemies .db (ESIZE_SMALL/2) + BULLET_SIZE ; normal ship .db (ESIZE_SMALL/2) + BULLET_SIZE ; item ship .db (ESIZE_SMALL/2) + BULLET_SIZE ; speed ninja 1 .db (ESIZE_SMALL/2) + BULLET_SIZE ; speed ninja 2 .db (ESIZE_BIGER/2) + BULLET_SIZE ; bigger ship a .db (ESIZE_BIGER/2) + BULLET_SIZE ; bigger ship b .db (ESIZE_SMALL/2) + BULLET_SIZE ; ninja .db (ESIZE_SMALL/2) + BULLET_SIZE ; kamikaze 1 .db (ESIZE_SMALL/2) + BULLET_SIZE ; kamikaze 2 .db (ESIZE_SMALL/2) + BULLET_SIZE ; boss .db (ESIZE_SMALL/2) + BULLET_SIZE ; light ball ;(23 bytes) ENEMY_DATA_GFXMODE: ; stg 1 enemies .db GFXMODE_SPRT ; normal ship .db GFXMODE_SPRT ; item ship .db GFXMODE_SPRT ; speed birdman 1 .db GFXMODE_SPRT ; speed birdman 2 .db GFXMODE_TILE ; bigger ship .db GFXMODE_SPRT ; birdman .db GFXMODE_SPRT ; boss ; stg 2 enemies .db GFXMODE_SPRT ; normal tank .db GFXMODE_SPRT ; item tank .db GFXMODE_TILE ; bigger ship .db GFXMODE_SPRT ; human .db GFXMODE_SPRT ; human back 1 .db GFXMODE_SPRT ; human back 2 .db GFXMODE_SPRT ; boss .db GFXMODE_SPRT ; light ball ; stg 3 enemies .db GFXMODE_SPRT ; normal ship .db GFXMODE_SPRT ; item ship .db GFXMODE_SPRT ; speed ninja 1 .db GFXMODE_SPRT ; speed ninja 2 .db GFXMODE_TILE ; bigger ship a .db GFXMODE_TILE ; bigger ship b .db GFXMODE_SPRT ; ninja .db GFXMODE_SPRT ; kamikaze 1 .db GFXMODE_SPRT ; kamikaze 2 .db GFXMODE_SPRT ; boss .db GFXMODE_SPRT ; light ball ;(23 bytes) ENEMY_DATA_COLOR: ; color (1byte) ; stg 1 enemies .db 7 ; normal ship .db 13 ; item ship .db 6 ; speed birdman 1 .db 6 ; speed birdman 2 .db 14 ; bigger ship .db 14 ; birdman .db 14 ; boss ; stg 2 enemies .db 7 ; normal tank .db 13 ; item tank .db 14 ; bigger ship .db 1 ; human .db 1 ; human back 1 .db 1 ; human back 2 .db 1 ; boss .db 11 ; light ball ; stg 3 enemies .db 4;14;5 ; normal ship .db 13 ; item ship .db 13 ; speed ninja 1 .db 13 ; speed ninja 2 .db 14 ; bigger ship a .db 14 ; bigger ship b .db 13 ; ninja .db 4 ; kamikaze 1 .db 4 ; kamikaze 2 .db 6 ; boss .db 11 ; light ball ;(23 bytes) ENEMY_DATA_ISWINDED: ; color (1byte) ; stg 1 enemies .db 0 ; normal ship .db 0 ; item ship .db 0 ; speed birdman 1 .db 0 ; speed birdman 2 .db 0 ; bigger ship .db 6 ; birdman .db 1 ; boss ; stg 2 enemies .db 0 ; normal tank .db 0 ; item tank .db 0 ; bigger ship .db 15 ; human .db 15 ; human back 1 .db 15 ; human back 2 .db 14 ; boss .db 0 ; light ball ; stg 3 enemies .db 0;14;5 ; normal ship .db 0 ; item ship .db 0 ; speed ninja 1 .db 0 ; speed ninja 2 .db 0 ; bigger ship a .db 0 ; bigger ship b .db 15 ; ninja .db 0 ; kamikaze 1 .db 0 ; kamikaze 2 .db 14 ; boss .db 0 ; light ball ;(46 bytes) ENEMY_DATA_LIFE: ; life (2byte) ; stg 1 enemies .db 0,40 .db 0,80 ; normal ship .db 0,20 ; speed birdman 1 .db 0,20 ; speed birdman 2 .db 0,240 ; bigger ship .db 0,80 ; birdman .db $12,$C0 ; boss ; stg 2 enemies .db 0,80 ; normal tank .db 0,120 ; item tank .db 0,240 ; bigger ship .db 0,40 ; human .db 0,40 ; human back 1 .db 0,40 ; human back 2 .db $17,$70 ; boss .db $07,$D0 ; light ball ; stg 3 enemies .db 0,40 ; normal ship .db 0,80 ; item ship .db 0,20 ; speed ninja 1 .db 0,20 ; speed ninja 2 .db 0,240 ; bigger ship a .db $01,$40 ; bigger ship b .db 0,60 ; ninja .db 0,20 ; kamikaze 1 .db 0,20 ; kamikaze 2 .db $23,$28 ; boss .db $0E,$10 ; light ball ENEMY_DATA_BOSS_LIFE: ; dw $12C0, $1770, $2328 .dw $1300, $1300, $1800, $1800, $2400, $2400 ;(46 bytes) ENEMY_DATA_SCORE: ; score (2byte) ; stg 1 enemies .db 0,100 ; normal ship .db 0,200 ; normal ship .db 0,100 ; speed birdman 1 .db 0,100 ; speed birdman 2 .db 0,200 ; bigger ship .db 0,200 ; birdman .db $01,$2C ; boss ; stg 2 enemies .db 0,100 ; normal tank .db 0,200 ; item tank .db 0,200 ; bigger ship .db 0,200 ; human .db 0,200 ; human back 1 .db 0,200 ; human back 1 .db $01,$2C ; boss .db $01,$90 ; light ball ; stg 3 enemies .db 0,100 ; normal ship .db 0,200 ; item ship .db 0,200 ; speed ninja 1 .db 0,200 ; speed ninja 2 .db 0,200 ; bigger ship a .db 0,200 ; bigger ship b .db 0,200 ; ninja .db $01,$2C ; kamikaze 1 .db $01,$2C ; kamikaze 2 .db $01,$90 ; boss .db $01,$90 ; light ball ;(23 bytes) ;ENEMY_DATA_EXPLOSION: ; bulletx, bullety, expossion type ; stg 1 enemies ;db EXP_SMALL_MECHA ; normal ship ;db EXP_SMALL_MECHA ; normal ship ;db EXP_SMALL_HUMAN ; speed birdman 1 ;db EXP_SMALL_HUMAN ; speed birdman 2 ;db EXP_BIG_MECHA ; bigger ship ;db EXP_SMALL_HUMAN ; birdman ;db EXP_MEDIUM_MECHA ; boss ; stg 2 enemies ;db EXP_SMALL_MECHA ; normal tank ;db EXP_SMALL_MECHA ; item tank ;db EXP_BIG_MECHA ; bigger ship ;db EXP_SMALL_HUMAN ; human ;db EXP_SMALL_HUMAN ; human back 1 ;db EXP_SMALL_HUMAN ; human back 2 ;db EXP_MEDIUM_MECHA ; boss ;db EXP_MEDIUM_MECHA ; light ball ; stg 3 enemies ;db EXP_SMALL_MECHA ; normal ship ;db EXP_SMALL_MECHA ; item ship ;db EXP_SMALL_HUMAN ; speed ninja 1 ;db EXP_SMALL_HUMAN ; speed ninja 2 ;db EXP_BIG_MECHA ; bigger ship a ;db EXP_BIG_MECHA ; bigger ship b ;db EXP_SMALL_HUMAN ; ninja ;db EXP_SMALL_HUMAN ; kamikaze 1 ;db EXP_SMALL_HUMAN ; kamikaze 2 ;db EXP_MEDIUM_MECHA ; boss ;db EXP_MEDIUM_MECHA ; light ball .ends .section "enemy stage 1" free ;(3753 bytes) ;ENEMY_SPAWN: ENEMY_SPAWN_STG_1: .IF CHECK_BOSS == 0 ; 1st rafaga .db $00,100, GAME_SIZEX16*2, -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_ZAKO .db $00,100, GAME_SIZEX16*4, -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_ZAKO .db $00,100, GAME_SIZEX16*6, -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_ZAKO ; 3 .db $00,200, GAME_SIZEX2, -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_BIRDMAN ; 4 ; 3rd rafaga .db $01,$2c, GAME_SIZEX4, -GAME_SIZEY12*1, 0, E_INCY_5, ENEMYTYPE_ZAKO .db $01,$2c, GAME_SIZEX-GAME_SIZEX4, -GAME_SIZEY12*1, 0, E_INCY_5, ENEMYTYPE_ZAKO .db $01,$2d, GAME_SIZEX8, -GAME_SIZEY12*2, 0, E_INCY_5, ENEMYTYPE_ZAKO .db $01,$2d, GAME_SIZEX-GAME_SIZEX8, -GAME_SIZEY12*2, 0, E_INCY_5, ENEMYTYPE_ZAKO ; 8 ; 4rd .db $01,$90, GAME_SIZEX2, -GAME_SIZEY12, 0, E_INCY_4, ENEMYTYPE_ITEMZAKO ; ITEM ; 9 .db $01,$e0, GAME_SIZEX4*3, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 .db $01,$fe, GAME_SIZEX4*1, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 ; 11 ; 5rd .db $02,$58, GAME_SIZEX4, -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $02,$58, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $02,$59, GAME_SIZEX8, -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $02,$59, (GAME_SIZEX-GAME_SIZEX8), -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $02,$5a, GAME_SIZEX4, -(GAME_SIZEY12*3), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $02,$5a, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*3), 0, E_INCY_5, ENEMYTYPE_ZAKO ; 17 ; 6rd .db $02,$BC, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$BC, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$C6, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$C6, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$D0, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$D0, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$DA, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$DA, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$E4, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$E4, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 ; 27 ; 7th .db $02,$F8, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $02,$F8, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$02, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$02, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$0C, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$0C, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$16, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$16, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$20, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$20, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 ; 37 ; 8th .db $03,$34, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$34, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$3E, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$3E, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$48, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$48, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$52, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$52, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$5C, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$5C, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 ; 47 ; 9th .db $03,$84, GAME_SIZEX4, -(GAME_SIZEY12*0), 0, E_INCY_4, ENEMYTYPE_BIRDMAN .db $03,$84, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*0), 0, E_INCY_4, ENEMYTYPE_BIRDMAN .db $03,$85, GAME_SIZEX8, -(GAME_SIZEY12*2), 0, E_INCY_4, ENEMYTYPE_BIRDMAN .db $03,$85, (GAME_SIZEX-GAME_SIZEX8), -(GAME_SIZEY12*2), 0, E_INCY_4, ENEMYTYPE_BIRDMAN ; 51 ; 10th .db $04,$38, (GAME_SIZEX4*3), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 .db $04,$4C, (GAME_SIZEX4*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 .db $04,$60, (GAME_SIZEX4*1), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 ; 54 ; 11th .db $04,$C0, GAME_SIZEX4, -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $04,$C0, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $04,$C1, GAME_SIZEX8, -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $04,$C1, (GAME_SIZEX-GAME_SIZEX8), -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_ZAKO ; 58 ; 12th .db $05,$28, (GAME_SIZEX-GAME_SIZEX8), -(GAME_SIZEY12*2), 0, E_INCY_4, ENEMYTYPE_BIRDMAN .db $05,$29, GAME_SIZEX2, -(GAME_SIZEY12*1), 0, E_INCY_4, ENEMYTYPE_BIRDMAN .db $05,$2a, GAME_SIZEX8, -(GAME_SIZEY12*2), 0, E_INCY_4, ENEMYTYPE_BIRDMAN ; 61 ; 13th .db $05,$8C, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$8C, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$8C, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$96, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$96, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$96, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$A0, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$A0, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$A0, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$AA, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$AA, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$AA, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$B4, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$B4, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$B4, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 ; 76 ; 14th .db $05,$C8, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$C8, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$C8, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$D2, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$D2, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$D2, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$DC, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$DC, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$DC, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$E6, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$E6, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$E6, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$F0, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$F0, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$F0, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 ; 91 ; 15th .db $06,$22, GAME_SIZEX4, -(GAME_SIZEY12*0), 0, E_INCY_5, ENEMYTYPE_BIRDMAN .db $06,$23, GAME_SIZEX2, -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_BIRDMAN .db $06,$24, (GAME_SIZEX - GAME_SIZEX4), -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_BIRDMAN ; 94 ; 16th .db $06,$40, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$40, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$40, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$40, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$4A, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$4A, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$50, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$50, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$54, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$54, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$54, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$54, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$5E, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$5E, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$5E, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$5E, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$68, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$68, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$68, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$68, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 ; 114 ; 17th .db $06,$E0, (GAME_SIZEX4*1), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 .db $06,$F4, (GAME_SIZEX4*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 .db $07,$08, (GAME_SIZEX4*3), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 .db $07,$1C, (GAME_SIZEX4*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 .db $07,$30, (GAME_SIZEX4*1), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 ; 119 ; 2304 192*12 .db $08,$0C, GAME_SIZEX2, -GAME_SIZEY8, 0, SCROLL_INCY, ENEMYTYPE_BOSSSTG1 .ELSE ; 2304 192*12 .db $01,$90, GAME_SIZEX2, -GAME_SIZEY8, 0, SCROLL_INCY, ENEMYTYPE_BOSSSTG1 .ENDIF ; 120 enemies in total (including boss) in stage 1 ENEMY_SPAWN_STG_2: ; 1st rafaga .db $00,100, GAME_SIZEX16*2, -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_ZAKO .db $00,100, GAME_SIZEX16*4, -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_ZAKO .db $00,100, GAME_SIZEX16*6, -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_ZAKO ; 3 .db $00,200, GAME_SIZEX2, -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_BIRDMAN ; 4 ; 3rd rafaga .db $01,$2c, GAME_SIZEX4, -GAME_SIZEY12*1, 0, E_INCY_5, ENEMYTYPE_ZAKO .db $01,$2c, GAME_SIZEX-GAME_SIZEX4, -GAME_SIZEY12*1, 0, E_INCY_5, ENEMYTYPE_ZAKO .db $01,$2d, GAME_SIZEX8, -GAME_SIZEY12*2, 0, E_INCY_5, ENEMYTYPE_ZAKO .db $01,$2d, GAME_SIZEX-GAME_SIZEX8, -GAME_SIZEY12*2, 0, E_INCY_5, ENEMYTYPE_ZAKO ; 8 ; 4rd .db $01,$90, GAME_SIZEX2, -GAME_SIZEY12, 0, E_INCY_4, ENEMYTYPE_ITEMZAKO ; ITEM ; 9 .db $01,$e0, GAME_SIZEX4*3, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 .db $01,$fe, GAME_SIZEX4*1, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 ; 11 ; 5rd .db $02,$58, GAME_SIZEX4, -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $02,$58, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $02,$59, GAME_SIZEX8, -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $02,$59, (GAME_SIZEX-GAME_SIZEX8), -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $02,$5a, GAME_SIZEX4, -(GAME_SIZEY12*3), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $02,$5a, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*3), 0, E_INCY_5, ENEMYTYPE_ZAKO ; 17 ; 6rd .db $02,$BC, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$BC, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$C6, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$C6, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$D0, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$D0, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$DA, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$DA, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$E4, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $02,$E4, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 ; 27 ; 7th .db $02,$F8, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $02,$F8, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$02, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$02, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$0C, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$0C, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$16, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$16, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$20, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $03,$20, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 ; 37 ; 8th .db $03,$34, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$34, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$3E, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$3E, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$48, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$48, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$52, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$52, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$5C, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $03,$5C, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 ; 47 ; 9th .db $03,$84, GAME_SIZEX4, -(GAME_SIZEY12*0), 0, E_INCY_4, ENEMYTYPE_BIRDMAN .db $03,$84, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*0), 0, E_INCY_4, ENEMYTYPE_BIRDMAN .db $03,$85, GAME_SIZEX8, -(GAME_SIZEY12*2), 0, E_INCY_4, ENEMYTYPE_BIRDMAN .db $03,$85, (GAME_SIZEX-GAME_SIZEX8), -(GAME_SIZEY12*2), 0, E_INCY_4, ENEMYTYPE_BIRDMAN ; 51 ; 10th .db $04,$38, (GAME_SIZEX4*3), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 .db $04,$4C, (GAME_SIZEX4*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 .db $04,$60, (GAME_SIZEX4*1), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 ; 54 ; 11th .db $04,$C0, GAME_SIZEX4, -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $04,$C0, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $04,$C1, GAME_SIZEX8, -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_ZAKO .db $04,$C1, (GAME_SIZEX-GAME_SIZEX8), -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_ZAKO ; 58 ; 12th .db $05,$28, (GAME_SIZEX-GAME_SIZEX8), -(GAME_SIZEY12*2), 0, E_INCY_4, ENEMYTYPE_BIRDMAN .db $05,$29, GAME_SIZEX2, -(GAME_SIZEY12*1), 0, E_INCY_4, ENEMYTYPE_BIRDMAN .db $05,$2a, GAME_SIZEX8, -(GAME_SIZEY12*2), 0, E_INCY_4, ENEMYTYPE_BIRDMAN ; 61 ; 13th .db $05,$8C, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$8C, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$8C, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$96, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$96, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$96, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$A0, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$A0, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$A0, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$AA, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$AA, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$AA, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$B4, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$B4, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $05,$B4, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 ; 76 ; 14th .db $05,$C8, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$C8, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$C8, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$D2, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$D2, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$D2, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$DC, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$DC, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$DC, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$E6, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$E6, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$E6, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$F0, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$F0, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $05,$F0, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 ; 91 ; 15th .db $06,$22, GAME_SIZEX4, -(GAME_SIZEY12*0), 0, E_INCY_5, ENEMYTYPE_BIRDMAN .db $06,$23, GAME_SIZEX2, -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_BIRDMAN .db $06,$24, (GAME_SIZEX - GAME_SIZEX4), -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_BIRDMAN ; 94 ; 16th .db $06,$40, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$40, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$40, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$40, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$4A, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$4A, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$50, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$50, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$54, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$54, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$54, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$54, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$5E, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$5E, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$5E, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$5E, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$68, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$68, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_1 .db $06,$68, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 .db $06,$68, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDBIRD_2 ; 114 ; 17th .db $06,$E0, (GAME_SIZEX4*1), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 .db $06,$F4, (GAME_SIZEX4*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 .db $07,$08, (GAME_SIZEX4*3), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 .db $07,$1C, (GAME_SIZEX4*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 .db $07,$30, (GAME_SIZEX4*1), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP1 ; 119 ; 2304 192*12 .db $08,$0C, GAME_SIZEX2, -GAME_SIZEY8, 0, SCROLL_INCY, ENEMYTYPE_BOSSSTG1 ENEMY_SPAWN_STG_3: ; 1st rafaga .IF CHECK_BOSS == 0 ; 10th .db 0,100, (GAME_SIZEX16*6), -GAME_SIZEX16, 0, E_INCY_1, ENEMYTYPE_TANK .db 0,100, (GAME_SIZEX16*8), -GAME_SIZEX8, 0, E_INCY_1, ENEMYTYPE_TANK .db 0,100, (GAME_SIZEX16*10), -GAME_SIZEX16, 0, E_INCY_1, ENEMYTYPE_TANK ; 2nd rafaga .db 0,200, (GAME_SIZEX16*5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db 0,224, (GAME_SIZEX16*5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db 0,248, (GAME_SIZEX16*5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK ; 3rd rafaga .db $01,$2C, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$44, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$5C, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK ; 4th .db $01,$90, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$90, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$A8, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$A8, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$C0, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$C0, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$D8, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_ITEMTANK ; ITEM .db $01,$E8, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP2 ; 5th .db $02,$58, (GAME_SIZEX8*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $02,$58, (GAME_SIZEX8*6), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $02,$70, (GAME_SIZEX8*3), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $02,$70, (GAME_SIZEX8*5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $02,$88, (GAME_SIZEX8*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $02,$88, (GAME_SIZEX8*6), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK ; 6th .db $02,$BC, GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $02,$C6, GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $02,$D0, GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 ; 7th .db $02,$EE, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $02,$F8, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $03,$02, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 ; 8th .db $03,$34, GAME_SIZEX4, -GAME_SIZEY12, 0, E_INCY_5, ENEMYTYPE_FRONTHUMAN .db $03,$34, GAME_SIZEX -GAME_SIZEX4,-GAME_SIZEY12, 0, E_INCY_4, ENEMYTYPE_FRONTHUMAN .db $03,$34, GAME_SIZEX2-GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $03,$34, GAME_SIZEX2+GAME_SIZEX4, GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $03,$3E, GAME_SIZEX2-GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $03,$48, GAME_SIZEX2+GAME_SIZEX4, GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 ; 9th .db $03,$84, GAME_SIZEX4, -(GAME_SIZEY12*1), 0, E_INCY_1, ENEMYTYPE_TANK .db $03,$84, (GAME_SIZEX/3), -(GAME_SIZEY12*2), 0, E_INCY_1, ENEMYTYPE_TANK .db $03,$84, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*1), 0, E_INCY_1, ENEMYTYPE_TANK .db $03,$84, (GAME_SIZEX-(GAME_SIZEX/3)), -(GAME_SIZEY12*2), 0, E_INCY_1, ENEMYTYPE_TANK ; 10th .db $04,$38, (GAME_SIZEX4*3), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP2 .db $04,$4C, (GAME_SIZEX4*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP2 .db $04,$60, (GAME_SIZEX4*1), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP2 ; 11th .db $04,$7E, GAME_SIZEX4, -(GAME_SIZEY12*2), 0, E_INCY_1, ENEMYTYPE_TANK .db $04,$7E, (GAME_SIZEX/3), -(GAME_SIZEY12*1), 0, E_INCY_1, ENEMYTYPE_TANK .db $04,$7E, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*2), 0, E_INCY_1, ENEMYTYPE_TANK .db $04,$7E, (GAME_SIZEX-(GAME_SIZEX/3)), -(GAME_SIZEY12*1), 0, E_INCY_1, ENEMYTYPE_TANK ; 12th ;db $04,$B0, GAME_SIZEX4, -GAME_SIZEY12, 0, E_INCY_5, ENEMYTYPE_FRONTHUMAN ;db $04,$B0, (GAME_SIZEX-GAME_SIZEX4), -GAME_SIZEY12, 0, E_INCY_5, ENEMYTYPE_FRONTHUMAN .db $04,$E2, GAME_SIZEX8, -GAME_SIZEY12, 0, E_INCY_4, ENEMYTYPE_FRONTHUMAN .db $04,$E2, (GAME_SIZEX-GAME_SIZEX8), -GAME_SIZEY12, 0, E_INCY_4, ENEMYTYPE_FRONTHUMAN ; 13th .db $05,$78, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $05,$90, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $05,$A8, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $05,$C0, (GAME_SIZEX16*11), -GAME_SIZEY12, 0, E_INCY_3, ENEMYTYPE_FRONTHUMAN ; 14th .db $05,$DC, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $05,$F4, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$0C, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$24, (GAME_SIZEX16* 5), -GAME_SIZEY12, 0, E_INCY_3, ENEMYTYPE_FRONTHUMAN ; 15th .db $06,$40, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$40, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$58, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$58, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$70, GAME_SIZEX2, -GAME_SIZEY12, 0, E_INCY_3, ENEMYTYPE_FRONTHUMAN ; 16th .db $06,$A4, (GAME_SIZEX8*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$A4, (GAME_SIZEX8*6), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$BC, (GAME_SIZEX8*5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$BC, (GAME_SIZEX8*3), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$D4, (GAME_SIZEX8*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$D4, (GAME_SIZEX8*6), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK ; 17th .db $07,$2A, (GAME_SIZEX/6), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP2 .db $07,$4A, (GAME_SIZEX - (GAME_SIZEX/6)), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP2 .db $07,$7E, (GAME_SIZEX16*6), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $07,$7E, (GAME_SIZEX16*10), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $07,$96, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK ; 18th ;db $08,$34, GAME_SIZEX4, GAME_SIZEY, -E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 ;db $08,$3E, GAME_SIZEX4, GAME_SIZEY, -E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 ;db $08,$48, GAME_SIZEX4, GAME_SIZEY, -E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 ;db $08,$52, GAME_SIZEX4, GAME_SIZEY, -E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $08,$34, GAME_SIZEX4, GAME_SIZEY, -E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $08,$40, GAME_SIZEX4, GAME_SIZEY, -E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $08,$52, GAME_SIZEX4, GAME_SIZEY, -E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 ; 19th ;db $08,$66, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 ;db $08,$70, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 ;db $08,$7A, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 ;db $08,$84, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $08,$66, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $08,$72, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $08,$84, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 ; 20th .db $08,$AC, GAME_SIZEX2 - GAME_SIZEX4, -GAME_SIZEY12, 0, E_INCY_5, ENEMYTYPE_FRONTHUMAN .db $08,$AC, GAME_SIZEX2 + GAME_SIZEX4, -GAME_SIZEY12, 0, E_INCY_5, ENEMYTYPE_FRONTHUMAN .db $08,$AC, GAME_SIZEX2 - GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $08,$B6, GAME_SIZEX2 + GAME_SIZEX4, GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $08,$C0, GAME_SIZEX2 - GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $08,$CA, GAME_SIZEX2 + GAME_SIZEX4, GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $08,$D4, GAME_SIZEX2 - GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $08,$DE, GAME_SIZEX2 + GAME_SIZEX4, GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $09,$C4, GAME_SIZEX2, -GAME_SIZEY8, 0, SCROLL_INCY, ENEMYTYPE_BOSSSTG2 .ELSE ; 2304 192*12 .db $01,$90, GAME_SIZEX2, -GAME_SIZEY8, 0, SCROLL_INCY, ENEMYTYPE_BOSSSTG2 .ENDIF ENEMY_SPAWN_STG_4: ; 10th .db 0,100, (GAME_SIZEX16*6), -GAME_SIZEX16, 0, E_INCY_1, ENEMYTYPE_TANK .db 0,100, (GAME_SIZEX16*8), -GAME_SIZEX8, 0, E_INCY_1, ENEMYTYPE_TANK .db 0,100, (GAME_SIZEX16*10), -GAME_SIZEX16, 0, E_INCY_1, ENEMYTYPE_TANK ; 2nd rafaga .db 0,200, (GAME_SIZEX16*5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db 0,224, (GAME_SIZEX16*5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db 0,248, (GAME_SIZEX16*5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK ; 3rd rafaga .db $01,$2C, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$44, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$5C, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK ; 4th .db $01,$90, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$90, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$A8, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$A8, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$C0, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$C0, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $01,$D8, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_ITEMTANK ; ITEM .db $01,$E8, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP2 ; 5th .db $02,$58, (GAME_SIZEX8*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $02,$58, (GAME_SIZEX8*6), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $02,$70, (GAME_SIZEX8*3), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $02,$70, (GAME_SIZEX8*5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $02,$88, (GAME_SIZEX8*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $02,$88, (GAME_SIZEX8*6), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK ; 6th .db $02,$BC, GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $02,$C6, GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $02,$D0, GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 ; 7th .db $02,$EE, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $02,$F8, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $03,$02, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 ; 8th .db $03,$34, GAME_SIZEX4, -GAME_SIZEY12, 0, E_INCY_5, ENEMYTYPE_FRONTHUMAN .db $03,$34, GAME_SIZEX -GAME_SIZEX4,-GAME_SIZEY12, 0, E_INCY_4, ENEMYTYPE_FRONTHUMAN .db $03,$34, GAME_SIZEX2-GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $03,$34, GAME_SIZEX2+GAME_SIZEX4, GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $03,$3E, GAME_SIZEX2-GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $03,$48, GAME_SIZEX2+GAME_SIZEX4, GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 ; 9th .db $03,$84, GAME_SIZEX4, -(GAME_SIZEY12*1), 0, E_INCY_1, ENEMYTYPE_TANK .db $03,$84, (GAME_SIZEX/3), -(GAME_SIZEY12*2), 0, E_INCY_1, ENEMYTYPE_TANK .db $03,$84, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*1), 0, E_INCY_1, ENEMYTYPE_TANK .db $03,$84, (GAME_SIZEX-(GAME_SIZEX/3)), -(GAME_SIZEY12*2), 0, E_INCY_1, ENEMYTYPE_TANK ; 10th .db $04,$38, (GAME_SIZEX4*3), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP2 .db $04,$4C, (GAME_SIZEX4*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP2 .db $04,$60, (GAME_SIZEX4*1), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP2 ; 11th .db $04,$7E, GAME_SIZEX4, -(GAME_SIZEY12*2), 0, E_INCY_1, ENEMYTYPE_TANK .db $04,$7E, (GAME_SIZEX/3), -(GAME_SIZEY12*1), 0, E_INCY_1, ENEMYTYPE_TANK .db $04,$7E, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*2), 0, E_INCY_1, ENEMYTYPE_TANK .db $04,$7E, (GAME_SIZEX-(GAME_SIZEX/3)), -(GAME_SIZEY12*1), 0, E_INCY_1, ENEMYTYPE_TANK ; 12th ;db $04,$B0, GAME_SIZEX4, -GAME_SIZEY12, 0, E_INCY_5, ENEMYTYPE_FRONTHUMAN ;db $04,$B0, (GAME_SIZEX-GAME_SIZEX4), -GAME_SIZEY12, 0, E_INCY_5, ENEMYTYPE_FRONTHUMAN .db $04,$E2, GAME_SIZEX8, -GAME_SIZEY12, 0, E_INCY_4, ENEMYTYPE_FRONTHUMAN .db $04,$E2, (GAME_SIZEX-GAME_SIZEX8), -GAME_SIZEY12, 0, E_INCY_4, ENEMYTYPE_FRONTHUMAN ; 13th .db $05,$78, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $05,$90, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $05,$A8, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $05,$C0, (GAME_SIZEX16*11), -GAME_SIZEY12, 0, E_INCY_3, ENEMYTYPE_FRONTHUMAN ; 14th .db $05,$DC, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $05,$F4, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$0C, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$24, (GAME_SIZEX16* 5), -GAME_SIZEY12, 0, E_INCY_3, ENEMYTYPE_FRONTHUMAN ; 15th .db $06,$40, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$40, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$58, (GAME_SIZEX16* 5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$58, (GAME_SIZEX16*11), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$70, GAME_SIZEX2, -GAME_SIZEY12, 0, E_INCY_3, ENEMYTYPE_FRONTHUMAN ; 16th .db $06,$A4, (GAME_SIZEX8*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$A4, (GAME_SIZEX8*6), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$BC, (GAME_SIZEX8*5), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$BC, (GAME_SIZEX8*3), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$D4, (GAME_SIZEX8*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $06,$D4, (GAME_SIZEX8*6), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK ; 17th .db $07,$2A, (GAME_SIZEX/6), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP2 .db $07,$4A, (GAME_SIZEX - (GAME_SIZEX/6)), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP2 .db $07,$7E, (GAME_SIZEX16*6), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $07,$7E, (GAME_SIZEX16*10), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK .db $07,$96, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_TANK ; 18th ;db $08,$34, GAME_SIZEX4, GAME_SIZEY, -E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 ;db $08,$3E, GAME_SIZEX4, GAME_SIZEY, -E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 ;db $08,$48, GAME_SIZEX4, GAME_SIZEY, -E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 ;db $08,$52, GAME_SIZEX4, GAME_SIZEY, -E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $08,$34, GAME_SIZEX4, GAME_SIZEY, -E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $08,$40, GAME_SIZEX4, GAME_SIZEY, -E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $08,$52, GAME_SIZEX4, GAME_SIZEY, -E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 ; 19th ;db $08,$66, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 ;db $08,$70, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 ;db $08,$7A, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 ;db $08,$84, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $08,$66, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $08,$72, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $08,$84, (GAME_SIZEX - GAME_SIZEX4), GAME_SIZEY, E_INCY_1, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 ; 20th .db $08,$AC, GAME_SIZEX2 - GAME_SIZEX4, -GAME_SIZEY12, 0, E_INCY_5, ENEMYTYPE_FRONTHUMAN .db $08,$AC, GAME_SIZEX2 + GAME_SIZEX4, -GAME_SIZEY12, 0, E_INCY_5, ENEMYTYPE_FRONTHUMAN .db $08,$AC, GAME_SIZEX2 - GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $08,$B6, GAME_SIZEX2 + GAME_SIZEX4, GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $08,$C0, GAME_SIZEX2 - GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $08,$CA, GAME_SIZEX2 + GAME_SIZEX4, GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $08,$D4, GAME_SIZEX2 - GAME_SIZEX4, GAME_SIZEY, -E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_1 .db $08,$DE, GAME_SIZEX2 + GAME_SIZEX4, GAME_SIZEY, E_INCY_2, -E_INCY_1, ENEMYTYPE_BACKHUMAN_2 .db $09,$C4, GAME_SIZEX2, -GAME_SIZEY8, 0, SCROLL_INCY, ENEMYTYPE_BOSSSTG2 ENEMY_SPAWN_STG_5: ; 1st rafaga .IF CHECK_BOSS == 0 .db 0,100, (GAME_SIZEX16*2), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db 0,100, (GAME_SIZEX16*4), -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db 0,100, (GAME_SIZEX16*6), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO ; 2nd rafafa .db 0,190, (GAME_SIZEX16*10), -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_NINJA .db 0,210, GAME_SIZEX2, -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_NINJA ; 3rd rafaga .db $01,$2C, GAME_SIZEX4, -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $01,$2C, GAME_SIZEX8, -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $01,$2C, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $01,$2C, (GAME_SIZEX-GAME_SIZEX8), -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_3ZAKO ; 4rd .db $01,$90, GAME_SIZEX2, -GAME_SIZEY12, 0, E_INCY_4, ENEMYTYPE_3ITEMZAKO ; ITEM .db $01,$E0, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A .db $01,$FF, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A ; 5rd .db $02,$48, GAME_SIZEX4, -(GAME_SIZEY12*0), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $02,$48, GAME_SIZEX8, -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $02,$48, GAME_SIZEX4, -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $02,$48, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*0), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $02,$48, (GAME_SIZEX-GAME_SIZEX8), -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $02,$48, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_3ZAKO ; 6rd .db $02,$BC, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$BC, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$BC, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$C6, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$C6, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$C6, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$D0, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$D0, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$D0, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$DA, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$DA, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$DA, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$E4, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$E4, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$E4, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 ; 33 ; 7th .db $02,$F8, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $02,$F8, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $02,$F8, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$02, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$02, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$02, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$0C, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$0C, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$0C, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$16, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$16, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$16, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$20, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$20, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$20, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 ; 8th .db $03,$20, (GAME_SIZEX16*3), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $03,$26, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $03,$2A, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $03,$30, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $03,$34, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $03,$3A, (GAME_SIZEX16*9), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 ; 57 ; 9rd .db $03,$84, GAME_SIZEX4, -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_NINJA .db $03,$84, GAME_SIZEX8, -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_NINJA .db $03,$84, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*1), 0, E_INCY_6, ENEMYTYPE_NINJA .db $03,$84, (GAME_SIZEX-GAME_SIZEX8), -(GAME_SIZEY12*2), 0, E_INCY_6, ENEMYTYPE_NINJA .db $03,$B6, (GAME_SIZEX16*8), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $03,$C0, (GAME_SIZEX16*10), -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $03,$CA, (GAME_SIZEX16*12), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $03,$E8, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$E8, (- GAME_SIZEX4), SPEED_ENEMY_INIT_Y + (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $03,$F2, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$F2, (- GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $03,$FC, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y + (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$FC, (- GAME_SIZEX4), SPEED_ENEMY_INIT_Y + (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $04,$06, (GAME_SIZEX16*4), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $04,$10, (GAME_SIZEX16*6), -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $04,$1A, (GAME_SIZEX16*8), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO ; 10th .db $04,$38, (GAME_SIZEX4*3), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A .db $04,$4C, (GAME_SIZEX4*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A .db $04,$60, (GAME_SIZEX4*1), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A .db $04,$88, (GAME_SIZEX16*8), -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_NINJA .db $04,$92, (GAME_SIZEX16*10), -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_NINJA .db $04,$9C, (GAME_SIZEX16*12), -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_NINJA ; 11th .db $04,$B0, (GAME_SIZEX16*3), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $04,$B4, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $04,$BA, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $04,$BE, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $04,$C4, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $04,$C8, (GAME_SIZEX16*9), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $04,$CE, (GAME_SIZEX16*9), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $04,$D2, (GAME_SIZEX16*11), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 ; 12th .db $05,$14, (GAME_SIZEX - (GAME_SIZEX16*3)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$18, (GAME_SIZEX - (GAME_SIZEX16*5)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$1E, (GAME_SIZEX - (GAME_SIZEX16*5)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$22, (GAME_SIZEX - (GAME_SIZEX16*7)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$28, (GAME_SIZEX - (GAME_SIZEX16*7)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$2C, (GAME_SIZEX - (GAME_SIZEX16*9)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$32, (GAME_SIZEX - (GAME_SIZEX16*9)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$36, (GAME_SIZEX - (GAME_SIZEX16*11)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 ; 103 ; 13th .db $05,$78, (GAME_SIZEX - (GAME_SIZEX16*3)), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $05,$78, (GAME_SIZEX16*3), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$82, (GAME_SIZEX - (GAME_SIZEX16*5)), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $05,$82, (GAME_SIZEX16*5), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$8C, (GAME_SIZEX - (GAME_SIZEX16*7)), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $05,$8C, (GAME_SIZEX16*7), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 ; 14th .db $05,$C8, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $05,$D2, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $05,$DC, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $05,$E6, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $05,$F0, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $05,$FA, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $06,$04, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $06,$0E, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 ; 15th .db $06,$2C, GAME_SIZEX4, -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_NINJA .db $06,$2C, GAME_SIZEX2, -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_NINJA .db $06,$2C, (GAME_SIZEX2+GAME_SIZEX4), -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_NINJA .db $06,$40, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y + (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $06,$4A, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $06,$54, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y + (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $06,$5E, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $06,$68, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y + (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $06,$72, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $06,$7C, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y + (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $06,$86, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 ; 16th .db $06,$A4, (GAME_SIZEX16*10), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $06,$A4, (GAME_SIZEX16*12), -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $06,$A4, (GAME_SIZEX16*14), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $06,$A4, (GAME_SIZEX16*3), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $06,$A8, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $06,$AE, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $06,$B2, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $06,$B8, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $06,$C2, (GAME_SIZEX16*9), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $06,$C8, (GAME_SIZEX16*9), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $06,$CB, (GAME_SIZEX16*11), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 ; 149 ; 17th .db $07,$08, GAME_SIZEX4, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A .db $07,$08, (GAME_SIZEX - (GAME_SIZEX16*3)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$0C, (GAME_SIZEX - (GAME_SIZEX16*5)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$12, (GAME_SIZEX - (GAME_SIZEX16*5)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$16, (GAME_SIZEX - (GAME_SIZEX16*7)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$1C, (GAME_SIZEX - (GAME_SIZEX16*7)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$20, (GAME_SIZEX - (GAME_SIZEX16*9)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$26, (GAME_SIZEX - (GAME_SIZEX16*9)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$2A, (GAME_SIZEX - (GAME_SIZEX16*11)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 ; 18th .db $07,$76, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A .db $07,$76, (GAME_SIZEX - (GAME_SIZEX16*3)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$7A, (GAME_SIZEX - (GAME_SIZEX16*5)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$80, (GAME_SIZEX - (GAME_SIZEX16*5)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$84, (GAME_SIZEX - (GAME_SIZEX16*7)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$8A, (GAME_SIZEX - (GAME_SIZEX16*7)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$8E, (GAME_SIZEX - (GAME_SIZEX16*9)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$94, (GAME_SIZEX - (GAME_SIZEX16*9)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$98, (GAME_SIZEX - (GAME_SIZEX16*11)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 ; 19th .db $07,$D0, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A .db $07,$F8, (GAME_SIZEX16*3), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $07,$FC, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $08,$02, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $08,$06, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $08,$0C, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $08,$10, (GAME_SIZEX16*9), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 ; 185 ; 20th .db $08,$20, GAME_SIZEX4, -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_NINJA .db $08,$20, GAME_SIZEX2, -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_NINJA ; ********************************************** .db $08,$20, (GAME_SIZEX2+GAME_SIZEX4), -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_NINJA .db $08,$2A, (GAME_SIZEX16*9), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $08,$2E, (GAME_SIZEX16*11), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 ; last .db $08,$48, (GAME_SIZEX-GAME_SIZEX4), -GAME_SIZEY8, 0, E_INCY_3, ENEMYTYPE_BIGSHIP3B .db $08,$66, GAME_SIZEX4, -GAME_SIZEY8, 0, E_INCY_3, ENEMYTYPE_BIGSHIP3B .db $08,$E8, (GAME_SIZEX-GAME_SIZEX4), -GAME_SIZEY8, 0, E_INCY_3, ENEMYTYPE_BIGSHIP3B .db $08,$E8, GAME_SIZEX4, -GAME_SIZEY8, 0, E_INCY_3, ENEMYTYPE_BIGSHIP3B .db $09,$10, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_4, ENEMYTYPE_BIGSHIP3B .db $09,$4C, (GAME_SIZEX16*3), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $09,$50, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $09,$74, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $09,$78, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $09,$B4, (GAME_SIZEX-(GAME_SIZEX/6)), -GAME_SIZEY8, 0, E_INCY_3, ENEMYTYPE_BIGSHIP3B .db $09,$B4, (GAME_SIZEX/6), -GAME_SIZEY8, 0, E_INCY_3, ENEMYTYPE_BIGSHIP3B .db $09,$B4, GAME_SIZEX2, -GAME_SIZEY16, 0, E_INCY_3, ENEMYTYPE_BIGSHIP3B ; boss .db $0B,$04, GAME_SIZEX2, -GAME_SIZEY8, 0, SCROLL_INCY, ENEMYTYPE_BOSSSTG3 .ELSE ; 2304 192*12 .db $01,$80, GAME_SIZEX2, -GAME_SIZEY8, 0, SCROLL_INCY, ENEMYTYPE_BOSSSTG3 .ENDIF ENEMY_SPAWN_STG_6: .db 0,100, (GAME_SIZEX16*2), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db 0,100, (GAME_SIZEX16*4), -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db 0,100, (GAME_SIZEX16*6), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO ; 2nd rafafa .db 0,190, (GAME_SIZEX16*10), -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_NINJA .db 0,210, GAME_SIZEX2, -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_NINJA ; 3rd rafaga .db $01,$2C, GAME_SIZEX4, -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $01,$2C, GAME_SIZEX8, -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $01,$2C, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $01,$2C, (GAME_SIZEX-GAME_SIZEX8), -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_3ZAKO ; 4rd .db $01,$90, GAME_SIZEX2, -GAME_SIZEY12, 0, E_INCY_4, ENEMYTYPE_3ITEMZAKO ; ITEM .db $01,$E0, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A .db $01,$FF, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A ; 5rd .db $02,$48, GAME_SIZEX4, -(GAME_SIZEY12*0), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $02,$48, GAME_SIZEX8, -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $02,$48, GAME_SIZEX4, -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $02,$48, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*0), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $02,$48, (GAME_SIZEX-GAME_SIZEX8), -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_3ZAKO .db $02,$48, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_3ZAKO ; 6rd .db $02,$BC, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$BC, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$BC, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$C6, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$C6, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$C6, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$D0, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$D0, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$D0, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$DA, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$DA, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$DA, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$E4, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$E4, -GAME_SIZEX8, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $02,$E4, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 ; 33 ; 7th .db $02,$F8, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $02,$F8, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $02,$F8, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$02, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$02, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$02, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$0C, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$0C, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$0C, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$16, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$16, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$16, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$20, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$20, (GAME_SIZEX + GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$20, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 ; 8th .db $03,$20, (GAME_SIZEX16*3), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $03,$26, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $03,$2A, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $03,$30, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $03,$34, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $03,$3A, (GAME_SIZEX16*9), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 ; 57 ; 9rd .db $03,$84, GAME_SIZEX4, -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_NINJA .db $03,$84, GAME_SIZEX8, -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_NINJA .db $03,$84, (GAME_SIZEX-GAME_SIZEX4), -(GAME_SIZEY12*1), 0, E_INCY_6, ENEMYTYPE_NINJA .db $03,$84, (GAME_SIZEX-GAME_SIZEX8), -(GAME_SIZEY12*2), 0, E_INCY_6, ENEMYTYPE_NINJA .db $03,$B6, (GAME_SIZEX16*8), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $03,$C0, (GAME_SIZEX16*10), -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $03,$CA, (GAME_SIZEX16*12), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $03,$E8, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$E8, (- GAME_SIZEX4), SPEED_ENEMY_INIT_Y + (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $03,$F2, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$F2, (- GAME_SIZEX8), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*1), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $03,$FC, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y + (GAME_SIZEY16*1), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $03,$FC, (- GAME_SIZEX4), SPEED_ENEMY_INIT_Y + (GAME_SIZEY16*0), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $04,$06, (GAME_SIZEX16*4), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $04,$10, (GAME_SIZEX16*6), -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $04,$1A, (GAME_SIZEX16*8), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO ; 10th .db $04,$38, (GAME_SIZEX4*3), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A .db $04,$4C, (GAME_SIZEX4*2), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A .db $04,$60, (GAME_SIZEX4*1), -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A .db $04,$88, (GAME_SIZEX16*8), -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_NINJA .db $04,$92, (GAME_SIZEX16*10), -(GAME_SIZEY12*2), 0, E_INCY_5, ENEMYTYPE_NINJA .db $04,$9C, (GAME_SIZEX16*12), -(GAME_SIZEY12*1), 0, E_INCY_5, ENEMYTYPE_NINJA ; 11th .db $04,$B0, (GAME_SIZEX16*3), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $04,$B4, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $04,$BA, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $04,$BE, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $04,$C4, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $04,$C8, (GAME_SIZEX16*9), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $04,$CE, (GAME_SIZEX16*9), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $04,$D2, (GAME_SIZEX16*11), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 ; 12th .db $05,$14, (GAME_SIZEX - (GAME_SIZEX16*3)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$18, (GAME_SIZEX - (GAME_SIZEX16*5)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$1E, (GAME_SIZEX - (GAME_SIZEX16*5)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$22, (GAME_SIZEX - (GAME_SIZEX16*7)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$28, (GAME_SIZEX - (GAME_SIZEX16*7)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$2C, (GAME_SIZEX - (GAME_SIZEX16*9)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$32, (GAME_SIZEX - (GAME_SIZEX16*9)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$36, (GAME_SIZEX - (GAME_SIZEX16*11)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 ; 103 ; 13th .db $05,$78, (GAME_SIZEX - (GAME_SIZEX16*3)), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $05,$78, (GAME_SIZEX16*3), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$82, (GAME_SIZEX - (GAME_SIZEX16*5)), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $05,$82, (GAME_SIZEX16*5), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $05,$8C, (GAME_SIZEX - (GAME_SIZEX16*7)), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $05,$8C, (GAME_SIZEX16*7), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 ; 14th .db $05,$C8, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $05,$D2, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $05,$DC, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $05,$E6, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $05,$F0, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $05,$FA, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $06,$04, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $06,$0E, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 ; 15th .db $06,$2C, GAME_SIZEX4, -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_NINJA .db $06,$2C, GAME_SIZEX2, -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_NINJA .db $06,$2C, (GAME_SIZEX2+GAME_SIZEX4), -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_NINJA .db $06,$40, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y + (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $06,$4A, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $06,$54, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y + (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $06,$5E, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $06,$68, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y + (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $06,$72, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 .db $06,$7C, -GAME_SIZEX4, SPEED_ENEMY_INIT_Y + (GAME_SIZEY16*2), E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_1 .db $06,$86, (GAME_SIZEX + GAME_SIZEX4), SPEED_ENEMY_INIT_Y - (GAME_SIZEY16*0), -E_INCY_3, -E_INCY_1, ENEMYTYPE_SPEEDNINJA_2 ; 16th .db $06,$A4, (GAME_SIZEX16*10), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $06,$A4, (GAME_SIZEX16*12), -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $06,$A4, (GAME_SIZEX16*14), -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_3ZAKO .db $06,$A4, (GAME_SIZEX16*3), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $06,$A8, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $06,$AE, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $06,$B2, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $06,$B8, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $06,$C2, (GAME_SIZEX16*9), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $06,$C8, (GAME_SIZEX16*9), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $06,$CB, (GAME_SIZEX16*11), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 ; 149 ; 17th .db $07,$08, GAME_SIZEX4, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A .db $07,$08, (GAME_SIZEX - (GAME_SIZEX16*3)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$0C, (GAME_SIZEX - (GAME_SIZEX16*5)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$12, (GAME_SIZEX - (GAME_SIZEX16*5)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$16, (GAME_SIZEX - (GAME_SIZEX16*7)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$1C, (GAME_SIZEX - (GAME_SIZEX16*7)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$20, (GAME_SIZEX - (GAME_SIZEX16*9)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$26, (GAME_SIZEX - (GAME_SIZEX16*9)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$2A, (GAME_SIZEX - (GAME_SIZEX16*11)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 ; 18th .db $07,$76, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A .db $07,$76, (GAME_SIZEX - (GAME_SIZEX16*3)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$7A, (GAME_SIZEX - (GAME_SIZEX16*5)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$80, (GAME_SIZEX - (GAME_SIZEX16*5)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$84, (GAME_SIZEX - (GAME_SIZEX16*7)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$8A, (GAME_SIZEX - (GAME_SIZEX16*7)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$8E, (GAME_SIZEX - (GAME_SIZEX16*9)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$94, (GAME_SIZEX - (GAME_SIZEX16*9)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 .db $07,$98, (GAME_SIZEX - (GAME_SIZEX16*11)), -GAME_SIZEY8, -E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_2 ; 19th .db $07,$D0, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_1, ENEMYTYPE_BIGSHIP3A .db $07,$F8, (GAME_SIZEX16*3), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $07,$FC, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $08,$02, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $08,$06, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $08,$0C, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $08,$10, (GAME_SIZEX16*9), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 ; 185 ; 20th .db $08,$20, GAME_SIZEX4, -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_NINJA .db $08,$20, GAME_SIZEX2, -GAME_SIZEX16, 0, E_INCY_3, ENEMYTYPE_NINJA ; ********************************************** .db $08,$20, (GAME_SIZEX2+GAME_SIZEX4), -GAME_SIZEX8, 0, E_INCY_3, ENEMYTYPE_NINJA .db $08,$2A, (GAME_SIZEX16*9), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $08,$2E, (GAME_SIZEX16*11), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 ; last .db $08,$48, (GAME_SIZEX-GAME_SIZEX4), -GAME_SIZEY8, 0, E_INCY_3, ENEMYTYPE_BIGSHIP3B .db $08,$66, GAME_SIZEX4, -GAME_SIZEY8, 0, E_INCY_3, ENEMYTYPE_BIGSHIP3B .db $08,$E8, (GAME_SIZEX-GAME_SIZEX4), -GAME_SIZEY8, 0, E_INCY_3, ENEMYTYPE_BIGSHIP3B .db $08,$E8, GAME_SIZEX4, -GAME_SIZEY8, 0, E_INCY_3, ENEMYTYPE_BIGSHIP3B .db $09,$10, GAME_SIZEX2, -GAME_SIZEY8, 0, E_INCY_4, ENEMYTYPE_BIGSHIP3B .db $09,$4C, (GAME_SIZEX16*3), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $09,$50, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $09,$74, (GAME_SIZEX16*5), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $09,$78, (GAME_SIZEX16*7), -GAME_SIZEY8, E_INCY_1, E_INCY_1, ENEMYTYPE_KAMIKAZE_1 .db $09,$B4, (GAME_SIZEX-(GAME_SIZEX/6)), -GAME_SIZEY8, 0, E_INCY_3, ENEMYTYPE_BIGSHIP3B .db $09,$B4, (GAME_SIZEX/6), -GAME_SIZEY8, 0, E_INCY_3, ENEMYTYPE_BIGSHIP3B .db $09,$B4, GAME_SIZEX2, -GAME_SIZEY16, 0, E_INCY_3, ENEMYTYPE_BIGSHIP3B ; boss .db $0B,$04, GAME_SIZEX2, -GAME_SIZEY8, 0, SCROLL_INCY, ENEMYTYPE_BOSSSTG3 ENEMY_SPAWN_NUMBER: .db (ENEMY_SPAWN_STG_2-ENEMY_SPAWN_STG_1)/7 .db (ENEMY_SPAWN_STG_3-ENEMY_SPAWN_STG_2)/7 .db (ENEMY_SPAWN_STG_4-ENEMY_SPAWN_STG_3)/7 .db (ENEMY_SPAWN_STG_5-ENEMY_SPAWN_STG_4)/7 .db (ENEMY_SPAWN_STG_6-ENEMY_SPAWN_STG_5)/7 .db (ENEMY_SPAWN_NUMBER-ENEMY_SPAWN_STG_6)/7 ENEMY_SPAWN_FIRST_INDEX: .dw ENEMY_SPAWN_STG_1 .dw ENEMY_SPAWN_STG_2 .dw ENEMY_SPAWN_STG_3 .dw ENEMY_SPAWN_STG_4 .dw ENEMY_SPAWN_STG_5 .dw ENEMY_SPAWN_STG_6 .ends .section "sound" free SONG_0: .incbin "res/sound/m_menu.psg" ;SONG_1: ;.incbin "res/sound/m_menu.psg" ;SONG_2: ;.incbin "res/sound/m_menu.psg" ;SONG_3: ;.incbin "res/sound/m_menu.psg" .ends .RAMSECTION "system_variables" SLOT 1 ;************************************** ; system stuff VBlankRoutine dw; var_isr_vector DW ; This is the address to jump to on an interrupt. var_VBlankTokenReady DB ; This is set to non-zero if the VBlank has occurred and we should do a frame. var_PauseNMITriggered DB ; This is set to non-zero if the Pause NMI triggered. var_ControllerStatus instanceof ControllerStatus 2 ;************************************** ; decompression buffer m_iPaletteBuffer dsb 16 ; size for a bank ;************************************** ; decompression buffer ;bufferRAM dsb BUFFER_SIZE ; size for a bank ;************************************** ; buffer de la NAMTBL en RAM m_iCharStgMaps dsb 24*24 ; screen size ;************************************** ; RAM BUFFER MEMORY FOR UNZIPPED MUSIC ; size is deffine by the bigger music file bufferMUSIC dsb 1607 m_iMusicChannel1 dsb 16 m_iMusicChannel2 dsb 16 m_iMusicChannel3 dsb 16 m_iMusicChannel4 dsb 16 ;************************************** ;************************************** m_iMathBuffer db m_iAngle dw m_iNegativeX db m_iNegativeY db m_iMenuIndex db m_iFrame db m_bFramePair db m_bFrameTrio db m_bFrameQuad db m_iPage db ;m_iNumPlayers db ; keys m_iLockKeys db m_iLockedKeys db m_iRequestLockKeys db ; game state m_iGamePause db m_iGameState db m_iDrawStringFrame db m_iDrawStringLetter db m_iDrawStringLine db m_iEndingState db ; player m_iP1Y dw m_iP1X dw m_iP1_AxisInc dsb 8*2 m_iP1_AxisIncFast dsb 8*2 m_iP1_AxisIndex dw m_iP1_ControlInc dw m_iP1_Index db m_iP1_Ascii db m_bP1_SelectFrame db m_bP1_SelectBalls db m_bP1_Selected db m_iP1_WingSprite db m_iP1_WingFrame db m_iP1_WingColor db m_iWingFrames db m_iP1IncY db m_iP1_ScondColor db m_iP1_Points dw m_bP1_Shoot_A db m_bP1_Shoot_B db m_iP1_State db m_bCanShoot db m_iLifeExtends db m_iExtendsScore dw ;m_iP2Y db ;m_iP2X db ;m_iP2_Index db ;m_iP2_Ascii db ;m_bP2_SelectFrame db ;m_bP2_SelectBalls db ;m_bP2_Selected db ;m_iP2_WingFrame db ;m_iP2_WingIndex db ;m_iP2_Points dw ;m_bP2_Shoot_A db ;m_bP2_Shoot_B db m_iP1_Left db m_iP1_Right db ;m_iP2_Left db ;m_iP2_Right db m_iP1_Lives db ;m_iP2_Lives db m_iP1_PwrUp db ;m_iP2_PwrUp db m_iP1_Invulnerable db ;m_iP2_Invulnerable db m_iP1_InvFrame db ;m_iP2_InvFrame db m_iP1_DeadFrame db ;m_iP2_DeadFrame db m_iP1_NameLenght db m_iP1_NamePointer dw TXT_POINTS_SCR dsb 5 TXT_POINTS_HIS dsb 5 TXT_EXTENDS_SCR dsb 5 TXT_TRAZAS dsb 5 TXT_SCORE_END dsb 5 ;SCROLL VARIABLES m_iGameStage db m_iScrollY dw m_iMaxScrollY dw m_iScrollRow db m_iScrollFrame db m_iWhiteScreen db m_bRedrawShip db m_iRedrawShipColor dw m_iWarningFrame db m_iWarningColor db m_iTarget dsb 4 ;m_iScrollBuffer dsb 32 ;m_iScrollBufferUp dsb 32 ;PLAYER BULLETS VARIABLES m_bBulletsActive dsb MAX_BULLETS m_iBulletsPosX dsb MAX_BULLETS m_iBulletsPosY dsb MAX_BULLETS m_iBulletsSprite dsb MAX_BULLETS m_iBulletsType dsb MAX_BULLETS m_iBulletsPower dsb MAX_BULLETS m_iBulletCloseDamage dsb MAX_BULLETS m_iBulletColor dsb MAX_BULLETS m_iBulletFrame db m_iBulletWidth db m_iBulletSprite db m_iBulletColisionCheckX db m_iBulletColisionCheckY db m_iBulletColisionCheckPow db m_iBulletColisionCheckX2 db m_iShowX2Text db m_iBulletExtraX_Right db m_iBulletExtraX_Left db ;ENEMIES VARIABLES m_iEnemySpawnNext dw m_iEnemySpawnIndex dw m_bEnemyActive dsb MAX_ENEMIES m_iEnemiesType dsb MAX_ENEMIES m_iEnemiesWindColor dsb MAX_ENEMIES m_iEnemiesGfxMode dsb MAX_ENEMIES m_iEnemiesPointer dw m_iEnemiesYXSC dsb MAX_ENEMIES*6 ; PosY*2/PosX*2/Color/Sprite ID m_iEnemiesIncX dsb MAX_ENEMIES*2 m_iEnemiesIncY dsb MAX_ENEMIES*2 m_iEnemiesTile dsb MAX_ENEMIES*2 m_iEnemiesScore dsb MAX_ENEMIES*2 m_iEnemiesState dsb MAX_ENEMIES m_iEnemiesWidth dsb MAX_ENEMIES m_iEnemiesNewState dsb MAX_ENEMIES m_iEnemiesFrame dsb MAX_ENEMIES m_iEnemiesLife dsb MAX_ENEMIES*2 m_iEnemiesEffect dsb MAX_ENEMIES m_bEnemyKill dsb MAX_ENEMIES m_iEnemyAimAngle dsb MAX_ENEMIES*2 mt_iEnemyNumSpawn dsb MAX_ENEMIES m_iCurrentEnemyType db m_iCurrentNumEnemies db m_iCurrentSpawnedEnemies db m_iCurrentKilledEnemies db m_iStageNumEnemies db m_iBoss_CommingFrame db m_iBoss_DeadFrame db m_iBoss_NumLifes db m_iBoss_Life dw m_iBoss_MaxLife dw m_iBoss_ShootFrame db m_iBoss_ShootFrame_2 db m_iBoss_ShootAngle db m_iBoss_ShootAngle_16bit_a dw m_iBoss_ShootAngle_16bit_b dw m_iBoss_AttackLevel db ; SCORE ms_iMaxChainScore dw m_iDefensiveScore dw m_iOfensiveScore dw m_iClearScoreStep db m_iClearScoreEnd db ; ITEMS m_bItemActive dsb MAX_ITEMS m_iItemYXSC dsb MAX_ITEMS*4 ; PosY/PosX/Color/Sprite ID m_iItemIncX dsb MAX_ITEMS m_iItemIncY dsb MAX_ITEMS m_iItemType dsb MAX_ITEMS m_iItemFrame db m_iItemGenType db ; EXPLOSION m_iExplosionStruct dsb MAX_EXPLOSIONS*6 ; Active/PosY/PosX/Color/Sprite/Frame m_iExplosionPointer dw m_bExplosionActive dsb MAX_EXPLOSIONS m_iExplosionYXSC dsb MAX_EXPLOSIONS*4 ; PosY/PosX/Color/Sprite ID m_iExplosionFrame dsb MAX_EXPLOSIONS m_iExpGeneralFrame db ; EBULLETS m_iEBulletInitData dsb 8 m_bEbulletActive dsb MAX_EBULLETS m_iEbulletYXS dsb MAX_EBULLETS*5 ; PosY/PosX (2 bytes each) + 1 byte (sprite id) m_iEbulletIncX dsb MAX_EBULLETS*2 ; 2 bytes (coordinate) m_iEbulletIncY dsb MAX_EBULLETS*2 ; 2 bytes (coordinate) m_iEbulletState dsb MAX_EBULLETS m_iEbulletType dsb MAX_EBULLETS m_iEbulletFrame db ; Sprite system buffers m_iNumSpr db m_iSprDrawFrame db m_iSprAtr dsb MAX_SPRITES*4 m_iSprBufferYXSC dsb 4 m_iSprBulletYXSC dsb 4 m_iPlayerBulletColors dw ; HISTORY m_iHistoryPointer dw m_iHistoryTalkingChar db m_iHistoryMaxPages db m_iHistoryTxt1Pointer dw m_iHistoryTxt2Pointer dw m_iHistoryTxt1NumLetter db m_iHistoryTxt2NumLetter db m_iHistoryTxt1Lenght db m_iHistoryTxt2Lenght db m_iHistoryTxt1CharIndex dw m_iHistoryTxt2CharIndex dw m_iTraza dw ; ENDING m_iEndingPointer dw m_iEndingTxtPointer dw m_iEndingNumLines db m_iEndingMaxLines db m_iEndingNumLetter db m_iEndingMaxLetters db m_iEndingY db m_iRandData dw .ends ; End of ram section