Prev: 62937 Up: Map Next: 63055
62938: Collect a keypress during the game (or simulate one in demo mode)
Called from the main loop at 26471. Returns with A holding the ASCII code of the last (actual or simulated) keypress, or the zero flag set if there was no (actual or simulated) keypress.
62938 LD HL,32746 32746 holds the game mode indicator
62941 LD A,(HL) Are we in demo mode?
62942 AND A
62943 JP NZ,26426 Collect a keypress if not
We're in demo mode.
62946 LD L,199 Point HL at the MSB of the lines total
62948 LD B,4 Reset the score (stored at 32708) and lines total (stored at 32710) to zero
62950 LD (HL),A
62951 DEC L
62952 DJNZ 62950
62954 CALL 26426 Check for input from the keyboard or joystick
62957 JP NZ,32250 Exit demo mode if there was input
We're in demo mode and there was no keyboard or joystick input. Time to simulate a keypress to move ERIC.
62960 LD A,(44128) A=ERIC's animatory state
62963 CP 5 5=ERIC sitting in a chair
62965 LD HL,32705 32705 holds the stand-up delay counter
62968 JR NZ,62996 Jump unless ERIC is sitting in a chair
62970 LD A,(41568) A=animatory state of little boy no. 11
62973 CP 69 69=little boy sitting in a chair
62975 JR Z,62993 Jump if little boy no. 11 is sitting in a chair
ERIC is sitting in a chair, but little boy no. 11 isn't. ERIC should stand up now or soon.
62977 LD A,(HL) The stand-up delay counter at 32705 normally holds 0; if little boy no. 11 has just stood up, initialise the delay counter to 29
62978 AND A
62979 JR Z,62990
62981 DEC (HL) Is it time for ERIC to stand up?
62982 JR NZ,62988 Jump if not
62984 LD A,115 Set A to 115 to simulate 's' (sit/stand) being pressed
62986 AND A Return with the zero flag reset to indicate input
62987 RET
62988 XOR A Return with the zero flag set to indicate no input
62989 RET
62990 LD (HL),29 Initialise the stand-up delay counter at 32705 to 29
62992 RET Return with the zero flag set to indicate no input
62993 LD (HL),0 Set the stand-up delay counter at 32705 to 0
62995 RET Return with the zero flag set to indicate no input
ERIC isn't sitting in a chair. Is he sitting on the floor or lying on his back?
62996 LD (HL),0 Set the stand-up delay counter at 32705 to 0
62998 LD L,251 HL=32763 (ERIC's status flags)
63000 BIT 7,(HL) Is ERIC sitting on the floor or lying on his back?
63002 JR NZ,62984 Simulate 's' to make ERIC stand up if so
ERIC is upright. Seek little boy no. 11 for guidance on where to go next.
63004 LD HL,41569 Pick up the coordinates of little boy no. 11 in DE
63007 LD D,(HL)
63008 INC L
63009 LD E,(HL)
63010 LD H,172 172=ERIC
63012 CALL 31452 Determine ERIC's next move in his pursuit of little boy no. 11
63015 AND A Are ERIC and this boy in the same location?
63016 JR NZ,63033 Jump if not
ERIC and little boy no. 11 are in the same location.
63018 LD A,(41568) A=animatory state of little boy no. 11
63021 CP 69 Is little boy no. 11 sitting in a chair?
63023 JR NZ,62988 Jump if not (without simulating a keypress)
63025 LD A,(44128) A=ERIC's animatory state
63028 RLCA Is ERIC facing left?
63029 JR NC,62984 Simulate 's' (sit down) if so
63031 LD A,3 Otherwise set A=3: ERIC should go left (i.e. turn round)
Now A=1 if ERIC should go up, 2 if down, 3 if left, or 4 if right (to follow little boy no. 11).
63033 LD B,81 81=ASCII code for 'Q' (up)
63035 DEC A Should ERIC go up?
63036 JR Z,63046 Jump if so
63038 LD B,65 65=ASCII code for 'A' (down)
63040 DEC A Should ERIC go down?
63041 JR Z,63046 Jump if so
63043 ADD A,78 B=79 ('O') or 80 ('P')
63045 LD B,A
Now B holds the ASCII code of the simulated keypress: Q, A, O or P. Decide whether to switch to lower case (slow).
63046 LD A,(23672) 23672=LSB of the FRAMES system variable
63049 AND 128 A=32 (lower case, slow) or 0 (upper case, fast)
63051 RRCA
63052 RRCA
63053 ADD A,B A=simulated keycode
63054 RET Return with the zero flag reset to indicate input
Prev: 62937 Up: Map Next: 63055