Routines |
Prev: FA4C | Up: Map | Next: FAF1 |
Used by the routine at F9AB. On entry, A is equal to 1 if the water is at phase 3 of its trajectory (at which point it may hit a cup), or 2 if it's at phase 6 or above (at which point it may hit a plant or the floor). In the following, 'water' may refer to either water or sherry.
|
|||||||||||||||||||||||||||||||
FA4D | DEC A | Is the water at the right phase to fill a cup? | |||||||||||||||||||||||||||||
FA4E | JR NZ,$FA7E | Jump if not | |||||||||||||||||||||||||||||
FA50 | LD L,$02 | Point HL at byte 0x02 of the water's buffer | |||||||||||||||||||||||||||||
FA52 | LD A,(HL) | A=water's y-coordinate | |||||||||||||||||||||||||||||
FA53 | SUB $0E | All cups have a y-coordinate of 14 | |||||||||||||||||||||||||||||
FA55 | RET NZ | Return if the water's not at the right height | |||||||||||||||||||||||||||||
FA56 | LD L,A | L=0x00 | |||||||||||||||||||||||||||||
FA57 | DEC A | A=-1 | |||||||||||||||||||||||||||||
FA58 | BIT 7,(HL) | Is the water travelling to the left? | |||||||||||||||||||||||||||||
FA5A | JR Z,$FA5E | Jump if so | |||||||||||||||||||||||||||||
FA5C | LD A,$03 | ||||||||||||||||||||||||||||||
FA5E | INC L | L=0x01 | |||||||||||||||||||||||||||||
FA5F | ADD A,(HL) | Now A=x-coordinate of the spot the water is hitting | |||||||||||||||||||||||||||||
FA60 | CALL $7609 | Is this the x-coordinate of one of the cups? | |||||||||||||||||||||||||||||
FA63 | RET NZ | Return if not | |||||||||||||||||||||||||||||
FA64 | LD HL,$7FEB | 7FEB holds the inventory flags | |||||||||||||||||||||||||||||
FA67 | BIT 4,(HL) | Set the zero flag if there's water (not sherry) in the pistol | |||||||||||||||||||||||||||||
FA69 | LD HL,$DC77 | H=0xDC, L=0x77 | |||||||||||||||||||||||||||||
FA6C | JR Z,$FA70 | Jump if there's water in the pistol | |||||||||||||||||||||||||||||
FA6E | LD L,$7C | ||||||||||||||||||||||||||||||
FA70 | INC H | Point HL at a cup graphic data table | |||||||||||||||||||||||||||||
FA71 | CP (HL) | Is this the right data table for the cup? | |||||||||||||||||||||||||||||
FA72 | JR NZ,$FA70 | Jump back to check the next table if not | |||||||||||||||||||||||||||||
FA74 | DEC L | Point HL at the appropriate UDG reference table | |||||||||||||||||||||||||||||
Now HL points at the start of the appropriate UDG reference table for the cup:
|
|||||||||||||||||||||||||||||||
FA75 | CALL $6C18 | Alter the appropriate UDG and attribute references in the play area to show the cup filled with water or sherry | |||||||||||||||||||||||||||||
FA78 | POP HL | Drop the return address (to the routine at F9AB) from the stack | |||||||||||||||||||||||||||||
FA79 | LD H,$D6 | 0xD6=water | |||||||||||||||||||||||||||||
FA7B | JP $74CF | Remove the water from sight | |||||||||||||||||||||||||||||
The water is at phase 6 or above of its trajectory. Has it hit the floor?
|
|||||||||||||||||||||||||||||||
FA7E | DEC (HL) | Decrement the water animation phase identifier in byte 0x13 of the water's buffer from 0x9C to 0x9B; this has the effect of bringing us back through this section of code (via the routine at F9AB) until the water has hit either a plant or the floor | |||||||||||||||||||||||||||||
FA7F | CALL $774F | Is the water's y-coordinate 3 (top floor), 10 (middle floor) or 17 (bottom floor)? | |||||||||||||||||||||||||||||
FA82 | JR NZ,$FA93 | Jump if not | |||||||||||||||||||||||||||||
FA84 | CP $11 | Did it hit the bottom floor? | |||||||||||||||||||||||||||||
FA86 | JR Z,$FA78 | Terminate the water if so | |||||||||||||||||||||||||||||
The water has reached the level of the top or middle floor. We terminate it here if it's inside the boys' skool or the girls' skool. (Note that it hasn't necessarily hit the floor at this point; for example, it may have been fired from the top of the stairs above the stage down onto the stage, in which case it will terminate in mid-air above the stage, at the level of the middle floor.) Otherwise we let it continue till it hits the ground.
|
|||||||||||||||||||||||||||||||
FA88 | DEC L | L=0x01 | |||||||||||||||||||||||||||||
FA89 | LD A,(HL) | A=water's x-coordinate | |||||||||||||||||||||||||||||
FA8A | CP $60 | Terminate the water if A<96 (it's inside the boys' skool) or A>=160 (it's inside the girls' skool) | |||||||||||||||||||||||||||||
FA8C | JR C,$FA78 | ||||||||||||||||||||||||||||||
FA8E | CP $A0 | ||||||||||||||||||||||||||||||
FA90 | JR NC,$FA78 | ||||||||||||||||||||||||||||||
FA92 | RET | ||||||||||||||||||||||||||||||
The water hasn't hit a cup or the floor. Has it hit a plant pot?
|
|||||||||||||||||||||||||||||||
FA93 | CALL $F986 | Has the water hit a plant pot? | |||||||||||||||||||||||||||||
FA96 | RET NZ | Return if not | |||||||||||||||||||||||||||||
FA97 | LD A,($7FEB) | 7FEB holds the inventory flags | |||||||||||||||||||||||||||||
FA9A | BIT 4,A | Has the pistol got sherry in it? | |||||||||||||||||||||||||||||
FA9C | JR NZ,$FA78 | Terminate the sherry if so (sherry does not make plants grow) | |||||||||||||||||||||||||||||
FA9E | POP DE | Drop the return address (to the routine at F9AB) from the stack | |||||||||||||||||||||||||||||
FA9F | CALL $61B4 | Update the SRB for the water's current animatory state and location | |||||||||||||||||||||||||||||
FAA2 | INC D | Now D=y-coordinate of the plant | |||||||||||||||||||||||||||||
FAA3 | LD L,$13 | Initialise the counter that determines the phases of growth of the watered plant | |||||||||||||||||||||||||||||
FAA5 | LD (HL),$16 | ||||||||||||||||||||||||||||||
FAA7 | INC L | Store the x-coordinate of the plant in byte 0x14 of the buffer for retrieval later when it starts growing | |||||||||||||||||||||||||||||
FAA8 | LD (HL),E | ||||||||||||||||||||||||||||||
FAA9 | LD E,$00 | The plant's initial x-coordinate will be 0 (which is certainly off-screen at the moment, since the leftmost plant pot is at x-coordinate 91) | |||||||||||||||||||||||||||||
FAAB | LD A,E | And its initial animatory state will be 0x00 (ERIC standing, facing left), so it's a good thing it will be off-screen! | |||||||||||||||||||||||||||||
FAAC | CALL $7746 | Place address FAAF (below) into bytes 0x11 and 0x12 of the plant's buffer and update the SRB for the plant's appearance | |||||||||||||||||||||||||||||
The address of this entry point is placed into bytes 0x11 and 0x12 of the plant's buffer by the instruction above just after the plant has been watered.
|
|||||||||||||||||||||||||||||||
FAAF | LD L,$13 | Byte 0x13 holds the counter that determines the phases of growth (and death) of the plant | |||||||||||||||||||||||||||||
FAB1 | DEC (HL) | Is the plant ready to die? | |||||||||||||||||||||||||||||
FAB2 | JR NZ,$FAC3 | Jump if not | |||||||||||||||||||||||||||||
FAB4 | LD A,($7FED) | 7FED holds ERIC's secondary status flags | |||||||||||||||||||||||||||||
FAB7 | CP $02 | Is ERIC standing on a plant or plant pot? | |||||||||||||||||||||||||||||
FAB9 | JR NZ,$FAC0 | Jump if not | |||||||||||||||||||||||||||||
FABB | LD A,$10 | Set bit 4 at 7FED, indicating that ERIC is going to take a fall (even if ERIC's standing on a different plant pot; this is a bug) | |||||||||||||||||||||||||||||
FABD | LD ($7FED),A | ||||||||||||||||||||||||||||||
FAC0 | JP $74CF | Kill the plant | |||||||||||||||||||||||||||||
The plant is not dead yet. Plan its next move.
|
|||||||||||||||||||||||||||||||
FAC3 | LD A,(HL) | Pick up the plant lifespan counter in A | |||||||||||||||||||||||||||||
FAC4 | CP $08 | Is it time for the plant to start growing? | |||||||||||||||||||||||||||||
FAC6 | JR NZ,$FAD1 | Jump if not | |||||||||||||||||||||||||||||
FAC8 | INC L | E=x-coordinate of the plant (stored in byte 0x14 earlier) | |||||||||||||||||||||||||||||
FAC9 | LD E,(HL) | ||||||||||||||||||||||||||||||
FACA | LD L,$02 | Point HL at byte 0x02 of the plant's buffer | |||||||||||||||||||||||||||||
FACC | LD D,(HL) | D=y-coordinate of the plant | |||||||||||||||||||||||||||||
FACD | LD A,$2A | 0x2A: flower, half-grown | |||||||||||||||||||||||||||||
FACF | JR $FAD8 | ||||||||||||||||||||||||||||||
FAD1 | CP $04 | Is it time for the plant to reach full height? | |||||||||||||||||||||||||||||
FAD3 | RET NZ | Return if not | |||||||||||||||||||||||||||||
FAD4 | CALL $61B4 | Update the SRB for the plant's current animatory state | |||||||||||||||||||||||||||||
FAD7 | INC A | A=0x2B: flower, fully grown | |||||||||||||||||||||||||||||
FAD8 | CALL $6130 | Update the plant's animatory state and update the SRB | |||||||||||||||||||||||||||||
FADB | LD A,($7FED) | 7FED holds ERIC's status flags | |||||||||||||||||||||||||||||
FADE | CP $02 | Is ERIC standing on a plant? | |||||||||||||||||||||||||||||
FAE0 | RET NZ | Return if not | |||||||||||||||||||||||||||||
FAE1 | LD A,($D201) | A=ERIC's x-coordinate | |||||||||||||||||||||||||||||
FAE4 | LD L,$01 | Point HL at byte 0x01 of the plant's buffer (which holds its x-coordinate) | |||||||||||||||||||||||||||||
FAE6 | CP (HL) | Is ERIC standing on this plant? | |||||||||||||||||||||||||||||
FAE7 | RET NZ | Return if not | |||||||||||||||||||||||||||||
FAE8 | LD H,$D2 | 0xD2=ERIC | |||||||||||||||||||||||||||||
FAEA | CALL $61B4 | Update the SRB for ERIC's current animatory state and location | |||||||||||||||||||||||||||||
FAED | DEC D | ERIC will rise one level as the plant grows | |||||||||||||||||||||||||||||
FAEE | JP $6130 | Update ERIC's location and update the SRB |
Prev: FA4C | Up: Map | Next: FAF1 |