Prev: 63530 Up: Map Next: 63614
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
Prev: 63530 Up: Map Next: 63614