Routines
 Prev: 25940 Up: Map Next: 26062
25944: Make a teacher find ERIC
Used by the routines at 32379, 61595, 62794 and 62815. Computes the teacher's next move in the search for ERIC.
Input
H Teacher's character number (200-204)
25944 LD L,0 Point HL at byte 0 of the character's buffer
25946 BIT 0,(HL) Is the teacher midstride?
25948 JR Z,25963 Jump if not
This entry point is used by the routines at 32379, 61595 and 62794 to make the teacher who his chasing ERIC finish his stride.
25950 CALL 25012 Update the SRB for the teacher's current animatory state and location
25953 LD B,A Save the animatory state in B temporarily
25954 LD L,15 Byte 15 holds the y-coordinate adjustment to make as the teacher finishes this stride: 0 normally, 1 if descending a staircase (see later in this routine)
25956 LD A,(HL)
25958 LD D,A
25959 LD A,B Restore the animatory state to A
25960 JP 25600 Make the teacher finish his stride
The teacher is not midstride. Is he close enough to ERIC to stop the chase?
25963 CALL 28242 Is the teacher on a staircase?
25966 JR C,26007 Jump if so
25968 LD DE,(53761) Pick up ERIC's coordinates in DE
25972 LD L,0 Byte 0 holds the teacher's animatory state
25974 BIT 7,(HL) Is the teacher facing left?
25976 LD L,1
25978 JR Z,25984 Jump if so
25980 LD A,E A=ERIC's x-coordinate
25981 SUB (HL) Subtract that of the teacher
25982 JR 25986
25984 LD A,(HL) A=teacher's x-coordinate
25985 SUB E Subtract that of ERIC
25986 CP 4 Is ERIC less than 4 horizontal spaces in front of the teacher?
25988 JR NC,26004 Jump if not
25990 INC L L=2
25991 LD A,(HL) A=teacher's y-coordinate
25992 SUB 4
25994 JR C,25999 Jump if the teacher's on the top floor
25996 CP D Is ERIC at least 4 vertical spaces above the teacher?
25997 JR NC,26004 Jump if so
25999 ADD A,7 Set the carry flag if ERIC is at least 4 vertical spaces below the teacher
26001 CP D
26002 CCF Return if ERIC is within 3 vertical spaces either side of the teacher
26003 RET C
The teacher is not close enough to ERIC yet to stop chasing him. Now to figure out the teacher's next move.
26004 CALL 25534 D=ERIC's y-coordinate (or the y-coordinate of the floor he's closest to if his feet are not on the floor)
26007 CALL 25843 Work out how the teacher can reach ERIC from here
26010 BIT 3,A Is there a closed door in the way?
26012 JP NZ,28834 Open it if so
There is no closed door in the way. Is the teacher on a staircase?
26015 LD BC,0 Initialise the staircase indicator to 0
26018 CP 2 Is the teacher descending a staircase?
26020 JR NZ,26023 Jump if not
26022 INC B B=1 (teacher is descending a staircase)
26023 JR NC,26026 Jump if the teacher is not ascending a staircase
26025 DEC C C=-1 (teacher is ascending a staircase)
26026 CP 3 Is the teacher on a staircase?
26028 JR C,26045 Jump if so
26030 LD L,0 Byte 0 holds the teacher's animatory state
26032 CP 4 Set the carry flag if the teacher should go left
26034 BIT 7,(HL) Set the zero flag if the teacher is facing left
26036 JR C,26043 Jump if the teacher must go left to reach ERIC
26038 JR NZ,26045 Jump if the teacher is facing right
26040 JP 25648 Turn the teacher round
26043 JR NZ,26040 Turn the teacher round if he's facing right
Now BC is still 0 if the teacher is not on a staircase. Otherwise, B=1 and C=0 if he's descending a staircase, or B=0 and C=-1 if he's ascending a staircase. The value in B is the y-coordinate adjustment to make when the teacher finishes this stride later, and the value in C is the y-coordinate adjustment to make as he goes midstride now.
26045 LD L,15 Set byte 15 of teacher's buffer to 1 if the teacher is descending a staircase, or 0 if he's ascending a staircase or not on one
26047 LD (HL),B
26048 PUSH BC
26049 CALL 25012 Update the SRB for the teacher's current animatory state and location
26052 POP BC
26053 BIT 0,C Is the teacher ascending a staircase?
26055 JR Z,26058 Jump if not
26057 DEC D Up a stair as the teacher goes midstride
26058 INC A One foot forward (midstride)
26059 JP 24880 Update the teacher's animatory state and location and update the SRB
 Prev: 25940 Up: Map Next: 26062