Prev: $1294 Up: Map Next: $136E
$12B5: Make a character go to a location
This corresponds to $63BE in the ZX Spectrum version.
The address of this primary command routine is found in many command lists.
$12B5 JSR $3BE7 Collect the destination x-coordinate from the command list and store it at $A6.
$12B8 STA $A6
$12BA TAX Transfer the destination x-coordinate to X.
$12BB JSR $3BE7 Collect the destination y-coordinate from the command list and store it at $A7.
$12BE STA $A7
$12C0 TAY Transfer the destination y-coordinate to Y.
This entry point is used by the routine at $105B.
$12C1 LDA $3F Reset bit 1 in the flags byte at $3F: the character is not running continuously.
$12C3 AND #$FC
$12C5 STA $3F
This entry point is used by the routine at $284F.
$12C7 JSR $126D Determine the region identifier for the destination coordinates and store it at $A8.
$12CA STA $A8
$12CC LDA #$12 Replace the address of this primary command routine in the character's buffer with that of $12E8 below.
$12CE STA $2A
$12D0 LDA #$E8
$12D2 STA $29
$12D4 LDA $26 Pick up the character's animatory state from $26.
$12D6 AND #$07 Keep only bits 0-2.
$12D8 CMP #$05 Is the character sitting on a chair?
$12DA BNE $12E8 Branch if not.
$12DC JSR $322E Update the SRB for the character's current animatory state and location.
$12DF LDA $26 Clear bits 0-2 of the character's animatory state, making him stand up.
$12E1 AND #$F8
$12E3 STA $26
$12E5 JMP $322E Update the SRB for the character's new animatory state.
This entry point is used on the second and subsequent passes.
$12E8 LDA $26 Pick up the character's animatory state from $26.
$12EA LSR A Is the character midstride?
$12EB BCC $12F0 Branch if not.
$12ED JMP $1390 Move the character from the midstride position.
The character is ready to start making his way to the destination.
$12F0 LDX $FC Pick up the character's current coordinates from $FB.
$12F2 LDY $FB
$12F4 JSR $126D Determine the region identifier for these coordinates and store it at $48.
$12F7 STA $48
$12F9 CMP $A8 Is the character already in the destination region?
$12FB BNE $1313 Branch if not.
The character is in the destination region, so it's just a straight walk left or right from here.
$12FD LDA $A6 Pick up the destination x-coordinate from $A6.
$12FF CMP $FC Does it match the character's x-coordinate?
$1301 BNE $1306 Branch if not.
$1303 JMP $1D2D Otherwise terminate this primary command: the character has reached his destination.
$1306 STA $AC Store the destination x-coordinate at $AC.
$1308 LDA #$13 Place the address of the interruptible subcommand routine at $136F into the character's buffer.
$130A STA $AB
$130C LDA #$6F
$130E STA $AA
$1310 JMP ($00AA) Jump to $136F.
The character is not in the destination region. One or more staircases need to be navigated.
$1313 BCC $1320 Branch if the current region identifier is less than the destination region identifier.
$1315 LDA #$54 Prepare to address the staircase endpoint data table at $4454.
$1317 STA $4E
$1319 LDA #$44
$131B STA $4F
$131D JMP $1328 Jump forward.
$1320 LDA #$40 Prepare to address the staircase endpoint data table at $4440.
$1322 STA $4E
$1324 LDA #$44
$1326 STA $4F
$1328 LDA #$00 Set A equal to 4 multiplied by the region identifier for the character's current location.
$132A LDX $48
$132C BEQ $1334
$132E CLC
$132F ADC #$04
$1331 DEX
$1332 BNE $132E
$1334 TAY Pick up a staircase endpoint x-coordinate from the table at $4440 or $4454.
$1335 LDA ($4E),Y
$1337 CMP $FC Is the character at the top or bottom of the staircase?
$1339 BEQ $1348 Branch if so.
$133B STA $AC Store the staircase endpoint x-coordinate at $AC.
$133D LDA #$13 Place the address of the interruptible subcommand routine at $136F into the character's buffer.
$133F STA $AB
$1341 LDA #$6F
$1343 STA $AA
$1345 JMP ($00AA) Jump to $136F.
The character is at the top or bottom of a staircase that must be navigated.
$1348 INY Pick up the staircase direction indicator ($00 or $80) from the table at $4440 or $4454.
$1349 LDA ($4E),Y
$134B PHA Save it temporarily.
$134C LDA $26 Pick up the character's animatory state from $26.
$134E AND #$80 Keep only the direction bit (bit 7) and store the result at $57.
$1350 STA $57
$1352 PLA Restore the staircase direction indicator to A.
$1353 CMP $57 Is the character facing the right way to start climbing or descending the staircase?
$1355 BEQ $135D Branch if so.
$1357 JSR $322E Update the SRB for the character's current animatory state and location.
$135A JMP $13C6 Turn the character round.
The character is at the top or bottom of a staircase that must be navigated, and is facing the right way to begin the ascent or descent.
$135D LDA #$0F Going up or down a staircase requires 15 movements.
$135F STA $AC Store this counter at $AC.
$1361 INY Collect the interruptible subcommand routine address ($13F3 or $13FA) from the table at $4440 or $4454 and place it into the character's buffer.
$1362 LDA ($4E),Y
$1364 STA $AA
$1366 INY
$1367 LDA ($4E),Y
$1369 STA $AB
$136B JMP ($00AA) Jump to the interruptible subcommand routine.
Prev: $1294 Up: Map Next: $136E