Routines |
Prev: 62119 | Up: Map | Next: 62173 |
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.
|
||||||||
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 |
Prev: 62119 | Up: Map | Next: 62173 |