Routines 
Prev: 25306  Up: Map  Next: 25385 


25307  LD A,(32767)  32767 holds the ycoordinate of the topmost row of the play area on screen  
25310  CP 20  Is the sidewalk on screen at the moment?  
25312  RET NZ  Return if not  
25313  LD A,(32764)  Collect Sam's status flags from 32764  
25316  AND 129  Is Sam being carried or falling from a building at the moment?  
25318  RET NZ  Return if so  
25319  LD L,3  Set bit 7 of byte 3 of the sniper's buffer, making him move quickly  
25321  SET 7,(HL)  
25323  LD L,10  Decrement and then collect byte 10 of the sniper's buffer  
25325  DEC (HL)  
25326  LD A,(HL)  
25327  AND 15  Are any of bits 03 set?  
25329  RET NZ  Return if so (15 times out of 16)  
Now we check how many keys Sam has collected. The exact number in Sam's possession affects the probability that the sniper will appear.


25330  LD A,(32746)  Collect the key inventory flags from 32746  
25333  LD B,31  B=31 if Sam has no keys or one key, 63 if he has two keys, 127 if he has three, or 255 if he has all four  
25335  ADD A,A  
25336  JR Z,25344  
25338  JR NC,25335  
25340  RL B  
25342  JR 25335  
25344  CALL 61823  Get a random number in A  
25347  CP B  Is A>=B?  
25348  RET NC  Return if so  
The dice are telling us that the sniper should appear. But can we find a suitable spot for him?


25349  LD DE,25106  Point DE at the table of potential xcoordinates for the sniper at 25106  
25352  LD L,1  Point HL at byte 1 of the sniper's buffer  
25354  LD B,7  There are 7 entries in the table  
25356  LD A,(DE)  A=potential xcoordinate for the sniper  
25357  INC E  Point DE at the next potential xcoordinate  
25358  LD (HL),A  Set the sniper's xcoordinate for testing  
25359  CALL 26330  Would this bring the sniper on screen no less than 8 xcoordinates away from Sam?  
25362  JR Z,25367  Jump if so  
25364  DJNZ 25356  Otherwise consider the next potential xcoordinate  
25366  RET  
We have found a suitable place for the sniper to emerge from.


25367  LD L,17  Byte 17 of the sniper's buffer is used to regulate the delay between shots; initialise it to 0  
25369  LD (HL),A  
25370  DEC L  L=16  
25371  CALL 61823  Get a random number in A  
25374  AND 15  Byte 16 of the sniper's buffer is used to decide when to duck and when to shoot; initialise it to a number between 10 and 25  
25376  ADD A,10  
25378  LD (HL),A  
25379  LD BC,25118  Copy the address of the interruptible subcommand routine at 25118 into bytes 14 and 15 of the sniper's buffer, and then jump to it  
25382  JP 63403 
Prev: 25306  Up: Map  Next: 25385 