![]() |
Routines |
Prev: 6229 | Up: Map |
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 |