Prev: 8790 Up: Map Next: 8815
87D5: Create map entry for enemy sprite
Search for a value (pattern OR $80) in map. If not found, allocate an entry. If found, calculate coordinates and move towards them. Used by the routine at handle_sprite_types_0E_11.
Input
IX Sprite data of enemy
move_towards_center 87D5 LD A,(sprite_countdown) Return if countdown
87D8 OR A is not zero
87D9 RET NZ ...
87DA INC (IX+$05) Mark for pattern reload
87DD LD A,(IX+$0A) Get pattern
87E0 OR $80 Set bit 7
87E2 LD B,$24 Size of map
87E4 LD HL,center_enemy_map Address of map
move_towards_center_0 87E7 CP (HL) Check entry
87E8 JR Z,move_towards_center_1 Break out if found
87EA INC HL Next map address
87EB DJNZ move_towards_center_0 Loop up to 36 times
87ED LD A,(IX+$0A) Get pattern (already set?)
87F0 OR $80 Set bit 7
87F2 JP allocate_map_entry Add pattern to map. Return to return_from_sprite_handler
move_towards_center_1 87F5 CALL polar_coord_from_map Now DE contains polar y,x
87F8 LD A,E Get x from map
87F9 CP (IX+$02) Compare with polar x
87FC JR Z,move_towards_center_2 If same, skip ahead
87FE JP move_towards_x Else jump out to move_towards_x
move_towards_center_2 8801 LD (IX+$00),$0E Change sprite type to enemy
Move towards y
8805 LD A,(IX+$01) Get polar y
8808 CP D Compare with polar y from map
8809 JR Z,return_enemy_to_map If same, return enemy to map
880B JR C,move_towards_center_3 If less than, skip to increment polar y
880D DEC (IX+$01) Decrement polar y
8810 RET Return to return_from_sprite_handler
move_towards_center_3 8811 INC (IX+$01) Increment polar y
8814 RET Return to return_from_sprite_handler
Prev: 8790 Up: Map Next: 8815