Routines |
Prev: 25815 | Up: Map | Next: 25940 |
Used by the routines at 25944 and 62483. Returns with one of the following values in bits 0-2 of A depending on the relative locations of the follower and his target:
In addition, bit 3 of A will be set if the follower is facing a closed door, and C will hold the identifier of the closed door (see 28736).
|
||||||||||||||||||||||
25843 | PUSH DE | Save the target coordinates temporarily | ||||||||||||||||||||
25844 | CALL 28242 | Is the follower on a staircase? | ||||||||||||||||||||
25847 | JR NC,25860 | Jump if not | ||||||||||||||||||||
The follower is on a staircase. At this point, A=0 if the staircase goes up and to the left, 128 (bit 7 set) if it goes up and to the right.
|
||||||||||||||||||||||
25849 | LD L,0 | Point HL at byte 0 of the character's buffer | ||||||||||||||||||||
25851 | XOR (HL) | Compare the staircase's direction with the follower's | ||||||||||||||||||||
25852 | RLCA | Set the carry flag if the character is descending the staircase | ||||||||||||||||||||
25853 | LD A,1 | A=1 if the follower is ascending the staircase, 2 if descending | ||||||||||||||||||||
25855 | ADC A,0 | |||||||||||||||||||||
25857 | POP DE | Restore the target coordinates to DE | ||||||||||||||||||||
25858 | SCF | Signal: follower is on a staircase (this is ignored by both callers) | ||||||||||||||||||||
25859 | RET | |||||||||||||||||||||
The follower is not on a staircase.
|
||||||||||||||||||||||
25860 | CALL 25554 | Get the region identifier for the follower's current location | ||||||||||||||||||||
25863 | LD L,A | Copy this to L | ||||||||||||||||||||
25864 | POP DE | Restore the target coordinates to DE | ||||||||||||||||||||
25865 | CALL 25554 | Get the region identifier for the target coordinates | ||||||||||||||||||||
25868 | CP L | Compare the current and target regions | ||||||||||||||||||||
25869 | LD D,L | D=region ID for the follower's current location | ||||||||||||||||||||
25870 | LD L,1 | Point HL at byte 1 of the follower's buffer | ||||||||||||||||||||
25872 | JR NZ,25909 | Jump if the follower is not in the same region as his target | ||||||||||||||||||||
25874 | LD A,E | A=target x-coordinate | ||||||||||||||||||||
25875 | SUB (HL) | Is the follower in exactly the same location as his target? | ||||||||||||||||||||
25876 | RET Z | Return if so (with the carry flag reset) | ||||||||||||||||||||
The follower is in the same region as his target, but still has some walking to do. At this point the carry flag is set if the follower is to the right of his target, and reset if he's to the left.
|
||||||||||||||||||||||
25877 | SBC A,A | A=3 if the follower must go left, 4 if right to reach the target | ||||||||||||||||||||
25878 | ADD A,4 | |||||||||||||||||||||
25880 | PUSH AF | Save this value briefly | ||||||||||||||||||||
25881 | LD L,0 | Point HL at byte 0 of the follower's buffer | ||||||||||||||||||||
25883 | RRCA | Set bit 7 of A if the follower is facing the right way to reach his target | ||||||||||||||||||||
25884 | XOR (HL) | |||||||||||||||||||||
25885 | RLCA | Push bit 7 of A into the carry flag | ||||||||||||||||||||
25886 | JR C,25891 | Jump if the follower is facing the right way to reach his target | ||||||||||||||||||||
25888 | POP AF | A=3 (go left) or 4 (go right) | ||||||||||||||||||||
25889 | AND A | Clear the carry flag (the follower is not on a staircase) | ||||||||||||||||||||
25890 | RET | |||||||||||||||||||||
The follower is in the same region as his target, and is facing the right way to reach him. But are there any doors in the way?
|
||||||||||||||||||||||
25891 | CALL 28767 | Check for closed doors in front of the follower | ||||||||||||||||||||
25894 | JR NC,25888 | Jump if there are none | ||||||||||||||||||||
25896 | LD A,H | A=follower's character number | ||||||||||||||||||||
25897 | CP 210 | Is this ERIC (in demo mode)? | ||||||||||||||||||||
25899 | JR NZ,25905 | Jump if not | ||||||||||||||||||||
25901 | POP AF | A=3 (go left) or 4 (go right) | ||||||||||||||||||||
25902 | XOR 7 | 3 (go left) becomes 4 (go right) and vice versa for ERIC | ||||||||||||||||||||
25904 | RET | Return with the carry flag reset and C holding the door identifier | ||||||||||||||||||||
25905 | POP AF | A=3 (go left) or 4 (go right) | ||||||||||||||||||||
25906 | ADD A,8 | Set bit 3 (A=11, 12): closed door ahead | ||||||||||||||||||||
25908 | RET | Return with the carry flag reset and C holding the door identifier | ||||||||||||||||||||
The follower is not in the same region as his target. This means at least one visit to a staircase first.
|
||||||||||||||||||||||
25909 | SUB 129 | A=identifier of the top or bottom of the staircase (see 25700) | ||||||||||||||||||||
25911 | LD E,A | |||||||||||||||||||||
25912 | LD A,(DE) | |||||||||||||||||||||
25913 | LD D,A | A=x-coordinate of the top or bottom of the staircase the follower will have to go to first in order to reach his target | ||||||||||||||||||||
25914 | LD E,68 | |||||||||||||||||||||
25916 | LD A,(DE) | |||||||||||||||||||||
25917 | CP (HL) | Is the follower standing at this staircase already? | ||||||||||||||||||||
25918 | JR NZ,25875 | Jump if not | ||||||||||||||||||||
The follower is at the top or bottom of the first staircase he must negotiate in order to reach his target. Is he facing the right way to begin his ascent or descent?
|
||||||||||||||||||||||
25920 | INC E | Point DE at the staircase direction indicator | ||||||||||||||||||||
25921 | DEC L | Point HL at byte 0 of the character's buffer | ||||||||||||||||||||
25922 | LD A,(DE) | A=0 if the follower must face left to negotiate the stairs, 128 (bit 7 set) if right | ||||||||||||||||||||
25923 | XOR (HL) | Set the carry flag if the follower is facing the wrong way | ||||||||||||||||||||
25924 | RLCA | |||||||||||||||||||||
25925 | JR NC,25934 | Jump if the follower is facing the right way to negotiate the stairs | ||||||||||||||||||||
25927 | LD A,(HL) | A=follower's animatory state | ||||||||||||||||||||
25928 | RLCA | A=3 if the follower's facing right, 4 if facing left | ||||||||||||||||||||
25929 | SBC A,A | |||||||||||||||||||||
25930 | ADD A,4 | |||||||||||||||||||||
25932 | AND A | Clear the carry flag (the follower is not on a staircase) | ||||||||||||||||||||
25933 | RET | |||||||||||||||||||||
The follower is facing the right way to begin his ascent or descent of the staircase.
|
||||||||||||||||||||||
25934 | INC E | A=LSB of the routine to make the follower ascend (56/25656) or descend (77/25677) the stairs | ||||||||||||||||||||
25935 | LD A,(DE) | |||||||||||||||||||||
25936 | AND 1 | A=1 if the follower must ascend the stairs, 2 if he must descend | ||||||||||||||||||||
25938 | INC A | |||||||||||||||||||||
25939 | RET | Return with the carry flag reset |
Prev: 25815 | Up: Map | Next: 25940 |