Prev: 28940 Up: Map Next: 29003
28942: Check whether a character is close enough to Sam to pick him up
Used by the routines at 25074 and 29361. 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 (215-229)
28942 LD A,(32764) Collect Sam's status flags from 32764
28945 DEC A Now A=0 if Sam's being carried at the moment
28946 AND A Clear the carry flag, and set the zero flag if Sam's being carried
28947 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.
28948 LD L,2 Point HL at byte 2 of the character's buffer
28950 CALL 25944 Collect Sam's x- and y-coordinates in E and D
28953 NOP
28954 LD A,(HL) A=character's y-coordinate
28955 INC A Is the character more than one y-coordinate above or below Sam?
28956 SUB D
28957 CP 3
28959 RET NC Return if so
28960 DEC L L=1
28961 LD A,(HL) A=character's x-coordinate
28962 DEC L L=0
28963 BIT 7,(HL) Is the character facing left?
28965 JR Z,28969 Jump if so
28967 ADD A,2 A=2+character's x-coordinate
28969 SUB E Is the character facing Sam and no more than two x-coordinates away from him?
28970 CP 3
28972 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.
28973 LD A,(58884) A=Sam's z-coordinate
28976 LD L,4 Set the zero flag if the character's z-coordinate matches Sam's
28978 CP (HL)
28979 SCF Return with the carry flag set if the character can pick up Sam at his current location
28980 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).
28981 PUSH HL Save the character number briefly
28982 LD H,230 230=Sam
28984 CALL 60179 Obtain descriptors for Sam's current location
28987 POP HL Restore the character number to H
28988 CP 3 Is Sam standing at the open entrance to a building?
28990 JR Z,28979 Jump if so (Sam can be picked up here)
28992 PUSH HL Save the character number briefly
28993 CALL 60179 Obtain descriptors for the character's current location
28996 POP HL Restore the character number to H
28997 CP 3 Is the character standing at the open entrance to a building?
28999 JR Z,28979 Jump if so (the character can pick Sam up here)
29001 AND A Clear the carry flag (Sam cannot be picked up)
29002 RET
Prev: 28940 Up: Map Next: 29003