![]() |
Routines |
Prev: 28940 | Up: Map | Next: 29003 |
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.
|
||||
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 |