| Routines

31126: Collect a keypress during the game (or simulate one in demo mode)

Called from the main loop at 61483.
31126 | LD A,(32750) | A=current game mode (0-4)
31129 | AND A | Is it demo mode?
31130 | JP NZ,60082 | Jump if not
It's demo mode.
31133 | CALL 60121 | Collect the ASCII code of the last key pressed in A
31136 | JP NZ,61674 | Start a new game if a game key was pressed
31139 | LD A,38 | Message 38: 'PRESS A KEY TO PLAY'
31141 | LD (32722),A | Store this message number at 32722 so that it can be monitored
31144 | CALL 30975 | Is this message in the message queue?
31147 | CALL NZ,28357 | If not, add it to the message queue (again)
31150 | LD A,248 | Set bits 3-7 at 32746, effectively giving Sam the keys to all the houses
31152 | LD (32746),A
31155 | LD A,(58891) | Pick up byte 11 of Sam's buffer (which holds his destination y-coordinate)
31158 | AND A | Has a destination been set for Sam yet?
31159 | JR NZ,31188 | Jump if so
We need to set a new destination for Sam.
31161 | CALL 61823 | Get an even random number between 134 and 148 in A
31164 | AND 14
31166 | ADD A,134
31168 | LD L,A | Point HL at an entry in the table of locations at 31110
31169 | LD H,121
31171 | LD E,(HL) | Collect the location coordinates in DE
31172 | INC L
31173 | LD D,(HL)
31174 | LD HL,58890 | Copy the location coordinates into bytes 10 and 11 of Sam's buffer
31177 | LD (HL),E
31178 | INC L
31179 | LD (HL),D
31180 | LD C,1 | Assume a z-coordinate of 1 (indoors)
31182 | CALL 60743 | Obtain an identifier for the location
31185 | LD L,12 | Copy the destination location identifier into byte 12 of Sam's buffer
31187 | LD (HL),A
31188 | LD H,230 | 230=Sam
31190 | CALL 60812 | Determine the next move Sam should make to reach his destination
31193 | AND A | Is Sam already at his destination?
31194 | JR Z,31161 | Jump back to set a new destination if so
Sam's destination has been set. Now to simulate a keypress that will make him take the next step towards it.
31196 | ADD A,127 | Point HL at the offset of the appropriate keypress to simulate in the table at 31104
31198 | LD L,A
31199 | LD H,121
31201 | LD A,(HL) | Pick up the keypress offset
31202 | AND A | Make sure the zero flag is reset to indicate that a simulated keypress was made (this instruction is redundant)
31203 | RET |