Routines |
Prev: 62480 | Up: Map | Next: 62560 |
Called from the main loop at 63210. Returns with A holding the offset from the keypress table corresponding to the last (actual or simulated) keypress, or 0 if there was no (actual or simulated) keypress.
|
|||||||||||||||||||
62483 | LD A,(32734) | A=255 if we're in demo mode, 0 otherwise | |||||||||||||||||
62486 | INC A | Are we in demo mode? | |||||||||||||||||
62487 | JP NZ,29178 | Read the keyboard if not | |||||||||||||||||
We're in demo mode.
|
|||||||||||||||||||
62490 | LD HL,0 | Set the score (held at 32741) and the number of lines (held at 32743) to 0 | |||||||||||||||||
62493 | LD (32741),HL | ||||||||||||||||||
62496 | LD (32743),HL | ||||||||||||||||||
62499 | CALL 29118 | Check for keypresses | |||||||||||||||||
62502 | JP NZ,63189 | Start a new game if there was one | |||||||||||||||||
No keys have been pressed, so figure out ERIC's next move by seeing what little boy no. 10 is doing.
|
|||||||||||||||||||
62505 | LD DE,(50945) | Pick up the coordinates of little boy no. 10 in DE | |||||||||||||||||
62509 | LD H,210 | 210=ERIC | |||||||||||||||||
62511 | CALL 25843 | Compare the coordinates of ERIC and little boy no. 10 | |||||||||||||||||
62514 | AND A | Are they the same? | |||||||||||||||||
62515 | JR Z,62533 | Jump if so | |||||||||||||||||
62517 | DEC A | Now A=0 (ERIC is on a staircase facing up), 1 (on a staircase facing down), 2 (to the right of little boy no. 10), or 3 (to his left) | |||||||||||||||||
62518 | LD HL,23672 | Point HL at the LSB of the system variable FRAMES | |||||||||||||||||
62521 | XOR 2 | Flip bit 1 of A | |||||||||||||||||
Now A holds a value that will be translated into a simulated keypress depending on ERIC's location:
|
|||||||||||||||||||
62523 | BIT 7,(HL) | Is the LSB of FRAMES < 128? | |||||||||||||||||
62525 | JR Z,62529 | Jump if so: this will be an upper case (fast) keypress | |||||||||||||||||
62527 | ADD A,4 | 4<=A<=7: force a lower case (slow) keypress | |||||||||||||||||
62529 | ADD A,A | A=80+2n where 0<=n<=7 (simulated keypress for LEFT, RIGHT, UP, DOWN or left, right, up, down) | |||||||||||||||||
62530 | ADD A,80 | ||||||||||||||||||
62532 | RET | ||||||||||||||||||
ERIC's coordinates match those of little boy no. 10 exactly.
|
|||||||||||||||||||
62533 | LD A,(50944) | A=animatory state of little boy no. 10 | |||||||||||||||||
62536 | CP 68 | 68: little boy sitting in a chair | |||||||||||||||||
62538 | LD HL,53760 | Point HL at byte 0 of ERIC's buffer | |||||||||||||||||
62541 | JR Z,62549 | Jump if little boy no. 10 is sitting in a chair | |||||||||||||||||
62543 | CP 197 | 197: Is little boy no. 10 sitting on the floor facing right (as in assembly)? | |||||||||||||||||
62545 | JR Z,62549 | Jump if so | |||||||||||||||||
62547 | XOR A | No simulated keypress (ERIC stays still) | |||||||||||||||||
62548 | RET | ||||||||||||||||||
Little boy no. 10 is sitting in a chair or sitting on the floor facing right (as in assembly), and ERIC is standing. Make ERIC face the same way and sit too (in the same spot as little boy no. 10).
|
|||||||||||||||||||
62549 | XOR (HL) | Set the carry flag if ERIC and little boy no. 10 are facing in opposite directions | |||||||||||||||||
62550 | RLCA | ||||||||||||||||||
62551 | LD A,98 | 98=keypress code for 'S' (sit) | |||||||||||||||||
62553 | RET NC | Return if ERIC and little boy no. 10 are facing the same way | |||||||||||||||||
62554 | LD A,(HL) | A=ERIC's animatory state | |||||||||||||||||
62555 | RLCA | Set A to 1 if ERIC is facing left (leading to a simulated keypress code of 82, or RIGHT), 0 if he's facing right (leading to a simulated keypress code of 80, or LEFT); that is, make ERIC turn round | |||||||||||||||||
62556 | SBC A,A | ||||||||||||||||||
62557 | INC A | ||||||||||||||||||
62558 | JR 62529 |
Prev: 62480 | Up: Map | Next: 62560 |