Routines |
Prev: F28C | Up: Map | Next: F2DF |
Used by the routine at F7AD when bit 7 at 7FFB is set (by the routine at 74C8). Note that the routine at 663F also sets bit 7 at 7FFB when someone sits in the seat occupied by ERIC, but in that case this routine is not called because bit 2 at 7FFB is still set (indicating that ERIC is sitting) and takes precedence; this is a bug.
|
||||
F28E | LD HL,$7FDD | 7FDD holds ERIC's knockout delay counter | ||
F291 | LD A,(HL) | Is this the first time this routine's been called since ERIC was downed? | ||
F292 | AND A | |||
F293 | JR Z,$F2A0 | Jump if so | ||
F295 | DEC (HL) | Otherwise wait a while before enabling ERIC to stand up again | ||
F296 | RET NZ | |||
F297 | LD L,$F3 | HL=7FF3 (ERIC's main action timer) | ||
F299 | LD (HL),$01 | Set this to 1 so that the keyboard is checked on the next pass through the main loop | ||
F29B | LD L,$FB | HL=7FFB (ERIC's status flags) | ||
F29D | LD (HL),$04 | Set bit 2: ERIC is sitting or lying down; the routine at F2E2 handles ERIC from this point | ||
F29F | RET | |||
ERIC has just been hit. Determine the manner of his descent to the floor.
|
||||
F2A0 | LD (HL),$28 | Initialise ERIC's knockout delay counter at 7FDD to 40 | ||
F2A2 | LD H,$D2 | 0xD2=ERIC | ||
F2A4 | CALL $61B4 | Update the SRB for ERIC's current animatory state and location | ||
F2A7 | PUSH DE | Save ERIC's coordinates briefly | ||
F2A8 | PUSH AF | Save ERIC's current animatory state briefly | ||
F2A9 | CP $04 | 0x04: Was ERIC sitting on a chair? | ||
F2AB | JR NZ,$F2B6 | Jump if not | ||
F2AD | CALL $7D00 | Get the identifier of ERIC's location | ||
F2B0 | LD B,$05 | 0x05: ERIC sitting on the floor | ||
F2B2 | CP $06 | Is ERIC in a classroom in the boys' skool (A=6, 7 or 8)? | ||
F2B4 | JR NC,$F2B8 | Jump if so | ||
F2B6 | LD B,$06 | 0x06: ERIC lying on his back | ||
F2B8 | POP AF | Restore ERIC's current animatory state to A | ||
F2B9 | POP DE | Restore ERIC's coordinates to DE | ||
F2BA | AND $80 | Keep only the 'direction' bit (bit 7) of ERIC's current animatory state | ||
F2BC | ADD A,B | A=ERIC's new animatory state (sitting on the floor or lying on his back) | ||
F2BD | CALL $6130 | Update ERIC's animatory state and update the SRB | ||
F2C0 | CALL $62A0 | Update the display | ||
Now to initialise the sound effect parameters.
|
||||
F2C3 | LD HL,$0113 | H=0x01 (pitch adjustment), L=0x13 (border colour XOR mask) | ||
|
||||
F2C6 | LD DE,$0000 | D=0x00 (duration), E=0x00 (initial pitch) | ||
F2C9 | LD A,$02 | A=0x02 (initial border colour) | ||
F2CB | XOR L | Make a sound effect | ||
F2CC | OUT ($FE),A | |||
F2CE | LD B,E | |||
F2CF | DJNZ $F2CF | |||
F2D1 | LD B,A | |||
F2D2 | LD A,E | |||
F2D3 | ADD A,H | |||
F2D4 | LD E,A | |||
F2D5 | LD A,B | |||
F2D6 | DEC D | |||
F2D7 | JR NZ,$F2CB | |||
This entry point is used by the routine at 5F9D.
|
||||
F2D9 | EI | Re-enable interrupts | ||
F2DA | LD A,$01 | Reset the border colour to blue | ||
F2DC | OUT ($FE),A | |||
F2DE | RET |
Prev: F28C | Up: Map | Next: F2DF |