![]() |
Routines |
| Prev: B339 | Up: Map | Next: B436 |
|
Used by the routine at 947A.
|
||||
| B372 | LD A,($A012) | Return if FIRE key is hold down | ||
| B375 | OR A | |||
| B376 | RET NZ | |||
| B377 | LD A,($A05D) | Return if Rex not visible | ||
| B37A | OR A | |||
| B37B | RET Z | |||
| B37C | LD A,$01 | Set FIRE key hold down active | ||
| B37E | LD ($A012),A | |||
| B381 | CALL $B506 | Configure weapon sound and check for weapon free slot | ||
| B384 | LD A,($A013) | Check Rex weapon type | ||
| B387 | OR A | is basic laser? | ||
| B388 | JP Z,$B38D | Jump forward if so (no energy loss on fire) | ||
| B38B | LD A,$01 | Set energy loss quantity to 1 | ||
| B38D | CALL $B9EF | Handle weapon energy loss | ||
| B390 | LD A,($A040) | Jump forward if not rapid shot active | ||
| B393 | OR A | |||
| B394 | JP Z,$B3A6 | |||
|
rapid shot active
|
||||
| B397 | LD A,($A041) | Decrement rapid shots quantity | ||
| B39A | DEC A | |||
| B39B | LD ($A041),A | |||
| B39E | OR A | Jump forward if rapid shot not depleted | ||
| B39F | JP NZ,$B3A6 | |||
| B3A2 | XOR A | Rapid shots depleted, inactive rapid shots | ||
| B3A3 | LD ($A040),A | |||
|
check type of weapon
|
||||
| B3A6 | LD A,($A013) | Set A the type of weapon | ||
| B3A9 | CP $04 | is spray? | ||
| B3AB | JP Z,$B456 | Jump to handle spray weapon fire | ||
| B3AE | CP $02 | is laser? | ||
| B3B0 | JP Z,$B41D | Jump to handle laser fire | ||
|
create projectile for basic laser, double fire and multiple
|
||||
| B3B3 | CALL $B5A5 | Create a new projectile for basic laser | ||
| B3B6 | LD (IY+$05),$00 | Set projectile y-delta to 0 | ||
| B3BA | LD A,($A013) | Check weapon type | ||
| B3BD | CP $01 | is double fire? | ||
| B3BF | JP Z,$B40C | Jump to handle double fire weapon | ||
| B3C2 | CP $03 | Return if weapon type is not multiple | ||
| B3C4 | RET NZ | |||
| B3C5 | LD A,($A060) | Return if Rex is teleporting | ||
| B3C8 | OR A | |||
| B3C9 | RET NZ | |||
|
handle fire for multiple
|
||||
| B3CA | LD A,($A014) | Set B the number of drones based on weapon energy level | ||
| B3CD | ADD A,$03 | |||
| B3CF | LD B,A | |||
| B3D0 | LD HL,$5E4E | Set HL the address for the drone configuration data table | ||
| B3D3 | PUSH BC | Save BC | ||
| B3D4 | CALL $B506 | Configure weapon sound and check for weapon free slot | ||
| B3D7 | LD A,(HL) | Set A093 the x-position of the drone | ||
| B3D8 | LD ($A093),A | |||
| B3DB | LD A,($A0BB) | |||
| B3DE | LD A,$01 | Set A097 direction of projectile left | ||
| B3E0 | LD ($A097),A | |||
| B3E3 | LD A,($A0B6) | If x-position of drone is greater than x-position of Rex then set projectile to move right | ||
| B3E6 | CP (HL) | |||
| B3E7 | JP NC,$B3EE | |||
| B3EA | XOR A | |||
| B3EB | LD ($A097),A | |||
| B3EE | LD A,(HL) | if x-position of drone is greater than 240 or less than 16 then jump to process the next drone | ||
| B3EF | INC HL | |||
| B3F0 | CP $F0 | |||
| B3F2 | JP NC,$B404 | |||
| B3F5 | LD A,(HL) | Set A095 the y-position of drone | ||
| B3F6 | LD ($A095),A | |||
| B3F9 | LD A,$03 | Set the y-position increment at A099 | ||
| B3FB | LD ($A099),A | |||
| B3FE | XOR A | Set A the projectile type to 0 | ||
| B3FF | PUSH HL | Save HL | ||
| B400 | CALL $B5C1 | Create a new projectile | ||
| B403 | POP HL | Restore HL | ||
| B404 | LD DE,$0002 | Point HL to the next drone | ||
| B407 | ADD HL,DE | |||
| B408 | POP BC | Restore BC | ||
| B409 | DJNZ $B3D3 | Jump back and process next drone | ||
| B40B | RET | |||
|
Handle double fire weapon
|
||||
| B40C | CALL $B506 | Configure weapon sound and check for weapon free slot | ||
| B40F | LD A,$13 | Set into A099 the increment (19) in y-position for the new projectile | ||
| B411 | LD ($A099),A | |||
| B414 | LD A,($A013) | Reset weapon projectile subtype | ||
| B417 | RES 7,A | |||
| B419 | CALL $B5C1 | Create a new projectile | ||
| B41C | RET | |||
|
Configure laser projectile
|
||||
| B41D | CALL $B5A5 | Create a new projectile | ||
| B420 | LD (IY+$05),$00 | Set y-delta to 0 | ||
| B424 | LD (IY+$0C),$08 | Set laser counter to create laser #6 | ||
| B428 | LD A,(IY+$00) | Set x-position for laser #6 | ||
| B42B | LD (IY+$0D),A | |||
| B42E | LD A,($A068) | Set the laser duration counter | ||
| B431 | DEC A | |||
| B432 | LD (IY+$0E),A | |||
| B435 | RET | |||
| Prev: B339 | Up: Map | Next: B436 |