![]() |
Routines |
| Prev: 25167 | Up: Map | Next: 25562 |
|
Called from the main loop at 25129.
|
||||
| 25399 | LD A,(31841) | Decrement the sprite movement timer. | ||
| 25402 | DEC A | |||
| 25403 | LD (31841),A | |||
| 25406 | RET NZ | Return unless it's zero. | ||
| 25407 | LD A,(31842) | Reset the sprite movement timer to the value of the game speed parameter. | ||
| 25410 | LD (31841),A | |||
| 25413 | LD A,(31865) | Pick up the tunnel timer. | ||
| 25416 | AND A | Is Horace in a tunnel at the moment? | ||
| 25417 | JR NZ,25535 | Jump if so. | ||
| 25419 | LD A,(31856) | Pick up Horace's animation frame. | ||
| 25422 | LD HL,(31851) | Pick up Horace's current location. | ||
| 25425 | CALL 27842 | Check the tiles in front of Horace. | ||
| 25428 | CP 0 | Is there anything in front of Horace? | ||
| 25430 | JR Z,25515 | Jump if not. | ||
| 25432 | CP 1 | Is Horace facing a tunnel entrance? | ||
| 25434 | JR Z,25450 | Jump if so. | ||
| 25436 | CP 2 | Is Horace facing a maze exit or entrance? | ||
| 25438 | JR NZ,25529 | Jump if not. | ||
| 25440 | LD A,(31856) | Pick up Horace's animation frame. | ||
| 25443 | CP 1 | Is Horace facing right? | ||
| 25445 | JP Z,27166 | Jump if so (Horace is leaving the maze). | ||
| 25448 | JR 25529 | |||
|
Horace is about to enter a tunnel.
|
||||
| 25450 | LD A,90 | Initialise the tunnel timer. | ||
| 25452 | LD (31865),A | |||
| 25455 | LD BC,(28623) | Pick up the tunnel offset for the current maze. | ||
| 25459 | LD HL,(31851) | Pick up Horace's location. | ||
| 25462 | LD A,(31856) | Pick up Horace's animation frame. | ||
| 25465 | AND A | Is Horace going up? | ||
| 25466 | JR Z,25472 | Jump if so. | ||
| 25468 | SBC HL,BC | Subtract the tunnel offset from Horace's location. | ||
| 25470 | JR 25473 | |||
| 25472 | ADD HL,BC | Add the tunnel offset to Horace's location. | ||
| 25473 | PUSH HL | Save HL (which holds Horace's new location) temporarily. | ||
| 25474 | LD HL,31849 | Pick up the sound on/off indicator. | ||
| 25477 | LD C,16 | Initialise C for the loop that follows. | ||
| 25479 | PUSH BC | Save the loop counter (unnecessarily). | ||
| 25480 | LD B,C | Set B and E equal to 8*C. This value determines the pitch. | ||
| 25481 | SLA B | |||
| 25483 | SLA B | |||
| 25485 | SLA B | |||
| 25487 | LD E,B | |||
| 25488 | LD D,8 | This value determines the duration. | ||
| 25490 | LD B,E | Produce a sound (if the sound on/off indicator is on) with pitch and duration determined by E and D. | ||
| 25491 | LD A,31 | |||
| 25493 | AND (HL) | |||
| 25494 | OUT (254),A | |||
| 25496 | DJNZ 25496 | |||
| 25498 | LD A,7 | |||
| 25500 | OUT (254),A | |||
| 25502 | LD B,E | |||
| 25503 | DJNZ 25503 | |||
| 25505 | DEC D | |||
| 25506 | JR NZ,25490 | |||
| 25508 | POP BC | Restore the loop counter to C (unnecessarily). | ||
| 25509 | DEC C | Finished yet? | ||
| 25510 | JR NZ,25479 | Jump back if not. | ||
| 25512 | POP HL | Restore Horace's new location to HL. | ||
| 25513 | JR 25524 | |||
|
There's nothing in front of Horace, so he can move one space forward.
|
||||
| 25515 | LD HL,(31851) | Pick up Horace's current location. | ||
| 25518 | LD A,(31856) | Pick up Horace's animation frame. | ||
| 25521 | CALL 27927 | Get the location of the spot one space in front of Horace. | ||
| 25524 | LD (31853),HL | Update Horace's location. | ||
| 25527 | JR 25535 | |||
|
Horace is facing a wall or the maze entrance, and so cannot move forward.
|
||||
| 25529 | LD HL,(31851) | Pick up Horace's current location. | ||
| 25532 | LD (31853),HL | Set Horace's new location. | ||
|
Now it's time to move the guards.
|
||||
| 25535 | LD HL,28070 | Point HL at the first of the guard countdown timers. | ||
| 25538 | LD B,4 | There are four guards to consider. | ||
| 25540 | PUSH BC | Save the guard counter. | ||
| 25541 | LD A,(HL) | Set the zero flag if this guard is in play. | ||
| 25542 | INC HL | |||
| 25543 | OR (HL) | |||
| 25544 | INC HL | Point HL at the next guard's countdown timer. | ||
| 25545 | PUSH HL | Save the guard countdown timer pointer. | ||
| 25546 | JR NZ,25557 | Jump if this guard is not in play at the moment. | ||
| 25548 | CALL 27199 | Copy the guard's buffer into the temporary location (28088). | ||
| 25551 | CALL 25562 | Move the guard. | ||
| 25554 | CALL 27242 | Copy the guard's buffer back to the original location. | ||
| 25557 | POP HL | Restore the guard countdown timer pointer to HL. | ||
| 25558 | POP BC | Restore the guard counter to B. | ||
| 25559 | DJNZ 25540 | Jump back to handle the next guard. | ||
| 25561 | RET | |||
| Prev: 25167 | Up: Map | Next: 25562 |