Prev: 36469 Up: Map Next: 36707
36593: Move and draw the vertical guardians in the current cavern
Used by the routine at 34574.
36593 LD IY,32989 Point IY at the first byte of the first vertical guardian definition at 32989
The guardian-moving loop begins here.
36597 LD A,(IY+0) Pick up the first byte of the guardian definition
36600 CP 255 Have we dealt with all the guardians yet?
36602 RET Z Return if so
36603 INC (IY+1) Increment the guardian's animation frame
36606 RES 2,(IY+1) Reset the animation frame to 0 if it overflowed to 4
36610 LD A,(IY+2) Pick up the guardian's pixel y-coordinate
36613 ADD A,(IY+4) Add the current y-coordinate increment
36616 CP (IY+5) Has the guardian reached the highest point of its path (minimum y-coordinate)?
36619 JR C,36631 If so, jump to change its direction of movement
36621 CP (IY+6) Has the guardian reached the lowest point of its path (maximum y-coordinate)?
36624 JR NC,36631 If so, jump to change its direction of movement
36626 LD (IY+2),A Update the guardian's pixel y-coordinate
36629 JR 36639
36631 LD A,(IY+4) Negate the y-coordinate increment; this changes the guardian's direction of movement
36634 NEG
36636 LD (IY+4),A
Now that the guardian's movement has been dealt with, time to draw it.
36639 LD A,(IY+2) Pick up the guardian's pixel y-coordinate
36642 AND 127 Point DE at the entry in the screen buffer address lookup table at 33536 that corresponds to the guardian's pixel y-coordinate
36644 RLCA
36645 LD E,A
36646 LD D,131
36648 LD A,(DE) Point HL at the address of the guardian's location in the screen buffer at 24576
36649 OR (IY+3)
36652 LD L,A
36653 INC DE
36654 LD A,(DE)
36655 LD H,A
36656 LD A,(IY+1) Pick up the guardian's animation frame (0-3)
36659 RRCA Multiply it by 32
36660 RRCA
36661 RRCA
36662 LD E,A Point DE at the graphic data for the appropriate guardian sprite (at 33024+A)
36663 LD D,129
36665 LD C,1 Draw the guardian to the screen buffer at 24576
36667 CALL 36852
36670 JP NZ,36102 Kill Willy if the guardian collided with him
36673 LD A,(IY+2) Pick up the guardian's pixel y-coordinate
36676 AND 64 Point HL at the address of the guardian's location in the attribute buffer at 23552
36678 RLCA
36679 RLCA
36680 ADD A,92
36682 LD H,A
36683 LD A,(IY+2)
36686 RLCA
36687 RLCA
36688 AND 224
36690 OR (IY+3)
36693 LD L,A
36694 LD A,(IY+0) Pick up the guardian's attribute byte
36697 CALL 36447 Set the attribute bytes for the guardian
The current guardian definition has been dealt with. Time for the next one.
36700 LD DE,7 Point IY at the first byte of the next vertical guardian definition
36703 ADD IY,DE
36705 JR 36597 Jump back to deal with the next vertical guardian
Prev: 36469 Up: Map Next: 36707