;-----------------------------------------------------------;
;                                                           ;
; Invaded                                                   ;
; Version 1.0                                               ;
; Explosion Animation Routines                              ;
;                                                           ;
;-----------------------------------------------------------;

;-----------------------------------------------
; clearAnimationArray - Clear animation array
;
; Input:    None
; Output:   None
;-----------------------------------------------
clearAnimationArray:
        ld      hl,animationArray               ; HL => Start of animationArray
        ld      de,animationArray+1
        ld      bc,MAX_ANIMS*3-1
        ld      (hl),0
        ldir
        ret

;------------------------------------------------
; newAnimation - Add an explosion animation
;
; Input:    IX => Enemy entry in enemyArray
; Output:   None
;------------------------------------------------
newAnimation:
        ld      hl,animationArray
        ld      b,MAX_ANIMS
        ld      de,3
findAnimationEntry:
        ld      a,(hl)
        or      a
        jr      z,animationEntryFound
        add     hl,de
        djnz    findAnimationEntry
        ret
animationEntryFound:
        ld      (hl),4
        inc     hl
        ld      a,(ix+E_X)                      ; A = X
        cp      96-8
        jr      c,newAnimXChecked
        cp      200
        ld      a,96-8
        jr      c,newAnimXChecked
        xor     a
newAnimXChecked:
        ld      (hl),a
        inc     hl
        ld      a,(ix+E_Y)                      ; A = Y
        cp      56-8
        jr      c,newAnimYChecked
        cp      200
        ld      a,56-8
        jr      c,newAnimYChecked
        xor     a
newAnimYChecked:
        ld      (hl),a
        ret

;------------------------------------------------
; drawAnimations - Draw/Erase all animations
;
; Input:    None
; Output:   None
;------------------------------------------------
drawAnimations:
        ld      hl,animationArray
        ld      b,MAX_ANIMS
drawAnimationsLoop:
        push    bc
        push    hl
        ld      a,(hl)
        or      a
        jr      z,endDrawAnimationsLoop
        inc     hl
        ld      b,(hl)
        inc     hl
        ld      c,(hl)
        ld      l,a
        ld      h,0
        dec     l
        add     hl,hl
        add     hl,hl
        add     hl,hl
        add     hl,hl
        ex      de,hl
        ld      ix,sprExplosion1
        add     ix,de
        ld      a,b
        ld      l,c
#ifdef MIRAGE
        call    putSprite8
#else
        ld      b,8
        call    ionPutSprite
#endif
endDrawAnimationsLoop:
        pop     hl
        pop     bc
        inc     hl
        inc     hl
        inc     hl
        djnz    drawAnimationsLoop
        ret

;------------------------------------------------
; updateAnimations - Update the explosion animations
;
; Input:    None
; Output:   None
;------------------------------------------------
updateAnimations:
        ld      a,(frame)
        and     $03
        ret     nz                              ; Only update every 4th frame
        ld      hl,animationArray
        ld      b,MAX_ANIMS
        ld      de,3
updateAnimationsLoop:
        ld      a,(hl)
        or      a
        jr      z,endUpdateAnimationsLoop
        dec     (hl)
endUpdateAnimationsLoop:
        add     hl,de
        djnz    updateAnimationsLoop
        ret

.end
