Skool Daze Routines
31452: Determine next move of character following another character
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:
A Meaning
0 Follower is at same coordinates as target
1 Follower should go upstairs
2 Follower should go downstairs
3 Follower should go left
4 Follower should go right
DE Destination coordinates
H Character number (152-172) of follower
31452 LD L,97 Byte 97 holds the follower's y-coordinate
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 holds the follower's x-coordinate
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 A=0 if the follower is going upstairs, 1 if he's going downstairs
31474 XOR (HL)
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 x-coordinate 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 y-coordinate 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 x-coordinate
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 162=middle floor
31503 INC HL
31504 LD A,57 57=x-coordinate of wall between Reading and Map Rooms
31506 JR NZ,31510 Jump if follower and target are on the top floor
31508 LD A,38 38=x-coordinate of wall between White and Exam Rooms
31510 CP (HL) Compare follower's x-coordinate 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 x-coordinate
31517 CP 12 12=x-coordinate of top of stairs at left of skool
31519 JR NZ,31496 Jump unless the follower is at the top of the stairs
31521 LD L,96 Byte 96 holds the follower's 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 x-coordinate
31535 CP 77 77=x-coordinate of top of stairs at right of skool
31537 JR NZ,31496 Jump unless the follower is at the top of a staircase
31539 LD L,96 Byte 96 holds the follower's 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 162=middle floor
31553 INC HL L=98
31554 LD A,57 57=x-coordinate of wall between Reading and Map Rooms
31556 JR NZ,31560 Jump if the follower is on the top floor
31558 LD A,38 38=x-coordinate of wall between White and Exam Rooms
31560 CP (HL) Compare follower's x-coordinate 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 y-coordinate
31566 LD D,155 155=top floor
31568 CP 162 162=middle floor
31570 LD A,57 57=x-coordinate of wall between Reading and Map Rooms
31572 JR C,31578 Jump if the target is above the middle floor
31574 LD D,162 162=middle floor
31576 LD A,38 38=x-coordinate of wall between White and Exam Rooms
31578 CP E Compare target's x-coordinate 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 y-coordinate
31586 CP 169 169=bottom floor
31588 INC HL L=98
31589 JR NZ,31622 Jump if the follower is on the middle floor
31591 LD A,19 19=x-coordinate of bottom of stairs at left of skool
31593 DEC E Is the target to the left of the wall?
31594 JR Z,31598 Jump if so
31596 LD A,70 70=x-coordinate of bottom of stairs at right of skool
31598 CP (HL) Compare this with follower's x-coordinate
31599 CCF Set carry flag if follower should go right
31600 JR NZ,31496 Jump if follower is not at bottom of staircase
31602 LD L,96 Byte 96 holds the follower's animatory state
31604 CP 19 19=x-coordinate of bottom of stairs at left of skool
31606 LD A,1
31608 JR Z,31616 Jump if follower should go up stairs at left of 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 38=x-coordinate of wall between White and Exam Rooms
31624 CP (HL) Compare this with the follower's x-coordinate
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 carry flag if 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