Routines |
Prev: 64076 | Up: Map | Next: 64241 |
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.
|
|||||||||||||||||||||||||||||||
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:
|
|||||||||||||||||||||||||||||||
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 |