ORG #1800 ENT ; AType EQU #1000 BType EQU #1001 CType EQU #1002 DType EQU #1003 EType EQU #1004 ; Centre EQU #C000+11*80+39+5*#800 SY EQU 2*80 SX EQU 7 MntMinY EQU 10 MntMaxY EQU 60 MaxFuel EQU 155 ; RadPos EQU 0 ; 0 = Sights ; Workspace EQU #A000 ; pcPall EQU #1260 ; Speed EQU 3 ; Gravity EQU -6 ExGravity EQU -6 TSpZ EQU #10 ShellSp EQU #180 MissSp EQU #230 MissiSt EQU #80 MyMissiSt EQU -#80 WindX EQU #300 WindZ EQU #300 TankXW EQU #80 MissXW EQU #A Hack EQU -#300 ClipMZ EQU #400 MainCW EQU #180 SaucDropR EQU #300 dSkill EQU #4 ; StartZ EQU #3500 ; PlainZ EQU #200 BumpRej EQU #400 BumpX EQU #200 BumpZ EQU #200 ; Range EQU #3000 MaxOS EQU #100 MaxX EQU #2000+MaxOS MaxZ EQU Range-MaxOS MinZ EQU #100 ; nObje EQU 16 MinObje EQU 6 nExpl EQU 7 lObje EQU #38 lIO EQU 9 ; IOX EQU 0 IOZ EQU 2 IOS EQU 4 IOC EQU 6 IOA EQU 7 IOXS EQU 8 ; ObjeX EQU #00 ObjedX EQU #02 ObjeY EQU #04 ObjedY EQU #06 ObjeZ EQU #08 ObjedZ EQU #0A ObjeAng EQU #0C ; ObjeFlag EQU #0D ObjeCol EQU #0E ObjeXSl EQU #0F ; ObjeCXa EQU #10 ObjeCZa EQU #12 ObjeCXb EQU #14 ObjeCZb EQU #16 ObjeCXc EQU #18 ObjeCZc EQU #1A ObjeCXd EQU #1C ObjeCZd EQU #1E ; ObjepCross EQU #20 ; ObjepMove EQU #22 ObjepDisp EQU #24 ObjepShot EQU #26 ; ObjeC EQU #28 ObjeCa EQU #29 ObjeSp EQU #2A ObjedSp EQU #2C ObjeiSpC EQU #2E ; TankiRC EQU #2F TankiDC EQU #30 TankXh EQU #31 TankRD EQU #32 ; nVolc EQU 30 lVolc EQU 9 VolcGrav EQU -#30 ; VolcFlag EQU 0 VolcX EQU 1 VolcY EQU 3 VolcdX EQU 5 VolcdY EQU 7 ; PlanX EQU 0 PlanY EQU 2 ; ptX EQU 0 ptY EQU 2 ptZ EQU 4 ; ZStep EQU #C0 ThetaStep EQU 1 ; KV EQU #1279 ukLeft EQU KV+0 ukRight EQU KV+3 ukForward EQU KV+6 ukBackward EQU KV+9 ukFire EQU KV+12 ukFireMiss EQU KV+15 ukExit EQU KV+18 ; cA EQU #54 cB EQU #57 cC EQU #5A cD EQU #4C ; bA EQU #54 bB EQU #4C bC EQU #4A bD EQU #4B ; Q ORG #4400 DI LD A,1 LD (AType),A LD A,(BType) LD (GameSkill),A ; LD HL,#300 LD (MyX),HL LD (MyZ),HL ; XOR A LD (NoObje),A LD (MyAng),A LD (nInts),A LD (Waiting),A LD (FireF),A LD (FireMF),A LD A,MaxFuel LD (DEnergy),A LD (NoTanks),A CALL SetUpGT CALL SetUpSubs ; LD HL,#C000 LD (MntStore1),HL LD HL,MntStore1 LD DE,MntStore1+2 LD BC,640-2+#40 LDIR ; CALL SetUpMnts LD HL,Mountains LD DE,Mountains+#1000 LD BC,320 LDIR ; CALL SetUpRadar CALL SetUpObje CALL SetUpTank CALL SetUpFuelPod CALL SetUpSauc CALL SetUpProj CALL SetUpExpl CALL SetUpVolc CALL SetUpPall ; GameLp CALL DoMove LD A,(ValidMove) OR A CALL NZ TestMove ; LD A,(BumpFuel) OR A CALL NZ AddFuel ; CALL kFire JR NC Game0 LD A,(MyShell+ObjeFlag) OR A CALL Z MFireShell JR Game1 ; Game0 CALL kFireMiss JR NC Game1 LD A,(MyShell+ObjeFlag) OR A CALL Z MFireMiss ; Game1 LD A,(AType) CP 5 JR NZ GameL ; CALL FrameInt CALL SetUpPall ; JR Game9 ; GameL LD A,(Waiting) OR A JR NZ GameL ; Game9 LD A,(CType) OR A CALL NZ UnDrawLines ; CALL UnDrawMounts ; CALL DrawSights ; LD A,(CType) OR A CALL NZ DrawMounts ; CALL ShowObje ; LD A,1 LD (Waiting),A ; CALL ukExit LD A,1 JR NZ GameEx ; LD A,(NoObje) OR A JR Z GameEx ; LD A,(DEnergy) OR A JP NZ GameLp LD A,2 ; GameEx LD HL,(DScore) LD HL,0 LD B,0 GameSkill EQU $-1 Ret RET ; ProgEx DI JP #188 ; SetUpGT LD A,(AType) EI CP 5 RET NZ DI LD HL,#C000 LD DE,#C001 LD BC,#3FFF LD (HL),0 LDIR RET ; AddEnemy CALL SetUpTank RET ; SetUpMiss CALL GetMissZX ; LD (MissTemp+ObjeX),HL LD (MissTemp+ObjeZ),DE ; LD A,(GSA) ADD A,#80 LD (MissTemp+ObjeAng),A ; LD A,(GameSkill) LD C,A RLCA RLCA CPL AND #3 INC A LD (MissTemp+ObjeC),A ; LD B,0 LD HL,#80 ADD HL,BC LD (MissTemp+ObjeSp),HL ; LD DE,Tank LD HL,MissTemp LD BC,lObje LDIR ; RET ; SetUpVolc LD HL,VolcTab+VolcFlag LD DE,lVolc LD B,nVolc SUV LD (HL),0 ADD HL,DE DJNZ SUV LD HL,78 LD (VolcanoX),HL LD HL,52 LD (VolcanoY),HL XOR A LD (DVF),A RET ; DrawVolc LD A,(ViewAng) NEG ADD A,2 LD L,A LD H,0 JP P DV0 LD H,-1 DV0 ADD HL,HL ADD HL,HL ADD HL,HL DEC HL DEC HL LD (VolcanoX),HL LD IX,VolcTab LD A,(EType) LD B,A LD A,3 LD (Colour),A XOR A LD (DVC),A DVlp CALL MoveVolc LD DE,lVolc ADD IX,DE DJNZ DVlp LD A,1 LD (DVF),A LD A,(DVC) CP 15 RET C LD A,R AND #F RET NZ XOR A LD (DVF),A RET ; MoveVolc LD A,(IX+VolcFlag) OR A JR Z mVN ; LD L,(IX+VolcX) LD H,(IX+VolcX+1) LD E,(IX+VolcdX) LD D,(IX+VolcdX+1) ADD HL,DE LD (IX+VolcX),L LD (IX+VolcX+1),H ; LD L,(IX+VolcdY) LD H,(IX+VolcdY+1) LD DE,VolcGrav ADD HL,DE LD (IX+VolcdY),L LD (IX+VolcdY+1),H ; LD E,(IX+VolcY) LD D,(IX+VolcY+1) ADD HL,DE LD (IX+VolcY),L LD (IX+VolcY+1),H ; BIT 7,H JR Z mVa LD (IX+VolcFlag),0 RET ; mVa LD HL,(VolcanoX) LD E,(IX+VolcX+1) LD D,0 BIT 7,E JR Z mVb LD D,-1 mVb ADD HL,DE BIT 7,H RET NZ LD DE,-160 ADD HL,DE BIT 7,H RET Z OR A SBC HL,DE ; LD A,L LD (VolpX),A ; LD HL,(VolcanoY) LD E,(IX+VolcY+1) LD D,0 OR A SBC HL,DE BIT 7,H RET NZ ; LD A,L LD (VolpY),A ; LD DE,0 VolpX EQU $-2 VolpY EQU $-1 ; PUSH BC CALL DrawPoint POP BC RET ; mVN LD A,B CP 9 JR C mVNa LD A,(DVC) INC A LD (DVC),A LD A,(DVF) OR A RET NZ ; mVNa XOR A LD (IX+VolcX),A LD (IX+VolcX+1),A LD HL,20*256 LD (IX+VolcY),L LD (IX+VolcY+1),H INC A LD (IX+VolcFlag),A ; PUSH BC CALL Rand CALL vRdX LD (IX+VolcdX),L LD (IX+VolcdX+1),H ; CALL vRdY LD (IX+VolcdY),L LD (IX+VolcdY+1),H POP BC ; RET ; vRdX LD A,E LD L,A LD H,0 LD BC,-128 ADD HL,BC ADD HL,HL RET ; vRdY LD A,D ADD A,A LD L,A LD H,0 ADD HL,HL INC H INC H RET ; TestMove LD IX,FuelPod XOR A LD (ValidMove),A LD (BumpFuel),A ; LD A,(MyAng) NEG INC A CALL SetUpRot ; LD B,nObje+3 TMlp PUSH BC LD A,(IX+ObjeFlag) OR A JP Z TMx BIT 0,A JR Z TM0 BIT 1,(IX+ObjeFlag) JP Z TMx ; TM0 LD DE,(MyZ) LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) OR A SBC HL,DE RES 7,H LD A,H RLCA AND #80 OR H LD H,A ; LD (TestZ),HL ; BIT 7,H CALL NZ NegHL LD DE,BumpRej OR A SBC HL,DE JP NC TMx ; LD DE,(MyX) LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) OR A SBC HL,DE RES 7,H LD A,H RLCA AND #80 OR H LD H,A ; LD (TestX),HL ; BIT 7,H CALL NZ NegHL LD DE,BumpRej OR A SBC HL,DE JP NC TMx ; ; Trivial failed ; LD HL,0 TestX EQU $-2 LD DE,0 TestZ EQU $-2 CALL DoRotHLDE ; LD A,(MoveDir) XOR D AND #80 JR NZ TMx ; BIT 7,H CALL NZ NegHL LD BC,BumpX OR A SBC HL,BC JR NC TMx ; EX DE,HL BIT 7,H CALL NZ NegHL LD BC,BumpZ OR A SBC HL,BC JR NC TMx ; BIT 0,(IX+ObjeFlag) JR Z HitF ; LD HL,(MyOldX) LD (MyX),HL LD HL,(MyOldZ) LD (MyZ),HL ; Bumped POP BC RET ; HitF LD A,1 LD (BumpFuel),A ; TMx POP BC LD DE,lObje ADD IX,DE DEC B JP NZ TMlp RET ; AddScore LD HL,(DScore) LD A,L ADD A,E DAA LD L,A LD A,H ADC A,D DAA LD H,A LD (DScore),HL RET ; ClipH RES 7,H LD A,H RLCA AND #80 OR H LD H,A RET ; DoMove LD A,(MyShell+ObjeFlag) BIT 5,A RET NZ ; CALL kLeft JR Z DM1 CALL kRight JR NZ DoM1 LD E,-ThetaStep JR DoM0 ; DM1 CALL kRight JR Z DoM1 LD E,ThetaStep DoM0 LD A,(MyAng) ADD A,E LD (MyAng),A ; DoM1 CALL kForward JR Z DM3 CALL kBackward LD HL,0 JR NZ DoM2 LD E,0 JR DoM3 ; DM3 CALL kBackward LD HL,0 JR Z DoM2 LD E,#01 JR DoM3 ; DoM3 LD A,1 LD (ValidMove),A LD A,E RRCA AND #80 LD (MoveDir),A LD HL,ZStep CALL NZ NegHL DoM2 LD (MyDist),HL LD HL,0 LD DE,(MyDist) LD A,(MyAng) CALL RotHLDEA LD BC,(MyX) LD (MyOldX),BC ADD HL,BC LD (MyX),HL EX DE,HL LD BC,(MyZ) LD (MyOldZ),BC ADD HL,BC LD (MyZ),HL RET ; MoveIt LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) LD DE,#40 ADD HL,DE LD (IX+ObjeZ),L LD (IX+ObjeZ+1),H LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) LD DE,#40 ADD HL,DE LD (IX+ObjeX),L LD (IX+ObjeX+1),H RET ; RotL INC (IX+ObjeAng) RET ; RotR DEC (IX+ObjeAng) RET ; ShowObje LD IY,MyShell BIT 5,(IY+ObjeFlag) ; JR NZ SOv LD IY,MyX SOv LD A,(IY+ObjeAng) LD (ViewAng),A LD L,(IY+ObjeX) LD H,(IY+ObjeX+1) LD (ViewX),HL LD L,(IY+ObjeZ) LD H,(IY+ObjeZ+1) LD (ViewZ),HL ; LD A,(ViewAng) NEG CALL SetUpRot ; SOa CALL ShowRadar LD A,(EType) OR A CALL NZ DrawVolc ; LD IX,ObjeTable LD B,nObje+6+nExpl SOlp LD A,(IX+ObjeFlag) ; OR A ; JP Z SOx1 BIT 2,A JP Z SOx1 OR A ; PUSH BC ; LD L,(IX+ObjepMove) LD H,(IX+ObjepMove+1) CALL M CallHL ; SO0 LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) LD DE,0 ViewX EQU $-2 OR A SBC HL,DE RL H SRA H LD (CentX),HL JP P SO0p ; LD A,H CPL LD H,A LD A,L CPL LD L,A INC HL ; SO0p LD DE,MaxZ OR A SBC HL,DE BIT 7,H JP Z SOx ; LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) LD DE,0 ViewZ EQU $-2 OR A SBC HL,DE RL H SRA H LD (CentZ),HL JP P SO1p ; LD A,H CPL LD H,A LD A,L CPL LD L,A INC HL ; SO1p LD DE,MaxZ OR A SBC HL,DE BIT 7,H JP Z SOx ; LD HL,(CentX) LD DE,(CentZ) CALL DoRotHLDE LD (CentX),HL LD (CentZ),DE ; EX DE,HL LD DE,MaxZ OR A SBC HL,DE JP P SOx ; ADD HL,DE LD DE,MinZ OR A SBC HL,DE JP M SOx ; LD HL,(CentX) BIT 7,H CALL NZ NegHL LD DE,MaxX OR A SBC HL,DE JP P SOx ADD HL,DE LD DE,MaxOS OR A SBC HL,DE JP M SO4 ; ADD HL,HL LD DE,(CentZ) OR A SBC HL,DE JP P SOx ; SO4 LD L,(IX+ObjeY) LD H,(IX+ObjeY+1) LD (CentY),HL LD A,(ViewAng) SUB (IX+ObjeAng) NEG DEC A LD (DispAng),A LD A,(IX+ObjeCol) LD (Colour),A ; LD L,(IX+ObjepDisp) LD H,(IX+ObjepDisp+1) ; CALL CallHL ; SOx POP BC SOx1 LD DE,lObje ADD IX,DE DEC B JP NZ SOlp RET ; SetUpObje LD IX,Objects LD IY,InitOT LD B,nObje XOR A LD (NoObje),A SUOlp PUSH BC ; CALL AddObje1 ; LD BC,lObje ADD IX,BC LD BC,lIO ADD IY,BC POP BC DJNZ SUOlp RET ; AddObje1 LD L,(IY+IOX) LD H,(IY+IOX+1) LD E,(IY+IOZ) LD D,(IY+IOZ+1) EXX LD L,(IY+IOS) LD H,(IY+IOS+1) LD B,(IY+IOXS) EXX ; AddObje LD (IX+ObjeX),L LD (IX+ObjeX+1),H LD (IX+ObjeZ),E LD (IX+ObjeZ+1),D ; LD HL,#300-#A0 LD (IX+ObjeY),L LD (IX+ObjeY+1),H ; LD (IX+ObjeFlag),#87 ; XOR A LD (IX+ObjedY),A LD (IX+ObjedY+1),A LD (IX+ObjedX),A LD (IX+ObjedX+1),A LD (IX+ObjedZ),A LD (IX+ObjedZ+1),A ; EXX LD (IX+ObjepDisp),L LD (IX+ObjepDisp+1),H ; LD (IX+ObjeCol),1 LD A,R LD (IX+ObjeAng),A LD (IX+ObjeXSl),B LD (IX+ObjeC),4 ; LD HL,SquareClip LD (IX+ObjepCross),L LD (IX+ObjepCross+1),H ; LD HL,mTankFall LD (IX+ObjepMove),L LD (IX+ObjepMove+1),H ; LD HL,ObjeShot LD A,(AType) CP 1 JR NZ AOx LD HL,ObjeNShot ; AOx LD (IX+ObjepShot),L LD (IX+ObjepShot+1),H ; LD A,(NoObje) INC A LD (NoObje),A RET ; SetUpTank CALL GetSafeZX LD (TankTemp+ObjeX),HL LD (TankTemp+ObjeZ),DE ; LD A,(GameSkill) LD C,A LD A,255 SUB C RRCA RRCA AND #3F LD B,A LD A,R AND #1 LD A,B JR Z SUTa NEG SUTa LD A,(GSA) ADD A,#80 ADD A,B LD (TankTemp+ObjeAng),A ; LD A,C RRCA RRCA AND #3F INC A LD (TankTemp+TankiRC),A ; LD A,C RLCA RLCA CPL AND #3 INC A LD (TankTemp+ObjeC),A ; LD A,C RLCA RLCA RLCA RLCA AND #0F ADD A,4 LD (TankTemp+ObjedSp),A ; LD DE,Tank LD HL,TankTemp LD BC,lObje LDIR ; IncSkill LD A,(GameSkill) ADD A,dSkill JR NC ISa LD A,#FF ISa LD (GameSkill),A RET ; GetMissZX LD A,(MyAng) NEG LD B,A LD A,R AND #1F SUB 16 LD A,B JR GSZXA ; GetSafeZX LD A,R ADD A,A GSZXA LD (GSA),A LD C,4 GSZXlp PUSH BC LD HL,0 LD DE,StartZ CALL RotHLDEA LD BC,(MyX) ADD HL,BC RL H SRA H LD (GSX),HL LD HL,(MyZ) ADD HL,DE RL H SRA H LD (GSZ),HL ; LD IX,MyX LD B,nObje+4 GSZX LD A,(IX+ObjeFlag) OR A JP Z GSZXf BIT 1,A JR Z GSZXf ; LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) LD DE,0 GSX EQU $-2 OR A SBC HL,DE RL H SRA H CALL M NegHL LD DE,#180 OR A SBC HL,DE JP P GSZXf ; LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) LD DE,0 GSZ EQU $-2 OR A SBC HL,DE RL H SRA H CALL M NegHL LD DE,#180 OR A SBC HL,DE JP P GSZXf ; POP BC DEC C ; JR NZ GSZXlp ; LD HL,(GSX) LD DE,(GSZ) RET ; GSZXf LD DE,lObje ADD IX,DE DJNZ GSZX ; POP BC ; LD HL,(GSX) LD DE,(GSZ) RET ; SetUpFuelPod LD DE,FuelPod LD HL,FuelTemp LD BC,lObje LDIR RET ; SetUpSauc LD DE,Saucer LD HL,FuelTemp LD BC,lObje LDIR LD HL,DoSauc LD (Saucer+ObjepDisp),HL LD HL,#300 LD (Saucer+ObjeY),HL LD A,2 LD (Saucer+ObjeCol),A LD HL,mSauc LD (Saucer+ObjepMove),HL LD A,#85 LD (Saucer+ObjeFlag),A RET ; SetUpShell LD HL,ShellTemp LD BC,lObje LDIR RET ; SetUpProj XOR A LD (MyShell+ObjeFlag),A LD (TankShell+ObjeFlag),A RET ; SetUpExpl LD HL,ExplA+ObjeFlag LD B,nExpl SUE LD (HL),0 PUSH HL LD DE,ObjepMove-ObjeFlag ADD HL,DE LD (HL),mExp&#FF INC HL LD (HL),mExp/256 POP HL PUSH HL LD DE,ObjepDisp-ObjeFlag ADD HL,DE LD (HL),DoExp&#FF INC HL LD (HL),DoExp/256 POP HL LD DE,lObje ADD HL,DE DJNZ SUE RET ; mMiss CALL kLeft JR Z nMiss1 CALL kRight JR NZ mMissa ; DEC (IX+ObjeAng) JR mMissa ; nMiss1 CALL kRight JR Z mMissa ; INC (IX+ObjeAng) ; mMissa LD A,(IX+ObjeAng) LD E,(IX+ObjeSp) LD D,(IX+ObjeSp+1) LD HL,0 CALL RotHLDEA LD (IX+ObjedX),L LD (IX+ObjedX+1),H LD (IX+ObjedZ),E LD (IX+ObjedZ+1),D ; mShell DEC (IX+ObjeC) JP Z mSx ; LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) LD E,(IX+ObjedX) LD D,(IX+ObjedX+1) ADD HL,DE RL H SRA H ; LD (TempX),HL LD (IX+ObjeX),L LD (IX+ObjeX+1),H ; LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) LD E,(IX+ObjedZ) LD D,(IX+ObjedZ+1) ADD HL,DE RL H SRA H ; LD (TempZ),HL LD (IX+ObjeZ),L LD (IX+ObjeZ+1),H ; LD A,(IX+ObjeAng) NEG LD (XSAng),A ; PUSH IX LD IX,MyX LD B,nObje+4 mSBlp BIT 1,(IX+ObjeFlag) JP Z mSBf LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) LD DE,(TempZ) OR A SBC HL,DE RL H SRA H LD A,H ; JP P mSB1 NEG mSB1 CP #04 JP NC mSBf ; LD (TBZ),HL ; LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) LD DE,(TempX) OR A SBC HL,DE RL H SRA H LD A,H ; JP P mSB2 NEG mSB2 CP #04 JP NC mSBf ; LD (TBX),HL ; LD L,(IX+ObjeY) LD H,(IX+ObjeY+1) LD DE,-#AC ADD HL,DE BIT 7,H JP Z mSBf ; ; Now do proper window ; PUSH BC LD A,(XSAng) LD HL,(TBX) LD DE,(TBZ) CALL RotHLDEA LD (TBZ),DE LD (TBX),HL POP BC BIT 7,D JR NZ mSBf ; EX DE,HL LD DE,ClipMZ OR A SBC HL,DE JP P mSBf ; LD A,(XSAng) SUB (IX+ObjeAng) NEG ; PUSH BC LD L,(IX+ObjepCross) LD H,(IX+ObjepCross+1) CALL CallHL POP BC ; LD HL,(MostLX) LD DE,MissXW OR A SBC HL,DE BIT 7,H JR Z mSBf ; LD HL,(MostRX) LD DE,MissXW ADD HL,DE BIT 7,H JR NZ mSBf ; LD L,(IX+ObjepShot) LD H,(IX+ObjepShot+1) CALL CallHL ; POP IX ; mSx LD A,(IX+ObjeFlag) AND #60 LD (IX+ObjeFlag),0 RET Z ; XOR A LD (FireF),A LD (FireMF),A LD (IX+ObjeFlag),A RET ; mSBf LD DE,lObje ADD IX,DE DEC B JP NZ mSBlp POP IX RET ; TFireShell PUSH IY LD IY,TankShell LD DE,MissiSt CALL FireShell POP IY RET ; MFireShell LD IX,MyX PUSH IY LD IY,MyShell LD DE,MyMissiSt CALL FireShell SET 6,(IY+ObjeFlag) XOR A LD (FireF),A POP IY RET ; MFireMiss LD IX,MyX PUSH IY LD IY,MyShell LD DE,MyMissiSt CALL FireShell SET 5,(IY+ObjeFlag) XOR A LD (FireMF),A ; LD HL,mMiss LD (IY+ObjepMove),L LD (IY+ObjepMove+1),H ; LD HL,MissSp LD (IY+ObjeSp),L LD (IY+ObjeSp+1),H ; LD (IY+ObjeC),35 ; POP IY RET ; FireShell LD A,(IY+ObjeFlag) OR A RET NZ ; PUSH DE ; PUSH IX POP HL LD DE,ShellTemp LD BC,13 LDIR ; LD A,(IX+ObjeAng) LD DE,ShellSp LD HL,0 CALL RotHLDEA LD (ShellTemp+ObjedX),HL LD (ShellTemp+ObjedZ),DE ; LD A,(IX+ObjeAng) POP DE LD HL,0 CALL RotHLDEA LD BC,(ShellTemp+ObjeX) ADD HL,BC RL H SRA H LD (ShellTemp+ObjeX),HL ; LD HL,(ShellTemp+ObjeZ) ADD HL,DE RL H SRA H LD (ShellTemp+ObjeZ),HL ; PUSH IY POP DE CALL SetUpShell RET ; UserShot LD A,(DEnergy) OR A RET Z SUB 20 LD (DEnergy),A RET NC XOR A LD (DEnergy),A RET ; AddFuel LD A,(DEnergy) CP MaxFuel JR Z AFh INC A LD (DEnergy),A ; AFh LD A,(FuelPod+ObjeC) OR A RET Z DEC A LD (FuelPod+ObjeC),A RET ; TankShot CALL AddExpl ; CALL AddEnemy ; LD DE,1 CALL AddScore ; RET ; ObjeNShot LD B,1 CALL AddBEx LD (IY+ObjeCol-lObje),3 RET ; ObjeShot LD (IX+ObjeFlag),0 LD A,(NoObje) DEC A LD (NoObje),A ; AddExpl LD B,nExpl AddBEx NOP LD IY,ExplA LD A,R LD C,A ExpLp LD A,C ADD A,256/nExpl LD C,A PUSH BC CALL GetRandXZY ; LD (IY+ObjedX),L LD (IY+ObjedX+1),H LD (IY+ObjedZ),E LD (IY+ObjedZ+1),D LD (IY+ObjedY),C LD (IY+ObjedY+1),B ; LD A,R AND #1F SUB 16 LD (IY+ObjeCa),A ; LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) LD (IY+ObjeX),L LD (IY+ObjeX+1),H ; LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) LD (IY+ObjeZ),L LD (IY+ObjeZ+1),H ; LD (IY+ObjeY),0 LD (IY+ObjeY+1),0 ; LD (IY+ObjeFlag),#85 ; LD A,R AND #7 ADD A,3 LD (IY+ObjeC),A ; LD A,(IX+ObjeCol) LD (IY+ObjeCol),A ; LD (IY+ObjeAng),0 ; ExpX LD BC,lObje ADD IY,BC POP BC DJNZ ExpLp RET ; GetRandXZY LD HL,0 LD B,A LD A,R AND #3F ADD A,36 LD D,0 LD E,A LD A,B CALL RotHLDEA LD B,0 LD A,R AND #7F ADD A,60 LD C,A RET ; DoExp BIT 4,(IX+ObjeFlag) JP Z DoExp1 LD DE,-#A0 LD HL,(CentY) ADD HL,DE LD (CentY),HL JP DoShell ; mExp LD A,(IX+ObjeAng) ADD A,(IX+ObjeCa) LD (IX+ObjeAng),A LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) LD E,(IX+ObjedX) LD D,(IX+ObjedX+1) ADD HL,DE LD (IX+ObjeX),L LD (IX+ObjeX+1),H ; LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) LD E,(IX+ObjedZ) LD D,(IX+ObjedZ+1) ADD HL,DE LD (IX+ObjeZ),L LD (IX+ObjeZ+1),H ; LD L,(IX+ObjeY) LD H,(IX+ObjeY+1) LD E,(IX+ObjedY) LD D,(IX+ObjedY+1) ADD HL,DE BIT 7,H JR NZ mExa LD (IX+ObjeY),L LD (IX+ObjeY+1),H ; LD HL,ExGravity ADD HL,DE LD (IX+ObjedY),L LD (IX+ObjedY+1),H ; RET ; mExa DEC (IX+ObjeC) JR Z mExb SET 4,(IX+ObjeFlag) EX DE,HL CALL NegHL SRA H:RR L ; SRA H:RR L LD (IX+ObjedY),L LD (IX+ObjedY+1),H ; JR mExp ; mExb LD (IX+ObjeFlag),0 RET ; mFuel LD A,(IX+ObjeC) RRA RRA RRA RRA AND #F ADD A,(IX+ObjeAng) LD (IX+ObjeAng),A LD A,(IX+ObjeC) OR A RET NZ LD (IX+ObjeFlag),A RET ; mSauc LD A,(NoObje) CP MinObje JR C mSchg LD A,(FuelPod+ObjeFlag) OR A RET NZ mSchg LD HL,mSauc1 LD (IX+ObjepMove),L LD (IX+ObjepMove+1),H ; mSauc1 LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) LD (SaucX),HL LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) LD (SaucZ),HL ; DEC (IX+ObjeC) JP NZ mSauc2 ; LD A,R AND #1F ADD A,8 LD (IX+ObjeC),A CALL RanddXY LD (IX+ObjedX),L LD (IX+ObjedX+1),H CALL RanddXY LD (IX+ObjedZ),L LD (IX+ObjedZ+1),H ; LD A,(NoObje) CP MinObje RET NC ; LD A,R AND #07 RET NZ ; PUSH IX LD IX,MyX LD B,nObje+4 SDlp LD A,(IX+ObjeFlag) OR A JP Z SDf BIT 1,A JR Z SDf ; LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) LD DE,0 SaucX EQU $-2 OR A SBC HL,DE RL H SRA H CALL M NegHL LD DE,SaucDropR OR A SBC HL,DE JP M SDf ; LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) LD DE,0 SaucZ EQU $-2 OR A SBC HL,DE RL H SRA H CALL M NegHL LD DE,SaucDropR OR A SBC HL,DE JP P Saucx ; SDf LD DE,lObje ADD IX,DE DJNZ SDlp ; LD HL,Objects+ObjeFlag-lObje LD DE,lObje FOlp ADD HL,DE LD A,(HL) OR A JR NZ FOlp ; LD DE,-ObjeFlag ADD HL,DE PUSH HL POP IX LD L,(IX+ObjepDisp) LD H,(IX+ObjepDisp+1) LD B,(IX+ObjeXSl) EXX LD HL,(SaucX) LD DE,(SaucZ) CALL AddObje Saucx POP IX RET ; mSauc2 LD HL,(SaucX) LD D,(IX+ObjedX+1) ADD HL,DE LD (IX+ObjeX),L LD (IX+ObjeX+1),H ; LD HL,(SaucZ) LD E,(IX+ObjedZ) LD D,(IX+ObjedZ+1) ADD HL,DE LD (IX+ObjeZ),L LD (IX+ObjeZ+1),H LD (TempZ),HL ; RET ; RanddXY CALL Rand LD L,E LD H,0 LD DE,-128 ADD HL,DE RET ; JP MoveIt ; SquareClip LD A,(XSAng) LD E,A LD A,(IX+ObjeAng) ADD A,E AND #3F CP 32 JR NC SCa LD HL,0 LD D,0 LD E,(IX+ObjeXSl) CALL RotHLDEA LD HL,(TBX) ADD HL,DE LD (MostRX),HL LD HL,(TBX) OR A SBC HL,DE LD (MostLX),HL RET ; SCa LD HL,0 LD D,0 LD E,(IX+ObjeXSl) CALL RotHLDEA EX DE,HL LD HL,(TBX) ADD HL,DE LD (MostRX),HL LD HL,(TBX) OR A SBC HL,DE LD (MostLX),HL RET ; GeneralXS LD HL,0 LD (MostRX),HL LD (MostLX),HL ; LD L,(IX+ObjeCXa) LD H,(IX+ObjeCXa+1) LD E,(IX+ObjeCZa) LD D,(IX+ObjeCZa+1) LD (GXSA),A CALL RotHLDEA ; CALL Limits ; LD L,(IX+ObjeCXb) LD H,(IX+ObjeCXb+1) LD E,(IX+ObjeCZb) LD D,(IX+ObjeCZb+1) LD A,0 GXSA EQU $-1 CALL RotHLDEA ; CALL Limits ; LD L,(IX+ObjeCXc) LD H,(IX+ObjeCXc+1) LD E,(IX+ObjeCZc) LD D,(IX+ObjeCZc+1) LD A,(GXSA) CALL RotHLDEA ; CALL Limits ; LD L,(IX+ObjeCXd) LD H,(IX+ObjeCXd+1) LD E,(IX+ObjeCZd) LD D,(IX+ObjeCZd+1) LD A,(GXSA) CALL RotHLDEA ; CALL Limits ; LD HL,(MostRX) LD DE,(TBX) ADD HL,DE LD (MostRX),HL LD HL,(MostLX) ADD HL,DE LD (MostLX),HL RET ; Limits BIT 7,H JR Z LimP ; EX DE,HL LD HL,(MostLX) OR A SBC HL,DE BIT 7,H RET NZ ; LD (MostLX),DE RET ; LimP LD DE,(MostRX) OR A SBC HL,DE BIT 7,H RET NZ ; ADD HL,DE LD (MostRX),HL RET ; MainClip LD DE,(TBX) LD HL,MainCW ADD HL,DE LD (MostRX),HL LD HL,-MainCW ADD HL,DE LD (MostLX),HL RET ; mTankFall LD L,(IX+ObjeY) LD H,(IX+ObjeY+1) LD E,(IX+ObjedY) LD D,(IX+ObjedY+1) ADD HL,DE BIT 7,H JR NZ mTFa LD (IX+ObjeY),L LD (IX+ObjeY+1),H ; LD HL,Gravity ADD HL,DE LD (IX+ObjedY),L LD (IX+ObjedY+1),H ; RET ; mTFa DEC (IX+ObjeC) JR Z mTFb EX DE,HL CALL NegHL SRA H:RR L LD (IX+ObjedY),L LD (IX+ObjedY+1),H ; JR mTankFall ; mTFb LD (IX+ObjeY),0 LD (IX+ObjeY+1),0 ; BIT 3,(IX+ObjeFlag) JR NZ mTInitRot ; RES 7,(IX+ObjeFlag) LD HL,RotL LD (IX+ObjepMove),L LD (IX+ObjepMove+1),H JP (HL) ; mTInitRot LD A,(IX+TankiRC) LD (IX+ObjeC),A SCF RL (IX+TankiRC) JR NC mTIRa SET 7,(IX+TankiRC) ; mTIRa CALL mTRSR ; RL H SRA H ; LD (IX+TankXh),H LD A,(GameSkill) RLCA RLCA RLCA AND #07 INC A BIT 7,H JR Z mTIRb NEG mTIRb LD (IX+TankRD),A ; LD HL,mTRot LD (IX+ObjepMove),L LD (IX+ObjepMove+1),H ; JP (HL) ; mTRSR LD E,(IX+ObjeZ) LD D,(IX+ObjeZ+1) LD HL,(MyZ) OR A SBC HL,DE RL H SRA H PUSH HL LD E,(IX+ObjeX) LD D,(IX+ObjeX+1) LD HL,(MyX) OR A SBC HL,DE RL H SRA H POP DE LD A,(IX+ObjeAng) NEG CALL RotHLDEA RET ; mTRot DEC (IX+ObjeC) JR Z mTInitDrv LD A,(IX+ObjeAng) ADD A,(IX+TankRD) LD (IX+ObjeAng),A ; CALL mTRSR ; RL H SRA H LD A,H XOR (IX+TankXh) RET P LD A,(IX+ObjeAng) SUB (IX+TankRD) LD (IX+ObjeAng),A SRA (IX+TankRD) LD A,(IX+TankRD) OR A JR Z mTRotx INC A RET NZ ; mTRotx CALL TFireShell ; mTInitDrv LD A,(IX+TankiDC) mTIDa LD (IX+ObjeC),A LD A,(IX+ObjeiSpC) LD (IX+ObjeCa),A ; LD HL,TSpZ LD (IX+ObjeSp),L LD (IX+ObjeSp+1),H ; LD HL,mTDrv LD (IX+ObjepMove),L LD (IX+ObjepMove+1),H ; mTDrv DEC (IX+ObjeC) JP Z mTDx ; LD A,R AND #3F JP Z mTDx DEC (IX+ObjeCa) JR Z mTDa ; LD L,(IX+ObjeSp) LD H,(IX+ObjeSp+1) LD E,(IX+ObjedSp) LD D,(IX+ObjedSp+1) ADD HL,DE LD (IX+ObjeSp),L LD (IX+ObjeSp+1),H DEC (IX+ObjeCa) ; mTDa INC (IX+ObjeCa) LD A,(IX+ObjeAng) LD E,(IX+ObjeSp) LD D,(IX+ObjeSp+1) LD HL,0 CALL RotHLDEA LD (IX+ObjedX),L LD (IX+ObjedX+1),H LD (IX+ObjedZ),E LD (IX+ObjedZ+1),D ; LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) LD (TTempZ),HL LD E,(IX+ObjedZ) LD D,(IX+ObjedZ+1) ADD HL,DE RL H SRA H LD (IX+ObjeZ),L LD (IX+ObjeZ+1),H LD (TempZ),HL LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) LD (TTempX),HL LD E,(IX+ObjedX) LD D,(IX+ObjedX+1) ADD HL,DE RL H SRA H LD (IX+ObjeX),L LD (IX+ObjeX+1),H LD (TempX),HL ; LD A,(IX+ObjeAng) NEG LD (XSAng),A ; PUSH IX LD IX,MyX LD B,nObje+4 mTBlp LD A,(IX+ObjeFlag) OR A JP Z mTBf BIT 3,A JP NZ mTBf BIT 1,A JP Z mTBf ; LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) LD DE,(TempZ) OR A SBC HL,DE RL H SRA H LD A,H JP P mTs1 NEG mTs1 CP #04 JP NC mTBf LD (TBZ),HL ; LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) LD DE,(TempX) OR A SBC HL,DE RL H SRA H LD A,H JP P mTs2 NEG mTs2 CP #04 JP NC mTBf LD (TBX),HL ; ; Now do proper window ; PUSH BC LD A,(XSAng) LD HL,(TBX) LD DE,(TBZ) CALL RotHLDEA LD (TBZ),DE LD (TBX),HL POP BC BIT 7,D JR NZ mTBf ; EX DE,HL LD DE,ClipMZ OR A SBC HL,DE BIT 7,H JR Z mTBf ; PUSH BC LD L,(IX+ObjepCross) LD H,(IX+ObjepCross+1) CALL CallHL POP BC ; LD HL,(MostLX) LD DE,TankXW OR A SBC HL,DE BIT 7,H JR Z mTBf ; LD HL,(MostRX) LD DE,TankXW ADD HL,DE BIT 7,H JR NZ mTBf ; POP IX ; LD HL,(TTempX) LD (IX+ObjeX),L LD (IX+ObjeX+1),H LD HL,(TTempZ) LD (IX+ObjeZ),L LD (IX+ObjeZ+1),H JP mTInitRev ; ; ! ; mTBf LD DE,lObje ADD IX,DE DEC B JP NZ mTBlp POP IX RET ; mTDx JP mTInitDec ; mTInitRev LD (IX+ObjeC),10 ; LD HL,mTRev LD (IX+ObjepMove),L LD (IX+ObjepMove+1),H ; JP (HL) ; mTRev DEC (IX+ObjeC) JR Z mTRvx ; CALL TFireShell LD HL,0 LD DE,-#60 LD A,(IX+ObjeAng) CALL RotHLDEA LD C,(IX+ObjeX) LD B,(IX+ObjeX+1) ADD HL,BC LD (IX+ObjeX),L LD (IX+ObjeX+1),H ; LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) ADD HL,DE LD (IX+ObjeZ),L LD (IX+ObjeZ+1),H ; RET ; mTRvx LD (IX+ObjeC),10 SCF RL (IX+TankiRC) ; CALL mTRSR ; RL H SRA H ; LD (IX+TankXh),H LD A,H RLCA RLCA CPL AND #02 ADD A,-1 LD (IX+TankRD),A ; LD HL,mTRvR LD (IX+ObjepMove),L LD (IX+ObjepMove+1),H ; mTRvR DEC (IX+ObjeC) LD A,15 JP Z mTIDa ; LD A,(IX+ObjeAng) ADD A,(IX+TankRD) LD (IX+ObjeAng),A ; RET ; mTInitDec LD HL,mTDec LD (IX+ObjepMove),L LD (IX+ObjepMove+1),H ; mTDec LD E,(IX+ObjeSp) LD D,(IX+ObjeSp+1) LD L,(IX+ObjedSp) LD H,(IX+ObjedSp+1) CALL NegHL ADD HL,HL ADD HL,DE LD (IX+ObjeSp),L LD (IX+ObjeSp+1),H BIT 7,H JP Z mTDa JP mTInitRot ; CalcXS LD A,(XSAng) LD HL,(TBX) LD DE,(TBZ) CALL RotHLDEA LD (TBZ),DE LD (TBX),HL ; LD A,(XSAng) CP #40 JR C CXSd CP #80 JR C CXSc CP #C0 JR C CXSb CXSa LD HL,-WindX LD DE,-WindZ CALL RotHLDEA LD HL,-Hack LD DE,(TBX) ADD HL,DE LD (MostLX),HL ; LD A,(XSAng) LD HL, WindX LD DE, WindZ CALL RotHLDEA LD HL,Hack LD DE,(TBX) ADD HL,DE LD (MostRX),HL ; RET ; CXSb LD HL, WindX LD DE,-WindZ CALL RotHLDEA LD HL,-Hack LD DE,(TBX) ADD HL,DE LD (MostLX),HL ; LD A,(XSAng) LD HL,-WindX LD DE, WindZ CALL RotHLDEA LD HL,Hack LD DE,(TBX) ADD HL,DE LD (MostRX),HL ; RET ; CXSc CALL CXSa ; LD DE,(MostLX) LD (MostLX),HL LD (MostRX),DE RET ; CXSd CALL CXSb ; LD DE,(MostLX) LD (MostLX),HL LD (MostRX),DE RET ; InitOT DEFW #D000 DEFW #D000 DEFW DoCube1 DEFB 1 DEFB 0 DEFB #80 ; DEFW #D000 DEFW #F000 DEFW DoPyra1 DEFB 1 DEFB 0 DEFB #40 ; ^xs ; DEFW #D000 DEFW #1000 DEFW DoCube1 DEFB 1 DEFB 0 DEFB #80 ; DEFW #D000 DEFW #3000 DEFW DoPyra1 DEFB 1 DEFB 0 DEFB #40 ; ^xs ; DEFW #F000 DEFW #D000 DEFW DoCube DEFB 1 DEFB 0 DEFB #80 ; DEFW #F000 DEFW #F000 DEFW DoPyra DEFB 1 DEFB 0 DEFB #20 ; ^xs ; DEFW #F000 DEFW #1000 DEFW DoCube DEFB 1 DEFB 0 DEFB #80 ; DEFW #F000 DEFW #3000 DEFW DoPyra DEFB 1 DEFB 0 DEFB #20 ; ^xs ; DEFW #1000 DEFW #D000 DEFW DoCube DEFB 1 DEFB 0 DEFB #80 ; DEFW #1000 DEFW #F000 DEFW DoPyra1 DEFB 1 DEFB 0 DEFB #40 ; ^xs ; DEFW #1000 DEFW #1000 DEFW DoCube1 DEFB 1 DEFB 0 DEFB #80 ; DEFW #1000 DEFW #3000 DEFW DoPyra DEFB 1 DEFB 0 DEFB #20 ; ^xs ; DEFW #3000 DEFW #D000 DEFW DoCube DEFB 1 DEFB 0 DEFB #80 ; DEFW #3000 DEFW #F000 DEFW DoPyra DEFB 1 DEFB 0 DEFB #20 ; ^xs ; DEFW #3000 DEFW #1000 DEFW DoCube DEFB 1 DEFB 0 DEFB #80 ; DEFW #3000 DEFW #3000 DEFW DoPyra DEFB 1 DEFB 0 DEFB #20 ; ^xs ; DEFW #E000 DEFW #0000 DEFW DoCube DEFB 1 DEFB 0 DEFB #80 ; DEFW #0000 DEFW #2000 DEFW DoPyra DEFB 1 DEFB 0 DEFB #20 ; ^xs ; DEFW #2000 DEFW #0000 DEFW DoCube DEFB 1 DEFB 0 DEFB #80 ; DEFW #0000 DEFW #E000 DEFW DoPyra DEFB 1 DEFB 0 DEFB #20 ; ^xs ; ; 20 ; SetUpRadar LD A,RadPos OR A LD BC,93*256+79 JR Z SUR LD BC,#1C*256+79 SUR LD A,B LD (RadarYO),A LD A,C LD (RadarXO),A RET ; DrawSights LD A,(ColMask) CPL LD B,A LD A,#33 LD (Centre),A ; LD A,(MyShell+ObjeFlag) OR A LD C,0 JR NZ DSa ; LD A,(ColMask) AND #22 LD C,A DSa LD HL,Centre-SY-SX LD A,(HL) AND B OR C LD (HL),A ; LD HL,Centre+SY-SX LD A,(HL) AND B OR C LD (HL),A ; LD HL,Centre-SY+SX+#800 LD A,(HL) AND B OR C LD (HL),A ; LD HL,Centre+SY+SX-#800 LD A,(HL) AND B OR C LD (HL),A ; LD A,(MyShell+ObjeFlag) OR A LD C,0 JR NZ DSb ; LD A,(ColMask) AND #11 LD C,A DSb LD HL,Centre-SY+SX LD A,(HL) AND B OR C LD (HL),A ; LD HL,Centre+SY+SX LD A,(HL) AND B OR C LD (HL),A ; LD HL,Centre-SY-SX+#800 LD A,(HL) AND B OR C LD (HL),A ; LD HL,Centre+SY-SX-#800 LD A,(HL) AND B OR C LD (HL),A RET ; SetUpMnts LD HL,Mountains LD (HL),MntMaxY-20 ; CALL AddVolc ; SUMlp LD DE,Mountains+#1000 OR A SBC HL,DE JR Z SUMjoin ADD HL,DE ; CALL NextY INC HL INC HL LD (HL),A ; JR SUMlp ; AddVolc LD B,26 LD DE,VolData AVlp LD A,(DE) INC DE ADD A,(HL) INC HL INC HL LD (HL),A DJNZ AVlp RET ; VolData DEFB 0,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,1 DEFB 1,0,-1,-1,1,1,1,1,1,1,1,1,0,1 SUMjoin LD A,(Mountains) LD HL,Mountains+#FFE LD (HL),A Jnf LD BC,#7F0 Jnlp CALL NextY DEC HL DEC HL CP (HL) JR Z ConvY LD (HL),A CPI DEC HL JP V Jnlp JR SetUpMnts ; ConvY LD IX,Mountains LD BC,#800 ConLp LD L,(IX) LD H,YTable/256 LD A,(HL) LD (IX),A INC IX INC H LD A,(HL) LD (IX),A INC IX CPI JP V ConLp RET ; NextY PUSH HL PUSH BC CALL Rand LD A,D AND #07 JR Z NextYZ LD A,E POP BC POP HL AND #02 DEC A ADD A,(HL) CP MntMinY JR C NYa CP MntMaxY RET C LD A,MntMaxY RET ; NYa LD A,MntMinY RET ; NextYZ POP BC POP HL LD A,(HL) RET ; MntRnd PUSH HL PUSH BC CALL Rand LD A,E POP BC POP HL RET ; DrawMounts LD (TempSP),SP LD DE,Mountains LD A,(MyAng) LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,DE EX DE,HL ; LD C,0 LD B,80 LD A,(ColMask) OR A JP P DMb LD SP,MntStore1+160*2 DMlpa LD A,(DE) INC DE ADD A,C LD L,A LD A,(DE) INC DE ADC A,0 LD H,A PUSH HL SET 5,(HL) ; LD A,(DE) INC DE ADD A,C LD L,A LD A,(DE) INC DE ADC A,0 LD H,A PUSH HL SET 4,(HL) ; INC C DJNZ DMlpa LD SP,(TempSP) RET ; DMb LD SP,MntStore2+160*2 DMlpb LD A,(DE) INC DE ADD A,C LD L,A LD A,(DE) INC DE ADC A,0 LD H,A PUSH HL SET 1,(HL) ; LD A,(DE) INC DE ADD A,C LD L,A LD A,(DE) INC DE ADC A,0 LD H,A PUSH HL SET 0,(HL) ; INC C DJNZ DMlpb LD SP,(TempSP) RET ; UnDrawMounts LD (TempSP),SP LD A,(ColMask) CPL OR A LD C,A LD SP,MntStore1 JP P UDM LD SP,MntStore2 UDM LD B,40 UDMlp POP HL LD A,(HL) AND C LD (HL),A ; POP HL LD A,(HL) AND C LD (HL),A ; POP HL LD A,(HL) AND C LD (HL),A ; POP HL LD A,(HL) AND C LD (HL),A ; DJNZ UDMlp LD SP,(TempSP) RET ; FrameInt LD A,(FireF) CP 2 JR Z FIb CALL ukFire JR Z FIc LD A,(FireF) OR A JR Z FIb FIa INC A LD (FireF),A ; FIb LD A,(FireMF) CP 2 JR Z FMb CALL ukFireMiss JR Z FMc LD A,(FireMF) OR A JR Z FMb FMa INC A LD (FireMF),A ; FMb LD A,(nInts) INC A LD (nInts),A CP Speed RET C ; LD A,(Waiting) OR A RET Z ; IntClear XOR A LD (nInts),A LD (Waiting),A ; CALL SetUpPall ; RET ; FIc LD A,(FireF) OR A JR NZ FIb JR FIa ; FMc LD A,(FireMF) OR A JR NZ FMb JR FMa ; kLeft EXX CALL ukLeft EXX RET ; kRight EXX CALL ukRight EXX RET ; kForward EXX CALL ukForward EXX RET ; kBackward EXX CALL ukBackward EXX RET ; kFire LD A,(FireF) CP 2 CCF RET ; kFireMiss LD A,(FireMF) CP 2 CCF RET ; ; SetUpPall LD A,(ColMask) LD HL,Pall1 LD DE,IntPall1 BIT 0,A JR NZ SUP1 LD HL,Pall2 LD DE,IntPall2 SUP1 LD (pcPall),DE LD BC,#7F10 OUT (C),C LD C,#54 OUT (C),C LD C,0 SUPlp OUT (C),C LD A,(HL) INC HL OR A RET Z OUT (C),A INC C JR SUPlp ; Pall1 DEFB cA,cA,cC,cC DEFB cA,cA,cC,cC DEFB cB,cB,cD,cD DEFB cB,cB,cD,cD DEFB 0 ; Pall2 DEFB cA,cC,cA,cC DEFB cB,cD,cB,cD DEFB cA,cC,cA,cC DEFB cB,cD,cB,cD DEFB 0 ; IntPall1 DEFB cA,cA,cC,cC DEFB cA,cA,cC,cC DEFB cA,cA,cC,cC DEFB cA,cA,cC,cC DEFB bA,bB,bC,bD DEFB cA,cA,cA,cA ; IntPall2 DEFB cA,cC,cA,cC DEFB cA,cC,cA,cC DEFB cA,cC,cA,cC DEFB cA,cC,cA,cC DEFB bA,bB,bC,bD DEFB cA,cA,cA,cA ; CallHL JP (HL) ; NegHL LD A,H CPL LD H,A LD A,L CPL LD L,A INC HL RET ; ShowRadar XOR A LD L,A LD E,A INC A LD (Colour),A CALL SRc ; LD HL,(Tank+ObjeZ) LD BC,(Tank+ObjeX) ; LD A,#36 EX AF,AF' ; LD A,(Tank+ObjeFlag) OR A LD A,2 CALL NZ SRdot ; LD HL,(TankShell+ObjeZ) LD BC,(TankShell+ObjeX) ; LD A,#18 EX AF,AF' ; LD A,(TankShell+ObjeFlag) OR A LD A,3 CALL NZ SRdot ; LD HL,(MyShell+ObjeZ) LD BC,(MyShell+ObjeX) ; LD A,#18 EX AF,AF' ; LD A,(MyShell+ObjeFlag) OR A RET Z ; LD A,3 ; SRdot LD (Colour),A ; LD DE,(ViewZ) OR A SBC HL,DE RL H SRA H ; EX DE,HL ; LD H,B LD L,C LD BC,(ViewX) OR A SBC HL,BC RL H SRA H ; CALL DoRotHLDE ; EX AF,AF' LD B,A ; LD A,H OR A JP P SRa NEG SRa CP B RET NC ; LD A,D OR A JP P SRb NEG SRb CP B RET NC ; CALL RadDiv EX DE,HL CALL NegHL CALL RadDiv EX DE,HL ; SRc LD A,E ADD A,93 RadarYO EQU $-1 LD D,A ; LD A,L ADD A,79 RadarXO EQU $-1 LD E,A ; JP DrawPoint ; RadDiv LD L,H RL H LD A,0 SBC A,0 LD H,A SRA H RR L RET ; TankTemp DEFW #600 ;X DEFW 0 ;dX DEFW 0; #300 ;Y DEFW 0 ;dY DEFW #400 ;Z DEFW 0 ;dZ DEFB 0 ;Ang ; DEFB #8F ;Flag DEFB #02 ;Col ; DEFS 1 ; ; DEFW -#33,-#95 ; DEFW #33,-#95 ; DEFW #0D, #93 ; DEFW -#0D, #93 ; ; DEFW GeneralXS ;pXS ; DEFW mTankFall ;pMove DEFW DoTank ;pDisp DEFW TankShot ;pShot ; DEFB 4 ;C DEFB 4 ;Ca DEFW #8 ;Sp DEFW #C ;dSP DEFB 18 ;SpC ; MissTemp DEFW 0 ;X DEFW 0 ;dX DEFW #300 ;Y DEFW 0 ;dY DEFW 0 ;Z DEFW 0 ;dZ DEFB 0 ;Ang ; DEFB #8F ;Flag DEFB #02 ;Col ; DEFS 1 ; ; DEFW -#60, 0 ; DEFW #60, 0 ; DEFW #01,#200 ; DEFW -#01,#200 ; ; DEFW GeneralXS ;pXS ; DEFW Ret ;pMove DEFW DoMiss ;pDisp DEFW TankShot ;pShot ; DEFB 4 ;C DEFB 4 ;Ca DEFW #8 ;Sp DEFW #C ;dSP DEFB 18 ;SpC ; DEFB #03 ;RC DEFB 30 ;DC DEFB 0 ;Xh DEFB 0 ;RD ; FuelTemp DEFW 0 ;X DEFW 0 ;dX DEFW 0 ;Y DEFW 0 ;dY DEFW #400 ;Z DEFW 0 ;dZ DEFB 0 ;Ang ; DEFB #84 ;Flag DEFB #03 ;Col ; DEFS 1 ; ; DEFW 0,0 ; DEFW 0,0 ; DEFW 0,0 ; DEFW 0,0 ; ; DEFW Ret ;pXS ; DEFW mFuel ;pMove DEFW DoFuel ;pDisp DEFW Ret ;pShot ; DEFB MaxFuel ;C DEFB 4 ;Ca DEFW #8 ;Sp DEFW #C ;dSP DEFB 18 ;SpC ; DEFB #03 ;RC DEFB 30 ;DC DEFB 0 ;Xh DEFB 0 ;RD ; ShellTemp DEFW 0 ;X DEFW 0 ;dX DEFW 0 ;Y DEFW 0 ;dY DEFW 0 ;Z DEFW 0 ;dZ DEFB 0 ;Ang ; DEFB #85 ;Flag DEFB #03 ;Col ; DEFS 1 ; ; DEFW -#0A,-#10 ; DEFW #0A,-#10 ; DEFW #0A, #10 ; DEFW -#0A, #10 ; ; DEFW Ret ;pXS ; DEFW mShell ;pMove DEFW DoShell ;pDisp DEFW Ret ;pShot ; DEFB 50 ;C DEFB 0 ;Ca DEFW ShellSp ;Sp DEFW 0 ;dSP DEFB 0 ;SpC ; DEFB 0 ;RC DEFB 0 ;DC DEFB 0 ;Xh DEFB 0 ;RD ; ; RtX DEFW 0 RtZ DEFW 0 ; MyOldX DEFW 0 MyOldZ DEFW 0 MyDist DEFW 0 cScreen DEFB 0 ValidMove DEFB 0 MoveDir DEFB 0 ; nInts DEFB 0 Waiting DEFB 0 FireF DEFB 0 FireMF DEFB 0 ; TTempX DEFW 0 TempX DEFW 0 TTempZ DEFW 0 TempZ DEFW 0 TBX DEFW 0 TBZ DEFW 0 GSA DEFB 0 ; XSAng DEFB 0 MostLX DEFW 0 MostRX DEFW 0 ; ViewAng DEFB 0 ; TempSP DEFW 0 TempHL DEFW 0 ; VolcanoX DEFW 0 VolcanoY DEFW 0 ; BumpFuel DEFB 0 NoObje DEFB 0 NoTanks DEFB 0 DVC DEFB 0 DVF DEFB 0 ; ObjeTable EQU $ MyShell DEFS lObje TankShell DEFS lObje MyX DEFW 0 DEFW 0 MyY DEFW 0 DEFW 0 MyZ DEFW 0 DEFW 0 MyAng DEFB 0 DEFB #03 DEFS #12 DEFW MainClip ; ORG MyX+ObjepShot ; DEFW UserShot ; ORG MyX+ObjepDisp ; DEFW DoTank ; ORG MyX+ObjeCol ; DEFB 2 ; ORG MyX+lObje ; FuelPod DEFS lObje Tank DEFS lObje Saucer DEFS lObje ; Objects DEFS nObje*lObje ; ExplA DEFS lObje*nExpl ; VolcTab DEFS nVolc*lVolc ; Mountains DEFS #1000+320 ; Ye End EQU $ ORG Workspace ; DivTab DEFS #100 XDivTab DEFS #100 YTable DEFS #200 ; CentX DEFS 2 CentY DEFS 2 CentZ DEFS 2 ; DispAng DEFS 1 ; Colour DEFS 1 ColMask DEFS 1 ; DScore DEFS 2 DEnergy DEFS 2 ; JP FrameInt ; SetUpSubs DEFS 3 Rand DEFS 3 SetUpRot DEFS 3 DoRotHLDE DEFS 3 RotHLDEA DEFS 3 ; DivHLDE DEFS 3 SignDiv DEFS 3 ObjeDiv DEFS 3 ShapeDiv DEFS 3 ; MultHLDE DEFS 3 SignMult DEFS 3 ; Mult8 DEFS 3 Sine DEFS 3 Cosine DEFS 3 ; AnyLine DEFS 3 VertLine DEFS 3 HoriLine DEFS 3 DrawPoint DEFS 3 UnDrawLines DEFS 3 ; CLS DEFS 3 ; DoPyra DEFS 3 DoCube DEFS 3 DoTank DEFS 3 DoShell DEFS 3 DoExp1 DEFS 3 DoFuel DEFS 3 DoSauc DEFS 3 DoPyra1 DEFS 3 DoCube1 DEFS 3 DoMiss DEFS 3 ; DEFS 2 DEFS 16*90 DEFS #42 DEFS 16*90 DEFS #40 ; DEFS #40 MntStore1 DEFS 320 DEFS #40 MntStore2 DEFS 320 Ye End 2 EQU $