Sparse Invaders Source - Invaders Baddies.txt

Sparse Invaders Source - Invaders_Baddies.txt
;---   ;    ;  Written by Neil Beresford. ;   ;  Copyright 2008,2009 Neil Beresford ;   ;    This file is part of Sparse Invaders. ;   Sparse Invaders is free software: you can redistribute it and/or modify ;   it under the terms of the GNU General Public License as published by    ;    the Free Software Foundation, either version 3 of the License, or    ;    (at your option) any later version. ;   ;    Sparse Invaders is distributed in the hope that it will be useful, ;   but WITHOUT ANY WARRANTY; without even the implied warranty of    ;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;   GNU General Public License for more details. ;   ;    You should have received a copy of the GNU General Public License ;   along with Sparse Invaders. If not, see . ;   ;    ;   Notes: ;   ;---    .require "Constands" .require "Macros" ;---   .alias  FRAME_UPDATESTARTDELAY   25 .alias MOTHER_DELAYMOVE         2 .alias MOTHER_STATE_INACTIVE    0 .alias MOTHER_STATE_MOVE        1 .alias MOTHER_STATE_END         2 .alias MOTHER_STATE_SHOT        3 ;---   ;---    ;  BaddiesNewGame: ;   initializes at the start of game... ;---   BaddiesNewGame: LDA #40 STA BadStartHeight LDA #FRAME_UPDATESTARTDELAY STA INVADER_RESTARTDELAY JSR ScreenFunctionality.ClearScore ; setup graphic details for sprite 1 LDA #2 JSR SpriteController.SpriteRetreiveDetails STA BadGfxWidth STX BadGfxHeight LDA CURRENTSPRITEDATA STA BadGfx1 STA BadGfx3 LDA CURRENTSPRITEDATA+1 STA BadGfx1+1 STA BadGfx3+1 ; setup graphic details for sprite 2 LDA #3 JSR SpriteController.SpriteRetreiveDetails LDA CURRENTSPRITEDATA STA BadGfx2 LDA CURRENTSPRITEDATA+1 STA BadGfx2+1 ; setup graphic details for mother ship LDA #4 STA BadMotherGfxNum JSR SpriteController.SpriteRetreiveDetails LDA CURRENTSPRITEDATA STA BadMotherGfx LDA CURRENTSPRITEDATA+1 STA BadMotherGfx+1 ; setup the details for the mother ship... LDA #MOTHER_STATE_INACTIVE STA BadMotherState LDA #$ff STA BadMotherCount LDA #2 STA BadMotherXPos ; setup the bullet system for the invaders JMP Invader_Bullets.Init ;---   ;  BaddiesInit: ;   initializes the baddies at the start of the level and game... ;---   BaddiesInit: LDA #24 STA TOTAL_INVADERS ; setup the details for positioning of the baddies... LDA #3 STA XPOS STA BadXPos LDA BadStartHeight STA YPOS STA BadYPos BI_reposition: LDX #0      ; first sprite ...       LDY  #2      ; starting frame ... LDA #6  ; TEst was 6 STA SCRATCH1 LDA #4  ; TEST was 4 STA SCRATCH2 BI_SetupBaddies: LDA BadXPos STA XPOS LDA BadYPos STA YPOS ; adjust Y pos to bottom of sprite, LDA BadGfxHeight CLC ADC YPOS SEC SBC #1 STA YPOS ; adjust the YPOS to character based and store the offset in x for indexing AND #$07 STA XOFFSET LDA YPOS AND #$f8 STA YPOS TXA PHA TYA PHA JSR SpriteController.SpriteCalcScreenPos PLA TAY PLA TAX ;store all the details... LDA SCREENADD STA BaddieData,X INX LDA SCREENADD+1 STA BaddieData,X INX LDA XOFFSET STA BaddieData,X INX LDA BadXPos STA BaddieData,X INX LDA BadYPos STA BaddieData,X INX LDA #INV_STATE_ACTIVE STA BaddieData,X INX ; calc the new baddies position... LDA BadXPos CLC ADC #6 STA BadXPos DEC SCRATCH1 BNE BI_SetupBaddies LDA #3 STA BadXPos LDA BadYPos CLC ADC #12 STA BadYPos LDA #6 STA SCRATCH1 DEC SCRATCH2 BNE BI_SetupBaddies LDA #1 STA INV_MOVDIR LDA #INV_MODE_STARTUP STA BadMode ; speed the bullet rate up on       LDA  #150 STA BULLET_DELAY LDA BULLET_REFRESHDELAY SEC SBC #10 CMP #10 BPL BI_Cont LDA #10 BI_cont: STA BULLET_REFRESHDELAY ; finally sort out the frame delay ... LDA INVADER_RESTARTDELAY STA INV_DELAYCOUNT STA INV_DELAYUPDATE jsr Invader_Bases.Init RTS ;---   ;  BaddiesDraw: ;   draws all the invaders to screen at start of level... ;---   BaddiesDraw: LDY #24 LDX #0 DB_DrawInvaders: TYA PHA TXA CLC ADC #5 TAY LDA BaddieData,Y CMP #INV_STATE_ACTIVE BEQ DB_draw CMP #INV_STATE_DEAD BEQ DB_SkipRemove LDA #INV_STATE_DEAD STA BaddieData,Y TXA PHA JSR Baddies_RemoveInvader PLA TAX DB_skipRemove: TXA CLC ADC #6 TAX JMP DB_SkipDraw DB_draw: TAY LDA BaddieData,X STA SCREENADD INX LDA BaddieData,X STA SCREENADD+1 INX LDA BaddieData,X STA XOFFSET INX INX INX INX LDA BadGfx1 STA CURRENTSPRITEDATA LDA BadGfx1+1 STA CURRENTSPRITEDATA+1 LDA BadGfxWidth STA WIDTH LDA BadGfxHeight STA HEIGHT TXA PHA JSR SpriteController.SpriteNoMaskDraw PLA TAX DB_SkipDraw: PLA TAY DEY BNE DB_DrawInvaders RTS BaddieSound: LDA MISSFIRSTSOUND BEQ over LDA BadMotherState CMP #1 BEQ over2 LDA #9    ;invader step sound JSR Sound._MAKE_SOUND over: LDA #1 STA MissFirstSound over2: RTS ;---   ;  BaddiesUpdate: ;   Updates the invaders ... ;---   BaddiesUpdate: LDA INV_DELAYCOUNT BEQ BU_Update DEC INV_DELAYCOUNT BEQ BU_jump RTS BU_jump: jsr BaddieSound LDA BadMode ASL TAX LDA BadModeJump,X STA TEMPPTR INX LDA BadModeJump,X STA TEMPPTR+1 JMP (TEMPPTR) BadModeJump: .word BadddiesUpdate_Mode_startup .word BadddiesUpdate_Mode_WalkLeft .word BadddiesUpdate_Mode_WalkRight .word BadddiesUpdate_Mode_WalkDown .word BadddiesUpdate_Mode_Invaded ;---   ;  BadddiesUpdate_Mode_startup: ;   initializes the baddies, starting them ... ;---   BadddiesUpdate_Mode_startup: LDA INV_DELAYUPDATE ASL ASL STA INV_DELAYCOUNT LDA #INV_MODE_WALKRIGHT STA BadMode LDA #2 STA INV_FRAME LDA #0 STA INV_YMOVDIR RTS ;---   ;  BadddiesUpdate_Mode_WalkLeft: ;   Walks the baddies left - this checks for the left limit then makes them ;   go down... ;---   BadddiesUpdate_Mode_WalkLeft: LDA #$ff STA INV_MOVDIR JMP BU_Update ;---   ;  BadddiesUpdate_Mode_WalkRight: ;   Walks the baddies right - this checks for the right limit then makes them ;   go down... ;---   BadddiesUpdate_Mode_WalkRight: LDA #1 STA INV_MOVDIR JMP BU_Update ;---   ;  BadddiesUpdate_Mode_WalkDown: ;   Walks the baddies down 8 pixels - then starts invaders going left or right ;---   BadddiesUpdate_Mode_WalkDown: DEC BadInvYRef BNE BU_godown LDA INV_DELAYUPDATE STA INV_DELAYCOUNT LDA #2 STA INV_FRAME LDA #0 STA INV_YMOVDIR LDA BadFLag+2 STA BadMode RTS BU_godown: LDA #1 STA INV_YMOVDIR LDA #0 STA INV_MOVDIR JMP BU_Update ;---   ;  BadddiesUpdate_Mode_Invaded: ;   Invaders have won - sigh ;---   BadddiesUpdate_Mode_Invaded: LDA INV_DELAYUPDATE STA INV_DELAYCOUNT LDA #0 STA INV_YMOVDIR jsr Invader_Player.Player_GameOver jsr ScreenFunctionality.Screen_Clear  ; clear the screen... JMP Main.main_restart ;---   ;  BU_Update: ;   Moves the invader according to mode, checks limits then draws them ;---   BU_Update: DEC INV_FRAME BNE BU_checkGroup LDA #2 STA INV_FRAME BU_checkGroup: LDA #0 LDX INV_FRAME CPX #1 BEQ BU_dotop LDA #72 ; move the top row of invaders one place BU_dotop: LDY #12 STA SCRATCH1 BU_Loop: PHA CLC ADC #3 TAX TYA PHA TXA CLC ADC #2 TAY LDA BaddieData,Y CMP #INV_STATE_ACTIVE BEQ BU_CalcMove PLA TAY TXA CLC ADC #3 TAX PLA CLC ADC #6 JMP BU_SkipInvader BU_CalcMove: PLA TAY LDA BaddieData,X CLC ADC INV_MOVDIR STA XPOS STA BadXPos INX LDA BaddieData,X CLC ADC INV_YMOVDIR STA YPOS STA BadYPos ; adjust Y pos to bottom of sprite, LDA BadGfxHeight CLC ADC YPOS SEC SBC #1 STA YPOS ; adjust the YPOS to character based and store the offset in x for indexing AND #$07 STA XOFFSET LDA YPOS AND #$f8 STA YPOS TYA PHA JSR SpriteController.SpriteCalcScreenPos PLA TAY PLA TAX ;store all the details... LDA SCREENADD STA BaddieData,X INX LDA SCREENADD+1 STA BaddieData,X INX LDA XOFFSET STA BaddieData,X INX LDA BadXPos STA BaddieData,X INX LDA BadYPos STA BaddieData,X INX INX ; skip leftright check if going down... LDA BadMode CMP #INV_MODE_WALKDOWN BEQ BU_SkipChange ; check and change direction... LDA BadMode CMP #INV_MODE_WALKLEFT BEQ BU_CheckLeft LDA BadXPos CMP #74 BCC BU_CheckLeft LDA BadInvYRef BNE BU_CheckLeft LDA #INV_MODE_WALKLEFT STA BadFlag+2 LDA #INV_MODE_WALKDOWN STA BadFlag+1 LDA #8 STA BadInvYRef JMP BU_skipChange BU_checkLeft: LDA BadMode CMP #INV_MODE_WALKRIGHT BEQ BU_skipChange LDA BadXPos CMP #2 BCS BU_skipChange LDA BadInvYRef BNE BU_skipChange LDA #INV_MODE_WALKRIGHT STA BadFlag+2 LDA #INV_MODE_WALKDOWN STA BadFlag+1 LDA #8 STA BadInvYRef BU_skipChange: TXA BU_skipInvader: DEY BEQ BU_DoDraw JMP BU_Loop BU_DoDraw: ; if needed - blank the base line when invader reaches it      PHA LDA SCRATCH1 PHA ; calc the Y height in blocks - reference the bottom of the last invader ; calculated ....       LDA  BadYPos CLC ADC #6 LSR LSR LSR TAY JSR Invader_Bases.BlankLine PLA STA SCRATCH1 PLA LDX SCRATCH1 LDY #12 JSR DB_DrawInvaders LDA SCRATCH1 BEQ BU_Cont LDA INV_DELAYUPDATE STA INV_DELAYCOUNT LDA #2 STA INV_FRAME LDA BadYPos CMP #215 BCC BU_ChangeGfx LDA #INV_MODE_INVADED STA BadMode RTS BU_ChangeGfx: LDA BadGfx3 STA BadGfx1 LDA BadGfx3+1 STA BadGfx1+1 LDA BadFLag EOR #1 STA BadFlag BEQ BU_cont LDA BadGfx2 STA BadGfx1 LDA BadGfx2+1 STA BadGfx1+1 LDA BadFlag+1 BEQ BU_cont STA BadMode LDA #0 STA BadFlag+1 BU_cont: RTS ;---   ;  Check Various Game states ;---   ;---    ;  BaddiesGeneralUpdate: ;   General updates and checks ;---   BaddiesGeneralUpdate: ; These should be impemented as states or flagged for process...      ; Will no doubt revisit later...       ; ok - monitor explosion here ... sigh! LDA EXPLOSION_COUNT BEQ BGU_Checkexp2 LDA #EXPLOSION_SPRITE_SLOT*16 LDX #SPRFLAG_REDRAW JSR SpriteController.Sprite_SetFlag DEC EXPLOSION_COUNT BNE BGU_End LDA #EXPLOSION_SPRITE_SLOT*16 LDX #SPRFLAG_KILL + SPRFLAG_REDRAW JSR SpriteController.Sprite_SetFlag BGU_Checkexp2: LDA EXPLOSION2_COUNT BEQ BGU_Checkend LDA #EXPLOSION2_SPRITE_SLOT*16 LDX #SPRFLAG_REDRAW JSR SpriteController.Sprite_SetFlag DEC EXPLOSION2_COUNT BNE BGU_End LDA #EXPLOSION2_SPRITE_SLOT*16 LDX #SPRFLAG_KILL + SPRFLAG_REDRAW JSR SpriteController.Sprite_SetFlag BGU_Checkend: ; check for end of game LDA TOTAL_INVADERS BNE BGU_End JSR Invader_Bullets.RemoveBullets JSR Invader_Player.PBM_killBullet LDA #EXPLOSION_SPRITE_SLOT * 16 JSR SpriteController.SpriteClear LDA #EXPLOSION2_SPRITE_SLOT * 16 JSR SpriteController.SpriteClear jsr SpriteController.SpritesWipeActive INC GAME_LEVEL jsr Invader_Player.Player_StartLevel jsr ScreenFunctionality.Screen_Clear  ; clear the screen... jsr ScreenFunctionality.DrawScore LDA #PLAYER_SPRITE_SLOT*16 LDX #SPRFLAG_REDRAW JSR SpriteController.Sprite_SetFlag LDA  #100 STA  FIREBUTTON_DELAY ; new level ... LDA BadStartHeight CLC ADC #12 STA BadStartHeight LDX INVADER_RESTARTDELAY DEX DEX STX INVADER_RESTARTDELAY JSR BaddiesInit jsr Invader_Bases.DrawBases BGU_End: LDA FIREBUTTON_DELAY BEQ BGU_term DEC FIREBUTTON_DELAY BGU_term: RTS ;---   ;  Mother Ship Functionality ;---   ;---    ;  BaddiesUpdateMother: ;   Control for the mother ship... ;---   BaddiesUpdateMother: LDA BadMotherCount BEQ BU_Mother DEC BadMotherCount RTS BU_Mother: LDA BadMotherState ASL TAX LDA BadMotherJump,X STA TEMPPTR INX LDA BadMotherJump,X STA TEMPPTR+1 JMP (TEMPPTR) BadMotherJump: .word BadMother_inactive .word BadMother_move .word BadMother_end .word BadMother_shot ;---   ;  BadMother_inactive: ;   pause before activating the mother ship... ;---   BadMother_inactive: LDA #7 jsr Sound._MAKE_SOUND  ;;;//top alien loop sound LDA #MOTHER_DELAYMOVE STA BadMotherCount LDA #MOTHER_STATE_MOVE STA BadMotherState RTs ;---   ;  BadMother_move: ;   moves the mother ship from left to right ;---   BadMother_Move: LDA #MOTHER_DELAYMOVE STA BadMotherCount LDA BadMotherXPos CLC ADC #1 STA BadMotherXPos PHA AND #3 BNE BM_Move2 ; Every time the mother ship reaches on a position div'ed by 4 ...      ; swap the image of the mother ship, to give the impression of life! ; Well, nearly. Sprite frames are 4 and 7, so XOR 3 to initial value ; of 4 - flips then between the two images ... LDA BadMotherGfxNum EOR #3 STA BadMotherGfxNum JSR SpriteController.SpriteRetreiveDetails LDA CURRENTSPRITEDATA STA BadMotherGfx LDA CURRENTSPRITEDATA+1 STA BadMotherGfx+1 BM_Move2: PLA CLC CMP #74 BCC BadMother_DraW LDA #255 STA BadMotherCount LDA #MOTHER_STATE_INACTIVE STA BadMotherState JSR BadMother_Clear LDA #2 STA BadMotherXPos RTS ;---   ;  BadMother_end: ;   mother ship has reached it's end stop... ;---   BadMother_end: RTS ;---   ;  BadMother_shot: ;   the mother ship has been shot... ;---   BadMother_shot: JSR BadMother_Clear LDA #MOTHER_STATE_INACTIVE STA BadMotherState LDA #$ff STA BadMotherCount LDA #2 STA BadMotherXPos RTS ;---   ;  BadMother_Draw: ;   calculte the screen position then draw the mother ship... ;---   BadMother_Draw: LDA BadMotherXPos STA XPOS LDA #10 STA YPOS ; adjust Y pos to bottom of sprite, LDA #10 CLC ADC YPOS SEC SBC #1 STA YPOS ; adjust the YPOS to character based and store the offset in x for indexing AND #$07 STA XOFFSET LDA YPOS AND #$f8 STA YPOS JSR SpriteController.SpriteCalcScreenPos LDA BadMotherGfx STA CURRENTSPRITEDATA LDA BadMotherGfx+1 STA CURRENTSPRITEDATA+1 LDA #5 STA WIDTH LDA #10 STA HEIGHT JMP SpriteController.SpriteNoMaskDraw ;---   ;  BadMother_Clear: ;   Screen clear, block clear the size of the sprite... ;---   BadMother_Clear: LDA BadMotherXPos STA XPOS LDA #10 STA YPOS ; adjust Y pos to bottom of sprite, LDA #10 CLC ADC YPOS SEC SBC #1 STA YPOS ; adjust the YPOS to character based and store the offset in x for indexing AND #$07 STA XOFFSET LDA YPOS AND #$f8 STA YPOS JSR SpriteController.SpriteCalcScreenPos LDA #5 STA WIDTH LDA #10 STA HEIGHT JMP SpriteController.Sprite_Blank ;---   ;  Misc Baddie Functionality ;---   ;---    ;  Baddie_CheckKill: ;   Checks the bullet with the invaders that are active... ;   X - Xpos ;   Y - Ypos ;   Returns - ;   A - -1 or offset for baddie to kill...     ;--- Baddie_CheckKill: STX XPOS STY YPOS ; check the mother ship ... LDA BadMotherState CMP #MOTHER_STATE_MOVE BNE BCK_CheckInvaders CPY #15 BCS BCK_CheckInvaders LDA BadMotherXPos CMP XPOS BCS BCK_CHeckInvaders CLC ADC #5 CMP XPOS BCC BCK_CheckInvaders ; Hit the mother ship, award points and remove ship LDX BadMotherXPos LDY #10 JSR Invader_Player.Player_MotherExplosionStart LDA #8 ;;//stop loop JSR Sound._MAKE_SOUND LDA #3 ;;//long exp JSR Sound._MAKE_SOUND LDA SCORE_ADDITION CLC ADC #25 STA SCORE_ADDITION LDA #25 `ADDTO16BIT SCORE_LO ; check the bonus and see if we need another life BCK_DEBUG: LDA SCORE_HI CMP BONUSSCORE_HI BCC BCK_Cont LDA SCORE_LO CMP BONUSSCORE_LO BCC BCK_Cont INC PLAYER_LIFES LDA #<500 CLC ADC BONUSSCORE_LO STA BONUSSCORE_LO LDA #>500 ADC BONUSSCORE_HI STA BONUSSCORE_HI BCK_Cont: LDA #MOTHER_STATE_SHOT STA BadMotherState BCK_CheckInvaders: LDA #0 STA SCRATCH1 LDX #0 + 3      ; index to xpos LDY #0 + 5      ; index to active state BCK_loop: STX SCRATCH2 STY SCRATCH3 LDA BaddieData,Y BEQ BCK_Skip ; check left, right LDA BaddieData,X CMP XPOS BCS BCK_Skip CLC ADC #3 CMP XPOS BCC BCK_Skip ; check top, bottom INX LDA BaddieData,X CMP YPOS BCS BCK_Skip CLC ADC #6 CMP YPOS BCC BCK_Skip ; hit invader ... INX TXA PHA LDA #4 ;;//exp JSR Sound._MAKE_SOUND PLA TAX LDA #INV_STATE_REMOVE STA BaddieData,X ;   ;  ; store the bullet details... ;  LDA  SCRATCH1 ;  LDX  #$ff ;  CMP  INV_PICKED1 ;  BNE  C_try2 ;  STX  INV_PICKED1 ;  JMP  C_cont;; ;   ;C_try2: ;  CMP  INV_PICKED2 ;  BNE  C_try3 ;  STX  INV_PICKED2 ;  JMP  C_cont ;     ;C_try3: ;  CMP  INV_PICKED3 ;  BNE  C_cont ;  STX  INV_PICKED3;; ;C_cont: ;  JSR  Invader_bullets.RemoveFromLink ; set off the explosion ... LDX SCRATCH2 LDA BaddieData,X INX LDY BaddieData,X TAX JMP Invader_Player.Player_ExplosionStart BCK_Skip: LDX SCRATCH2 LDY SCRATCH3 TXA CLC ADC #6 TAX TYA CLC ADC #6 TAY INC SCRATCH1 LDA SCRATCH1 CMP #24 BNE BCK_loop LDA #$ff RTS ;---   ;  Baddies_RemoveInvader: ;   Draws an blank where the invader used to be... ;   X - index to invader data ;---   Baddies_RemoveInvader: ; adjust the score - here seems a good enough place as any LDA SCORE_ADDITION CLC ADC #10 STA SCORE_ADDITION LDA #10 `ADDTO16BIT SCORE_LO LDA SCORE_HI CMP BONUSSCORE_HI BCC BIV_skipbonuscheck LDA SCORE_LO CMP BONUSSCORE_LO BCC BIV_skipbonuscheck BIV_debug: INC PLAYER_LIFES LDA #<500 CLC ADC BONUSSCORE_LO STA BONUSSCORE_LO LDA #>500 ADC BONUSSCORE_HI STA BONUSSCORE_HI BIV_skipbonuscheck: DEC TOTAL_INVADERS LDA INV_DELAYUPDATE CMP #1 BEQ BIV_cont DEC INV_DELAYUPDATE ; slightly speed things up a little BIV_cont: LDA BaddieData,X STA SCREENADD INX LDA BaddieData,X STA SCREENADD+1 INX LDA BaddieData,X STA XOFFSET INX LDA BaddieData,X INX LDY BaddieData,X INX INX ;  TAX ;  LDA  SCRATCH1 ;  PHA ;  JSR  Invader_Player.Player_ExplosionStart ;  PLA ;  STA  SCRATCH1 LDA BadGfx1 STA CURRENTSPRITEDATA LDA BadGfx1+1 STA CURRENTSPRITEDATA+1 LDA BadGfxWidth STA WIDTH LDA BadGfxHeight STA HEIGHT JMP SpriteController.Sprite_Blank ;---   ;  Baddies_GetInvader: ;   a - index start position - the search is in reverse order ;   Returns the invader data in USERPTR ;   a - number of invader picked... ;---   Baddies_GetInvader: STA SCRATCH1 LDA #1 STA SCRATCH2 BGI_Loop: LDA SCRATCH1 CMP INV_PICKED1 BEQ BGI_Skip CMP INV_PICKED2 BEQ BGI_Skip CMP INV_PICKED3 BEQ BGI_Skip `MUL6 TEMP ; multipy A by 6 and store in TEMP LDA TEMP CLC ADC #5 TAY LDA BaddieData,Y BNE BGI_FOund BGI_Skip: DEC SCRATCH1 BPL BGI_Loop DEC SCRATCH2 BMI BGI_failed LDA #24-1 STA SCRATCH1 JMP BGI_Loop BGI_Found: LDA #BaddieData ADC #0 STA USERPTR+1 LDA SCRATCH1 RTS BGI_failed: LDA #$ff RTS ;---   BaddieData: .byte 0,0,0,0,0,0    ; 01 screen add (2 bytes), Xoffset, xpos, ypos, State .byte 0,0,0,0,0,0    ; 02 .byte 0,0,0,0,0,0    ; 03 .byte 0,0,0,0,0,0    ; 04 .byte 0,0,0,0,0,0    ; 05 .byte 0,0,0,0,0,0    ; 06 .byte 0,0,0,0,0,0    ; 07 .byte 0,0,0,0,0,0    ; 08 .byte 0,0,0,0,0,0    ; 09 .byte 0,0,0,0,0,0    ; 10 .byte 0,0,0,0,0,0    ; 11 .byte 0,0,0,0,0,0    ; 12 .byte 0,0,0,0,0,0    ; 13 .byte 0,0,0,0,0,0    ; 14 .byte 0,0,0,0,0,0    ; 15 .byte 0,0,0,0,0,0    ; 16 .byte 0,0,0,0,0,0    ; 17 .byte 0,0,0,0,0,0    ; 18 .byte 0,0,0,0,0,0    ; 19 .byte 0,0,0,0,0,0    ; 20 .byte 0,0,0,0,0,0    ; 21 .byte 0,0,0,0,0,0    ; 22 .byte 0,0,0,0,0,0    ; 23 .byte 0,0,0,0,0,0    ; 24 ;---   BadStartHeight:    .byte 0 BadGfx1:          .byte 0,0 BadGfx2:          .byte 0,0 BadGfx3:          .byte 0,0 BadGfxWidth:      .byte 0 BadGfxHeight:     .byte 0 BadXpos:          .byte 0 BadYpos:          .byte 0 BadFlag:          .byte 0,0,0 BadMode:          .byte 0 BadInvYRef:       .byte 0 BadMotherGfx:     .byte 0,0 BadMotherXPos:    .byte 0 BadMotherCount:   .byte 0 BadMotherState:   .byte 0 BadMotherGfxNum:  .byte 0 ;---   ; End of Invader_Baddies ;---