Routines 
Prev: 70A9  Up: Map  Next: 70D5 
Used by the routine at 7222. 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).


70AA  LD L,$01  Point HL at byte 0x01 of the policeman's buffer  
70AC  LD A,($E601)  A=Sam's xcoordinate  
70AF  SUB (HL)  Subtract the policeman's xcoordinate  
70B0  DEC HL  Point HL at byte 0x00 of the policeman's buffer  
70B1  JR NC,$70BB  Jump if the policeman's xcoordinate is less than or equal to Sam's  
70B3  NEG  A=horizontal distance between Sam and the policeman  
70B5  BIT 7,(HL)  Is the policeman facing left (and thus facing Sam)?  
70B7  JR Z,$70C2  Jump if so  
70B9  JR $70BF  
70BB  BIT 7,(HL)  Is the policeman facing right (and thus facing Sam)?  
70BD  JR NZ,$70C2  Jump if so  
70BF  CP $03  Is the policeman (who is not facing Sam) at least 3 xcoordinates away from Sam?  
70C1  RET NC  Return with the carry flag reset if so  
70C2  CP $10  Is the policeman at least 16 xcoordinates away from Sam?  
70C4  RET NC  Return with the carry flag reset if so  
At this point, the policeman is either facing Sam and located less than 16 xcoordinates away from him, or facing away from Sam and located less than 3 xcoordinates away from him. Now we check the vertical distance between the two characters.


70C5  LD E,A  E=horizontal distance between Sam and the policeman  
70C6  LD L,$02  Point HL at byte 0x02 of the policeman's buffer  
70C8  LD A,($E602)  A=Sam's ycoordinate  
70CB  SUB (HL)  Subtract the policeman's ycoordinate  
70CC  JR NC,$70D0  Jump if the policeman's ycoordinate is less than or equal to Sam's  
70CE  NEG  
70D0  LD D,A  D=vertical distance between Sam and the policeman  
70D1  ADD A,E  Add the horizontal distance between Sam and the policeman  
70D2  CP $21  Set the carry flag if the result is less than 33  
70D4  RET 
Prev: 70A9  Up: Map  Next: 70D5 