Routines |
Up: Map | Next: 25129 |
|
||||
24576 | DI | Disable interrupts. | ||
24577 | LD A,(23672) | Initialise the pseudo-random number address. | ||
24580 | LD L,A | |||
24581 | AND 31 | |||
24583 | LD H,A | |||
24584 | LD A,(HL) | |||
24585 | LD L,A | |||
24586 | AND 31 | |||
24588 | LD H,A | |||
24589 | LD (31847),HL | |||
24592 | LD HL,31850 | Initialise the 'T' pressed indicator to 'off' (bit 4 set). | ||
24595 | LD (HL),16 | |||
24597 | LD HL,31849 | Initialise the sound indicator to 'on'. | ||
24600 | LD (HL),31 | |||
This entry point is used by the routine at 26426 when a game has ended.
|
||||
24602 | LD HL,22528 | INK 7: PAPER 7 | ||
24605 | LD DE,22529 | |||
24608 | LD BC,767 | |||
24611 | LD (HL),63 | |||
24613 | LDIR | |||
24615 | LD HL,16384 | Clear the display file. | ||
24618 | LD DE,16385 | |||
24621 | LD BC,6143 | |||
24624 | LD (HL),0 | |||
24626 | LDIR | |||
24628 | LD HL,22528 | INK 0: PAPER 7 | ||
24631 | LD DE,22529 | |||
24634 | LD BC,767 | |||
24637 | LD (HL),56 | |||
24639 | LDIR | |||
24641 | LD A,0 | Signal demo mode. | ||
24643 | LD (27403),A | |||
24646 | LD HL,140 | Initialise the title screen countdown timer. | ||
24649 | LD (27400),HL | |||
24652 | LD DE,16544 | Print 'HUNGRY' in big letters. | ||
24655 | LD HL,28303 | |||
24658 | LD BC,160 | |||
24661 | CALL 27982 | |||
24664 | LD DE,18560 | Print 'HORACE' in big letters. | ||
24667 | LD HL,28463 | |||
24670 | LD BC,160 | |||
24673 | CALL 27982 | |||
24676 | LD A,(27403) | Pick up the game mode indicator. | ||
24679 | PUSH AF | Save it briefly. | ||
24680 | LD A,1 | Signal game mode (to force the copyright message to be printed). | ||
24682 | LD (27403),A | |||
24685 | LD HL,20672 | This is the display file address for the copyright message. | ||
24688 | CALL 27663 | Set HL' to the corresponding attribute file address (unnecessarily). | ||
24691 | EX DE,HL | Transfer the display file address to DE. | ||
24692 | LD HL,27303 | Print 'Copyright © 1982 Beam Software' and 'PRESS ANY KEY TO START PLAY'. | ||
24695 | LD A,(HL) | |||
24696 | CP 255 | |||
24698 | JR Z,24706 | |||
24700 | INC HL | |||
24701 | CALL 27471 | |||
24704 | JR 24695 | |||
24706 | POP AF | Restore the game mode indicator. | ||
24707 | LD (27403),A | |||
The following loop cycles the colour of the words 'HUNGRY HORACE' and plays a sound effect, either 140 times or until a key is pressed.
|
||||
24710 | LD HL,22688 | Change the colour of the words 'HUNGRY HORACE' on the title screen. | ||
24713 | LD DE,22689 | |||
24716 | LD BC,159 | |||
24719 | LD A,(HL) | |||
24720 | INC A | |||
24721 | AND 63 | |||
24723 | OR 56 | |||
24725 | LD (HL),A | |||
24726 | LDIR | |||
24728 | LD HL,22912 | |||
24731 | LD DE,22913 | |||
24734 | LD BC,159 | |||
24737 | LD A,(HL) | |||
24738 | INC A | |||
24739 | AND 63 | |||
24741 | OR 56 | |||
24743 | LD (HL),A | |||
24744 | LDIR | |||
24746 | CALL 27255 | Make the title screen sound effect. | ||
24749 | LD HL,(27400) | Decrement the title screen countdown timer. | ||
24752 | DEC HL | |||
24753 | LD (27400),HL | |||
24756 | LD A,H | Is it zero now? | ||
24757 | OR L | |||
24758 | JR Z,24777 | Jump if so. | ||
24760 | LD A,0 | Read the keyboard. | ||
24762 | IN A,(254) | |||
24764 | AND 31 | Is a key being pressed? | ||
24766 | CP 31 | |||
24768 | JR Z,24710 | Jump if not. | ||
24770 | LD A,1 | Signal that a game (not demo mode) has started. | ||
24772 | LD (27403),A | |||
24775 | JR 24777 | This instruction is redundant. | ||
24777 | LD A,255 | Initialise the maze number. | ||
24779 | LD (31843),A | |||
24782 | LD A,8 | Initialise the game speed parameter. | ||
24784 | LD (31842),A | |||
24787 | LD A,3 | Initialise the number of lives remaining. | ||
24789 | LD (31864),A | |||
24792 | LD HL,0 | Initialise the score. | ||
24795 | LD (31859),HL | |||
24798 | LD A,0 | Initialise the active guard counter. | ||
24800 | LD (27402),A | |||
24803 | LD (31863),A | Initialise the extra life indicator. | ||
24806 | CALL 27170 | Initialise the guard countdown timers. | ||
24809 | LD A,(31843) | Pick up the current maze number (0-3). | ||
24812 | INC A | Is it 0, 1 or 2? | ||
24813 | AND 252 | |||
24815 | JR Z,24828 | Jump if so. | ||
24817 | LD A,(31842) | Decrement the game speed parameter (unless it's already 1). This increases the speed of the game. | ||
24820 | DEC A | |||
24821 | JR NZ,24825 | |||
24823 | LD A,1 | |||
24825 | LD (31842),A | |||
24828 | LD A,(31843) | Increment the maze number. | ||
24831 | INC A | |||
24832 | AND 3 | |||
24834 | LD (31843),A | |||
24837 | LD A,(31843) | Pick up the current maze number. | ||
24840 | CP 0 | Is it maze 1? | ||
24842 | JR NZ,24855 | Jump if not. | ||
24844 | LD HL,28631 | Copy the tunnel offset and bell, initial guard and entrance locations for maze 1 to 28623. | ||
24847 | CALL 27294 | |||
24850 | LD HL,29431 | Point HL at the layout data for maze 1. | ||
24853 | JR 24896 | |||
24855 | CP 1 | Is it maze 2? | ||
24857 | JR NZ,24870 | Jump if not. | ||
24859 | LD HL,28639 | Copy the tunnel offset and bell, initial guard and entrance locations for maze 2 to 28623. | ||
24862 | CALL 27294 | |||
24865 | LD HL,28663 | Point HL at the layout data for maze 2. | ||
24868 | JR 24896 | |||
24870 | CP 2 | Is it maze 3? | ||
24872 | JR NZ,24885 | Jump if not. | ||
24874 | LD HL,28647 | Copy the tunnel offset and bell, initial guard and entrance locations for maze 3 to 28623. | ||
24877 | CALL 27294 | |||
24880 | LD HL,30199 | Point HL at the layout data for maze 3. | ||
24883 | JR 24896 | |||
24885 | LD HL,28655 | Copy the tunnel offset and bell, initial guard and entrance locations for maze 4 to 28623. | ||
24888 | CALL 27294 | |||
24891 | LD HL,30967 | Point HL at the layout data for maze 4. | ||
24894 | JR 24896 | |||
24896 | LD DE,16384 | Draw the current maze. | ||
24899 | LD BC,768 | |||
24902 | CALL 27509 | |||
24905 | LD A,(27403) | Pick up the game mode indicator. | ||
24908 | AND A | Is it demo mode? | ||
24909 | JR Z,24932 | Jump if so. | ||
24911 | LD HL,16384 | This is the display file address for 'PASSES SCORE BEST'. | ||
24914 | CALL 27663 | Set HL' to the corresponding attribute file address (unnecessarily). | ||
24917 | EX DE,HL | Transfer the display file address to DE. | ||
24918 | LD HL,31815 | Print 'PASSES SCORE BEST'. | ||
24921 | LD A,(HL) | |||
24922 | CP 255 | |||
24924 | JR Z,24975 | |||
24926 | INC HL | |||
24927 | CALL 27471 | |||
24930 | JR 24921 | |||
24932 | LD A,1 | Signal game mode (to force the 'DEMO MODE' text to be printed). | ||
24934 | LD (27403),A | |||
24937 | LD HL,16384 | This is the display file address for 'DEMO MODE PRESS ANY KEY TO PLAY'. | ||
24940 | CALL 27663 | Set HL' to the corresponding attribute file address (unnecessarily). | ||
24943 | EX DE,HL | Transfer the display file address to DE. | ||
24944 | LD HL,27367 | Print 'DEMO MODE PRESS ANY KEY TO PLAY'. | ||
24947 | LD A,(HL) | |||
24948 | CP 255 | |||
24950 | JR Z,24958 | |||
24952 | INC HL | |||
24953 | CALL 27471 | |||
24956 | JR 24947 | |||
24958 | LD A,0 | Restore the game mode indicator to demo mode. | ||
24960 | LD (27403),A | |||
24963 | LD HL,22528 | Make 'DEMO MODE' flash. | ||
24966 | LD B,9 | |||
24968 | LD A,(HL) | |||
24969 | ADD A,128 | |||
24971 | LD (HL),A | |||
24972 | INC HL | |||
24973 | DJNZ 24968 | |||
24975 | LD HL,(28625) | Copy the bell location to 31940. | ||
24978 | LD (31940),HL | |||
24981 | LD HL,16391 | This is the display file address for the number of lives remaining. | ||
24984 | CALL 27663 | Set HL' to the corresponding attribute file address (unnecessarily). | ||
24987 | LD A,(31864) | Pick up the number of lives remaining. | ||
24990 | ADD A,"0" | Convert it to the ASCII code for the corresponding digit. | ||
24992 | EX DE,HL | Transfer the display file address to DE. | ||
24993 | CALL 27471 | Print the number of lives remaining. | ||
24996 | LD HL,2000 | Initialise the lunch-drop countdown timer. | ||
24999 | LD (31845),HL | |||
This entry point is used by the routine at 26426 after Horace has lost a life.
|
||||
25002 | LD HL,(31940) | Pick up the bell location. | ||
25005 | LD A,H | Has Horace sounded the alarm? | ||
25006 | OR L | |||
25007 | JR Z,25015 | Jump if so. | ||
25009 | LD HL,(28625) | Reinitialise the bell location. | ||
25012 | LD (31940),HL | |||
25015 | LD B,4 | There are four guards. | ||
25017 | PUSH BC | Copy the guard's buffer into the temporary location (28088). | ||
25018 | CALL 27199 | |||
25021 | POP BC | |||
25022 | PUSH BC | Save the guard counter. | ||
25023 | SLA B | Point HL at one of the guard countdown timers at 28070. | ||
25025 | LD C,B | |||
25026 | LD B,0 | |||
25028 | XOR A | |||
25029 | LD HL,28078 | |||
25032 | SBC HL,BC | |||
25034 | LD A,(HL) | Is this guard in play? | ||
25035 | INC HL | |||
25036 | OR (HL) | |||
25037 | JR NZ,25044 | Jump if not. | ||
25039 | LD HL,(28627) | Pick up the initial guard location for the current maze. | ||
25042 | JR 25047 | |||
25044 | LD HL,(28629) | Pick up the bell location for the current maze. | ||
25047 | LD (28088),HL | Initialise the guard's current and new locations. | ||
25050 | LD (28092),HL | |||
25053 | LD HL,28095 | Clear the four maze background tiles in the temporary guard buffer. | ||
25056 | LD C,4 | |||
25058 | LD (HL),62 | |||
25060 | INC HL | |||
25061 | LD B,8 | |||
25063 | LD (HL),0 | |||
25065 | INC HL | |||
25066 | DJNZ 25063 | |||
25068 | DEC C | |||
25069 | JR NZ,25058 | |||
25071 | CALL 27242 | Copy the guard's buffer back to the original location. | ||
25074 | POP BC | Restore the guard counter to B. | ||
25075 | DJNZ 25017 | Jump back to prepare the next guard. | ||
25077 | LD HL,(28629) | Pick up Horace's initial location for the current maze. | ||
25080 | LD (31851),HL | Initialise Horace's current and new locations. | ||
25083 | LD (31853),HL | |||
25086 | LD A,1 | Initialise Horace's animation frame. | ||
25088 | LD (31856),A | |||
25091 | LD A,(31842) | Initialise the sprite movement timer (using the value of the game speed parameter). | ||
25094 | LD (31841),A | |||
25097 | LD HL,(31859) | Print the score and make a sound effect. | ||
25100 | CALL 26055 | |||
25103 | LD HL,(31861) | Pick up the high score. | ||
25106 | LD DE,16384 | Set DE to the display file address for the high score (in a roundabout way). | ||
25109 | EX DE,HL | |||
25110 | LD BC,26 | |||
25113 | ADD HL,BC | |||
25114 | EX DE,HL | |||
25115 | CALL 27425 | Print the high score. | ||
25118 | LD HL,0 | Initialise the guard panic timer. | ||
25121 | LD (28078),HL | |||
25124 | LD A,57 | Initialise Horace's attribute byte (INK 1: PAPER 7). | ||
25126 | LD (31857),A | |||
This routine continues into the main loop at 25129.
|
Up: Map | Next: 25129 |