![]() |
Routines |
Prev: 28211 | Up: Map | Next: 28303 |
Used by the routines at 28446, 28672 and 62495. Returns with the carry flag set if the boy can be seen by a teacher, and the teacher's character number in H'.
|
||||
28220 | CALL 28304 | Get the floor (155, 162, 169) nearest to the character in D | ||
This entry point is used by the routine at 30636.
|
||||
28223 | CALL 28327 | Get the teacher's visibility range in [C,B] | ||
28226 | EXX | |||
28227 | LD B,4 | There are 4 teachers | ||
28229 | LD H,163 | And the first is 163=MR WACKER | ||
28231 | LD L,98 | Collect the teacher's x-coordinate from byte 98 of his buffer | ||
28233 | LD A,(HL) | |||
28234 | EXX | |||
28235 | CP B | Is the teacher at or to the left of the upper bound of the visibility range? | ||
28236 | JR Z,28247 | Jump if so | ||
28238 | JR C,28247 | |||
28240 | EXX | |||
28241 | INC H | Next teacher | ||
28242 | DJNZ 28231 | Jump back until all four teachers are done | ||
28244 | AND A | Clear the carry flag to indicate that the boy wasn't seen by a teacher | ||
28245 | EXX | |||
28246 | RET | |||
28247 | CP C | Is the teacher to the left of the lower bound of the visibility range? | ||
28248 | JR C,28240 | Jump back to consider the next teacher if so | ||
The teacher's x-coordinate is within the visibility range [C,B]. Now check his y-coordinate.
|
||||
28250 | EXX | |||
28251 | LD L,112 | Is there an uninterruptible subcommand routine address in bytes 111 and 112 of the teacher's buffer? | ||
28253 | LD A,(HL) | |||
28254 | AND A | |||
28255 | JR NZ,28241 | Jump back to consider the next teacher if so (this one is occupied) | ||
28257 | LD L,97 | Collect the teacher's y-coordinate from byte 97 of his buffer | ||
28259 | LD A,(HL) | |||
28260 | INC L | L=98 | ||
28261 | EXX | |||
28262 | CP 158 | Is the teacher near or on the top floor? | ||
28264 | JR NC,28270 | Jump if not | ||
28266 | LD A,155 | 155=top floor | ||
28268 | JR 28278 | |||
28270 | CP 165 | |||
28272 | LD A,162 | 162=middle floor | ||
28274 | JR C,28278 | Jump if the teacher is near or on the middle floor | ||
28276 | LD A,169 | 169=bottom floor | ||
28278 | CP D | Is the teacher within the y-coordinate visibility range? | ||
28279 | JR NZ,28240 | Jump back to consider the next teacher if not | ||
The teacher is close enough to the boy to see him. But is the teacher facing the right way?
|
||||
28281 | EXX | |||
28282 | LD A,(HL) | A=teacher's x-coordinate | ||
28283 | EXX | |||
28284 | CP E | Is the teacher standing right where the boy is? | ||
28285 | SCF | Return with the carry flag set if so | ||
28286 | RET Z | |||
28287 | CP E | A=128 if the boy is to the right of the teacher, 0 if the boy is to the left | ||
28288 | LD A,0 | |||
28290 | RRA | |||
28291 | EXX | |||
28292 | LD L,96 | Byte 96 of the teacher's buffer holds his animatory state | ||
28294 | XOR (HL) | Reset bit 7 of A if the teacher is facing the boy | ||
28295 | LD L,98 | |||
28297 | EXX | |||
28298 | RLCA | Push bit 7 of A into the carry flag | ||
28299 | CCF | Return with the carry flag set if the teacher is facing the boy | ||
28300 | RET C | |||
28301 | JR 28240 | Otherwise consider the next teacher |
Prev: 28211 | Up: Map | Next: 28303 |