![]() |
Routines |
| Prev: 64218 | Up: Map | Next: 64323 |
|
||||||||
| 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 | Next: 64323 |