![]() |
Routines |
Prev: 30543 | Up: Map | Next: 30643 |
The address of this continual subcommand routine is placed into bytes 23 and 24 of BOY WANDER's buffer by command lists 32, 46 and 50, and is also used by the routine at 63492. It decides whether BOY WANDER should let rip with a pellet, and gets the catapult-firing action under way if so.
|
||||
30555 | LD A,(54546) | Pick up byte 18 of buffer 213 (BOY WANDER's pellet) | ||
30558 | AND A | Is there a uninterruptible subcommand routine address in bytes 17 and 18 of the buffer? | ||
30559 | RET NZ | Return if so (this buffer is in use) | ||
30560 | LD L,A | L=0 | ||
30561 | BIT 0,(HL) | Is BOY WANDER midstride? | ||
30563 | RET NZ | Return if so | ||
30564 | INC L | L=1 | ||
30565 | LD A,(HL) | A=BOY WANDER's x-coordinate | ||
30566 | AND 3 | Return unless BOY WANDER's x-coordinate is divisible by 4 | ||
30568 | RET NZ | |||
30569 | CALL 30543 | Is BOY WANDER exactly on the top, middle, or bottom floor? | ||
30572 | RET NZ | Return if not | ||
30573 | CALL 25233 | A=random number | ||
30576 | RRCA | Return half the time | ||
30577 | RET NC | |||
30578 | CALL 28004 | Can any adults see BOY WANDER? | ||
30581 | RET C | Return if so | ||
30582 | POP BC | Drop the return address (25431) | ||
30583 | POP BC | Pop the value of HL that was pushed on to the stack by the routine at 25296 before coming here; RET will now take us back either to 25296 to move the next character, or to the main loop | ||
30584 | CALL 25012 | Update the SRB for BOY WANDER's current animatory state and location | ||
30587 | LD L,20 | Store BOY WANDER's current animatory state in byte 20 of his buffer for the time being | ||
30589 | LD (HL),A | |||
30590 | AND 240 | |||
30592 | ADD A,10 | A=26 or 154: BOY WANDER raising his arm to fire | ||
30594 | CALL 30534 | Update BOY WANDER's animatory state and hand over to 30597 (below) | ||
30597 | CALL 25012 | Update the SRB for BOY WANDER's current animatory state | ||
30600 | INC A | A=27 or 155: BOY WANDER firing the catapult | ||
30601 | CALL 30534 | Update BOY WANDER's animatory state and hand over to 30604 (below) | ||
30604 | LD L,17 | Place the address of the uninterruptible subcommand routine at 30643 into bytes 17 and 18 of BOY WANDER's buffer | ||
30606 | LD (HL),179 | |||
30608 | LD A,(54546) | Pick up byte 18 of buffer 213 (BOY WANDER's pellet) | ||
30611 | AND A | Is this buffer already being used? | ||
30612 | RET NZ | Return if so | ||
30613 | LD B,213 | Use buffer 213 for BOY WANDER's catapult pellet | ||
This entry point is used by the routine at 63861 with H=210 (ERIC) and B=214 (ERIC's pellet).
|
||||
30615 | LD L,0 | Point HL at byte 0 of the shooter's character buffer | ||
30617 | LD A,(HL) | A=shooter's animatory state | ||
30618 | AND 128 | A=128 if the pellet will travel right, 0 if left | ||
30620 | ADD A,79 | A=79/207: catapult pellet travelling left/right | ||
30622 | INC L | Collect the initial coordinates of the pellet from the shooter's buffer into DE | ||
30623 | LD E,(HL) | |||
30624 | INC L | |||
30625 | LD D,(HL) | |||
30626 | LD H,B | H=buffer to be used for the pellet (213 if it's BOY WANDER's, 214 if it's ERIC's) | ||
30627 | LD (HL),D | Fill in the initial coordinates and animatory state of the pellet | ||
30628 | DEC L | |||
30629 | LD (HL),E | |||
30630 | DEC L | |||
30631 | LD (HL),A | |||
30632 | LD L,17 | Place the address of the pellet-controlling uninterruptible subcommand routine at 30380 into bytes 17 and 18 of the pellet's buffer | ||
30634 | LD (HL),172 | |||
30636 | INC L | |||
30637 | LD (HL),118 | |||
30639 | INC L | L=19 | ||
30640 | LD (HL),13 | The pellet will travel 13 spaces | ||
30642 | RET |
Prev: 30543 | Up: Map | Next: 30643 |