Prev: 30543 Up: Map Next: 30643
30555: Make BOY WANDER fire his catapult now and then
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.
Input
H 206 (BOY WANDER)
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