Prev: 26276 Up: Map Next: 26657
26426: Lose a life
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