Prev: 63281 Up: Map Next: 63386
63304: Make a character walk up and down until somebody knocks on a door
Used by the command lists at 64764, 65059, 65112, 65143 and 65174. Makes the character start walking up or down towards his next walkabout destination, unless the character is on door duty and someone has knocked on the door (in which case this primary command terminates).
Input
H Character number (215-229)
63304 LD L,11 Copy the door identifier (168, 172, 173 or 179) and walkabout duration indicator (0 or 255) from the command list into bytes 11 and 12 of the character's buffer
63306 CALL 61809
This entry point is used by the routine at 63520.
63309 CALL 61823 Get a random number between 32 and 63 in A
63312 AND 31
63314 ADD A,32
63316 LD L,13 Store this number in byte 13 of the character's buffer; it is the number of mini-walkabouts the character will perform (if the walkabout duration indicator in byte 12 is 255)
63318 LD (HL),A
63319 LD L,1 Point HL at byte 1 of the character's buffer
63321 LD A,(HL) A=character's x-coordinate
63322 LD L,10 Copy this into byte 10 of the character's buffer (it will be the walkabout origin)
63324 LD (HL),A
63325 CALL 63409 Change the character's primary command routine address to 63328 (below)
63328 LD BC,63209 Point BC at the interruptible subcommand routine address at 63209
This entry point is used by the routine at 31338 with BC=31319.
63331 LD L,11 Collect the door identifier (168, 172, 173, 175 or 179) from byte 11 of the character's buffer
63333 LD E,(HL)
63334 LD D,127 Point HL at 32680 (always 0) or the door knock status flags for the door in question (see 32682)
63336 EX DE,HL
63337 BIT 7,(HL) Has somebody knocked at the door?
63339 JR Z,63349 Jump if not
63341 LD A,192 Reset bit 7 and set bit 6 of the door knock status flags to indicate that someone is going to answer the door
63343 XOR (HL)
63344 LD (HL),A
63345 EX DE,HL Restore the character number to H
63346 JP 62080 Move to the next command in the command list (which will send the character to the door)
Either nobody has knocked on the door, or the character is not on door duty.
63349 EX DE,HL Restore the character number to H
63350 LD L,12 Collect the walkabout duration indicator (0 or 255) from byte 12 of the character's buffer
63352 LD A,(HL)
63353 INC L L=13
63354 ADD A,(HL) Decrement the walkabout counter in byte 13 of the character's buffer, or leave it unchanged
63355 LD (HL),A
63356 LD L,10 Point HL at byte 10 of the character's buffer
63358 JR NZ,63373 Jump unless the walkabout counter is now 0
The character has finished walking up and down. If the character is not on door duty, we move to the next command in the command list; if the character is on door duty, we move six bytes ahead in the command list (past the door-opening commands).
63360 INC L Collect the door identifier (168, 172, 173, 175 or 179) from byte 11 of the character's buffer
63361 LD A,(HL)
63362 ADD A,87 Set the carry flag if it's > 168 (meaning the character was on door duty)
63364 SBC A,A A=6 if the character was on door duty, 0 otherwise
63365 AND 6
63367 LD L,22 Add 0 or 6 to the character's command list offset (in byte 22 of his buffer)
63369 ADD A,(HL)
63370 LD (HL),A
63371 JR 63346 Terminate this primary command
It's time to set another walkabout destination for this character.
63373 CALL 61823 Get a random number in A
63376 OR 249 A=-6, -4, -2 or 0
63378 INC A
63379 ADD A,(HL) Add the walkabout origin x-coordinate
63380 LD L,16 Store this x-coordinate in byte 16 of the character's buffer
63382 LD (HL),A
63383 JP 63403 Copy the interruptible subcommand routine address (31319 or 63209) from BC into bytes 14 and 15 of the character's buffer, and then jump to it
Prev: 63281 Up: Map Next: 63386