Routines |
Prev: F4CB | Up: Map | Next: F52E |
The address of this continual subcommand routine is placed into bytes 0x17 and 0x18 of ALBERT's buffer by command list 0x4C. Makes ALBERT raise his arm and alert MR WACKER if ERIC enters the 'danger zone' (within 6 spaces to the left of ALBERT). Also makes ALBERT lower his arm if ERIC leaves the danger zone.
|
||||||||
F4CC | LD L,$00 | Point HL at byte 0x00 of ALBERT's buffer | ||||||
F4CE | LD A,(HL) | A=ALBERT's animatory state | ||||||
F4CF | OR $FA | Is ALBERT midstride or lying on his back? | ||||||
F4D1 | RET PO | Return if so | ||||||
F4D2 | LD DE,($D201) | Collect ERIC's coordinates in DE | ||||||
F4D6 | LD A,D | A=ERIC's y-coordinate | ||||||
F4D7 | CP $0E | Is ERIC above the level of the stage? | ||||||
F4D9 | JR C,$F4EA | Jump if so | ||||||
F4DB | LD A,E | A=ERIC's x-coordinate | ||||||
F4DC | CP $60 | Is ERIC inside the boys' skool? | ||||||
F4DE | JR C,$F4EA | Jump if so | ||||||
F4E0 | LD L,$01 | Point HL at byte 0x01 of ALBERT's buffer | ||||||
F4E2 | CP (HL) | Is ERIC to the left of ALBERT? | ||||||
F4E3 | JR NC,$F4EA | Jump if not | ||||||
F4E5 | ADD A,$06 | Is ERIC within 6 spaces to the left of ALBERT? | ||||||
F4E7 | CP (HL) | |||||||
F4E8 | JR NC,$F4F7 | Jump if so | ||||||
ERIC's not in the danger zone. Make ALBERT lower his arm if he has it raised.
|
||||||||
F4EA | LD L,$00 | Point HL at byte 0x00 of ALBERT's buffer | ||||||
F4EC | LD A,(HL) | A=ALBERT's animatory state | ||||||
F4ED | CP $7F | 0x7F: Is ALBERT facing left with his arm up? | ||||||
F4EF | RET NZ | Return if not | ||||||
F4F0 | POP BC | Drop the return address (6357) from the stack | ||||||
F4F1 | POP BC | Drop the character buffer reference used by the routine at 62D0 | ||||||
F4F2 | LD A,$78 | 0x78: ALBERT facing left, standing, with his arm down | ||||||
F4F4 | JP $F3F4 | Update ALBERT's animatory state and SRB | ||||||
ERIC is in the danger zone near ALBERT.
|
||||||||
F4F7 | DEC L | L=0x00 | ||||||
F4F8 | POP BC | Drop the return address (6357) from the stack | ||||||
F4F9 | POP BC | Drop the character buffer reference used by the routine at 62D0 | ||||||
F4FA | BIT 7,(HL) | Is ALBERT facing right? | ||||||
F4FC | JP NZ,$6430 | Turn ALBERT round if so | ||||||
F4FF | LD A,$7F | 0x7F: ALBERT facing left with his arm up | ||||||
F501 | CP (HL) | Is ALBERT already holding ERIC back? | ||||||
F502 | RET Z | Return if so | ||||||
F503 | CALL $F3F4 | Make ALBERT put his arm up and update the SRB | ||||||
F506 | LD HL,$7F80 | 7F80 holds various game status flags | ||||||
F509 | BIT 1,(HL) | Is MR WACKER already looking for ERIC in order to expel him? | ||||||
F50B | JR NZ,$F51E | Jump if so | ||||||
F50D | BIT 2,(HL) | Is MR WACKER already looking for the truant ERIC? | ||||||
F50F | JR NZ,$F51E | Jump if so | ||||||
F511 | SET 2,(HL) | Signal: MR WACKER is looking for the truant ERIC | ||||||
F513 | LD HL,$C81B | Place the address of the command list at F52E into bytes 0x1B and 0x1C of MR WACKER's buffer; this command list contains a single entry: the address of the routine at 7D36 | ||||||
F516 | LD (HL),$2E | |||||||
F518 | INC L | |||||||
F519 | LD (HL),$F5 | |||||||
F51B | INC L | Set bit 0 of byte 0x1D of MR WACKER's buffer, triggering a command list restart (at F52E) | ||||||
F51C | SET 0,(HL) | |||||||
F51E | LD H,$CD | 0xCD=ALBERT | ||||||
F520 | CALL $7400 | Determine the coordinates at which to print ALBERT's exclamation | ||||||
F523 | CALL $6A8C | Save the area of the screen that will be overwritten by the message box | ||||||
F526 | LD BC,$6232 | B=0x62 (MR WACKER^HE'S ESCAPING), C=0x32 (INK 2: PAPER 6) | ||||||
F529 | LD A,$02 | The border colour will be red | ||||||
F52B | JP $7473 | Make ALBERT sound the alarm |
Prev: F4CB | Up: Map | Next: F52E |