![]() |
Routines |
Prev: 25532 | Up: Map |
|
||||||||||||
25534 | LD A,(HL) | Reset bits 5 and 6 of byte 122 of the character's buffer, indicating that he should no longer walk fast or slow continuously (if he was doing so) | ||||||||||
25535 | AND 159 | |||||||||||
25537 | LD (HL),A | |||||||||||
25538 | LD L,101 | Get the destination y-coordinate from the command list and place it in byte 101 of the character's buffer | ||||||||||
25540 | CALL 24972 | |||||||||||
25543 | LD (HL),A | |||||||||||
25544 | INC L | Get the destination x-coordinate from the command list and place it in byte 102 of the character's buffer | ||||||||||
25545 | CALL 24972 | |||||||||||
25548 | LD (HL),A | |||||||||||
This entry point is used by the routines at 27111 and 27266.
|
||||||||||||
25549 | NOP | |||||||||||
25550 | CALL 27888 | Make the character stand up if he's not already | ||||||||||
25553 | LD L,97 | Collect the character's x- and y-coordinates in E and D | ||||||||||
25555 | LD D,(HL) | |||||||||||
25556 | INC L | |||||||||||
25557 | LD E,(HL) | |||||||||||
25558 | LD L,101 | Bytes 101 and 102 of the character's buffer contain the destination coordinates | ||||||||||
25560 | LD BC,25404 | Point BC at 25404 (guide character to intermediate destination) | ||||||||||
25563 | LD A,D | A=character's y-coordinate | ||||||||||
25564 | CP (HL) | Is the character on the same floor as his destination? | ||||||||||
25565 | JP Z,25750 | Jump if so | ||||||||||
25568 | CP 155 | Is the character on the top floor? | ||||||||||
25570 | JP Z,25695 | Jump if so | ||||||||||
25573 | CP 169 | Is the character on the bottom floor? | ||||||||||
25575 | JP Z,25700 | Jump if so | ||||||||||
The character is on the middle floor and is destined for another floor.
|
||||||||||||
25578 | LD A,(HL) | A=y-coordinate of destination | ||||||||||
25579 | CP 169 | Set the zero flag if the character is going to the bottom floor | ||||||||||
25581 | LD A,38 | This is the x-coordinate of the wall between the White and Exam Rooms | ||||||||||
25583 | JR NZ,25639 | Jump if the character is going to the top floor | ||||||||||
This entry point is used by the routine at 25695 with A=57 (the x-coordinate of the wall between the Map and Reading Rooms).
|
||||||||||||
25585 | CP E | E holds the character's x-coordinate | ||||||||||
25586 | LD A,12 | This is the x-coordinate of the tops of the staircases at the left of the skool | ||||||||||
25588 | JR NC,25592 | Jump if the character is to the left of the wall whose x-coordinate (38 or 57) was in A | ||||||||||
This entry point is used by the routine at 25750 when the character is on the right-middle or right-top floor and needs to go down the stairs to get to his destination.
|
||||||||||||
25590 | LD A,77 | This is the x-coordinate of the tops of the staircases at the right of the skool | ||||||||||
This entry point is used by the routine at 25750 with A=12 (the x-coordinate of the tops of the staircases at the left of the skool) when the character is on the left-middle or left-top floors and needs to go down the stairs to get to his destination.
|
||||||||||||
25592 | CP E | Is the character at the top of the stairs he needs to descend? | ||||||||||
25593 | JR NZ,25627 | Jump if not | ||||||||||
25595 | LD L,96 | Byte 96 of the character's buffer holds his animatory state | ||||||||||
25597 | BIT 0,(HL) | Is the character midstride (about to descend)? | ||||||||||
25599 | JR NZ,25627 | Jump if so | ||||||||||
25601 | CP 48 | Is the target staircase on the right of the skool? | ||||||||||
25603 | JR NC,25611 | Jump if so | ||||||||||
25605 | BIT 7,(HL) | Is the character facing left? | ||||||||||
25607 | JR Z,25615 | Jump if so | ||||||||||
25609 | JR 25623 | |||||||||||
The character must go to the top of a staircase at the right of the skool.
|
||||||||||||
25611 | BIT 7,(HL) | Is the character facing left? | ||||||||||
25613 | JR Z,25623 | Jump if so | ||||||||||
This entry point is used by the routine at 25700.
|
||||||||||||
25615 | CALL 25108 | Update the SRB for the character's current location | ||||||||||
25618 | XOR 128 | Turn the character round | ||||||||||
25620 | JP 25008 | Update the character's animatory state and location and update the SRB | ||||||||||
25623 | LD C,144 | BC=25488 (guide character down stairs) | ||||||||||
This entry point is used by the routine at 25700.
|
||||||||||||
25625 | LD A,15 | Going up or down a staircase entails 15 movements | ||||||||||
25627 | LD L,105 | Place the interruptible subcommand routine address in BC (25404, 25484 or 25488) into bytes 105 and 106 of the character's buffer | ||||||||||
25629 | LD (HL),C | |||||||||||
25630 | INC L | |||||||||||
25631 | LD (HL),B | |||||||||||
25632 | INC L | Byte 107 will contain either (a) the x-coordinate of the next intermediate destination (i.e. the final destination itself, or the top or bottom of the next staircase the character must negotiate first) (BC=25404), or (b) 15, that being the number of movements required to ascend or descend a staircase (BC=25484 or 25488) | ||||||||||
25633 | LD (HL),A | |||||||||||
25634 | INC L | Initialise byte 108 to 9; this ensures that the routine at 25404 will move the character at most 9 paces towards the destination before relinquishing control (and thus giving the routine at 25126 a chance to check whether the command list should be restarted, e.g. for a new lesson) | ||||||||||
25635 | LD (HL),9 | |||||||||||
25637 | PUSH BC | Make an indirect jump to 25404, 25484 or 25488 | ||||||||||
25638 | RET | |||||||||||
The character is on the middle floor but is destined for the top floor. At this point A=38 (the x-coordinate of the wall between the White and Exam Rooms).
|
||||||||||||
25639 | INC L | Point HL at the destination x-coordinate | ||||||||||
25640 | CP E | |||||||||||
25641 | LD A,57 | This is the x-coordinate of the wall between the Map and Reading Rooms | ||||||||||
25643 | JR NC,25667 | Jump if the character is to the left of the White Room wall | ||||||||||
25645 | CP (HL) | (HL) holds the destination x-coordinate | ||||||||||
25646 | LD A,70 | This is the x-coordinate of the bottoms of the staircases at the right of the skool | ||||||||||
25648 | JR NC,25590 | Jump if the destination is to the left of the Map Room wall | ||||||||||
25650 | CP E | Is the character at the bottom of the staircase just outside the Exam Room? | ||||||||||
25651 | JR NZ,25627 | Jump if not (to send the character there) | ||||||||||
25653 | LD L,96 | Byte 96 of the character's buffer holds his animatory state | ||||||||||
25655 | BIT 0,(HL) | Is the character midstride? | ||||||||||
25657 | JR NZ,25627 | Jump if so (to finish the stride) | ||||||||||
25659 | BIT 7,(HL) | Is the character facing left? | ||||||||||
25661 | JR Z,25615 | Jump if so (to turn the character round) | ||||||||||
25663 | LD C,140 | BC=25484 (guide character up stairs) | ||||||||||
25665 | JR 25625 | |||||||||||
The character is on the middle floor to the left of the White Room wall, and is destined for the top floor. At this point A=57 (the x-coordinate of the wall between the Map and Reading Rooms).
|
||||||||||||
25667 | CP (HL) | (HL) holds the destination x-coordinate | ||||||||||
25668 | LD A,12 | This is the x-coordinate of the tops of the staircases at the left of the skool | ||||||||||
25670 | JR C,25592 | Jump if the destination is to the right of the Map Room wall | ||||||||||
25672 | LD A,19 | This is the x-coordinate of the bottoms of the staircases at the left of the skool | ||||||||||
25674 | CP E | Is the character at the bottom of the staircase just outside the White Room? | ||||||||||
25675 | JR NZ,25627 | Jump if not (to send the character there) | ||||||||||
25677 | LD L,96 | Byte 96 of the character's buffer holds his animatory state | ||||||||||
25679 | BIT 0,(HL) | Is the character midstride? | ||||||||||
25681 | JR NZ,25627 | Jump if so (to finish the stride) | ||||||||||
25683 | BIT 7,(HL) | Is the character facing right? | ||||||||||
25685 | JR NZ,25615 | Jump if so (to turn the character round) | ||||||||||
25687 | LD C,140 | BC=25484 (guide character up stairs) | ||||||||||
25689 | JR 25625 |
Prev: 25532 | Up: Map |