![]() |
Routines |
| Prev: 26173 | Up: Map |
|
Used by the routine at 24576.
|
|||||||
| 26276 | LD HL,(31853) | Pick up Horace's new location. | |||||
| 26279 | CALL 27680 | Check the attribute bytes at Horace's new location. | |||||
| 26282 | CP 59 | Has Horace run into a guard? | |||||
| 26284 | RET NZ | Return if not. | |||||
| 26285 | LD HL,(28078) | Pick up the guard panic timer. | |||||
| 26288 | LD A,H | Are the guards panicking at the moment? | |||||
| 26289 | OR L | ||||||
| 26290 | JP Z,26426 | Jump if not. | |||||
| 26293 | LD HL,(31859) | Add 100 to the score (Horace has thrown the guards out of the park). | |||||
| 26296 | LD BC,100 | ||||||
| 26299 | ADD HL,BC | ||||||
| 26300 | LD (31859),HL | ||||||
| 26303 | CALL 26055 | Print the score. | |||||
| 26306 | LD HL,0 | Reset the guard panic timer. | |||||
| 26309 | LD (28078),HL | ||||||
| 26312 | LD HL,31849 | Pick up the sound on/off indicator. | |||||
| 26315 | LD C,15 | Initialise C for the loop that follows. | |||||
| 26317 | PUSH BC | Save the loop counter (unnecessarily). | |||||
| 26318 | LD A,C | Set B and E equal to 8*(15-C). This value determines the pitch. | |||||
| 26319 | XOR 15 | ||||||
| 26321 | LD B,A | ||||||
| 26322 | SLA B | ||||||
| 26324 | SLA B | ||||||
| 26326 | SLA B | ||||||
| 26328 | LD E,B | ||||||
| 26329 | LD D,8 | This value determines the duration. | |||||
| 26331 | LD B,E | Produce a sound (if the sound on/off indicator is on) with pitch and duration determined by E and D. | |||||
| 26332 | LD A,31 | ||||||
| 26334 | AND (HL) | ||||||
| 26335 | OUT (254),A | ||||||
| 26337 | LD A,(IX+0) | ||||||
| 26340 | LD (IX+0),A | ||||||
| 26343 | DJNZ 26337 | ||||||
| 26345 | LD A,7 | ||||||
| 26347 | OUT (254),A | ||||||
| 26349 | LD B,E | ||||||
| 26350 | LD A,(IX+0) | ||||||
| 26353 | LD (IX+0),A | ||||||
| 26356 | DJNZ 26350 | ||||||
| 26358 | DEC D | ||||||
| 26359 | JR NZ,26331 | ||||||
| 26361 | POP BC | Restore the loop counter to C (unnecessarily). | |||||
| 26362 | DEC C | Finished yet? | |||||
| 26363 | JR NZ,26317 | Jump back if not. | |||||
|
Now we throw the guards out of the park.
|
|||||||
| 26365 | LD HL,28070 | Point HL at the first guard countdown timer. | |||||
| 26368 | LD B,4 | There are four guards. | |||||
| 26370 | PUSH BC | Save the guard counter. | |||||
| 26371 | LD A,(HL) | Set the zero flag if this guard is already in play. | |||||
| 26372 | INC HL | ||||||
| 26373 | OR (HL) | ||||||
| 26374 | PUSH HL | Save the guard countdown timer pointer. | |||||
| 26375 | JR NZ,26421 | Jump if this guard has not appeared yet. | |||||
| 26377 | CALL 27199 | Copy this guard's buffer into the temporary location (28088). | |||||
| 26380 | CALL 25960 | Redraw the tiles behind the guard. | |||||
| 26383 | LD HL,(31853) | Pick up Horace's new location. | |||||
| 26386 | CALL 27680 | Check the attribute bytes at this location. | |||||
| 26389 | CP 59 | Set the zero flag if there's a guard here. | |||||
| 26391 | LD HL,(28629) | Pick up the entrance location for the current maze. | |||||
| 26394 | LD (28088),HL | Make this the guard's new location. | |||||
| 26397 | LD (28092),HL | ||||||
| 26400 | CALL 27752 | Copy the maze background tiles into the temporary guard buffer. | |||||
| 26403 | LD A,1 | Initialise the guard's animation frame. | |||||
| 26405 | LD (28090),A | ||||||
| 26408 | LD A,90 | Initialise the guard's return delay counter. | |||||
| 26410 | LD (28094),A | ||||||
| 26413 | JR 26418 | ||||||
| 26415 | CALL 26173 | Draw the guard (this instruction is never executed). | |||||
| 26418 | CALL 27242 | Copy the guard's buffer back to the original location. | |||||
| 26421 | POP HL | Restore the guard countdown timer pointer to HL. | |||||
| 26422 | POP BC | Restore the guard counter to B. | |||||
| 26423 | DJNZ 26370 | Jump back to deal with the next guard. | |||||
| 26425 | RET | ||||||
| Prev: 26173 | Up: Map |