Routines |
Prev: 31252 | Up: Map | Next: 31462 |
The address of this uninterruptible subcommand routine is placed into bytes 17 and 18 of a mouse's buffer by the routine at 31502 (if the mouse was released by ERIC) or by the routine at 62910 (when preparing for a new game). Bytes 16 and 19-22 of the mouse's buffer are used to store the following values that control its movement:
|
||||||||||||||||||||
31254 | LD L,19 | A=remaining distance to travel | ||||||||||||||||||
31256 | LD A,(HL) | |||||||||||||||||||
31257 | AND A | Is this mouse (a) hiding, (b) about to hide, or (c) about to consider a change of direction and distance to travel? | ||||||||||||||||||
31258 | JR Z,31330 | Jump if so | ||||||||||||||||||
31260 | LD A,(32756) | 32756 holds the door/window status flags | ||||||||||||||||||
31263 | PUSH AF | Save these flags | ||||||||||||||||||
31264 | AND 63 | Reset bits 6 and 7 of the door/window status flags (i.e. pretend that the windows are closed) | ||||||||||||||||||
31266 | LD (32756),A | |||||||||||||||||||
31269 | BIT 7,(HL) | Set the zero flag if the mouse is travelling right | ||||||||||||||||||
31271 | LD L,1 | Collect the mouse's x-coordinate in E | ||||||||||||||||||
31273 | LD E,(HL) | |||||||||||||||||||
31274 | JR Z,31278 | Jump if the mouse is travelling right | ||||||||||||||||||
31276 | DEC E | |||||||||||||||||||
31277 | DEC E | |||||||||||||||||||
31278 | INC E | E=x-coordinate of the spot in front of the mouse | ||||||||||||||||||
31279 | INC L | L=2 | ||||||||||||||||||
31280 | LD A,(HL) | A=mouse's y-coordinate | ||||||||||||||||||
31281 | LD D,A | Copy this to D | ||||||||||||||||||
31282 | CP 10 | Is the mouse on the middle floor? | ||||||||||||||||||
31284 | JR NZ,31291 | Jump if not | ||||||||||||||||||
31286 | LD A,E | A=x-coordinate of the spot in front of the mouse | ||||||||||||||||||
31287 | CP 84 | Is the mouse at the top of the stairs leading down to the stage? | ||||||||||||||||||
31289 | JR Z,31296 | Turn the mouse round if so | ||||||||||||||||||
31291 | CALL 30292 | Check for walls and closed doors in the mouse's path | ||||||||||||||||||
31294 | JR NC,31304 | Jump if there are none | ||||||||||||||||||
31296 | LD L,19 | Turn the mouse round without changing the distance remaining to travel | ||||||||||||||||||
31298 | LD A,(HL) | |||||||||||||||||||
31299 | NEG | |||||||||||||||||||
31301 | LD (HL),A | |||||||||||||||||||
31302 | JR 31269 | See what's in front of the mouse in this direction | ||||||||||||||||||
There are no walls or closed doors in the mouse's path.
|
||||||||||||||||||||
31304 | POP AF | Restore the door/window status flags | ||||||||||||||||||
31305 | LD (32756),A | |||||||||||||||||||
31308 | CALL 25012 | Update the SRB for the mouse's current animatory state and location | ||||||||||||||||||
31311 | LD L,19 | Is the mouse travelling right? | ||||||||||||||||||
31313 | BIT 7,(HL) | |||||||||||||||||||
31315 | JR Z,31323 | Jump if so | ||||||||||||||||||
31317 | INC (HL) | Decrease the distance left to travel | ||||||||||||||||||
31318 | DEC E | Move the mouse one space left | ||||||||||||||||||
31319 | LD A,47 | 47: animatory state of a mouse travelling left | ||||||||||||||||||
31321 | JR 31327 | |||||||||||||||||||
31323 | DEC (HL) | Decrease the distance left to travel | ||||||||||||||||||
31324 | INC E | Move the mouse one space right | ||||||||||||||||||
31325 | LD A,175 | 175: animatory state of a mouse travelling right | ||||||||||||||||||
31327 | JP 24880 | Update the mouse's animatory state and location and update the SRB | ||||||||||||||||||
Byte 19 holds 0, which means (a) the mouse is hiding at the moment, or (b) it's time for the mouse to consider a change of direction and distance to travel, or (c) it's time to hide for a bit.
|
||||||||||||||||||||
31330 | INC L | Pick up byte 20 in A | ||||||||||||||||||
31331 | LD A,(HL) | |||||||||||||||||||
31332 | AND A | Is the mouse already hiding? | ||||||||||||||||||
31333 | JR Z,31372 | Jump if so | ||||||||||||||||||
31335 | DEC (HL) | Is it time for the mouse to hide temporarily? | ||||||||||||||||||
31336 | JR NZ,31347 | Jump if not | ||||||||||||||||||
31338 | LD L,1 | Point HL at byte 1 of the mouse's buffer | ||||||||||||||||||
31340 | LD A,(HL) | A=mouse's x-coordinate | ||||||||||||||||||
31341 | LD L,22 | Store this in byte 22 of the mouse's buffer for later retrieval | ||||||||||||||||||
31343 | LD (HL),A | |||||||||||||||||||
31344 | JP 29907 | Make the mouse hide | ||||||||||||||||||
It's time for the mouse to consider a change of direction and distance to travel.
|
||||||||||||||||||||
31347 | PUSH HL | |||||||||||||||||||
31348 | CALL 31150 | Make any girls near this mouse start jumping | ||||||||||||||||||
31351 | POP HL | |||||||||||||||||||
31352 | CALL 25233 | A=random number | ||||||||||||||||||
31355 | AND 131 | A=2-5 (bit 7 reset) or 130-133 (bit 7 set) | ||||||||||||||||||
31357 | ADD A,2 | |||||||||||||||||||
31359 | RLCA | A=2-5 (bit 7 reset), with the carry flag holding the previous contents of bit 7 | ||||||||||||||||||
31360 | AND A | |||||||||||||||||||
31361 | RRA | |||||||||||||||||||
31362 | JR C,31366 | Jump if bit 7 was set (the new direction is right) | ||||||||||||||||||
31364 | NEG | The new direction is left | ||||||||||||||||||
31366 | LD L,19 | Set the new direction and distance to travel | ||||||||||||||||||
31368 | LD (HL),A | |||||||||||||||||||
31369 | JP 31260 | Start moving | ||||||||||||||||||
The mouse is currently hiding. Check whether it should transform into a frog before reappearing (in case ERIC obtained the Science Lab storeroom key in the meantime).
|
||||||||||||||||||||
31372 | INC L | L=21 | ||||||||||||||||||
31373 | DEC (HL) | Is it time for the mouse to come out of hiding? | ||||||||||||||||||
31374 | RET NZ | Return if not | ||||||||||||||||||
31375 | LD A,H | A=mouse's character number | ||||||||||||||||||
31376 | CP 212 | Was this mouse released by ERIC? | ||||||||||||||||||
31378 | JR NZ,31424 | Jump if so | ||||||||||||||||||
31380 | LD A,(32747) | 32747 holds the inventory flags | ||||||||||||||||||
31383 | BIT 1,A | Has ERIC got the Science Lab storeroom key? | ||||||||||||||||||
31385 | JR Z,31398 | Jump if not | ||||||||||||||||||
31387 | LD A,29 | 29: animatory state of the frog | ||||||||||||||||||
31389 | LD DE,2619 | (E,D)=(59,10) (location where the frog enters the game) | ||||||||||||||||||
31392 | CALL 24880 | Update the frog's animatory state and location and update the SRB | ||||||||||||||||||
31395 | JP 31061 | Bring the frog into the game | ||||||||||||||||||
It's time for this mouse to come out of hiding.
|
||||||||||||||||||||
31398 | CALL 25233 | A=random number between 5 and 20; this determines how long the mouse will hide next time | ||||||||||||||||||
31401 | AND 15 | |||||||||||||||||||
31403 | ADD A,5 | |||||||||||||||||||
31405 | LD (HL),A | Store this in byte 21 of the mouse's buffer | ||||||||||||||||||
31406 | CALL 25233 | A=random number between 2 and 5; this determines how many changes of direction and distance to travel the mouse will make before hiding again | ||||||||||||||||||
31409 | AND 3 | |||||||||||||||||||
31411 | ADD A,2 | |||||||||||||||||||
31413 | DEC L | Store this in byte 20 of the mouse's buffer | ||||||||||||||||||
31414 | LD (HL),A | |||||||||||||||||||
31415 | LD L,22 | E=x-coordinate of the mouse before it hid | ||||||||||||||||||
31417 | LD E,(HL) | |||||||||||||||||||
31418 | LD L,2 | D=y-coordinate of the mouse | ||||||||||||||||||
31420 | LD D,(HL) | |||||||||||||||||||
31421 | JP 31325 | Unhide the mouse | ||||||||||||||||||
This mouse was released by ERIC and is currently hiding. It's due to come out of hiding, or die.
|
||||||||||||||||||||
31424 | LD L,16 | Byte 16 holds the mouse's lifespan counter | ||||||||||||||||||
31426 | DEC (HL) | Is it time for this mouse to disappear for ever? | ||||||||||||||||||
31427 | JR NZ,31451 | Jump if not | ||||||||||||||||||
This mouse must die, and return control of the buffer it hijacked (198, 199, 206-208) to its original owner (little boy no. 9 or 10, BOY WANDER, ANGELFACE or EINSTEIN).
|
||||||||||||||||||||
31429 | LD L,29 | Set bits 0 and 7 at byte 29: restart the command list and make the character run | ||||||||||||||||||
31431 | LD (HL),129 | |||||||||||||||||||
31433 | LD L,10 | Remove any interruptible subcommand routine address that may have been in the character's buffer before it was hijacked | ||||||||||||||||||
31435 | LD (HL),0 | |||||||||||||||||||
31437 | LD L,15 | Pick up from byte 15 the animatory state of the character whose buffer the mouse borrowed | ||||||||||||||||||
31439 | LD A,(HL) | |||||||||||||||||||
31440 | AND 240 | A=character's base animatory state | ||||||||||||||||||
31442 | LD L,0 | Restore this character's animatory state to its base value | ||||||||||||||||||
31444 | LD (HL),A | |||||||||||||||||||
31445 | INC L | Make the character reappear at x-coordinate 32 (which should be off-screen because ERIC cannot release mice in the boys' skool) | ||||||||||||||||||
31446 | LD (HL),32 | |||||||||||||||||||
31448 | JP 25492 | Terminate this uninterruptible subcommand, thus returning control to the character who normally owns the buffer | ||||||||||||||||||
This mouse (released by ERIC) is about to come out of hiding.
|
||||||||||||||||||||
31451 | LD A,(32767) | A=leftmost column of the play area on screen | ||||||||||||||||||
31454 | CP 144 | Is at least half of the girls' skool on-screen? | ||||||||||||||||||
31456 | JR C,31429 | Terminate the mouse if not | ||||||||||||||||||
31458 | LD L,21 | |||||||||||||||||||
31460 | JR 31398 | Otherwise make the mouse reappear |
Prev: 31252 | Up: Map | Next: 31462 |