Prev: 25402 Up: Map Next: 25480
25404: Guide a character to an intermediate destination
The address of this interruptible subcommand routine is placed into bytes 105 and 106 of the character's buffer by the routines at 25303, 25534, 31854 and 32048. It is used to make a character go straight to a destination (or intermediate destination) that is reachable without negotiating any staircases.
Input
H Character number (152-169)
25404 LD L,108 The counter at byte 108 of the character's buffer is initialised by the calling routine to limit the amount of time that this routine has control; terminate this interruptible subcommand if the counter is now zero
25406 DEC (HL)
25407 JP Z,25252
25410 DEC L Collect the x-coordinate of the intermediate destination from byte 107 of the character's buffer
25411 LD A,(HL)
25412 LD L,98 Byte 98 of the character's buffer holds his x-coordinate
25414 CP (HL) Has the character reached the intermediate destination?
25415 JR NZ,25423 Jump if not
25417 LD L,96 Byte 96 of the character's buffer holds his animatory state
25419 BIT 0,(HL) Is the character midstride?
25421 JR Z,25407 Jump if not (nothing left to do)
25423 CALL 25108 Update the SRB for the character's current location
25426 LD C,A Store the character's animatory state in C
25427 LD L,107 Collect the x-coordinate of the intermediate destination from byte 107 of the character's buffer
25429 LD A,(HL)
25430 CP E E holds the character's x-coordinate
25431 LD A,C A=character's animatory state
25432 JR NZ,25440 Jump unless the character has reached the destination
The character has reached the destination, but he is midstride. To complete the journey, he must finish his stride. This entry point is also used by the routine at 27772.
25434 BIT 7,A Is the character facing left?
25436 JR Z,25449 Jump if so
25438 JR 25471
The character has not yet reached the destination. Figure out his next move.
25440 BIT 7,A Now the zero flag indicates which way the character is facing: set=left, reset=right
25442 JR NC,25466 Jump if the character is to the left of his destination
The character is to the right of his destination, and so must proceed leftwards.
25444 RES 7,A Make sure the character is facing left
25446 JP NZ,25008 Update the character's animatory state and update the SRB if he was facing right
25449 INC A A=character's next animatory state
25450 BIT 0,A Will the character be midstride?
25452 JP NZ,25008 Update the character's animatory state and update the SRB if so
25455 DEC E E=character's next x-coordinate (one to the left)
25456 AND 3 Calculate the character's next animatory state in A
25458 LD B,A
25459 LD A,C
25460 AND 252
25462 ADD A,B
25463 JP 25008 Update the character's animatory state and location and update the SRB
The character is to the left of his destination, and so must proceed rightwards.
25466 SET 7,A Make sure the character is facing right
25468 JP Z,25008 Update the character's animatory state and update the SRB if the character was facing left
25471 INC A A=character's next animatory state
25472 BIT 0,A Will the character be midstride?
25474 JP NZ,25008 Update the character's animatory state and update the SRB if so
25477 INC E E=character's next x-coordinate (one to the right)
25478 JR 25456 Jump back to update the character's animatory state and location and update the SRB
Prev: 25402 Up: Map Next: 25480