| Routines

30396: Deal with a character who is at the entrance to a building

Used by the routine at 60347. On entry, the bit set in A indicates the direction in which the character is going to move next:
Bit | Direction
--- | ---
7 | Left
6 | Right
5 | Up and to the left
4 | Up and to the right
3 | Down and to the left
2 | Down and to the right
Also on entry, the zero flag is set if the character is indoors. If the character is Sam, we also check whether he's entering a house other than no. 19 without a key.
Input
A | Direction indicator (128, 64, 32, 16, 8 or 4)
B | Third byte of the character's location descriptor (see 60179)
H | Character number (215-230)
L | 4
30396 | JR NZ,30402 | Jump unless the character is indoors
30398 | AND B | Is the character going to leave the building?
30399 | RET NZ | Return if not
30400 | INC (HL) | Set the character's z-coordinate to 2
30401 | RET |
30402 | AND B | Is the character going to enter the building?
30403 | JR Z,30400 | Jump if not
30405 | LD A,H | A=character number
30406 | CP 230 | Is this Sam?
30408 | RET NZ | Return if not
30409 | BIT 0,B | Does the entrance have a door?
30411 | RET Z | Return if not
30412 | CALL 62099 | Point HL at the status flags for the door that Sam is standing next to (see 32752)
30415 | LD A,L | A=LSB of the address of the door status flags (240-249)
30416 | CP 245 | Is Sam standing in the doorway of no. 19?
30418 | JR Z,30423 | Jump if so
30420 | LD A,(HL) | Pick up the door status flags for the doorway Sam is standing in
30421 | AND 248 | Set the zero flag if the door requires no key to unlock it
30423 | LD H,230 | 230=Sam
30425 | RET Z | Return if the door requires no key to unlock it
30426 | JP 31289 | Check whether Sam has entered a house through the front door without a key