![]() |
Routines |
| Prev: 36101 | Up: Map | Next: 36211 |
|
Used by the routine at 34574.
|
||||
| 36111 | LD IY,32958 | Point IY at the first byte of the first horizontal guardian definition at 32958 | ||
| 36115 | LD DE,7 | Prepare DE for addition (there are 7 bytes in a guardian definition) | ||
|
The guardian-moving loop begins here.
|
||||
| 36118 | LD A,(IY+0) | Pick up the first byte of the guardian definition | ||
| 36121 | CP 255 | Have we dealt with all the guardians yet? | ||
| 36123 | RET Z | Return if so | ||
| 36124 | OR A | Is this guardian definition blank? | ||
| 36125 | JR Z,36207 | If so, skip it and consider the next one | ||
| 36127 | LD A,(32957) | Pick up the value of the game clock at 32957 | ||
| 36130 | AND 4 | Move bit 2 (which is toggled on each pass through the main loop) to bit 7 and clear all the other bits | ||
| 36132 | RRCA | |||
| 36133 | RRCA | |||
| 36134 | RRCA | |||
| 36135 | AND (IY+0) | Combine this bit with bit 7 of the first byte of the guardian definition, which specifies the guardian's animation speed: 0=normal, 1=slow | ||
| 36138 | JR NZ,36207 | Jump to consider the next guardian if this one is not due to be moved on this pass | ||
|
The guardian will be moved on this pass.
|
||||
| 36140 | LD A,(IY+4) | Pick up the current animation frame (0-7) | ||
| 36143 | CP 3 | Is it 3 (the terminal frame for a guardian moving right)? | ||
| 36145 | JR Z,36163 | Jump if so to move the guardian right across a cell boundary or turn it round | ||
| 36147 | CP 4 | Is the current animation frame 4 (the terminal frame for a guardian moving left)? | ||
| 36149 | JR Z,36186 | Jump if so to move the guardian left across a cell boundary or turn it round | ||
| 36151 | JR NC,36158 | Jump if the animation frame is 5, 6 or 7 | ||
| 36153 | INC (IY+4) | Increment the animation frame (this guardian is moving right) | ||
| 36156 | JR 36207 | Jump forward to consider the next guardian | ||
| 36158 | DEC (IY+4) | Decrement the animation frame (this guardian is moving left) | ||
| 36161 | JR 36207 | Jump forward to consider the next guardian | ||
| 36163 | LD A,(IY+1) | Pick up the LSB of the address of the guardian's location in the attribute buffer at 23552 | ||
| 36166 | CP (IY+6) | Has the guardian reached the rightmost point in its path? | ||
| 36169 | JR NZ,36177 | Jump if not | ||
| 36171 | LD (IY+4),7 | Set the animation frame to 7 (turning the guardian round to face left) | ||
| 36175 | JR 36207 | Jump forward to consider the next guardian | ||
| 36177 | LD (IY+4),0 | Set the animation frame to 0 (the initial frame for a guardian moving right) | ||
| 36181 | INC (IY+1) | Increment the guardian's x-coordinate (moving it right across a cell boundary) | ||
| 36184 | JR 36207 | Jump forward to consider the next guardian | ||
| 36186 | LD A,(IY+1) | Pick up the LSB of the address of the guardian's location in the attribute buffer at 23552 | ||
| 36189 | CP (IY+5) | Has the guardian reached the leftmost point in its path? | ||
| 36192 | JR NZ,36200 | Jump if not | ||
| 36194 | LD (IY+4),0 | Set the animation frame to 0 (turning the guardian round to face right) | ||
| 36198 | JR 36207 | Jump forward to consider the next guardian | ||
| 36200 | LD (IY+4),7 | Set the animation frame to 7 (the initial frame for a guardian moving left) | ||
| 36204 | DEC (IY+1) | Decrement the guardian's x-coordinate (moving it left across a cell boundary) | ||
|
The current guardian definition has been dealt with. Time for the next one.
|
||||
| 36207 | ADD IY,DE | Point IY at the first byte of the next horizontal guardian definition | ||
| 36209 | JR 36118 | Jump back to deal with the next horizontal guardian | ||
| Prev: 36101 | Up: Map | Next: 36211 |