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