Routines
 Prev: 32060 Up: Map Next: 32371
32062: Make any nearby teacher give ERIC lines if necessary (2)
Continues from 32032. On entry, A contains a location identifier for ERIC:
ID Region
0 None of the places below (ERIC is never allowed here)
1 Playground
2 Various places in the boys' skool outside classrooms
3 Assembly hall
4 Dining hall
5 Revision Library, just outside the Yellow Room door
6 Science Lab
7 Blue Room
8 Yellow Room
Input
A Location identifier for ERIC (0-8)
32062 AND A Is ERIC in a forbidden zone?
32063 JP Z,32232 Jump with A=0 (0+62=62: YOU ARE NOT ALLOWED HERE) if so
ERIC's not in a forbidden zone. Check whether he's standing on a plant, or riding the bike in the boys' skool.
32066 LD B,A B=ERIC's location identifier (1-8)
32067 LD L,251 HL=32763 (ERIC's status flags)
32069 BIT 1,(HL) Is ERIC on the bike, on a plant, or falling?
32071 JR Z,32091 Jump if not
ERIC is on the bike, on a plant, or falling.
32073 LD L,237 HL=32749 (ERIC's other status flags)
32075 LD A,(HL) Pick these up in A
32076 AND 131 Check bits 0, 1 and 7
32078 JR Z,32091 Jump if ERIC's falling
32080 AND 2 A=2 (2+62=64: GET OFF THE PLANTS) if ERIC's standing on a plant or plant pot
32082 JP NZ,32232 Jump if ERIC is (a) standing on a plant or plant pot, or (b) riding or standing on the saddle of the bike inside the boys' skool
32085 DEC B B=0 now if ERIC's in the playground
32086 LD A,3 3+62=65: DON'T RIDE BIKES IN HERE
32088 JR NZ,32082 Jump if ERIC's riding the bike in the boys' skool
32090 INC B B=ERIC's location identifier (1-8)
Now to check whether ERIC's in the room or area he's supposed to be in this period.
32091 LD L,224 HL=32736 (lesson descriptor)
32093 LD A,(HL) Pick this up in A
32094 AND 15 Keep only the 'room' bits (bits 0-3)
32096 LD C,A Copy the room bits to C
Now the value in C indicates where this lesson takes place:
C Lesson/location
2 Playtime
3 Assembly
4 Dinner
5 Revision Library
6 Science Lab
7 Blue Room
8 Yellow Room
32097 LD L,128 HL=32640 (various game status flags)
32099 BIT 6,(HL) Should ERIC be in class, assembly or the dinner hall by now?
32101 JR NZ,32167 Jump if so
32103 LD L,228 Pick up the MSB of the lesson clock
32105 LD A,(HL)
32106 CP 12 Should ERIC by now have left the classroom he was in last period?
32108 JR C,32134 Jump if so
It's too soon to be telling ERIC to GET ALONG NOW. Check whether he's sitting on the floor anywhere outside the assembly hall.
32110 LD L,251 HL=32763 (ERIC's status flags)
32112 BIT 2,(HL) Is ERIC sitting or lying down?
32114 RET Z Return if not
32115 LD A,(53760) A=ERIC's animatory state
32118 CP 4 4: Is ERIC sitting in a chair?
32120 RET Z Return if so
32121 CP 133 133: ERIC sitting on the floor facing right
32123 LD A,4 4+62=66: GET OFF THE FLOOR
32125 JP NZ,32232 Give lines if ERIC's sitting on the floor facing left, or lying down
32128 LD A,B A=ERIC's location identifier (1-8)
32129 CP 3 ERIC is sitting on the floor facing right; is he in the assembly hall?
32131 JR NZ,32123 Give lines if not
32133 RET
By now, ERIC should have left the classroom he was in last period.
32134 LD A,5 Location IDs 6-8 correspond to the boys' skool classrooms
32136 CP B Is ERIC in the Blue Room, Yellow Room or Science Lab?
32137 JR C,32167 Jump if so
32139 LD A,2 Is it PLAYTIME?
32141 CP C
32142 JR Z,32158 Jump if so
32144 DEC A A=1
32145 CP B B=1 if ERIC's in the playground
32146 LD A,5 5+62=67: GET BACK TO SCHOOL
32148 JR Z,32232 Give lines if ERIC is in the playground
32150 LD A,C Is it ASSEMBLY?
32151 CP 3
32153 JR NZ,32158 Jump if not
32155 CP B Is ERIC in the assembly hall?
32156 JR Z,32182 Jump if so
32158 LD L,251 HL=32763 (ERIC's status flags)
32160 BIT 2,(HL) Is ERIC sitting or lying down?
32162 RET Z Return if not
32163 LD A,4 4+62=66: GET OFF THE FLOOR
32165 JR 32232 Give lines
ERIC should be in class, assembly or the dinner hall by now.
32167 LD A,B A=ERIC's location identifier (1-8)
32168 CP C Compare that with where he should be
32169 LD A,6 6+62=68: GET ALONG NOW
32171 JR NZ,32232 Give lines if ERIC's not where he should be
32173 DEC A A=5
32174 CP C C > 5 if this lesson is in a classroom
32175 JR C,32209 Jump if this lesson is in a classroom
32177 LD A,C Is it ASSEMBLY?
32178 CP 3
32180 JR NZ,32158 Jump if not
32182 LD L,128 HL=32640 (various game status flags)
32184 BIT 7,(HL) Bit 7 is set if ERIC should be sitting down now
32186 LD A,(53760) A=ERIC's animatory state
32189 JR NZ,32196 Jump if ERIC should be sitting facing the stage now
32191 CP 133 133: Is ERIC sitting on the floor facing right?
32193 JR NZ,32158 Jump if not
32195 RET
It's assembly, ERIC is in the assembly hall, and he should be sitting down facing the stage now. Check whether he is.
32196 CP 133 133: Is ERIC sitting on the floor facing right?
32198 RET Z Return if so
32199 LD L,251 HL=32763 (ERIC's status flags)
32201 LD A,7 7+62=69: SIT FACING THE STAGE
32203 BIT 2,(HL) Is ERIC sitting (facing left) or lying down?
32205 JR Z,32232 Tell ERIC to sit facing the stage if not (this is a bug)
32207 JR 32228 Otherwise tell ERIC to sit down
This lesson takes place in a classroom, and ERIC is present. Check whether ERIC is sitting in a chair.
32209 LD A,(53760) A=ERIC's animatory state
32212 CP 4 4: Is ERIC sitting in a chair?
32214 RET Z Return if so
32215 LD L,251 HL=32763 (ERIC's status flags)
32217 BIT 2,(HL) Bit 2 is set if ERIC's sitting or lying on the floor
32219 LD A,4 4+62=66: GET OFF THE FLOOR
32221 JR NZ,32232 Give lines if ERIC's sitting or lying on the floor
32223 LD L,128 HL=32640 (various game status flags)
32225 BIT 7,(HL) Should ERIC be seated by now (bit 7 is set by 61696)?
32227 RET Z Return if not
32228 LD A,8 8+62=70: NOW SIT DOWN
32230 NOP
32231 NOP
At this point, A holds the lines reprimand ID.
32232 AND A Is ERIC in a forbidden zone?
32233 JR NZ,32278 Jump if not
ERIC is somewhere he's never allowed to be.
32235 LD L,128 HL=32640 (various game status flags)
32237 BIT 5,(HL) Is MISS TAKE chasing ERIC?
32239 JR NZ,32277 Jump if so
32241 LD A,(32736) A=lesson descriptor
32244 CP 2 Is it PLAYTIME?
32246 JR Z,32277 Jump if so
32248 LD A,E A=ERIC's x-coordinate
32249 CP 160 Is ERIC in the girls' skool?
32251 JR C,32277 Jump if not
So it's not playtime, ERIC is in the girls' skool, and MISS TAKE is not (yet) chasing him out. Should she start?
32253 LD HL,52226 Point HL at byte 2 of MISS TAKE's buffer
32256 LD A,(HL) A=MISS TAKE's y-coordinate
32257 CP D Are ERIC and MISS TAKE on the same floor?
32258 JR NZ,32275 Jump if not
32260 LD L,29 Set bit 0 of byte 29 of MISS TAKE's character buffer, triggering a restart of her command list (set to 32371 below)
32262 SET 0,(HL)
32264 DEC L Place the address of the command list at 32371 into bytes 27 and 28 of MISS TAKE's buffer; this command list contains a single routine address: 32373
32265 LD (HL),126
32267 DEC L
32268 LD (HL),115
32270 LD HL,32640 32640 holds various game status flags
32273 SET 5,(HL) Signal: MISS TAKE is chasing ERIC
32275 LD H,127 Point HL at the game status buffer page
32277 XOR A 0+62=62: YOU ARE NOT ALLOWED HERE
Check how long it's been since ERIC last got lines.
32278 LD L,247 HL=32759 (MSB of the lines-giving delay counter)
32280 DEC (HL) Reset the zero flag if it's too soon for the teacher who gave ERIC lines last time to give him lines again
32281 INC (HL)
This entry point is used by the routine at 63586 with the zero flag set (meaning any teacher may give ERIC lines) and A holding a lines reprimand ID.
32282 PUSH AF Save the lines reprimand ID and the zero flag
32283 NOP
32284 NOP
32285 JR Z,32296 Jump if any teacher (including the one who gave him lines last time) can give ERIC lines now
It's too soon for the teacher who gave ERIC lines last time to give him lines again. Remove that teacher from lines-giving range temporarily.
32287 LD L,245 Collect from 32757 into H the character number of the teacher who last gave ERIC lines
32289 LD H,(HL)
32290 LD L,1 A=this teacher's x-coordinate
32292 LD A,(HL)
32293 LD (HL),224 Set this teacher's x-coordinate to 224 temporarily to take him out of lines-giving range
32295 LD L,A Save the teacher's real x-coordinate in L
Now to find out which teacher (if any) should give ERIC lines.
32296 PUSH HL
32297 CALL 28002 Find the first adult within lines-giving range of ERIC
32300 POP HL
32301 LD D,A D=character number of this adult, or 0 if there are none in range
32302 POP AF
32303 LD B,A B=lines reprimand ID
32304 JR Z,32310 Jump unless we need to restore the x-coordinate of the teacher who last gave ERIC lines
32306 LD A,L Restore the x-coordinate of the teacher who last gave ERIC lines
32307 LD L,1
32309 LD (HL),A
32310 LD A,D A=character number of the adult who can see ERIC, or 0 if there are no adults in range
32311 CP 205 Is it ALBERT (and therefore none of the teachers)?
32313 RET Z Return if so (ALBERT doesn't give lines)
32314 AND A Can any adult character see ERIC?
32315 RET Z Return if not
A teacher is within lines-giving range.
32316 LD HL,32640 32640 holds various game status flags
32319 BIT 1,(HL) Is MR WACKER chasing ERIC to expel him?
32321 RET NZ Return if so
32322 LD L,245 Store the character number of the lines-giver at 32757
32324 LD (HL),A
32325 LD L,247 Reset the MSB of the lines-giving delay counter at 32759 to 10
32327 LD (HL),10
32329 LD A,B A=lines reprimand ID
32330 CP 6 6+62=68: GET ALONG NOW
32332 JR NZ,32361 Jump unless ERIC is late for class, dinner or assembly
ERIC is late for class, dinner or assembly. The appropriate lines reprimand depends on who saw him: his teacher for this period, or some other teacher.
32334 LD A,(32736) Collect the lesson descriptor from 32736
32337 AND 240 Keep only the bits relating to ERIC's teacher and shift them into bits 0-3
32339 RLCA
32340 RLCA
32341 RLCA
32342 RLCA
32343 ADD A,199 Now A=character number of ERIC's teacher (200-203)
32345 CP D Was it that teacher who saw ERIC?
32346 JR NZ,32361 Jump if not
ERIC's teacher for this period is the lines-giver. His lines reprimand alternates between 'COME ALONG YOU MONSTER' and 'DON'T KEEP ME WAITING'.
32348 LD L,128 HL=32640 (various game status flags)
32350 LD A,16 Set bit 4 in A
32352 LD B,9 9+62=71: COME ALONG YOU MONSTER
32354 XOR (HL) Flip bit 4 in 32640, toggling between 71 and 72
32355 LD (HL),A
32356 BIT 4,(HL) Should ERIC's teacher say 'COME ALONG YOU MONSTER' this time (bit 4 set)?
32358 JR NZ,32361 Jump if so
32360 INC B 10+62=72: DON'T KEEP ME WAITING
At this point D holds the character number of the teacher who is going to give ERIC lines, and B holds the lines reprimand ID.
32361 EX DE,HL Now H=character number of the lines-giver
32362 LD A,B B=lines reprimand ID