Back to Skool Routines
25700: Go to...
Used by command lists 0, 2, 4, 6, 8, 10, 12, 14, 16, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 70, 72, 74, 76, 78, 80, 82, 84, 86 and 88 to make a character go to a specified place.
H Character number (183-214)
25700 LD L,5 Pull the destination coordinates from the command list into bytes 5 and 6 of the character's buffer
25702 CALL 25188
This entry point is used by the routine at 25815:
25705 LD L,3 Replace the address of this routine in bytes 3 and 4 of the character's buffer with 25726 (below)
25707 LD (HL),126
25709 LD L,0 Point HL at byte 0 of the character's buffer
25711 LD A,(HL) A=animatory state of character
25712 AND 7 Is the character sitting on a chair (kids only)?
25714 CP 4
25716 JR NZ,25726 Jump if not
The character is sitting on a chair. He'll have to stand up first.
25718 CALL 25012 Update SRB for the character's current animatory state
25721 AND 248 A=animatory state of character standing up
25723 JP 24880 Update SRB for the character's new animatory state
The second and subsequent calls to this routine (from 25296) enter here:
25726 LD L,6 Collect the destination coordinates into DE
25728 LD D,(HL)
25729 DEC L
25730 LD E,(HL)
25731 LD L,1 Point HL at byte 1 of the character's buffer
25733 LD A,E A=character's current x-coordinate
25734 CP (HL) Does the character's current x-coordinate match that of the destination?
25735 INC HL L=2
25736 JR NZ,25743 Jump forward if not
25738 LD A,D A=character's current y-coordinate
25739 CP (HL) Is the character already at his destination?
25740 JP Z,25484 Move to the next instruction in the command list if so
The character hasn't reached his destination yet.
25743 CALL 25554 Get the region identifier for the character's destination
Now A holds a region ID (189-196) corresponding to the character's destination:
ID Region
189 Top floor, left of left study door in boys' skool
190 Middle floor, left of far wall of science lab storeroom
191 Bottom floor (anywhere)
192 Assembly hall stage
193 Near middle-floor window in boys' skool
194 Top floor, right of left study door in boys' skool
195 Middle floor, girls' skool
196 Top floor, girls' skool
25746 LD D,(HL) Collect the character's current coordinates into DE
25747 DEC L
25748 LD E,(HL)
25749 LD L,A L=destination region ID (189-196)
25750 CALL 25554 A=region ID (189-196) for character's current location
25753 CP L Will the character have to negotiate any staircases in order to reach his destination?
25754 JR Z,25800 Jump if not (he's in the same region as his destination)
25756 LD D,A D=region ID of current location (189-196)
25757 LD A,L A=destination region ID (189-196)
25758 SUB 129 E=destination region ID minus 129 (60-67)
25760 LD E,A
25761 LD A,(DE) Collect the appropriate staircase endpoint identifier
The staircase endpoint identifiers are arranged in bytes 60-67 (corresponding to the destination) of pages 189-196 (corresponding to the current location) as follows:
189 190 191 192 193 194 195 196
48444 189 189 189 189 189 189 189 189 189
48700 190 190 190 191 191 191 191 191 191
48956 191 192 192 191 193 193 193 194 194
49212 192 195 195 195 192 196 196 195 195
49468 193 197 197 197 197 193 198 197 197
49724 194 199 199 199 199 199 199 199 199
49980 195 200 200 200 200 200 200 195 206
50236 196 207 207 207 207 207 207 207 207
The staircase endpoint indentifier now in A (189-200, 206 or 207) corresponds to the top or bottom of the first staircase the character will have to negotiate in order to reach his destination. The x-coordinate (x), direction indicator (d), appropriate routine address LSB (56 for 25656, 77 for 25677) and number of steps (n) for the staircase can be found in bytes 68-71 of pages 189-200 and 206-207, as follows:
ID x d LSB n Staircase endpoint
48452 189 26 0 77 8 Top of stairs, top floor, between blue room and revision library
48708 190 19 128 56 8 Bottom of stairs, middle floor, between science lab and wash basins
48964 191 15 128 77 8 Top of stairs, middle floor, between science lab and wash basins
49220 192 22 0 56 8 Bottom of stairs, bottom floor, far left of boys' skool
49476 193 83 0 56 4 Bottom of stairs, bottom floor, leading up to assembly hall stage
49732 194 176 128 56 8 Bottom of stairs, bottom floor, girls' skool
49988 195 80 128 77 4 Top of stairs leading down to bottom floor, assembly hall stage
50244 196 81 128 56 5 Bottom of stairs leading up to middle floor, assembly hall stage
50500 197 85 0 77 5 Top of stairs, middle floor, leading down to assembly hall stage
50756 198 91 0 56 8 Bottom of stairs, middle floor, leading up to head's study
51012 199 84 128 77 8 Top of stairs, top floor, at head's study door
51268 200 183 0 77 8 Top of stairs, middle floor, girls' skool
52804 206 186 0 56 8 Bottom of stairs, middle floor, girls' skool
53060 207 179 128 77 8 Top of stairs, top floor, girls' skool
25762 LD D,A Place the staircase endpoint identifier in D
25763 LD E,68 Byte 68 holds the x-coordinate of the top or bottom of the staircase identified by D
25765 LD L,1 Point DE at byte 1 of the character's buffer, and HL at the staircase endpoint x-coordinate
25767 EX DE,HL
25768 LD A,(DE) A=character's current x-coordinate
25769 CP (HL) Is the character already at the top or bottom of the appropriate staircase?
25770 JR NZ,25796 Jump forward if not
At this stage the character is standing at the top or bottom of the first staircase he will have to negotiate in order to reach his destination.
25772 INC L (HL)=0 if the character has to face left to ascend or descend the stairs, 128 otherwise
25773 DEC E E=0
25774 LD A,(DE) A=character's animatory state
25775 XOR (HL) Set the carry flag if the character has to turn round to negotiate the staircase
25776 RLCA
25777 EX DE,HL Swap DE and HL so that H holds the character number
25778 JP C,25648 Turn the character round if he's facing the wrong way
25781 EX DE,HL Swap DE and HL back again
25782 LD E,11 Point DE at byte 11 of the character's buffer
25784 INC L L=70
25785 LD C,(HL) BC=25656 if the stairs are to be ascended, 25677 if descended
25786 LD B,100
25788 NOP
25789 INC L L=71
25790 LD A,(HL) A=1+number of steps in staircase
25791 LD (DE),A Place this number of steps in byte 11 of the character's buffer
25792 EX DE,HL Swap DE and HL so that H holds the character number
25793 JP 25520 Place the routine address in BC into bytes 9 and 10 of the character's buffer and jump to it
The character is not yet at the top or bottom of the appropriate staircase.
25796 LD A,(HL) A=x-coordinate of the top or bottom of the staircase
25797 EX DE,HL H=character number
25798 JR 25803 Send the character towards the staircase
The character can reach his destination without negotiating any staircases.
25800 LD L,5 Point HL at byte 5 of the character's buffer
25802 LD A,(HL) A=x-coordinate of the character's destination
25803 LD L,11 Place the x-coordinate of the top or bottom of the staircase, or the destination, into byte 11 of the character's buffer
25805 LD (HL),A
25806 LD BC,25581 Place the address of the routine at 25581 into bytes 9 and 10 of the character's buffer and jump to it, thus guiding the character to this x-coordinate
25809 JP 25520