Routines
 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