Routines |
Prev: 63281 | Up: Map | Next: 63386 |
|
||||||||
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 | ||||||
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 |