![]() |
Routines |
| Prev: 6229 | Up: Map | Next: 6337 |
|
Called from the main loop at 6229.
|
||||
| 624F | LD A,($7C79) | Pick up the tunnel timer. | ||
| 6252 | AND A | Is Horace in a tunnel at the moment? | ||
| 6253 | RET NZ | Return if so. | ||
| 6254 | LD A,$FF | Initialise the direction keypress to 'no key'. | ||
| 6256 | LD ($7C6F),A | |||
| 6259 | LD A,($6B0B) | Pick up the game mode indicator. | ||
| 625C | AND A | Is it demo mode? | ||
| 625D | JR NZ,$62C4 | Jump if not. | ||
| 625F | LD A,$00 | Read the keyboard. | ||
| 6261 | IN A,($FE) | |||
| 6263 | AND $1F | Is a key being pressed? | ||
| 6265 | CP $1F | |||
| 6267 | JR Z,$626D | Jump if not. | ||
| 6269 | POP HL | Drop the return address from the stack. | ||
| 626A | JP $67E9 | Cycle the screen colours briefly and return to the title screen. | ||
|
It's demo mode. Time to figure out where to move Horace next.
|
||||
| 626D | LD B,$04 | Initialise B (the direction indicator) for the loop that follows. | ||
| 626F | DEC B | B=3 (left), 2 (down), 1 (right) or 0 (up). | ||
| 6270 | LD HL,($7C6B) | Pick up Horace's current location. | ||
| 6273 | LD C,$00 | Initialise C to 0; this is the direction probability parameter. | ||
| 6275 | PUSH BC | Save the direction indicator briefly. | ||
| 6276 | LD A,B | Copy the direction indicator to A. | ||
| 6277 | CALL $6CC2 | Check the tiles next to Horace in that direction. | ||
| 627A | POP BC | Restore the direction indicator to B. | ||
| 627B | CP $02 | Is there a wall or the maze exit or entrance in that direction? | ||
| 627D | JP NC,$629F | Jump if so with C=0: that direction is blocked. | ||
| 6280 | CALL $6B12 | Set C to a pseudo-random number between 25 and 56; the higher this value, the more likely Horace will turn 90 degrees in the direction indicated by B when his path is blocked. | ||
| 6283 | AND $1F | |||
| 6285 | ADD A,$19 | |||
| 6287 | LD C,A | |||
| 6288 | LD A,($7C70) | Pick up Horace's animation frame. | ||
| 628B | CP B | Is it equal to the current value of the direction indicator? | ||
| 628C | JR NZ,$6294 | Jump if not. | ||
| 628E | LD A,$28 | Now C holds a pseudo-random number between 65 and 96; this value ensures that Horace will keep moving in the same direction if he can. | ||
| 6290 | ADD A,C | |||
| 6291 | LD C,A | |||
| 6292 | JR $629F | |||
| 6294 | ADD A,$02 | Add 2 to Horace's animation frame; this has the effect of toggling his direction between up/down and left/right. | ||
| 6296 | AND $03 | |||
| 6298 | CP B | Is it equal to the current value of the direction indicator now? | ||
| 6299 | JR NZ,$629F | Jump if not. | ||
| 629B | LD A,$F6 | Now C holds a pseudo-random number between 15 and 46; the higher this value, the more likely Horace will turn round 180 degrees when his path is blocked. | ||
| 629D | ADD A,C | |||
| 629E | LD C,A | |||
| 629F | PUSH BC | Save the direction indicator briefly. | ||
| 62A0 | LD HL,$6DB2 | Point HL at one of the four slots at 6DB2. | ||
| 62A3 | LD C,B | |||
| 62A4 | LD B,$00 | |||
| 62A6 | ADD HL,BC | |||
| 62A7 | POP BC | Restore the direction indicator to B. | ||
| 62A8 | LD A,C | Save the direction probability parameter in the appropriate slot. | ||
| 62A9 | LD (HL),A | |||
| 62AA | INC B | Have we considered every direction yet? | ||
| 62AB | DEC B | |||
| 62AC | JR NZ,$626F | Jump back if not. | ||
|
Having computed a direction probability parameter for each of the four slots at 6DB2, we now use those parameters to determine Horace's next animation frame (and therefore direction of travel).
|
||||
| 62AE | XOR A | Compute in C the index of the slot that holds the largest number (0, 1, 2 or 3). | ||
| 62AF | LD HL,$6DB6 | |||
| 62B2 | LD B,$04 | |||
| 62B4 | DEC B | |||
| 62B5 | DEC HL | |||
| 62B6 | CP (HL) | |||
| 62B7 | JR NC,$62BB | |||
| 62B9 | LD A,(HL) | |||
| 62BA | LD C,B | |||
| 62BB | INC B | |||
| 62BC | DEC B | |||
| 62BD | JR NZ,$62B4 | |||
| 62BF | LD A,C | Update Horace's animation frame to this index value. | ||
| 62C0 | LD ($7C70),A | |||
| 62C3 | RET | |||
|
A game is in progress.
|
||||
| 62C4 | LD A,$FB | Read keys Q-W-E-R-T. | ||
| 62C6 | IN A,($FE) | |||
| 62C8 | AND $01 | Is 'Q' (up) being pressed? | ||
| 62CA | JR Z,$62D4 | Jump if so. | ||
| 62CC | LD A,$F7 | Read keys 1-2-3-4-5. | ||
| 62CE | IN A,($FE) | |||
| 62D0 | AND $08 | Is '4' (up) being pressed? | ||
| 62D2 | JR NZ,$62DB | Jump if not. | ||
| 62D4 | LD A,$00 | Signal: 'up' key pressed. | ||
| 62D6 | LD ($7C6F),A | |||
| 62D9 | JR $631E | |||
| 62DB | LD A,$FE | Read keys SHIFT-Z-X-C-V. | ||
| 62DD | IN A,($FE) | |||
| 62DF | AND $02 | Is 'Z' (down) being pressed? | ||
| 62E1 | JR Z,$62EB | Jump if so. | ||
| 62E3 | LD A,$F7 | Read keys 1-2-3-4-5. | ||
| 62E5 | IN A,($FE) | Is '3' (down) being pressed? | ||
| 62E7 | AND $04 | Jump if not. | ||
| 62E9 | JR NZ,$62F2 | |||
| 62EB | LD A,$02 | Signal: 'down' key pressed. | ||
| 62ED | LD ($7C6F),A | |||
| 62F0 | JR $631E | |||
| 62F2 | LD A,$DF | Read keys Y-U-I-O-P. | ||
| 62F4 | IN A,($FE) | |||
| 62F6 | BIT 0,A | Is 'P' (right) being pressed? | ||
| 62F8 | JR Z,$6302 | Jump if so. | ||
| 62FA | LD A,$F7 | Read keys 1-2-3-4-5. | ||
| 62FC | IN A,($FE) | |||
| 62FE | AND $02 | Is '2' (right) being pressed? | ||
| 6300 | JR NZ,$6309 | Jump if not. | ||
| 6302 | LD A,$01 | Signal: 'right' key pressed. | ||
| 6304 | LD ($7C6F),A | |||
| 6307 | JR $631E | |||
| 6309 | LD A,$DF | Read keys Y-U-I-O-P. | ||
| 630B | IN A,($FE) | |||
| 630D | BIT 2,A | Is 'I' (left) being pressed? | ||
| 630F | JR Z,$6319 | Jump if so. | ||
| 6311 | LD A,$F7 | Read keys 1-2-3-4-5. | ||
| 6313 | IN A,($FE) | |||
| 6315 | AND $01 | Is '1' (left) being pressed? | ||
| 6317 | JR NZ,$632D | Jump if not. | ||
| 6319 | LD A,$03 | Signal: 'left' key pressed. | ||
| 631B | LD ($7C6F),A | |||
| 631E | LD HL,($7C6B) | Pick up Horace's current location. | ||
| 6321 | CALL $6CC2 | Check the tiles in front of Horace. | ||
| 6324 | CP $03 | Is Horace facing a wall? | ||
| 6326 | JR NZ,$632D | Jump if not. | ||
| 6328 | LD A,$FF | Signal: no key pressed (Horace will not respond to the keypress). | ||
| 632A | LD ($7C6F),A | |||
| 632D | LD A,($7C6F) | Pick up the direction keypress indicator. | ||
| 6330 | CP $FF | Was a direction key pressed? | ||
| 6332 | RET Z | Return if not. | ||
| 6333 | LD ($7C70),A | Otherwise update Horace's animation frame accordingly. | ||
| 6336 | RET | |||
| Prev: 6229 | Up: Map | Next: 6337 |