![]() |
Routines |
Prev: F82A | Up: Map | Next: F87E |
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.
|
||||||||
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 |