Routines |
Prev: 36469 | Up: Map | Next: 36707 |
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 |