Routines |
Prev: 26276 | Up: Map | Next: 26657 |
Used by the routine at 26276.
|
||||
26426 | LD A,(31864) | Decrement the number of lives. | ||
26429 | DEC A | |||
26430 | LD (31864),A | |||
26433 | XOR A | Reset the tunnel timer. | ||
26434 | LD (31865),A | |||
26437 | LD (28094),A | Reset the current guard's return delay counter. | ||
26440 | LD HL,16391 | This is the display file address for the score. | ||
26443 | CALL 27663 | Set HL' to the corresponding attribute file address (unnecessarily). | ||
26446 | LD A,(31864) | Pick up the number of lives remaining. | ||
26449 | ADD A,"0" | Convert it to the ASCII code of the digit. | ||
26451 | EX DE,HL | Transfer the display file address to DE. | ||
26452 | CALL 27471 | Print the number of lives remaining. | ||
The following loop produces the Horace-has-died colour-cycling effect. The accompanying sound effect varies depending on the current value of the address held at 31847.
When that address is 0, it sounds like this:
|
||||
26455 | LD B,45 | Initialise the loop counter. | ||
26457 | PUSH BC | Save the loop counter. | ||
26458 | LD A,(31857) | Increment Horace's INK colour. | ||
26461 | INC A | |||
26462 | AND 7 | |||
26464 | OR 56 | |||
26466 | LD (31857),A | |||
26469 | PUSH AF | Save the attribute byte briefly. | ||
26470 | CALL 26674 | Draw Horace in this new colour. | ||
26473 | LD HL,22528 | This is the attribute file address for the 'P' of 'PASSES'. | ||
26476 | LD B,9 | B will count the characters in 'PASSES n ' (where 'n' in the number of lives remaining). | ||
26478 | POP AF | Restore the attribute byte to A. | ||
26479 | LD (HL),A | Change the INK colour of the number of remaining lives to match that of Horace. | ||
26480 | INC HL | |||
26481 | DJNZ 26479 | |||
26483 | LD C,20 | Initialise C for the loop that follows. | ||
26485 | LD A,31 | Flip the speaker off if the sound on/off indicator is on, or on otherwise. | ||
26487 | LD HL,31849 | |||
26490 | AND (HL) | |||
26491 | OUT (254),A | |||
26493 | CALL 27410 | Generate a pseudo-random number in A. | ||
26496 | OR 64 | Set bit 6 to make sure it's in the range 64-255. | ||
26498 | LD B,A | Use this value to produce a short delay. | ||
26499 | DJNZ 26499 | |||
26501 | LD A,7 | Flip the speaker on. | ||
26503 | OUT (254),A | |||
26505 | CALL 27410 | Generate another pseudo-random number in the range 64-255. | ||
26508 | OR 64 | |||
26510 | LD B,A | Use this value to produce a short delay. | ||
26511 | DJNZ 26511 | |||
26513 | DEC C | Finished yet? | ||
26514 | JR NZ,26485 | Jump back if not. | ||
26516 | POP BC | Restore the loop counter to B. | ||
26517 | DJNZ 26457 | Jump back for the next iteration. | ||
Now that's done, reinitialise Horace and the guards.
|
||||
26519 | LD A,56 | Reset the INK colour of the number of remaining lives to black. | ||
26521 | LD HL,22528 | |||
26524 | LD B,8 | |||
26526 | LD (HL),A | |||
26527 | INC HL | |||
26528 | DJNZ 26526 | |||
26530 | LD A,57 | Reset Horace's attribute byte (INK 1: PAPER 7). | ||
26532 | LD (31857),A | |||
26535 | LD HL,28076 | Point HL at the last of the four guard countdown timers. | ||
26538 | LD B,1 | B will count four guards (1, 2, 3, 4). | ||
26540 | PUSH BC | Save the guard counter. | ||
26541 | LD A,(HL) | Set the zero flag if this guard is in play. | ||
26542 | INC HL | |||
26543 | OR (HL) | |||
26544 | DEC HL | Point HL at the next guard's countdown timer. | ||
26545 | DEC HL | |||
26546 | DEC HL | |||
26547 | PUSH HL | Save the guard countdown timer pointer. | ||
26548 | JR NZ,26559 | Jump if this guard is not in play yet. | ||
26550 | CALL 27199 | Copy the guard's buffer into the temporary location (28088). | ||
26553 | CALL 25960 | Redraw the maze background tiles at this guard's location. | ||
26556 | CALL 27242 | Copy the guard's buffer back to the original location. | ||
26559 | POP HL | Restore the guard countdown timer pointer to HL. | ||
26560 | POP BC | Restore the guard counter to B. | ||
26561 | INC B | Next guard. | ||
26562 | LD A,B | Copy the guard counter to A. | ||
26563 | CP 5 | Have we done all four guards yet? | ||
26565 | JR NZ,26540 | If not, jump back to do the next one. | ||
26567 | LD HL,(31851) | Pick up Horace's current location. | ||
26570 | LD DE,32647 | Point DE at the graphic data for the blank sprite. | ||
26573 | CALL 27663 | Set HL' to the attribute file address corresponding to Horace's location. | ||
26576 | LD C,62 | This is the attribute byte for the blank sprite (INK 6: PAPER 7). | ||
26578 | CALL 27606 | Draw the blank sprite at Horace's location. | ||
26581 | LD A,(31864) | Pick up the number of lives remaining. | ||
26584 | AND A | Is it zero? | ||
26585 | JR Z,26601 | Jump if so. | ||
26587 | POP HL | Drop the return address from the stack. | ||
26588 | CALL 27170 | Initialise the guard countdown timers. | ||
26591 | LD A,(27403) | Pick up the game mode indicator. | ||
26594 | AND A | Is it demo mode? | ||
26595 | JP NZ,25002 | Jump if not. | ||
26598 | JP 24809 | Otherwise move to the next maze. | ||
Horace has just lost his last remaining life. This entry point is also used by the routine at 25167 when a key is pressed in demo mode.
|
||||
26601 | LD B,20 | This loop will have 20 iterations. | ||
26603 | PUSH BC | Save the loop counter. | ||
26604 | CALL 27255 | Make a sound effect. | ||
26607 | LD HL,22528 | Change the INK colour of the entire screen to B mod 8. | ||
26610 | LD DE,22529 | |||
26613 | LD A,B | |||
26614 | AND 7 | |||
26616 | ADD A,56 | |||
26618 | LD (HL),A | |||
26619 | LD BC,767 | |||
26622 | LDIR | |||
26624 | POP BC | Restore the loop counter to B. | ||
26625 | DJNZ 26603 | Jump back for the next iteration. | ||
26627 | POP HL | Drop the return address from the stack. | ||
26628 | LD A,(27403) | Pick up the game mode indicator. | ||
26631 | AND A | Is it demo mode? | ||
26632 | JP Z,24602 | Return to the title screen if so. | ||
26635 | LD HL,(31859) | Pick up the current score. | ||
26638 | LD BC,(31861) | Pick up the high score. | ||
26642 | XOR A | Clear the carry flag for subtraction. | ||
26643 | SBC HL,BC | Do we have a new high score? | ||
26645 | JP C,24602 | Return to the title screen if not. | ||
26648 | LD HL,(31859) | Pick up the current score. | ||
26651 | LD (31861),HL | Make it the new high score. | ||
26654 | JP 24602 | Return to the title screen. |
Prev: 26276 | Up: Map | Next: 26657 |