Routines |
Prev: 29354 | Up: Map | Next: 29558 |
The address of this primary command routine is placed into bytes 8 and 9 of a policeman's buffer by the routine at 29354. It makes the policeman continue patrol duty, and chase and pick up Sam when appropriate.
|
||||||||
29361 | CALL 63128 | Exit now if the policeman is midstride | ||||||
29364 | CALL 31998 | Is Sam wanted by the police at the moment? | ||||||
29367 | RRA | |||||||
29368 | JR NC,29476 | Jump if not | ||||||
29370 | LD L,8 | Change the address of the primary command routine in bytes 8 and 9 of the policeman's buffer to 29374 (below) | ||||||
29372 | LD (HL),190 | |||||||
This entry point is used when the policeman is not chasing Sam.
|
||||||||
29374 | CALL 63128 | Exit now if the policeman is midstride | ||||||
29377 | CALL 31998 | Is Sam wanted by the police at the moment? | ||||||
29380 | RRA | |||||||
29381 | JR C,29397 | Jump if so | ||||||
29383 | LD L,29 | Clear any disguise identifier and timeout counter in byte 29 of the policeman's buffer | ||||||
29385 | LD (HL),0 | |||||||
29387 | LD L,3 | Reset bit 7 of byte 3 of the policeman's buffer (no need to run if Sam's not wanted by the police) | ||||||
29389 | RES 7,(HL) | |||||||
29391 | LD L,8 | Change the address of the primary command routine in bytes 8 and 9 of the policeman's buffer to 29361 | ||||||
29393 | LD (HL),177 | |||||||
29395 | JR 29476 | Determine the policeman's next move | ||||||
Sam is wanted by the police.
|
||||||||
29397 | CALL 29559 | Make the policeman start chasing Sam if he spots him, or go to Sam's last known whereabouts if Sam's disguise has become known to the police | ||||||
29400 | JR NC,29419 | Jump if the policeman is now doing either of those things | ||||||
29402 | LD DE,32732 | 32732 holds the y-coordinate of the location the police should be heading for to get Sam | ||||||
29405 | LD A,(DE) | Pick it up in A | ||||||
29406 | AND A | Do the police know where they should be heading to get Sam? | ||||||
29407 | JR Z,29476 | Jump if not to make the policeman continue to go about his normal business | ||||||
29409 | DEC E | DE=32731 | ||||||
29410 | LD BC,3 | Copy the coordinates and location identifier of the spot to which the police should be heading to get Sam into byte 10-12 of the policeman's buffer, thus making it his destination | ||||||
29413 | LD L,10 | |||||||
29415 | EX DE,HL | |||||||
29416 | LDIR | |||||||
29418 | EX DE,HL | |||||||
29419 | LD L,3 | Set bit 7 of byte 3 of the policeman's buffer (to make him run) | ||||||
29421 | SET 7,(HL) | |||||||
29423 | LD L,8 | Change the address of the primary command routine in bytes 8 and 9 of the policeman's buffer to 29429 (below) | ||||||
29425 | LD (HL),245 | |||||||
29427 | JR 29476 | |||||||
This entry point is used when the policeman is chasing Sam or heading to his last known whereabouts.
|
||||||||
29429 | CALL 31998 | Should the police be chasing Sam at the moment? | ||||||
29432 | RRA | |||||||
29433 | JR NC,29374 | Jump if not | ||||||
29435 | LD A,(32713) | Collect the ID of Sam's current disguise from 32713 | ||||||
29438 | ADD A,160 | B=160-167 | ||||||
29440 | LD B,A | |||||||
29441 | EX DE,HL | Transfer the policeman's character number to D briefly | ||||||
29442 | LD C,21 | Point BC at byte 21 of one of the pages 160-167, which hold the values 128, 64, 32, 16, 8, 4, 2 and 1 | ||||||
29444 | LD HL,32744 | The disguise status flags are stored at 32744 | ||||||
29447 | LD A,(BC) | Set the zero flag if Sam's disguise is unknown to the police | ||||||
29448 | AND (HL) | |||||||
29449 | EX DE,HL | Transfer the policeman's character number back to H | ||||||
29450 | JR Z,29467 | Jump if Sam's disguise is unknown to the police | ||||||
29452 | CALL 28942 | Is the policeman close enough to Sam to pick him up? | ||||||
29455 | JR NC,29467 | Jump if not | ||||||
29457 | XOR A | Clear the y-coordinate of the spot to which the police should run to get Sam at 32732 (Sam has been caught) | ||||||
29458 | LD (32732),A | |||||||
29461 | LD L,29 | Clear any disguise ID and timeout counter in byte 29 of the policeman's buffer | ||||||
29463 | LD (HL),A | |||||||
29464 | JP 31642 | End the game if Sam has less than $46, or make the policeman pick Sam up | ||||||
Sam's disguise is unknown to the police, or the policeman is not close enough to Sam to pick him up.
|
||||||||
29467 | CALL 63128 | Exit now if the policeman is midstride | ||||||
29470 | CALL 29559 | Make the policeman start chasing Sam if his disguise becomes known | ||||||
29473 | CALL 29052 | Make the policeman switch a light on if possible | ||||||
29476 | CALL 60812 | Determine the next move the policeman should make to reach his destination | ||||||
This entry point is used by the routine at 62976 with A=1-6.
|
||||||||
29479 | CP 5 | Is the character standing behind or in front of a closed door? | ||||||
29481 | JP NC,63100 | Jump if so | ||||||
29484 | AND A | Is the character already at his destination? | ||||||
29485 | JP NZ,63036 | Jump if not | ||||||
The policeman has reached his destination.
|
||||||||
29488 | LD L,8 | Collect the LSB of the primary command routine address from byte 8 of the policeman's buffer | ||||||
29490 | LD A,(HL) | |||||||
29491 | CP 245 | Is the primary command routine address 29429 (which is true if the policeman was either chasing Sam or heading towards his last known whereabouts)? | ||||||
29493 | JR C,29536 | If not, send the policeman to a randomly chosen spot on the sidewalk or road | ||||||
29495 | LD DE,32732 | Collect the y-coordinate of the location to which the police should run to get Sam from 32732 | ||||||
29498 | LD A,(DE) | |||||||
29499 | AND A | Do the police know where to run to get Sam? | ||||||
29500 | JR Z,29515 | Jump if not | ||||||
29502 | LD L,2 | Point HL at byte 2 of the policeman's buffer | ||||||
29504 | CP (HL) | Compare the policeman's y-coordinate with that of the spot to which the police should run to get Sam | ||||||
29505 | DEC DE | DE=32731 | ||||||
29506 | JR NZ,29525 | Jump unless the policeman's y-coordinate matches | ||||||
29508 | DEC L | L=1 | ||||||
29509 | LD A,(DE) | A=x-coordinate of the spot to which the police should run to get Sam | ||||||
29510 | SUB (HL) | Does it match the policeman's x-coordinate? | ||||||
29511 | JR NZ,29525 | Jump if not | ||||||
29513 | INC E | Set 32732 to 0 now that a policeman has made it to the spot to which the police should run to get Sam | ||||||
29514 | LD (DE),A | |||||||
29515 | LD L,3 | Reset bit 7 of byte 3 of the policeman's buffer (to make him stop running) | ||||||
29517 | RES 7,(HL) | |||||||
29519 | LD L,8 | Change the address of the primary command routine in bytes 8 and 9 of the policeman's buffer to 29374 (above) | ||||||
29521 | LD (HL),190 | |||||||
29523 | JR 29536 | Send the policeman to a randomly chosen spot on the sidewalk or road | ||||||
29525 | LD L,10 | Copy the coordinates and location identifier of the spot to which the police should run to get Sam from 32731 into bytes 10-12 of the policeman's buffer, thus making it his destination | ||||||
29527 | LD BC,3 | |||||||
29530 | EX DE,HL | |||||||
29531 | LDIR | |||||||
29533 | EX DE,HL | Point HL back at the policeman's buffer | ||||||
29534 | JR 29476 | Determine the policeman's next move | ||||||
This entry point is used by the routine at 29354. It sets the policeman's destination to a randomly chosen spot on the sidewalk or road.
|
||||||||
29536 | CALL 61823 | Get a random number in A | ||||||
29539 | OR 0 | The operand of this OR instruction is changed by the routine at 29952: to 0 (using the event entry at 24544), or to 192 (using the event entry at 24727) to keep the policeman close to Sam's office | ||||||
29541 | AND 253 | Discard bit 1 | ||||||
29543 | LD E,A | Copy this x-coordinate to E | ||||||
29544 | CALL 60165 | Set the carry flag if there is no sidewalk at this x-coordinate | ||||||
29547 | ADC A,34 | A=34 (if there is sidewalk) or 35 (if there is no sidewalk) | ||||||
29549 | SUB E | |||||||
29550 | LD D,A | Copy this y-coordinate to D | ||||||
29551 | LD C,0 | Clear bit 0 of C to indicate that the destination is not indoors | ||||||
29553 | CALL 29076 | Set the policeman's destination to the coordinates in E, D and C | ||||||
29556 | JR 29476 | Determine the policeman's next move |
Prev: 29354 | Up: Map | Next: 29558 |