Routines |
Prev: FADA | Up: Map | Next: FB43 |
|
||||||||
FAE3 | LD L,$02 | Point HL at byte 0x02 of the character's buffer | ||||||
FAE5 | LD A,(HL) | A=character's y-coordinate | ||||||
FAE6 | LD L,$15 | Byte 0x15 of the character's buffer holds his landing y-coordinate | ||||||
FAE8 | CP (HL) | Has the character landed yet? | ||||||
FAE9 | JR NZ,$FAF6 | Jump if not | ||||||
FAEB | LD L,$0D | Is the character Sam, and should he be knocked out upon landing? | ||||||
FAED | BIT 0,(HL) | |||||||
FAEF | RET Z | Return with the carry flag reset (the character has landed) and the zero flag set (he was not knocked out) if not | ||||||
FAF0 | CALL $F9D2 | Knock Sam out | ||||||
FAF3 | LD A,H | Reset the carry flag (Sam has landed) and the zero flag (he was knocked out upon landing) | ||||||
FAF4 | AND A | |||||||
FAF5 | RET | |||||||
The character has not landed yet.
|
||||||||
FAF6 | ADD A,$03 | Set the zero flag if the character is at the right height above the roof or ground to hit another character | ||||||
FAF8 | CP (HL) | |||||||
FAF9 | PUSH HL | Save the character number briefly | ||||||
FAFA | CALL Z,$FAA2 | Check whether the character has landed on someone | ||||||
FAFD | POP HL | Restore the character number to H | ||||||
FAFE | JR NZ,$FB04 | Jump unless the character has landed on someone | ||||||
FB00 | LD L,$0D | Set byte 0x0D of the character's buffer to 0: he will not be knocked out upon landing | ||||||
FB02 | LD (HL),$00 | |||||||
FB04 | LD L,$0D | Is the character Sam, and was he dropped from a great enough height that he could be knocked out upon landing? | ||||||
FB06 | BIT 0,(HL) | |||||||
FB08 | JR Z,$FB0D | Jump if not | ||||||
FB0A | LD L,$04 | Set Sam's z-coordinate to 4 (outside) | ||||||
FB0C | LD (HL),L | |||||||
FB0D | LD L,$14 | Pick up byte 0x14 of the character's buffer; this will be non-zero if the character is still moving to the left or right just after stepping off the roof of a building | ||||||
FB0F | LD A,(HL) | |||||||
FB10 | AND A | Set the zero flag if byte 0x14 is zero | ||||||
FB11 | LD DE,$0100 | D=1 (default y-coordinate increment), E=0 (default x-coordinate increment) | ||||||
FB14 | JR Z,$FB2E | Jump if the character is falling straight downwards now | ||||||
FB16 | DEC (HL) | Decrement byte 0x14 of the character's buffer | ||||||
FB17 | DEC A | Set the carry flag if byte 0x14 is less than 5 | ||||||
FB18 | CP $05 | |||||||
FB1A | LD L,E | L=0 | ||||||
FB1B | JR C,$FB27 | Jump if byte 0x14 of the character's buffer is less than 5 | ||||||
FB1D | LD D,$00 | Set the y-coordinate increment to 0 | ||||||
FB1F | JR Z,$FB27 | Jump if byte 0x14 of the character's buffer is 5 | ||||||
FB21 | CALL $E9C8 | Update the SRB for the character's current animatory state and location | ||||||
FB24 | INC A | A=character's next animatory state (midstride) | ||||||
FB25 | JR $FB3D | Make the character take the first step off the edge of the roof | ||||||
The character is midstride on the edge of the roof. The next step (to the left or right) will place him in mid-air.
|
||||||||
FB27 | INC E | E=1 | ||||||
FB28 | BIT 7,(HL) | Is the character facing right? | ||||||
FB2A | JR NZ,$FB2E | Jump if so | ||||||
FB2C | LD E,$FF | E=-1 | ||||||
Now D holds the y-coordinate increment (0 or 1), and E holds the x-coordinate increment (-1, 0 or 1).
|
||||||||
FB2E | PUSH DE | Save the x- and y-coordinate increments | ||||||
FB2F | CALL $E9C8 | Update the SRB for the character's current animatory state and location | ||||||
FB32 | AND $F8 | A=character's base animatory state | ||||||
FB34 | LD L,A | Copy this to L | ||||||
FB35 | POP BC | Restore the x- and y-coordinate increments to C and B | ||||||
FB36 | LD A,B | D=character's next y-coordinate | ||||||
FB37 | ADD A,D | |||||||
FB38 | LD D,A | |||||||
FB39 | LD A,C | E=character's next x-coordinate | ||||||
FB3A | ADD A,E | |||||||
FB3B | LD E,A | |||||||
FB3C | LD A,L | A=character's base animatory state | ||||||
Now A, E and D hold the character's new animatory state and x- and y-coordinates.
|
||||||||
FB3D | CALL $E9D5 | Update the character's animatory state and location and update the SRB | ||||||
FB40 | LD A,H | A=character number (0xD7-0xE6) | ||||||
FB41 | ADD A,A | Set the carry flag (the character has not landed yet) | ||||||
FB42 | RET |
Prev: FADA | Up: Map | Next: FB43 |