Routines |
Prev: 28211 | Up: Map | Next: 28303 |
|
||||||||
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 | This is the y-coordinate of the top floor | ||||||
28268 | JR 28278 | |||||||
28270 | CP 165 | |||||||
28272 | LD A,162 | This is the y-coordinate of the middle floor | ||||||
28274 | JR C,28278 | Jump if the teacher is near or on the middle floor | ||||||
28276 | LD A,169 | This is the y-coordinate of the 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 |