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