Prev: F82A Up: Map Next: F87E
F846: Make a cat run up or down
The address of this interruptible subcommand routine is placed into bytes 0x0E and 0x0F of a cat's buffer by the routine at F82A. It makes a cat run up or down to his next walkabout destination, and then terminates.
Input
H 0xDA (Cat)
F846 LD L,$00 Point HL at byte 0x00 of the cat's buffer
F848 BIT 0,(HL) Is the cat in running phase 2 (animatory state 0x76/0xF6)?
The cat's animatory state is 0x75 or 0xF5 (running phase 1). Move him forward and advance his animatory state.
F84A JR Z,$F85C Jump if so
F84C CALL $E9C8 Update the SRB for the cat's current animatory state and location
F84F INC A A=0x76/0xF6 (cat running phase 2)
F850 PUSH AF Save this animatory state briefly
F851 RLCA A=-1 if the cat is facing left, 1 if he's facing right
F852 CCF
F853 SBC A,A
F854 ADD A,A
F855 INC A
F856 ADD A,E Adjust the cat's x-coordinate appropriately
F857 LD E,A
F858 POP AF Restore the cat's next animatory state to A
F859 JP $E9D5 Update the cat's animatory state and location and update the SRB
The cat's animatory state is 0x76 or 0xF6 (running phase 2). Either advance his animatory state, or turn him round.
F85C LD L,$01 Point HL at byte 0x01 of the cat's buffer
F85E LD A,(HL) A=cat's current x-coordinate
F85F LD L,$0B The cat's walkabout destination x-coordinate is stored in byte 0x0B of the cat's buffer
F861 CP (HL) Has the cat reached his walkabout destination?
F862 JP Z,$F284 Terminate this subcommand if so
F865 LD B,$FF B=-1 (which will set the cat's animatory state to running phase 1)
F867 LD L,$00 Point HL at byte 0x00 of the cat's buffer
F869 BIT 7,(HL) Set the zero flag if the cat is facing left
F86B JR C,$F87A Jump if the cat is to the left of his walkabout destination
F86D JR Z,$F871 Jump if the cat is facing left
F86F LD B,$80 B=0x80 (which will turn the cat round)
F871 PUSH BC Save the animatory state adjustment
F872 CALL $E9C8 Update the SRB for the cat's current animatory state and location
F875 POP BC Restore the animatory state adjustment to B
F876 ADD A,B A=cat's next animatory state (running phase 1, or turned round)
F877 JP $E9D5 Update the cat's animatory state and location and update the SRB
F87A JR NZ,$F871 Jump if the cat is facing right
F87C JR $F86F Turn the cat round
Prev: F82A Up: Map Next: F87E