| Routines

63558: Make a cat run up or down

The address of this interruptible subcommand routine is placed into bytes 14 and 15 of a cat's buffer by the routine at 63530. It makes a cat run up or down to his next walkabout destination, and then terminates.
Input
H | 218 (Cat)
63558 | LD L,0 | Point HL at byte 0 of the cat's buffer
63560 | BIT 0,(HL) | Is the cat in running phase 2 (animatory state 118/246)?
The cat's animatory state is 117 or 245 (running phase 1). Move him forward and advance his animatory state.
63562 | JR Z,63580 | Jump if so
63564 | CALL 59848 | Update the SRB for the cat's current animatory state and location
63567 | INC A | A=118/246 (cat running phase 2)
63568 | PUSH AF | Save this animatory state briefly
63569 | RLCA | A=-1 if the cat is facing left, 1 if he's facing right
63570 | CCF
63571 | SBC A,A
63572 | ADD A,A
63573 | INC A
63574 | ADD A,E | Adjust the cat's x-coordinate appropriately
63575 | LD E,A
63576 | POP AF | Restore the cat's next animatory state to A
63577 | JP 59861 | Update the cat's animatory state and location and update the SRB
The cat's animatory state is 118 or 246 (running phase 2). Either advance his animatory state, or turn him round.
63580 | LD L,1 | Point HL at byte 1 of the cat's buffer
63582 | LD A,(HL) | A=cat's current x-coordinate
63583 | LD L,11 | The cat's walkabout destination x-coordinate is stored in byte 11 of the cat's buffer
63585 | CP (HL) | Has the cat reached his walkabout destination?
63586 | JP Z,62084 | Terminate this subcommand if so
63589 | LD B,255 | B=-1 (which will set the cat's animatory state to running phase 1)
63591 | LD L,0 | Point HL at byte 0 of the cat's buffer
63593 | BIT 7,(HL) | Set the zero flag if the cat is facing left
63595 | JR C,63610 | Jump if the cat is to the left of his walkabout destination
63597 | JR Z,63601 | Jump if the cat is facing left
63599 | LD B,128 | B=128 (which will turn the cat round)
63601 | PUSH BC | Save the animatory state adjustment
63602 | CALL 59848 | Update the SRB for the cat's current animatory state and location
63605 | POP BC | Restore the animatory state adjustment to B
63606 | ADD A,B | A=cat's next animatory state (running phase 1, or turned round)
63607 | JP 59861 | Update the cat's animatory state and location and update the SRB
63610 | JR NZ,63601 | Jump if the cat is facing right
63612 | JR 63599 | Turn the cat round