Prev: 82F1 Up: Map Next: 83BA
8301: Drive the second bat, which flies in arcs
Sprites $6A and $6B, the second kind of bat. Every sixteen passes it picks a random direction from R into +$08, and in between takes its steps from STEP_VECTORS in order through ARC_STEP -- sixteen steps that swing from horizontal to vertical, the axes swapped by bit 2 of +$08 -- so it flies in arcs, bouncing off the walls.
MOVE_ARCS 8301 LD A,($EA91)
8304 CP (IX+$01)
8307 JP NZ,ACTOR_TICK_TIMER
830A CALL ACTOR_TO_WORKSPACE
830D LD HL,$5E25
8310 INC (HL)
8311 CALL CHECK_HIT
8314 DEC E
8315 JP Z,MONSTER_CAUGHT_PLAYER
8318 CALL CHECK_SHOT_HIT
831B DEC E
831C JP Z,KILL_MONSTER
831F LD (IX+$0F),$00
8323 LD DE,($5E1D)
8327 LD A,(IX+$09)
832A INC A
832B AND $0F
832D LD (IX+$09),A
8330 JP NZ,MOVE_ARCS_0
8333 LD A,R
8335 AND $07
8337 LD (IX+$08),A
MOVE_ARCS_0 833A CALL ARC_STEP
833D LD (IX+$05),$43
8341 JR NZ,MOVE_ARCS_1
8343 INC HL
MOVE_ARCS_1 8344 LD A,(HL)
8345 BIT 1,(IX+$08)
8349 JR NZ,MOVE_ARCS_2
834B NEG
MOVE_ARCS_2 834D ADD A,(IX+$04)
8350 LD C,A
8351 SUB $68
8353 JR C,MOVE_ARCS_3
8355 CP D
8356 JR NC,MOVE_ARCS_10
8358 JR MOVE_ARCS_4
MOVE_ARCS_3 835A NEG
835C CP D
835D JR NC,MOVE_ARCS_11
MOVE_ARCS_4 835F LD (IX+$04),C
MOVE_ARCS_5 8362 CALL ARC_STEP
8365 JR Z,MOVE_ARCS_6
8367 INC HL
MOVE_ARCS_6 8368 LD A,(HL)
8369 BIT 0,(IX+$08)
836D JR NZ,MOVE_ARCS_7
836F NEG
MOVE_ARCS_7 8371 ADD A,(IX+$03)
8374 LD C,A
8375 SUB $58
8377 JR C,MOVE_ARCS_8
8379 CP E
837A JR NC,MOVE_ARCS_13
837C JR MOVE_ARCS_9
MOVE_ARCS_8 837E NEG
8380 CP E
8381 JR NC,MOVE_ARCS_12
MOVE_ARCS_9 8383 LD (IX+$03),C
8386 LD A,(IX+$09)
8389 RRA
838A RRA
838B AND $01
838D LD C,A
838E LD A,(IX+$00)
8391 AND $FE
8393 ADD A,C
8394 LD (IX+$00),A
8397 LD A,($EA90)
839A CP $31
839C JP NC,KILL_MONSTER
839F JP REDRAW_ACTOR
MOVE_ARCS_10 83A2 RES 1,(IX+$08)
83A6 JR MOVE_ARCS_5
MOVE_ARCS_11 83A8 SET 1,(IX+$08)
83AC JR MOVE_ARCS_5
MOVE_ARCS_12 83AE SET 0,(IX+$08)
83B2 JR MOVE_ARCS_9
MOVE_ARCS_13 83B4 RES 0,(IX+$08)
83B8 JR MOVE_ARCS_9
Prev: 82F1 Up: Map Next: 83BA