Prev: 710C Up: Map Next: 714B
710E: Check whether a character is close enough to Sam to pick him up
Used by the routines at 61F2 and 72B1. Returns with the carry flag set if the character is facing Sam and close enough to him to pick him up, and Sam is not already being carried.
Input
H Character number (0xD7-0xE5)
710E LD A,($7FFC) Collect Sam's status flags from 7FFC
7111 DEC A Now A=0 if Sam's being carried at the moment
7112 AND A Clear the carry flag, and set the zero flag if Sam's being carried
7113 RET Z Return with the carry flag reset if Sam's being carried
Sam is not being carried at the moment. Compare his x- and y-coordinates with those of the character chasing him.
7114 LD L,$02 Point HL at byte 0x02 of the character's buffer
7116 CALL $6558 Collect Sam's x- and y-coordinates in E and D
7119 NOP
711A LD A,(HL) A=character's y-coordinate
711B INC A Is the character more than one y-coordinate above or below Sam?
711C SUB D
711D CP $03
711F RET NC Return if so
7120 DEC L L=0x01
7121 LD A,(HL) A=character's x-coordinate
7122 DEC L L=0x00
7123 BIT 7,(HL) Is the character facing left?
7125 JR Z,$7129 Jump if so
7127 ADD A,$02 A=2+character's x-coordinate
7129 SUB E Is the character facing Sam and no more than two x-coordinates away from him?
712A CP $03
712C RET NC Return if not
The character is facing Sam, no more than one y-coordinate above or below him, and no more than two x-coordinates to the left or right of him. Now we compare the z-coordinates.
712D LD A,($E604) A=Sam's z-coordinate
7130 LD L,$04 Set the zero flag if the character's z-coordinate matches Sam's
7132 CP (HL)
7133 SCF Return with the carry flag set if the character can pick up Sam at his current location
7134 RET Z
The z-coordinates don't match. However, the character will still be able to pick up Sam if they are both standing at or near the open entrance to a building (one inside and the other outside).
7135 PUSH HL Save the character number briefly
7136 LD H,$E6 0xE6=Sam
7138 CALL $EB13 Obtain descriptors for Sam's current location
713B POP HL Restore the character number to H
713C CP $03 Is Sam standing at the open entrance to a building?
713E JR Z,$7133 Jump if so (Sam can be picked up here)
7140 PUSH HL Save the character number briefly
7141 CALL $EB13 Obtain descriptors for the character's current location
7144 POP HL Restore the character number to H
7145 CP $03 Is the character standing at the open entrance to a building?
7147 JR Z,$7133 Jump if so (the character can pick Sam up here)
7149 AND A Clear the carry flag (Sam cannot be picked up)
714A RET
Prev: 710C Up: Map Next: 714B