![]() |
Routines |
Prev: 29277 | Up: Map | Next: 29462 |
29278 | LD HL,32755 | 32755 holds ERIC's animation timer |
29281 | DEC (HL) | Is it time to deal with ERIC yet? |
29282 | JR NZ,29402 | Jump if not |
29284 | INC (HL) | Set ERIC's animation timer to 1, ensuring that we pass through the following section of code on the next call to this routine if no pedalling is detected this time (if "left" or "right" is pressed, the animation timer will be reset to 5) |
29285 | CALL 29178 | A=value from the keypress offset table corresponding to the key just pressed (if any) |
29288 | LD HL,32750 | 32750 holds the offset of the last key pressed while ERIC was riding the bike |
29291 | JR Z,29402 | Jump if no keys were pressed since the last check |
29293 | SET 3,A | We don't distinguish between fast (upper case) and slow (lower case) keypresses while ERIC is riding the bike |
29295 | CP 88 | Was "left" pressed? |
29297 | JR Z,29303 | Jump if so |
29299 | CP 90 | Was "right" pressed? |
29301 | JR NZ,29333 | Jump if not |
29303 | CP (HL) | Was the key just pressed the same as the last one pressed? |
29304 | JR Z,29402 | Jump if so |
The "left" key was pressed after a non-left key, or the "right" key was pressed after a non-right key. In other words, ERIC pedalled.
|
||
29306 | LD (HL),A | Store the offset of the key just pressed in 32750 |
29307 | LD L,243 | HL=32755 (ERIC's animation timer) |
29309 | LD (HL),5 | Reset this to 5 |
29311 | LD L,240 | HL=32752 (bike momentum) |
29313 | LD A,(HL) | Increase the bike's momentum, but not beyond 255 |
29314 | ADD A,12 | |
29316 | JR NC,29320 | |
29318 | LD A,255 | |
29320 | LD (HL),A | |
29321 | LD H,210 | 210=ERIC |
29323 | CALL 25012 | Update SRB for ERIC's current animatory state and location |
29326 | XOR 1 | Now A=ERIC's new animatory state (12, 13, 140 or 141) |
29328 | CALL 24880 | Update SRB for ERIC's new animatory state |
29331 | JR 29402 | |
Neither "left" nor "right" was pressed.
|
||
29333 | CP 92 | Was "up" pressed? |
29335 | JR NZ,29382 | Jump if not |
29337 | LD L,237 | HL=32749 (ERIC's status flags) |
29339 | LD (HL),128 | Set bit 7: ERIC is standing on the saddle of the bike |
29341 | LD H,210 | 210=ERIC |
29343 | CALL 25012 | Update SRB for ERIC's current animatory state and location |
29346 | PUSH DE | |
29347 | DEC D | D=ERIC's new y-coordinate (up a level) |
29348 | NOP | |
29349 | INC E | |
29350 | BIT 7,A | Is ERIC facing left? |
29352 | JR Z,29356 | Jump if so |
29354 | DEC E | |
29355 | DEC E | |
29356 | AND 128 | Now A=ERIC's new animatory state, E=ERIC's new x-coordinate |
29358 | CALL 24880 | Update SRB for ERIC's new animatory state and location |
29361 | LD A,(HL) | A=ERIC's animatory state |
29362 | POP DE | DE=ERIC's location before he jumped on the saddle or got off the bike |
29363 | ADD A,25 | A=animatory state of bike standing upright (25 or 153) |
29365 | INC H | H=211: bike |
29366 | CALL 24880 | Update SRB for the bike's new animatory state |
29369 | LD HL,29194 | Place the address of the routine at 29194 into bytes 17 and 18 of the bike's buffer |
29372 | LD (54033),HL | |
29375 | LD HL,32755 | 32755 holds ERIC's animation timer |
29378 | LD (HL),5 | Reset this to 5 |
29380 | JR 29436 | Also reset the bike's speed counter (at 32751) to 5 |
Not one of "left", "right" and "up" was pressed.
|
||
29382 | CP 94 | Was "down" pressed? |
29384 | JR NZ,29402 | Jump if not |
29386 | LD L,237 | HL=32749 (ERIC's status flags) |
29388 | LD (HL),0 | Reset all bits here, signalling that ERIC has his feet back on the ground |
29390 | LD L,251 | HL=32763 (ERIC's other status flags) |
29392 | RES 1,(HL) | Reset bit 1 here, signalling that 32749 is empty |
29394 | LD H,210 | 210=ERIC |
29396 | CALL 25012 | Update SRB for ERIC's current animatory state and location |
29399 | PUSH DE | Save ERIC's current location |
29400 | JR 29356 | Jump back to update SRB for new animatory state and location of ERIC and the bike |
The following section of code is executed on every pass through this routine while ERIC is sitting on the saddle (in other words, unless "up" or "down" was pressed).
|
||
29402 | LD HL,32752 | 32752 holds the bike's momentum |
29405 | DEC (HL) | Has the bike run out of momentum? |
29406 | JR NZ,29441 | Jump if not |
29408 | LD H,210 | 210=ERIC, who will now fall off the bike |
29410 | CALL 25012 | Update SRB for ERIC's current animatory state and location |
29413 | PUSH DE | Save ERIC's coordinates briefly |
29414 | AND 128 | Keep only the "direction" bit of ERIC's animatory state |
29416 | PUSH AF | |
29417 | ADD A,4 | A=4 or 132 (ERIC sitting on a chair) |
29419 | CALL 24880 | Update SRB for ERIC's new animatory state |
29422 | POP AF | A=0 if ERIC's facing left, 128 if facing right |
29423 | POP DE | Restore ERIC's coordinates to DE |
29424 | ADD A,24 | A=24 or 152 (bike lying on floor) |
29426 | LD H,211 | 211=bike |
29428 | CALL 24880 | Update SRB for the bike's new animatory state |
29431 | LD HL,32749 | 32749 holds ERIC's status flags |
29434 | LD (HL),16 | Set bit 4: ERIC will not land on his feet |
29436 | LD L,239 | HL=32751 (which holds the bike's speed counter) |
29438 | LD (HL),5 | Reset this to 5 |
29440 | RET | |
The bike still has momentum.
|
||
29441 | LD L,239 | HL=32751 (which holds the bike's speed counter) |
29443 | DEC (HL) | Is it time to move the bike forward? |
29444 | RET NZ | Return if not |
29445 | LD (HL),7 | Reset the bike's speed counter to 7 |
29447 | LD HL,(53760) | A=ERIC's animatory state, E=ERIC's x-coordinate |
29450 | LD A,L | |
29451 | LD E,H | |
29452 | CALL 28672 | Are there any walls, closed doors or ALBERTs in ERIC's path? |
29455 | JR C,29408 | Knock ERIC off the bike if so |
29457 | JR Z,29408 | |
29459 | JP 29262 | Otherwise move ERIC forward one space, update SRB, and scroll the screen if necessary |
Prev: 29277 | Up: Map | Next: 29462 |