![]() |
Routines |
Prev: 31458 | Up: Map | Next: 31578 |
31476 | LD HL,1 | Set Sam's main action timer to 1 (so that we come here on the next pass through the main loop) and his midstride/mid-action timer to 0 |
31479 | LD (58888),HL | |
First we need to determine who is carrying Sam.
|
||
31482 | LD HL,55040 | Point HL at byte 0 of character 215's buffer |
31485 | LD B,15 | We will check characters 215-229 |
31487 | LD A,(HL) | A=character's animatory state |
31488 | AND 120 | A=character's base animatory state (bits 0-2 and 7 reset) |
31490 | CP 24 | 24: Is this character a policeman carrying Sam? |
31492 | JR Z,31528 | Jump if so |
31494 | CP 40 | 40: Is this character a gangster carrying Sam? |
31496 | JR Z,31528 | Jump if so |
31498 | INC H | Next character |
31499 | DJNZ 31487 | Jump back until we find who's carrying Sam |
No one is carrying Sam at the moment. Whoever was carrying him must have just dropped him.
|
||
31501 | LD L,2 | Point HL at byte 2 of Sam's buffer |
31503 | LD A,(HL) | A=Sam's y-coordinate |
31504 | CP 19 | Set the carry flag if it's less than 19 |
31506 | LD B,1 | B=1 indicates that Sam is being dropped off the roof of a building |
31508 | JP C,64341 | Jump if Sam's being dropped off the roof of a building |
Sam is being dropped by a policeman onto the floor of the jail cell.
|
||
31511 | XOR A | Clear all of Sam's status flags at 32764 |
31512 | LD (32764),A | |
31515 | LD L,8 | Set Sam's main action timer to 8 |
31517 | LD (HL),8 | |
31519 | CALL 59848 | Update the SRB for Sam's current animatory state and location |
31522 | AND 128 | Set Sam's animatory state to 0 or 128 |
31524 | INC D | Drop him one level (to the floor) |
31525 | JP 59861 | Update Sam's animatory state and location and update the SRB |
Sam is still being carried by a gangster or policeman. Calculate Sam's new animatory state and location (which depend on those of his carrier).
|
||
31528 | LD L,4 | Point HL at byte 4 of Sam's carrier's buffer |
31530 | LD A,(HL) | A=carrier's z-coordinate |
31531 | LD (58884),A | Set Sam's z-coordinate to the same value |
31534 | LD L,0 | Point HL at byte 0 of Sam's carrier's buffer |
31536 | LD C,5 | Animatory state 5: Sam being carried (facing left) |
31538 | LD E,255 | E=-1 |
31540 | BIT 0,(HL) | Is Sam's carrier midstride? |
31542 | JR Z,31547 | Jump if not |
31544 | DEC E | E=-2 |
31545 | LD C,2 | Animatory state 2: Sam standing (facing left) |
31547 | LD A,E | A=-2 if Sam's carrier is midstride, -1 otherwise |
31548 | BIT 7,(HL) | Is Sam's carrier facing left? |
31550 | JR Z,31556 | Jump if so |
31552 | SET 7,C | C=130 or 133 (animatory states of Sam being carried, facing right) |
31554 | NEG | A=2 if Sam's carrier is midstride, 1 otherwise |
31556 | INC L | Add Sam's carrier's x-coordinate to obtain Sam's x-coordinate |
31557 | ADD A,(HL) | |
31558 | LD E,A | Copy this to E |
31559 | INC L | D=Sam's carrier's y-coordinate |
31560 | LD D,(HL) | |
31561 | DEC D | Decrement it to obtain Sam's y-coordinate |
31562 | LD A,C | A=Sam's animatory state |
31563 | PUSH AF | Save Sam's animatory state briefly |
31564 | PUSH DE | Save Sam's new coordinates |
31565 | LD H,230 | 230=Sam |
31567 | CALL 59848 | Update the SRB for Sam's current animatory state and location |
31570 | POP DE | Restore Sam's new coordinates to DE |
31571 | POP AF | Restore Sam's animatory state to A |
31572 | CALL 59861 | Update Sam's animatory state and location and update the SRB |
31575 | JP 60547 | Scroll the screen left, right, up or down if necessary |
Prev: 31458 | Up: Map | Next: 31578 |