Prev: 62480 Up: Map Next: 62560
62483: Collect a keypress during the game (or simulate one in demo mode)
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:
A ERIC's location Keypress
0 To the right of little boy no. 10 Left
1 To the left of little boy no. 10 Right
2 On a staircase, facing up Up
3 On a staircase, facing down Down
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