Prev: 6874 Up: Map Next: 68d8
687a: Animates the explosion sprites.
Input
IX Explosion animation object
687a ld hl,$5dcb Increment current alien number
687d inc (hl)
687e ld c,(ix+$04) C=explosion animation frame
6881 ld b,(ix+$05) B=explosion animation state
6884 ld a,($5dcc) Game timer
6887 and b
6888 jr nz,$688d Increment frame if timer&state is zero
688a inc (ix+$04)
688d ld a,c A=original frame count
688e sla c Multiply by 2 (addresses are two-bytes)
6890 ld b,$00
6892 ld hl,$68d8 HL=explosion sprite lookup table
6895 add hl,bc Set offset
6896 ld e,(hl) DE=address of the desired sprite
6897 inc hl
6898 ld d,(hl)
6899 ld l,(ix+$01) Set HL to Y,X coords of sprite
689c ld h,(ix+$02)
689f cp $06 Comparing with original frame count from 687e
68a1 jr nc,$68b7 If original frame >= 6 then animation has finished
68a3 cp $03
68a5 jr nc,$68d2 If original frame >= 3 then half animated
68a7 call $7263 Erase animation sprite
68aa ld a,($5dce) A=random number
68ad and $07
68af or $42
68b1 ld (ix+$03),a Update colour attribute to a random colour
68b4 jp $7197 Colourize the sprite
After an explosion, we check if it was the player that died!
68b7 ld a,(ix+$06) Update anim object so "animating" = "direction"?
68ba ld (ix+$00),a
68bd call $72ef Update Actor position direction
68c0 call $726d Find and destroy actor
68c3 ld (ix+$00),$00 Reset "animating"
68c7 ld a,(ix+$06) Animation object "direction"
68ca and $3f
68cc cp $03
68ce jp c,$60b7 Player was killed if < 3 (end of turn)
68d1 ret
Called when half the explosion has been animated.
68d2 call $71f2 Get sprite screen position
68d5 jp $7270 Erase a destroyed actor
Prev: 6874 Up: Map Next: 68d8