| Routines

6C7C: Deal with a character who is looking for a seat

The address of this uninterruptible subcommand routine is placed into bytes 0x6F and 0x70 of a character's buffer by the routine at 6C64 (after he's been knocked out of his chair and just got up to look for another one - or the same one, in EINSTEIN's case), or by the routine at 6CA0.
Input
H | Character number (0x98-0xA9)
6C7C | CALL $6214 | Update the SRB for the character's current location
6C7F | LD C,A | Store the character's animatory state in C temporarily
6C80 | BIT 0,A | Is the character midstride?
6C82 | JP NZ,$635A | Finish the stride if so
6C85 | CALL $6BF0 | Is the character standing beside a chair?
6C88 | JP Z,$6B7D | If so, knock the current occupant (if any) to the floor, make this character sit down, and remove the address of this routine from bytes 0x6F and 0x70 of his buffer
6C8B | LD A,C | Restore the character's animatory state to A
6C8C | NOP |
6C8D | JR NC,$6C92 | Jump unless the character should turn round
6C8F | XOR $80 | Flip bit 7 of the animatory state, thus turning him round
6C91 | DEC A | Compensate for the 'INC A' below
6C92 | INC A | A=character's new animatory state (midstride, or just turned round)
6C93 | JP $61B0 | Update the character's animatory state and update the SRB