![]() |
Routines |
Prev: 28841 | Up: Map | Next: 28885 |
Used by the routine at 29218. Compares the policeman's coordinates with Sam's, and returns with the carry flag set if they are close enough that the policeman has a chance of spotting Sam (if other conditions are favourable).
|
||||
28842 | LD L,1 | Point HL at byte 1 of the policeman's buffer | ||
28844 | LD A,(58881) | A=Sam's x-coordinate | ||
28847 | SUB (HL) | Subtract the policeman's x-coordinate | ||
28848 | DEC HL | Point HL at byte 0 of the policeman's buffer | ||
28849 | JR NC,28859 | Jump if the policeman's x-coordinate is less than or equal to Sam's | ||
28851 | NEG | A=horizontal distance between Sam and the policeman | ||
28853 | BIT 7,(HL) | Is the policeman facing left (and thus facing Sam)? | ||
28855 | JR Z,28866 | Jump if so | ||
28857 | JR 28863 | |||
28859 | BIT 7,(HL) | Is the policeman facing right (and thus facing Sam)? | ||
28861 | JR NZ,28866 | Jump if so | ||
28863 | CP 3 | Is the policeman (who is not facing Sam) at least 3 x-coordinates away from Sam? | ||
28865 | RET NC | Return with the carry flag reset if so | ||
28866 | CP 16 | Is the policeman at least 16 x-coordinates away from Sam? | ||
28868 | RET NC | Return with the carry flag reset if so | ||
At this point, the policeman is either facing Sam and located less than 16 x-coordinates away from him, or facing away from Sam and located less than 3 x-coordinates away from him. Now we check the vertical distance between the two characters.
|
||||
28869 | LD E,A | E=horizontal distance between Sam and the policeman | ||
28870 | LD L,2 | Point HL at byte 2 of the policeman's buffer | ||
28872 | LD A,(58882) | A=Sam's y-coordinate | ||
28875 | SUB (HL) | Subtract the policeman's y-coordinate | ||
28876 | JR NC,28880 | Jump if the policeman's y-coordinate is less than or equal to Sam's | ||
28878 | NEG | |||
28880 | LD D,A | D=vertical distance between Sam and the policeman | ||
28881 | ADD A,E | Add the horizontal distance between Sam and the policeman | ||
28882 | CP 33 | Set the carry flag if the result is less than 33 | ||
28884 | RET |
Prev: 28841 | Up: Map | Next: 28885 |