Prev: 64076 Up: Map Next: 64241
64077: Deal with water fired from the pistol at certain phases
Used by the routine at 63915. 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.
Input
A 1 or 2
H 214 (water)
L 19
64077 DEC A Is the water at the right phase to fill a cup?
64078 JR NZ,64126 Jump if not
64080 LD L,2 Point HL at byte 2 of the water's buffer
64082 LD A,(HL) A=water's y-coordinate
64083 SUB 14 All cups have a y-coordinate of 14
64085 RET NZ Return if the water's not at the right height
64086 LD L,A L=0
64087 DEC A A=-1
64088 BIT 7,(HL) Is the water travelling to the left?
64090 JR Z,64094 Jump if so
64092 LD A,3
64094 INC L L=1
64095 ADD A,(HL) Now A=x-coordinate of the spot the water is hitting
64096 CALL 30217 Is this the x-coordinate of one of the cups?
64099 RET NZ Return if not
64100 LD HL,32747 32747 holds the inventory flags
64103 BIT 4,(HL) Set the zero flag if there's water (not sherry) in the pistol
64105 LD HL,56439 H=220, L=119
64108 JR Z,64112 Jump if there's water in the pistol
64110 LD L,124
64112 INC H Point HL at a cup graphic data table
64113 CP (HL) Is this the right data table for the cup?
64114 JR NZ,64112 Jump back to check the next table if not
64116 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:
HL Cup Contents
56694 Leftmost cup in the boys' skool Water
56699 Leftmost cup in the boys' skool Sherry
56950 Middle cup in the boys' skool Water
56955 Middle cup in the boys' skool Sherry
57206 Rightmost cup in the boys' skool Water
57211 Rightmost cup in the boys' skool Sherry
57462 Cup in the girls' skool Water
57467 Cup in the girls' skool Sherry
64117 CALL 27672 Alter the appropriate UDG and attribute references in the play area to show the cup filled with water or sherry
64120 POP HL Drop the return address (to the routine at 63915) from the stack
64121 LD H,214 214=water
64123 JP 29903 Remove the water from sight
The water is at phase 6 or above of its trajectory. Has it hit the floor?
64126 DEC (HL) Decrement the water animation phase identifier in byte 19 of the water's buffer from 156 to 155; this has the effect of bringing us back through this section of code (via the routine at 63915) until the water has hit either a plant or the floor
64127 CALL 30543 Is the water's y-coordinate 3 (top floor), 10 (middle floor) or 17 (bottom floor)?
64130 JR NZ,64147 Jump if not
64132 CP 17 Did it hit the bottom floor?
64134 JR Z,64120 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.
64136 DEC L L=1
64137 LD A,(HL) A=water's x-coordinate
64138 CP 96 Terminate the water if A<96 (it's inside the boys' skool) or A>=160 (it's inside the girls' skool)
64140 JR C,64120
64142 CP 160
64144 JR NC,64120
64146 RET
The water hasn't hit a cup or the floor. Has it hit a plant pot?
64147 CALL 63878 Has the water hit a plant pot?
64150 RET NZ Return if not
64151 LD A,(32747) 32747 holds the inventory flags
64154 BIT 4,A Has the pistol got sherry in it?
64156 JR NZ,64120 Terminate the sherry if so (sherry does not make plants grow)
64158 POP DE Drop the return address (to the routine at 63915) from the stack
64159 CALL 25012 Update the SRB for the water's current animatory state and location
64162 INC D Now D=y-coordinate of the plant
64163 LD L,19 Initialise the counter that determines the phases of growth of the watered plant
64165 LD (HL),22
64167 INC L Store the x-coordinate of the plant in byte 20 of the buffer for retrieval later when it starts growing
64168 LD (HL),E
64169 LD E,0 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)
64171 LD A,E And its initial animatory state will be 0 (ERIC standing, facing left), so it's a good thing it will be off-screen!
64172 CALL 30534 Place address 64175 (below) into bytes 17 and 18 of the plant's buffer and update the SRB for the plant's appearance
The address of this entry point is placed into bytes 17 and 18 of the plant's buffer by the instruction above just after the plant has been watered.
64175 LD L,19 Byte 19 holds the counter that determines the phases of growth (and death) of the plant
64177 DEC (HL) Is the plant ready to die?
64178 JR NZ,64195 Jump if not
64180 LD A,(32749) 32749 holds ERIC's secondary status flags
64183 CP 2 Is ERIC standing on a plant or plant pot?
64185 JR NZ,64192 Jump if not
64187 LD A,16 Set bit 4 at 32749, indicating that ERIC is going to take a fall (even if ERIC's standing on a different plant pot; this is a bug)
64189 LD (32749),A
64192 JP 29903 Kill the plant
The plant is not dead yet. Plan its next move.
64195 LD A,(HL) Pick up the plant lifespan counter in A
64196 CP 8 Is it time for the plant to start growing?
64198 JR NZ,64209 Jump if not
64200 INC L E=x-coordinate of the plant (stored in byte 20 earlier)
64201 LD E,(HL)
64202 LD L,2 Point HL at byte 2 of the plant's buffer
64204 LD D,(HL) D=y-coordinate of the plant
64205 LD A,42 42: flower, half-grown
64207 JR 64216
64209 CP 4 Is it time for the plant to reach full height?
64211 RET NZ Return if not
64212 CALL 25012 Update the SRB for the plant's current animatory state
64215 INC A A=43: flower, fully grown
64216 CALL 24880 Update the plant's animatory state and update the SRB
64219 LD A,(32749) 32749 holds ERIC's status flags
64222 CP 2 Is ERIC standing on a plant?
64224 RET NZ Return if not
64225 LD A,(53761) A=ERIC's x-coordinate
64228 LD L,1 Point HL at byte 1 of the plant's buffer (which holds its x-coordinate)
64230 CP (HL) Is ERIC standing on this plant?
64231 RET NZ Return if not
64232 LD H,210 210=ERIC
64234 CALL 25012 Update the SRB for ERIC's current animatory state and location
64237 DEC D ERIC will rise one level as the plant grows
64238 JP 24880 Update ERIC's location and update the SRB
Prev: 64076 Up: Map Next: 64241