;-----------------------------------------------------------;
;                                                           ;
; Invaded                                                   ;
; Version 1.0                                               ;
; End-Of-Level Boss Routines                                ;
;                                                           ;
;-----------------------------------------------------------;

;------------------------------------------------
; drawGuardian - Draw end-of-level boss (if fighting one)
;
; Input:    None
; Output:   None
;------------------------------------------------
drawGuardian:
        ld      a,(guardian)
        or      a
        ret     z
        ld      ix,drawGuardianTable
        ld      de,guardianBG
        ld      hl,guardianSpr1
        ld      b,4
drawGuardianLoop:
        push    bc
        ld      a,(gX)
        add     a,(ix)
        ld      b,a                             ; B = X Coord to draw sprite
        ld      (de),a
        inc     de
        ld      a,(gY)
        add     a,(ix+1)
        ld      c,a                             ; C = Y Coord to draw sprite
        ld      (de),a
        inc     de                              ; DE => Where to store background
        call    PutSprite_MSB
        ld      bc,16
        add     hl,bc
        ex      de,hl
        ld      bc,8
        add     hl,bc
        ex      de,hl
        inc     ix
        inc     ix
        pop     bc
        djnz    drawGuardianLoop
        ret

;------------------------------------------------
; eraseGuardian - Erase end-of-level boss (if fighting one)
;
; Input:    None
; Output:   None
;------------------------------------------------
eraseGuardian:
        ld      a,(guardian)
        or      a
        ret     z
        ld      hl,guardianBG
        ld      b,4
eraseGuardianLoop:
        push    bc
        ld      b,(hl)
        inc     hl
        ld      c,(hl)
        inc     hl
        call    PutSprite
        ld      de,8
        add     hl,de
        pop     bc
        djnz    eraseGuardianLoop
        ret

;------------------------------------------------
; moveGuardian - Run AI Scripts for end-of-level boss
;
; Input:    None
; Output:   None
;------------------------------------------------
moveGuardian:
        ld      a,(guardian)
        or      a
        ret     z
        ld      hl,frame
        bit     0,(hl)
        ret     z
        ld      ix,gX-1
        ld      a,(gAICnt1)
        ld      (aiCnt),a
        ld      a,(gAI1)
        call    runAIScript
        ld      a,(aiCnt)
        ld      (gAICnt1),a
        ld      a,(gAICnt2)
        ld      (aiCnt),a
        ld      a,(gAI2)
        call    runAIScript
        ld      a,(aiCnt)
        ld      (gAICnt2),a
        ret

;------------------------------------------------
; guardianMakeEnemy - Make an enemy from the end-of-level boss
;
; Input:    None
; Output:   None
;------------------------------------------------
guardianMakeEnemy:
        ld      a,(guardian)
        or      a
        ret     z
        ld      a,(gEnemy)
        or      a
        ret     z
        ld      b,a
        ld      hl,gEnemyCnt
        inc     (hl)
        ld      a,(hl)
        and     $3F
        ret     nz
        ld      hl,gEnemyIni+1
        ld      (hl),b
        inc     hl
        ld      a,(gX)
        ld      (hl),a
        inc     hl
        ld      a,(gY)
        ld      (hl),a
        ld      hl,gEnemyIni
        jp      newEnemy

.end
