![]() |
Routines |
Prev: 62971 | Up: Map |
Used by many command lists to make a character go to a specified place.
|
|||||||||
62976 | CALL 31944 | Collect the destination coordinates from the command list | |||||||
62979 | JR 62998 | ||||||||
This entry point is used by the command lists at 25066, 64756, 64790, 64816, 64846, 64878 and 64902 to make a character carry Sam to a location.
|
|||||||||
62981 | CALL 31944 | Collect the destination coordinates from the command list | |||||||
62984 | LD (HL),10 | Change the address of the primary command routine in bytes 8 and 9 of the character's buffer to 62986 (below) | |||||||
62986 | CALL 63128 | Exit now if the character is midstride | |||||||
62989 | CALL 60812 | Determine the next move the character should make to reach his destination | |||||||
62992 | AND A | Has the character reached his destination? | |||||||
62993 | JR Z,63007 | Move to the next command in the command list if so | |||||||
62995 | JP 29479 | Move the character one step towards his destination | |||||||
The character is not carrying Sam.
|
|||||||||
62998 | LD (HL),24 | Change the address of the primary command routine in bytes 8 and 9 of the character's buffer to 63000 (below) | |||||||
63000 | CALL 63128 | Exit now if the character is midstride | |||||||
63003 | CALL 60812 | Determine the next move the character should make to reach his destination | |||||||
63006 | AND A | Has the character reached his destination? | |||||||
63007 | JP Z,62080 | Move to the next command in the command list if so | |||||||
63010 | CP 5 | Is the character standing next to a closed door? | |||||||
63012 | JR NC,63100 | Jump if so | |||||||
63014 | PUSH AF | Save the direction indicator | |||||||
63015 | LD BC,62926 | Point BC at the interruptible subcommand routine at 62926 | |||||||
63018 | LD L,13 | Pick up the location/destination indicator from byte 13 of the character's buffer | |||||||
63020 | LD A,(HL) | ||||||||
63021 | AND A | Is the character on the sidewalk or the road (or on the front steps of the hotel but heading somewhere other than the hotel)? | |||||||
63022 | JR NZ,63051 | Jump if not | |||||||
63024 | LD BC,62971 | Point BC at the interruptible subcommand routine at 62971 | |||||||
63027 | LD L,16 | Place the x- or y-coordinate of the character's intermediate destination into byte 16 of his buffer | |||||||
63029 | LD (HL),E | ||||||||
63030 | LD L,15 | Copy the interruptible subcommand routine address in BC (62892, 62926 or 62971) into bytes 14 and 15 of the character's buffer | |||||||
63032 | LD (HL),B | ||||||||
63033 | DEC L | ||||||||
63034 | LD (HL),C | ||||||||
63035 | POP AF | Restore the direction indicator (1-4) to A | |||||||
63036 | DEC A | Does the character need to move right next to reach his destination? | |||||||
63037 | JP Z,60334 | Jump if so | |||||||
63040 | DEC A | Does the character need to move left? | |||||||
63041 | JP Z,60347 | Jump if so | |||||||
63044 | DEC A | Does the character need to move up? | |||||||
63045 | JP Z,60315 | Jump if so | |||||||
63048 | JP 60320 | Make the character move down | |||||||
The character is not on the sidewalk or road.
|
|||||||||
63051 | DEC A | Is the character's destination in a region other than the one he's in at the moment? | |||||||
63052 | JR NZ,63083 | Jump if so | |||||||
63054 | LD L,2 | Collect the character's y-coordinate from byte 2 of his buffer | |||||||
63056 | LD A,(HL) | ||||||||
63057 | CP 31 | Is the character on or below the level of the first floor? | |||||||
63059 | JR NC,63074 | Jump if so | |||||||
63061 | LD L,10 | Point HL at byte 10 of the character's buffer | |||||||
63063 | LD E,(HL) | E=character's destination x-coordinate | |||||||
63064 | INC L | L=11 | |||||||
63065 | CP (HL) | Is the character's y-coordinate the same as that of his destination? | |||||||
63066 | JR Z,63027 | If so, send the character to his destination x-coordinate (on the same floor) | |||||||
63068 | LD E,(HL) | E=character's destination y-coordinate | |||||||
63069 | LD BC,62892 | Point BC at the interruptible subcommand routine at 62892 | |||||||
63072 | JR 63027 | Send the character up or down the stairs towards his destination | |||||||
The character is in the same region as his destination, and on or below the level of the first floor.
|
|||||||||
63074 | LD L,4 | Byte 4 of the character's buffer holds his z-coordinate | |||||||
63076 | BIT 0,(HL) | Is the character indoors (z=1)? | |||||||
63078 | CALL NZ,62597 | If so, make him consider flipping a light switch | |||||||
63081 | JR 63035 | Move the character one step closer to his destination | |||||||
The character's destination is in a region other than the one he's in at the moment.
|
|||||||||
63083 | LD L,2 | Collect the character's y-coordinate from byte 2 of his buffer | |||||||
63085 | LD A,(HL) | ||||||||
63086 | LD E,31 | 31 is the y-coordinate of the first floor | |||||||
63088 | CP E | Is the character above the first floor? | |||||||
63089 | JR C,63069 | Jump if so to send him down to the first floor | |||||||
63091 | LD L,4 | Byte 4 of the character's buffer holds his z-coordinate | |||||||
63093 | BIT 0,(HL) | Is the character indoors (z=1)? | |||||||
63095 | CALL NZ,62880 | If so, make him consider flipping a light switch off before leaving | |||||||
63098 | JR 63035 | Move the character one step closer to his destination | |||||||
63100 | JP Z,62252 | Jump if the character is standing behind a closed door | |||||||
63103 | LD L,15 | Prepare the MSB of the address of the interruptible subcommand routine at 62278 in byte 15 of the character's buffer | |||||||
63105 | LD (HL),243 | ||||||||
63107 | JP 62264 | Prepare the LSB and raise the character's arm |
Prev: 62971 | Up: Map |