| Routines

F5AC: Guide a character up or down staircases

The address of this interruptible subcommand routine is placed into bytes 0x0E and 0x0F of a character's buffer by the routine at F600. It guides the character down to the first floor of a building (so that he can then leave it on the way to his final destination), or up to the floor he is heading for.
Input
H | Character number (0xD7-0xE5)
F5AC | LD L,$00 | Point HL at byte 0x00 of the character's buffer
F5AE | BIT 0,(HL) | Is the character midstride?
F5B0 | JP NZ,$EC5A | If so, move the character from the midstride position and update the SRB
F5B3 | LD L,$03 | Has this character's command list been marked for a restart?
F5B5 | BIT 4,(HL)
F5B7 | JP NZ,$F284 | Terminate this subcommand if so (this jump is never made because bit 4 of byte 0x03 is unused)
F5BA | DEC L | L=2
F5BB | LD A,(HL) | A=character's y-coordinate
F5BC | LD L,$10 | Compare it with the y-coordinate of the character's intermediate or final destination
F5BE | CP (HL)
F5BF | JP Z,$F284 | Terminate this subcommand if they match
F5C2 | PUSH AF | Save the carry flag
F5C3 | CALL $F485 | Make the character consider flipping a light switch
F5C6 | POP AF | Restore the carry flag
F5C7 | JP C,$EBA0 | Make the character move down if he's above the level of his destination
F5CA | JP $EB9B | Otherwise make the character move up