![]() |
Routines |
Prev: BF4B | Up: Map | Next: C141 |
Used by the routine at BEF1.
Create projectile for PLANT
|
||||
BF4F | PUSH AF | Save AF and DE | ||
BF50 | PUSH DE | |||
BF51 | CALL $B5B6 | Configure weapon sound and check for weapon free slot | ||
BF54 | LD A,(IX+$00) | Set x-position for the projectile | ||
BF57 | SUB $08 | |||
BF59 | LD ($A22C),A | |||
BF5C | LD A,$08 | Set increment of y-position for the projectile | ||
BF5E | CALL $B5D4 | Create a new projectile | ||
BF61 | LD (IY+$0B),$87 | Set projectile type to seed plant | ||
BF65 | LD (IY+$0C),$00 | Set projectile trajectory index | ||
BF69 | POP DE | Restore DE | ||
BF6A | LD (IY+$04),E | Set x-delta for the projectile | ||
BF6D | POP AF | Restore AF | ||
BF6E | SLA A | Computes index into table of trajectory addresses | ||
BF70 | SLA A | |||
BF72 | LD (IY+$0E),A | |||
BF75 | RET | |||
PLANT is closing
|
||||
BF76 | LD L,(IX+$04) | Point to the next graphic data | ||
BF79 | LD H,(IX+$05) | |||
BF7C | LD DE,$0020 | |||
BF7F | AND A | |||
BF80 | SBC HL,DE | |||
BF82 | LD (IX+$04),L | |||
BF85 | LD (IX+$05),H | |||
BF88 | DEC (IX+$12) | Decrement state change counter | ||
BF8B | JP NZ,$BD59 | Jump back and process next enemy if counter is not zero | ||
BF8E | LD (IX+$11),$00 | Set state to standing-by | ||
BF92 | JP $BD59 | Jump back and process next enemy | ||
PLANT is standing-by
|
||||
BF95 | CALL $A51D | Generate a random number | ||
BF98 | CP $0A | if number greater than 10 then jump back and process next enemy | ||
BF9A | JP NC,$BD59 | |||
BF9D | LD (IX+$11),$01 | Set Plant opening | ||
BFA1 | LD (IX+$12),$06 | Set state change counter | ||
BFA5 | JP $BD59 | Jump back and process next enemy | ||
Handle BULB
|
||||
BFA8 | LD A,(IX+$11) | Check status indicator | ||
BFAB | OR A | BULB state is standing-by? | ||
BFAC | JP Z,$C01F | Jump if so | ||
BFAF | CP $01 | BULB state is expanding? | ||
BFB1 | JP Z,$BFBC | Jump if so | ||
BFB4 | CP $02 | BULB state is retracting? | ||
BFB6 | JP Z,$C000 | Jump if so | ||
BFB9 | JP $BD59 | Jump back and continue processing the next enemy | ||
BULB is expanding
|
||||
BFBC | LD L,(IX+$04) | Point to the next graphic data for the sprite | ||
BFBF | LD H,(IX+$05) | |||
BFC2 | LD DE,$0020 | |||
BFC5 | ADD HL,DE | |||
BFC6 | LD (IX+$04),L | |||
BFC9 | LD (IX+$05),H | |||
BFCC | DEC (IX+$12) | Decrement state change counter | ||
BFCF | JP NZ,$BD59 | Jump back and process next enemy if state change counter is not zero | ||
BFD2 | LD (IX+$11),$02 | Set state to retract BULB | ||
BFD6 | LD (IX+$12),$05 | Set state change counter | ||
BULB fires weapon
|
||||
BFDA | LD A,$04 | Set the projectile type to spray | ||
BFDC | LD ($A1ED),A | |||
BFDF | CALL $B5B6 | Configure weapon sound and check for weapon free slot | ||
BFE2 | CALL $C141 | Configure projectile | extra-left | ||
BFE5 | CALL $B5B6 | Configure weapon sound and check for weapon free slot | ||
BFE8 | CALL $C15B | Configure projectile | left | ||
BFEB | CALL $B5B6 | Configure weapon sound and check for weapon free slot | ||
BFEE | CALL $C181 | Configure projectile | middle | ||
BFF1 | CALL $B5B6 | Configure weapon sound and check for weapon free slot | ||
BFF4 | CALL $C19B | Configure projectile | right | ||
BFF7 | CALL $B5B6 | Configure weapon sound and check for weapon free slot | ||
BFFA | CALL $C1B3 | Configure projectile | extra-right | ||
BFFD | JP $BD59 | Jump back and process next enemy | ||
BULB is retracting
|
||||
C000 | LD L,(IX+$04) | Point to the next graphic data for the sprite | ||
C003 | LD H,(IX+$05) | |||
C006 | LD DE,$0020 | |||
C009 | AND A | |||
C00A | SBC HL,DE | |||
C00C | LD (IX+$04),L | |||
C00F | LD (IX+$05),H | |||
C012 | DEC (IX+$12) | Decrement state change counter | ||
C015 | JP NZ,$BD59 | Jump back and process next enemy if state change counter is not zero | ||
C018 | LD (IX+$11),$00 | Set state to stand-by BULB | ||
C01C | JP $BD59 | Jump back and process next enemy | ||
BULB is standing-by
|
||||
C01F | CALL $A51D | Computes a random number | ||
C022 | CP $0A | Jump back and process next enemy if random number is greater than 10 | ||
C024 | JP NC,$BD59 | |||
C027 | LD (IX+$11),$01 | Change state to expanding | ||
C02B | LD (IX+$12),$05 | Set state change counter | ||
C02F | JP $BD59 | Jump back and process next enemy | ||
Handle Foot Man dying 6
|
||||
C032 | LD A,(IX+$11) | Set A to state change counter | ||
C035 | CP $04 | counter is 4? | ||
C037 | JP NZ,$C04C | Jump if not | ||
C03A | LD HL,$AF7A | Set address for animation offsets of dying foot man | ||
C03D | LD (IX+$0A),L | |||
C040 | LD (IX+$0B),H | |||
C043 | LD HL,$82B8 | Set graphic data for dying Foot man 7 | ||
C046 | LD (IX+$16),L | |||
C049 | LD (IX+$17),H | |||
C04C | DEC (IX+$11) | Decrement state change counter | ||
C04F | JP NZ,$BD27 | If not zero jump back and continue to process other enemies | ||
C052 | LD (IX+$09),$07 | Set enemy type to FOOT MAN dying 7 | ||
C056 | JP $BD27 | Jump back and continue to process other enemies | ||
Handle explosion and configure gift: bubble, smartbomb or question
Handle debris expansion
|
||||
C059 | LD HL,$AA57 | Set HL to the offset of positions for debris 1 | ||
C05C | CALL $C25E | Handle debris movement and draw it | ||
C05F | LD HL,$AA67 | Set HL to the offset of positions for debris 2 | ||
C062 | CALL $C25E | Handle debris movement and draw it | ||
C065 | LD HL,$AA77 | Set HL to the offset of positions for debris 3 | ||
C068 | CALL $C25E | Handle debris movement and draw it | ||
C06B | LD HL,$AA87 | Set HL to the offset of positions for debris 4 | ||
C06E | CALL $C25E | Handle debris movement and draw it | ||
C071 | LD HL,$AA97 | Set HL to the offset of positions for debris 5 | ||
C074 | CALL $C25E | Handle debris movement and draw it | ||
C077 | LD HL,$AAA7 | Set HL to the offset of positions for debris 6 | ||
C07A | CALL $C25E | Handle debris movement and draw it | ||
C07D | INC (IX+$03) | Increment explosion debris counter | ||
Draw central explosion
|
||||
C080 | LD A,(IX+$00) | Set A248 the x-pixel-position of the explosion | ||
C083 | LD ($A248),A | |||
C086 | LD A,(IX+$01) | Set A249 the x-pixel-position of the explosion | ||
C089 | LD ($A249),A | |||
C08C | CALL $BC17 | Draw random attribute color for explosion | ||
C08F | LD L,(IX+$04) | Increment the graphic data address for the explosion | ||
C092 | LD H,(IX+$05) | |||
C095 | LD DE,$0048 | |||
C098 | ADD HL,DE | |||
C099 | LD (IX+$04),L | |||
C09C | LD (IX+$05),H | |||
C09F | DEC (IX+$0D) | Decrement explosion counter | ||
C0A2 | JP NZ,$BD5C | Jump to the next enemy configuration if not zero explosion has ended, configure gift: bubble, smartbomb or question | ||
C0A5 | LD HL,($A22C) | Set HL to the address into the attribute file for the explosion | ||
C0A8 | LD DE,($A22E) | Set DE to the address into the attribute buffer for the explosion | ||
C0AC | CALL $BBEA | Reset attribute color when explosion ended | ||
C0AF | LD A,(IX+$00) | x-pixel-position of sprite is less than 24? | ||
C0B2 | CP $18 | |||
C0B4 | JP C,$C11C | Jump if so | ||
C0B7 | LD (IX+$09),$FE | Set Enemy configuration to energy bubble | ||
C0BB | LD (IX+$0F),$10 | Set sprite height | ||
C0BF | LD (IX+$0E),$02 | Set sprite width | ||
C0C3 | LD A,(IX+$01) | Add 8 pixels to y-pixel-position | ||
C0C6 | ADD A,$08 | |||
C0C8 | LD (IX+$01),A | |||
configure big bubble
|
||||
C0CB | LD (IX+$03),$00 | Reset configuration | ||
C0CF | LD (IX+$06),$00 | Reset configuration | ||
C0D3 | LD (IX+$11),$64 | Set bubble counter to $64 | ||
C0D7 | LD (IX+$10),$00 | Reset configuration | ||
C0DB | LD HL,$8718 | Set HL to graphic data address for big bubble | ||
C0DE | LD (IX+$12),L | Set graphic data address for bubble | ||
C0E1 | LD (IX+$13),H | |||
C0E4 | LD (IX+$04),L | |||
C0E7 | LD (IX+$05),H | |||
C0EA | LD A,(IX+$15) | Check bubble type | ||
C0ED | CP $FF | No bubble? | ||
C0EF | JP Z,$C11C | Jump if so | ||
C0F2 | CALL $A51D | Set A to a pseudo-random number | ||
C0F5 | CP $03 | is less than 3? | ||
C0F7 | JP C,$C123 | you are lucky, you got an smartbomb | ||
C0FA | CP $06 | is less than 6? | ||
C0FC | JP C,$C12D | you are lucky, you got a question mark (random gift) | ||
C0FF | LD A,(IX+$15) | is bubble type big? | ||
C102 | OR A | |||
C103 | JP NZ,$BD5C | Jump if so and process next object | ||
configure small bubble
|
||||
C106 | LD HL,$87D8 | Set HL to graphic data for small bubble | ||
C109 | LD (IX+$12),L | Set graphic data for the bubble | ||
C10C | LD (IX+$13),H | |||
C10F | LD (IX+$11),$8C | Set bubble counter to $8C | ||
C113 | LD (IX+$04),L | Set graphic data for the bubble | ||
C116 | LD (IX+$05),H | |||
C119 | JP $BD5C | Jump to the next enemy configuration | ||
configure no bubble
|
||||
C11C | LD (IX+$0C),$00 | Set object live/visibility to dead/not visible | ||
C120 | JP $BD5C | Jump to the next enemy configuration | ||
configure smartbomb
|
||||
C123 | LD (IX+$09),$FD | Set object type to smartbomb | ||
C127 | LD HL,$8BA0 | Set graphic data for smartbomb | ||
C12A | JP $C134 | Jump forward | ||
configure question
|
||||
C12D | LD (IX+$09),$FC | Set object type to question | ||
C131 | LD HL,$8BC0 | Set graphic data for question | ||
C134 | LD (IX+$04),L | Copy address to object configuration | ||
C137 | LD (IX+$05),H | |||
C13A | LD (IX+$02),$01 | Set sprite to reverse | ||
C13E | JP $BD5C | Jump to the next enemy configuration |
Prev: BF4B | Up: Map | Next: C141 |