Prev: F9F4 Up: Map Next: FAE7
F9F5: Asteroids : Check for firing missile and animate accordingly
Used by the routine at EDF7.
F9F5 LD IX,$F9F0 Point IX at the missile data.
F9F9 LD A,(IX+$00) Is a missile firing?
F9FC CP $FF
F9FE JR NZ,$FA2A Jump forward if it is.
FA00 CALL $B06D Was 'fire' pressed?
FA03 OR A
FA04 RET Z Return if it wasn't.
'Fire' was pressed.
FA05 LD A,(IY+$05) Get the x co-ordinate.
FA08 LD ($F9F0),A Set this as the x co-ordinate of the missile.
FA0B LD A,(IY+$0A) Get the y co-ordinate.
FA0E LD ($F9F1),A Set this as the y co-ordinate of the missile.
FA11 CALL $F9A4 Get the change values for the current direction.
FA14 LD A,(HL) Get the change in x.
FA15 LD ($F9F2),A Set this for the missile.
FA18 INC HL Move to the next position in the table.
FA19 LD A,(HL) Get the change in y.
FA1A LD ($F9F3),A Set this for the missile.
FA1D LD BC,$FF0A Play a "fire a missile" round.
FA20 LD DE,$0114
FA23 LD HL,$1401
FA26 CALL $E3D3
FA29 RET Return.
A missile is in mid-fire, work out what to do with it.
FA2A LD BC,$F8B5 Point BC at the bounds table. (F8B5)
FA2D CALL $EF35 Update the missile's position.
FA30 LD A,$6D Use the ID of the missle. (9118)
FA32 CALL $A83D Draw it.
FA35 LD A,($F672) Is the change in X and Y both 0?
FA38 LD B,A
FA39 LD A,($F673)
FA3C OR B
FA3D JR Z,$FA44 Jump forward if it is.
FA3F LD (IX-$04),$FF Signal that the missile is firing and return.
FA43 RET
The missile is moving.
FA44 LD B,$0C
FA46 LD HL,$80A9 Point HL at the lightning bolt position table. (80A9)
FA49 LD A,(HL) Is the next lighting bolt inactive?
FA4A CP $FF
FA4C JR NZ,$FA56 Jump forward if it isn't.
FA4E INC HL Otherwise move to the next entry.
FA4F INC HL
FA50 INC HL
FA51 INC HL
FA52 INC HL
FA53 DJNZ $FA49 Loop while there are still more lightning bolts to look at.
FA55 RET Otherwise return.
There is active lightning, did the missile hit it?
FA56 LD E,A Put the lightning's x co-ordinate in E.
FA57 SUB (IX-$04) Is it close enough to the missile?
FA5A SUB $08
FA5C CP $F0
FA5E JR C,$FA4E If not, jump back to check the next lightning.
FA60 INC HL Move to the next position in the buffer.
FA61 LD A,(HL) Put the lightning's y co-ordinate in D.
FA62 LD D,A
FA63 DEC HL Move back to the previous position in the buffer.
FA64 SUB (IX-$03) Is the y co-ordinate close enough to the missile?
FA67 SUB $08
FA69 CP $F0
FA6B JR C,$FA4E Jump back if it isn't.
The missile has hit some lightning.
FA6D LD A,$FF Signal there is no lightning here.
FA6F LD (HL),A
FA70 LD ($F9F0),A Signal that the missile is no longer active.
FA73 INC HL Move to the next place in the buffer.
FA74 INC HL
FA75 INC HL
FA76 INC HL
FA77 LD A,(HL) Get the object ID for the lightning.
FA78 CP $6B Is it 6B? (small lightning)
FA7A JR Z,$FA86 Jump forward if it is.
FA7C LD A,$6B Set the UDG to a small lightning bolt. (90D8)
FA7E CALL $FAF0 Move the lightning bolts around.
FA81 CALL $FAF0
FA84 JR $FAE3 Jump forward to play the sound effect and return.
The missile hit some small lightning.
FA86 LD A,($FAEF) Flip the "regenerate lightning" bit.
FA89 XOR $01
FA8B LD ($FAEF),A
FA8E JR NZ,$FAE3 Skip the next bit of code if the bit is set.
FA90 LD DE,$42EE Get bit 1 of R, to generate a random flag, that determines the lightning comes in at the top right or the bottom left.
FA93 LD A,R
FA95 AND $01
FA97 JR NZ,$FA9C
FA99 LD DE,$AE02
FA9C LD A,$38 Set the UDG to a big lightning bolt. (8A78)
FA9E CALL $FAF0 Move the lightning bolts around.
FAA1 LD HL,$F9F4 Point HL at the number of asteroids left to hit. (F9F4)
FAA4 LD A,(HL) Have we destroyed all of them already?
FAA5 OR A
FAA6 JR Z,$FAE3 Jump forward if we have.
FAA8 DEC (HL) Otherwise decrement the count of asteroids left to hit.
FAA9 JR NZ,$FAE3 Jump forward if the count is not zero.
The player has destroyed enough asteroids to win the sub-game.
FAAB LD A,$01 Set the asteroids game as completed.
FAAD LD ($EC1C),A
FAB0 LD ($ECB3),A Set the task completed. (EC5C)
FAB3 LD A,(IY-$1E) Earn the player £100.
FAB6 ADD A,$01
FAB8 DAA
FAB9 LD (IY-$1E),A
FABC LD A,($ECFE) Add £100 to the grand total.
FABF ADD A,$01
FAC1 DAA
FAC2 LD ($ECFE),A
Play the "completed" sound effect.
FAC5 LD BC,$BE32 Set the parameters for the first sound.
FAC8 LD HL,$0000
FACB LD DE,$0A0A
FACE CALL $FAE7 Play it.
FAD1 LD BC,$9664 Set the parameters for the second sound.
FAD4 CALL $FAE7 Play it.
FAD7 LD BC,$A532 Set the parameters for the third sound.
FADA CALL $FAE7 Play it.
FADD LD BC,$7D78 Set the parameter for the fourth sound.
FAE0 CALL $FAE7 Play it.
This code is a common entry point if lightining was hit.
FAE3 CALL $F9C4 Play the "hit lighting" sound effect and return.
FAE6 RET
Prev: F9F4 Up: Map Next: FAE7