Routines
 Prev: 725D Up: Map Next: 7316
725E: Deal with ERIC when he's riding the bike
 Called by the routine at F7AD when bit 0 at 7FED is set (by the routine at 7316). Listens for and responds appropriately to keypresses while ERIC is sitting on the saddle of the bike. 725E LD HL,\$7FF3 7FF3 holds ERIC's main action timer 7261 DEC (HL) Is it time to deal with ERIC yet? 7262 JR NZ,\$72DA Jump if not 7264 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) 7265 CALL \$71FA A=value from the keypress offset table corresponding to the key just pressed (if any) 7268 LD HL,\$7FEE 7FEE holds the offset of the last key pressed while ERIC was riding the bike 726B JR Z,\$72DA Jump if no keys were pressed since the last check 726D SET 3,A We don't distinguish between fast (upper case) and slow (lower case) keypresses while ERIC is riding the bike 726F CP \$58 Was 'left' pressed? 7271 JR Z,\$7277 Jump if so 7273 CP \$5A Was 'right' pressed? 7275 JR NZ,\$7295 Jump if not 7277 CP (HL) Was the key just pressed the same as the last one pressed? 7278 JR Z,\$72DA 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. 727A LD (HL),A Store the offset of the key just pressed in 7FEE 727B LD L,\$F3 HL=7FF3 (ERIC's main action timer) 727D LD (HL),\$05 Reset this to 5 727F LD L,\$F0 HL=7FF0 (bike momentum) 7281 LD A,(HL) Increase the bike's momentum, but not beyond 0xFF 7282 ADD A,\$0C 7284 JR NC,\$7288 7286 LD A,\$FF 7288 LD (HL),A 7289 LD H,\$D2 0xD2=ERIC 728B CALL \$61B4 Update the SRB for ERIC's current animatory state and location 728E XOR \$01 Now A=ERIC's new animatory state (0x0C, 0x0D, 0x8C or 0x8D) 7290 CALL \$6130 Update ERIC's animatory state and update the SRB 7293 JR \$72DA Neither 'left' nor 'right' was pressed. 7295 CP \$5C Was 'up' pressed? 7297 JR NZ,\$72C6 Jump if not 7299 LD L,\$ED HL=7FED (ERIC's status flags) 729B LD (HL),\$80 Set bit 7: ERIC is standing on the saddle of the bike 729D LD H,\$D2 0xD2=ERIC 729F CALL \$61B4 Update the SRB for ERIC's current animatory state and location 72A2 PUSH DE 72A3 DEC D D=ERIC's new y-coordinate (up a level) 72A4 NOP 72A5 INC E 72A6 BIT 7,A Is ERIC facing left? 72A8 JR Z,\$72AC Jump if so 72AA DEC E 72AB DEC E 72AC AND \$80 Now A=ERIC's new animatory state, E=ERIC's new x-coordinate 72AE CALL \$6130 Update ERIC's animatory state and location and update the SRB 72B1 LD A,(HL) A=ERIC's animatory state 72B2 POP DE DE=ERIC's location before he jumped on the saddle or got off the bike 72B3 ADD A,\$19 A=animatory state of the bike standing upright (0x19 or 0x99) 72B5 INC H H=0xD3: bike 72B6 CALL \$6130 Update the bike's animatory state and update the SRB 72B9 LD HL,\$720A Place the address of the uninterruptible subcommand routine at 720A into bytes 0x11 and 0x12 of the bike's buffer 72BC LD (\$D311),HL 72BF LD HL,\$7FF3 7FF3 holds ERIC's main action timer 72C2 LD (HL),\$05 Reset this to 5 72C4 JR \$72FC Also reset the bike's speed counter (at 7FEF) to 5 Not one of 'left', 'right' and 'up' was pressed. 72C6 CP \$5E Was 'down' pressed? 72C8 JR NZ,\$72DA Jump if not 72CA LD L,\$ED HL=7FED (ERIC's status flags) 72CC LD (HL),\$00 Reset all bits here, signalling that ERIC has his feet back on the ground 72CE LD L,\$FB HL=7FFB (ERIC's other status flags) 72D0 RES 1,(HL) Reset bit 1 here, signalling that 7FED is empty 72D2 LD H,\$D2 0xD2=ERIC 72D4 CALL \$61B4 Update the SRB for ERIC's current animatory state and location 72D7 PUSH DE Save ERIC's current location 72D8 JR \$72AC 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). 72DA LD HL,\$7FF0 7FF0 holds the bike's momentum 72DD DEC (HL) Has the bike run out of momentum? 72DE JR NZ,\$7301 Jump if not 72E0 LD H,\$D2 0xD2=ERIC, who will now fall off the bike 72E2 CALL \$61B4 Update the SRB for ERIC's current animatory state and location 72E5 PUSH DE Save ERIC's coordinates briefly 72E6 AND \$80 Keep only the 'direction' bit of ERIC's animatory state 72E8 PUSH AF 72E9 ADD A,\$04 A=0x04 or 0x84 (ERIC sitting on a chair) 72EB CALL \$6130 Update ERIC's animatory state and update the ARB 72EE POP AF A=0x00 if ERIC's facing left, 0x80 if facing right 72EF POP DE Restore ERIC's coordinates to DE 72F0 ADD A,\$18 A=0x18 or 0x98 (bike lying on the floor) 72F2 LD H,\$D3 0xD3=bike 72F4 CALL \$6130 Update the bike's animatory state and update the SRB 72F7 LD HL,\$7FED 7FED holds ERIC's status flags 72FA LD (HL),\$10 Set bit 4: ERIC will not land on his feet 72FC LD L,\$EF HL=7FEF (which holds the bike's speed counter) 72FE LD (HL),\$05 Reset this to 5 7300 RET The bike still has momentum. 7301 LD L,\$EF HL=7FEF (which holds the bike's speed counter) 7303 DEC (HL) Is it time to move the bike forward? 7304 RET NZ Return if not 7305 LD (HL),\$07 Reset the bike's speed counter to 7 7307 LD HL,(\$D200) A=ERIC's animatory state, E=ERIC's x-coordinate 730A LD A,L 730B LD E,H 730C CALL \$7000 Are there any walls, closed doors or ALBERTs in ERIC's path? 730F JR C,\$72E0 Knock ERIC off the bike if so 7311 JR Z,\$72E0 7313 JP \$724E Otherwise move ERIC forward one space, update the SRB, and scroll the screen if necessary
 Prev: 725D Up: Map Next: 7316