Prev: 7040 Up: Map Next: 708C
705F: Check for a closed door in front of a character
Used by the routines at 64F3 and 708E. Returns with the carry flag set if the character is facing a closed door, and C holding the door identifier:
ID Door
0x01 Left study door
0x02 Right study door
0x04 Science Lab storeroom door
0x08 Boys' skool door
0x10 Skool gate
Input
H Character number (0xB7-0xD2)
705F LD L,$00 Pick up the character's animatory state in A
7061 LD A,(HL)
7062 RLCA Set A=-1 if the character is facing left, 1 if facing right
7063 CCF
7064 SBC A,A
7065 ADD A,A
7066 INC A
7067 INC L Byte 0x01 of the character's buffer holds his x-coordinate
7068 ADD A,(HL) Add this to A
7069 LD E,A E=x-coordinate of the location directly in front of the character
706A INC L L=0x02
706B LD D,(HL) Pick up the character's y-coordinate in D
706C PUSH HL
706D LD HL,$B93E B93E is the address of the door location table
7070 LD BC,$0501 B=5 (there are 5 doors), C=1 (the left study door is the first one)
7073 LD A,E A=x-coordinate of the location directly in front of the character
7074 CP (HL) Compare this with the x-coordinate of the door
7075 INC HL
7076 JR NZ,$707C Jump if the x-coordinates don't match
7078 LD A,D A=character's y-coordinate
7079 CP (HL) Compare this with the y-coordinate of the door
707A JR Z,$7084 Jump if they match (the character is standing at this door)
707C INC HL
707D RLC C Move the set bit in C one place to the left
707F DJNZ $7073 Jump back to consider the remaining doors
7081 POP HL
7082 XOR A Reset the carry flag: there is no door in front of the character
7083 RET
The character is standing in front of a door.
7084 LD A,($7FF4) Pick up the doors flags from 7FF4
7087 AND C Check the bit corresponding to the door
7088 POP HL
7089 RET NZ Return with the carry flag reset if the door is open
708A SCF Set the carry flag: the door is closed
708B RET
Prev: 7040 Up: Map Next: 708C