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