![]() |
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 |