Routines 
Prev: 31447  Up: Map  Next: 31637 
Used by the routines at 31648, 62938 and 63374. Returns with one of the following values in A depending on the relative locations of the follower and his target:


31452  LD L,97  Byte 97 of the follower's buffer holds his ycoordinate  
31454  LD A,(HL)  Pick this up in A  
31455  CP 155  Is the follower on the top floor?  
31457  JR Z,31480  Jump if so  
31459  CP 162  Is the follower on the middle floor?  
31461  JR Z,31480  Jump if so  
31463  CP 169  Is the follower on the bottom floor?  
31465  JR Z,31480  Jump if so  
The follower is on a staircase. Find out whether he's going up or down and set A accordingly to make him continue.


31467  LD L,98  Byte 98 of the follower's buffer holds his xcoordinate  
31469  LD A,(HL)  Pick this up in A  
31470  LD L,96  Byte 96 holds the follower's animatory state  
31472  ADD A,80  Set bit 7 of A if the follower is on a staircase at the right of the skool  
31474  XOR (HL)  A=1 if the follower is going upstairs, 2 if he's going downstairs  
31475  AND 128  
31477  RLCA  
31478  INC A  
31479  RET  
The follower is not on a staircase. Which way should he go?


31480  CP D  Is the follower on the same floor as the target?  
31481  JR NZ,31549  Jump if not  
The follower is on the same floor as the target. However, there may be a wall between them.


31483  INC L  Pick up the follower's xcoordinate in A  
31484  LD A,(HL)  
31485  SUB E  Is the follower in the same spot as his target?  
31486  RET Z  Return if so  
31487  DEC L  Pick up the follower's ycoordinate in A  
31488  LD A,(HL)  
31489  CP 169  Is the follower on the bottom floor?  
31491  JR NZ,31501  Jump if not  
The follower and target are both on the bottom floor, so the follower should simply move either left or right.


31493  INC HL  L=98  
31494  LD A,(HL)  A=follower's xcoordinate  
31495  CP E  Set the carry flag if the follower should go right  
31496  LD A,3  A=3 if the follower should go left, 4 if he should go right  
31498  ADC A,0  
31500  RET  
The follower and target are both on the middle floor or both on the top floor.


31501  CP 162  Set the zero flag if the follower and target are on the middle floor  
31503  INC HL  L=98  
31504  LD A,57  This is the xcoordinate of the wall between the Reading and Map Rooms  
31506  JR NZ,31510  Jump if the follower and target are on the top floor  
31508  LD A,38  This is the xcoordinate of the wall between the White and Exam Rooms  
31510  CP (HL)  Compare the follower's xcoordinate with that of the wall  
31511  JR C,31531  Jump if the follower is to the right of the wall  
31513  CP E  Is the target character to the left of the wall?  
31514  JR NC,31494  Jump if so  
The follower is on the left side of the skool and must go downstairs to get to the target on the other side of the skool.


31516  LD A,(HL)  A=follower's xcoordinate  
31517  CP 12  This is the xcoordinate of the tops of the staircases at the left of the skool  
31519  JR NZ,31496  Jump unless the follower is at the top of a staircase  
31521  LD L,96  Byte 96 of the follower's buffer holds his animatory state  
31523  LD A,4  A=4 will make the follower turn round if facing left  
31525  BIT 7,(HL)  Is the follower facing left?  
31527  RET Z  Return if so  
31528  LD A,2  A=2 will make the follower go down the stairs  
31530  RET  
The follower is on the right side of the skool. Is the target there too?


31531  CP E  Is the target character to the right of the wall?  
31532  JR C,31494  Jump if so  
31534  LD A,(HL)  A=follower's xcoordinate  
31535  CP 77  This is the xcoordinate of the tops of the staircases at the right of the skool  
31537  JR NZ,31496  Jump unless the follower is at the top of a staircase  
31539  LD L,96  Byte 96 of the follower's buffer holds his animatory state  
31541  LD A,3  A=3 will make the follower turn round if facing right  
31543  BIT 7,(HL)  Is the follower facing right?  
31545  RET NZ  Return if so  
31546  LD A,2  A=2 will make the follower go down the stairs  
31548  RET  
The follower and target are on different floors.


