Routines |
Prev: 25026 | Up: Map | Next: 25186 |
Used by the routine at 28160.
|
||||
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 the screen), L=0 (column at the 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 the 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 | 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 | 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 of 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 routine at 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, cancelling any pending request to restart the command list | ||
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 |