![]() |
Routines |
| Prev: 31572 | Up: Map | Next: 31720 |
| H | 210 (ERIC) |
| 31573 | LD L,0 | Point HL at byte 0 of ERIC's buffer | ||||||||||||
| 31575 | LD A,(HL) | A=ERIC's animatory state | ||||||||||||
| 31576 | RLCA | Set A to -1 if ERIC is facing left, or 1 if he's facing right | ||||||||||||
| 31577 | SBC A,A | |||||||||||||
| 31578 | ADD A,A | |||||||||||||
| 31579 | CPL | |||||||||||||
| 31580 | INC L | L=1 | ||||||||||||
| 31581 | ADD A,(HL) | Now A=x-coordinate of the spot in front of ERIC | ||||||||||||
| 31582 | INC L | L=2 | ||||||||||||
| 31583 | LD DE,(54273) | Pick up the coordinates of the character using buffer 212 (mouse or frog) | ||||||||||||
| 31587 | CP E | Is there a mouse or frog at this x-coordinate? | ||||||||||||
| 31588 | RET NZ | Return if not | ||||||||||||
| 31589 | LD A,(HL) | A=ERIC's y-coordinate | ||||||||||||
| 31590 | CP D | Is the mouse/frog on this floor? | ||||||||||||
| 31591 | RET NZ | Return if not | ||||||||||||
| 31592 | LD A,(54272) | Pick up the mouse/frog's animatory state in A | ||||||||||||
| 31595 | AND 127 | Discard all but the "direction" bit (bit 7) | ||||||||||||
| 31597 | CP 47 | 47: Is it a mouse? | ||||||||||||
| 31599 | JP NZ,31733 | Jump if not (it's the frog) | ||||||||||||
|
ERIC has managed to catch the mouse. Determine where to release another one.
|
||||||||||||||
| 31602 | LD H,212 | H=212 (the mouse's buffer) | ||||||||||||
| 31604 | CALL 25012 | Update SRB for the mouse's current animatory state and location | ||||||||||||
| 31607 | LD HL,32767 | 32767 holds the column of the play area at the far left of the screen | ||||||||||||
| 31610 | CALL 25233 | A=random number from 0 to 7; we'll use this to determine where the new free mouse will be placed | ||||||||||||
| 31613 | AND 7 | |||||||||||||
| 31615 | LD D,A | Copy this random number to D | ||||||||||||
| 31616 | CP 2 | Jump if the random number is >= 2 | ||||||||||||
| 31618 | JR NC,31628 | |||||||||||||
| 31620 | LD A,(HL) | A=X (column of play area at far left of screen) | ||||||||||||
| 31621 | RLCA | |||||||||||||
| 31622 | JR C,31610 | Jump if X>=128 to get another random number | ||||||||||||
| 31624 | LD L,170 | 170=x-coordinate for new free mouse | ||||||||||||
| 31626 | JR 31651 | Go and figure out the y-coordinate | ||||||||||||
| 31628 | CP 5 | |||||||||||||
| 31630 | LD A,(HL) | A=X (column of play area at far left of screen) | ||||||||||||
| 31631 | JR NC,31645 | Jump if the random number is >= 5 | ||||||||||||
| 31633 | CP 56 | |||||||||||||
| 31635 | LD L,88 | 88=possible x-coordinate for new free mouse | ||||||||||||
| 31637 | JR C,31651 | Jump if X<56 to figure out the y-coordinate | ||||||||||||
| 31639 | CP 104 | Jump if 56<=X<104 to get another random number | ||||||||||||
| 31641 | JR C,31610 | |||||||||||||
| 31643 | JR 31651 | Go and figure out the y-coordinate for the mouse | ||||||||||||
| 31645 | LD L,10 | 10=possible x-coordinate for new free mouse | ||||||||||||
| 31647 | CP 56 | Jump if X<56 to get another random number | ||||||||||||
| 31649 | JR C,31610 | |||||||||||||
|
The x-coordinate for the new free mouse has been determined according to the following rules (where R is the random number from 0 to 7, X is the column of the play area at the far left of the screen, and x is the mouse's x-coordinate):
|
||||||||||||||
| 31651 | LD A,D | A=random number from 0 to 7 | ||||||||||||
| 31652 | SUB 3 | Convert this to a random number from 0 to 2 by taking the remainder when divided by 3 | ||||||||||||
| 31654 | JR NC,31652 | |||||||||||||
| 31656 | ADD A,3 | |||||||||||||
| 31658 | LD H,17 | 17=possible y-coordinate for new free mouse (bottom floor) | ||||||||||||
| 31660 | JR Z,31669 | Jump if the random number is 0 | ||||||||||||
| 31662 | DEC A | |||||||||||||
| 31663 | LD H,10 | 10=possible y-coordinate for new free mouse (middle floor) | ||||||||||||
| 31665 | JR Z,31669 | Jump if the random number was 1 | ||||||||||||
| 31667 | LD H,3 | 3=y-coordinate for new free mouse (top floor) | ||||||||||||
| 31669 | LD (54273),HL | Fill in the location of the new free mouse | ||||||||||||
| 31672 | LD A,10 | Add 100 to the score, print it and make a sound effect | ||||||||||||
| 31674 | CALL 28952 | |||||||||||||
| 31677 | LD HL,32737 | 32737 holds the number of mice ERIC has caught | ||||||||||||
| 31680 | INC (HL) | Increase this by 1 | ||||||||||||
| 31681 | LD A,(HL) | |||||||||||||
|
Now it's time to update the on-screen mouse inventory. This entry point is used by the routine at 31462.
|
||||||||||||||
| 31682 | LD A,(32737) | A=number of mice in ERIC's pocket | ||||||||||||
| 31685 | LD C,A | C will count the number of mice remaining to be printed in the inventory | ||||||||||||
| 31686 | LD L,168 | 168=LSB of the display file address for the spot in the inventory for the first captive mouse | ||||||||||||
| 31688 | LD A,C | A=number of mice left to print | ||||||||||||
| 31689 | AND A | Set the zero flag if there are none left | ||||||||||||
| 31690 | LD B,8 | There are 8 bytes in the mouse UDG/inventory slot | ||||||||||||
| 31692 | LD H,80 | Set HL to the appropriate display file address | ||||||||||||
| 31694 | JR NZ,31702 | Jump if we need to draw a mouse here | ||||||||||||
| 31696 | LD (HL),A | Otherwise blank out this spot in the mouse inventory | ||||||||||||
| 31697 | INC H | |||||||||||||
| 31698 | DJNZ 31696 | |||||||||||||
| 31700 | JR 31712 | Move to the next spot in the mouse inventory | ||||||||||||
| 31702 | LD DE,40928 | The captured mouse UDG is at 40928 | ||||||||||||
| 31705 | DEC C | Decrease the captured mouse counter | ||||||||||||
| 31706 | LD A,(DE) | Display a captured mouse in the inventory | ||||||||||||
| 31707 | LD (HL),A | |||||||||||||
| 31708 | INC H | |||||||||||||
| 31709 | INC E | |||||||||||||
| 31710 | DJNZ 31706 | |||||||||||||
| 31712 | INC L | Point to the next spot in the mouse inventory | ||||||||||||
| 31713 | BIT 4,L | Have we drawn all 8 spots yet (L=176)? | ||||||||||||
| 31715 | JR Z,31688 | Jump back to draw the next one if not | ||||||||||||
| 31717 | LD H,210 | 210=ERIC | ||||||||||||
| 31719 | RET | |||||||||||||
| Prev: 31572 | Up: Map | Next: 31720 |