![]() |
Routines |
Prev: 25026 | Up: Map | Next: 25186 |
25080 | LD B,8 | 8 columns will be scrolled on |
25082 | PUSH BC | Save the column counter |
25083 | LD HL,23198 | First shift the attributes one place to the right |
25086 | LD DE,23199 | |
25089 | LD BC,671 | |
25092 | LDDR | |
25094 | CALL 63561 | Scroll the display file one character square to the right |
25097 | DEC A | Adjust the leftmost column of the play area now on screen (held at 32767) |
25098 | LD (32767),A | |
25101 | LD HL,5120 | H=20 (bottom row of screen), L=0 (column at far left) |
25104 | PUSH HL | |
25105 | CALL 24684 | Print the play area character square at row H, column L=0 |
25108 | POP HL | |
25109 | DEC H | Next row up |
25110 | JP P,25104 | Jump back until all 21 squares in the column have been printed |
25113 | POP BC | Restore the column counter to B |
25114 | DJNZ 25082 | Jump back until 8 columns have been scrolled on |
The screen has been scrolled right 8 columns. Check whether any of the minor characters may be teleported without us noticing.
|
||
25116 | LD A,(32767) | A=leftmost column of play area now on screen |
25119 | LD B,4 | 4 little girls, starting with 186=little girl no. 4 |
25121 | LD H,186 | |
25123 | CP 112 | 112: Was the skool gate in the middle of the screen before scrolling? |
25125 | JR Z,25134 | Jump if so (to consider teleporting little girls 4-7) |
25127 | CP 72 | 72: Was the boys' skool door in the middle of the screen before scrolling? |
25129 | RET NZ | Return if not |
25130 | LD H,183 | 183=little girl no. 1 |
The next section of code moves certain off-screen minor characters straight to their destination. Sneaky! This entry point is used by the routine at 25026 with H=190 (little boy no. 1):
|
||
25132 | LD B,3 | |
25134 | LD L,29 | Bit 3 at byte 29 is set if the character should be moved immediately to the next destination in his command list |
25136 | BIT 3,(HL) | |
25138 | JR Z,25182 | Jump if this character should not be "teleported" |
25140 | RES 3,(HL) | Reset bit 3 now, so that this character is not considered for teleportation again during this lesson |
25142 | DEC L | L=28 |
25143 | LD D,(HL) | Collect the address reached in the command list into DE |
25144 | DEC L | |
25145 | LD E,(HL) | |
25146 | LD A,(DE) | A=LSB of this address |
25147 | SUB 100 | Is this the address of the "Go to..." routine (25700)? |
25149 | JR NZ,25182 | Jump if not |
25151 | DEC L | L=26 |
25152 | INC DE | Point DE at the location coordinates (the parameters of 25700 in the command list) |
25153 | INC DE | |
25154 | LD (HL),D | Store this address in bytes 25 and 26 of the character's buffer |
25155 | DEC L | |
25156 | LD (HL),E | |
25157 | DEC L | L=24 |
25158 | LD (HL),A | Fill bytes 1-24 of the character's buffer with zeroes |
25159 | DEC L | |
25160 | JR NZ,25158 | |
25162 | LD A,(HL) | Set the character's animatory state to its base value (cancelling any midstride or knockout) |
25163 | AND 248 | |
25165 | LD (HL),A | |
25166 | INC L | L=1 |
25167 | CALL 25188 | Bring the location coordinates from the command list into bytes 1 and 2 of the buffer, effecting the teleportation |
25170 | LD E,(HL) | Collect the character's new coordinates into DE |
25171 | INC L | |
25172 | LD D,(HL) | |
25173 | LD L,5 | Copy these coordinates into bytes 5 and 6 of the buffer, which normally hold the character's destination; this is to let the routine at 25700 know it has nothing left to do |
25175 | LD (HL),E | |
25176 | INC L | |
25177 | LD (HL),D | |
25178 | LD L,29 | Reset bit 0 of byte 29, indicating that any pending request to restart the command list can be ignored (by 25296) now, because we've effectively already executed the first instruction (25700 is always the first instruction in the command list if it is present at all) |
25180 | RES 0,(HL) | |
25182 | INC H | Next character |
25183 | DJNZ 25134 | Jump back until all characters have been done |
25185 | RET |
Prev: 25026 | Up: Map | Next: 25186 |