10000 !***** I'M PILOT **************************! 10010 ! PROGRAMED BY N.OWARI 10020 ! 2001/05/6 - ????/??/?? 10030 !******************************************! 10040 !HSCR=100 10050 !VARSAVE "IMP/IMP",HSCR 10060 !******************************************! 10070 LABEL INITIALIZE 10080 INIT ALL 10090 TEXTMODE 2 10100 RANDOMIZE 10110 FKEY "SAVE "+CHR$(34)+"IMP/IMP"+CHR$(34),3 10120 FKEY "RENUMBER AT 10000",6 10130 FKEY "TEXTMODE 2",12 10140 ! ANALOG STICK CALIBRATE 10150 ASB=32 ! スティックの遊び 10160 T=PAD(1,13) 10170 L1U=MAX(1,T-ASB) ! 1P-L上効き始め 10180 L1D=MIN(254,T+ASB) ! 1P-L下効き始め 10190 T=PAD(1,14) 10200 L1L=MAX(1,T-ASB) ! 1P-L左効き始め 10210 L1R=MIN(254,T+ASB) ! 1P-L右効き始め 10220 T=PAD(1,15) 10230 R1U=MAX(1,T-ASB) ! 1P-R上効き始め 10240 R1D=MIN(254,T+ASB) ! 1P-R下効き始め 10250 T=PAD(1,16) 10260 R1L=MAX(1,T-ASB) ! 1P-R左効き始め 10270 R1R=MIN(254,T+ASB) ! 1P-R右効き始め 10280 L1V=MIN(L1U,255-L1D) 10290 L1H=MIN(L1L,255-L1R) 10300 R1V=MIN(R1U,255-R1D) 10310 R1H=MIN(R1L,255-R1R) 10320 CALL TITLE 10330 !LOCATE 1,20 10340 !PRINT "FILE LOAD? YES:○, NO:×" 10350 !DO WHILE PAD(1,6)=0 AND PAD(1,7)=0 10360 !LOOP 10370 !IF PAD(1,6)>0 THEN CALL INIT_LOAD 10380 CALL INIT_LOAD 10390 LOCATE 0,16 10400 PRINT " PUSH START " 10410 DO WHILE PAD(1,20)=0 10420 LOOP 10430 SEPLAY 16,255,255 10440 FOR I=0 TO 5 STEP .1 10450 EFFECT 127,-I*2,-I,640+I*2,224+I,0 10460 FSYNC 3 10470 NEXT I 10480 CLEAR 10490 FSYNC 120 10500 EFFECT 0,0,0,640,224,0 10510 GOTO *START 10520 !***** FINISH *****************************! 10530 LABEL FINISH 10540 MODOFF MID 10550 BGMSTOP 10560 FSYNC 10 10570 SEPLAY 17,128,128 10580 LOCATE 21,10 10590 PRINT "GAME OVER" 10600 VARSAVE "IMP/IMP",HSC ! HI-SCORE SAVE 10610 FSYNC 180 10620 LOCATE 16,12 10630 PRINT "CONTINUE? [YES] NO" 10640 CONT=1 10650 MS=0 10660 BGMPLAY 2+INT(RND*2)*2 10670 DO WHILE PAD(1,20)=0 10680 CALL DISP 10690 IF CONT=0 AND PAD(1,14)L1R THEN 10760 SEPLAY 14,128,128 10770 LOCATE 26,12 10780 PRINT " YES [NO]" 10790 CONT=0 10800 END IF 10810 CALL CMOV 10820 FOR I=1 TO N 10830 IF EHP(I)<-60 THEN CALL EENT(I) 10840 IF EHP(I)>0 THEN CALL EROT(I) 10850 CALL EMOV(I) 10860 NEXT I 10870 FOR I=1 TO NEA 10880 CALL EAMV(I) 10890 NEXT I 10900 FOR I=1 TO NA 10910 CALL AMOV(I) 10920 NEXT I 10930 FOR I=1 TO NH 10940 CALL HMOV(I) 10950 NEXT I 10960 LOOP 10970 IF CONT=1 THEN GOTO *RESTART 10980 TEXTCOL WHITE 10990 BGMSTOP 11000 SEPLAY 18,128,128 11010 FSYNC 300 11020 INIT 11030 TEXTMODE 2 11040 END 11050 !***** TITLE ******************************! 11060 SUB TITLE 11070 LOCATE 1,1 11080 PRINT " [ あいむパイロット ]" 11090 PRINT 11100 PRINT " 左スティック左右 : 自機左右旋回" 11110 PRINT " L1・R1 : 自機ロール" 11120 PRINT " L2・R2 : 自機速度調節" 11130 PRINT " ○ : ミサイル" 11140 PRINT " × : バルカン" 11150 PRINT " △ : 照準切替" 11160 PRINT " □ : 後方視点切替" 11170 PRINT " 右スティック上下 : 視点遠近調節" 11180 PRINT " 方向キー : 視点方位調節" 11190 PRINT " R3 : 視点位置リセット" 11200 PRINT " START : ポーズ" 11210 PRINT " SELECT : 振動切替(ポーズ中)" 11220 PRINT 11230 PRINT " お待ち下さい" 11240 END SUB 11250 !***** FILE LOAD **************************! 11260 SUB INIT_LOAD 11270 LOCATE 30,22 11280 PRINT "LOADING SE..."; 11290 SELOAD "IMP/IMP" 11300 SEPLAY 19,255,255 11310 LOCATE 30,22 11320 PRINT "LOADING BGM..."; 11330 BGMLOAD "IMP/CARNAGE",1 11340 SEPLAY 19,255,255 11350 FOR I=1 TO 2 11360 LOCATE 30,22 11370 PRINT "LOADING MODEL"+STR$(I)+"... "; 11380 MODLOAD "IMP/IMP"+STR$(I),I 11390 SEPLAY 19,255,255 11400 NEXT I 11410 LOCATE 30,22 11420 PRINT "LOADING HI-SCORE..."; 11430 VARLOAD "IMP/IMP",HSC 11440 SEPLAY 20,255,255 11450 LOCATE 30,22 11460 PRINT " "; 11470 END SUB 11480 !***** START ******************************! 11490 LABEL START 11500 RANDOMIZE 11510 ZSORT 1,1000 11520 VBON=1 ! VIBRATE SWITCH 11530 N=5 ! NUMBER OF ENEMY 11540 NEA=5 ! NUMBER OF ENEMY ASSAULT 11550 NA=3 ! NUMBER OF MY ASSAULT 11560 NH=2 ! NUMBER OF MY HOMING MISSILE 11570 MID=N+NEA+1 11580 CRW=180 11590 CRR=800 11600 CRX=20 11610 CRY=CRW 11620 CRZ=0 11630 DIM EX(N),EY(N),EZ(N),ED(N) 11640 DIM ERX(N),ERY(N),ERZ(N),ES(N) 11650 DIM ET(N),ETF(N),ETR(N) 11660 DIM EHP(N),ESC(N),EAR(N) 11670 DIM PRY(N),PF(N) 11680 DIM AX(NA),AY(NA),AZ(NA),AD(NA) 11690 DIM ARX(NA),ARY(NA),ARZ(NA),AS(NA) 11700 DIM EAX(NEA),EAY(NEA),EAZ(NEA),EAD(NEA) 11710 DIM EARX(NEA),EARY(NEA),EARZ(NEA),EAS(NEA) 11720 DIM HX(NH),HY(NH),HZ(NH),HD(NH) 11730 DIM HRX(NH),HRY(NH),HRZ(NH),HS(NH),HI(NH) 11740 DIM HIL(N) 11750 TILECOL 102,0,0,0,128 11760 TILEPOS 102,0,0,640,224,1000000 11770 TILEDISP 102 11780 TEXTCOL YELLOW 11790 BGCOL 0,96,192 11800 FOGCOL 32,120,196 11810 FOGSET 1600,6400 11820 LIGCOL 1,255,255,255 11830 LIGCOL 2,128,128,128 11840 LIGCOL 3,64,64,64 11850 LIGVEC 1,0,1,0 11860 LIGVEC 2,0,0,1 11870 LIGVEC 3,0,-1,0 11880 MODSET 1000,2,2 11890 MODOPT 1000,19.5,0,0,1 11900 MODDISP 1000 11910 TILECOL 101,0,0,0,8 11920 TILEPOS 101,0,112,224,224,999800 11930 TILEDISP 101 11940 TRICOL MID,255,255,0,127 11950 TRIPOS MID,112,167,109,170,115,170,999810 11960 TRIDISP MID 11970 !***** RESTART ****************************! 11980 LABEL RESTART 11990 CLEAR 12000 REST=2 ! 残機数 12010 SC=0 ! スコア 12020 AHP=1 ! 自機弾の強さ 12030 HHP=20 ! ミサイルの強さ 12040 LEHP=0 ! LAST ENEMY HP 12050 BS=5 ! 初期移動基本速度 12060 BT=BS*.08 ! 初期旋回基本速度 12070 XT=BT*1.2 ! 初期旋回最大速度 12080 MHP,MHPX=1 ! 自機HP 12090 MX,MY,MZ,MRX,MRZ,MT=0 12100 MODSET MID,1,1 12110 MODOPT MID,1,1,1,1 12120 MODPOS MID,MX,MY,MZ 12130 MODDISP MID 12140 CALL CMOV 12150 FOR I=1 TO N 12160 CALL EENT(I) 12170 EX(I),ED(I)=20000 12180 NEXT I 12190 FOR I=1 TO NA 12200 AD(I)=0 12210 CALL AMOV(I) 12220 NEXT I 12230 FOR I=1 TO NEA 12240 EAD(I)=0 12250 CALL EAMV(I) 12260 NEXT I 12270 FOR I=1 TO NH 12280 HD(I)=0 12290 CALL HMOV(I) 12300 NEXT I 12310 CALL DISP 12320 BGMPLAY 1+INT(RND*2)*2 12330 IF RESTART=0 THEN 12340 FOR I=128 TO 0 STEP -1 12350 TILECOL 102,0,0,0,I 12360 FSYNC 1 12370 NEXT I 12380 TILEOFF 102 12390 END IF 12400 !***** MAIN *******************************! 12410 DO 12420 CALL SCR 12430 IF MHP>MHPX THEN 12440 MHP=MHP-1 12450 ELSE 12460 CALL MYCL 12470 END IF 12480 CALL ASCL 12490 IF MHP<-120 THEN 12500 REST=REST-1 12510 IF REST<0 THEN EXIT DO 12520 CALL SCR 12530 MHP=MHPX+200 12540 MX,MY,MZ,MRX,MRZ,MT=0 12550 MS=0 12560 MODOFF MID 12570 MODSET MID,1,1 12580 MODOPT MID,1,1,1,1 12590 MODPOS MID,MX,MY,MZ 12600 MODDISP MID 12610 CALL DISP 12620 END IF 12630 IF PP20=0 AND PAD(1,20)>0 THEN CALL PAUS 12640 PP20=PAD(1,20) 12650 CALL HTAG 12660 IF MHP>0 THEN 12670 CALL MROT 12680 SHON=MOD(SHON+1,3) 12690 IF SHON=1 AND PAD(1,7)>16 THEN CALL AENT 12700 IF HMON<1 AND PAD(1,6)>16 THEN CALL HENT 12710 END IF 12720 IF PAD(1,6)<=16 THEN HMON=-ABS(HMON) 12730 CALL MMOV 12740 FOR I=1 TO N 12750 IF EHP(I)<-60 THEN CALL EENT(I) 12760 IF EHP(I)>0 THEN 12770 CALL EROT(I) 12780 IF EAR(I)>RND AND ED(I)>300 AND ED(I)<3200 THEN CALL EAET(I) 12790 END IF 12800 CALL EMOV(I) 12810 NEXT I 12820 FOR I=1 TO NEA 12830 CALL EAMV(I) 12840 NEXT I 12850 FOR I=1 TO NA 12860 CALL AMOV(I) 12870 NEXT I 12880 FOR I=1 TO NH 12890 CALL HMOV(I) 12900 NEXT I 12910 CALL CMOV 12920 CALL DISP 12930 LOOP 12940 GOTO *FINISH 12950 !***** SCORE ******************************! 12960 SUB SCR 12970 T=INT(SC*.01) 12980 BS=MIN(13,T+5) 12990 BT=BS*.08 13000 XT=BT*1.2 13010 IF HSC0 THEN PRINT "0"; 13140 LOCATE 26,0 13150 PRINT "HI-SCORE:";RTRIM$(STR$(HSC))+"0"; 13160 LOCATE 44,0 13170 PRINT "REST:";REST; 13180 LOCATE 1,1 13190 PRINT "E.HP:"; 13200 IF HID>0 THEN 13210 LEHP=EHP(HID) 13220 PRINT EHP(HID);" "; 13230 ELSE 13240 PRINT LEHP;" "; 13250 END IF 13260 LOCATE 47,22 13270 PRINT "SP"; 13280 M=0 13290 FOR I=1 TO NH 13300 IF HD(I)<1 THEN M=M+1 13310 NEXT I 13320 LOCATE 50-NH*2,1 13330 PRINT REPEAT$(" ",NH-M);REPEAT$("●",M); 13340 END SUB 13350 !***** MY MODEL COLLISION *****************! 13360 SUB MYCL 13370 T=COLLISION(MID,1,N) 13380 IF T>0 THEN 13390 I=MHP 13400 MHP=MAX(0,MHP-EHP(T)) 13410 LEHP,EHP(T)=MAX(0,EHP(T)-I) 13420 VIBRATE 1,7*VBON,SGN(VBON),1 13430 IF EHP(T)=0 THEN MODOFF T 13440 IF MHP=0 THEN 13450 SEPLAY 11,255,255 13460 ELSE 13470 SEPLAY MIN(2,INT(ESC(T)*.1))+8,255,255 13480 END IF 13490 ELSE 13500 T=COLLISION(MID,N+1,N+NEA) 13510 IF T>0 THEN 13520 T=T-N 13530 I=MHP 13540 MHP=MAX(0,MHP-1) 13550 EAX(T),EAZ(T)=10000 13560 EAS(T),EAD(T)=0 13570 MODOFF T+N 13580 VIBRATE 1,7*VBON,SGN(VBON),1 13590 IF MHP=0 THEN 13600 SEPLAY 11,255,255 13610 ELSE 13620 SEPLAY 6,255,255 13630 END IF 13640 END IF 13650 END IF 13660 END SUB 13670 !***** MY ASSAULT MODELS COLLISION ********! 13680 SUB ASCL 13690 FOR I=1 TO NA 13700 IF AD(I)>0 THEN 13710 M=COLLISION(I+MID,1,N) 13720 IF M>0 THEN 13730 MODOFF I+MID 13740 AX(I),AY(I),AZ(I)=0 13750 AD(I),AS(I)=0 13760 LEHP,EHP(M)=MAX(0,EHP(M)-AHP) 13770 T=MIN(255,MAX(64,256-.08*ED(M))) 13780 IF EHP(M)=0 THEN 13790 MODOFF M 13800 SC=MIN(999999,SC+ESC(M)) 13810 SEPLAY MIN(2,INT(ESC(M)*.1))+8,T,T 13820 ELSE 13830 SEPLAY 7,T*.5,T*.5 13840 END IF 13850 END IF 13860 END IF 13870 NEXT I 13880 FOR I=1 TO NH 13890 IF HD(I)>0 THEN 13900 M=COLLISION(I+MID+NA,1,N) 13910 IF M>0 THEN 13920 HD(I)=0 13930 CALL HMOV(I) 13940 LEHP,EHP(M)=MAX(0,EHP(M)-HHP) 13950 T=MIN(255,MAX(64,256-.08*ED(M))) 13960 IF EHP(M)=0 THEN 13970 MODOFF M 13980 SC=MIN(999999,SC+ESC(M)) 13990 SEPLAY MIN(2,INT(ESC(M)*.1))+8,T,T 14000 ELSE 14010 SEPLAY 7,T*.5,T*.5 14020 END IF 14030 END IF 14040 END IF 14050 NEXT I 14060 END SUB 14070 !***** ALL MODELS DISPLAY *****************! 14080 SUB DISP 14090 CAMVEC 1,-CX,-CY,-CZ 14100 CAMPOS 1,CX,CY,CZ 14110 IF MHP>0 THEN MODOPT MID,1,1,1,1 14120 IF MHP>MHPX THEN MODOPT MID,1,1,1,2 14130 MODROT MID,RAD(MRX),RAD(MRY),RAD(MRZ) 14140 MODPOS MID,MX,MY,MZ 14150 FOR I=1 TO N 14160 MODROT I,RAD(ERX(I)),RAD(ERY(I)),RAD(ERZ(I)) 14170 MODPOS I,EX(I),EY(I),EZ(I) 14180 MODROT I+100,0,RAD(PRY(I)),0 14190 MODROT I+110,RAD(PRY(I)),0,RAD(90) 14200 NEXT I 14210 FOR I=1 TO NA 14220 MODROT I+MID,RAD(ARX(I)),RAD(ARY(I)),RAD(ARZ(I)) 14230 MODPOS I+MID,AX(I),AY(I),AZ(I) 14240 NEXT I 14250 FOR I=1 TO NEA 14260 MODROT I+N,RAD(EARX(I)),RAD(EARY(I)),RAD(EARZ(I)) 14270 MODPOS I+N,EAX(I),EAY(I),EAZ(I) 14280 NEXT I 14290 FOR I=1 TO NH 14300 IF HD(I)>0 THEN 14310 MODROT I+MID+NA,RAD(HRX(I)),RAD(HRY(I)),RAD(HRZ(I)) 14320 MODPOS I+MID+NA,HX(I),HY(I),HZ(I) 14330 END IF 14340 NEXT I 14350 TILEPOS 100,620,210-100*MS/BS,630,210,999910 14360 TILECOL 100,255,255-128*MS/BS,0,96 14370 TILEDISP 100 14380 FOR I=1 TO N 14390 IF HIL(I)<9999 AND MHP>0 THEN 14400 GETSPOS GX,GY,GZ,1,EX(I),EY(I),EZ(I) 14410 GX=MIN(1000,MAX(-1000,GX)) 14420 GY=MIN(1000,MAX(-1000,GY)) 14430 LINEPOS 200+I,GX-8,GY-4,GX+8,GY+4,999900 14440 LINEPOS 300+I,GX+8,GY-4,GX-8,GY+4,999900 14450 LINECOL 200+I,0,255,0,64 14460 LINECOL 300+I,0,255,0,64 14470 LINEDISP 200+I 14480 LINEDISP 300+I 14490 ELSE 14500 LINEOFF 200+I 14510 LINEOFF 300+I 14520 END IF 14530 NEXT I 14540 IF HID>0 AND MHP>0 THEN 14550 GETSPOS GX,GY,GZ,1,EX(HID),EY(HID),EZ(HID) 14560 GX=MIN(1000,MAX(-1000,GX)) 14570 GY=MIN(1000,MAX(-1000,GY)) 14580 LINEPOS 200+HID,GX-8,GY-4,GX+8,GY-4,999900 14590 LINEPOS 300+HID,GX-8,GY+4,GX+8,GY+4,999900 14600 LINEPOS 400,GX-8,GY-4,GX-8,GY+4,999900 14610 LINEPOS 500,GX+8,GY-4,GX+8,GY+4,999900 14620 LINECOL 200+HID,255,0,0,128 14630 LINECOL 300+HID,255,0,0,128 14640 LINECOL 400,255,0,0,128 14650 LINECOL 500,255,0,0,128 14660 LINEDISP 200+HID 14670 LINEDISP 300+HID 14680 LINEDISP 400 14690 LINEDISP 500 14700 ELSE 14710 LINEOFF 200+HID 14720 LINEOFF 300+HID 14730 LINEOFF 400 14740 LINEOFF 500 14750 END IF 14760 CALL RADA 14770 FSYNC 1 14780 END SUB 14790 !***** MY MODEL ROTATE ********************! 14800 SUB MROT 14810 TY=PAD(1,14) 14820 TZ=PAD(1,9)-PAD(1,10) 14830 IF TY>=L1L AND TY<=L1R THEN MT=MT*.7 14840 IF TYL1R THEN 14900 MTX=XT-XT*(255-TY)/(255-L1R) 14910 MT=MIN(MT+.05,MTX) 14920 IF MT>MTX THEN MT=MAX(MTX,MT*.7) 14930 END IF 14940 MRY=MRY+MT 14950 IF TZ=0 THEN 14960 IF TYL1R THEN TZ=INT(90*(255-TY)/(255-L1R)-90) 14980 MRZ=INT(MRZ-(MRZ-TZ)*.1-SGN(MRZ-TZ)) 14990 ELSE 15000 MRZ=MRZ+INT(TZ*.1) 15010 END IF 15020 MRX=MRX+((MRX<-180)-(MRX>180))*360 15030 MRY=MRY+((MRY<-180)-(MRY>180))*360 15040 MRZ=MIN(MAX(MRZ,-90),90) 15050 END SUB 15060 !***** MY MODEL MOVE **********************! 15070 SUB MMOV 15080 IF MHP>0 THEN 15090 T=PAD(1,12)-PAD(1,11) 15100 T=MIN(64,MAX(-64,T)) 15110 MSX=BS*T*.0125+BS 15120 MS=MS+SGN(MSX-MS)*BS*.015*(ABS(MSX-MS)>BS*.015) 15130 !T=(MS/BS+1)*2500/CRR 15140 !IF PLSE=0 THEN SEPLAY 12,T,T 15150 !PLSE=MOD(PLSE+1,6) 15160 END IF 15170 MVX=MS*SIN(RAD(MRY)) 15180 MVZ=MS*COS(RAD(MRY)) 15190 FOR I=1 TO N 15200 EX(I)=EX(I)+MVX 15210 EZ(I)=EZ(I)+MVZ 15220 NEXT I 15230 FOR I=1 TO NA 15240 IF AD(I)>0 THEN 15250 AX(I)=AX(I)+MVX 15260 AZ(I)=AZ(I)+MVZ 15270 END IF 15280 NEXT I 15290 FOR I=1 TO NEA 15300 IF EAD(I)>0 THEN 15310 EAX(I)=EAX(I)+MVX 15320 EAZ(I)=EAZ(I)+MVZ 15330 END IF 15340 NEXT I 15350 FOR I=1 TO NH 15360 IF HD(I)>0 THEN 15370 HX(I)=HX(I)+MVX 15380 HZ(I)=HZ(I)+MVZ 15390 END IF 15400 NEXT I 15410 IF MHP<=0 THEN 15420 MODSET MID,2,1 15430 MODOPT MID,-(MHP+60)^2/360+10.1+RND,0,1,1 15440 IF MOD(MHP,3)=0 THEN MODDISP MID ELSE MODOFF MID 15450 MS=MS*0.9 15460 MX=MX-2+RND*4 15470 MY=MY+4+RND 15480 MZ=MZ-2+RND*4 15490 MHP=MHP-1 15500 END IF 15510 END SUB 15520 !***** ENEMY MODELS ROTATE ****************! 15530 SUB EROT(M) 15540 IF EHP(M)>0 THEN 15550 IF ETF(M)=0 THEN 15560 IF RND180))*360 15610 IF ABS(T)<10 THEN ETF(M)=0 15620 ERY(M)=ERY(M)+SGN(T)*ET(M) 15630 ERY(M)=ERY(M)+((ERY(M)<-180)-(ERY(M)>180))*360 15640 ERZ(M)=ERZ(M)-SGN(T)*4 15650 ERZ(M)=MIN(MAX(ERZ(M),-42),42) 15660 END IF 15670 ERZ(M)=ERZ(M)-SGN(ERZ(M))*2 15680 END IF 15690 END SUB 15700 !***** ENEMY MODELS MOVE ******************! 15710 SUB EMOV(M) 15720 IF ED(M)>9600 THEN 15730 CALL EENT(M) 15740 ELSE 15750 EX(M)=EX(M)-ES(M)*SIN(RAD(ERY(M))) 15760 EZ(M)=EZ(M)-ES(M)*COS(RAD(ERY(M))) 15770 ED(M)=SQR((MX-EX(M))^2+(MZ-EZ(M))^2) 15780 PRY(M)=MOD(PRY(M)+61,360) 15790 IF EHP(M)<=0 THEN 15800 MODSET M,2,1 15810 MODOFF M+100 15820 MODOFF M+110 15830 IF ESC(M)<100 THEN 15840 MODOPT M,4.1-(EHP(M)+30)^2/225+RND,0,1,1 15850 ELSE 15860 MODOPT M,9.1-(EHP(M)+30)^2/100+RND,0,1,1 15870 END IF 15880 IF MOD(EHP(M),3)=0 THEN MODDISP M ELSE MODOFF M 15890 ES(M)=ES(M)*0.9 15900 EX(M)=EX(M)-2+RND*4 15910 EY(M)=EY(M)+4+RND 15920 EZ(M)=EZ(M)-2+RND*4 15930 EHP(M)=EHP(M)-1 15940 END IF 15950 END IF 15960 END SUB 15970 !***** CAMERA ROTATE & MOVE ***************! 15980 SUB CMOV 15990 T=PAD(1,15) 16000 IF TR1D THEN CRR=MIN(3200,CRR+(T-R1D)/5) 16020 CRX=MIN(90,CRX+PAD(1,3)*.01*(PAD(1,3)>16)) 16030 CRX=MAX(-90,CRX-PAD(1,4)*.01*(PAD(1,4)>16)) 16040 CRW=CRW+PAD(1,1)*.01*(PAD(1,1)>16) 16050 CRW=CRW-PAD(1,2)*.01*(PAD(1,2)>16) 16060 CRW=MOD(CRW,360) 16070 IF PAD(1,18)>0 THEN 16080 CRR=800 16090 CRX=20 16100 CRW=180 16110 END IF 16120 CRY=CRW-MRY+(PAD(1,8)>16)*180 16130 CX=CRR*SIN(RAD(CRY))*COS(RAD(CRX)) 16140 CY=-CRR*SIN(RAD(CRX)) 16150 CZ=-CRR*COS(RAD(CRY))*COS(RAD(CRX)) 16160 END SUB 16170 !***** ENEMY ENTRY ************************! 16180 SUB EENT(I) 16190 MODOFF I 16200 T=RAD(RND*360) 16210 J=8000 16220 EX(I)=J*SIN(T) 16230 EY(I)=0 16240 EZ(I)=J*COS(T) 16250 ED(I)=SQR((MX-EX(I))^2+(MZ-EZ(I))^2) 16260 ERX(I)=0 16270 ERY(I)=MRY+180*(EZ(I)<=0) 16280 ERZ(I)=0 16290 ETF(I)=0 16300 T=INT(RND*3) 16310 SELECT CASE INT(RND*101) 16320 CASE 0 TO 19 ! MISSLE 16330 ES(I)=BS*1.5 16340 ET(I)=BT*1.3 16350 ETR(I)=0.9 16360 EHP(I)=1 16370 ESC(I)=1 16380 EAR(I)=0 16390 PF(I)=0 16400 MODOPT I,1,1,1,1 16410 MODSET I,1,2 16420 CASE 20 TO 39 ! HELI 16430 ES(I)=BS*.7 16440 ET(I)=BT*2 16450 ETR(I)=.01 16460 EHP(I)=20 16470 ESC(I)=2 16480 EAR(I)=.01 16490 PF(I)=1 16500 MODOPT I,1,1,1,1 16510 MODSET I,1,3 16520 CASE 40 TO 59 ! ATTACKER 16530 ES(I)=BS*1.05 16540 ET(I)=BT 16550 ETR(I)=.03 16560 EHP(I)=20 16570 ESC(I)=3 16580 EAR(I)=.005 16590 PF(I)=0 16600 MODOPT I,1,1,1,1 16610 MODSET I,1,4 16620 CASE 60 TO 79 ! TYAIKA 16630 ES(I)=BS*1.1 16640 ET(I)=BT*.9 16650 ETR(I)=.02 16660 EHP(I)=20+T*60 16670 ESC(I)=(1+T*2)*4 16680 EAR(I)=.0025 16690 PF(I)=0 16700 MODOPT I,1+T,1,1,1 16710 MODSET I,1,5 16720 CASE 80 TO 99 ! UFO 16730 ES(I)=BS*1.3 16740 ET(I)=BT*5 16750 ETR(I)=.0025 16760 EHP(I)=20+T*60 16770 ESC(I)=(1+T*2)*5 16780 EAR(I)=.001 16790 PF(I)=0 16800 MODOPT I,1+T,1,1,1 16810 MODSET I,1,6 16820 CASE ELSE ! BOSS 16830 ES(I)=BS*.8 16840 ET(I)=BT*.4 16850 ETR(I)=.003 16860 EHP(I)=999 16870 ESC(I)=200 16880 EAR(I)=.003 16890 PF(I)=0 16900 MODSET I,1,7 16910 MODOPT I,5,1,1,1 16920 END SELECT 16930 MODPOS I,EX(I),EY(I),EZ(I) 16940 MODROT I,RAD(ERX(I)),RAD(ERY(I)),RAD(ERZ(I)) 16950 MODSET I+100,1,10 16960 MODOPT I+100,1.2,1,1,1 16970 MODPOS I+100,0,1,0 16980 MODROT I+100,0,0,0 16990 MODJOIN I+100,I 17000 MODSET I+110,1,10 17010 MODOPT I+110,.4,1,1,1 17020 MODPOS I+110,-1.5,1,21 17030 MODROT I+110,0,0,RAD(90) 17040 MODJOIN I+110,I 17050 IF PF(I)=1 THEN 17060 MODDISP I+100 17070 MODDISP I+110 17080 ELSE 17090 MODOFF I+100 17100 MODOFF I+110 17110 END IF 17120 MODDISP I 17130 END SUB 17140 !***** MY ASSAULT MODELS MOVE *************! 17150 SUB AMOV(M) 17160 IF AD(M)>0 THEN 17170 AX(M)=AX(M)-AS(M)*SIN(RAD(ARY(M))) 17180 AZ(M)=AZ(M)-AS(M)*COS(RAD(ARY(M))) 17190 AD(M)=AD(M)-1 17200 ELSE 17210 MODOFF M+MID 17220 AX(M),AY(M),AZ(M),AD(M),AS(M)=0 17230 END IF 17240 END SUB 17250 !***** MY ASSAULT MODELS ENTRY ************! 17260 SUB AENT 17270 FOR I=1 TO NA 17280 IF AD(I)<1 THEN 17290 ARX(I)=MRX 17300 ARY(I)=MRY 17310 ARZ(I)=MRZ 17320 AX(I),AY(I),AZ(I)=0 17330 AS(I)=MS+60 17340 AD(I)=20 17350 MODOPT I+MID,1.5,1,1,1 17360 MODPOS I+MID,AX(I),AY(I),AZ(I) 17370 MODROT I+MID,RAD(ARX(I)),RAD(ARY(I)),RAD(ARZ(I)) 17380 MODSET I+MID,1,8 17390 MODDISP I+MID 17400 T=24000/(CRR+700) 17410 SEPLAY 3,T,T 17420 EXIT FOR 17430 END IF 17440 NEXT I 17450 END SUB 17460 !***** ENEMY ASSAULT MODELS MOVE **********! 17470 SUB EAMV(M) 17480 IF EAD(M)<1 THEN 17490 MODOFF M+N 17500 EAX(M),EAZ(M)=10000 17510 ELSE 17520 EAX(M)=EAX(M)-EAS(M)*SIN(RAD(EARY(M))) 17530 EAZ(M)=EAZ(M)-EAS(M)*COS(RAD(EARY(M))) 17540 EAD(M)=EAD(M)-1 17550 EARZ(M)=MOD(EARZ(M)+15,360) 17560 IF MOD(EAD(M),10)<5 THEN MODOPT M+N,.4,1,1,1 ELSE MODOPT M+N,.3,1,1,1 17570 END IF 17580 END SUB 17590 !***** ENEMY ASSAULT MODELS ENTRY *********! 17600 SUB EAET(M) 17610 FOR J=1 TO NEA 17620 IF EAD(J)<1 THEN 17630 EARX(J)=0 17640 EARY(J)=DEG(ANGLE(EZ(M)-MZ,EX(M)-MX))-10+INT(RND*20) 17650 EARZ(J)=0 17660 EAX(J)=EX(M) 17670 EAY(J)=EY(M) 17680 EAZ(J)=EZ(M) 17690 EAS(J)=BS*1.5 17700 EAD(J)=300 17710 MODOPT J+N,.4,1,1,1 17720 MODPOS J+N,EAX(J),EAY(J),EAZ(J) 17730 MODROT J+N,RAD(EARX(J)),RAD(EARY(J)),RAD(EARZ(J)) 17740 MODSET J+N,1,9 17750 MODDISP J+N 17760 EXIT FOR 17770 END IF 17780 NEXT J 17790 END SUB 17800 !***** PAUSE ******************************! 17810 SUB PAUS 17820 SEPLAY 19,255,255 17830 PP20=PAD(1,20) 17840 LOCATE 23,12 17850 PRINT "PAUSE" 17860 LOCATE 20,14 17870 IF VBON=0 THEN PRINT "VIBRATE:OFF" ELSE PRINT "VIBRATE:ON " 17880 DO WHILE PP20>0 OR PAD(1,20)=0 17890 PP20=PAD(1,20) 17900 IF PAD(1,19)>0 THEN 17910 VBON=(VBON=0)*32 17920 LOCATE 20,14 17930 IF VBON=0 THEN PRINT "VIBRATE:OFF" ELSE PRINT "VIBRATE:ON " 17940 SEPLAY 15,255,255 17950 DO WHILE PAD(1,19)>0 17960 LOOP 17970 END IF 17980 CALL CMOV 17990 CALL DISP 18000 LOOP 18010 PP20=PAD(1,20) 18020 CLEAR 18030 END SUB 18040 !***** RADAR ******************************! 18050 SUB RADA 18060 FOR I=1 TO N 18070 IF EX(I)=0 AND EZ(I)=0 THEN 18080 TY=0 18090 ELSE 18100 TY=DEG(ANGLE(-EZ(I),-EX(I)))-MRY 18110 END IF 18120 TR=SQR(EX(I)^2+EZ(I)^2)/142 18130 IF TR<56 AND EHP(I)>0 THEN 18140 T=(ESC(I)>=10) 18150 TX=112+2*TR*SIN(RAD(TY))-T 18160 TY=168-TR*COS(RAD(TY)) 18170 TILEPOS I,TX,TY,TX+2+2*T,TY+1+T,999800 18180 T=MIN(6*(56-TR),128) 18190 TILECOL I,0,0,0,T 18200 TILEDISP I 18210 ELSE 18220 TILEOFF I 18230 END IF 18240 NEXT I 18250 END SUB 18260 !***** MY HOMING MISSILE MODELS MOVE ******! 18270 SUB HMOV(M) 18280 IF HX(M)^2+HZ(M)^2>40960000 THEN HD(M)=0 18290 IF HD(M)>0 THEN 18300 T=HI(M) 18310 IF T>0 THEN 18320 IF EHP(T)>0 THEN 18330 IF HX(M)<>EX(T) OR HZ(M)<>EZ(T) THEN 18340 T=DEG(ANGLE(HZ(M)-EZ(T),HX(M)-EX(T)))-HRY(M) 18350 T=T+360*((T<-180)-(T>180)) 18360 IF ABS(T)>80 THEN HI(M)=0 18370 IF HD(M)<585 THEN HRY(M)=HRY(M)+SGN(T)*BT*3 18380 HRY(M)=HRY(M)+360*((HRY(M)<-180)-(HRY(M)>180)) 18390 END IF 18400 ELSE 18410 HI(M)=0 18420 END IF 18430 END IF 18440 HS(M)=MIN(BS+15,HS(M)*1.05) 18450 HX(M)=HX(M)-HS(M)*SIN(RAD(HRY(M))) 18460 HY(M)=HY(M)-SGN(HY(M))*.1 18470 HZ(M)=HZ(M)-HS(M)*COS(RAD(HRY(M))) 18480 HD(M)=HD(M)-1 18490 ELSE 18500 HX(M)=12*((MOD(M,2)=0)-(MOD(M,2)>0)) 18510 HY(M)=2 18520 HZ(M),HD(M),HS(M)=0 18530 MODJOIN M+MID+NA,MID 18540 MODOPT M+MID+NA,.8,1,1,1 18550 MODPOS M+MID+NA,HX(M),HY(M),HZ(M) 18560 MODROT M+MID+NA,0,0,0 18570 MODSET M+MID+NA,1,2 18580 IF MHP>0 THEN MODDISP M+MID+NA ELSE MODOFF M+MID+NA 18590 END IF 18600 END SUB 18610 !***** MY HOMING MISSILE MODELS ENTRY *****! 18620 SUB HENT 18630 M=ABS(HMON) 18640 FOR I=1 TO NH 18650 M=MOD(M,NH)+1 18660 IF HD(M)<1 THEN 18670 HMON=M 18680 HRX(M)=MRX 18690 HRY(M)=MRY 18700 HRZ(M)=MRZ 18710 T=((MOD(M,2)<1)-(MOD(M,2)>0)) 18720 GETWPOS HX(M),HY(M),HZ(M),MID,12*T,2,0 18730 HS(M)=MS 18740 HD(M)=600 18750 HI(M)=HID 18760 MODJOIN M+MID+NA,0 18770 SEPLAY 4,255,255 18780 EXIT FOR 18790 END IF 18800 NEXT I 18810 END SUB 18820 !***** HOMING MISSILE TARGET *************! 18830 SUB HTAG 18840 FOR I=1 TO N 18850 HIL(I)=9999 18860 NEXT I 18870 IF MHP>0 THEN 18880 FOR I=1 TO N 18890 IF ED(I)>50 AND ED(I)<3200 AND EHP(I)>0 THEN 18900 T=DEG(ANGLE(MZ-EZ(I),MX-EX(I)))-MRY 18910 T=T+360*((T<-180)-(T>180)) 18920 IF T>=-20 AND T<=20 THEN HIL(I)=ED(I) 18930 END IF 18940 NEXT I 18950 IF PP5<=16 AND PAD(1,5)>16 THEN 18960 HID=MOD(HID,N)+1 18970 SEPLAY 15,255,255 18980 END IF 18990 END IF 19000 PP5=PAD(1,5) 19010 IF HID<1 THEN 19020 FOR I=1 TO N 19030 IF HIL(I)<9999 THEN 19040 HID=I 19050 EXIT FOR 19060 END IF 19070 NEXT I 19080 ELSE 19090 T=HID 19100 HID=0 19110 FOR I=1 TO N 19120 IF HIL(T)<9999 THEN 19130 HID=T 19140 EXIT FOR 19150 END IF 19160 T=MOD(T,N)+1 19170 NEXT I 19180 END IF 19190 END SUB