Routines 
Prev: 720A  Up: Map  Next: 7294 
Used by the routine at 7377. Returns with the carry flag reset if the policeman spots, recognises and starts chasing Sam.


7222  CALL $70AA  Is Sam close enough that the policeman has a chance of spotting him?  
7225  CCF  Return with the carry flag set if not  
7226  RET C  
7227  PUSH DE  E and D hold the horizontal and vertical distances between Sam and the policeman; save these briefly  
7228  PUSH HL  Save the policeman's character number briefly  
7229  LD H,$E6  0xE6=Sam  
722B  CALL $70D6  Check whether Sam is visible to passersby  
722E  LD B,$06  Prepare B for the case where Sam is visible to passersby  
7230  JR Z,$7240  Jump if Sam is visible to passersby  
7232  CALL $F436  Is Sam standing next to a light switch?  
7235  JR Z,$723F  Jump if not  
7237  LD A,(BC)  A=window flags for Sam's location  
7238  AND $20  Set the zero flag if the light switch for this window is in the 'on' position  
723A  LD A,$04  Prepare A for the case where Sam is standing next to a light switch in the 'on' position  
723C  JR Z,$723F  Jump if the light switch for this window is in the 'on' position  
723E  XOR A  Prepare A for the case where Sam is neither visible to passersby nor standing next to a light switch in the 'on' position  
723F  LD B,A  B=0, 4 or 6  
Now B=6 (if Sam is visible to passersby), or 4 (if Sam is standing next to a light switch that is in the 'on' position), or 0 otherwise.


7240  CALL $7294  Check whether Sam's disguise is known to the police  
7243  POP HL  Restore the policeman's character number to H  
7244  POP DE  Restore the horizontal and vertical distances between Sam and the policeman to E and D  
7245  LD A,B  A=0, 1, 4, 5, 6 or 7  
7246  CP $06  Is Sam visible to passersby?  
7248  JR NC,$7251  Jump if so  
724A  CALL $70D6  Is the policeman visible to passersby?  
724D  JR NZ,$7251  Jump if not  
724F  INC B  B=2, 3, 6 or 7  
7250  INC B  
7251  LD A,B  A=07  
7252  LD L,A  Save this value in L  
7253  ADD A,A  Point BC at an entry in the table at 720A  
7254  ADD A,B  
7255  ADD A,$0A  
7257  LD C,A  
7258  LD B,$72  
725A  LD A,(BC)  Pick up the first byte of the entry  
725B  CP D  Compare it with the vertical distance between Sam and the policeman  
725C  RET C  Return (with the carry flag set) if the vertical distance is greater  
725D  INC C  Pick up the second byte of the entry  
725E  LD A,(BC)  
725F  CP E  Compare it with the horizontal distance between Sam and the policeman  
7260  RET C  Return (with the carry flag set) if the horizontal distance is greater  
7261  INC C  Pick up the third byte of the entry  
7262  LD A,(BC)  
7263  SUB D  Subtract both the horizontal and vertical distances between Sam and the policeman  
7264  SUB E  
7265  RET C  Return (with the carry flag set) if the result is negative  
7266  BIT 0,L  Bit 0 of L is set if Sam's current disguise (if any) is known to the police  
7268  LD L,$1D  Point HL at byte 0x1D of the policeman's buffer  
726A  JR NZ,$728A  Jump if Sam's current disguise is known to the police  
Sam has been spotted by the policeman, but he's wearing a disguise that is not (yet) known to the police.


726C  LD A,($7FC9)  Collect Sam's current disguise ID (17) from 7FC9  
726F  RRCA  Move bits 02 into bits 57  
7270  RRCA  
7271  RRCA  
7272  LD C,A  Copy these disguise identifier bits into C  
7273  LD A,(HL)  Pick up byte 0x1D of the policeman's buffer  
7274  AND $1F  Keep only bits 04 (the disguise timeout counter)  
7276  JR NZ,$727A  Jump unless they are all 0  
7278  LD A,$10  The disguise timeout counter will be initialised to 0x10  
727A  OR C  Copy the disguise identifier bits from C into bits 57 of A  
727B  LD (HL),A  Copy the disguise identifier bits and the timeout counter into byte 0x1D of the policeman's buffer  
727C  INC L  L=0x1E  
727D  CALL $6558  Determine Sam's location  
7280  LD (HL),E  Copy Sam's xcoordinate into byte 0x1E of the policeman's buffer  
7281  INC L  L=0x1F  
7282  AND $03  A=0 if z (Sam's zcoordinate) is 4, 2 if z is 2, or 1 if z is 1  
7284  RRCA  A=0x00 if z=4, 0x80 (bit 7 set) if z=2, or 0x40 (bit 6 set) if z=1  
7285  RRCA  
7286  OR D  Copy Sam's ycoordinate into bits 05 of A  
7287  LD (HL),A  Copy this value into byte 0x1F of the policeman's buffer  
7288  SCF  Set the carry flag: the policeman is not chasing Sam  
7289  RET  
Sam has been spotted by the policeman, and his current disguise (if any) is known to the police.


728A  LD A,(HL)  Collect byte 0x1D of the policeman's buffer  
728B  AND A  Is there a disguise ID in bits 57?  
728C  CALL NZ,$71C6  If so, make that disguise known to the police (if it isn't already)  
728F  CALL $71A0  Set the policeman's destination to Sam's current location  
7292  AND A  Clear the carry flag to indicate that the policeman is now chasing Sam  
7293  RET 
Prev: 720A  Up: Map  Next: 7294 