Prev: 663D Up: Map Next: 673A
66A4: Check whether Horace has run into a guard
Called from the main loop at 6229.
66A4 LD HL,($7C6D) Pick up Horace's new location.
66A7 CALL $6C20 Check the attribute bytes at Horace's new location.
66AA CP $3B Has Horace run into a guard?
66AC RET NZ Return if not.
66AD LD HL,($6DAE) Pick up the guard panic timer.
66B0 LD A,H Are the guards panicking at the moment?
66B1 OR L
66B2 JP Z,$673A Jump if not.
66B5 LD HL,($7C73) Add 100 to the score (Horace has thrown the guards out of the park).
66B8 LD BC,$0064
66BB ADD HL,BC
66BC LD ($7C73),HL
66BF CALL $65C7 Print the score.
66C2 LD HL,$0000 Reset the guard panic timer.
66C5 LD ($6DAE),HL
Now make the 'caught a guard' sound effect.
66C8 LD HL,$7C69 Pick up the sound on/off indicator.
66CB LD C,$0F Initialise C for the loop that follows.
66CD PUSH BC Save the loop counter (unnecessarily).
66CE LD A,C Set B and E equal to 8*(15-C). This value determines the pitch.
66CF XOR $0F
66D1 LD B,A
66D2 SLA B
66D4 SLA B
66D6 SLA B
66D8 LD E,B
66D9 LD D,$08 This value determines the duration.
66DB LD B,E Produce a sound (if the sound on/off indicator is on) with pitch and duration determined by E and D.
66DC LD A,$1F
66DE AND (HL)
66DF OUT ($FE),A
66E1 LD A,(IX+$00)
66E4 LD (IX+$00),A
66E7 DJNZ $66E1
66E9 LD A,$07
66EB OUT ($FE),A
66ED LD B,E
66EE LD A,(IX+$00)
66F1 LD (IX+$00),A
66F4 DJNZ $66EE
66F6 DEC D
66F7 JR NZ,$66DB
66F9 POP BC Restore the loop counter to C (unnecessarily).
66FA DEC C Finished yet?
66FB JR NZ,$66CD Jump back if not.
Now we throw the guards out of the park.
66FD LD HL,$6DA6 Point HL at the first guard countdown timer.
6700 LD B,$04 There are four guards.
6702 PUSH BC Save the guard counter.
6703 LD A,(HL) Set the zero flag if this guard is already in play.
6704 INC HL
6705 OR (HL)
6706 PUSH HL Save the guard countdown timer pointer.
6707 JR NZ,$6735 Jump if this guard has not appeared yet.
6709 CALL $6A3F Copy this guard's buffer into the temporary location (6DB8).
670C CALL $6568 Redraw the tiles behind the guard.
670F LD HL,($7C6D) Pick up Horace's new location.
6712 CALL $6C20 Check the attribute bytes at this location.
6715 CP $3B Set the zero flag if there's a guard here. (This instruction is redundant.)
6717 LD HL,($6FD5) Pick up the entrance location for the current maze.
671A LD ($6DB8),HL Make this the guard's new location.
671D LD ($6DBC),HL
6720 CALL $6C68 Copy the maze background tiles into the temporary guard buffer.
6723 LD A,$01 Initialise the guard's animation frame.
6725 LD ($6DBA),A
6728 LD A,$5A Initialise the guard's return delay counter.
672A LD ($6DBE),A
672D JR $6732
672F CALL $663D Draw the guard (this instruction is never executed).
6732 CALL $6A6A Copy the guard's buffer back to the original location.
6735 POP HL Restore the guard countdown timer pointer to HL.
6736 POP BC Restore the guard counter to B.
6737 DJNZ $6702 Jump back to deal with the next guard.
6739 RET
Prev: 663D Up: Map Next: 673A