![]() |
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 |