Routines 
Prev: 6554  Up: Map  Next: 65CE 


6558  LD L,$00  Point HL at byte 0x00 of the character's buffer  
655A  BIT 0,(HL)  Is the teacher midstride?  
655C  JR Z,$656B  Jump if not  
This entry point is used by the routines at 7E7B, F09B and F54A to make the teacher who his chasing ERIC finish his stride.


655E  CALL $61B4  Update the SRB for the teacher's current animatory state and location  
6561  LD B,A  Save the animatory state in B temporarily  
6562  LD L,$0F  Byte 0x0F holds the ycoordinate adjustment to make as the teacher finishes this stride: 0 normally, 1 if descending a staircase (see later in this routine)  
6564  LD A,(HL)  
6565  ADD A,D  Make the appropriate ycoordinate adjustment  
6566  LD D,A  
6567  LD A,B  Restore the animatory state to A  
6568  JP $6400  Make the teacher finish his stride  
The teacher is not midstride. Is he close enough to ERIC to stop the chase?


656B  CALL $6E52  Is the teacher on a staircase?  
656E  JR C,$6597  Jump if so  
6570  LD DE,($D201)  Pick up ERIC's coordinates in DE  
6574  LD L,$00  Byte 0x00 holds the teacher's animatory state  
6576  BIT 7,(HL)  Is the teacher facing left?  
6578  LD L,$01  
657A  JR Z,$6580  Jump if so  
657C  LD A,E  A=ERIC's xcoordinate  
657D  SUB (HL)  Subtract that of the teacher  
657E  JR $6582  
6580  LD A,(HL)  A=teacher's xcoordinate  
6581  SUB E  Subtract that of ERIC  
6582  CP $04  Is ERIC less than 4 horizontal spaces in front of the teacher?  
6584  JR NC,$6594  Jump if not  
6586  INC L  L=0x02  
6587  LD A,(HL)  A=teacher's ycoordinate  
6588  SUB $04  
658A  JR C,$658F  Jump if the teacher's on the top floor  
658C  CP D  Is ERIC at least 4 vertical spaces above the teacher?  
658D  JR NC,$6594  Jump if so  
658F  ADD A,$07  Set the carry flag if ERIC is at least 4 vertical spaces below the teacher  
6591  CP D  
6592  CCF  Return if ERIC is within 3 vertical spaces either side of the teacher  
6593  RET C  
The teacher is not close enough to ERIC yet to stop chasing him. Now to figure out the teacher's next move.


6594  CALL $63BE  D=ERIC's ycoordinate (or the ycoordinate of the floor he's closest to if his feet are not on the floor)  
6597  CALL $64F3  Work out how the teacher can reach ERIC from here  
659A  BIT 3,A  Is there a closed door in the way?  
659C  JP NZ,$70A2  Open it if so  
There is no closed door in the way. Is the teacher on a staircase?


659F  LD BC,$0000  Initialise the staircase indicator to 0  
65A2  CP $02  Is the teacher descending a staircase?  
65A4  JR NZ,$65A7  Jump if not  
65A6  INC B  B=1 (teacher is descending a staircase)  
65A7  JR NC,$65AA  Jump if the teacher is not ascending a staircase  
65A9  DEC C  C=1 (teacher is ascending a staircase)  
65AA  CP $03  Is the teacher on a staircase?  
65AC  JR C,$65BD  Jump if so  
65AE  LD L,$00  Byte 0x00 holds the teacher's animatory state  
65B0  CP $04  Set the carry flag if the teacher should go left  
65B2  BIT 7,(HL)  Set the zero flag if the teacher is facing left  
65B4  JR C,$65BB  Jump if the teacher must go left to reach ERIC  
65B6  JR NZ,$65BD  Jump if the teacher is facing right  
65B8  JP $6430  Turn the teacher round  
65BB  JR NZ,$65B8  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 ycoordinate adjustment to make when the teacher finishes this stride later, and the value in C is the ycoordinate adjustment to make as he goes midstride now.


65BD  LD L,$0F  Set byte 0x0F 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  
65BF  LD (HL),B  
65C0  PUSH BC  
65C1  CALL $61B4  Update the SRB for the teacher's current animatory state and location  
65C4  POP BC  
65C5  BIT 0,C  Is the teacher ascending a staircase?  
65C7  JR Z,$65CA  Jump if not  
65C9  DEC D  Up a stair as the teacher goes midstride  
65CA  INC A  One foot forward (midstride)  
65CB  JP $6130  Update the teacher's animatory state and location and update the SRB 
Prev: 6554  Up: Map  Next: 65CE 