Routines |
Prev: F6E5 | Up: Map | Next: F731 |
The address of this interruptible subcommand routine is placed into bytes 0x0E and 0x0F of a character's buffer by the routine at F748. It makes a character start or continue walking up or down towards his walkabout destination, stopping occasionally on the way to flip a light switch or raise or lower a window blind.
|
||||||||
F6E9 | CALL $F698 | Exit now if the character is midstride | ||||||
F6EC | BIT 2,(HL) | Is the character's arm raised? | ||||||
F6EE | JP NZ,$F37B | Lower his arm if so | ||||||
This entry point is used by the routine at 7A57.
|
||||||||
F6F1 | LD L,$11 | The counter in byte 0x11 of the character's buffer determines the delay until the character will next consider flipping a light switch or raising or lowering a window blind | ||||||
F6F3 | DEC (HL) | Decrement that counter | ||||||
F6F4 | JR NZ,$F722 | Jump unless the counter has reached 0 | ||||||
F6F6 | LD (HL),$04 | Reset the counter to 4 (in case the character is not standing next to a light switch or window blind at the moment) | ||||||
F6F8 | CALL $F6B0 | Is the character standing next to a light switch or window blind? | ||||||
F6FB | JR Z,$F722 | Jump if not | ||||||
The character is standing next to a light switch or window blind.
|
||||||||
F6FD | CP $40 | Is the character standing next to a window blind? | ||||||
F6FF | JR C,$F70A | Jump if so | ||||||
F701 | LD A,(DE) | A=fixture location flags | ||||||
F702 | BIT 5,A | Does the light switch affect the lights in more than one window or window pair? | ||||||
F704 | JR NZ,$F722 | Jump if so (the character will not flip the switch) | ||||||
F706 | LD A,$20 | Bit 5 set: light switch toggle | ||||||
F708 | JR $F712 | |||||||
F70A | CP $08 | Set the zero flag if the character standing next to the right-hand window of a pair | ||||||
F70C | LD A,$01 | Bit 0 set: right-hand window blind toggle | ||||||
F70E | JR Z,$F712 | Jump if the character is standing next to the right-hand window of a pair | ||||||
F710 | LD A,$40 | Bit 6 set: left-hand window blind toggle | ||||||
F712 | CALL $F499 | Flip the light switch, or raise or lower the window blind | ||||||
F715 | CALL $F17F | Get a random number between 0x20 and 0x9F in A | ||||||
F718 | AND $7F | |||||||
F71A | ADD A,$20 | |||||||
F71C | LD L,$11 | Reset the counter in byte 0x11 of the character's buffer to this number | ||||||
F71E | LD (HL),A | |||||||
F71F | JP $F33C | Raise the character's arm | ||||||
The character will not be flipping any light switches or raising or lowering any window blinds at this stage of his walkabout.
|
||||||||
F722 | LD L,$01 | Collect the character's x-coordinate from byte 0x01 of his buffer | ||||||
F724 | LD A,(HL) | |||||||
F725 | LD L,$10 | Byte 0x10 of the character's buffer holds his walkabout destination x-coordinate | ||||||
F727 | CP (HL) | Has the character reached his walkabout destination? | ||||||
F728 | JP Z,$F284 | Terminate this subcommand if so | ||||||
F72B | JP C,$EBAE | Move the character right if he's still to the left of his destination | ||||||
F72E | JP $EBBB | Otherwise move him left |
Prev: F6E5 | Up: Map | Next: F731 |