| Routines

62120: Check whether a character can open a door

Used by the routines at 62216 and 62278. Returns with the carry flag reset if the door is already open, or the character can open the door (either because the door requires no key, or because the character has the key); otherwise returns with the carry flag set, and the zero flag set if the character has no keys. If the door is closed and requires a key, this routine will either open it (if the character has the key), or signal that the door was knocked on.
Input
H | Character number (215-230)
62120 | LD D,H | D=character number
62121 | CALL 62099 | Check whether the door is open
62124 | EX DE,HL | H=character number
62125 | RET NZ | Return (with the carry flag reset) if the door is open
62126 | EX DE,HL | Point HL at the door status flags
62127 | LD A,(HL) | A=door status flags
62128 | AND A | Does the door require a key to unlock it?
62129 | JR NZ,62142 | Jump if so
This entry point is used by the routines at 62216 and 62339.
62131 | LD A,(HL) | Initialise the door close delay timer (in bits 0-2 of the door status flags) to 7
62132 | ADD A,7
62134 | LD (HL),A
62135 | PUSH DE | Save the character number (in D) briefly
62136 | CALL 63437 | Open the door
62139 | POP HL | Restore the character number to H
62140 | XOR A | Reset the carry flag
62141 | RET |
The door requires a key to unlock it.
62142 | LD A,D | A=character number (215-230)
62143 | CP 230 | Is this Sam?
62145 | JR NZ,62152 | Jump if not
62147 | LD A,(32746) | Pick up the key inventory flags from 32746
62150 | JR 62158 |
62152 | ADD A,10 | A=character number + 10 (225-239)
62154 | LD C,A | Point BC at the entry in the table of key ownership flags at 62177 that corresponds to this character
62155 | LD B,242
62157 | LD A,(BC) | Pick up the key ownership flags
62158 | LD C,A | C=character's key ownership flags
62159 | AND (HL) | Does the character have the key to this door?
62160 | JR NZ,62131 | Jump if so
62162 | LD A,L | A=LSB of the door status flag byte (240-249)
62163 | SUB 70 | A=170-179
62165 | LD L,A | Point HL at the door knock status flags for the door (at 32682)
62166 | SET 7,(HL) | Signal: somebody has knocked on the door
62168 | LD A,C | A=character's key ownership flags
62169 | AND A | Set the zero flag if the character has no keys
62170 | SCF | Signal: the character cannot open the door
62171 | EX DE,HL | Restore the character number to H
62172 | RET |