Prev: 870C Up: Map Next: 8790
873E: Handle sprite types $15 - $17
Used by the routine at handle_sprite_type_03.
Input
A Sprite type
IX Sprite data
handle_sprite_types_15_17 873E CP $15 Is sprite type < $15
8740 JR C,handle_sprite_types_0E_11 If so, jump ahead
8742 CP $18 Is sprite type >= $18
8744 JR NC,handle_sprite_types_0E_11 If so, jump ahead
sprite types $15 - $17 (laser fence)
8746 LD B,$07 Mask = 7
8748 LD A,(status_flags) Check if you have died
874B BIT 2,A ...
874D JR Z,handle_sprite_types_15_17_0 If not, skip next
874F LD B,$03 Else set Mask = 3
handle_sprite_types_15_17_0 8751 LD A,(frame_counter) Frame counter
8754 AND B AND mask
8755 JR NZ,handle_sprite_types_15_17_1 If not zero, skip next 2
8757 DEC (IX+$01) Decrement polar y
875A INC (IX+$05) Mark for pattern reload
handle_sprite_types_15_17_1 875D LD HL,other_flags Flags
8760 SET 4,(HL) Set laser fence flag
8762 LD A,(IX+$00) Get sprite type
8765 CP $17 If not laser fence center
8767 RET NZ Then return to return_from_sprite_handler
8768 LD A,(other_flags) If bit 3 is reset
876B BIT 3,A ...
876D JP Z,deallocate_enemy Then deallocate
8770 INC (IX+$05) Mark for pattern reload
8773 LD A,(IX+$02) Get polar x
8776 ADD A,(IX+$03) Add velocity
8779 AND $3F Mod 64
877B LD (IX+$02),A Save new polar x
877E LD HL,laser_fence_2_x Did center reach end 2?
8781 CP (HL) ...
8782 JR Z,handle_sprite_types_15_17_2 Then skip ahead
8784 INC HL Did center reach end 1?
8785 CP (HL) ...
8786 RET NZ If not, return to return_from_sprite_handler
handle_sprite_types_15_17_2 8787 LD A,(IX+$03) Switch direction
878A NEG ...
878C LD (IX+$03),A ...
878F RET Return to return_from_sprite_handler
Prev: 870C Up: Map Next: 8790