| Routines

FB3C: Deal with ERIC when he's standing on a plant or plant pot

Used by the routine at F7AD when bit 1 at 7FED is set (by the routine at 5D63). If 'down', 'left' or 'right' is pressed while ERIC is standing on a plant or plant pot, this routine will set bit 2 or 3 of ERIC's status flags at 7FED as follows:
Bit(s) | Meaning
--- | ---
2 | ERIC is stepping off a plant or plant pot straight to the floor
3 | ERIC is falling and will land on his feet ('down' pressed)
2 & 3 | ERIC is stepping off a fully grown plant in the direction of an open window or the closed skool gate
FB3C | LD HL,$7FF3 | 7FF3 holds ERIC's main action timer
FB3F | DEC (HL) | Is it time to deal with ERIC yet?
FB40 | RET NZ | Return if not
FB41 | INC (HL) | Set ERIC's main action timer to 1, ensuring that we pass through the following section of code on the next call to this routine if no keypress is detected this time
FB42 | CALL $71FA | Get the value from the keypress offset table corresponding to the last key pressed (if any)
FB45 | RET Z | Return if no keys were pressed
A key was pressed while ERIC was standing on a plant or plant pot.
FB46 | LD HL,$7FF3 | Reset ERIC's main action timer at 7FF3 to 5
FB49 | LD (HL),$05
FB4B | RES 3,A | Reset bit 3 of the keypress code to make it lower case
FB4D | CP $56 | Was 'down' pressed?
FB4F | JR NZ,$FB56 | Jump if not
'Down' was pressed, so make ERIC descend gracefully.
FB51 | LD L,$ED | HL=7FED (ERIC's secondary status flags)
FB53 | LD (HL),$08 | Set bit 3: ERIC is falling and will land on his feet
FB55 | RET |
It wasn't 'down'. Was it 'left' or 'right'?
FB56 | EX DE,HL |
FB57 | LD HL,$D200 | Point HL at byte 0x00 of ERIC's buffer
FB5A | CP $52 | Was 'right' pressed?
FB5C | JR NZ,$FB90 | Jump if not
'Right' was pressed.
FB5E | BIT 7,(HL) | Is ERIC facing left?
FB60 | JP Z,$6E38 | Turn ERIC round if so
FB63 | INC L | L=0x01
FB64 | LD A,(HL) | A=ERIC's x-coordinate
FB65 | EX DE,HL |
FB66 | INC L | HL=7FF4 (which holds the door/window status flags)
FB67 | CP $84 | This is the x-coordinate of the plant pot to the left of the gate
FB69 | JR C,$FB7F | Jump if ERIC is standing on a plant pot in the boys' skool
FB6B | JR Z,$FB72 | Jump if ERIC is standing on one of the plant pots beside the gate
FB6D | LD A,$04 | Make a sound effect, update the SRB, and set bit 2 at 7FED (ERIC is stepping off a plant/plant pot)
FB6F | JP $FAF4
ERIC is standing on one of the plant pots on either side of the skool gate, and has tried to step off the plant or plant pot in the direction of the gate.
FB72 | BIT 4,(HL) | Is the skool gate open?
FB74 | JR NZ,$FB6D | Jump if so
FB76 | LD B,$0E | This is the y-coordinate of ERIC if he's standing on a fully grown plant on the bottom floor
FB78 | INC E | Point DE at byte 0x02 of ERIC's buffer
FB79 | LD A,(DE) | A=ERIC's y-coordinate
FB7A | CP B | Is ERIC on top of a fully grown plant?
FB7B | RET NZ | Return if not
FB7C | JP $FAF2 | Otherwise make a sound effect, update the SRB, and set bits 2 and 3 at 7FED
ERIC is standing on one of the plant pots in the boys' skool, and has tried to step off in the direction of the window.
FB7F | CP $5B | Is ERIC standing on the top-floor plant pot?
FB81 | JR NZ,$FB8A | Jump if not
FB83 | LD B,$00 | This is the y-coordinate of ERIC if he's standing on a fully-grown plant on the top floor
FB85 | BIT 6,(HL) | Is the top-floor window closed?
FB87 | RET Z | Return if so
FB88 | JR $FB78 |
FB8A | LD B,$07 | This is the y-coordinate of ERIC if he's standing on a fully-grown plant on the middle floor
FB8C | BIT 7,(HL) | Set the zero flag if the middle-floor window is closed
FB8E | JR $FB87 |
'Right' wasn't pressed. Was it 'left'?
FB90 | CP $50 | Was 'left' pressed?
FB92 | RET NZ | Return if not
'Left' was pressed.
FB93 | BIT 7,(HL) | Is ERIC facing right?
FB95 | JP NZ,$6E38 | Turn ERIC round if so
FB98 | INC L | Point HL at byte 0x01 of ERIC's buffer
FB99 | LD A,(HL) | A=ERIC's x-coordinate
FB9A | EX DE,HL |
FB9B | INC L | HL=7FF4 (which holds the door/window status flags)
FB9C | CP $87 | This is the x-coordinate of the plant pot to the right of the gate; set the carry flag if ERIC is to the left of this, or set the zero flag if he's standing on it
FB9E | JR $FB6B |