![]() |
Routines |
| Prev: 6554 | Up: Map | Next: 65CE |
|
||||||||
| 6558 | LD L,$00 | Point HL at byte 0x00 of the character's buffer | ||||||
| 655A | BIT 0,(HL) | Is the teacher midstride? | ||||||
| 655C | JR Z,$656B | Jump if not | ||||||
|
This entry point is used by the routines at 7E7B, F09B and F54A to make the teacher who his chasing ERIC finish his stride.
|
||||||||
| 655E | CALL $61B4 | Update the SRB for the teacher's current animatory state and location | ||||||
| 6561 | LD B,A | Save the animatory state in B temporarily | ||||||
| 6562 | LD L,$0F | Byte 0x0F holds the y-coordinate adjustment to make as the teacher finishes this stride: 0 normally, 1 if descending a staircase (see later in this routine) | ||||||
| 6564 | LD A,(HL) | |||||||
| 6565 | ADD A,D | Make the appropriate y-coordinate adjustment | ||||||
| 6566 | LD D,A | |||||||
| 6567 | LD A,B | Restore the animatory state to A | ||||||
| 6568 | JP $6400 | Make the teacher finish his stride | ||||||
|
The teacher is not midstride. Is he close enough to ERIC to stop the chase?
|
||||||||
| 656B | CALL $6E52 | Is the teacher on a staircase? | ||||||
| 656E | JR C,$6597 | Jump if so | ||||||
| 6570 | LD DE,($D201) | Pick up ERIC's coordinates in DE | ||||||
| 6574 | LD L,$00 | Byte 0x00 holds the teacher's animatory state | ||||||
| 6576 | BIT 7,(HL) | Is the teacher facing left? | ||||||
| 6578 | LD L,$01 | |||||||
| 657A | JR Z,$6580 | Jump if so | ||||||
| 657C | LD A,E | A=ERIC's x-coordinate | ||||||
| 657D | SUB (HL) | Subtract that of the teacher | ||||||
| 657E | JR $6582 | |||||||
| 6580 | LD A,(HL) | A=teacher's x-coordinate | ||||||
| 6581 | SUB E | Subtract that of ERIC | ||||||
| 6582 | CP $04 | Is ERIC less than 4 horizontal spaces in front of the teacher? | ||||||
| 6584 | JR NC,$6594 | Jump if not | ||||||
| 6586 | INC L | L=0x02 | ||||||
| 6587 | LD A,(HL) | A=teacher's y-coordinate | ||||||
| 6588 | SUB $04 | |||||||
| 658A | JR C,$658F | Jump if the teacher's on the top floor | ||||||
| 658C | CP D | Is ERIC at least 4 vertical spaces above the teacher? | ||||||
| 658D | JR NC,$6594 | Jump if so | ||||||
| 658F | ADD A,$07 | Set the carry flag if ERIC is at least 4 vertical spaces below the teacher | ||||||
| 6591 | CP D | |||||||
| 6592 | CCF | Return if ERIC is within 3 vertical spaces either side of the teacher | ||||||
| 6593 | RET C | |||||||
|
The teacher is not close enough to ERIC yet to stop chasing him. Now to figure out the teacher's next move.
|
||||||||
| 6594 | CALL $63BE | D=ERIC's y-coordinate (or the y-coordinate of the floor he's closest to if his feet are not on the floor) | ||||||
| 6597 | CALL $64F3 | Work out how the teacher can reach ERIC from here | ||||||
| 659A | BIT 3,A | Is there a closed door in the way? | ||||||
| 659C | JP NZ,$70A2 | Open it if so | ||||||
|
There is no closed door in the way. Is the teacher on a staircase?
|
||||||||
| 659F | LD BC,$0000 | Initialise the staircase indicator to 0 | ||||||
| 65A2 | CP $02 | Is the teacher descending a staircase? | ||||||
| 65A4 | JR NZ,$65A7 | Jump if not | ||||||
| 65A6 | INC B | B=1 (teacher is descending a staircase) | ||||||
| 65A7 | JR NC,$65AA | Jump if the teacher is not ascending a staircase | ||||||
| 65A9 | DEC C | C=-1 (teacher is ascending a staircase) | ||||||
| 65AA | CP $03 | Is the teacher on a staircase? | ||||||
| 65AC | JR C,$65BD | Jump if so | ||||||
| 65AE | LD L,$00 | Byte 0x00 holds the teacher's animatory state | ||||||
| 65B0 | CP $04 | Set the carry flag if the teacher should go left | ||||||
| 65B2 | BIT 7,(HL) | Set the zero flag if the teacher is facing left | ||||||
| 65B4 | JR C,$65BB | Jump if the teacher must go left to reach ERIC | ||||||
| 65B6 | JR NZ,$65BD | Jump if the teacher is facing right | ||||||
| 65B8 | JP $6430 | Turn the teacher round | ||||||
| 65BB | JR NZ,$65B8 | Turn the teacher round if he's facing right | ||||||
|
Now BC is still 0 if the teacher is not on a staircase. Otherwise, B=1 and C=0 if he's descending a staircase, or B=0 and C=-1 if he's ascending a staircase. The value in B is the y-coordinate adjustment to make when the teacher finishes this stride later, and the value in C is the y-coordinate adjustment to make as he goes midstride now.
|
||||||||
| 65BD | LD L,$0F | Set byte 0x0F of teacher's buffer to 1 if the teacher is descending a staircase, or 0 if he's ascending a staircase or not on one | ||||||
| 65BF | LD (HL),B | |||||||
| 65C0 | PUSH BC | |||||||
| 65C1 | CALL $61B4 | Update the SRB for the teacher's current animatory state and location | ||||||
| 65C4 | POP BC | |||||||
| 65C5 | BIT 0,C | Is the teacher ascending a staircase? | ||||||
| 65C7 | JR Z,$65CA | Jump if not | ||||||
| 65C9 | DEC D | Up a stair as the teacher goes midstride | ||||||
| 65CA | INC A | One foot forward (midstride) | ||||||
| 65CB | JP $6130 | Update the teacher's animatory state and location and update the SRB | ||||||
| Prev: 6554 | Up: Map | Next: 65CE |