Routines |
Prev: 31670 | Up: Map | Next: 31807 |
31713 | LD A,(32745) | Collect the object inventory flags from 32745 | ||
31716 | BIT 6,A | Has Sam got the hook? | ||
31718 | RET Z | Return if not | ||
31719 | LD A,(58884) | A=Sam's z-coordinate | ||
31722 | LD HL,(58881) | Collect Sam's x- and y-coordinates in L and H | ||
31725 | RRCA | Is Sam's z-coordinate 1 (indoors)? | ||
31726 | JR NC,31755 | Jump if not | ||
31728 | LD A,L | A=x (Sam's x-coordinate) | ||
31729 | CP 222 | Is Sam in no. 17 or no. 15 (x>=222)? | ||
31731 | RET NC | Return if so | ||
31732 | CP 207 | Is Sam in no. 19 (207<=x<222)? | ||
31734 | JR NC,31751 | Jump if so | ||
31736 | CP 122 | Is Sam in the police station, no. 27, or the apartments next to no. 19 (122<=x<207)? | ||
31738 | JR NC,31747 | Jump if so | ||
31740 | CP 103 | Is Sam in no. 31 (103<=x<122)? | ||
31742 | JR NC,31751 | Jump if so | ||
31744 | CP 25 | Is Sam in no. 74 or the hotel (25<=x<103)? | ||
31746 | RET NC | Return if so | ||
31747 | LD A,7 | 7 is the y-coordinate of the roof of the police station, no. 27, and the apartment building next to no. 19 | ||
31749 | JR 31753 | |||
31751 | LD A,13 | 13 is the y-coordinate of the roofs of no. 19 and no. 31 | ||
31753 | CP H | Is Sam on the roof of a building? | ||
31754 | RET C | Return if not | ||
Sam is in a location that is amenable to hook-throwing.
|
||||
31755 | INC H | H=1+Sam's y-coordinate | ||
31756 | LD A,(58880) | A=Sam's animatory state | ||
31759 | AND 128 | Keep only the direction bit (bit 7) | ||
31761 | JR Z,31764 | Jump if Sam is facing left | ||
31763 | INC L | L=1+Sam's x-coordinate | ||
31764 | ADD A,121 | A=121/249 (hook) | ||
31766 | EX DE,HL | DE=hook's initial coordinates | ||
31767 | LD HL,58643 | Point HL at byte 19 of character buffer 229 | ||
31770 | INC (HL) | Is the current owner of character buffer 229 (the hook or a banknote) under the control of an uninterruptible subcommand routine? | ||
31771 | DEC (HL) | |||
31772 | RET NZ | Return if so (the hook must currently be in flight, which is unlikely) | ||
The hook will be thrown. Prepare it for launch now.
|
||||
31773 | INC L | Initialise the distance remaining for the hook to fly (stored in byte 20 of the hook's buffer) | ||
31774 | LD (HL),20 | |||
31776 | DEC L | Place the address of the uninterruptible subcommand routine at 31670 into bytes 18 and 19 of the hook's buffer | ||
31777 | LD (HL),123 | |||
31779 | DEC L | |||
31780 | LD (HL),182 | |||
31782 | LD L,4 | Set the hook's z-coordinate to 4 | ||
31784 | LD (HL),L | |||
31785 | DEC L | Set bit 7 of byte 3 of the hook's buffer, thus making the hook fly as fast as possible | ||
31786 | LD (HL),128 | |||
31788 | DEC L | Initialise the hook's x- and y-coordinates | ||
31789 | LD (HL),D | |||
31790 | DEC L | |||
31791 | LD (HL),E | |||
31792 | DEC L | Initialise the hook's animatory state | ||
31793 | LD (HL),A | |||
31794 | CALL 59861 | Update the hook's animatory state and location and update the SRB | ||
31797 | LD HL,32745 | The object inventory flags are stored at 32745 | ||
31800 | RES 6,(HL) | Clear bit 6, thus removing the hook from Sam's possession | ||
31802 | LD H,230 | 230=Sam | ||
31804 | JP 62212 | Raise Sam's arm and make a sound effect |
Prev: 31670 | Up: Map | Next: 31807 |