Routines |
Prev: 62DA | Up: Map | Next: 6329 |
|
||||||||
62DB | LD A,($7FFF) | 7FFF holds the y-coordinate of the topmost row of the play area on screen | ||||||
62DE | CP $14 | Is the sidewalk on screen at the moment? | ||||||
62E0 | RET NZ | Return if not | ||||||
62E1 | LD A,($7FFC) | Collect Sam's status flags from 7FFC | ||||||
62E4 | AND $81 | Is Sam being carried or falling from a building at the moment? | ||||||
62E6 | RET NZ | Return if so | ||||||
62E7 | LD L,$03 | Set bit 7 of byte 0x03 of the sniper's buffer, making him move quickly | ||||||
62E9 | SET 7,(HL) | |||||||
62EB | LD L,$0A | Decrement and then collect byte 0x0A of the sniper's buffer | ||||||
62ED | DEC (HL) | |||||||
62EE | LD A,(HL) | |||||||
62EF | AND $0F | Are any of bits 0-3 set? | ||||||
62F1 | 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.
|
||||||||
62F2 | LD A,($7FEA) | Collect the key inventory flags from 7FEA | ||||||
62F5 | LD B,$1F | B=0x1F if Sam has no keys or one key, 0x3F if he has two keys, 0x7F if he has three, or 0xFF if he has all four | ||||||
62F7 | ADD A,A | |||||||
62F8 | JR Z,$6300 | |||||||
62FA | JR NC,$62F7 | |||||||
62FC | RL B | |||||||
62FE | JR $62F7 | |||||||
6300 | CALL $F17F | Get a random number in A | ||||||
6303 | CP B | Is A>=B? | ||||||
6304 | RET NC | Return if so | ||||||
The dice are telling us that the sniper should appear. But can we find a suitable spot for him?
|
||||||||
6305 | LD DE,$6212 | Point DE at the table of potential x-coordinates for the sniper at 6212 | ||||||
6308 | LD L,$01 | Point HL at byte 0x01 of the sniper's buffer | ||||||
630A | LD B,$07 | There are 7 entries in the table | ||||||
630C | LD A,(DE) | A=potential x-coordinate for the sniper | ||||||
630D | INC E | Point DE at the next potential x-coordinate | ||||||
630E | LD (HL),A | Set the sniper's x-coordinate for testing | ||||||
630F | CALL $66DA | Would this bring the sniper on screen no less than 8 x-coordinates away from Sam? | ||||||
6312 | JR Z,$6317 | Jump if so | ||||||
6314 | DJNZ $630C | Otherwise consider the next potential x-coordinate | ||||||
6316 | RET | |||||||
We have found a suitable place for the sniper to emerge from.
|
||||||||
6317 | LD L,$11 | Byte 0x11 of the sniper's buffer is used to regulate the delay between shots; initialise it to 0 | ||||||
6319 | LD (HL),A | |||||||
631A | DEC L | L=0x10 | ||||||
631B | CALL $F17F | Get a random number in A | ||||||
631E | AND $0F | Byte 0x10 of the sniper's buffer is used to decide when to duck and when to shoot; initialise it to a number between 0x0A and 0x19 | ||||||
6320 | ADD A,$0A | |||||||
6322 | LD (HL),A | |||||||
6323 | LD BC,$621E | Copy the address of the interruptible subcommand routine at 621E into bytes 0x0E and 0x0F of the sniper's buffer, and then jump to it | ||||||
6326 | JP $F7AB |
Prev: 62DA | Up: Map | Next: 6329 |