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 |