| Routines

31150: Make any female characters near a mouse start or continue jumping

Used by the routine at 31254. Does nothing if the mouse is off-screen. Otherwise, for each female character that is facing the mouse and within five spaces to the left or right of it, either (a) makes her stand on a chair or start jumping if she isn't already, or (b) makes her stay on the chair or keep jumping for a little longer.
Input
H | Mouse's character number (198, 199, 206-208, 212)
31150 | LD A,(32767) | A=leftmost column of the 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
At this point H holds the number of the first female character to check, and B the number of characters to check (for proximity to a mouse).
31181 | LD L,2 | Point HL at byte 2 of the female character'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 ahead to consider the next character if not
31190 | LD L,18 | Pick up the MSB of any uninterruptible subcommand 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 ahead to consider the next character if not
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 ahead to consider the next character if not
31211 | BIT 7,(HL) | Is the female character facing left?
31213 | JR Z,31248 | Jump ahead 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 ahead to consider the next character if not
31221 | BIT 7,(HL) | Is the female character facing right?
31223 | JR NZ,31248 | Jump ahead to consider the next character if so
The female character is located within 5 spaces of the mouse, and is facing it. Figure out whether she's already jumping, or can start jumping.
31225 | LD L,18 | Pick up the MSB of any uninterruptible subcommand routine address in bytes 17 and 18 of the female 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 ahead to consider the next character
31237 | AND A | Is there an uninterruptible subcommand 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 ahead to consider the next character if so
The female character is not jumping at the moment. Make her start.
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 uninterruptible subcommand 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 |