Routines 
Prev: 29277  Up: Map  Next: 29462 
29278  LD HL,32755  32755 holds ERIC's main action 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 action 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 action 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 nonleft key, or the 'right' key was pressed after a nonright 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 main action 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 the 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 ERIC's animatory state and update the SRB  
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 the SRB for ERIC's current animatory state and location  
29346  PUSH DE  
29347  DEC D  D=ERIC's new ycoordinate (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 xcoordinate  
29358  CALL 24880  Update ERIC's animatory state and location and update the SRB  
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 the bike standing upright (25 or 153)  
29365  INC H  H=211: bike  
29366  CALL 24880  Update the bike's animatory state and update the SRB  
29369  LD HL,29194  Place the address of the uninterruptible subcommand 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 main action 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 the SRB for ERIC's current animatory state and location  
29399  PUSH DE  Save ERIC's current location  
29400  JR 29356  Jump back to update the 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 the 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 ERIC's animatory state and update the ARB  
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 the floor)  
29426  LD H,211  211=bike  
29428  CALL 24880  Update the bike's animatory state and update the SRB  
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 xcoordinate  
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 the SRB, and scroll the screen if necessary 
Prev: 29277  Up: Map  Next: 29462 