31549  JR NC,31565  Jump if the target is on a floor above the follower  
31551  CP 162  Set the zero flag if the follower is on the middle floor  
31553  INC HL  L=98  
31554  LD A,57  This is the xcoordinate of the wall between the Reading and Map Rooms  
31556  JR NZ,31560  Jump if the follower is on the top floor  
31558  LD A,38  This is the xcoordinate of the wall between the White and Exam Rooms  
31560  CP (HL)  Compare the follower's xcoordinate with that of the wall  
31561  JR NC,31516  Jump if the follower is to the left of the wall (and so needs to go to the top of a staircase on the left)  
31563  JR C,31534  Jump if the follower is to the right of the wall (and so needs to go to the top of a staircase on the right)  
The target is on a floor above the follower. Which staircase should the follower use?


31565  LD A,D  A=target's ycoordinate  
31566  LD D,155  This is the ycoordinate of the top floor  
31568  CP 162  This is the ycoordinate of the middle floor  
31570  LD A,57  This is the xcoordinate of the wall between the Reading and Map Rooms  
31572  JR C,31578  Jump if the target is above the middle floor  
31574  LD D,162  This is the ycoordinate of the middle floor  
31576  LD A,38  This is the xcoordinate of the wall between the White and Exam Rooms  
31578  CP E  Compare the target's xcoordinate with that of the wall  
31579  LD E,97  Signal: target is to the right of the wall  
31581  JR C,31585  Jump if the target is to the right of the wall  
31583  LD E,1  Signal: target is to the left of the wall  
31585  LD A,(HL)  A=follower's ycoordinate  
31586  CP 169  Set the zero flag if the follower is on the bottom floor  
31588  INC HL  L=98  
31589  JR NZ,31622  Jump if the follower is on the middle floor  
31591  LD A,19  This is the xcoordinate of the bottoms of the staircases at the left of the skool  
31593  DEC E  Is the target to the left of the wall?  
31594  JR Z,31598  Jump if so  
31596  LD A,70  This is the xcoordinate of the bottoms of the staircases at the right of the skool  
31598  CP (HL)  Compare this with the follower's xcoordinate  
31599  CCF  Set the carry flag if the follower should go right  
31600  JR NZ,31496  Jump if the follower is not at the bottom of a staircase  
31602  LD L,96  Byte 96 of the follower's buffer holds his animatory state  
31604  CP 19  This is the xcoordinate of the bottoms of the staircases at the left of the skool  
31606  LD A,1  A=1 will make the follower go upstairs  
31608  JR Z,31616  Jump if the follower should go up a staircase at the left of the skool  
31610  BIT 7,(HL)  Is the follower facing right?  
31612  RET NZ  Jump if so  
31613  LD A,4  A=3 will make the follower turn round and face right  
31615  RET  
31616  BIT 7,(HL)  Is the follower facing left?  
31618  RET Z  Return (with A=1) if so  
31619  LD A,3  A=3 will make the follower turn round and face left  
31621  RET  
The follower is on the middle floor, and the target is on the top floor.


31622  LD A,38  This is the xcoordinate of the wall between the White and Exam Rooms  
31624  CP (HL)  Compare this with the follower's xcoordinate  
31625  LD A,97  Signal: follower is to the right of the wall  
31627  JR C,31631  Jump if the follower is to the right of the wall  
31629  LD A,1  Signal: follower is to the left of the wall  
31631  CP E  Is the target on the same side of the skool?  
31632  JR Z,31591  Jump if so (follower must go up the nearest staircase)  
31634  CCF  Set the carry flag if the follower must go down a staircase at the right of the skool, and reset it if he must go down a staircase at the left of the skool  
31635  JR 31561 
Prev: 31447  Up: Map  Next: 31637 