Routines |
Prev: 27352 | Up: Map | Next: 27508 |
Used by the routine at 27136.
|
||||
27357 | XOR A | Set A to zero | ||
This entry point is used by the routine at 27352.
|
||||
27358 | LD (27393),A | Prepare to set Magic Knight's x-velocity to A | ||
27361 | LD HL,37087 | Point HL at end of table of y-velocities sequence for jumping and falling | ||
27364 | LD (37072),HL | Store current position at 37072 | ||
27367 | LD A,(23474) | If Magic Knight's movement flags are reset... | ||
27370 | OR A | ... | ||
27371 | JR Z,27377 | ...then skip ahead to 27377 | ||
27373 | XOR A | Prepare to set Magic Knight's x-velocity to zero... | ||
27374 | LD (27393),A | ... | ||
27377 | LD HL,(37072) | Load current position in y-velocities table into HL | ||
27380 | LD A,(HL) | Load current y-velocity from table into A | ||
27381 | CP 7 | If velocity is 7... | ||
27383 | JR Z,27389 | ...then skip ahead to 27389 | ||
27385 | DEC HL | Step pointer back one byte in y-velocities table | ||
27386 | LD (37072),HL | Store pointer | ||
27389 | LD (25161),A | Load last y-velocity read from table into Magic Knight's y-velocity | ||
27392 | LD A,0 | Set Magic Knight's x-velocity... | ||
27394 | LD (25160),A | ... | ||
27397 | LD A,(25156) | Load A with Magic Knight's current x-coordinate (pixels) | ||
27400 | ADD A,4 | Add 4 to x-coordinate | ||
27402 | CALL 28625 | Divide x-coordinate by eight, rounding down to nearest integer | ||
27405 | LD C,A | Load result (Magic Knight's x-coordinate in characters) into C, setting B to zero... | ||
27406 | LD B,0 | ... | ||
27408 | LD A,(25157) | Load A with Magic Knight's current y-coordinate (pixels) | ||
27411 | AND 7 | If y-coordinate is a multiple of eight... | ||
27413 | JR Z,27417 | ...then skip ahead to 27417 | ||
y-coordinate is not a multiple of eight
|
||||
27415 | LD B,8 | Set B to 8, as we need to look one character block lower due to Magic Knight spanning five, rather than four, characters | ||
27417 | LD A,(25157) | Load A with Magic Knight's current y-coordinate (pixels) | ||
27420 | ADD A,B | Add B to current y-coordinate (i.e. y-coordinate of highest full character block spanned by Magic Knight) | ||
27421 | ADD A,32 | Add 32 (as Magic Knight is 32 pixels high, so now y-coordinate of highest full character block not occupied by Magic Knight) | ||
27423 | CALL 28625 | Divide A by eight, rounding down to nearest integer | ||
27426 | LD B,A | Load result (y-coordinate in characters) into B | ||
27427 | CALL 54162 | Point HL at terrain interaction data for character coordinates x=C, y=B (block that Magic Knight is "falling through") | ||
27430 | LD A,(HL) | If this block, or the one to the right of it cannot be passed vertically (downwards)... | ||
27431 | INC HL | ...(i.e. Magic Knight has landed)... | ||
27432 | OR (HL) | ... | ||
27433 | BIT 7,A | ... | ||
27435 | JR NZ,27476 | ...then skip ahead to 27476 | ||
27437 | CALL 27508 | Kill Magic Knight's x-velocity if he cannot horizontally pass through a block beside him | ||
27440 | LD A,(25160) | Load Magic Knight's x-velocity into B... | ||
27443 | LD B,A | ... | ||
27444 | LD A,(23474) | Load Magic Knight's movement flags into A | ||
27447 | XOR B | Check: | ||
27448 | CP 255 | If x-velocity is -2 (left), and Magic Knight can't move left... | ||
27450 | JP Z,27498 | ...then jump ahead to 27498 | ||
27453 | CP 253 | If x-velocity is -2 (left), and Magic Knight can't move left or right... | ||
27455 | JP Z,27498 | ...then jump ahead to 27498 | ||
27458 | CP 1 | If x-velocity is +2 (right), and Magic Knight can't move left or right... | ||
27460 | JP Z,27498 | ...then jump ahead to 27498 | ||
27463 | OR A | If x-velocity is +2 (right), and Magic Knight can't move right... | ||
27464 | JP Z,27498 | ...then jump ahead to 27498 | ||
27467 | CALL 53115 | Erase Magic Knight from display, advance his current position then redraw | ||
27470 | CALL 28457 | Set Magic Knight's velocity to zero, if appropriate move to new room, execute room-specific routine | ||
27473 | JP 27367 | Loop back to 27367 | ||
27476 | LD A,(25157) | Load A with Magic Knight's current y-coordinate (pixels) | ||
27479 | AND 7 | Retain only pixel-within-character component (e.g. 5 pixels down the pair of character blocks) | ||
27481 | NEG | Negate (i.e. -5 pixels) | ||
27483 | AND 7 | Retain only pixel-within-character component (e.g. 3 pixels up the pair of character blocks, or 3 pixels down to the ground) | ||
27485 | LD (25161),A | Set Magic Knight's y-velocity so that it will take his feet to the ground | ||
27488 | CALL 53115 | Erase Magic Knight from display, advance his current position then redraw | ||
27491 | LD HL,0 | Set Magic Knight's x- and y-velocities to zero... | ||
27494 | LD (25160),HL | ... | ||
27497 | RET | Return (Magic Knight has landed) | ||
27498 | XOR A | Set Magic Knight's x-velocity to zero... | ||
27499 | LD (25160),A | ... | ||
27502 | LD (27393),A | Prepare to set Magic Knight's x-velocity to zero | ||
27505 | JP 27467 | Loop back to 27467 |
Prev: 27352 | Up: Map | Next: 27508 |