![]() |
Routines |
Prev: 64218 | Up: Map |
|
|||||||||
64227 | LD L,2 | Point HL at byte 2 of the character's buffer | |||||||
64229 | LD A,(HL) | A=character's y-coordinate | |||||||
64230 | LD L,21 | Byte 21 of the character's buffer holds his landing y-coordinate | |||||||
64232 | CP (HL) | Has the character landed yet? | |||||||
64233 | JR NZ,64246 | Jump if not | |||||||
64235 | LD L,13 | Is the character Sam, and should he be knocked out upon landing? | |||||||
64237 | BIT 0,(HL) | ||||||||
64239 | RET Z | Return with the carry flag reset (the character has landed) and the zero flag set (he was not knocked out) if not | |||||||
64240 | CALL 63954 | Knock Sam out | |||||||
64243 | LD A,H | Reset the carry flag (Sam has landed) and the zero flag (he was knocked out upon landing) | |||||||
64244 | AND A | ||||||||
64245 | RET | ||||||||
The character has not landed yet.
|
|||||||||
64246 | ADD A,3 | Set the zero flag if the character is at the right height above the roof or ground to hit another character | |||||||
64248 | CP (HL) | ||||||||
64249 | PUSH HL | Save the character number briefly | |||||||
64250 | CALL Z,64162 | Check whether the character has landed on someone | |||||||
64253 | POP HL | Restore the character number to H | |||||||
64254 | JR NZ,64260 | Jump unless the character has landed on someone | |||||||
64256 | LD L,13 | Set byte 13 of the character's buffer to 0: he will not be knocked out upon landing | |||||||
64258 | LD (HL),0 | ||||||||
64260 | LD L,13 | Is the character Sam, and was he dropped from a great enough height that he could be knocked out upon landing? | |||||||
64262 | BIT 0,(HL) | ||||||||
64264 | JR Z,64269 | Jump if not | |||||||
64266 | LD L,4 | Set Sam's z-coordinate to 4 (outside) | |||||||
64268 | LD (HL),L | ||||||||
64269 | LD L,20 | Pick up byte 20 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 | |||||||
64271 | LD A,(HL) | ||||||||
64272 | AND A | Set the zero flag if byte 20 is zero | |||||||
64273 | LD DE,256 | D=1 (default y-coordinate increment), E=0 (default x-coordinate increment) | |||||||
64276 | JR Z,64302 | Jump if the character is falling straight downwards now | |||||||
64278 | DEC (HL) | Decrement byte 20 of the character's buffer | |||||||
64279 | DEC A | Set the carry flag if byte 20 is less than 5 | |||||||
64280 | CP 5 | ||||||||
64282 | LD L,E | L=0 | |||||||
64283 | JR C,64295 | Jump if byte 20 of the character's buffer is less than 5 | |||||||
64285 | LD D,0 | Set the y-coordinate increment to 0 | |||||||
64287 | JR Z,64295 | Jump if byte 20 of the character's buffer is 5 | |||||||
64289 | CALL 59848 | Update the SRB for the character's current animatory state and location | |||||||
64292 | INC A | A=character's next animatory state (midstride) | |||||||
64293 | JR 64317 | 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.
|
|||||||||
64295 | INC E | E=1 | |||||||
64296 | BIT 7,(HL) | Is the character facing right? | |||||||
64298 | JR NZ,64302 | Jump if so | |||||||
64300 | LD E,255 | E=-1 | |||||||
Now D holds the y-coordinate increment (0 or 1), and E holds the x-coordinate increment (-1, 0 or 1).
|
|||||||||
64302 | PUSH DE | Save the x- and y-coordinate increments | |||||||
64303 | CALL 59848 | Update the SRB for the character's current animatory state and location | |||||||
64306 | AND 248 | A=character's base animatory state | |||||||
64308 | LD L,A | Copy this to L | |||||||
64309 | POP BC | Restore the x- and y-coordinate increments to C and B | |||||||
64310 | LD A,B | D=character's next y-coordinate | |||||||
64311 | ADD A,D | ||||||||
64312 | LD D,A | ||||||||
64313 | LD A,C | E=character's next x-coordinate | |||||||
64314 | ADD A,E | ||||||||
64315 | LD E,A | ||||||||
64316 | 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.
|
|||||||||
64317 | CALL 59861 | Update the character's animatory state and location and update the SRB | |||||||
64320 | LD A,H | A=character number (215-230) | |||||||
64321 | ADD A,A | Set the carry flag (the character has not landed yet) | |||||||
64322 | RET |
Prev: 64218 | Up: Map |