![]() |
Routines |
H | Character number of mouse |
31150 | LD A,(32767) | A=leftmost column of play area on screen |
31153 | LD B,A | Copy this to B |
31154 | LD L,1 | Point HL at byte 1 of the mouse's buffer |
31156 | LD A,(HL) | A=mouse's x-coordinate |
31157 | LD E,A | Copy this to E |
31158 | SUB B | |
31159 | INC A | |
31160 | CP 32 | Is this mouse off-screen? |
31162 | RET NC | Return if so |
31163 | INC L | L=2 |
31164 | LD D,(HL) | D=mouse's y-coordinate |
31165 | LD H,183 | 183=little girl no. 1 |
31167 | LD B,7 | There are 7 little girls to check |
31169 | CALL 31181 | Make them start jumping if necessary |
31172 | LD H,204 | 204=MISS TAKE |
31174 | INC B | B=1 |
31175 | CALL 31181 | Make MISS TAKE start jumping if necessary |
31178 | LD H,209 | 209=HAYLEY |
31180 | INC B | B=1 |
31181 | LD L,2 | Point HL at byte 2 of the girl's buffer |
31183 | LD A,D | A=mouse's y-coordinate |
31184 | SUB (HL) | Subtract that of the female character under consideration |
31185 | JR Z,31197 | Jump if the female character is standing on the same floor as the mouse |
31187 | DEC A | Is the female character one level above the mouse? |
31188 | JR NZ,31248 | Jump to consider the next character if not |
31190 | LD L,18 | Pick up the MSB of any routine address in bytes 17 and 18 of the character's buffer |
31192 | LD A,(HL) | |
31193 | CP 121 | Is this character jumping (121=MSB of 31078 or 31092)? |
31195 | JR NZ,31248 | Jump to consider the next character if not (she must be standing on the first step of a staircase) |
31197 | LD L,1 | Point HL at byte 1 of the character's buffer |
31199 | LD A,(HL) | A=female character's x-coordinate |
31200 | SUB E | Subtract that of the mouse |
31201 | LD L,0 | Point HL at byte 0 of the character's buffer |
31203 | JR Z,31225 | Jump if the girl is standing right where the mouse is |
31205 | JR NC,31217 | Jump if the girl is standing to the right of the mouse |
31207 | CP 251 | Is the girl within 5 spaces to the left of the mouse? |
31209 | JR C,31248 | Jump to consider the next character if not |
31211 | BIT 7,(HL) | Is the female character facing left? |
31213 | JR Z,31248 | Jump to consider the next character if so |
31215 | JR 31225 | |
31217 | CP 6 | Is the girl within 5 spaces to the right of the mouse? |
31219 | JR NC,31248 | Jump to consider the next character if not |
31221 | BIT 7,(HL) | Is the female character facing right? |
31223 | JR NZ,31248 | Jump to consider the next character if so |
31225 | LD L,18 | Pick up the MSB of any routine address in bytes 17 and 18 of the character's buffer |
31227 | LD A,(HL) | |
31228 | CP 121 | Set the zero flag if the routine address is 31078 or 31092 (i.e. the character is already jumping) |
31230 | INC HL | Point HL at byte 19 of the character's buffer |
31231 | JR NZ,31237 | Jump if the character is not jumping |
31233 | SET 4,(HL) | Otherwise ensure this character continues jumping for a little longer by setting the counter in byte 19 to at least 16 |
31235 | JR 31248 | Jump to consider the next character |
31237 | AND A | Is there a routine address other than 31078 or 31092 in bytes 17 and 18 of the character's buffer (meaning she is otherwise occupied)? |
31238 | JR NZ,31248 | Jump to consider the next character if so |
31240 | LD (HL),21 | Set the delay parameter at byte 19 determining how long the female character will jump up and down |
31242 | DEC L | |
31243 | LD (HL),121 | Place the address of the routine at 31092 into bytes 17 and 18 of the female character's buffer |
31245 | DEC L | |
31246 | LD (HL),116 | |
31248 | INC H | Next female character |
31249 | DJNZ 31181 | Jump back until all the characters have been checked |
31251 | RET |