Routines |
Prev: 66A4 | Up: Map | Next: 6821 |
Used by the routine at 66A4.
|
||||
673A | LD A,($7C78) | Decrement the number of lives. | ||
673D | DEC A | |||
673E | LD ($7C78),A | |||
6741 | XOR A | Reset the tunnel timer. | ||
6742 | LD ($7C79),A | |||
6745 | LD ($6DBE),A | Reset the current guard's return delay counter. | ||
6748 | LD HL,$4007 | This is the display file address for the score. | ||
674B | CALL $6C0F | Set HL' to the corresponding attribute file address (unnecessarily). | ||
674E | LD A,($7C78) | Pick up the number of lives remaining. | ||
6751 | ADD A,"0" | Convert it to the ASCII code of the digit. | ||
6753 | EX DE,HL | Transfer the display file address to DE. | ||
6754 | CALL $6B4F | 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 7C67.
When that address is 0, it sounds like this:
|
||||
6757 | LD B,$2D | Initialise the loop counter. | ||
6759 | PUSH BC | Save the loop counter. | ||
675A | LD A,($7C71) | Increment Horace's INK colour. | ||
675D | INC A | |||
675E | AND $07 | |||
6760 | OR $38 | |||
6762 | LD ($7C71),A | |||
6765 | PUSH AF | Save the attribute byte briefly. | ||
6766 | CALL $6832 | Draw Horace in this new colour. | ||
6769 | LD HL,$5800 | This is the attribute file address for the 'P' of 'PASSES'. | ||
676C | LD B,$09 | B will count the characters in 'PASSES n ' (where 'n' in the number of lives remaining). | ||
676E | POP AF | Restore the attribute byte to A. | ||
676F | LD (HL),A | Change the INK colour of the number of remaining lives to match that of Horace. | ||
6770 | INC HL | |||
6771 | DJNZ $676F | |||
6773 | LD C,$14 | Initialise C for the loop that follows. | ||
6775 | LD A,$1F | Flip the speaker off if the sound on/off indicator is on, or on otherwise. | ||
6777 | LD HL,$7C69 | |||
677A | AND (HL) | |||
677B | OUT ($FE),A | |||
677D | CALL $6B12 | Generate a pseudo-random number in A. | ||
6780 | OR $40 | Set bit 6 to make sure it's in the range 64-255. | ||
6782 | LD B,A | Use this value to produce a short delay. | ||
6783 | DJNZ $6783 | |||
6785 | LD A,$07 | Flip the speaker on. | ||
6787 | OUT ($FE),A | |||
6789 | CALL $6B12 | Generate another pseudo-random number in the range 64-255. | ||
678C | OR $40 | |||
678E | LD B,A | Use this value to produce a short delay. | ||
678F | DJNZ $678F | |||
6791 | DEC C | Finished yet? | ||
6792 | JR NZ,$6775 | Jump back if not. | ||
6794 | POP BC | Restore the loop counter to B. | ||
6795 | DJNZ $6759 | Jump back for the next iteration. | ||
Now that's done, reinitialise Horace and the guards.
|
||||
6797 | LD A,$38 | Reset the INK colour of the number of remaining lives to black. | ||
6799 | LD HL,$5800 | |||
679C | LD B,$08 | |||
679E | LD (HL),A | |||
679F | INC HL | |||
67A0 | DJNZ $679E | |||
67A2 | LD A,$39 | Reset Horace's attribute byte (INK 1: PAPER 7). | ||
67A4 | LD ($7C71),A | |||
67A7 | LD HL,$6DAC | Point HL at the last of the four guard countdown timers. | ||
67AA | LD B,$01 | B will count four guards (1, 2, 3, 4). | ||
67AC | PUSH BC | Save the guard counter. | ||
67AD | LD A,(HL) | Set the zero flag if this guard is in play. | ||
67AE | INC HL | |||
67AF | OR (HL) | |||
67B0 | DEC HL | Point HL at the next guard's countdown timer. | ||
67B1 | DEC HL | |||
67B2 | DEC HL | |||
67B3 | PUSH HL | Save the guard countdown timer pointer. | ||
67B4 | JR NZ,$67BF | Jump if this guard is not in play yet. | ||
67B6 | CALL $6A3F | Copy the guard's buffer into the temporary location (6DB8). | ||
67B9 | CALL $6568 | Redraw the maze background tiles at this guard's location. | ||
67BC | CALL $6A6A | Copy the guard's buffer back to the original location. | ||
67BF | POP HL | Restore the guard countdown timer pointer to HL. | ||
67C0 | POP BC | Restore the guard counter to B. | ||
67C1 | INC B | Next guard. | ||
67C2 | LD A,B | Copy the guard counter to A. | ||
67C3 | CP $05 | Have we done all four guards yet? | ||
67C5 | JR NZ,$67AC | If not, jump back to do the next one. | ||
67C7 | LD HL,($7C6B) | Pick up Horace's current location. | ||
67CA | LD DE,$7F87 | Point DE at the graphic data for the blank sprite. | ||
67CD | CALL $6C0F | Set HL' to the attribute file address corresponding to Horace's location. | ||
67D0 | LD C,$3E | This is the attribute byte for the blank sprite (INK 6: PAPER 7). | ||
67D2 | CALL $6BD6 | Draw the blank sprite at Horace's location. | ||
67D5 | LD A,($7C78) | Pick up the number of lives remaining. | ||
67D8 | AND A | Is it zero? | ||
67D9 | JR Z,$67E9 | Jump if so. | ||
67DB | POP HL | Drop the return address from the stack. | ||
67DC | CALL $6A22 | Initialise the guard countdown timers. | ||
67DF | LD A,($6B0B) | Pick up the game mode indicator. | ||
67E2 | AND A | Is it demo mode? | ||
67E3 | JP NZ,$61AA | Jump if not. | ||
67E6 | JP $60E9 | Otherwise move to the next maze. | ||
Horace has just lost his last remaining life. This entry point is also used by the routine at 624F when a key is pressed in demo mode.
|
||||
67E9 | LD B,$14 | This loop will have 20 iterations. | ||
67EB | PUSH BC | Save the loop counter. | ||
67EC | CALL $6A77 | Make a sound effect. | ||
67EF | LD HL,$5800 | Change the INK colour of the entire screen to B mod 8. | ||
67F2 | LD DE,$5801 | |||
67F5 | LD A,B | |||
67F6 | AND $07 | |||
67F8 | ADD A,$38 | |||
67FA | LD (HL),A | |||
67FB | LD BC,$02FF | |||
67FE | LDIR | |||
6800 | POP BC | Restore the loop counter to B. | ||
6801 | DJNZ $67EB | Jump back for the next iteration. | ||
6803 | POP HL | Drop the return address from the stack. | ||
6804 | LD A,($6B0B) | Pick up the game mode indicator. | ||
6807 | AND A | Is it demo mode? | ||
6808 | JP Z,$601A | Return to the title screen if so. | ||
680B | LD HL,($7C73) | Pick up the current score. | ||
680E | LD BC,($7C75) | Pick up the high score. | ||
6812 | XOR A | Clear the carry flag for subtraction. | ||
6813 | SBC HL,BC | Do we have a new high score? | ||
6815 | JP C,$601A | Return to the title screen if not. | ||
6818 | LD HL,($7C73) | Pick up the current score. | ||
681B | LD ($7C75),HL | Make it the new high score. | ||
681E | JP $601A | Return to the title screen. |
Prev: 66A4 | Up: Map | Next: 6821 |