| Routines

62D7: Make a character walk up and down until a certain time

Used by command lists 0x88, 0x8C, 0x8E, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9A, 0x9C, 0x9E, 0xA0, 0xA2, 0xA4, 0xA6, 0xA8, 0xAA, 0xAC, 0xAE, 0xB0, 0xB2, 0xB4, 0xBA, 0xBC, 0xC6, 0xC8, 0xCA, 0xCE, 0xD0, 0xD2, 0xD4, 0xD6, 0xD8, 0xDA and 0xDE to make a character walk up and down within 7 spaces to the left of a fixed location (the 'walkabout origin') until a specified time, e.g. the end of the lesson or when a teacher arrives at the doorway of the classroom.
Input
H | Character number (0x98-0xA9)
L | 0x7A
62D7 | LD A,(HL) | Reset bits 5 and 6 of byte 0x7A of the character's buffer, indicating that he should no longer walk fast or slow continuously (if he was doing so)
62D8 | AND $9F
62DA | LD (HL),A
62DB | CALL $618C | Collect the signal byte from the command list
62DE | LD L,$65 | Place the signal byte in byte 0x65 of the character's buffer
62E0 | LD (HL),A
62E1 | LD L,$63 | Change the address in bytes 0x63 and 0x64 of the character's buffer from 62D7 to 62E5 (below)
62E3 | LD (HL),$E5
This entry point is used by the routines at 6B32 and 6B3D.
62E5 | LD L,$65 | Collect the signal byte from byte 0x65 of the character's buffer
62E7 | LD A,(HL)
62E8 | CALL $631E | Has this signal been raised?
62EB | JR Z,$630C | Jump if not
The time has come to stop moving about. However, before we move on in the command list, the character needs to return to the walkabout origin.
62ED | INC L | Collect the x-coordinate of the walkabout origin from byte 0x66 of the character's buffer
62EE | LD A,(HL)
62EF | LD L,$62 | Byte 0x62 holds the character's x-coordinate
62F1 | CP (HL) | Is the character at the walkabout origin?
62F2 | JR NZ,$62FB | Jump if not
62F4 | LD L,$60 | Byte 0x60 holds the character's animatory state
62F6 | BIT 0,(HL) | Is the character midstride?
62F8 | JP Z,$62A8 | Move to the next command in the command list if not
62FB | LD L,$6B | Fill in the new walkabout destination (either the origin or some location within 7 spaces to the left of the origin)
62FD | LD (HL),A
62FE | INC L | Initialise the counter at byte 0x6C to 0x1E, which will give the character enough time to get to the destination
62FF | LD (HL),$1E
6301 | LD BC,$633C | Place the address of the interruptible subcommand routine at 633C (guide character to destination) into bytes 0x69 and 0x6A of the character's buffer
6304 | LD L,$69
6306 | LD (HL),C
6307 | INC L
6308 | LD (HL),B
6309 | INC L |
630A | PUSH BC |
630B | RET | Make an indirect jump to 633C
The signal has not been raised yet, so it's time for another mini-walkabout.
630C | INC L | Point HL at the x-coordinate of the walkabout origin
630D | CALL $61A1 | A=random number
6310 | AND $07 | -7<=A<=0
6312 | SUB $07
6314 | ADD A,(HL) | Add the x-coordinate of the walkabout origin
6315 | JR $62FB | Make this the new walkabout destination