10000 !_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 10010 !_/ Albatross Project (Project GAMMA) _/ 10020 !_/ (3D Flight Simulator) _/ 10030 !_/ - Produced by Massaa _/ 10040 !_/ - 3D-Graphics by KenSan _/ 10050 !_/ - Programmed and Arranged by Owhari _/ 10060 !_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 10070 VER1$="0" !1桁 10080 VER2$="110" !3桁 10090 ALLPOLY=17599 !モデルの総ポリゴン数 10100 VIB=36 !デフォルト振動強さ[0/36/72] 10110 LABEL BUFLOAD 10120 ! EXTENTION,FILE NAME,No,FILE SIZE 10130 DATA SED,APS/APS01,_,374678 10140 DATA BGM,APS/ZEUS2,1,193990 10150 DATA BGM,APS/ZEUS3,2,196902 10160 DATA BGM,APS/ZEUS4,3,120214 10170 DATA BGM,APS/LUNA3_1,4,162150 10180 !FILES "APS" 10190 DATA PAL,APG/APP01,_, 9362 10200 DATA TEX,APG/APT01,_,720994 10210 !FILES "APG" 10220 DATA MOD,APG/APM01,1,141484 10230 DATA MOD,APG/APM02,2,227434 10240 DATA MOD,APG/APM03,3, 34420 10250 DATA MOD,APG/APM04,4,858284 10260 DATA MOD,APG/APM05,5,136134 10270 DATA MOD,APG/APM06,6, 86458 10280 DATA MOD,APG/APM07,7,228300 10290 DATA MOD,APG/APM08,8, 23330 10300 !FILES "APG" 10310 DATA *,*,*,* 10320 FTM=1 !FRAME PERIOD (=FTM/60[sec]) 10330 FPS=60/FTM !FRAME RATE([fps]) 10340 CALL PAD_SETTING 10350 CALL SYSINIT 10360 IF KEYCODE2=2 THEN *M_EDITOR !山エディター(左SHIFT) 10370 IF KEYCODE2=2+4 THEN *LANKINIT !ランキングデータ初期化(左SHIFT+左ALT) 10380 IF KEYCODE2=32 THEN *SETEST !SEテスト(右SHIFT) 10390 CALL LOGO 10400 FSYNC 1 10410 VARLOAD "APB/APLANK",LANK$ 10420 FSYNC 180 10430 CLEAR 10440 FSYNC 30 10450 CALL BOOTMSG 10460 LABEL TOP 10470 CALL FLAREINIT 10480 CALL TITLE 10490 GOTO *START 10500 !========================================= 10510 ! SEテスト 10520 !========================================= 10530 LABEL SETEST 10540 RESTORE *SETEST 10550 INIT 10560 TEXTMODE 2 10570 PRINT "SETEST" 10580 SEMAX=16 10590 DIM SN1$(SEMAX),SN2$(SEMAX),SN3$(SEMAX) 10600 LOCATE 0,4 10610 FOR I=1 TO SEMAX 10620 READ SN1$(I),SN2$(I),SN3$(I) 10630 PRINT I; 10640 LOCATE 3 10650 PRINT SN1$(I); 10660 LOCATE 13 10670 PRINT SN2$(I); 10680 LOCATE 25 10690 PRINT SN3$(I) 10700 NEXT I 10710 SENUM=1 10720 SEFLG=0 10730 DO 10740 LOCATE 1,1 10750 PRINT SENUM;": ";SN1$(SENUM);": ";SN2$(SENUM);": ";SN3$(SENUM);REPEAT$(" ",10) 10760 IF SEFLG>0 THEN SEFLG=SEFLG-1 10770 IF SEFLG2>0 THEN SEFLG2=SEFLG2-1 10780 IF PAD(1,1)>32 AND SEFLG2=0 AND SENUM32 AND SEFLG2=0 AND SENUM>1 THEN 10830 SENUM=SENUM-1 10840 SEFLG2=10 10850 END IF 10860 IF PAD(1,6)>32 AND SEFLG=0 THEN 10870 SEPLAY SENUM,255,255 10880 SEFLG=60 10890 END IF 10900 FSYNC 1 10910 LOOP 10920 DATA SWITCH6 ,ターゲット切替 ,カタッ 10930 DATA JINGLE_0 ,(未)UFO攻撃 ,ウニョニョニョニョ 10940 DATA SIREN_1 ,ターゲット確認 ,プププッ 10950 DATA JINGLE_2 ,ロード/バルーン ,ポォロロ 10960 DATA JINGLE_6 ,ハイスコア ,チャララララララン 10970 DATA JINGLE_7 ,ゲームオーバー ,ポロロロポロン 10980 DATA EFFECT00 ,□特殊武器 ,ズキューン 10990 DATA BREAK_1 ,○ミサイル ,ズガーン 11000 DATA FIRE_1 ,X機銃 ,バシューン 11010 DATA CIRCIT_8 ,警告/メニュー操作,ピッ 11020 DATA FIRE_8 ,自機爆発音 ,ズガンドガン 11030 DATA BATTLE03 ,エンジン音 ,ボゴゴゴ 11040 DATA JINGLE_3 ,ミッション選択 ,スララララン 11050 DATA JINGLE_8 ,ミッションクリア ,チャンチャチャチャチャーン 11060 DATA JINGLE_15,巨大戦艦 ,ズゥーンズキャラン 11070 DATA JINGLE_19,START/ワープ ,ポロロロロン 11080 END 11090 !========================================= 11100 ! システム初期化 11110 !========================================= 11120 SUB SYSINIT 11130 LABEL SYSINIT 11140 RESTORE *SYSINIT 11150 INIT 11160 TEXTMODE 2 11170 FKEY "SAVE "+CHR$(34)+"APB/APB"+VER1$+VER2$+CHR$(34),3 11180 OPTION BASE 1 11190 !***** 敵情報 ***** 11200 N=50 11210 DIM EC(N) !敵モデル番号 11220 DIM ET(N) !敵タイプ 11230 DIM EA(N) !状態 11240 DIM EH(N) !HP(ダメージ) 11250 DIM ED(N) !相対距離 11260 DIM ES(N) !スピード 11270 DIM EO(N),EP(N),EQ(N) !回転速度 11280 DIM EL(N),EM(N),EN(N) !相対角度 11290 DIM EI(N),EJ(N),EK(N) !相対座標 11300 DIM EU(N),EV(N),EW(N) !回転角度 11310 DIM EX(N),EY(N),EZ(N) !ワールド座標 11320 DIM EVX(N),EVY(N),EVZ(N) !成分速度 11330 DIM EAF(N) !出力 11340 DIM ER(N),EG(N),EB(N) !レーダー色 11350 DIM TR1(N),TR3(N),TR5(N) !レーダー用 11360 DIM TR2(N),TR4(N),TR6(N) !レーダー用 11370 !***** 境界情報 ***** 11380 DIM LX(4),LZ(4),LA(4),LB(4) 11390 FOR I=1 TO 4 11400 READ LX(I),LZ(I) 11410 NEXT I 11420 DATA -48000,-48000, 48000,-48000 11430 DATA 48000, 48000,-48000, 48000 11440 !***** トレーニング規定TIME ***** 11450 DIM TRAIN$(10,2) 11460 !***** ランキング ***** 11470 DIM LANK$(10,10,2) 11480 !***** レンズフレア用 ***** 11490 DIM LFX(10),LFY(10),LFM(100) 11500 !***** 定数 ***** 11510 PI2=PI/2 !π/2(90度) 11520 PI4=PI/4 !π/4(45度) 11530 PI8=PI/8 !π/8(22.5度) 11540 P2I=PI*2 !π*2(360度) 11550 DR1=PI/180 !DEG-RAD変換1 11560 DR2=PI/180/2 !DEG-RAD変換2 11570 DR4=PI/180*45/245 !DEG-RAD変換3 11580 F60=100/60*FTM !1FRAME[1/100sec] 11590 DQ$=CHR$(34) !ダブルクォーテーション 11600 Z00=16777200 !Z位置用 11610 Z99=16777199 !Z位置用 11620 Z98=16777198 !Z位置用 11630 Z97=16777197 !Z位置用 11640 Z96=16777196 !Z位置用 11650 Z95=16777195 !Z位置用 11660 Z94=16777194 !Z位置用 11670 Z93=16777193 !Z位置用 11680 Z92=16777192 !Z位置用 11690 Z91=16777191 !Z位置用 11700 Z90=16777190 !Z位置用 11710 Z89=16777189 !Z位置用 11720 Z88=16777188 !Z位置用 11730 Z87=16777187 !Z位置用 11740 Z86=16777186 !Z位置用 11750 Z85=16777185 !Z位置用 11760 Z84=16777184 !Z位置用 11770 Z83=16777183 !Z位置用 11780 Z82=16777182 !Z位置用 11790 Z81=16777181 !Z位置用 11800 Z80=16777180 !Z位置用 11810 Z79=16777179 !Z位置用 11820 !***** 自機登録数 ***** 11830 ACNUM=4 11840 !***** 敵略称 ***** 11850 DIM N$(20) 11860 FOR I=1 TO 20 11870 READ N$(I) 11880 NEXT I 11890 DATA "F-1 ","F-2 " ! 1 2 11900 DATA "??? ","??? " ! 3 4 11910 DATA "??? ","??? " ! 5 6 11920 DATA "??? ","Ptrl " ! 7 8 11930 DATA "UFO ","Super" ! 9 10 11940 DATA "Tank ","AAgun" !11 12 11950 DATA "Carr ","Bship" !13 14 11960 DATA "??? ","??? " !15 16 11970 DATA "??? ","??? " !17 18 11980 DATA "??? ","Blln " !19 20 11990 !***** VIEWの名前 ***** 12000 DIM VW$(16) 12010 FOR I=1 TO 16 12020 READ VW$(I) 12030 NEXT I 12040 DATA "COCKPIT " 12050 DATA "BEHIND " 12060 DATA "HORIZONTAL" 12070 DATA "FIXED-M " 12080 DATA "FIXED-R " 12090 DATA "ROUND " 12100 DATA "REAR " 12110 DATA "SATELLITE " 12120 DATA "FIELD " 12130 DATA "FIELD-ZOOM" 12140 DATA "RENDEZVOUS" 12150 DATA "SPRING " 12160 DATA "CHASE " 12170 DATA "TARGET " 12180 DATA "RANDOM " 12190 DATA "PILOT " 12200 !***** トレーニングステージデータ ***** 12210 RESTORE *STAGE0 12220 FOR I=1 TO 10 12230 READ T1$,T2$,T3$,TRAIN$(I,1) 12240 TRAIN$(I,2)=T1$+"'"+T2$+CHR$(34)+T3$ 12250 NEXT I 12260 !***** インジケーターカラー ***** 12270 IJR=128 12280 IJG=255 12290 IJB=128 12300 IJA=96 12310 !***** リプレイ用データバッファ ***** 12320 DSZ=256000 12330 DSZC=2000 !DSZ=DSZC*128 12340 DIM D(DSZ),P(20),V(20),C(20) 12350 DIM D$(DSZC),O$(4) 12360 !***** 一時使用配列 ***** 12370 DIM TEMP(50) 12380 END SUB 12390 !========================================= 12400 ! 機体データ 12410 !========================================= 12420 LABEL MYMODELS 12430 ! CODE,NAME 12440 ! PITCH, YAW, ROLL,MAXSP,MINSP,MAXPOW 12450 ! GUN, MSSL, SWEP, FUEL, MDMG 12460 ! CAM位置, 雲位置, 影位置 12470 DATA "AXF-01","アルバトロス・ファイター" 12480 DATA .0007,.00015,.0040,2400,260,1.2 12490 DATA 800, 64, 32, 999, 120 12500 DATA 0,0,-6, 6.4,0,6 12510 DATA 0,3,1, 0,0,-10, -6.5,0,5, 6.5,0,5 12520 ! 12530 DATA "AXM-05","アルバトロス・マルチロール" 12540 DATA .0008,.00017,.0045,2000,250,1.2 12550 DATA 640, 56, 48, 999, 100 12560 DATA 0,0,-5.5, 6.5,0,9 12570 DATA 0,2,2, 0,0,-10, -6.5,0,8, 6.5,0,8 12580 ! 12590 DATA "AXA-02","アルバトロス・アタッカー" 12600 DATA .0009,.00019,.0050,1600,230,1.2 12610 DATA 960, 80, 64, 999, 150 12620 DATA 0,0,-9, 12.2,.2,5 12630 DATA 0,3,0, 0,0,-12, -12,0,4, 12,0,4 12640 ! 12650 DATA "FF-X7","コアファイター" 12660 DATA .0010,.00020,.0050,2200,200,1.2 12670 DATA 999, 99, 64, 999, 80 12680 DATA 0,0,-5, 5.1,-.8,6 12690 DATA 0,3,1, 0,0,-10, -5,0,5, 5,0,5 12700 !========================================= 12710 ! ステージデータ 12720 !========================================= 12730 !***** ステージ基本データ ***** 12740 LABEL STAGE0 12750 DATA "01","00","00","ピッチ上下 " ! 1 12760 DATA "01","00","00","左右旋回 " ! 2 12770 DATA "02","00","00","急上昇・急降下" ! 3 12780 DATA "00","45","00","宙返り " ! 4 12790 DATA "00","50","00","水平円旋回 " ! 5 12800 DATA "01","00","00","山間部 " ! 6 12810 DATA "01","00","00","ビル " ! 7 12820 DATA "99","59","99","x障害物間飛行 " ! 8 12830 DATA "99","59","99","x複合1 " ! 9 12840 DATA "99","59","99","x複合2 " !10 12850 !***** ステージ毎の使用機体 ***** 12860 LABEL STAGE1 12870 DATA 1,2,3,1,2,3,1,2,3,1 12880 DATA 1,1,1,1,1,1,1,1,1,1 12890 !***** ステージ毎の開始状態 ***** 12900 LABEL STAGE2 12910 !***** 各ワールド座標基準絶対角度(度) **** 12920 ! MU:上+ 下-、MV:北0 東90 南180 西-90、 12930 ! MW:左- 右+ 12940 !***** 各自機基準相対速度ベクトル ******** 12950 ! VX:左- 右+、VY:下- 上+、VZ:前+ 後- 12960 ! MX, MY, MZ 12970 ! MU, MV, MW, VX, VY, VZ 12980 !トレーニング以外 12990 DATA 0, -500,-40000 13000 DATA 0, 180, 0, 0, 0, 796 13010 !トレーニングMENU1 13020 DATA 0, -500,-40000 13030 DATA 0, 180, 0, 0, 0,1000 13040 !トレーニングMENU2 13050 DATA 0, -500,-40000 13060 DATA 0, 180, 0, 0, 0,1000 13070 !トレーニングMENU3 13080 DATA 0, -500,-40000 13090 DATA 13, 180, 0, 0, 0,1000 13100 !トレーニングMENU4 13110 DATA 0, -500,-40000 13120 DATA 0, 180, 0, 0, 0,1000 13130 !トレーニングMENU5 13140 DATA 0, -500, -40000 13150 DATA 0, 180, 0, 0, 0,1000 13160 !トレーニングMENU6 13170 DATA -2400, -700, -6000 13180 DATA 0, 180, 0, 0, 0,1000 13190 !トレーニングMENU7 13200 DATA 5500, -500,-11000 13210 DATA 0, 180, 0, 0, 0,1000 13220 !トレーニングMENU8 13230 DATA 0, -500,-40000 13240 DATA 0, 180, 0, 0, 0, 796 13250 !トレーニングMENU9 13260 DATA 0, -500,-40000 13270 DATA 0, 180, 0, 0, 0, 796 13280 !トレーニングMENU10 13290 DATA 0, -500,-40000 13300 DATA 0, 180, 0, 0, 0, 796 13310 !***** バルーン配置データ ***** 13320 LABEL STAGE3 13330 DATA "*1",10 !ピッチ上下 13340 DATA 0,-500,-38000, 0,-600,-36500 13350 DATA 0,-400,-35000, 0,-500,-33500 13360 DATA 0,-300,-32000, 0,-400,-30500 13370 DATA 0,-200,-29000, 0,-300,-27500 13380 DATA 0,-100,-26000, 0, -10,-24000 13390 DATA "*2",10 !左右旋回 13400 DATA 0,-500,-38000, -50, -500,-36500 13410 DATA 0,-500,-35000, 50, -500,-33500 13420 DATA 0,-500,-32000, -50, -500,-30500 13430 DATA 0,-500,-29000, 50, -500,-27500 13440 DATA 0,-500,-26000,-100, -500,-24000 13450 DATA "*3",10 !急上昇/急降下 13460 DATA 0,-1000,-38000, 0, -1800,-37000 13470 DATA 0,-5000,-36000, 0, -7000,-35000 13480 DATA 0,-9000,-31000, 0, -9500,-28000 13490 DATA 0,-8000,-24000, 0, -5000,-21000 13500 DATA 0,-1500,-19000, 0, -100,-16000 13510 DATA "*4",10 !宙返り 13520 DATA 0, -500,-37000, 0, -500,-36000 13530 DATA 0, -500,-35000, 0, -900,-34307 13540 DATA 0,-1700,-34307, 0,-2100,-35000 13550 DATA 0,-1700,-35693, 0, -900,-35693 13560 DATA 0, -500,-34000, 0, -500,-33000 13570 DATA "*5",10 !水平円旋回 13580 DATA 0,-500,-37000, 0,-500,-36000 13590 DATA 0,-500,-35000, 400,-500,-34307 13600 DATA 1200,-500,-34307, 1600,-500,-35000 13610 DATA 1200,-500,-35693, 400,-500,-35693 13620 DATA 0,-500,-34000, 0,-500,-33000 13630 DATA "*6",10 !山間部 13640 DATA -2400, -500,-3500, -2440,-310,-2060 13650 DATA -2510, -200, -500, -2600,-100, 1000 13660 DATA -2570, -450, 2170, -2300,-720, 2500 13670 DATA -1200, -350, 3000, -1100,-300, 4000 13680 DATA -1630, -100, 5500, -1630,-200, 6000 13690 DATA "*7",10 !ビル群 13700 DATA 5513,-103, -454, 6121,-336, -632 13710 DATA 5151,-282,-6533, 4948,-217,-5527 13720 DATA 4722,-171,-4823, 4438,-107,-3539 13730 DATA 4052, -80,-2569, 4017,-144,-1756 13740 DATA 4254,-101, -989, 4905, -36, -512 13750 DATA 5513,-103, -454, 6121,-336, -632 13760 DATA "*8",10 13770 DATA 0,-500,-18000, 0,-500,-17500 13780 DATA 0,-500,-17000, 0,-500,-16500 13790 DATA 0,-500,-16000, 0,-500,-15500 13800 DATA 0,-500,-15000, 0,-500,-14500 13810 DATA 0,-500,-14000, 0,-500,-13500 13820 DATA "*9",10 13830 DATA 0,-500,-18000, 0,-500,-17500 13840 DATA 0,-500,-17000, 0,-500,-16500 13850 DATA 0,-500,-16000, 0,-500,-15500 13860 DATA 0,-500,-15000, 0,-500,-14500 13870 DATA 0,-500,-14000, 0,-500,-13500 13880 DATA "*10",10 13890 DATA 0,-500,-18000, 0,-500,-17500 13900 DATA 0,-500,-17000, 0,-500,-16500 13910 DATA 0,-500,-16000, 0,-500,-15500 13920 DATA 0,-500,-15000, 0,-500,-14500 13930 DATA 0,-500,-14000, 0,-500,-13500 13940 !========================================= 13950 ! ロゴ表示 13960 !========================================= 13970 SUB LOGO 13980 INIT 13990 BGCOL 20,80,120 14000 EFFECT 110,-8,-4,648,228,0 14010 FOR J=1 TO 200 STEP 4 14020 FOR I=0 TO 10 14030 LINECOL I+1,200,255,255,128 14040 LINEPOS I+1,0,111+I*100/J,639,111+I*200/J,1 14050 LINEDISP I+1 14060 LINECOL I+11,200,255,255,128 14070 LINEPOS I+11,0,111-I*200/J,639,111-I*100/J,1 14080 LINEDISP I+11 14090 NEXT I 14100 FSYNC 1 14110 NEXT J 14120 INIT 14130 BGCOL 255,255,255 14140 FSYNC 2 14150 BGCOL 0,0,0 14160 LOCATE 15,11 14170 PRINT "Projectγ" 14180 FOR I=-300 TO 0 STEP 6 14190 EFFECT 120,I,I,640-I,224,0 14200 FSYNC 1 14210 EFFECT 120,I,0,640-I,224-I,0 14220 FSYNC 1 14230 NEXT I 14240 EFFECT 0,0,0,0,0,0 14250 END SUB 14260 !========================================= 14270 ! 起動メッセージ 14280 !========================================= 14290 SUB BOOTMSG 14300 INIT 14310 TEXTMODE 2 14320 FSYNC 60 14330 PRINT "RUN "+CHR$(34)+"Albatross Project"+chr$(34) 14340 PRINT "Version "+VER1$+"."+VER2$ 14350 PRINT 14360 PRINT "Verifying Data Buffer," 14370 !***** BUFFER判定 ***** 14380 FOR J=1 TO 8 14390 FOR I=1 TO 10 14400 B=OBJPOLY(J,I) 14410 PRINT REPEAT$("0",4-LEN(STR$(B)));STR$(B);" "; 14420 A=A+B 14430 NEXT I 14440 NEXT J 14450 PRINT "The Number of Total Object Polygons"; 14460 PRINT " = "; 14470 IF A<>ALLPOLY THEN 14480 TEXTCOL YELLOW 14490 PRINT A 14500 PRINT "Data is unloaded." 14510 PRINT "Initializing all data" 14520 FSYNC 120 14530 CALL BUFLOAD 14540 ELSE 14550 PRINT A 14560 PRINT "Data is loaded. Ok!" 14570 FSYNC 1 14580 CALL BGMSLCT(9,0) 14590 END IF 14600 FSYNC 120 14610 END SUB 14620 !========================================= 14630 ! バッファ初期化 14640 !========================================= 14650 SUB BUFLOAD 14660 RESTORE *BUFLOAD 14670 INIT ALL 14680 TEXTMODE 2 14690 PRINT "Buffer is initialized." 14700 PRINT 14710 DMAX,DSUM,I=0 14720 DO 14730 READ E$,F$,M$,S$ 14740 IF E$="*" THEN EXIT DO 14750 DMAX=DMAX+VAL(S$) 14760 LOOP 14770 RESTORE *BUFLOAD 14780 FSYNC 30 14790 DO 14800 IF I<22 THEN 14810 I=I+1 14820 ELSE 14830 I=0 14840 CLEAR 14850 END IF 14860 CALL BAR(DSUM,DMAX) 14870 LOCATE 0,I 14880 READ E$,F$,M$,S$ 14890 IF E$="*" THEN EXIT DO 14900 TEXTCOL BLACK 14910 SELECT CASE E$ 14920 CASE "SED" 14930 A$="SELOAD "+CHR$(34)+F$+"."+E$+CHR$(34) 14940 PRINT A$; 14950 SELOAD F$ 14960 CASE "BGM" 14970 A$="BGMLOAD "+CHR$(34)+F$+"."+E$+CHR$(34)+","+M$ 14980 PRINT A$; 14990 BGMLOAD F$,VAL(M$) 15000 CASE "PAL" 15010 A$="PALLOAD "+CHR$(34)+F$+"."+E$+CHR$(34) 15020 PRINT A$; 15030 PALLOAD F$ 15040 CASE "TEX" 15050 A$="TEXLOAD "+CHR$(34)+F$+"."+E$+CHR$(34) 15060 PRINT A$; 15070 TEXLOAD F$ 15080 CASE "MOD" 15090 A$="MODLOAD "+CHR$(34)+F$+"."+E$+CHR$(34)+","+M$ 15100 PRINT A$; 15110 MODLOAD F$,VAL(M$) 15120 !CASE "VRN" 15130 ! A$="VARLOAD "+CHR$(34)+F$+"."+E$+CHR$(34) 15140 ! PRINT A$; 15150 ! VARLOAD F$,BUF 15160 !CASE "VRS" 15170 ! A$="VARLOAD "+CHR$(34)+F$+"."+E$+CHR$(34) 15180 ! PRINT A$; 15190 ! VARLOAD F$,BUF$ 15200 END SELECT 15210 IF F$="APS/LUNA3_1" THEN CALL BGMSLCT(9,0) 15220 SEPLAY 4,255,255 15230 TEXTCOL WHITE 15240 LOCATE 0 15250 PRINT A$; 15260 DSUM=DSUM+VAL(S$) 15270 B$=STR$(INT((VAL(S$)+1023)/1024)) 15280 B$=REPEAT$(" ",3-LEN(B$))+B$ 15290 C$=STR$(INT((VAL(S$)/DMAX*100)+.5)) 15300 C$=REPEAT$(" ",2-LEN(C$))+C$ 15310 LOCATE 34 15320 PRINT B$+"KB ("+C$+"%) OK" 15330 LOOP 15340 PRINT 15350 PRINT "Data loading is complete." 15360 FSYNC 120 15370 END SUB 15380 !========================================= 15390 ! LODING BAR 15400 !========================================= 15410 SUB BAR(A,B) 15420 LOCATE 23,22 15430 IF INT(A/B*100)<10 THEN 15440 PRINT " ";INT(A/B*100);"%"; 15450 ELSEIF INT(A/B*100)<100 THEN 15460 PRINT " ";INT(A/B*100);"%"; 15470 ELSE 15480 PRINT INT(A/B*100);"%"; 15490 END IF 15500 TILEPOS 1,60-4,205-2,580+4,215+2,0 15510 TILEPOS 2,60,205,580,215,1 15520 TILEPOS 3,60,205,60+A/B*520,215,2 15530 TILECOL 1,128,128,128,128 15540 TILECOL 2,32,32,32,128 15550 TILECOL 3,0,0,128,128 15560 TILEDISP 1 15570 TILEDISP 2 15580 TILEDISP 3 15590 END SUB 15600 !========================================= 15610 ! タイトル 15620 !========================================= 15630 SUB TITLE 15640 CALL MASKCLEAR 15650 RANDOMIZE 15660 STAGE,TDSP=0 15670 CALL MODELS1(0,0,0,0,-2600,2000,5000,-1500,1) 15680 CALL LIGHT(INT(RN7*3),0) 15690 CALL MODELS2(1,0,0) 15700 RN7=RND 15710 MX=15000 15720 MY=-1000 15730 S=2 15740 MU,MV,MW=0 15750 BLNK=0 15760 MODROT 301,MU,PI-MV,MW 15770 MODPOS 301,MX,MY,S*150 15780 DO 15790 CX=RND*100-50+MX 15800 CY=RND*100-50+MY 15810 CZ=0 15820 IF TDSP=0 THEN CY=MY+RND*50 15830 FOR I=-S*150 TO S*150 STEP S 15840 FSYNC 1 15850 MODPOS 3,CX,0,CZ 15860 MODPOS 1,CX,CY,CZ 15870 CAMPOS 1,CX,CY,CZ 15880 MODPOS 301,MX,MY,I 15890 CAMVEC 1,MX-CX,MY-CY,I-CZ 15900 TILEOFF 1000 15910 CALL FLARE 15920 IF TDSP=0 AND(PAD(1,6)>8 OR PAD(1,20)>0 OR I>-S*5)THEN CALL TITLESUB 15930 IF TDSP=1 AND(PAD(1,6)>8 OR PAD(1,20)>0)THEN TDSP=2 15940 IF TDSP=2 THEN EXIT FOR 15950 BLNK=MOD(BLNK+TDSP,60) 15960 IF TDSP>0 AND BLNK<30 THEN 15970 FOR J=801 TO 817 15980 SPRDISP J 15990 NEXT J 16000 ELSE 16010 FOR J=801 TO 817 16020 SPROFF J 16030 NEXT J 16040 END IF 16050 NEXT I 16060 IF TDSP=2 THEN EXIT DO 16070 LOOP 16080 FSYNC 1 16090 EFFECT 127,-8,-4,648,228,Z00 16100 FSYNC 1 16110 CLEAR 16120 TILEPOS 1000,0,0,640,224,Z00 16130 TILECOL 1000,0,0,0,128 16140 TILEDISP 1000 16150 END SUB 16160 !========================================= 16170 ! タイトルサブ(操作説明等表示) 16180 !========================================= 16190 SUB TITLESUB 16200 LABEL TITLESUB 16210 RESTORE *TITLESUB 16220 TDSP=1 16230 TILEPOS 1000,0,0,640,224,Z00 16240 TILECOL 1000,255,255,255,0 16250 TILEDISP 1000 16260 SPRTEX 501,11,0,54,511,107 16270 SPRPAL 501,23,8,1 16280 IF RND<.5 THEN 16290 SPRPOS2 501,320,68,320,68,Z99 16300 SPRDISP 501 16310 FOR A=0 TO 120 16320 IF PAD(1,6)<9 AND PAD(1,20)=0 THEN FSYNC 1 16330 T1=288/120*A 16340 T2=24/120*A 16350 T3=1080/120*A 16360 T1=T1*COS(RAD(T3)) 16370 SPRPOS2 501,320-T1,68-T2,320+T1,68+T2,Z99 16380 NEXT A 16390 ELSE 16400 FOR A=0 TO 8 16410 IF PAD(1,6)<9 AND PAD(1,20)=0 THEN FSYNC 1 16420 T3=640-640/8*A 16430 LINEPOS 500,T3,92,640,92,Z99 16440 LINECOL 500,255,255,0,128 16450 LINEDISP 500 16460 NEXT A 16470 SPRPOS2 501,32,92,608,92,Z98 16480 SPRDISP 501 16490 FOR A=0 TO 8 16500 IF PAD(1,6)<9 AND PAD(1,20)=0 THEN FSYNC 1 16510 T3=640-640/8*A 16520 LINEPOS 500,0,92,T3,92,Z99 16530 LINECOL 500,255,255,0,128 16540 LINEDISP 500 16550 NEXT A 16560 LINEOFF 500 16570 FOR A=0 TO 90 16580 IF PAD(1,6)<9 AND PAD(1,20)=0 THEN FSYNC 1 16590 T2=48*SIN(RAD(A)) 16600 SPRPOS2 501,32,92-T2,608,92,Z98 16610 NEXT A 16620 END IF 16630 A=1 16640 DO UNTIL A>128 16650 IF PAD(1,6)<9 AND PAD(1,20)=0 THEN FSYNC 1 16660 TILECOL 1000,255,255,255,A 16670 A=A*1.2 16680 LOOP 16690 A=90 16700 DO UNTIL A<1 16710 IF PAD(1,6)<9 AND PAD(1,20)=0 THEN FSYNC 1 16720 TILECOL 1000,255,255,255,128*SIN(RAD(A)) 16730 A=A-1 16740 LOOP 16750 TILEOFF 1000 16760 IF PAD(1,6)<9 AND PAD(1,20)=0 THEN FSYNC 30 16770 TILEPOS 1,16,140,623,220,Z00 16780 TILECOL 1,255,255,255,32 16790 TILEDISP 1 16800 CALL LCP( 1,15,1,"左スティック:ピッチ&ロール") 16810 CALL LCP( 1,16,1,"L1/R1 :ヨー") 16820 CALL LCP( 1,17,1,"L2/R2 :エアブレーキ/スロットル") 16830 CALL LCP( 1,18,2,"○ :ミサイル") 16840 CALL LCP( 1,19,2,"× :機銃") 16850 CALL LCP( 1,20,2,"□ :特殊武器") 16860 CALL LCP( 1,21,2,"△ :ターゲット切替") 16870 CALL LCP( 1,22,4,"←→ :カメラ切替") 16880 CALL LCP(26,15,6,"右スティック:レーダー調整") 16890 CALL LCP(26,16,6,"L3 :倍率/位置切替") 16900 CALL LCP(26,17,6,"R3 :調整デフォルト") 16910 CALL LCP(26,18,6,"SELECT :レーダー切替") 16920 CALL LCP(26,19,3,"↑ :オートバランサー") 16930 CALL LCP(26,20,3,"↓ :オートチェイサーON/OFF") 16940 CALL LCP(26,21,7,"START :ポーズ/オプション") 16950 TEXTCOL WHITE 16960 CALL SFONT(801,184,118,16,12,16777199,23,15,1,"Push START Button",1) 16970 IF PAD(1,6)<9 AND PAD(1,20)=0 THEN FSYNC 2 16980 END SUB 16990 !========================================= 17000 ! ミッション選択 17010 !========================================= 17020 SUB MSSLCT 17030 LABEL MSSLCT 17040 CALL MASKCLEAR 17050 STAGE,TRAIN,MENU=0 17060 LD=1 17070 CALL MODELS1(0,0,205,40000,-2600,2000,5000,-1500,0) 17080 CALL LIGHT(STAGE,TRAIN) 17090 MODPOS 3,0,205,0 17100 CALL MODELS2(1,0,0) 17110 RESTORE *MSSLCT 17120 !***** デモ編隊の設定 ***** 17130 DTN=3 !編隊の数 17140 DTP=DTN+1 17150 FOR N=1 TO DTN 17160 MODSET N+400,7,1 17170 MODOPT N+400,10,1,1,1 17180 MODDISP N+400 17190 FOR I=1 TO 4 17200 T=I+496+N*4 17210 IF I=1 THEN MODJOIN T,N+400 ELSE MODJOIN T,T-1 17220 MODSET T,3,I+6 17230 MODPOS T,0,0,0 17240 MODROT T,0,0,0 17250 MODOPT T,10,0,1,2 17260 MODDISP T 17270 NEXT I 17280 READ EX(N),EY(N),EZ(N) 17290 EU(N),EW(N)=0 17300 EV(N)=PI 17310 EVX(N),EVY(N)=0 17320 EVZ(N)=VZ 17330 ES(N)=VZ/216 17340 EO(N),EP(N),EQ(N)=0 17350 EAF(N)=AFB 17360 EA(N)=0 17370 ED(N)=0 17380 DTS=DTS+1 17390 LFM(DTS)=N+400 17400 MODPOS N+400,EX(N),EY(N),EZ(N) 17410 MODROT N+400,EU(N),EV(N),EW(N) 17420 NEXT N 17430 !MODSET N+400,4,1 17440 !MODROT N+400,0,0,0 17450 !MODOPT N+400,10,1,1,1 17460 !MODDISP N+400 17470 ED(N),ES(N)=0 17480 DATA 0,-900,-34000 17490 DATA 0,-900,-32000 17500 DATA 0,-900,-30000 17510 !***** GIRL設定 ***** 17520 MODSET 311,4,3 !GIRL顔 17530 MODPOS 311,0,0,0 17540 MODROT 311,0,PI,0 17550 MODOPT 311,1,1,1,1 17560 MODDISP 311 17570 DTS=DTS+1 17580 LFM(DTS)=311 17590 MODSET 312,4,8 !GIRL髪1 17600 MODJOIN 312,311 17610 MODPOS 312,0,0,0 17620 MODROT 312,0,0,0 17630 MODOPT 312,1,1,1,1 17640 MODDISP 312 17650 !MODSET 313,4,9 !GIRL髪2 17660 !MODJOIN 313,311 17670 !MODPOS 313,0,0,0 17680 !MODROT 313,0,0,0 17690 !MODOPT 313,1,1,1,1 17700 !MODOFF 313 17710 MODSET 314,4,7 !GIRL右目 17720 MODJOIN 314,311 17730 MODPOS 314,-0.37,-14.68,-0.47 17740 MODROT 314,RAD(10),RAD(90),RAD(11) 17750 MODOPT 314,1,1,1,1 17760 MODDISP 314 17770 MODSET 315,4,7 !GIRL左目 17780 MODJOIN 315,311 17790 MODPOS 315, 0.23,-14.75,-0.46 17800 MODROT 315,RAD(0),RAD(90),0 17810 MODOPT 315,1,1,1,1 17820 MODDISP 315 17830 !***** 空母設定 ***** 17840 MODSET 316,2,1 17850 MODJOIN 316,311 17860 MODPOS 316,0,205,-100 17870 MODROT 316,0,PI/2,0 17880 MODOPT 316,10,1,1,1 17890 MODDISP 316 17900 DTS=DTS+1 17910 LFM(DTS)=316 17920 !***** 戦闘機設定 ***** 17930 MODSET 317,7,1 17940 MODJOIN 317,311 17950 MODPOS 317,150,-25,-100 17960 MODROT 317,0,PI/2,0 17970 MODOPT 317,10,1,1,1 17980 MODDISP 317 17990 DTS=DTS+1 18000 LFM(DTS)=317 18010 !***** カメラアクション初期設定 ***** 18020 CR=10 ! 7-10-13 18030 CS=3 18040 CCU=COS(RAD(24)) 18050 SCU=SIN(RAD(24)) 18060 CV,CVV,CW,CT,GH=0 18070 !***** アクション開始 ***** 18080 DO 18090 CLEAR 18100 FOR L=1 TO 30 18110 CALL MSSLCAM 18120 TILEOFF 1000 18130 NEXT L 18140 IF MENU=0 THEN 18150 TEXTCOL WHITE 18160 LOCATE 1,3 18170 !PRINT "Select Mission" 18180 CALL SFONT(801,184,18,16,12,Z99,23,15,1,"[Select Mission]",1) 18190 FOR L=1 TO 30 18200 CALL MSSLCAM 18210 NEXT L 18220 TEXTCOL BLACK 18230 LOCATE 2,5 18240 PRINT "Blue-Sky" 18250 LOCATE 2 18260 PRINT "Evening" 18270 LOCATE 2 18280 PRINT "Midnight" 18290 LOCATE 2 18300 PRINT "Mist" 18310 LOCATE 2 18320 PRINT "Training" 18330 LOCATE 2 18340 PRINT "Replay" 18350 CSR=STAGE 18360 CSR0=CSR+.5 18370 ELSE 18380 TEXTCOL WHITE 18390 LOCATE 1,3 !18 18400 !PRINT "Select Training Menu" 18410 CALL SFONT(801,184,18,16,12,Z99,23,15,1,"[Select Training Menu]",1) 18420 FOR L=1 TO 30 18430 CALL MSSLCAM 18440 NEXT L 18450 TEXTCOL BLACK 18460 LOCATE 2,5 !21 18470 PRINT "Menu 1" 18480 LOCATE 2 18490 PRINT "Menu 2" 18500 LOCATE 2 18510 PRINT "Menu 3" 18520 LOCATE 2 18530 PRINT "Menu 4" 18540 LOCATE 2 18550 PRINT "Menu 5" 18560 LOCATE 2 18570 PRINT "Menu 6" 18580 LOCATE 2 18590 PRINT "Menu 7" 18600 LOCATE 2 18610 PRINT "Menu 8" 18620 LOCATE 2 18630 PRINT "Menu 9" 18640 LOCATE 2 18650 PRINT "Menu 10" 18660 LOCATE 2 18670 PRINT "戻る" 18680 CSR=TRAIN 18690 CSR0=CSR+.5 18700 END IF 18710 DO 18720 CALL PADXL 18730 CALL MSSLCAM 18740 IF CSR<>CSR0 THEN 18750 CALL SCRSTR(R$,2,9,CSR0+5) 18760 TEXTCOL BLACK 18770 LOCATE 2,CSR0+5 18780 PRINT R$ 18790 CALL SCRSTR(R$,2,9,CSR+5) 18800 TEXTCOL WHITE 18810 LOCATE 2,CSR+5 18820 PRINT R$ 18830 CSR0=CSR 18840 IF MENU=0 OR CSR=10 THEN 18850 LOCATE 1,17 18860 PRINT " " 18870 LOCATE 2 18880 PRINT " " 18890 LOCATE 4 18900 PRINT " " 18910 LOCATE 2 18920 PRINT " " 18930 LOCATE 4 18940 PRINT " " 18950 ELSE 18960 TEXTCOL WHITE 18970 LOCATE 1,17 18980 PRINT TRAIN$(CSR+1,1) 18990 LOCATE 2 19000 PRINT "Regular Time" 19010 LOCATE 4 19020 PRINT TRAIN$(CSR+1,2) 19030 LOCATE 2 19040 PRINT "Best Time" 19050 LOCATE 4 19060 PRINT LANK$(CSR+1,1,2) 19070 END IF 19080 IF MENU=0 THEN CALL LIGHT(CSR,0) ELSE CALL LIGHT(4,CSR) 19090 END IF 19100 IF PADX(1,6,2)=1 THEN EXIT DO 19110 IF PADX(1,7,2)=1 THEN 19120 IF MENU=0 THEN 19130 STAGE=9 19140 EXIT SUB 19150 ELSE 19160 CSR=10 19170 EXIT DO 19180 END IF 19190 END IF 19200 CSR=MOD(CSR+(PADX(1,4,2)=1)-(PADX(1,3,2)=1),6+5*MENU) 19210 LOOP 19220 IF MENU=0 THEN STAGE=CSR ELSE TRAIN=CSR 19230 IF STAGE<5 THEN FR=0 ELSE FR=1 19240 IF STAGE<4 THEN TRAIN,LD=0 19250 IF STAGE=4 THEN 19260 IF MENU=0 THEN 19270 MENU=1 19280 ELSEIF TRAIN=10 THEN 19290 MENU,TRAIN=0 19300 ELSE 19310 TRAIN=TRAIN+1 19320 LD=0 19330 END IF 19340 END IF 19350 IF FR=1 THEN 19360 CALL SFONT(801,184,18,16,12,Z99,23,15,1,"",1) 19370 CALL BROWSE(0,LD) 19380 END IF 19390 LOOP WHILE LD<>0 19400 D(4)=STAGE 19410 D(8)=TRAIN 19420 SEPLAY 13,255,255 19430 CALL MASKCLEAR 19440 FSYNC 60 19450 DO WHILE PAD(1,6)>8 OR PAD(1,7)>8 19460 LOOP 19470 END SUB 19480 !========================================= 19490 ! ミッション選択画面のアクション 19500 !========================================= 19510 SUB MSSLCAM 19520 IF ED(DTP)<200 THEN 19530 SELECT CASE CT 19540 CASE 0 19550 CT=1 19560 T=4e3/SQR(EX(DTN)^2+EZ(DTN)^2) 19570 EX(DTP)=EX(DTN)*T 19580 EY(DTP)=-900 19590 EZ(DTP)=EZ(DTN)*T 19600 CASE 1 19610 CT=2 19620 T=-4e3/SQR(EX(DTN)^2+EZ(DTN)^2) 19630 EX(DTP)=EX(DTN)*T 19640 EY(DTP)=-900 19650 EZ(DTP)=EZ(DTN)*T 19660 CASE ELSE 19670 CT=0 19680 T=RND*P2I 19690 EX(DTP)=3e4*CCU*SIN(T) 19700 EY(DTP)=-3e4*SCU 19710 EZ(DTP)=3e4*CCU*COS(T) 19720 END SELECT 19730 !MODPOS DTP+400,EX(DTP),EY(DTP),EZ(DTP) 19740 !SEPLAY 1,255,255 19750 END IF 19760 CALL DEMOFLY 19770 T=CR+CS*SIN(CW) 19780 CW=CW+.0012 19790 IF CW>P2I THEN CW=CW-P2I 19800 CX=T*CCU*SIN(CV) 19810 CY=T*SCU-18 19820 CZ=-T*CCU*COS(CV) 19830 T=ANGLE(EZ(2),-EX(2)) 19840 T=T-CV 19850 IF ABS(T)>PI THEN T=T-P2I*SGN(T) 19860 CVA=T*2e-4 19870 CVV=CVV*.97+CVA 19880 CV=CV+CVV 19890 IF ABS(CV)>PI THEN CV=CV-P2I*SGN(CV) 19900 MODPOS 1,CX,CY,CZ 19910 CAMPOS 1,CX,CY,CZ 19920 CAMVEC 1,EX(2),EY(2)*.5,EZ(2) 19930 CALL FLARE 19940 !***** 髪の動き ***** 19950 GH=(GH+1)*(GH<7) 19960 IF GH<4 THEN MODSET 312,4,8 ELSE MODSET 312,4,9 19970 FSYNC 1 19980 END SUB 19990 !========================================= 20000 ! 自機選択 20010 !========================================= 20020 SUB ACSLCT(MYID) 20030 CALL MASKCLEAR 20040 FSYNC 60 20050 AMBCOL 64,64,64 20060 LIGCOL 1,255,255,255 20070 LIGCOL 2,192,192,192 20080 LIGCOL 3,128,128,128 20090 LIGVEC 1,1,1,1 20100 LIGVEC 2,-1,0,0 20110 LIGVEC 3,0,-1,-1 20120 TRIPOS 1, 0,0, 640, 0, 0,224, 0 20130 TRIPOS 2, 640,0, 0,224, 640,224, 0 20140 TRICOL3 1, 0,127,255,128, 0,127,255,128, 255,255,255,128 20150 TRICOL3 2, 0,127,255,128, 255,255,255,128, 255,255,255,128 20160 TRIDISP 1 20170 TRIDISP 2 20180 FOR I=1 TO ACNUM 20190 MODSET I,7,I 20200 MODPOS I,I*35,0,0 20210 MODOPT I,1,1,1,1 20220 MODDISP I 20230 NEXT I 20240 FOR I=1 TO ACNUM 20250 TEMP(I+10)=0 20260 NEXT I 20270 T1,T2=MYID 20280 FOR I=1 TO 7 20290 TEMP(I)=0 20300 TILECOL I+2,255,255,0,48 20310 NEXT I 20320 CAMPOS 1,T1*35,-7,-25 20330 CAMROT 1,RAD(20),0,0 20340 CAMPOS 2,T1*35,-37,-100 20350 CAMROT 2,RAD(20),0,0 20360 SCREEN WINDOW 0,180,639,223 20370 TILEOFF 1000 20380 MYID0=MYID+.5 20390 DO 20400 IF MYID<>MYID0 THEN 20410 !***** パラメータ読み込み ***** 20420 RESTORE *MYMODELS 20430 FOR I=1 TO MYID 20440 READ T1$,T2$ 20450 READ QU,QV,QW,MAXSP,MINSP,MAXPOW 20460 READ GUN,MSSL,SWEP,FUEL,MDMG 20470 READ MCX,MCY,MCZ,COX,COY,COZ 20480 READ SX0,SY0,SZ0,SX1,SY1,SZ1 20490 READ SX2,SY2,SZ2,SX3,SY3,SZ3 20500 NEXT I 20510 T10=INT((QU+QV+QW)*100000) 20520 TEXTCOL WHITE 20530 CLEAR 20540 TILEPOS 10,16,96,624,192,16777197 20550 TILECOL 10,16,16,16,80 20560 TILEDISP 10 20570 !PRINT "[Air Craft Select]" 20580 CALL SFONT(801,176, 20,16,12,Z99,23,15,1,"[Air Craft Select]",1) 20590 LOCATE 0,10 20600 PRINT " NAME :";T2$ 20610 PRINT 20620 PRINT " CODE :";T1$ 20630 PRINT " SPEED:";MAXSP 20640 PRINT " TURN :";T10 20650 PRINT " GUN :";GUN 20660 PRINT " MSSL :";MSSL 20670 PRINT " SWEP :";SWEP 20680 PRINT " FUEL :";FUEL 20690 PRINT " DMG :";MDMG 20700 MYID0=MYID 20710 T2=MYID 20720 END IF 20730 FOR I=1 TO ACNUM 20740 IF TEMP(I+10)>0 OR I=MYID THEN TEMP(I+10)=MOD(TEMP(I+10)+1,360) 20750 MODROT I,0,RAD(TEMP(I+10)),0 20760 NEXT I 20770 TEMP(1)=TEMP(1)+(MAXSP/12-TEMP(1))*.1 20780 TEMP(2)=TEMP(2)+(T10/3.1-TEMP(2))*.1 20790 TEMP(3)=TEMP(3)+((GUN+1)/5-TEMP(3))*.1 20800 TEMP(4)=TEMP(4)+((MSSl+1)*2-TEMP(4))*.1 20810 TEMP(5)=TEMP(5)+(SWEP*3.125-TEMP(5))*.1 20820 TEMP(6)=TEMP(6)+((FUEL+1)/5-TEMP(6))*.1 20830 TEMP(7)=TEMP(7)+(MDMG*1.33333-TEMP(7))*.1 20840 FOR I=1 TO 7 20850 TILEPOS I+2,100,(I+12)*9+13,100+TEMP(I)*2,(I+12)*9+15,Z99 20860 IF TEMP(I)<100 THEN T3=0 ELSE T3=(TEMP(I)-100)*2.5 20870 TILECOL I+2,255,T3,0,128 20880 TILEDISP I+2 20890 NEXT I 20900 CALL PADX(1) 20910 FSYNC 1 20920 IF PADX(1,1,2)=1 THEN MYID=MIN(4,MYID+1) 20930 IF PADX(1,2,2)=1 THEN MYID=MAX(1,MYID-1) 20940 IF PADX(1,6,2)=1 THEN 20950 SEPLAY 13,255,255 20960 EXIT DO 20970 END IF 20980 IF PADX(1,7,2)=1 THEN 20990 MYID=-ABS(MYID) 21000 EXIT DO 21010 END IF 21020 T1=T1+(T2-T1)/10 21030 CAMPOS 1,T1*35,-5,-25 21040 CAMPOS 2,T1*35,-37,-100 21050 LOOP 21060 FSYNC 60 21070 CALL MASKCLEAR 21080 DO WHILE PAD(1,6)>8 OR PAD(1,7)>8 21090 LOOP 21100 END SUB 21110 !========================================= 21120 ! BGM SELECT 21130 !========================================= 21140 SUB BGMSLCT(S,T) 21150 SELECT CASE S 21160 CASE IS<0 21170 BGMSTOP 21180 CASE 0,3,4 21190 BGMPLAY 3 21200 CASE 1 21210 BGMPLAY 2 21220 CASE 2 21230 BGMPLAY 1 21240 CASE ELSE 21250 BGMPLAY 4 21260 END SELECT 21270 END SUB 21280 !========================================= 21290 ! ライティング 21300 !========================================= 21310 SUB LIGHT(T,S) 21320 SELECT CASE T 21330 CASE 1 !Evening 21340 AMBCOL 128, 64, 64 !環境光 21350 LIGCOL 1, 32, 32, 0 !ライト1カラー 21360 LIGCOL 2,255,128, 32 !ライト2カラー 21370 LIGCOL 3, 32, 32, 32 !ライト3カラー 21380 BGCOL 128, 84, 90 !バックグラウンド 21390 FOGCOL 128, 84, 90 !フォグカラー 21400 FOGSET 10000,30000 !フォグの設定 21410 MODSET 3,1,1 21420 MODOPT 3,1.2,1,0,1 21430 MODPOS 1,0,0,0 21440 MODROT 1,RAD(15),PI/2,0 21450 MODPOS 2,0,0,60500 21460 MODROT 2,0,-PI*2/3,0 21470 MODOPT 2,45,0,0,1 !太陽 21480 LIG,LIG0=1 21490 CASE 2 !Midnight 21500 AMBCOL 32, 32, 32 !環境光 21510 LIGCOL 1, 64, 64, 32 !ライト1カラー 21520 LIGCOL 2, 32, 32, 16 !ライト2カラー 21530 LIGCOL 3, 32, 32, 16 !ライト3カラー 21540 BGCOL 16, 21, 23 !バックグラウンド 21550 FOGCOL 16, 21, 23 !フォグカラー 21560 FOGSET 10000,30000 !フォグの設定 21570 MODSET 3,1,10 21580 MODOPT 3,1.2,0,0,1 21590 MODPOS 1,0,0,0 21600 MODROT 1,RAD(25),0,0 21610 MODPOS 2,0,0,58000 21620 MODROT 2,0,PI*2/3,0 21630 MODOPT 2,35,0,0,1 !月 21640 LIG,LIG0=2 21650 CASE 3 !Mist 21660 AMBCOL 64, 64, 64 !環境光 21670 LIGCOL 1,255,255,255 !ライト1カラー 21680 LIGCOL 2, 64, 64, 64 !ライト2カラー 21690 LIGCOL 3, 64, 64, 64 !ライト3カラー 21700 BGCOL 160,160,160 !バックグラウンド 21710 FOGCOL 160,160,160 !フォグカラー 21720 FOGSET 100,6000 !フォグの設定 21730 MODSET 3,1,1 21740 MODOPT 3,1.2,0,1,1 21750 MODPOS 1,0,0,0 21760 MODROT 1,RAD(40),0,0 21770 MODPOS 2,0,0,60500 21780 MODROT 2,0,0,0 21790 MODOPT 2,40,0,0,1 !太陽 21800 LIG,LIG0=3 21810 CASE ELSE !Blue-Sky 21820 AMBCOL 96, 96, 96 !環境光 21830 LIGCOL 1,255,255,255 !ライト1カラー 21840 LIGCOL 2, 64, 64, 64 !ライト2カラー 21850 LIGCOL 3, 64, 64, 64 !ライト3カラー 21860 BGCOL 86,140,193 !バックグラウンド 21870 FOGCOL 86,140,193 !フォグカラー 21880 FOGSET 10000,30000 !フォグの設定 21890 MODSET 3,1,1 21900 MODOPT 3,1.2,0,0,1 21910 MODPOS 1,0,0,0 21920 MODROT 1,RAD(40),0,0 21930 MODPOS 2,0,0,60500 21940 MODROT 2,0,0,0 21950 MODOPT 2,40,0,0,1 !太陽 21960 LIG,LIG0=0 21970 END SELECT 21980 LIGVEC 1, 0, 1,-1 !ライト1ベクトル 21990 LIGVEC 2,-1, 0, 0 !ライト2ベクトル 22000 LIGVEC 3, 1,-1, 1 !ライト3ベクトル 22010 END SUB 22020 !========================================= 22030 ! レンズフレア初期化 22040 !========================================= 22050 SUB FLAREINIT 22060 LABEL FLAREINIT 22070 RESTORE *FLAREINIT 22080 FOR I=1 TO 4 22090 READ T,X,Y,T1,T2,T3 22100 SPRTEX I+10,T,X,Y,X+T1-1,Y+T1-1 22110 SPRPAL I+10,T2,T3,2 22120 LFX(I)=T1/2 22130 LFY(I)=T1/4 22140 NEXT I 22150 DATA 8,448,192, 32,27,2 22160 DATA 8,384,192, 64,27,1 22170 DATA 8,448,192, 32,27,2 22180 DATA 8,384, 64,128,27,1 22190 END SUB 22200 !========================================= 22210 ! レンズフレア 22220 !========================================= 22230 SUB FLARE 22240 GETWPOS X,Y,Z,2,0,0,0 !太陽のワールド座標 22250 X=(4*CX+X)*.2 22260 Y=(4*CY+Y)*.2 22270 Z=(4*CZ+Z)*.2 22280 GETSPOS X,Y,Z,1,X,Y,Z !太陽のスクリーン座標 22290 X1=96+.7*X ! 96 =0.3*320 22300 Y1=33.6+.7*Y ! 33.6=0.3*112 22310 X2=224+.3*X !224 =0.7*320 22320 Y2=78.4+.3*Y ! 78.4=0.7*112 22330 X3=384-.2*X !384 =1.2*320 22340 Y3=134.4-.2*Y !134.4=1.2*112 22350 X4=576-.8*X !576 =1.8*320 22360 Y4=201.6-.8*Y !201.6=1.8*112 22370 IF COLLISION(1,LFM(LFC),LFM(LFC))>0 THEN LFS=DTS ELSE LFS=MAX(LFS-1,0) 22380 IF LFC>=DTS THEN LFC=1 ELSE LFC=LFC+1 22390 !IF COLLISION(1,LFM(LFC),LFM(LFC))>0 THEN LFS=DTS ELSE LFS=MAX(LFS-1,0) 22400 !IF LFC>=DTS THEN LFC=1 ELSE LFC=LFC+1 22410 !IF COLLISION(1,LFM(LFC),LFM(LFC))>0 THEN LFS=DTS ELSE LFS=MAX(LFS-1,0) 22420 !IF LFC>=DTS THEN LFC=1 ELSE LFC=LFC+1 22430 IF CM=0 OR CM=15 OR(CM=14 AND CMC=0)THEN T=0 ELSE T=COLLISION(1,301,301) 22440 T=T+LFS 22450 IF Z<0 OR X<0 OR X>640 OR Y<0 OR Y>224 OR LIG>1 OR T>0 THEN 22460 SPROFF 11 22470 SPROFF 12 22480 SPROFF 13 22490 SPROFF 14 22500 ELSE 22510 SPRPOS 11,X1-LFX(1),Y1-LFY(1),Z80 22520 SPRPOS 12,X2-LFX(2),Y2-LFY(2),Z81 22530 SPRPOS 13,X3-LFX(3),Y3-LFY(3),Z82 22540 SPRPOS 14,X4-LFX(4),Y4-LFY(4),Z83 22550 SPRDISP 11 22560 SPRDISP 12 22570 SPRDISP 13 22580 SPRDISP 14 22590 END IF 22600 END SUB 22610 !========================================= 22620 ! ミッションスタート準備 22630 !========================================= 22640 SUB MSINIT 22650 LABEL MSINIT 22660 RESTORE *MSINIT 22670 !***** レーダー用マスクタイル ***** 22680 FOR I=209 TO 212 22690 READ X1,Y1,X2,Y2 22700 TILEPOS I,X1,Y1,X2,Y2,Z95 22710 TILECOL I,0,0,0,1 22720 NEXT I 22730 DATA 0, 0,640,146 22740 DATA 0,146, 36,209 22750 DATA 162,146,640,209 22760 DATA 0,209,640,224 22770 !***** インフォメーションウィンドウ ***** 22780 FOR I=1 TO 2 22790 READ N,X,Y,XS,YS,Z,R,G,B,A 22800 !***** 中身 ***** 22810 TILEPOS N,X,Y,X+XS,Y+YS,Z 22820 TILECOL N,R,G,B,A 22830 IF I=2 THEN TILEDISP N 22840 !***** 枠 ***** 22850 TILEPOS N+4,X-2,Y-1,X+XS+2,Y+YS+1,Z-1 22860 TILECOL N+4,IJR,IJG,IJB,IJA 22870 IF I=2 THEN TILEDISP N+4 22880 NEXT I 22890 ! N, X, Y, XS, YS, Z,R,G,B, A 22900 !DATA 901, 36, 17,126, 63,16777198,0,0,0,128 !左上 22910 !DATA 902,478, 17,126, 63,16777198,0,0,0,128 !右上 22920 DATA 204, 36,146,126, 63,16777190,0,0,0, 64 !左下 22930 DATA 904,478,146,126, 63,16777198,0,0,0, 32 !右下 22940 !***** インフォメーションパネル ***** 22950 FOR I=9 TO 12 22960 READ X,Y,XS,YS,R,G,B,A 22970 IF STAGE=4 AND I=10 THEN YS=YS+9*2 22980 TILEPOS I+900,X,Y,X+XS,Y+YS,Z98 22990 TILECOL I+900,R,G,B,A 23000 TILEDISP I+900 23010 NEXT I 23020 ! X, Y, XS, YS, R, G, B, A 23030 DATA 12, 6,156, 20, 0, 0, 0, 40 !FPS 23040 DATA 410, 6,124, 11, 0, 0, 0, 40 !TIME 23050 DATA 76,106, 72, 10, 0, 0, 0, 40 !SPD 23060 DATA 492,106, 68, 10, 0, 0, 0, 40 !ALT 23070 !***** 敵インフォメーションパネル ***** 23080 TILECOL 202,0,0,0,40 23090 !***** インジケータ枠線 ***** 23100 FOR I=1 TO 8 23110 READ X,Y,XS,YS 23120 TILEPOS I+922,X+320,Y+112,X+XS+320,Y+YS+112,Z97 23130 TILECOL I+922,IJR,IJG,IJB,IJA 23140 NEXT I 23150 ! X, Y, XS, YS 23160 DATA -124,-48, 4, 96 !12左メーター縦線 23170 DATA 125,-48, -4, 96 !13右メーター縦線 23180 DATA -116,-44, 4, 88 !14HUD太枠線左縦 23190 DATA 117,-44, -4, 88 !15HUD太枠線右縦 23200 DATA -120,-44, 16, -2 !16HUD太枠線左上 23210 DATA -120, 44, 16, 2 !17HUD太枠線左下 23220 DATA 121,-44,-16, -2 !18HUD太枠線右上 23230 DATA 121, 44,-16, 2 !19HUD太枠線右下 23240 !***** 目盛り ***** 23250 FOR I=0 TO 15 23260 T=140-(MOD(I,5)<>0)*8 23270 LINEPOS I+901,320-T,67+I*6,320-124,67+I*6,Z97 23280 LINEPOS I+917,320+T,67+I*6,320+124,67+I*6,Z97 23290 LINECOL I+901,IJR,IJG,IJB,IJA 23300 LINECOL I+917,IJR,IJG,IJB,IJA 23310 NEXT I 23320 !***** 高度計&速度計 ***** 23330 TRICOL 901,255,255,255,96 23340 TRICOL 902,255,127, 0,96 23350 !***** 方位計 ***** 23360 SPRTEX 991,11,112,176,112+96,176+32 23370 SPRPAL 991,23,5,1 23380 SPRPOS 991,320-48,32,Z98 23390 !***** 自機水平線 ***** 23400 LINEPOS 933,266,112,296,112,Z97 23410 LINEPOS 934,344,112,374,112,Z97 23420 LINECOL 933,IJR/2,IJG/2,IJB/2,IJA 23430 LINECOL 934,IJR/2,IJG/2,IJB/2,IJA 23440 !***** ミサイルレンジ表示 ***** 23450 T=935 23460 FOR I=10 TO 350 STEP 20 23470 LINEPOS T,320+COS(RAD(I-2))*170,112+SIN(RAD(I-2))*85,320+COS(RAD(I+2))*170,112+SIN(RAD(I+2))*85,Z97 23480 LINECOL T,255,255,255,96 23490 T=T+1 23500 NEXT I 23510 !***** コーン(視野角) ***** 23520 LINECOL 213,255,255,255,64 23530 LINECOL 214,255,255,255,64 23540 !***** レーダー境界線 ***** 23550 FOR I=215 TO 218 23560 LINECOL I,255,255,255,64 23570 NEXT I 23580 !***** ターゲット引出線 ***** 23590 LINECOL 203,255,255,255,96 23600 !***** ターゲットコンテナ中抜き ***** 23610 FOR I=1 TO 100 23620 TILECOL I,0,0,0,1 23630 NEXT I 23640 !***** wマーク ***** 23650 SPRTEX 2,11,464,0,496,10 23660 SPRPOS 2,320-16,112,Z97 23670 SPRPAL 2,32,1,1 23680 !***** VVマーク ***** 23690 SPRTEX 1,11,464,12,496,32 23700 SPRPOS 1,320-16,112-6,Z87 23710 SPRPAL 1,32,1,1 23720 !***** ナビガール ***** 23730 SPRTEX 100,11,0,256-80,80,256 23740 SPRPOS2 100,576-32,6,576+32,6+32,Z99 23750 SPRPAL 100,32,2,1 23760 SPRDISP 100 23770 !***** スプライト文字描画 ***** 23780 N=801 23790 FOR I=1 TO 7 23800 READ X,Y,PP,PN,M$ 23810 CALL SFONT(N,X,Y,12,8,Z99,PP,PN,1,M$,0) 23820 NEXT I 23830 ! 123456789 23840 DATA 40, 96,23,15,"SPD[km/h]" !9 801-809 23850 DATA 496, 96,23,15,"ALT[m]" !6 810-815 23860 DATA 484,151,23,15,"GUN" !3 816-818 23870 DATA 484,160,23,15,"MISSL" !5 819-823 23880 DATA 484,169,23,15,"XMAA" !4 824-827 23890 DATA 484,178,23,15,"FUEL" !4 828-831 23900 DATA 484,187,23,15,"DMG" !3 832-834 23910 !***** 固定スプライト文字 ***** 23920 FOR I=1 TO 4 23930 READ J,X1,Y1,X2,Y2,PP,PN 23940 SPRTEX I+900,J,X1,Y1,X2,Y2 23950 SPRPOS I+900,272,8,Z99 23960 SPRPAL I+900,PP,PN,1 23970 SPROFF I+900 23980 NEXT I 23990 DATA 11,416,192,511,207,23,14 !LOCK-ON 24000 DATA 11,416,208,511,223,23,14 !PULL-UP 24010 DATA 11,416,224,511,239,23,14 !CAUTION 24020 DATA 11,416,240,511,255,23,14 ! STALL 24030 END SUB 24040 !========================================= 24050 ! MODEL SET 1 24060 !========================================= 24070 SUB MODELS1(FINE,C1,C2,C3,M1,M2,B1,B2,IMB) 24080 LABEL MODELS1 24090 RESTORE *MODELS1 24100 DTS,LFS=0 24110 LFC=1 24120 !***** 空の配置 ***** 24130 !空=MODEL 3は、SUB LIGHTで設定する 24140 MODPOS 3,0,0,0 24150 MODROT 3,0,0,0 24160 MODDISP 3 24170 !***** 海の配置 ***** 24180 T=4 24190 FOR I=-4 TO 4 24200 FOR J=-4 TO 4 24210 MODSET T,1,2 24220 MODPOS T,24000*I+C1,C2,24000*J+C3 24230 MODOPT T,1,1,1,1 24240 IF IMB=0 OR I<>0 OR J<>0 THEN MODDISP T 24250 T=T+1 24260 NEXT J 24270 NEXT I 24280 !***** 島の配置 ***** 24290 IF IMB>0 THEN 24300 MODSET 98,1,3 24310 MODPOS 98,C1,C2,C3 24320 MODOPT 98,1,1,1,1 24330 MODDISP 98 24340 END IF 24350 !***** 太陽OR月の配置 ***** 24360 !太陽・月は、SUB LIGHTで設定する 24370 MODSET 1,1,8 !陰判定モデル 24380 MODDISP 1 24390 MODJOIN 2,1 !モデル結合 24400 MODSET 2,1,9 !太陽・月モデル 24410 MODDISP 2 24420 !***** 山の配置 ***** 24430 LABEL MOUNTAIN 24440 RESTORE *MOUNTAIN 24450 MTN=101 24460 MTM=108 24470 FOR I=MTN TO MTM 24480 READ X,Y,Z,XR,YR,ZR 24490 MODSET I,1,4 24500 MODPOS I,M1+X+C1,Y+C2,M2+Z+C3 24510 MODROT I,RAD(XR),RAD(YR),RAD(ZR) 24520 MODOPT I,1,1,1,1 24530 IF IMB>0 THEN 24540 MODDISP I 24550 DTS=DTS+1 24560 LFM(DTS)=I 24570 END IF 24580 NEXT I 24590 ! X, Y, Z, XR, YR, ZR 24600 DATA 2150, 3100, -800,-10, 92,-27 24610 DATA -2150, 2800, -800,-15, -5,-13 24620 DATA 2000, 3000, 400,-44, -28,-66 24630 DATA -2100, 2800, 2000, -8, 14, -6 24640 DATA 0, 2940, 2400,-52,-249,-34 24650 DATA 3000, 2500, 2500,-35, 180,-45 24660 DATA 3500, 3000, -100,-35, 180,-45 24670 DATA 3000, 2930, -800,-41, 131,-47 24680 DATA 0, 0, 4000, -1, 3, -1 24690 DATA 1000, 0, 4000, -1, 3, -1 24700 MODSET 399,1,5 24710 MODPOS 399,C1-1705,1,C2+2870 24720 MODROT 399,0,0,0 24730 MODOPT 399,87.3,1,1,1 24740 IF IMB>0 THEN MODDISP 399 24750 !***** ビルの配置 ***** 24760 LABEL BUILDING 24770 RESTORE *BUILDING 24780 BTN=201 24790 BTM=219 24800 FOR I=BTN+50 TO BTM+50 24810 MODSET I,1,6 24820 MODJOIN I,I-50 24830 MODPOS I,0,1,0 24840 MODROT I,0,0,0 24850 MODOPT I,2,1,1,1 24860 NEXT I 24870 FOR I=BTN TO BTM 24880 IF I=BTN THEN 24890 T1=0 24900 T2=0 24910 ELSEIF I0 THEN 25060 MODDISP I 25070 MODDISP I+50 25080 DTS=DTS+1 25090 LFM(DTS)=I+50 25100 END IF 25110 DO UNTIL COLLISION(I,BTN,BTM)=0 25120 T1=T1+10 25130 T3=T1*SIN(RAD(T2))+B1 25140 T5=T1*COS(RAD(T2))+B2 25150 MODPOS I,T3+C1,T4+C2,T5+C3 25160 LOOP 25170 NEXT I 25180 T=INT((850*5)/100+.9) 25190 MODSET 400,1,5 25200 MODPOS 400,B1+C1,C2,B2+C3 25210 MODROT 400,0,0,0 25220 MODOPT 400,T,1,1,1 25230 IF IMB>0 THEN MODDISP 400 25240 !***** 雲の配置 ***** 25250 FOR I=601 TO 700 25260 X=INT(RND*40-20)*256 25270 Y=INT(RND*40-20)*256 25280 MODSET I,1,7 25290 MODPOS I,X,RND*200-2000,Y 25300 MODOPT I,4,0,1,1 25310 MODDISP I 25320 NEXT I 25330 END SUB 25340 !========================================= 25350 ! MODEL SET 2 (自機) 25360 !========================================= 25370 SUB MODELS2(MYID,STAGE,TRAIN) 25380 FOR I=996 TO 1000 25390 MODPOS I,0,0,0 25400 MODROT I,0,0,0 25410 MODOPT I,1,0,0,1 25420 NEXT I 25430 MODJOIN 998,997 25440 MODJOIN 999,998 25450 !***** 自機 ***** 25460 MODSET 301,7,MYID !7,1 7,2 7,3 7,4 機種のタイプ 25470 MODOPT 301,1,1,1,1 25480 MODDISP 301 25490 !DTS=DTS+1 25500 !LFM(DTS)=301 25510 !***** 警告当たり判定用 ***** 25520 !MODSET 995,3,5 25530 !MODDISP 995 25540 !***** アフターバーナー ***** 25550 MODJOIN 901,301 25560 MODSET 901,8,MYID*2-1 25570 MODPOS 901,0,0,0 25580 MODROT 901,0,0,0 25590 MODOPT 901,1,0,1,1 25600 MODDISP 901 25610 MODJOIN 902,301 25620 MODSET 902,8,MYID*2 25630 MODPOS 902,0,0,.4 25640 MODROT 902,0,0,0 25650 MODOPT 902,1,0,1,1 25660 MODDISP 902 25670 !***** ピッチインジケータ ***** 25680 MODSET 993,3,4 25690 MODPOS 993,0,0,-6 !VIEW0カメラ位置 25700 MODOPT 993,5,0,0,2 25710 MODSET 994,3,3 25720 MODOPT 994,5,0,0,2 25730 MODJOIN 993,301 25740 MODJOIN 994,993 25750 !***** 白煙 ***** 25760 FOR I=1 TO 200 25770 MODSET I+700,3,6 25780 NEXT I 25790 !***** パラメータ設定 ***** 25800 RESTORE *MYMODELS 25810 FOR I=1 TO MYID 25820 READ T1$,T2$ 25830 READ QU,QV,QW,MAXSP,MINSP,MAXPOW 25840 READ GUN,MSSL,SWEP,FUEL,MDMG 25850 READ MCX,MCY,MCZ,COX,COY,COZ 25860 READ SX0,SY0,SZ0,SX1,SY1,SZ1 25870 READ SX2,SY2,SZ2,SX3,SY3,SZ3 25880 NEXT I 25890 CALL PRMCALC !最適パラメータの選定 25900 !***** スタート位置 ***** 25910 RESTORE *STAGE2 25920 IF STAGE<3 THEN 25930 READ MX,MY,MZ,MU,MV,MW,X,Y,Z 25940 ELSE 25950 READ MX,MY,MZ,MU,MV,MW,X,Y,Z 25960 FOR I=1 TO TRAIN 25970 READ MX,MY,MZ,MU,MV,MW,X,Y,Z 25980 NEXT I 25990 END IF 26000 MU=RAD(-MU) 26010 MV=RAD(MV) 26020 MW=RAD(-MW) 26030 X=-X/216 26040 Y=-Y/216 26050 Z=-Z/216 26060 MODPOS 301,0,0,0 26070 MODROT 301,MU,MV,MW 26080 GETWPOS VX,VY,VZ,301,X,Y,Z 26090 MODPOS 301,MX,MY,MZ 26100 SPD=SQR(VX^2+VY^2+VZ^2)*216 !自機 速度 26110 ACL,AX,AY,AZ=0 !自機 加速度 26120 DMG=0 !自機 耐久度 26130 DX,DY,DZ=0 !自機 回転速度 26140 DDX,DDY,DDZ=0 !自機 回転加速度 26150 AFB=4 !自機 出力 26160 AFD=-.02 !自機 出力増減値 26170 BRK=0 !自機 ブレーキ 26180 STL=0 !ストール 26190 HE1,HE2=0 !白煙カウンタ 26200 ATP=0 !オートパイロットフラグ 26210 ATC=-1 !オートチェイサーフラグ 26220 AES,MES,BES=0 !オートチェイサーエスケープフラグ 26230 !MODPOS 995,MX,MY,MZ !警告当たり判定用 26240 !MODROT 995,MU,MV,MW 26250 !MODOPT 995,MAX(VZ,.002),0,0,1 26260 TRICOL3 1,0,0,0,0,0,0,0,0,0,0,0,0 26270 TRICOL3 2,0,0,0,0,0,0,0,0,0,0,0,0 26280 TRICOL3 3,0,0,0,0,0,0,0,0,0,0,0,0 26290 END SUB 26300 !========================================= 26310 ! MODEL SET 3 (自機以外) 26320 !========================================= 26330 SUB MODELS3(T_0,T_1,T_2,T_3,T_4,T_5) 26340 DTC=400 !敵モデル番号初期化 26350 DTN=0 !総数初期化 26360 DTN0=T_0 !プロペラ機数 26370 DTN1=T_1 !ジェット機数 26380 DTN2=T_2 !巨大戦艦 26390 DTN3=T_3 !車両&地上数 26400 DTN4=T_4 !艦船数 26410 DTN5=T_5 !バルーン 26420 EDN=24e3 !オートレーダー用 26430 !***** プロペラ機 ***** 26440 LABEL MODELS30 26450 RESTORE *MODELS30 26460 FOR I=DTN+1 TO DTN+DTN0 26470 DTC=DTC+1 26480 EC(I)=DTC 26490 EX(I)= RND*8000-4000 26500 EY(I)=-RND*1000-2500 26510 EZ(I)= RND*8000-4000 26520 EU(I)=0 26530 EV(I)=RND*PI*2 26540 EW(I)=0 26550 ER(I)=255 26560 EG(I)=255 26570 EB(I)=192 26580 ES(I)=(450+RND*100)*FTM 26590 EVZ(I)=ES(I)/216 26600 EO(I)=.000125*FTM !PITCH-DOWN 26610 EP(I)=.00025*FTM !PITCH-UP LEFT/RIGHT 26620 EQ(I)=.005*FTM !ROLL 26630 EA(I)=1 26640 ET(I)=8 26650 ED(I)=999999 26660 MODSET EC(I),6,5 26670 MODPOS EC(I),EX(I),EY(I),EZ(I) 26680 MODROT EC(I),EU(I),EV(I),EW(I) 26690 MODOPT EC(I),1,1,1,1 26700 MODDISP EC(I) 26710 TRICOL I+300,ER(I),EG(I),EB(I),128 26720 DTS=DTS+1 26730 LFM(DTS)=DTC 26740 FOR J=0 TO 3 26750 K=EC(I)+100+J*5 26760 MODSET K,6,10 26770 MODJOIN K,EC(I) 26780 SELECT CASE J 26790 CASE 0 26800 MODPOS K,-14.5, 2.0, -9.3 26810 CASE 1 26820 MODPOS K, -7.1, 2.8,-10.0 26830 CASE 2 26840 MODPOS K, 7.1, 2.8,-10.0 26850 CASE ELSE 26860 MODPOS K, 14.5, 2.0, -9.3 26870 END SELECT 26880 MODROT K,0,0,0 26890 MODOPT K,1,1,1,1 26900 MODDISP K 26910 NEXT J 26920 NEXT I 26930 EPP=0 !プロペラ回転角度 26940 DTN=DTN+DTN0 26950 !***** ジェット機 ***** 26960 LABEL MODELS31 26970 RESTORE *MODELS31 26980 FOR I=DTN+1 TO DTN+DTN1 26990 DTC=DTC+1 27000 EC(I)=DTC 27010 EX(I)= RND*8000-4000 27020 EY(I)=-RND*2000-4000 27030 EZ(I)= RND*8000-4000 27040 EU(I)=0 27050 EV(I)=RND*PI*2 27060 EW(I)=0 27070 ER(I)=255 27080 EG(I)=255 27090 EB(I)=0 27100 ES(I)=((I=DTN+1)*200+700+RND*200)*FTM 27110 EVZ(I)=ES(I)/216 27120 EO(I)=.0005*FTM !PITCH-DOWN 27130 EP(I)=.001*FTM !PITCH-UP LEFT/RIGHT 27140 EQ(I)=.02*FTM !ROLL 27150 EA(I)=1 27160 ET(I)=1+(I>DTN+1) 27170 ED(I)=999999 27180 MODSET EC(I),6,8+(I=DTN+1) 27190 MODPOS EC(I),EX(I),EY(I),EZ(I) 27200 MODROT EC(I),EU(I),EV(I),EW(I) 27210 MODOPT EC(I),1,1,1,1 27220 MODDISP EC(I) 27230 TRICOL I+300,ER(I),EG(I),EB(I),128 27240 IF I=DTN+1 AND STAGE=2 THEN 27250 MODSET EC(I),2,8 !UFO 8,80 27260 MODOPT EC(I),1,0,0,1 27270 EO(I)=EO(I)*10 27280 EP(I)=EP(I)*10 27290 EQ(I)=0 27300 ET(I)=9 27310 END IF 27320 DTS=DTS+1 27330 LFM(DTS)=DTC 27340 NEXT I 27350 DTN=DTN+DTN1 27360 DTN1=DTN1+DTN0 27370 !***** 巨大戦艦 ***** 27380 LABEL MODELS32 27390 NAZO_LX=1300 27400 NAZO_LY=500 27410 NAZO_LZ=2000 27420 NAZO_RX=PI/20 27430 NAZO_RY=PI/18 27440 NAZO_RZ=PI/6 27450 FOR I=DTN+1 TO DTN+DTN2 27460 DTC=DTC+1 27470 EC(I)=DTC 27480 EX(I)= RND*10000-5000 27490 EY(I)=-RND*2000-5000 27500 EZ(I)= RND*10000+5000 27510 EU(I)=0 27520 EV(I)=RND*PI*2 27530 EW(I)=0 27540 ER(I)=255 27550 EG(I)=128 27560 EB(I)=0 27570 ES(I)=(100+RND*100)*FTM 27580 EVZ(I)=ES(I)/216 27590 EO(I)=.0002*FTM !PITCH-DOWN 27600 EP(I)=.0002*FTM !PITCH-UP LEFT/RIGHT 27610 EQ(I)=.0002*FTM !ROLL 27620 EA(I)=1 27630 ET(I)=10 27640 ED(I)=999999 27650 MODSET EC(I),2,3 27660 MODPOS EC(I),EX(I),EY(I),EZ(I) 27670 MODROT EC(I),EU(I),EV(I),EW(I) 27680 MODOPT EC(I),1,1,1,1 27690 MODDISP EC(I) 27700 TRICOL I+300,ER(I),EG(I),EB(I),128 27710 TRICOL I+304,ER(I),EG(I),EB(I),128 27720 DTS=DTS+1 27730 LFM(DTS)=DTC 27740 RESTORE *MODELS32 27750 FOR J=1 TO 8 27760 DTC=DTC+1 27770 MODSET DTC,2,4 27780 READ NAZO_X,NAZO_Y,NAZO_Z 27790 MODPOS DTC,NAZO_X*NAZO_LX,NAZO_Y*NAZO_LY,NAZO_Z*NAZO_LZ 27800 READ NAZO_X,NAZO_Y,NAZO_Z 27810 MODROT DTC,NAZO_X*NAZO_RX,NAZO_Y*NAZO_RY,NAZO_Z*NAZO_RZ 27820 MODOPT DTC,1,1,1,1 27830 MODJOIN DTC,EC(I) 27840 MODDISP DTC 27850 DTS=DTS+1 27860 LFM(DTS)=DTC 27870 NEXT J 27880 NEXT I 27890 DATA -1,-1,-1, 1,-1,-1 27900 DATA 1,-1,-1, 1, 1, 1 27910 DATA -1, 1,-1,-1,-1, 1 27920 DATA 1, 1,-1,-1, 1,-1 27930 DATA -1,-1, 1,-1, 1,-1 27940 DATA 1,-1, 1,-1,-1, 1 27950 DATA -1, 1, 1, 1, 1, 1 27960 DATA 1, 1, 1, 1,-1,-1 27970 DTN=DTN+DTN2 27980 DTN2=DTN2+DTN1 27990 !***** 戦車と対空砲 ***** 28000 LABEL MODELS33 28010 RESTORE *MODELS33 28020 FOR I=DTN+1 TO DTN+DTN3 28030 DTC=DTC+1 28040 EC(I)=DTC 28050 EX(I)=RND*4000-2000 28060 EY(I)=-1 28070 EZ(I)=-RND*2000-4000 28080 EU(I)=0 28090 EV(I)=RND*PI*2 28100 EW(I)=0 28110 ER(I)=255 28120 EG(I)=128 28130 EB(I)=255 28140 ES(I)=0 28150 EVZ(I)=ES(I)/216 28160 EA(I)=1 28170 ED(I)=999999 28180 ET(I)=11+MOD(I,2) 28190 MODSET EC(I),2,6+MOD(I,2) 28200 MODPOS EC(I),EX(I),EY(I),EZ(I) 28210 MODROT EC(I),EU(I),EV(I),EW(I) 28220 MODOPT EC(I),1,1,1,1 28230 MODDISP EC(I) 28240 TILECOL I+300,ER(I),EG(I),EB(I),128 28250 NEXT I 28260 DTN=DTN+DTN3 28270 DTN3=DTN3+DTN2 28280 !***** 艦船 ***** 28290 LABEL MODELS34 28300 RESTORE *MODELS34 28310 FOR I=DTN+1 TO DTN+DTN4 28320 DTC=DTC+1 28330 EC(I)=DTC 28340 EU(I)=0 28350 EV(I)=0 28360 EW(I)=0 28370 ER(I)=192 28380 EG(I)=192 28390 EB(I)=255 28400 ES(I)=0 28410 EVZ(I)=ES(I)/216 28420 EA(I)=1 28430 ED(I)=999999 28440 IF I=DTN+1 THEN 28450 EX(I)=0 28460 EY(I)=0 28470 EZ(I)=-15000 28480 ET(I)=13 28490 MODSET EC(I),2,1 28500 ELSE 28510 EX(I)=0 28520 EY(I)=0 28530 EZ(I)=15000 28540 ET(I)=14 28550 MODSET EC(I),2,2 28560 END IF 28570 MODPOS EC(I),EX(I),EY(I),EZ(I) 28580 MODOPT EC(I),1,1,1,1 28590 MODDISP EC(I) 28600 TILECOL I+300,ER(I),EG(I),EB(I),128 28610 DTS=DTS+1 28620 LFM(DTS)=DTC 28630 NEXT I 28640 DTN=DTN+DTN4 28650 DTN4=DTN4+DTN3 28660 !***** バルーン ***** 28670 RESTORE *STAGE3 28680 IF DTN5>0 THEN 28690 DO 28700 READ T_$ 28710 LOOP UNTIL T_$="*"+STR$(DTN5) 28720 READ DTN5 28730 BLLN=DTN5 28740 END IF 28750 FOR I=DTN+1 TO DTN+DTN5 28760 DTC=DTC+1 28770 EC(I)=DTC 28780 READ EX(I),EY(I),EZ(I) 28790 EU(I)=0 28800 EV(I)=RND*PI*2 28810 EW(I)=0 28820 ER(I)=128 28830 EG(I)=255 28840 EB(I)=128 28850 ES(I)=0 28860 EVZ(I)=ES(I)/216 28870 EA(I)=1 28880 ET(I)=20 28890 ED(I)=999999 28900 MODSET EC(I),4,1 28910 MODPOS EC(I),EX(I),EY(I),EZ(I) 28920 MODROT EC(I),EU(I),EV(I),EW(I) 28930 MODOPT EC(I),1,1,1,1 28940 MODDISP EC(I) 28950 TILECOL I+300,ER(I),EG(I),EB(I),128 28960 DTS=DTS+1 28970 LFM(DTS)=DTC 28980 NEXT I 28990 !***** 総数 ***** 29000 TGN,DTN=DTN+DTN5 29010 DTN5=DTN5+DTN4 29020 END SUB 29030 !========================================= 29040 ! ミッションスタート処理メイン 29050 !========================================= 29060 LABEL START 29070 SEPLAY 16,128,128 29080 RS=0 !レーダー操作スイッチ 29090 RD=1 !レーダー切替スイッチ 29100 RR=-1.5 !レーダー倍率 29110 RX=99 !レーダー中心X 29120 RY=178 !レーダー中心Y 29130 RAT=1 !オートレーダーフラグ 29140 T=ATN(320/512) !視野角(rad) 29150 RX0=SIN(T)*16e4 !コーン座標X定数 29160 RY0=COS(T)*8e4 !コーン座標Y定数 29170 VOL=2.5 !SE VOLUME 29180 CM=0 !カメラモード 29190 CL1=4 !VIEW1カメラ半径定数 29200 CM1=-.087 !VIEW1カメラX回転角 29210 CN1=0 !VIEW1カメラY回転角 29220 CL2=4.5 !VIEW2カメラ半径定数 29230 CM2=-.087 !VIEW2カメラX回転角 29240 CN2=0 !VIEW2カメラY回転角 29250 CL3=5 !VIEW3カメラ半径定数 29260 CM3=-.087 !VIEW3カメラX回転角 29270 CN3=PI !VIEW3カメラY回転角 29280 !***** VIEW1-3用カメラ相対座標XYZ ***** 29290 CI1=2^CL1*COS(CM1)*SIN(CN1) 29300 CJ1=2^CL1*SIN(CM1) 29310 CK1=2^CL1*COS(CM1)*COS(CN1) 29320 CI2=2^CL2*COS(CM2)*SIN(CN2) 29330 CJ2=2^CL2*SIN(CM2) 29340 CK2=2^CL2*COS(CM2)*COS(CN2) 29350 CI3=2^CL3*COS(CM3)*SIN(CN3) 29360 CJ3=2^CL3*SIN(CM3) 29370 CK3=2^CL3*COS(CM3)*COS(CN3) 29380 FSYNC 180 29390 LABEL REMSSLCT 29400 !ミッション選択 29410 CALL MSSLCT 29420 IF STAGE=9 THEN 29430 CALL BGMSLCT(STAGE,TRAIN) 29440 GOTO *TOP 29450 END IF 29460 !機体選択 29470 IF FR=0 THEN !リプレイ以外 29480 IF STAGE=4 THEN !トレーニングの場合 29490 RESTORE *STAGE1 29500 FOR I=1 TO TRAIN 29510 READ MYID 29520 NEXT I 29530 ELSE !トレーニング以外の場合 29540 IF ABS(MYID)<1 OR ABS(MYID)>4 THEN MYID=1 ELSE MYID=ABS(MYID) 29550 CALL ACSLCT(MYID) 29560 END IF 29570 END IF 29580 IF MYID<1 OR MYID>4 THEN *REMSSLCT 29590 D(9)=MYID 29600 CALL BGMSLCT(STAGE,TRAIN) !BGM選択 29610 !***** リスタート ***** 29620 LABEL RESTART 29630 CALL MASKCLEAR 29640 FSYNC 1 29650 !***** 乱数とリプレイデータ初期化 ***** 29660 RANDOMIZE 29670 RN1=RND 29680 RN2=RND 29690 RN3=RND 29700 RN4=RND 29710 RN5=RND 29720 RN6=RND 29730 RN7=RND 29740 CMC=INT(RND*14) 29750 IF FR=0 THEN 29760 SELECT CASE STAGE 29770 CASE 0 TO 2 29780 D(3)=RND*1048576 29790 CASE ELSE 29800 D(3)=0 29810 END SELECT 29820 D(5)=0 29830 D(6)=0 29840 D(7)=0 29850 END IF 29860 FOR I=1 TO 20 29870 V(I),C(I),P(I)=0 29880 NEXT I 29890 RANDOMIZE D(3) 29900 DP=100 29910 !***** 画面とモデルの設定 ***** 29920 CALL MSINIT 29930 CALL MODELS1(0,0,0,0,-2600,2000,5000,-1500,1) 29940 CALL LIGHT(STAGE,TRAIN) 29950 CALL MODELS2(MYID,STAGE,TRAIN) 29960 SELECT CASE STAGE 29970 CASE 0 !Blue-Sky 29980 CALL MODELS3(1,2,1,4,2,0) 29990 CASE 1 !Evening 30000 CALL MODELS3(1,2,1,4,2,0) 30010 CASE 2 !Midnight 30020 CALL MODELS3(1,2,1,4,2,0) 30030 CASE 3 !Mist 30040 CALL MODELS3(1,2,1,4,2,0) 30050 CASE ELSE !Training 30060 CALL MODELS3(0,0,0,0,0,TRAIN) 30070 END SELECT 30080 !***** パラメータ設定 ***** 30090 PAU=0 !ポーズフラグ 30100 QUI=0 !強制終了フラグ 30110 GOV=0 !GAME OVERフラグ 30120 IDSP=0 !初回描画フラグオフ 30130 LENS=512 !レンズ値 30140 DSW1=0 !分散処理スイッチ(パラメータ表示) 30150 DSW2=0 !分散処理スイッチ(PAD入力) 30160 BOSS=0 !巨大戦艦遭遇フラグ 30170 EID=0 !ターゲット検索開始番号 30180 TG=0 !ターゲット選択番号 30190 TGA=RAD(7) !ターゲットミサイルレンジ角 30200 TGC=0 !ターゲット切替フラグ 30210 EDI=1 !当たり判定用最短モデル番号 30220 MSG,MSG0,MSG1=0 !メッセージ制御 30230 P01,P02,P03,P04=0 !PAD入力初期化 30240 P05,P06,P07,P08=0 !PAD入力初期化 30250 P09,P10,P11,P12=0 !PAD入力初期化 30260 P13,P14,P15,P16=128 !PAD入力初期化 30270 P17,P18,P19,P20=0 !PAD入力初期化 30280 P07T=0 !PAD入力初期化 30290 MS2,MS1,MS0=0 !作戦時間(分,秒,1/60秒) 30300 MAD=1 !作戦時間加算値 30310 FN0=99 !最小フレームレート 30320 FX0=0 !最大フレームレート 30330 FA0=0 !平均フレームレート 30340 FT0=0 !総フレーム数 30350 FS0=0 !経過秒数 30360 TM1=1 30370 FSYNC 1 30380 T=TIME 30390 DO 30400 FSYNC 1 30410 TM2=TIME 30420 LOOP WHILE T=TM2 30430 !========================================= 30440 ! メインループ 30450 !========================================= 30460 LABEL MAINLOOP 30470 DO 30480 !***** 描画堕ち判定 ***** 30490 T=TIME 30500 IF TM2=T THEN 30510 TM1=TM1+1 30520 ELSE 30530 FN0=MIN(FN0,TM1) 30540 FX0=MAX(FX0,TM1) 30550 FS0=FS0+1 30560 FT0=FT0+TM1 30570 FA0=INT(FT0/FS0+.5) 30580 LOCATE 1,0 30590 IF TM115 THEN 30680 BRC=0 30690 BRV=RN1*.0014-.0007 30700 BRW=RN2*.0014-.0007 30710 ELSEIF BRC>10 THEN 30720 BRC=BRC+1 30730 ELSE 30740 BRC=BRC+1 30750 BRX=MIN(MAX(BRX+BRV,-.015),.015) 30760 BRY=MIN(MAX(BRY+BRW,-.015),.015) 30770 END IF 30780 !***** ブラックアウト等 ***** 30790 IF CM=0 OR(CM=14 AND CMC=0)THEN 30800 IF BOUT<0 THEN TILECOL 1000,0,0,0,-BOUT ELSE TILECOL 1000,255,0,0,BOUT 30810 END IF 30820 !***** カメラ(ビュー) ***** 30830 SELECT CASE CM 30840 CASE 15 !コクピットビュー2 30850 CALL VIEW15 30860 CASE 14 !ランダムビュー 30870 CALL VIEW14 30880 CASE 13 !ターゲットビュー 30890 CALL VIEW13 30900 CASE 12 !チェイスカメラ 30910 CALL VIEW12 30920 CASE 11 !スプリングチェイスカメラ 30930 CALL VIEW11 30940 CASE 10 !ランデブーカメラ 30950 CALL VIEW10 30960 CASE 9 !フィールドビューズーム有り 30970 CALL VIEW9 30980 CASE 8 !フィールドビューズーム無し 30990 CALL VIEW8 31000 CASE 7 !サテライトカメラ 31010 CALL VIEW7 31020 CASE 6 !近接固定点 31030 CALL VIEW6 31040 CASE 5 !周囲回転視点 31050 CALL VIEW5 31060 CASE 4 !周囲固定視点 31070 CALL VIEW4 31080 CASE 3 !固定視点 31090 CALL VIEW3 31100 CASE 2 !水平追従回転視点 31110 CALL VIEW2 31120 CASE 1 !後方視点 31130 CALL VIEW1 31140 CASE ELSE !コクピットビュー 31150 CALL VIEW0 31160 END SELECT 31170 CALL FLARE 31180 !***** 雨の処理 ***** 31190 IF PAU=0 AND LIG=3 THEN 31200 X=10-RN1*20 31210 Y=10-RN2*20 31220 Z=LENS*.02 31230 MODPOS 992,CX,CY,CZ 31240 MODROT 992,-CU,-CV,-CW 31250 GETWPOS X,Y,Z,992,X,Y,Z 31260 X0=CX-CX0 31270 Y0=CY-CY0-.5 31280 Z0=CZ-CZ0 31290 X0=X-X0 31300 Y0=Y-Y0 31310 Z0=Z-Z0 31320 GETSPOS X,Y,Z,1,X,Y,Z 31330 GETSPOS X0,Y0,Z0,1,X0,Y0,Z0 31340 X0=MIN(MAX(X0,-1728),2367) 31350 Y0=MIN(MAX(Y0,-1936),2159) 31360 IF Z>0 THEN 31370 LINEPOS 1,X,Y,X0,Y0,Z 31380 LINECOL 1,255,255,255,128 31390 LINEDISP 1 31400 END IF 31410 CX0=CX 31420 CY0=CY 31430 CZ0=CZ 31440 ELSE 31450 LINEOFF I 31460 END IF 31470 !***** 影の処理 ***** 31480 GETWPOS X0,T,Z0,301,SX0,SY0,SZ0 31490 GETWPOS X1,T,Z1,301,SX1,SY1,SZ1 31500 GETWPOS X2,T,Z2,301,SX2,SY2,SZ2 31510 GETWPOS X3,T,Z3,301,SX3,SY3,SZ3 31520 GETSPOS X0,Y0,Z0,1,X0,-1,Z0 31530 GETSPOS X1,Y1,Z1,1,X1,-1,Z1 31540 GETSPOS X2,Y2,Z2,1,X2,-1,Z2 31550 GETSPOS X3,Y3,Z3,1,X3,-1,Z3 31560 T0=MIN(MIN(MIN(Z0,Z1),Z2),Z3) 31570 T1=MAX(MAX(MAX(Z0,Z1),Z2),Z3) 31580 T2=MIN(MIN(MIN(X0,X1),X2),X3) 31590 T3=MAX(MAX(MAX(X0,X1),X2),X3) 31600 T4=MIN(MIN(MIN(Y0,Y1),Y2),Y3) 31610 T5=MAX(MAX(MAX(Y0,Y1),Y2),Y3) 31620 IF T0<0 OR T4<-224 OR T5>448 OR T2<-640 OR T3>1280 THEN 31630 TRIOFF 1 31640 TRIOFF 2 31650 TRIOFF 3 31660 ELSE 31670 TRIPOS 1,X0,Y0,X1,Y1,X2,Y2,T1 31680 TRIPOS 2,X0,Y0,X2,Y2,X3,Y3,T1 31690 TRIPOS 3,X0,Y0,X3,Y3,X1,Y1,T1 31700 TRIDISP 1 31710 TRIDISP 2 31720 TRIDISP 3 31730 END IF 31740 SH=1+(SH<3)*SH 31750 TRICOL3 SH,0,0,0,2^(MY*.01)*119,0,0,0,0,0,0,0,0 31760 !***** メッセージフラグ初期化 ***** 31770 MSG=0 31780 !***** ターゲットコンテナ ***** 31790 CALL TC1(1,TG-1) 31800 CALL TC2(TG) 31810 CALL TC1(TG+1,DTN) 31820 !****** レーダー ***** 31830 LINEPOS 213,RX,RY,RX1,RY1,Z91 31840 LINEPOS 214,RX,RY,RX2,RY1,Z91 31850 T4=SIN(MV) 31860 T5=COS(MV) 31870 T6=T4*2 31880 T7=T5*2 31890 T0=T6*RM 31900 T1=T7*RM 31910 T2=T4*RM 31920 T3=T5*RM 31930 FOR I=1 TO DTN1 !敵飛行 31940 T8=EZ(I)-MZ 31950 T9=EX(I)-MX 31960 X=MIN(MAX(T0*T8-T1*T9+RX,-1718),2357) 31970 Y=MIN(MAX(T3*T8+T2*T9+RY,-1926),2149) 31980 TRIPOS I+300,X-TR1(I),Y-TR2(I),X-TR3(I),Y-TR4(I),X-TR5(I),Y-TR6(I),Z94 31990 NEXT I 32000 FOR I=I TO DTN2 !巨大戦艦 32010 GETWPOS X,Y,Z,EC(I),-3000,0,-5000 32020 T8=Z-MZ 32030 T9=X-MX 32040 X1=MIN(MAX(T0*T8-T1*T9+RX,-1718),2357) 32050 Y1=MIN(MAX(T3*T8+T2*T9+RY,-1926),2149) 32060 GETWPOS X,Y,Z,EC(I),3000,0,-5000 32070 T8=Z-MZ 32080 T9=X-MX 32090 X2=MIN(MAX(T0*T8-T1*T9+RX,-1718),2357) 32100 Y2=MIN(MAX(T3*T8+T2*T9+RY,-1926),2149) 32110 GETWPOS X,Y,Z,EC(I),3000,0,5000 32120 T8=Z-MZ 32130 T9=X-MX 32140 X3=MIN(MAX(T0*T8-T1*T9+RX,-1718),2357) 32150 Y3=MIN(MAX(T3*T8+T2*T9+RY,-1926),2149) 32160 GETWPOS X,Y,Z,EC(I),-3000,0,5000 32170 T8=Z-MZ 32180 T9=X-MX 32190 X4=MIN(MAX(T0*T8-T1*T9+RX,-1718),2357) 32200 Y4=MIN(MAX(T3*T8+T2*T9+RY,-1926),2149) 32210 TRIPOS I+300,X1,Y1,X2,Y2,X3,Y3,Z92 32220 TRIPOS I+304,X3,Y3,X4,Y4,X1,Y1,Z92 32230 NEXT I 32240 FOR I=I TO DTN !敵飛行以外 32250 T8=EZ(I)-MZ 32260 T9=EX(I)-MX 32270 X=MIN(MAX(T0*T8-T1*T9+RX,-1718),2357) 32280 Y=MIN(MAX(T3*T8+T2*T9+RY,-1926),2149) 32290 TILEPOS I+300,X-2,Y-1,X+3,Y+2,Z93 32300 NEXT I 32310 !境界線 32320 X1=MAX((-48e3-MZ)*RM,-400) 32330 Y1=MAX((-48e3-MX)*RM,-400) 32340 X2=MIN((48e3-MZ)*RM,400) 32350 Y2=MIN((48e3-MX)*RM,400) 32360 T0=T4*Y1 32370 T1=T5*X1+RY 32380 T2=T6*X1+RX 32390 T3=T7*Y1 32400 T4=T4*Y2 32410 T5=T5*X2+RY 32420 T6=T6*X2+RX 32430 T7=T7*Y2 32440 LA(1)=T2-T3 32450 LB(1)=T1+T0 32460 LA(2)=T6-T3 32470 LB(2)=T5+T0 32480 LA(3)=T6-T7 32490 LB(3)=T5+T4 32500 LA(4)=T2-T7 32510 LB(4)=T1+T4 32520 LINEPOS 215,LA(1),LB(1),LA(2),LB(2),Z92 32530 LINEPOS 216,LA(2),LB(2),LA(3),LB(3),Z92 32540 LINEPOS 217,LA(3),LB(3),LA(4),LB(4),Z92 32550 LINEPOS 218,LA(4),LB(4),LA(1),LB(1),Z92 32560 !***** ポーズ中は飛ばし ***** 32570 IF PAU=0 THEN 32580 !***** 敵飛行機制御 ***** 32590 CALL ENEMY 32600 !***** 燃料チェック ***** 32610 IF FUEL>0 THEN 32620 AFB=MIN(MAX(AFB+AFD,4),11) 32630 FUEL=FUEL-AFB*1e-3 32640 T=AFB*.1 32650 MODPOS 902,0,0,T 32660 ELSE 32670 AFB,FUEL=0 32680 MODOFF 901 32690 MODOFF 902 32700 END IF 32710 !***** 白煙 ***** 32720 HE1=(HE1=0) 32730 T=HE2+701 32740 HE2=(HE2+1)*(HE2<199) 32750 IF HE1=0 THEN GETWPOS X,Y,Z,301,COX,COY,COZ ELSE GETWPOS X,Y,Z,301,-COX,COY,COZ 32760 MODPOS T,X,Y,Z 32770 MODROT T,MU,MV,RN7 32780 IF SPD>402 THEN 32790 MODOPT T,SPD*5e-4-.2,1,1,1 32800 MODDISP T 32810 ELSE 32820 MODOFF T 32830 END IF 32840 !***** 敵情報取得 ***** 32850 IF EIDED(I) THEN 32920 EDI=I 32930 EDN,EDNN=ED(I) 32940 END IF 32950 EL(I)=ANGLE(-EK(I),SQR(T)) 32960 EM(I)=ANGLE(-EK(I),-EI(I)) 32970 IF EJ(I)<>0 OR EI(I)<>0 THEN EN(I)=ANGLE(-EJ(I),-EI(I)) ELSE EN(I)=0 32980 IF ET(I)<10 THEN 32990 T=MV-EV(I) 33000 T1=-3*COS(T) 33010 T2=-1.5*SIN(T) 33020 T3=T2*4 33030 TR1(I)=-T3 33040 TR2(I)=-T1 33050 TR3(I)=T3-T1 33060 TR4(I)=T1+T2 33070 TR5(I)=T3+T1 33080 TR6(I)=T1-T2 33090 ELSEIF ET(I)=10 THEN 33100 IF BOSS=0 THEN 33110 GETSPOS X,Y,Z,1,EX(I),EY(I),EZ(I) 33120 IF Z>1167 AND X>0 AND X<640 AND Y>0 AND Y<224 THEN 33130 SEPLAY 15,255,255 33140 SEC=180 33150 BOSS=1 33160 END IF 33170 END IF 33180 END IF 33190 !***** ターゲット選択(通常) ***** 33200 IF ATC<1 THEN 33210 IF TG>0 THEN 33220 I,K=TG 33230 GETLPOS EI(I),EJ(I),EK(I),301,EX(I),EY(I),EZ(I) 33240 T=EI(I)^2+EJ(I)^2 33250 ED(I),EDN=SQR(T+EK(I)^2) 33260 IF EDNN>ED(I) THEN 33270 EDI=I 33280 EDNN=ED(I) 33290 END IF 33300 EL(I)=ANGLE(-EK(I),SQR(T)) 33310 EM(I)=ANGLE(-EK(I),-EI(I)) 33320 IF EJ(I)<>0 OR EI(I)<>0 THEN EN(I)=ANGLE(-EJ(I),-EI(I)) ELSE EN(I)=0 33330 IF TGC=0 THEN !ターゲット継続チェック 33340 FOR J=1 TO DTN 33350 IF ED(I)<8e3 THEN EXIT FOR 33360 IF IDTN THEN !ターゲット無し 33460 TG=0 33470 IF ET(K)<10 THEN 33480 TRICOL K+300,ER(K),EG(K),EB(K),128 33490 ELSEIF ET(K)=10 THEN 33500 TRICOL K+300,ER(K),EG(K),EB(K),128 33510 TRICOL K+304,ER(K),EG(K),EB(K),128 33520 ELSE 33530 TILECOL K+300,ER(K),EG(K),ER(K),128 33540 END IF 33550 ELSEIF I<>K THEN !ターゲット変更 33560 TG=I 33570 SEPLAY 1,255,255 33580 IF ET(K)<10 THEN 33590 TRICOL K+300,ER(K),EG(K),EB(K),128 33600 ELSEIF ET(K)=10 THEN 33610 TRICOL K+300,ER(K),EG(K),EB(K),128 33620 TRICOL K+304,ER(K),EG(K),EB(K),128 33630 ELSE 33640 TILECOL K+300,ER(K),EG(K),ER(K),128 33650 END IF 33660 ELSE !レーダー点滅 33670 IF ET(I)<10 THEN 33680 TRICOL I+300,ER(I),EG(I),EB(I),TGB 33690 ELSEIF ET(I)=10 THEN 33700 TRICOL I+300,ER(I),EG(I),EB(I),TGB 33710 TRICOL I+304,ER(I),EG(I),EB(I),TGB 33720 ELSE 33730 TILECOL I+300,ER(I),EG(I),ER(I),TGB 33740 END IF 33750 IF TGD<15 THEN TGD=TGD+1 ELSE TGD=0 33760 IF TGD<8 THEN TGB=128 ELSE TGB=0 33770 END IF 33780 ELSE 33790 IF ED(I)<8e3 THEN 33800 TG=I 33810 SEPLAY 3,128,128 33820 END IF 33830 END IF 33840 !***** ターゲット選択(オートチェイス) ***** 33850 ELSE 33860 IF TG>0 THEN 33870 I,K=TG 33880 T=MX-EX(I) 33890 IF ABS(T)>48e3 THEN T1=EX(I)+SGN(T)*96e3 ELSE T1=EX(I) 33900 T=MZ-EZ(I) 33910 IF ABS(T)>48e3 THEN T3=EZ(I)+SGN(T)*96e3 ELSE T3=EZ(I) 33920 GETLPOS EI(I),EJ(I),EK(I),301,T1,EY(I),T3 33930 T=EI(I)^2+EJ(I)^2 33940 ED(I),EDN=SQR(T+EK(I)^2) 33950 IF EDNN>ED(I) THEN 33960 EDI=I 33970 EDNN=ED(I) 33980 END IF 33990 EL(I)=ANGLE(-EK(I),SQR(T)) 34000 EM(I)=ANGLE(-EK(I),-EI(I)) 34010 IF EJ(I)<>0 OR EI(I)<>0 THEN EN(I)=ANGLE(-EJ(I),-EI(I)) ELSE EN(I)=0 34020 IF TGC=0 THEN !ターゲット継続チェック 34030 FOR J=1 TO DTN 34040 IF EA(I)>0 THEN EXIT FOR 34050 IF I0 THEN EXIT FOR 34120 NEXT J 34130 END IF 34140 IF J>DTN THEN !ターゲット無し 34150 TG=0 34160 IF ET(K)<10 THEN 34170 TRICOL K+300,ER(K),EG(K),EB(K),128 34180 ELSEIF ET(K)=10 THEN 34190 TRICOL K+300,ER(K),EG(K),EB(K),128 34200 TRICOL K+304,ER(K),EG(K),EB(K),128 34210 ELSE 34220 TILECOL K+300,ER(K),EG(K),ER(K),128 34230 END IF 34240 IF ALT<1500 THEN AES=1 34250 ELSEIF I<>K THEN !ターゲット変更 34260 TG=I 34270 SEPLAY 1,255,255 34280 IF ET(K)<10 THEN 34290 TRICOL K+300,ER(K),EG(K),EB(K),128 34300 ELSEIF ET(K)=10 THEN 34310 TRICOL K+300,ER(K),EG(K),EB(K),128 34320 TRICOL K+304,ER(K),EG(K),EB(K),128 34330 ELSE 34340 TILECOL K+300,ER(K),EG(K),ER(K),128 34350 END IF 34360 IF ALT<1500 THEN AES=1 34370 ELSE !レーダー点滅 34380 IF ET(I)<10 THEN 34390 TRICOL I+300,ER(I),EG(I),EB(I),TGB 34400 ELSEIF ET(I)=10 THEN 34410 TRICOL I+300,ER(I),EG(I),EB(I),TGB 34420 TRICOL I+304,ER(I),EG(I),EB(I),TGB 34430 ELSE 34440 TILECOL I+300,ER(I),EG(I),ER(I),TGB 34450 END IF 34460 IF TGD<15 THEN TGD=TGD+1 ELSE TGD=0 34470 IF TGD<8 THEN TGB=128 ELSE TGB=0 34480 END IF 34490 ELSE 34500 IF EA(ATC)>0 THEN 34510 I,TG=ATC 34520 SEPLAY 3,128,128 34530 ELSE 34540 IF ATC0 AND EL(TG)>TGA THEN 34610 T=EL(TG)*9+8 34620 T1=SIN(EN(TG)) 34630 T2=-COS(EN(TG)) 34640 T3=320+T1*40 34650 T4=112+T2*20 34660 T5=T2*8 34670 T6=T1*4 34680 TRIPOS 201,T3+T5,T4-T6,T3-T5,T4+T6,T3+T1*T*2,T4+T2*T,Z88 34690 TRICOL 201,ER(TG),EG(TG),EB(TG),96 34700 TRIDISP 201 34710 ELSE 34720 TRIOFF 201 34730 END IF 34740 !***** Velocity Vector(after 1sec) ***** 34750 GETSPOS X,Y,Z,1,MX+VX*60,MY+VY*60,MZ+VZ*60 34760 IF HUD=0 OR Z<0 OR Y<-99 OR Y>323 OR X<-99 OR X>739 THEN 34770 SPROFF 1 34780 ELSE 34790 SPRPOS 1,X-16,Y-6,Z87 34800 SPRDISP 1 34810 END IF 34820 !***** 高度計 ***** 34830 ALT=INT(-MY) 34840 IF ALT>1500 THEN 34850 T=157-ALT*.006 ! 0.006=6px/1000m 34860 TRIPOS 901,472,T-2,472,T+2,448,T,Z98 34870 ELSEIF ALT>150 THEN 34880 T=157-ALT*.06 ! 0.06=6px/100m 34890 TRIPOS 901,472,T-4,472,T+4,448,T,Z98 34900 ELSE 34910 T=157-ALT*.6 ! 0.6=6px/10m 34920 TRIPOS 901,472,T-6,472,T+6,448,T,Z98 34930 END IF 34940 IF ALT<100 OR MY+VY*300>-2 THEN MSG=2 !PULL-UP 34950 !***** 速度計 ***** 34960 IF SPD>1500 THEN 34970 T=157-SPD*.03 ! 0.03=6px/200km/h 34980 TRIPOS 902,168,T-2,168,T+2,192,T,Z98 34990 ELSE 35000 T=157-SPD*.06 ! 0.06=6px/100km/h 35010 TRIPOS 902,168,T-4,168,T+4,192,T,Z98 35020 END IF 35030 !***** 出力計 ***** 35040 T=156-AFB*8 ! 8=88/11 35050 TILEPOS 921,200,T,204,156,Z98 35060 TILEPOS 922,437,T,441,156,Z98 35070 IF BRK=0 THEN 35080 TILECOL 921,255,0,0,96 35090 TILECOL 922,255,0,0,96 35100 ELSE 35110 TILECOL 921,0,0,255,96 35120 TILECOL 922,0,0,255,96 35130 END IF 35140 !***** 当たり判定 ***** 35150 IF DMG>=MDMG THEN 35160 CALL GAMEOVER !ダメージオーバー 35170 EXIT DO 35180 END IF 35190 IF MY>-2 THEN 35200 CALL GAMEOVER !海面 35210 EXIT DO 35220 END IF 35230 MES,BES=0 35240 T=COLLISION(301,399,400) 35250 IF T=399 THEN 35260 MES=1 35270 T=COLLISION(301,MTN,MTM) 35280 IF T>0 THEN 35290 CALL GAMEOVER !山 35300 EXIT DO 35310 END IF 35320 ELSEIF T=400 THEN 35330 BES=1 35340 T=COLLISION(301,BTN,BTM) 35350 IF T>0 THEN 35360 T=T+50 35370 T=COLLISION(301,T,T) 35380 IF T>0 THEN 35390 CALL GAMEOVER !ビル 35400 EXIT DO 35410 END IF 35420 END IF 35430 END IF 35440 FOR I=DTN1+1 TO DTN2 !敵巨大戦艦 35450 IF ED(I)<5e3 THEN 35460 T=COLLISION(301,EC(I),EC(I)+9) 35470 IF T>0 THEN !衝突 35480 CALL GAMEOVER 35490 EXIT DO 35500 END IF 35510 END IF 35520 NEXT I 35530 T=COLLISION(301,EC(EDI),EC(EDI)) 35540 IF T>0 THEN !衝突 35550 IF EDI>DTN4 THEN !バルーン 35560 MODOFF T 35570 TILEOFF T-100 35580 SEPLAY 4,255,255 35590 TGN=TGN-1 35600 IF TGN=0 THEN 35610 MAD=0 35620 D(5)=MS0 35630 D(6)=MS1 35640 D(7)=MS2 35650 END IF 35660 T=T-400 35670 EA(T)=0 35680 EY(T),ED(T)=1e20 35690 EDN=24e3 35700 ELSE !その他 35710 CALL GAMEOVER 35720 EXIT DO 35730 END IF 35740 END IF 35750 !***** 警告当たり判定 ***** 35760 !IF MY+VY*300>-2 OR COLLISION(995,MTN,MTM)>0 THEN MSG=3 !CAUTION 35770 !***** PAD入力(フライトレコーダ記録)***** 35780 IF FR=0 THEN 35790 !***** PAD入力チェック ***** 35800 SELECT CASE DSW2 35810 !##### 移動系チェック ##### 35820 CASE 0 35830 DSW2=1 35840 !↓:オートチェイサーON/OFF切替 35850 T=PAD(1,4) 35860 IF T>8 AND P04<9 THEN 35870 CALL FRE(9,4) 35880 IF ATC<1 THEN 35890 IF ALT<1500 THEN AES=1 35900 ATC=ABS(ATC) 35910 TEXTCOL WHITE 35920 LOCATE 0,4 35930 PRINT "AUTO"; 35940 ELSE 35950 IF TG>0 THEN ATC=-TG ELSE ATC=-1 35960 LOCATE 0,4 35970 PRINT " "; 35980 END IF 35990 ELSE 36000 CALL FRE(0,4) 36010 END IF 36020 P04=T 36030 !***** オートチェイサーON ***** 36040 IF ATC>0 THEN 36050 IF(MES=1 AND ALT<2e3)OR(BES=1 AND ALT<500)THEN AES=1 36060 IF AES=1 THEN !低空離脱 36070 IF ALT>3e3 OR MES=0 AND ALT>1500 THEN AES=0 36080 IF MU>-.7 THEN DDX=MIN(MAX(-(MU+PI2)*COS(MW),-PI4),PI8) ELSE DDX=0 36090 DDZ=MIN(MAX(-MW,-PI4),PI4) 36100 BRK,ATP=0 36110 AFD=.2 36120 ELSEIF TG>0 THEN !通常追跡 36130 I=TG 36140 !ターゲット切替 36150 IF(EY(I)>-500 AND ED(I)<600)OR ED(I)<200 OR(ED(I)<7500 AND ET(I)=10)THEN TGC=1 36160 !ピッチ&ロール 36170 DDX=MIN(MAX(EL(I)*SGN(EJ(I))*2,-PI4),PI8) 36180 IF EL(I)>.08 THEN 36190 IF ABS(EN(I))>.01 THEN DDZ=MIN(MAX(-EN(I),-PI4),PI4) ELSE DDZ=0 36200 ELSEIF EL(I)>.04 THEN 36210 DDZ=0 36220 ELSE 36230 DDZ=MIN(MAX(-MW,-PI4),PI4) 36240 END IF 36250 !ヨー 36260 IF ABS(EM(I))>.01 THEN DDY=MIN(MAX(EM(I)*32,-PI),PI)*.25 ELSE DDY=0 36270 !エアブレーキ&スロットル 36280 IF ES(I)>300 THEN !目標が動いている場合 36290 IF ED(I)<200 THEN 36300 IF SPD>ES(I)+5 THEN 36310 BRK=1 36320 AFD=-.02 36330 ELSEIF SPDES(I)+110 THEN 36420 BRK=1 36430 AFD=-.02 36440 ELSEIF SPD800 THEN 36570 BRK=1 36580 AFD=-.02 36590 ELSEIF ED(I)>8e3 OR SPD<700 THEN 36600 BRK=0 36610 AFD=.2 36620 ELSE 36630 BRK=0 36640 AFD=-.02 36650 END IF 36660 END IF 36670 ATP=0 36680 ELSE 36690 DDX,DDY,DDZ=0 36700 ATP=1 36710 END IF 36720 !***** オートチェイサーOFF ***** 36730 ELSE 36740 !左ST上下:ピッチ 36750 T=PAD(1,13) 36760 IF T<45 THEN 36770 CALL FRE(T,13) 36780 DDX=(45-T)*DR2 36790 ELSEIF T>210 THEN 36800 CALL FRE(T,13) 36810 DDX=(210-T)*DR1 36820 ELSE 36830 CALL FRE(128,13) 36840 DDX=0 36850 END IF 36860 !L1R1:ヨー 36870 T=PAD(1,10)-PAD(1,9)+300 36880 IF T<290 THEN 36890 CALL FRE(T,9) 36900 DDY=(T-290)*DR4 36910 ELSEIF T>310 THEN 36920 CALL FRE(T,9) 36930 DDY=(T-310)*DR4 36940 ELSE 36950 CALL FRE(300,9) 36960 DDY=0 36970 END IF 36980 !左ST左右:ロール 36990 T=PAD(1,14) 37000 IF T<45 THEN 37010 CALL FRE(T,14) 37020 DDZ=(45-T)*DR1 37030 ELSEIF T>210 THEN 37040 CALL FRE(T,14) 37050 DDZ=(210-T)*DR1 37060 ELSE 37070 CALL FRE(128,14) 37080 DDZ=0 37090 END IF 37100 !L2:エアブレーキ 37110 BRK=(PAD(1,11)>8) 37120 CALL FRE(BRK,11) 37130 !R2:アフターバーナー 37140 IF PAD(1,12)>8 THEN 37150 CALL FRE(9,12) 37160 AFD=.2 37170 ELSE 37180 CALL FRE(0,12) 37190 AFD=-.02 37200 END IF 37210 !↑:オートパイロット 37220 IF DDX=0 AND DDZ=0 THEN ATP=MAX((PAD(1,3)>10),ATP) ELSE ATP=0 37230 CALL FRE(ATP,3) 37240 END IF 37250 !##### 攻撃系チェック ##### 37260 CASE ELSE 37270 DSW2=0 37280 !△:ターゲット選択 37290 T=PAD(1,5) 37300 IF T>8 AND P05<9 AND TG>0 THEN 37310 CALL FRE(9,5) 37320 TGC=1 37330 ELSE 37340 CALL FRE(0,5) 37350 END IF 37360 P05=T 37370 !○:ミサイル 37380 T=PAD(1,6) 37390 IF T>8 AND P06<9 AND MSSL>0 THEN 37400 CALL FRE(9,6) 37410 T1=VOL*30 37420 SEPLAY 8,T1,T1 37430 MSSL=MSSL-1 37440 CALL LPP(46,17,MSSL,6,2) 37450 ELSE 37460 CALL FRE(0,6) 37470 END IF 37480 P06=T 37490 !×:機銃 37500 T=PAD(1,7) 37510 IF T>8 AND(P07<9 OR P07T=0)AND GUN>0 THEN 37520 CALL FRE(9,7) 37530 T1=VOL*15 37540 SEPLAY 9,T1,T1 37550 GUN=GUN-1 37560 CALL LPP(45,16,GUN,80,3) 37570 P07T=4 37580 ELSE 37590 CALL FRE(0,7) 37600 END IF 37610 P07=T 37620 P07T=MAX(P07T-1,0) 37630 !□:特殊武器 37640 T=PAD(1,8) 37650 IF T>8 AND P08<9 AND SWEP>0 THEN 37660 CALL FRE(9,8) 37670 T1=VOL*30 37680 SEPLAY 7,T1,T1 37690 SWEP=SWEP-1 37700 CALL LPP(46,18,SWEP,3,2) 37710 ELSE 37720 CALL FRE(0,8) 37730 END IF 37740 P08=T 37750 END SELECT 37760 !***** PAD入力(フライトレコーダ再生) ***** 37770 ELSE 37780 !***** PAD入力チェック ***** 37790 SELECT CASE DSW2 37800 !##### 移動系チェック ##### 37810 CASE 0 37820 DSW2=1 37830 !↓:オートチェイサーON/OFF切替 37840 CALL FRD(T,4) 37850 IF T>8 THEN 37860 IF ATC<1 THEN 37870 IF ALT<1500 THEN AES=1 37880 ATC=ABS(ATC) 37890 TEXTCOL WHITE 37900 LOCATE 0,4 37910 PRINT "AUTO"; 37920 ELSE 37930 IF TG>0 THEN ATC=-TG ELSE ATC=-1 37940 LOCATE 0,4 37950 PRINT " "; 37960 END IF 37970 END IF 37980 !***** オートチェイサーON ***** 37990 IF ATC>0 THEN 38000 IF(MES=1 AND ALT<2e3)OR(BES=1 AND ALT<500)THEN AES=1 38010 IF AES=1 THEN !低空離脱 38020 IF ALT>3e3 OR MES=0 AND ALT>1500 THEN AES=0 38030 IF MU>-.7 THEN DDX=MIN(MAX(-(MU+PI2)*COS(MW),-PI4),PI8) ELSE DDX=0 38040 DDZ=MIN(MAX(-MW,-PI4),PI4) 38050 BRK,ATP=0 38060 AFD=.2 38070 ELSEIF TG>0 THEN !通常追跡 38080 I=TG 38090 !ターゲット切替 38100 IF(EY(I)>-500 AND ED(I)<600)OR ED(I)<200 OR(ED(I)<7500 AND ET(I)=10)THEN TGC=1 38110 !ピッチ&ロール 38120 DDX=MIN(MAX(EL(I)*SGN(EJ(I))*2,-PI4),PI8) 38130 IF EL(I)>.08 THEN 38140 IF ABS(EN(I))>.01 THEN DDZ=MIN(MAX(-EN(I),-PI4),PI4) ELSE DDZ=0 38150 ELSEIF EL(I)>.04 THEN 38160 DDZ=0 38170 ELSE 38180 DDZ=MIN(MAX(-MW,-PI4),PI4) 38190 END IF 38200 !ヨー 38210 IF ABS(EM(I))>.01 THEN DDY=MIN(MAX(EM(I)*32,-PI),PI)*.25 ELSE DDY=0 38220 !エアブレーキ&スロットル 38230 IF ES(I)>300 THEN !目標が動いている場合 38240 IF ED(I)<200 THEN 38250 IF SPD>ES(I)+5 THEN 38260 BRK=1 38270 AFD=-.02 38280 ELSEIF SPDES(I)+110 THEN 38370 BRK=1 38380 AFD=-.02 38390 ELSEIF SPD800 THEN 38520 BRK=1 38530 AFD=-.02 38540 ELSEIF ED(I)>8e3 OR SPD<700 THEN 38550 BRK=0 38560 AFD=.2 38570 ELSE 38580 BRK=0 38590 AFD=-.02 38600 END IF 38610 END IF 38620 ATP=0 38630 ELSE 38640 DDX,DDY,DDZ=0 38650 ATP=1 38660 END IF 38670 !***** オートチェイサーOFF ***** 38680 ELSE 38690 !左ST上下:ピッチ 38700 CALL FRD(T,13) 38710 IF T<45 THEN 38720 DDX=(45-T)*DR2 38730 ELSEIF T>210 THEN 38740 DDX=(210-T)*DR1 38750 ELSE 38760 DDX=0 38770 END IF 38780 !L1R1:ヨー 38790 CALL FRD(T,9) 38800 IF T<290 THEN 38810 DDY=(T-290)*DR4 38820 ELSEIF T>310 THEN 38830 DDY=(T-310)*DR4 38840 ELSE 38850 DDY=0 38860 END IF 38870 !左ST左右:ロール 38880 CALL FRD(T,14) 38890 IF T<45 THEN 38900 DDZ=(45-T)*DR1 38910 ELSEIF T>210 THEN 38920 DDZ=(210-T)*DR1 38930 ELSE 38940 DDZ=0 38950 END IF 38960 !L2:エアブレーキ 38970 CALL FRD(BRK,11) 38980 !R2:アフターバーナー 38990 CALL FRD(T,12) 39000 IF T>8 THEN AFD=.2 ELSE AFD=-.02 39010 !↑:オートパイロット 39020 CALL FRD(ATP,3) 39030 END IF 39040 !##### 攻撃系チェック ##### 39050 CASE ELSE 39060 DSW2=0 39070 !△:ターゲット選択 39080 CALL FRD(T,5) 39090 IF T>8 THEN TGC=1 39100 !○:ミサイル 39110 CALL FRD(T,6) 39120 IF T>8 THEN 39130 T1=VOL*30 39140 SEPLAY 8,T1,T1 39150 MSSL=MSSL-1 39160 CALL LPP(46,17,MSSL,6,2) 39170 END IF 39180 !×:機銃 39190 CALL FRD(T,7) 39200 IF T>8 THEN 39210 T1=VOL*15 39220 SEPLAY 9,T1,T1 39230 GUN=GUN-1 39240 CALL LPP(45,16,GUN,80,3) 39250 END IF 39260 !□:特殊武器 39270 CALL FRD(T,8) 39280 IF T>8 THEN 39290 T1=VOL*30 39300 SEPLAY 7,T1,T1 39310 SWEP=SWEP-1 39320 CALL LPP(46,18,SWEP,3,2) 39330 END IF 39340 END SELECT 39350 !***** リプレイ終了 ***** 39360 IF DP>DMX+1 THEN EXIT DO 39370 !***** カメラのリプレイ中移動 ***** 39380 T1=PAD(1,13) !上下 39390 T1=MIN(MAX(T1-210,0),T1-45)*.05 39400 T2=PAD(1,14) !左右 39410 T2=MIN(MAX(T2-210,0),T2-45)*.05 39420 T3=PAD(1,8)-PAD(1,7) !前後 39430 T3=MIN(MAX(T3-8,0),T3+8)*2e-4 39440 T4=(PAD(1,6)>8) !デフォルト 39450 IF CM=14 THEN T=CMC ELSE T=CM 39460 SELECT CASE T 39470 CASE 1 39480 IF T4>0 THEN 39490 CM1=-.087 39500 CN1=0 39510 CL1=4 39520 ELSE 39530 CM1=MIN(MAX(CM1-T1*.008,-.2),.2) 39540 CN1=MIN(MAX(CN1-T2*.008,-.2),.2) 39550 CL1=MIN(MAX(CL1+T3*.5,4),5) 39560 END IF 39570 T6=2^CL1 39580 T5=T6*COS(CM1) 39590 CI1=T5*SIN(CN1) 39600 CJ1=T6*SIN(CM1) 39610 CK1=T5*COS(CN1) 39620 CASE 2 39630 IF T4>0 THEN 39640 CM2=-.087 39650 CN2=0 39660 CL2=4.5 39670 ELSE 39680 CM2=MIN(MAX(CM2+T1*.017,-1.55),1.55) 39690 CN2=CN2-T2*.017 39700 IF ABS(CN2)>P2I THEN CN2=CN2-SGN(CN2)*P2I 39710 CL2=MIN(MAX(CL2+T3,4),11) 39720 END IF 39730 T6=2^CL2 39740 T5=T6*COS(CM2) 39750 CI2=T5*SIN(CN2) 39760 CJ2=T6*SIN(CM2) 39770 CK2=T5*COS(CN2) 39780 CASE 3 39790 IF T4>0 THEN 39800 CM3=-.087 39810 CN3=PI 39820 CL3=5 39830 ELSE 39840 CM3=MIN(MAX(CM3+T1*.017,-1.55),1.55) 39850 CN3=CN3-T2*.017 39860 IF ABS(CN3)>P2I THEN CN3=CN3-SGN(CN3)*P2I 39870 CL3=MIN(MAX(CL3+T3,4),11) 39880 END IF 39890 T6=2^CL3 39900 T5=T6*COS(CM3) 39910 CI3=T5*SIN(CN3) 39920 CJ3=T6*SIN(CM3) 39930 CK3=T5*COS(CN3) 39940 END SELECT 39950 END IF 39960 !***** 自機の物理計算 ***** 39970 CALL PHY 39980 !***** 作戦時間 ***** 39990 MS0=MS0+MAD 40000 IF MS0=FPS THEN 40010 MS0=0 40020 IF MS1<59 THEN 40030 MS1=MS1+1 40040 ELSE 40050 MS1=0 40060 MS2=MS2+1 40070 END IF 40080 END IF 40090 T=INT(MS0*F60) 40100 TEXTCOL WHITE 40110 LOCATE 35,0 40120 IF MS2<10 THEN T_$="0"+STR$(MS2)+"'" ELSE T_$=STR$(MS2)+"'" 40130 IF MS1<10 THEN T_$=T_$+"0"+STR$(MS1)+DQ$ ELSE T_$=T_$+STR$(MS1)+DQ$ 40140 IF T<10 THEN PRINT T_$+"0";T; ELSE PRINT T_$;T; 40150 !***** MESSAGE ***** 40160 IF MSG=0 THEN 40170 SPROFF MSG0+900 40180 MSG0=MSG 40190 MSG1=0 40200 ELSE 40210 IF MSG<>MSG0 THEN 40220 SPROFF MSG0+900 40230 MSG0=MSG 40240 MSG1=0 40250 END IF 40260 IF MSG1=0 THEN SEPLAY 10,32,32 !警告音 40270 IF MSG1<30 THEN SPRDISP MSG+900 ELSE SPROFF MSG+900 40280 IF MSG1<59 THEN MSG1=MSG1+1 ELSE MSG1=0 40290 END IF 40300 !***** SE PLAY ***** 40310 IF SEC<0 THEN 40320 SEC=10 40330 T=AFB*VOL 40340 SEPLAY 12,T,T 40350 ELSE 40360 SEC=SEC-FTM 40370 END IF 40380 !***** 加速度振動 **** 40390 VIBRATE 1,MIN(VIB,ACL),0,1 40400 !***** カメラ用乱数生成 ***** 40410 RN1=RND 40420 RN2=RND 40430 RN3=RND 40440 RN4=RND 40450 RN5=RND 40460 RN6=RND 40470 RN7=RND 40480 !***** ポーズ中飛ばし途中 ***** 40490 ELSE 40500 !***** カメラ調整 ***** 40510 DSW1=0 !高度表示固定 40520 T1=PAD(1,13) !上下 40530 T1=MIN(MAX(T1-210,0),T1-45)*.05 40540 T2=PAD(1,14) !左右 40550 T2=MIN(MAX(T2-210,0),T2-45)*.05 40560 T3=PAD(1,8)-PAD(1,7) !前後 40570 T3=MIN(MAX(T3-8,0),T3+8)*2e-4 40580 T4=(PAD(1,6)>8) !デフォルト 40590 IF CM=14 THEN T=CMC ELSE T=CM 40600 SELECT CASE T 40610 CASE 1 40620 IF T4>0 THEN 40630 CM1=-.087 40640 CN1=0 40650 CL1=4 40660 ELSE 40670 CM1=MIN(MAX(CM1-T1*.008,-.2),.2) 40680 CN1=MIN(MAX(CN1-T2*.008,-.2),.2) 40690 CL1=MIN(MAX(CL1+T3*.5,4),5) 40700 END IF 40710 T6=2^CL1 40720 T5=T6*COS(CM1) 40730 CI1=T5*SIN(CN1) 40740 CJ1=T6*SIN(CM1) 40750 CK1=T5*COS(CN1) 40760 CASE 2 40770 IF T4>0 THEN 40780 CM2=-.087 40790 CN2=0 40800 CL2=4.5 40810 ELSE 40820 CM2=MIN(MAX(CM2+T1*.017,-1.55),1.55) 40830 CN2=CN2-T2*.017 40840 IF ABS(CN2)>P2I THEN CN2=CN2-SGN(CN2)*P2I 40850 CL2=MIN(MAX(CL2+T3,4),11) 40860 END IF 40870 T6=2^CL2 40880 T5=T6*COS(CM2) 40890 CI2=T5*SIN(CN2) 40900 CJ2=T6*SIN(CM2) 40910 CK2=T5*COS(CN2) 40920 CASE 3 40930 IF T4>0 THEN 40940 CM3=-.087 40950 CN3=PI 40960 CL3=5 40970 ELSE 40980 CM3=MIN(MAX(CM3+T1*.017,-1.55),1.55) 40990 CN3=CN3-T2*.017 41000 IF ABS(CN3)>P2I THEN CN3=CN3-SGN(CN3)*P2I 41010 CL3=MIN(MAX(CL3+T3,4),11) 41020 END IF 41030 T6=2^CL3 41040 T5=T6*COS(CM3) 41050 CI3=T5*SIN(CN3) 41060 CJ3=T6*SIN(CM3) 41070 CK3=T5*COS(CN3) 41080 END SELECT 41090 T=PAD(1,9) 41100 IF T>8 AND P09<9 THEN VIB=MAX(VIB-36,0) 41110 P09=T 41120 T=PAD(1,10) 41130 IF T>8 AND P10<9 THEN VIB=MIN(VIB+36,72) 41140 P10=T 41150 LOCATE 19,10 41160 TEXTCOL WHITE 41170 PRINT "VIBRATION:"; 41180 IF VIB=0 THEN 41190 PRINT "切" 41200 ELSEIF VIB=36 THEN 41210 PRINT "弱" 41220 ELSE 41230 PRINT "強" 41240 END IF 41250 T=PAD(1,11) 41260 IF T>8 AND P11<9 THEN LIG=MOD(LIG-1,4) 41270 P11=T 41280 T=PAD(1,12) 41290 IF T>8 AND P12<9 THEN LIG=MOD(LIG+1,4) 41300 P12=T 41310 IF LIG<>LIG0 THEN CALL LIGHT(LIG,0) 41320 !***** 強制終了 ***** 41330 T1=QUI 41340 T=PAD(1,3) 41350 IF T>8 AND P03<9 THEN QUI=MIN(2,QUI+1) 41360 P03=T 41370 T=PAD(1,4) 41380 IF T>8 AND P04<9 THEN QUI=MAX(0,QUI-1) 41390 P04=T 41400 IF T1<>QUI THEN 41410 SELECT CASE QUI 41420 CASE 0 41430 CALL LCP(19,8,7," ") 41440 CASE 1 41450 CALL LCP(19,8,6," 最初から ") 41460 CASE 2 41470 CALL LCP(19,8,2," 中 断 ") 41480 END SELECT 41490 END IF 41500 !***** ポーズ中飛ばし終了 ***** 41510 END IF 41520 !***** 数値メーター ***** 41530 SELECT CASE DSW1 41540 CASE 0 !高度表示 41550 DSW1=1 41560 TEXTCOL WHITE 41570 LOCATE 40,11 41580 IF ALT<10 THEN 41590 PRINT "0000"; 41600 ELSEIF ALT<100 THEN 41610 PRINT "000"; 41620 ELSEIF ALT<1e3 THEN 41630 PRINT "00"; 41640 ELSEIF ALT<1e4 THEN 41650 PRINT "0"; 41660 END IF 41670 PRINT ALT; 41680 CASE 1 !速度表示 41690 DSW1=2 41700 LOCATE 6,11 41710 IF WZ>0 THEN TEXTCOL RED ELSE TEXTCOL WHITE 41720 T=INT(SPD) 41730 IF T<10 THEN 41740 PRINT "000"; 41750 ELSEIF T<100 THEN 41760 PRINT "00"; 41770 ELSEIF T<1e3 THEN 41780 PRINT "0"; 41790 END IF 41800 PRINT T; 41810 CASE ELSE !燃料表示 41820 DSW1=0 41830 CALL LPP(45,19,FUEL,50,3) 41840 END SELECT 41850 !***** L3:レーダー倍率&位置操作切替 ***** 41860 T=PAD(1,17) 41870 IF T>0 AND P17=0 THEN RS=(RS=0) 41880 P17=T 41890 !***** R3:倍率or位置デフォ ***** 41900 T=PAD(1,18) 41910 IF T>0 AND P18=0 THEN 41920 RAT=1 41930 IF RS=0 THEN 41940 !RR=-1.5 41950 !RM=EXP(RR)*.01 41960 ELSE 41970 IF RD=2 THEN 41980 RX=320 41990 RY=112 42000 ELSE 42010 RX=99 42020 RY=178 42030 END IF 42040 END IF 42050 END IF 42060 P18=T 42070 !***** 右ST:レーダー倍率or位置 ***** 42080 !***** VIEW15の時は視線変更 ***** 42090 IF CM<15 THEN 42100 IF RS=0 THEN 42110 T=PAD(1,15) 42120 T=MIN(MAX(T-210,0),T-45) 42130 IF T<>0 THEN 42140 RR=MIN(MAX(RR-T*.001,-3.5),2.3) 42150 RM=EXP(RR)*.01 42160 RAT=0 42170 END IF 42180 ELSE 42190 T1=PAD(1,16) 42200 T2=PAD(1,15) 42210 T1=MIN(MAX(T1-190,0),T1-65) 42220 T2=MIN(MAX(T2-190,0),T2-65) 42230 IF T1<>0 OR T2<>0 THEN 42240 IF RD=2 THEN 42250 RX=MIN(MAX(RX+T1*.1,0),640) 42260 RY=MIN(MAX(RY+T2*.05,0),224) 42270 ELSE 42280 RX=MIN(MAX(RX+T1*.05,36),162) 42290 RY=MIN(MAX(RY+T2*.025,146),209) 42300 END IF 42310 RAT=0 42320 END IF 42330 END IF 42340 ELSE 42350 T1=PAD(1,15) !上下 42360 T2=PAD(1,16) !左右 42370 T1=MIN(MAX(0,T1-173),T1-82)*.018 42380 T2=MIN(MAX(0,T2-173),T2-82)*.03 42390 IF T1=0 AND T2=0 THEN 42400 CUE=CUE*.2 42410 CVE=CVE*.2 42420 ELSE 42430 CUE=-T1 42440 CVE=T2 42450 END IF 42460 END IF 42470 !***** オートレーダー ***** 42480 SELECT CASE RAT 42490 CASE 1 !通常 42500 T=EDN*RM 42510 IF T<12 THEN RAT=2 42520 IF T>32 THEN RAT=3 42530 CASE 2 !拡大 42540 RR=MIN(RR+.045,2.3) 42550 RM=EXP(RR)*.01 42560 T=EDN*RM 42570 IF(EDN>EDN0 AND T>14)OR T>30 THEN RAT=1 42580 CASE 3 !縮小 42590 RR=MAX(RR-.045,-3.5) 42600 RM=EXP(RR)*.01 42610 T=EDN*RM 42620 IF(EDN0 AND P19<1 THEN 42870 RD=RD+1 42880 IF RD=1 THEN 42890 RX=99 42900 RY=178 42910 CALL RADER_ON 42920 ELSEIF RD=2 THEN 42930 RX=320 42940 RY=112 42950 CALL RADER_ON 42960 ELSE 42970 RD=0 42980 CALL RADER_OFF 42990 END IF 43000 END IF 43010 P19=T 43020 !***** START:ポーズ ***** 43030 T=PAD(1,20) 43040 IF T>0 AND P20=0 THEN 43050 DSW1=0 !高度表示固定 43060 PAU=(PAU=0) 43070 IF PAU>0 THEN 43080 CALL LCP(1,5,7,"MX=") 43090 CALL LCP2(4,5,7,5,MX) 43100 CALL LCP(1,6,7,"MY=") 43110 CALL LCP2(4,6,7,5,MY) 43120 CALL LCP(1,7,7,"MZ=") 43130 CALL LCP2(4,7,7,5,MZ) 43140 ELSE 43150 CALL LCP(1,5,7," ") 43160 CALL LCP(1,6,7," ") 43170 CALL LCP(1,7,7," ") 43180 CALL LCP(19,10,7," ") 43190 END IF 43200 T1=SPD 43210 SPD=SPD0 43220 SPD0=T1 43230 IF QUI>0 THEN EXIT DO !MISSION中断 43240 END IF 43250 P20=T 43260 !***** ←→:カメラ切替 ***** 43270 TEXTCOL WHITE 43280 T1=PAD(1,1)-PAD(1,2) 43290 T=ABS(T1) 43300 IF T>8 AND P01<9 THEN 43310 CT4,CT6,CT7,CT8,CT9,CTA,CTD,CSW=0 43320 CM=MOD(CM+SGN(T1),16) 43330 LOCATE 2,2 43340 PRINT VW$(CM+1) 43350 IF CM=14 THEN 43360 CMC=INT(RN7*14) 43370 IF CMC=0 THEN CALL HUD_ON ELSE CALL HUD_OFF 43380 ELSE 43390 IF CM=0 THEN CALL HUD_ON ELSE CALL HUD_OFF 43400 END IF 43410 LENS=512 43420 CAMLENS 1,512 43430 END IF 43440 P01=T 43450 LOCATE 2,3 43460 IF CM=14 THEN PRINT VW$(CMC+1) ELSE PRINT REPEAT$(" ",10) 43470 !***** 最初の一回だけDISPするもの ***** 43480 IF IDSP=0 THEN CALL INITDISP 43490 LOOP 43500 !***** ミッション終了処理 ***** 43510 FOR I=1 TO 10 !SE残留防止 43520 SEPLAY 1,0,0 43530 NEXT I 43540 FOR I=1 TO 128 !フェードアウト 43550 TILECOL 1000,0,0,0,I 43560 TILEDISP 1000 43570 IF I=32 THEN CLEAR 43580 FSYNC 1 43590 NEXT I 43600 IF FR=0 THEN !プレイの場合 43610 IF QUI=1 THEN !リトライの場合 43620 IF GOV=1 THEN CALL BGMSLCT(STAGE,TRAIN) 43630 FSYNC 60 43640 GOTO *RESTART 43650 ELSE !中断か終了の場合 43660 INIT 43670 TEXTMODE 2 43680 D(1),DMX=DP-1 43690 IF STAGE=4 THEN 43700 IF TGN<1 AND GOV=0 THEN CALL LANKING(1) ELSE CALL LANKING(0) 43710 END IF 43720 CALL BACKGRAD 43730 CALL BROWSE(1,LD) 43740 END IF 43750 ELSE !リプレイの場合 43760 IF QUI<2 THEN !再生終了かリトライの場合 43770 IF GOV=1 THEN CALL BGMSLCT(STAGE,TRAIN) 43780 FSYNC 60 43790 GOTO *RESTART 43800 ELSE !中断の場合 43810 INIT 43820 TEXTMODE 2 43830 IF STAGE=4 THEN CALL LANKING(0) 43840 END IF 43850 END IF 43860 INIT 43870 TEXTMODE 2 43880 CALL BGMSLCT(9,0) 43890 FSYNC 60 43900 GOTO *TOP 43910 !========================================= 43920 ! ターゲットコンテナ(通常) 43930 !========================================= 43940 SUB TC1(S,E) 43950 FOR I=S TO E 43960 T=I+100 43970 IF ED(I)<8e3 THEN 43980 GETSPOS X,Y,Z,1,EX(I),EY(I),EZ(I) 43990 IF Z>0 AND X>-8 AND X<648 AND Y>-4 AND Y<228 THEN 44000 T0=MIN(MAX(Z*6e-5,3),100) 44010 T1=T0*2 44020 T2=T0+1 44030 T3=T1+2 44040 Z=LOG(Z)*1e6 44050 TILEPOS I,X-T1,Y-T0,X+T1,Y+T0,Z+1 44060 TILEPOS T,X-T3,Y-T2,X+T3,Y+T2,Z 44070 TILECOL T,ER(I),EG(I),EB(I),128 44080 TILEDISP I 44090 TILEDISP T 44100 ELSE 44110 TILEOFF I 44120 TILEOFF T 44130 END IF 44140 ELSE 44150 TILEOFF I 44160 TILEOFF T 44170 END IF 44180 NEXT I 44190 END SUB 44200 !========================================= 44210 ! ターゲットコンテナ(TGT用) 44220 !========================================= 44230 SUB TC2(I) 44240 IF I>0 THEN 44250 T=I+100 44260 IF ED(I)<8e3 THEN 44270 IF ED(I)>2e3 OR EL(I)>TGA THEN 44280 TILECOL T,255,128,0,128 44290 TEXTCOL WHITE 44300 ELSE 44310 TILECOL T,255,0,0,TGE 44320 TEXTCOL YELLOW 44330 MSG=1 !LOCK-ON 44340 END IF 44350 GETSPOS X,Y,Z,1,EX(I),EY(I),EZ(I) 44360 IF Z>0 AND X>-8 AND X<648 AND Y>-4 AND Y<228 THEN 44370 T0=MIN(MAX(Z*6e-5,3),100) 44380 T1=T0*2 44390 T2=T0+1 44400 T3=T1+2 44410 Z=LOG(Z)*1e6 44420 TILEPOS I,X-T1,Y-T0,X+T1,Y+T0,Z+1 44430 TILEPOS T,X-T3,Y-T2,X+T3,Y+T2,Z 44440 IF TGF<7 THEN TGF=TGF+1 ELSE TGF=0 44450 IF TGF<4 THEN TGE=128 ELSE TGE=1 44460 TILEDISP I 44470 TILEDISP T 44480 LINEPOS 203,X,Y,322,178,Z-1 44490 LINEDISP 203 44500 ELSE 44510 TILEOFF I 44520 TILEOFF T 44530 LINEOFF 203 44540 IF ED(I)>2e3 OR EL(I)>TGA THEN TEXTCOL WHITE ELSE TEXTCOL YELLOW 44550 END IF 44560 LOCATE 23,18 44570 PRINT " " 44580 LOCATE 23 44590 PRINT " "; 44600 TILEPOS 202,290,168,354,188,Z98 44610 LOCATE 23,18 44620 TILEDISP 202 44630 PRINT N$(ET(I)) 44640 LOCATE 24 44650 T=INT(ED(I)) 44660 IF T<10 THEN 44670 PRINT "000"; 44680 ELSEIF T<100 THEN 44690 PRINT "00"; 44700 ELSEIF T<1e3 THEN 44710 PRINT "0"; 44720 END IF 44730 PRINT T; 44740 ELSE 44750 LOCATE 23,18 44760 PRINT " " 44770 LOCATE 23 44780 PRINT " "; 44790 TILEOFF I 44800 TILEOFF T 44810 LINEOFF 203 44820 TILEOFF 202 44830 END IF 44840 ELSE 44850 LOCATE 23,18 44860 PRINT " " 44870 LOCATE 23 44880 PRINT " "; 44890 LINEOFF 203 44900 TILEOFF 202 44910 END IF 44920 END SUB 44930 !========================================= 44940 ! コクピットビュー 44950 !========================================= 44960 SUB VIEW0 44970 CSW=CSW+1 44980 VOL=2.5 44990 !MODROT 996,MU,MV,MW 45000 !GETWPOS X,Y,Z,996,MCX,MCY,MCZ 45010 !CX=MX+X 45020 !CY=MY+Y 45030 !CZ=MZ+Z 45040 CU=MU 45050 CV=PI-MV 45060 CW=MW 45070 IF KEYCODE2<>1 THEN FSYNC FTM 45080 MODROT 301,MU,MV,MW 45090 MODPOS 301,MX,MY,MZ 45100 GETWPOS CX,CY,CZ,301,MCX,MCY,MCZ 45110 MODPOS 3,CX,0,CZ 45120 MODPOS 1,CX,CY,CZ 45130 CAMPOS 1,CX,CY,CZ 45140 CAMROT 1,CU,CV,CW 45150 MODROT 993,0,0,-MW 45160 IF ABS(MW)>PI2 THEN MODROT 994,MU,PI,0 ELSE MODROT 994,-MU,0,0 45170 T=MV*128/PI 45180 IF T<0 THEN 45190 T=240+T 45200 SPRTEX 991,11,T,176,T+96,208 45210 ELSE 45220 T=112+T 45230 SPRTEX 991,11,T,208,T+96,240 45240 END IF 45250 SPRDISP 991 45260 END SUB 45270 !========================================= 45280 ! コクピットビューその2 45290 !========================================= 45300 SUB VIEW15 45310 CSW=CSW+1 45320 VOL=2.5 45330 MODROT 997,MU,MV,MW 45340 MODROT 998,CUE,CVE,0 45350 GETWPOS X,Y,Z,998,0,0,1 45360 CU=-ANGLE(SQR(X*X+Z*Z),Y) 45370 IF X<>0 OR Z<>0 THEN CV=ANGLE(Z,X) 45380 MODROT 1000,CU,CV,0 45390 GETWPOS X_,Y_,Z_,998,0,1,0 45400 GETLPOS X,Y,Z,1000,X_,Y_,Z_ 45410 IF X<>0 OR Y<>0 THEN CW=-ANGLE(Y,X) 45420 CV=PI-CV 45430 IF KEYCODE2<>1 THEN FSYNC FTM 45440 MODROT 301,MU,MV,MW 45450 MODPOS 301,MX,MY,MZ 45460 GETWPOS CX,CY,CZ,301,MCX,MCY-.7,MCZ 45470 MODPOS 3,CX,0,CZ 45480 MODPOS 1,CX,CY,CZ 45490 CAMPOS 1,CX,CY,CZ 45500 CAMROT 1,CU,CV,CW 45510 END SUB 45520 !========================================= 45530 ! 後方視点 45540 !========================================= 45550 SUB VIEW1 45560 CSW=CSW+1 45570 T=(MX-CX)^2+(MY-CY)^2+(MZ-CZ)^2 45580 VOL=8e4/MAX(1e4,T) 45590 CU=MU 45600 CV=PI-MV 45610 CW=MW 45620 IF KEYCODE2<>1 THEN FSYNC FTM 45630 MODROT 301,MU,MV,MW 45640 MODPOS 301,MX,MY,MZ 45650 GETWPOS CX,CY,CZ,301,CI1,CJ1,CK1 45660 MODPOS 3,CX,0,CZ 45670 MODPOS 1,CX,CY,CZ 45680 CAMPOS 1,CX,CY,CZ 45690 CAMROT 1,CU+BRX,CV+BRY,CW 45700 END SUB 45710 !========================================= 45720 ! 水平追従回転視点 45730 !========================================= 45740 SUB VIEW2 45750 CSW=CSW+1 45760 T=(MX-CX)^2+(MY-CY)^2+(MZ-CZ)^2 45770 VOL=8e4/MAX(1e4,T) 45780 MODPOS 995,MX,MY,MZ 45790 MODROT 995,0,MV,0 45800 GETWPOS CX,CY,CZ,995,CI2,CJ2,CK2 45810 T1=MX-CX 45820 T2=MY-CY 45830 T3=MZ-CZ 45840 CV=-ANGLE(T3,T1) 45850 CU=ANGLE(SQR(T1^2+T3^2),T2) 45860 CW=0 45870 IF KEYCODE2<>1 THEN FSYNC FTM 45880 MODROT 301,MU,MV,MW 45890 MODPOS 301,MX,MY,MZ 45900 MODPOS 3,CX,0,CZ 45910 MODPOS 1,CX,CY,CZ 45920 CAMPOS 1,CX,CY,CZ 45930 !CAMVEC 1,MX-CX,MY-CY,MZ-CZ 45940 CAMROT 1,CU+BRX,CV+BRY,CW 45950 END SUB 45960 !========================================= 45970 ! 固定視点 45980 !========================================= 45990 SUB VIEW3 46000 CSW=CSW+1 46010 T=(MX-CX)^2+(MY-CY)^2+(MZ-CZ)^2 46020 VOL=8e4/MAX(1e4,T) 46030 CX=MX+CI3 46040 CY=MY+CJ3 46050 CZ=MZ+CK3 46060 T1=MX-CX 46070 T2=MY-CY 46080 T3=MZ-CZ 46090 CV=-ANGLE(T3,T1) 46100 CU=ANGLE(SQR(T1^2+T3^2),T2) 46110 CW=0 46120 IF KEYCODE2<>1 THEN FSYNC FTM 46130 MODROT 301,MU,MV,MW 46140 MODPOS 301,MX,MY,MZ 46150 MODPOS 3,CX,0,CZ 46160 MODPOS 1,CX,CY,CZ 46170 CAMPOS 1,CX,CY,CZ 46180 !CAMVEC 1,MX-CX,MY-CY,MZ-CZ 46190 CAMROT 1,CU+BRX,CV+BRY,CW 46200 END SUB 46210 !========================================= 46220 ! 周囲固定視点 46230 !========================================= 46240 SUB VIEW4 46250 VOL=7 46260 IF CT4<1 THEN 46270 CT4=300 46280 T1=RAD(INT(RN1*160-80)) 46290 T2=RAD(INT(RN2*360-180)) 46300 T3=24*COS(T1) 46310 CI4=T3*SIN(T2) 46320 CJ4=24*SIN(T1) 46330 CK4=T3*COS(T2) 46340 ELSE 46350 CT4=CT4-1 46360 IF CT4<1 THEN CSW=CSW+1 46370 END IF 46380 CX=MX-CI4 46390 CY=MY-CJ4 46400 CZ=MZ-CK4 46410 CV=-ANGLE(CK4,CI4) 46420 CU=ANGLE(SQR(CI4^2+CK4^2),CJ4) 46430 CW=0 46440 IF KEYCODE2<>1 THEN FSYNC FTM 46450 MODROT 301,MU,MV,MW 46460 MODPOS 301,MX,MY,MZ 46470 MODPOS 3,CX,0,CZ 46480 MODPOS 1,CX,CY,CZ 46490 CAMPOS 1,CX,CY,CZ 46500 !CAMVEC 1,MX-CX,MY-CY,MZ-CZ 46510 CAMROT 1,CU+BRX,CV+BRY,CW 46520 END SUB 46530 !========================================= 46540 ! 周囲回転視点 46550 !========================================= 46560 SUB VIEW5 46570 CSW=CSW+1 46580 CI5=CI5+2e-3 46590 IF CI5>PI THEN CI5=CI5-P2I 46600 CJ5=CJ5+3e-3 46610 IF CJ5>PI THEN CJ5=CJ5-P2I 46620 CX=MX+20*COS(CJ5) 46630 CY=MY+20*SIN(CI5) 46640 CZ=MZ+20*SIN(CJ5) 46650 T=(MX-CX)^2+(MY-CY)^2+(MZ-CZ)^2 46660 VOL=7 46670 T1=MX-CX 46680 T2=MY-CY 46690 T3=MZ-CZ 46700 CV=-ANGLE(T3,T1) 46710 CU=ANGLE(SQR(T1^2+T3^2),T2) 46720 CW=0 46730 IF KEYCODE2<>1 THEN FSYNC FTM 46740 MODROT 301,MU,MV,MW 46750 MODPOS 301,MX,MY,MZ 46760 MODPOS 3,CX,0,CZ 46770 MODPOS 1,CX,CY,CZ 46780 CAMPOS 1,CX,CY,CZ 46790 !CAMVEC 1,MX-CX,MY-CY,MZ-CZ 46800 CAMROT 1,CU+BRX,CV+BRY,CW 46810 END SUB 46820 !========================================= 46830 ! 近接固定点 46840 !========================================= 46850 SUB VIEW6 46860 VOL=8 46870 IF CT6<1 THEN 46880 CT6=300 46890 SELECT CASE CS6 46900 CASE 0 46910 CS6=1 46920 CI6=6 46930 CJ6=3 46940 CK6=24 46950 CASE 1 46960 CS6=2 46970 CI6=-6 46980 CJ6=3 46990 CK6=24 47000 CASE 2 47010 CS6=3 47020 CI6=-6 47030 CJ6=-3 47040 CK6=24 47050 CASE ELSE 47060 CS6=0 47070 CI6=6 47080 CJ6=-3 47090 CK6=24 47100 END SELECT 47110 ELSE 47120 CT6=CT6-1 47130 IF CT6<1 THEN CSW=CSW+1 47140 END IF 47150 CU=MU 47160 CV=PI-MV 47170 CW=MW 47180 IF KEYCODE2<>1 THEN FSYNC FTM 47190 MODROT 301,MU,MV,MW 47200 MODPOS 301,MX,MY,MZ 47210 GETWPOS CX,CY,CZ,301,CI6,CJ6,CK6 47220 MODPOS 3,CX,0,CZ 47230 MODPOS 1,CX,CY,CZ 47240 CAMPOS 1,CX,CY,CZ 47250 CAMROT 1,CU+BRX,CV+BRY,CW 47260 END SUB 47270 !========================================= 47280 ! サテライトカメラ 47290 !========================================= 47300 SUB VIEW7 47310 T=(MX-CX)^2+(MY-CY)^2+(MZ-CZ)^2 47320 VOL=8e4/MAX(1e4,T) 47330 IF CT7<1 THEN 47340 CT7=600 47350 CJ7=-36 47360 ELSEIF CT7<400 THEN 47370 CT7=CT7-1 47380 IF CT7<1 THEN CSW=CSW+1 47390 CJ7=CJ7-20 47400 ELSE 47410 CT7=CT7-1 47420 END IF 47430 CX=MX 47440 CY=MY+CJ7 47450 CZ=MZ 47460 CU=RAD(90) 47470 CV=0 47480 CW=0 47490 IF KEYCODE2<>1 THEN FSYNC FTM 47500 MODROT 301,MU,MV,MW 47510 MODPOS 301,MX,MY,MZ 47520 MODPOS 3,CX,0,CZ 47530 MODPOS 1,CX,CY,CZ 47540 CAMPOS 1,CX,CY,CZ 47550 !CAMVEC 1,MX-CX,MY-CY,MZ-CZ 47560 CAMROT 1,CU,CV,CW 47570 END SUB 47580 !========================================= 47590 ! フィールドビューズーム無し 47600 !========================================= 47610 SUB VIEW8 47620 T=(MX-CX)^2+(MY-CY)^2+(MZ-CZ)^2 47630 VOL=8e4/MAX(1e4,T) 47640 IF T>64e4 AND CT8>1 THEN CT8=1 47650 IF CT8<1 THEN 47660 CT8=900 47670 T=(730-ABS(DX)*6e4)*SGN(WZ) 47680 GETWPOS CX,CY,CZ,301,0,0,T 47690 CX=CX+RN1*80-40 47700 CY=MIN(CY+RN2*80-40,-5) 47710 CZ=CZ+RN3*80-40 47720 ELSE 47730 CT8=CT8-1 47740 IF CT8<1 THEN CSW=CSW+1 47750 END IF 47760 T1=MX-CX 47770 T2=MY-CY 47780 T3=MZ-CZ 47790 CV=-ANGLE(T3,T1) 47800 CU=ANGLE(SQR(T1^2+T3^2),T2) 47810 CW=0 47820 IF KEYCODE2<>1 THEN FSYNC FTM 47830 MODROT 301,MU,MV,MW 47840 MODPOS 301,MX,MY,MZ 47850 MODPOS 3,CX,0,CZ 47860 MODPOS 1,CX,CY,CZ 47870 CAMPOS 1,CX,CY,CZ 47880 !CAMVEC 1,MX-CX,MY-CY,MZ-CZ 47890 CAMROT 1,CU+BRX,CV+BRY,CW 47900 END SUB 47910 !========================================= 47920 ! フィールドビューズーム有り 47930 !========================================= 47940 SUB VIEW9 47950 T=(MX-CX)^2+(MY-CY)^2+(MZ-CZ)^2 47960 VOL=8e4/MAX(1e4,T) 47970 IF T>2e7 AND CT9>1 THEN CT9=1 47980 IF CT9<1 THEN 47990 CT9=900 48000 T1=(3e3-ABS(DX)*16e4)*SGN(WZ) 48010 GETWPOS CX,CY,CZ,301,0,0,T1 48020 CX=CX+RN1*2e3-1e3 48030 CY=MIN(CY+RN2*2e3-1e3,-5) 48040 CZ=CZ+RN3*2e3-1e3 48050 LENS=0 48060 ELSE 48070 CT9=CT9-1 48080 IF CT9<1 THEN CSW=CSW+1 48090 END IF 48100 T1=MX-CX 48110 T2=MY-CY 48120 T3=MZ-CZ 48130 CV=-ANGLE(T3,T1) 48140 CU=ANGLE(SQR(T1^2+T3^2),T2) 48150 CW=0 48160 IF KEYCODE2<>1 THEN FSYNC FTM 48170 MODROT 301,MU,MV,MW 48180 MODPOS 301,MX,MY,MZ 48190 MODPOS 3,CX,0,CZ 48200 MODPOS 1,CX,CY,CZ 48210 CAMPOS 1,CX,CY,CZ 48220 !CAMVEC 1,MX-CX,MY-CY,MZ-CZ 48230 CAMROT 1,CU+BRX,CV+BRY,CW 48240 CALL ZOOM(SQR(T)) 48250 END SUB 48260 !========================================= 48270 ! ランデブーカメラ 48280 !========================================= 48290 SUB VIEW10 48300 IF CTA<1 THEN 48310 CTA=1200 48320 CXA=SGN(RN1-.5)*10 48330 CZA=SGN(RN2-.5)*10 48340 CIA=RN3*500-250 48350 CJA=RN4*500-250 48360 CKA=RN5*500-250 48370 T=2/CTA 48380 CUA=-CIA*T 48390 CVA=-CJA*T 48400 CWA=-CKA*T 48410 ELSE 48420 CTA=CTA-1 48430 IF CTA<1 THEN CSW=CSW+1 48440 CIA=CIA+CUA 48450 CJA=CJA+CVA 48460 CKA=CKA+CWA 48470 END IF 48480 CX=MX+CIA+CXA 48490 CY=MIN(MY+CJA,-5) 48500 CZ=MZ+CKA+CZA 48510 T=(MX-CX)^2+(MY-CY)^2+(MZ-CZ)^2 48520 VOL=8e4/MAX(1e4,T) 48530 T1=MX-CX 48540 T2=MY-CY 48550 T3=MZ-CZ 48560 CV=-ANGLE(T3,T1) 48570 CU=ANGLE(SQR(T1^2+T3^2),T2) 48580 CW=0 48590 IF KEYCODE2<>1 THEN FSYNC FTM 48600 MODROT 301,MU,MV,MW 48610 MODPOS 301,MX,MY,MZ 48620 MODPOS 3,CX,0,CZ 48630 MODPOS 1,CX,CY,CZ 48640 CAMPOS 1,CX,CY,CZ 48650 !CAMVEC 1,MX-CX,MY-CY,MZ-CZ 48660 CAMROT 1,CU+BRX,CV+BRY,CW 48670 END SUB 48680 !========================================= 48690 ! スプリングチェイスカメラ 48700 !========================================= 48710 SUB VIEW11 48720 CSW=CSW+1 48730 T=(MX-CX)^2+(MY-CY)^2+(MZ-CZ)^2 48740 VOL=8e4/MAX(1e4,T) 48750 IF T>4e6 OR CAB=0 OR CBB=0 THEN 48760 CX=MX+RN1*200-100 48770 CY=MY+RN2*200-100 48780 CZ=MZ+RN3*200-100 48790 CUB=VX+RN4-.5 48800 CVB=VY+RN5-.5 48810 CWB=VZ+RN6-.5 48820 END IF 48830 CAB=(MX-CX)*17e-5 48840 CBB=(MY-CY)*19e-5 48850 CCB=(MZ-CZ)*23e-5 48860 T1=ABS(VX)*1.1+.4 48870 T2=ABS(VY)*1.1+.4 48880 T3=ABS(VZ)*1.1+.4 48890 CUB=MIN(MAX(CUB+CAB,-T1),T1) 48900 CVB=MIN(MAX(CVB+CBB,-T2),T2) 48910 CWB=MIN(MAX(CWB+CCB,-T3),T3) 48920 CX=CX+CUB 48930 CY=MIN(CY+CVB,-5) 48940 CZ=CZ+CWB 48950 T1=MX-CX 48960 T2=MY-CY 48970 T3=MZ-CZ 48980 CV=-ANGLE(T3,T1) 48990 CU=ANGLE(SQR(T1^2+T3^2),T2) 49000 CW=0 49010 IF KEYCODE2<>1 THEN FSYNC FTM 49020 MODROT 301,MU,MV,MW 49030 MODPOS 301,MX,MY,MZ 49040 MODPOS 3,CX,0,CZ 49050 MODPOS 1,CX,CY,CZ 49060 CAMPOS 1,CX,CY,CZ 49070 !CAMVEC 1,MX-CX,MY-CY,MZ-CZ 49080 CAMROT 1,CU+BRX,CV+BRY,CW 49090 END SUB 49100 !========================================= 49110 ! チェイスカメラ 49120 !========================================= 49130 SUB VIEW12 49140 CSW=CSW+1 49150 T0=SPD*.25 49160 GETWPOS T1,T2,T3,301,5*SGN(CVC),5*SGN(CUC),-T0 49170 T1=T1-CX 49180 T2=T2-CY 49190 T3=T3-CZ 49200 T4=T1^2+T3^2 49210 T=T2^2+T4 49220 CRX=ANGLE(SQR(T4),-T2) 49230 CRY=ANGLE(T3,T1) 49240 CRX=CRX-CUC 49250 !IF ABS(CRX)>PI THEN CRX=CRX-P2I*SGN(CRX) 49260 CPC=CPC*.9+CRX*1e-3 49270 CUC=CUC+CPC 49280 !IF ABS(CUC)>PI THEN CUC=CUC-P2I*SGN(CUC) 49290 CRY=CRY-CVC 49300 IF ABS(CRY)>PI THEN CRY=CRY-P2I*SGN(CRY) 49310 CQC=CQC*.9+CRY*1e-3 49320 CVC=CVC+CQC 49330 IF ABS(CVC)>PI THEN CVC=CVC-P2I*SGN(CVC) 49340 T=SQR(T)-T0-25 49350 T1=CSC*216 49360 IF T1-T*.5SPD OR ABS(CRY)>PI2 THEN 49390 CSC=MAX(CSC-.02,0) 49400 END IF 49410 T=CSC*COS(CUC) 49420 CX=CX+T*SIN(CVC) 49430 CY=MIN(CY-CSC*SIN(CUC),-5) 49440 CZ=CZ+T*COS(CVC) 49450 T=(MX-CX)^2+(MY-CY)^2+(MZ-CZ)^2 49460 VOL=8e4/MAX(1e4,T) 49470 T1=MX-CX 49480 T2=MY-CY 49490 T3=MZ-CZ 49500 CV=-ANGLE(T3,T1) 49510 CU=ANGLE(SQR(T1^2+T3^2),T2) 49520 CW=0 49530 IF KEYCODE2<>1 THEN FSYNC FTM 49540 MODROT 301,MU,MV,MW 49550 MODPOS 301,MX,MY,MZ 49560 MODPOS 3,CX,0,CZ 49570 MODPOS 1,CX,CY,CZ 49580 CAMPOS 1,CX,CY,CZ 49590 !CAMVEC 1,MX-CX,MY-CY,MZ-CZ 49600 CAMROT 1,CU+BRX,CV+BRY,CW 49610 END SUB 49620 !========================================= 49630 ! ターゲットビュー 49640 !========================================= 49650 SUB VIEW13 49660 IF CTD<1 THEN 49670 CTD=600 49680 IF TG>0 AND ED(TG)<8e3 THEN 49690 CGD=TG 49700 SELECT CASE ET(TG) 49710 CASE 8,9 49720 CRD=-80 49730 CASE 10 49740 CRD=-8000 49750 CASE 13,14 49760 CRD=-220 49770 CASE ELSE 49780 CRD=-30 49790 END SELECT 49800 LENS=512 49810 CAMLENS 1,512 49820 ELSE 49830 CGD=0 49840 GETWPOS CX,CY,CZ,301,0,0,-2e3 49850 CX=CX+RN1*500-250 49860 CY=MIN(CY+RN2*500-250,-5) 49870 CZ=CZ+RN3*500-250 49880 END IF 49890 END IF 49900 IF CGD>0 THEN 49910 T5=EX(CGD) 49920 T6=EY(CGD) 49930 T7=EZ(CGD) 49940 T1=MX-T5 49950 T2=MY-T6 49960 T3=MZ-T7 49970 CRY=-ANGLE(T3,T1) 49980 CRX=ANGLE(SQR(T1^2+T3^2),T2) 49990 CRX=CRX-CUD 50000 CRY=CRY-CVD 50010 IF ABS(CRY)>PI THEN CRY=CRY-P2I*SGN(CRY) 50020 CRX=MIN(MAX(0,CRX-.35),CRX+.35) 50030 CRY=MIN(MAX(0,CRY-.35),CRY+.35) 50040 CUD=CUD+CRX*.01 50050 CVD=CVD+CRY*.01 50060 T4=CRD*COS(CUD) 50070 CID=-T4*SIN(CVD) 50080 CJD=CRD*SIN(CUD) 50090 CKD=T4*COS(CVD) 50100 CX=T5+CID 50110 CY=T6+CJD 50120 IF CY>-4 THEN 50130 CY=-4 50140 CUD=MAX(CUD,0) 50150 END IF 50160 CZ=T7+CKD 50170 VOL=5 50180 CV=CVD 50190 CU=CUD 50200 CW=0 50210 IF CGD<>TG THEN CTD=CTD-1 50220 IF CTD<1 THEN CSW=CSW+1 50230 ELSE 50240 CTD=CTD-1 50250 IF CTD<1 THEN CSW=CSW+1 50260 T=(MX-CX)^2+(MY-CY)^2+(MZ-CZ)^2 50270 VOL=8e4/MAX(1e4,T) 50280 T1=MX-CX 50290 T2=MY-CY 50300 T3=MZ-CZ 50310 CV=-ANGLE(T3,T1) 50320 CU=ANGLE(SQR(T1^2+T3^2),T2) 50330 CW=0 50340 END IF 50350 IF KEYCODE2<>1 THEN FSYNC FTM 50360 MODROT 301,MU,MV,MW 50370 MODPOS 301,MX,MY,MZ 50380 MODPOS 3,CX,0,CZ 50390 MODPOS 1,CX,CY,CZ 50400 CAMPOS 1,CX,CY,CZ 50410 !CAMVEC 1,MX-CX,MY-CY,MZ-CZ 50420 CAMROT 1,CU+BRX,CV+BRY,CW 50430 IF CGD=0 THEN CALL ZOOM(SQR(T)) 50440 END SUB 50450 !========================================= 50460 ! ランダムビュー 50470 !========================================= 50480 SUB VIEW14 50490 SELECT CASE CMC 50500 CASE 13 !ターゲットビュー 50510 CALL VIEW13 50520 IF CSW>0 THEN 50530 CSW,CTD=0 50540 CMC=INT(RN7*7) 50550 IF CMC=0 THEN CALL HUD_ON 50560 LENS=512 50570 CAMLENS 1,512 50580 END IF 50590 CASE 12 !チェイスカメラ 50600 CALL VIEW12 50610 IF CSW>1200 THEN 50620 CSW=0 50630 CMC=INT(RN7*7) 50640 IF CMC=0 THEN CALL HUD_ON 50650 END IF 50660 CASE 11 !スプリングチェイスカメラ 50670 CALL VIEW11 50680 IF CSW>1200 THEN 50690 CSW=0 50700 CMC=INT(RN7*7) 50710 IF CMC=0 THEN CALL HUD_ON 50720 END IF 50730 CASE 10 !ランデブーカメラ 50740 CALL VIEW10 50750 IF CSW>0 THEN 50760 CSW,CTA=0 50770 CMC=INT(RN7*7) 50780 IF CMC=0 THEN CALL HUD_ON 50790 END IF 50800 CASE 9 !フィールドビューズーム有り 50810 CALL VIEW9 50820 IF CSW>1 THEN 50830 CSW,CT9=0 50840 CMC=INT(RN7*7) 50850 IF CMC=0 THEN CALL HUD_ON 50860 LENS=512 50870 CAMLENS 1,512 50880 END IF 50890 CASE 8 !フィールドビューズーム無し 50900 CALL VIEW8 50910 IF CSW>1 THEN 50920 CSW,CT8=0 50930 CMC=INT(RN7*7) 50940 IF CMC=0 THEN CALL HUD_ON 50950 END IF 50960 CASE 7 !サテライトカメラ 50970 CALL VIEW7 50980 IF CSW>0 THEN 50990 CSW,CT7=0 51000 CMC=INT(RN7*7) 51010 IF CMC=0 THEN CALL HUD_ON 51020 END IF 51030 CASE 6 !近接固定点 51040 CALL VIEW6 51050 IF CSW>1 THEN 51060 CSW,CT6=0 51070 CMC=INT(RN7*7)+7 51080 END IF 51090 CASE 5 !周囲回転視点 51100 CALL VIEW5 51110 IF CSW>1200 THEN 51120 CSW=0 51130 CMC=INT(RN7*7)+7 51140 END IF 51150 CASE 4 !周囲固定視点 51160 CALL VIEW4 51170 IF CSW>1 THEN 51180 CSW,CT4=0 51190 CMC=INT(RN7*7)+7 51200 END IF 51210 CASE 3 !固定視点 51220 CALL VIEW3 51230 IF CSW>600 THEN 51240 CSW=0 51250 CMC=INT(RN7*7)+7 51260 END IF 51270 CASE 2 !水平追従回転視点 51280 CALL VIEW2 51290 IF CSW>600 THEN 51300 CSW=0 51310 CMC=INT(RN7*7)+7 51320 END IF 51330 CASE 1 !後方視点 51340 CALL VIEW1 51350 IF CSW>600 THEN 51360 CSW=0 51370 CMC=INT(RN7*7)+7 51380 END IF 51390 CASE ELSE !コクピットビュー 51400 CALL VIEW0 51410 IF CSW>600 THEN 51420 CSW=0 51430 CMC=INT(RN7*7)+7 51440 CALL HUD_OFF 51450 END IF 51460 END SELECT 51470 END SUB 51480 !========================================= 51490 ! ズーム制御 51500 !========================================= 51510 SUB ZOOM(D) 51520 IF D>1024 THEN 51530 T1=325 51540 !ELSEIF D>512 THEN 51550 ! T1=300 51560 ELSEIF D>256 THEN 51570 T1=275 51580 !ELSEIF D>128 THEN 51590 ! T1=250 51600 ELSE 51610 T1=225 51620 END IF 51630 LENX=MIN(MAX(LENX+SGN(T1-LENX),225),325) 51640 LENS=2^(LENX*.04) 51650 CAMLENS 1,LENS 51660 END SUB 51670 !========================================= 51680 ! 最初の一回描画 51690 !========================================= 51700 SUB INITDISP 51710 IDSP=1 51720 IF CM=0 OR(CM=12 AND CMC=0)THEN CALL HUD_ON ELSE CALL HUD_OFF 51730 IF RD>0 THEN CALL RADER_ON 51740 TILECOL 1000,0,0,0,0 51750 !***** パラメータ表示 ***** 51760 CALL LPP(45,16,GUN,80,3) 51770 CALL LPP(46,17,MSSL,6,2) 51780 CALL LPP(46,18,SWEP,3,2) 51790 CALL LPP(45,19,FUEL,50,3) 51800 CALL LPR(44,20,DMG,MDMG) 51810 !***** TIME表示 ***** 51820 TEXTCOL WHITE 51830 LOCATE 33,0 51840 PRINT "T:" 51850 IF STAGE=4 THEN 51860 LOCATE 33 51870 PRINT "R:"+TRAIN$(TRAIN,2) 51880 LOCATE 33 51890 PRINT "F:"+LANK$(TRAIN,1,2) 51900 END IF 51910 !***** カメラモード表示 ***** 51920 LOCATE 0,2 51930 PRINT "V:"+VW$(CM+1) 51940 END SUB 51950 !========================================= 51960 ! HUD表示 51970 !========================================= 51980 SUB HUD_ON 51990 HUD=1 52000 TILEDISP 1000 52010 !枠線 52020 FOR I=923 TO 930 52030 TILEDISP I 52040 NEXT I 52050 !目盛り 52060 FOR I=901 TO 932 52070 LINEDISP I 52080 NEXT I 52090 !水平線 52100 LINEDISP 933 52110 LINEDISP 934 52120 !ミサイルレンジ 52130 FOR I=935 TO 952 52140 LINEDISP I 52150 NEXT I 52160 !出力計 52170 TILEDISP 921 52180 TILEDISP 922 52190 !高度計 速度計 52200 TRIDISP 901 52210 TRIDISP 902 52220 !wマークとVVマーク 52230 SPRDISP 1 52240 SPRDISP 2 52250 !方位計&ピッチインジケータ 52260 !SPRDISP 991 52270 MODDISP 993 52280 MODDISP 994 52290 END SUB 52300 !========================================= 52310 ! HUD非表示 52320 !========================================= 52330 SUB HUD_OFF 52340 HUD=0 52350 !方位計&ピッチインジケータ 52360 MODOFF 994 52370 MODOFF 993 52380 SPROFF 991 52390 !ターゲットロケータ 52400 TRIOFF 201 52410 !wマークとVVマーク 52420 SPROFF 1 52430 SPROFF 2 52440 !速度計 高度計 52450 TRIOFF 901 52460 TRIOFF 902 52470 !出力計 52480 TILEOFF 921 52490 TILEOFF 922 52500 !ミサイルレンジ 52510 FOR I=935 TO 952 52520 LINEOFF I 52530 NEXT I 52540 !水平線 52550 LINEOFF 933 52560 LINEOFF 934 52570 !目盛り 52580 FOR I=901 TO 932 52590 LINEOFF I 52600 NEXT I 52610 !枠線 52620 FOR I=923 TO 930 52630 TILEOFF I 52640 NEXT I 52650 TILEOFF 1000 52660 END SUB 52670 !========================================= 52680 ! レーダー表示 52690 !========================================= 52700 SUB RADER_ON 52710 IF RD=1 THEN 52720 TILEDISP 204 52730 TILEDISP 208 52740 TILEDISP 209 52750 TILEDISP 210 52760 TILEDISP 211 52770 TILEDISP 212 52780 ELSE 52790 TILEOFF 204 52800 TILEOFF 208 52810 TILEOFF 209 52820 TILEOFF 210 52830 TILEOFF 211 52840 TILEOFF 212 52850 END IF 52860 FOR I=1 TO DTN1 52870 IF EA(I)>0 THEN TRIDISP I+300 52880 NEXT I 52890 FOR I=I TO DTN2 52900 IF EA(I)>0 THEN 52910 TRIDISP I+300 52920 TRIDISP I+304 52930 END IF 52940 NEXT I 52950 FOR I=I TO DTN 52960 IF EA(I)>0 THEN TILEDISP I+300 52970 NEXT I 52980 LINEDISP 213 52990 LINEDISP 214 53000 LINEDISP 215 53010 LINEDISP 216 53020 LINEDISP 217 53030 LINEDISP 218 53040 END SUB 53050 !========================================= 53060 ! レーダー非表示 53070 !========================================= 53080 SUB RADER_OFF 53090 FOR I=1 TO DTN1 53100 TRIOFF I+300 53110 NEXT I 53120 FOR I=I TO DTN2 53130 TRIOFF I+300 53140 TRIOFF I+304 53150 NEXT I 53160 FOR I=I TO DTN 53170 TILEOFF I+300 53180 NEXT I 53190 LINEOFF 213 53200 LINEOFF 214 53210 LINEOFF 215 53220 LINEOFF 216 53230 LINEOFF 217 53240 LINEOFF 218 53250 END SUB 53260 !========================================= 53270 ! 敵機の移動処理 53280 !========================================= 53290 SUB ENEMY 53300 EPP=EPP+.53-(EPP>P2I)*P2I 53310 !***** プロペラ機 ***** 53320 FOR I=1 TO DTN0 53330 SELECT CASE EA(I) 53340 CASE 1 !直進 53350 IF RND<.001 THEN EA(I)=INT(RND*10+1) 53360 IF EU(I)<0 THEN EU(I)=MIN(EU(I)+EO(I),0) ELSE EU(I)=MAX(EU(I)-EP(I),0) 53370 EW(I)=SGN(EW(I))*MAX(ABS(EW(I))-EQ(I),0) 53380 CASE 2 !上昇 53390 IF RND<.002 THEN EA(I)=INT(RND*10+1) 53400 IF EY(I)<-5e3 THEN EA(I)=1 53410 EU(I)=MAX(EU(I)-EP(I),-.3) 53420 EW(I)=SGN(EW(I))*MAX(ABS(EW(I))-EQ(I),0) 53430 CASE 3 !下降 53440 IF RND<.002 THEN EA(I)=INT(RND*10+1) 53450 IF EY(I)>-3e3 THEN EA(I)=1 53460 EU(I)=MIN(EU(I)+EO(I),.3) 53470 EW(I)=SGN(EW(I))*MAX(ABS(EW(I))-EQ(I),0) 53480 CASE 4 !左旋回 53490 IF RND<.002 THEN EA(I)=INT(RND*10+1) 53500 IF EU(I)<0 THEN EU(I)=MIN(EU(I)+EO(I),0) ELSE EU(I)=MAX(EU(I)-EP(I),0) 53510 EW(I)=MIN(EW(I)+EQ(I),.7) 53520 EV(I)=EV(I)-EP(I) 53530 IF EV(I)<-PI THEN EV(I)=EV(I)+P2I 53540 CASE 5 !右旋回 53550 IF RND<.002 THEN EA(I)=INT(RND*10+1) 53560 IF EU(I)<0 THEN EU(I)=MIN(EU(I)+EO(I),0) ELSE EU(I)=MAX(EU(I)-EP(I),0) 53570 EW(I)=MAX(EW(I)-EQ(I),-.7) 53580 EV(I)=EV(I)+EP(I) 53590 IF EV(I)>PI THEN EV(I)=EV(I)-P2I 53600 CASE IS>5 !直進 53610 IF RND<.001 THEN EA(I)=INT(RND*10+1) 53620 IF EU(I)<0 THEN EU(I)=MIN(EU(I)+EO(I),0) ELSE EU(I)=MAX(EU(I)-EP(I),0) 53630 EW(I)=SGN(EW(I))*MAX(ABS(EW(I))-EQ(I),0) 53640 END SELECT 53650 T=EVZ(I)*COS(EU(I)) 53660 EX(I)=EX(I)-T*SIN(EV(I)) 53670 EY(I)=EY(I)+EVZ(I)*SIN(EU(I)) 53680 EZ(I)=EZ(I)-T*COS(EV(I)) 53690 IF ABS(EX(I))>48e3 THEN EX(I)=EX(I)-96e3*SGN(EX(I)) 53700 IF ABS(EZ(I))>48e3 THEN EZ(I)=EZ(I)-96e3*SGN(EZ(I)) 53710 MODROT EC(I),EU(I),EV(I),EW(I) 53720 MODPOS EC(I),EX(I),EY(I),EZ(I) 53730 MODROT EC(I)+100,0,0,EPP 53740 MODROT EC(I)+105,0,0,-EPP 53750 MODROT EC(I)+110,0,0,EPP 53760 MODROT EC(I)+115,0,0,-EPP 53770 NEXT I 53780 !***** 戦闘機 ***** 53790 FOR I=I TO DTN1 53800 SELECT CASE EA(I) 53810 CASE 1 !直進 53820 IF RND<.001 THEN EA(I)=INT(RND*5+1) 53830 IF EU(I)<0 THEN EU(I)=MIN(EU(I)+EO(I),0) ELSE EU(I)=MAX(EU(I)-EP(I),0) 53840 EW(I)=SGN(EW(I))*MAX(ABS(EW(I))-EQ(I),0) 53850 CASE 2 !上昇 53860 IF RND<.002 THEN EA(I)=INT(RND*5+1) 53870 IF EY(I)<-7e3 THEN EA(I)=1 53880 EU(I)=MAX(EU(I)-EP(I),-.7) 53890 EW(I)=SGN(EW(I))*MAX(ABS(EW(I))-EQ(I),0) 53900 CASE 3 !下降 53910 IF RND<.002 THEN EA(I)=INT(RND*5+1) 53920 IF EY(I)>-3e3 THEN EA(I)=1 53930 EU(I)=MIN(EU(I)+EO(I),.7) 53940 EW(I)=SGN(EW(I))*MAX(ABS(EW(I))-EQ(I),0) 53950 CASE 4 !左旋回 53960 IF RND<.002 THEN EA(I)=INT(RND*5+1) 53970 IF EU(I)<0 THEN EU(I)=MIN(EU(I)+EO(I),0) ELSE EU(I)=MAX(EU(I)-EP(I),0) 53980 EW(I)=MIN(EW(I)+EQ(I),1.5) 53990 EV(I)=EV(I)-EP(I) 54000 IF EV(I)<-PI THEN EV(I)=EV(I)+P2I 54010 CASE 5 !右旋回 54020 IF RND<.002 THEN EA(I)=INT(RND*5+1) 54030 IF EU(I)<0 THEN EU(I)=MIN(EU(I)+EO(I),0) ELSE EU(I)=MAX(EU(I)-EP(I),0) 54040 EW(I)=MAX(EW(I)-EQ(I),-1.5) 54050 EV(I)=EV(I)+EP(I) 54060 IF EV(I)>PI THEN EV(I)=EV(I)-P2I 54070 CASE IS>5 !直進 54080 IF RND<.001 THEN EA(I)=INT(RND*5+1) 54090 IF EU(I)<0 THEN EU(I)=MIN(EU(I)+EO(I),0) ELSE EU(I)=MAX(EU(I)-EP(I),0) 54100 EW(I)=SGN(EW(I))*MAX(ABS(EW(I))-EQ(I),0) 54110 END SELECT 54120 T=EVZ(I)*COS(EU(I)) 54130 EX(I)=EX(I)-T*SIN(EV(I)) 54140 EY(I)=EY(I)+EVZ(I)*SIN(EU(I)) 54150 EZ(I)=EZ(I)-T*COS(EV(I)) 54160 IF ABS(EX(I))>48e3 THEN EX(I)=EX(I)-96e3*SGN(EX(I)) 54170 IF ABS(EZ(I))>48e3 THEN EZ(I)=EZ(I)-96e3*SGN(EZ(I)) 54180 MODROT EC(I),EU(I),EV(I),EW(I) 54190 MODPOS EC(I),EX(I),EY(I),EZ(I) 54200 NEXT I 54210 !***** 巨大戦艦 ***** 54220 FOR I=I TO DTN2 54230 SELECT CASE EA(I) 54240 CASE 1 !直進 54250 IF RND<.001 THEN EA(I)=INT(RND*5+1) 54260 IF EU(I)<0 THEN EU(I)=MIN(EU(I)+EO(I),0) ELSE EU(I)=MAX(EU(I)-EP(I),0) 54270 EW(I)=SGN(EW(I))*MAX(ABS(EW(I))-EQ(I),0) 54280 CASE 2 !上昇 54290 IF RND<.001 THEN EA(I)=INT(RND*5+1) 54300 IF EY(I)<-8e3 THEN EA(I)=1 54310 EU(I)=MAX(EU(I)-EP(I),-.3) 54320 EW(I)=SGN(EW(I))*MAX(ABS(EW(I))-EQ(I),0) 54330 CASE 3 !下降 54340 IF RND<.001 THEN EA(I)=INT(RND*5+1) 54350 IF EY(I)>-4e3 THEN EA(I)=1 54360 EU(I)=MIN(EU(I)+EO(I),.3) 54370 EW(I)=SGN(EW(I))*MAX(ABS(EW(I))-EQ(I),0) 54380 CASE 4 !左旋回 54390 IF RND<.001 THEN EA(I)=INT(RND*5+1) 54400 IF EU(I)<0 THEN EU(I)=MIN(EU(I)+EO(I),0) ELSE EU(I)=MAX(EU(I)-EP(I),0) 54410 EW(I)=MIN(EW(I)+EQ(I),.4) 54420 EV(I)=EV(I)-EP(I) 54430 IF EV(I)<-PI THEN EV(I)=EV(I)+P2I 54440 CASE 5 !右旋回 54450 IF RND<.001 THEN EA(I)=INT(RND*5+1) 54460 IF EU(I)<0 THEN EU(I)=MIN(EU(I)+EO(I),0) ELSE EU(I)=MAX(EU(I)-EP(I),0) 54470 EW(I)=MAX(EW(I)-EQ(I),-.4) 54480 EV(I)=EV(I)+EP(I) 54490 IF EV(I)>PI THEN EV(I)=EV(I)-P2I 54500 CASE IS>5 !直進 54510 IF RND<.001 THEN EA(I)=INT(RND*5+1) 54520 IF EU(I)<0 THEN EU(I)=MIN(EU(I)+EO(I),0) ELSE EU(I)=MAX(EU(I)-EP(I),0) 54530 EW(I)=SGN(EW(I))*MAX(ABS(EW(I))-EQ(I),0) 54540 END SELECT 54550 T=EVZ(I)*COS(EU(I)) 54560 EX(I)=EX(I)-T*SIN(EV(I)) 54570 EY(I)=EY(I)+EVZ(I)*SIN(EU(I)) 54580 EZ(I)=EZ(I)-T*COS(EV(I)) 54590 IF ABS(EX(I))>48e3 THEN EX(I)=EX(I)-96e3*SGN(EX(I)) 54600 IF ABS(EZ(I))>48e3 THEN EZ(I)=EZ(I)-96e3*SGN(EZ(I)) 54610 MODROT EC(I),EU(I),EV(I),EW(I) 54620 MODPOS EC(I),EX(I),EY(I),EZ(I) 54630 NEXT I 54640 END SUB 54650 !========================================= 54660 ! 自機に関する物理計算 54670 !========================================= 54680 SUB PHY 54690 !***** 気圧係数 ***** 54700 T=EXP(10*MY/(MY+9e4)) 54710 !***** XYZ速度成分ベクトル ***** 54720 MODROT 996,MU,MV,MW 54730 GETLPOS X,Y,Z,996,VX,VY,VZ 54740 X0=ANGLE(-Z,Y) 54750 Y0=ANGLE(-Z,X) 54760 T1=ABS(X) 54770 T2=ABS(Y) 54780 T3=ABS(Z) 54790 X2=T1*X 54800 Y2=T2*Y 54810 Z2=T3*Z 54820 WX=SQR(T2+T3) 54830 WY=SQR(T1+T3) 54840 WZ=SGN(Z)*SQR(T3) 54850 !***** 加速度計算 ***** 54860 PB=T*QL*Z2 !揚力 54870 T1=SGN(PB)*MIN(ABS(PB),PG) !揚力制御 54880 T1=T1*(1+(MY>-15)) !表面効果 54890 T3=PG+T1 !ストール発生チェック(IS>0) 54900 T2=(1-BRK)*QJ*AFB*MIN(MY*1e-4+2,1) !推進力 54910 T2=MIN(T2,-1e-9) !推進力は0にしない(0除算回避用) 54920 PX=T*QX*X2 !空気抵抗X 54930 PY=T*QY*Y2 !空気抵抗Y 54940 PZ=T*QZ*Z2*(1+BRK*3) !空気抵抗Z 54950 GETWPOS AX,AY,AZ,996,PX,T1+PY,T2+PZ 54960 BOUT=(T1+PY)*3000 54970 BOUT=MIN(MAX(0,BOUT-64),BOUT+64) 54980 BOUT=MIN(MAX(BOUT,-127),127) 54990 AY=AY+PG*MAX(-MY*.01-119,1) 55000 !***** 速度計算 ***** 55010 VX=VX+AX 55020 VY=VY+AY 55030 VZ=VZ+AZ 55040 MX=MX+VX 55050 MY=MY+VY 55060 MZ=MZ+VZ 55070 !***** 位置ループ ***** 55080 IF ABS(MX)>48e3 THEN 55090 T1=96e3*SGN(MX) 55100 CX=CX-T1 55110 MX=MX-T1 55120 END IF 55130 IF ABS(MZ)>48e3 THEN 55140 T1=96e3*SGN(MZ) 55150 CZ=CZ-T1 55160 MZ=MZ-T1 55170 END IF 55180 T4=VX^2+VZ^2 55190 T5=SQR(T4+VY^2) 55200 SPD=T5*216 !速度 55210 ACL=SQR(AX^2+AY^2+AZ^2)*5e3 !加速度 55220 !IF MAXAC0 THEN 55310 IF ABS(MU)>1e-4 OR ABS(DX)>1e-4 THEN DDX=MIN(MAX(MU*8*COS(MW)*SGN(Z),-PI4),PI8) ELSE MU,DX=0 55320 IF ABS(MW)>1e-4 OR ABS(DZ)>1e-4 THEN DDZ=MIN(MAX(MW*4*SGN(Z),-PI4),PI4) ELSE MW,DZ=0 55330 END IF 55340 !***** 回転量計算 ***** 55350 DX=DX*.85+T*QU*WX*(SIN(DDX-X0)+SIN(X0)) 55360 DY=DY*.8+T*QV*WY*(SIN(DDY-Y0)+SIN(Y0)) 55370 DZ=DZ*.9-T*QW*WZ*SIN(DDZ) 55380 !***** シンバルロック回避回転 ***** 55390 MODROT 997,MU,MV,MW+DZ 55400 MODROT 998,DX,0,0 55410 MODROT 999,0,DY,0 55420 GETWPOS X,Y,Z,999,0,0,1 55430 MU=-ANGLE(SQR(X*X+Z*Z),Y) 55440 IF X<>0 OR Z<>0 THEN MV=ANGLE(Z,X) 55450 MODROT 1000,MU,MV,0 55460 GETWPOS X_,Y_,Z_,999,0,1,0 55470 GETLPOS X,Y,Z,1000,X_,Y_,Z_ 55480 IF X<>0 OR Y<>0 THEN MW=-ANGLE(Y,X) 55490 !***** ストール ***** 55500 T=(PI2-MU)*(T3*.01+MAX(WZ,0)*1e-3) 55510 STL=STL*.95+T 55520 MU=MU+STL 55530 IF T>0 THEN MSG=4 !STALL 55540 END SUB 55550 !========================================= 55560 ! デモ機に関する物理計算 55570 !========================================= 55580 SUB PHYD 55590 T=EXP(10*EY(N)/(EY(N)+9e5)) !気圧係数 55600 MODROT 996,EU(N),EV(N),EW(N) 55610 GETLPOS X,Y,Z,996,EVX(N),EVY(N),EVZ(N) !LOCAL VECTOR 55620 X0=ANGLE(-Z,Y) 55630 Y0=ANGLE(-Z,X) 55640 T1=ABS(X) 55650 T2=ABS(Y) 55660 T3=ABS(Z) 55670 X2=T1*X 55680 Y2=T2*Y 55690 Z2=T3*Z 55700 WX=SQR(T2+T3) 55710 WY=SQR(T1+T3) 55720 WZ=SGN(Z)*SQR(T3) 55730 !***** 加速度計算 ***** 55740 PB=T*QL*Z2 !揚力 55750 T1=SGN(PB)*MIN(ABS(PB),PG) !揚力制御 55760 T2=(1-BRK)*QJ*EAF(N) !推進力 55770 T2=MIN(T2,-1e-9) !推進力は0にしない(0除算回避用) 55780 PX=T*QX*X2 !空気抵抗X 55790 PY=T*QY*Y2 !空気抵抗Y 55800 PZ=T*QZ*Z2*(1+BRK*4) !空気抵抗Z 55810 GETWPOS AX,AY,AZ,996,PX,T1+PY,T2+PZ 55820 AY=AY+PG 55830 !***** 速度計算 ***** 55840 EVX(N)=EVX(N)+AX 55850 EVY(N)=EVY(N)+AY 55860 EVZ(N)=EVZ(N)+AZ 55870 EX(N)=EX(N)+EVX(N)*10 55880 EY(N)=EY(N)+EVY(N)*10 55890 EZ(N)=EZ(N)+EVZ(N)*10 55900 ES(N)=SQR(EVX(N)^2+EVY(N)^2+EVZ(N)^2)*216 55910 !***** 回転量計算 ***** 55920 EO(N)=EO(N)*.85+T*QU*WX*(SIN(DDX-X0)+SIN(X0)) 55930 EP(N)=EP(N)*.8+T*QV*WY*(SIN(DDY-Y0)+SIN(Y0)) 55940 EQ(N)=EQ(N)*.9-T*QW*WZ*SIN(DDZ) 55950 !***** シンバルロック回避回転 ***** 55960 MODROT 997,EU(N),EV(N),EW(N)+EQ(N) 55970 MODROT 998,EO(N),0,0 55980 MODROT 999,0,EP(N),0 55990 GETWPOS X,Y,Z,999,0,0,1 56000 EU(N)=-ANGLE(SQR(X*X+Z*Z),Y) 56010 IF X<>0 OR Z<>0 THEN EV(N)=ANGLE(Z,X) 56020 MODROT 1000,EU(N),EV(N),0 56030 GETWPOS X_,Y_,Z_,999,0,1,0 56040 GETLPOS X,Y,Z,1000,X_,Y_,Z_ 56050 IF X<>0 OR Y<>0 THEN EW(N)=-ANGLE(Y,X) 56060 END SUB 56070 !========================================= 56080 ! 物理計算パラメータ計算 56090 !========================================= 56100 SUB PRMCALC 56110 PG=9.8/3600 !重力係数 56120 ATP,STL=0 56130 AFB=11 56140 BRK=0 56150 DX,DY,DZ,DDX,DDY,DDZ=0 56160 MU,MW,MX,MZ,VX,VY=0 56170 MV=PI 56180 MY=-10000 56190 VZ=MAXSP/216 !最高速度 56200 QX=1 !空気抵抗係数X 56210 QY=1 !空気抵抗係数Y 56220 QZ=1 !空気抵抗係数Z 56230 QL=-1 !揚力係数 56240 QJ=-1 !出力(ジェット)係数 56250 CALL PHY 56260 QJ=PG/T2*MAXPOW !出力(ジェット)係数 56270 QZ=QJ*T2/PZ !空気抵抗係数Z 56280 QX=QZ*400 !空気抵抗係数X 56290 QY=QZ*8000 !空気抵抗係数Y 56300 DX,DY,DZ,DDX,DDY,DDZ=0 56310 MU,MW,MX,MZ,VX,VY=0 56320 MV=PI 56330 MY=-100 56340 VZ=MINSP/216 !失速限界速度 56350 CALL PHY 56360 QL=PG/PB !揚力係数 56370 END SUB 56380 !========================================= 56390 ! GAME OVER 56400 !========================================= 56410 SUB GAMEOVER 56420 GOV=1 56430 CALL BGMSLCT(-1,0) 56440 VIBRATE 1,VIB*3,SGN(VIB),0.5 56450 LENS=512 56460 CAMLENS 1,512 56470 CLEAR 56480 FOR I=1 TO 1000 56490 LINEOFF I 56500 TILEOFF I 56510 TRIOFF I 56520 SPROFF I 56530 NEXT I 56540 FOR I=701 TO 1000 56550 MODOFF I 56560 NEXT I 56570 FOR I=1 TO 20 56580 TEMP(I)=RND*0.3+0.01 56590 MODSET 550+I,5,9 56600 MODPOS 550+I,MX+RND*10-7,MY+RND*2-1,MZ+RND*14-7 56610 MODROT 550+I,RND,RND,RND 56620 MODDISP 550+I 56630 NEXT I 56640 FOR I=0 TO 540 56650 FOR J=1 TO 20 56660 TEMP(J)=TEMP(J)+0.01 56670 IF TEMP(J)>0.3 THEN 56680 TEMP(J)=0.05 56690 MODPOS 550+J,MX+RND*10-7,MY+RND*2-1,MZ+RND*14-7 56700 MODROT 550+J,RND,RND,RND 56710 END IF 56720 MODOPT 550+J,TEMP(J),0,0,1 56730 NEXT J 56740 IF MOD(I,20)=0 AND I<360 THEN 56750 SEPLAY 11,RND*(721-I)/4,RND*(721-I)/4 56760 END IF 56770 X=MX+20*COS(RAD(I)) 56780 Z=MZ+20*SIN(RAD(I)) 56790 Y=MY-20 56800 CAMPOS 1,X,Y,Z 56810 CAMVEC 1,MX-X,MY-Y,MZ-Z 56820 FSYNC 1 56830 IF PAD(1,6)>32 OR PAD(1,7)>32 THEN EXIT FOR 56840 NEXT I 56850 VIBRATE 1,0,0,1 56860 SEPLAY 6,255,255 56870 CALL SFONT(801,176,80,32,16,Z99,23,15,1,"GAME OVER",1) 56880 FSYNC 120 56890 DO 56900 FSYNC 1 56910 LOOP WHILE PAD(1,6)>32 56920 !***** 終了選択 ***** 56930 IF FR=0 THEN 56940 QUI=1 56950 TILEPOS 999,232,124,400,169,Z99 56960 TILECOL 999,0,0,0,64 56970 TILEDISP 999 56980 DO 56990 IF PAD(1,3)>8 THEN QUI=1 57000 IF PAD(1,4)>8 THEN QUI=2 57010 CALL LCP(19,14,(QUI=1)*7," 最初から ") 57020 CALL LCP(19,16,(QUI=2)*7," 終 了 ") 57030 LOOP UNTIL PAD(1,6)>32 OR PAD(1,20)>0 57040 ELSE 57050 FSYNC 180 57060 END IF 57070 TILEDISP 1000 57080 END SUB 57090 !========================================= 57100 ! ミッション選択時デモフライト 57110 !========================================= 57120 SUB DEMOFLY 57130 VOL=0 57140 HE1=(HE1=0) 57150 FOR N=1 TO DTN 57160 !***** 白煙 ***** 57170 T=HE2+701 57180 HE2=(HE2+1)*(HE2<199) 57190 IF HE1=0 THEN GETWPOS X,Y,Z,N+400,64,0,60 ELSE GETWPOS X,Y,Z,N+400,-64,0,60 57200 MODPOS T,X,Y,Z 57210 MODROT T,EU(N),EV(N),RND 57220 IF ES(N)>402 THEN 57230 MODOPT T,ES(N)*5e-3-2,1,1,1 57240 MODDISP T 57250 ELSE 57260 MODOFF T 57270 END IF 57280 !***** 追跡目標情報取得 ***** 57290 K=N+1 57300 GETLPOS EI(K),EJ(K),EK(K),N+400,EX(K),EY(K),EZ(K) 57310 T=EI(K)^2+EJ(K)^2 57320 ED(K)=SQR(T+EK(K)^2)*.1 57330 EL(K)=ANGLE(-EK(K),SQR(T)) 57340 EM(K)=ANGLE(-EK(K),-EI(K)) 57350 IF EJ(K)<>0 OR EI(K)<>0 THEN EN(K)=ANGLE(-EJ(K),-EI(K)) ELSE EN(K)=0 57360 !***** オートチェイサー ***** 57370 IF EY(N)+8*ES(N)*SIN(EU(N))>-900 THEN 57380 IF EU(N)>-.7 THEN DDX=MIN(MAX(-(EU(N)+PI2)*COS(EW(N)),-PI4),PI8) ELSE DDX=0 57390 DDZ=MIN(MAX(-EW(N),-PI4),PI4) 57400 IF EU(N)<0 THEN 57410 BRK=0 57420 AFD=.2 57430 ELSE 57440 BRK=1 57450 AFD=-.02 57460 END IF 57470 ELSE !通常追跡 57480 I=N+1 57490 !ピッチ&ロール 57500 DDX=MIN(MAX(EL(I)*SGN(EJ(I))*2,-PI4),PI8) 57510 IF EL(I)>.08 THEN 57520 IF ABS(EN(I))>.01 THEN DDZ=MIN(MAX(-EN(I),-PI4),PI4) ELSE DDZ=0 57530 ELSEIF EL(I)>.04 THEN 57540 DDZ=0 57550 ELSE 57560 DDZ=MIN(MAX(-EW(N),-PI4),PI4) 57570 END IF 57580 !ヨー 57590 IF ABS(EM(I))>.01 THEN DDY=MIN(MAX(EM(I)*32,-PI),PI)*.25 ELSE DDY=0 57600 !エアブレーキ&スロットル 57610 IF ES(I)>0 THEN !目標が動いている場合 57620 IF ED(I)<200 THEN 57630 IF ES(N)>ES(I)+5 THEN 57640 BRK=1 57650 AFD=-.02 57660 ELSEIF ES(N)ES(I)+210 THEN 57750 BRK=1 57760 AFD=-.02 57770 ELSEIF ES(N)800 THEN 57900 BRK=1 57910 AFD=-.02 57920 ELSEIF ED(I)>8e3 OR ES(N)<800 THEN 57930 BRK=0 57940 AFD=.2 57950 ELSE 57960 BRK=0 57970 AFD=-.02 57980 END IF 57990 END IF 58000 END IF 58010 !***** デモ機の物理計算 ***** 58020 CALL PHYD 58030 EAF(N)=MIN(MAX(EAF(N)+AFD,4),11) 58040 !***** アフターバーナー ***** 58050 IF BRK=0 THEN T=EAF(N)*.9 ELSE T=EAF(N)*.4 58060 I=N*4 58070 MODPOS 498+I,0,0,T 58080 MODPOS 499+I,0,0,T 58090 MODPOS 500+I,0,0,T 58100 !***** SE PLAY ***** 58110 T=EAF(N)/(EX(N)^2+EY(N)^2+EZ(N)^2) 58120 VOL=MAX(T,VOL) 58130 !***** POSITIONING ***** 58140 MODPOS N+400,EX(N),EY(N),EZ(N) 58150 MODROT N+400,EU(N),EV(N),EW(N) 58160 NEXT N 58170 !***** SE PLAY ***** 58180 IF SEC<0 THEN 58190 SEC=2 58200 T=MIN(VOL*1e8,96) 58210 SEPLAY 12,T,T 58220 ELSE 58230 SEC=SEC-FTM 58240 END IF 58250 END SUB 58260 !========================================= 58270 ! フライトレコーダエンコード 58280 !========================================= 58290 SUB FRE(A,I) 58300 IF DP>DSZ THEN EXIT SUB 58310 IF V(I)=A THEN 58320 IF C(I)=0 THEN 58330 C(I)=1 58340 P(I)=DP 58350 D(DP)=0 58360 DP=DP+1 58370 END IF 58380 D(P(I))=D(P(I))-1 58390 ELSE 58400 C(I)=0 58410 D(DP),V(I)=A 58420 DP=DP+1 58430 END IF 58440 END SUB 58450 !========================================= 58460 ! フライトレコーダデコード 58470 !========================================= 58480 SUB FRD(A,I) 58490 IF C(I)<0 THEN 58500 C(I)=C(I)+1 58510 A=V(I) 58520 ELSE 58530 A=D(DP) 58540 DP=DP+1 58550 IF A<0 THEN 58560 C(I)=A+1 58570 A=V(I) 58580 ELSE 58590 V(I)=A 58600 END IF 58610 END IF 58620 END SUB 58630 !========================================= 58640 ! 数値データ→文字列データ変換 58650 !========================================= 58660 SUB V2S(V(),S$(),L) 58670 A,B=1 58680 FOR K=1 TO DSZC 58690 S$(K)="" 58700 NEXT K 58710 FOR K=1 TO L 58720 X=V(K) 58730 IF X<0 THEN 58740 X=ABS(X) 58750 IF X<32 THEN 58760 Y=1 58770 O$(1)=CHR$(X+192) 58780 ELSEIF X<3072 THEN 58790 Y=2 58800 O$(2)=CHR$(MOD(X,32)+192) 58810 X=INT(X/32) 58820 O$(1)=CHR$(X+32) 58830 ELSEIF X<294912 THEN 58840 Y=3 58850 O$(3)=CHR$(MOD(X,32)+192) 58860 X=INT(X/32) 58870 O$(2)=CHR$(MOD(X,96)+32) 58880 X=INT(X/96) 58890 O$(1)=CHR$(X+32) 58900 ELSE 58910 Y=4 58920 O$(4)=CHR$(MOD(X,32)+192) 58930 X=INT(X/32) 58940 O$(3)=CHR$(MOD(X,96)+32) 58950 X=INT(X/96) 58960 O$(2)=CHR$(MOD(X,96)+32) 58970 X=INT(X/96) 58980 O$(1)=CHR$(X+32) 58990 END IF 59000 ELSE 59010 IF X<32 THEN 59020 Y=1 59030 O$(1)=CHR$(X+160) 59040 ELSEIF X<3072 THEN 59050 Y=2 59060 O$(2)=CHR$(MOD(X,32)+160) 59070 X=INT(X/32) 59080 O$(1)=CHR$(X+32) 59090 ELSEIF X<294912 THEN 59100 Y=3 59110 O$(3)=CHR$(MOD(X,32)+160) 59120 X=INT(X/32) 59130 O$(2)=CHR$(MOD(X,96)+32) 59140 X=INT(X/96) 59150 O$(1)=CHR$(X+32) 59160 ELSE 59170 Y=4 59180 O$(4)=CHR$(MOD(X,32)+160) 59190 X=INT(X/32) 59200 O$(3)=CHR$(MOD(X,96)+32) 59210 X=INT(X/96) 59220 O$(2)=CHR$(MOD(X,96)+32) 59230 X=INT(X/96) 59240 O$(1)=CHR$(X+32) 59250 END IF 59260 END IF 59270 FOR J=1 TO Y 59280 S$(A)=S$(A)+O$(J) 59290 IF B=512 THEN 59300 A=A+1 59310 B=1 59320 ELSE 59330 B=B+1 59340 END IF 59350 NEXT J 59360 NEXT K 59370 END SUB 59380 !========================================= 59390 ! 文字列データ→数値データ変換 59400 !========================================= 59410 SUB S2V(S$(),V(),K) 59420 A,B,K=1 59430 Y=0 59440 DO 59450 X=ORD(S$(A)(B:B)) 59460 IF B=512 THEN 59470 A=A+1 59480 B=1 59490 ELSE 59500 B=B+1 59510 END IF 59520 IF X<32 THEN EXIT DO 59530 IF X<128 THEN 59540 Y=X-32+Y*96 59550 ELSEIF X<192 THEN 59560 V(K)=X-160+Y*32 59570 K=K+1 59580 Y=0 59590 ELSE 59600 V(K)=192-X-Y*32 59610 K=K+1 59620 Y=0 59630 END IF 59640 LOOP 59650 K=K-1 59660 END SUB 59670 !========================================= 59680 ! フライトレコードチェック 59690 !========================================= 59700 SUB FR_CHECK(R) 59710 IF DMX<>D(1) THEN !データレングス 59720 R=1 59730 EXIT SUB 59740 END IF 59750 SUM=D(2) !チェックサム 59760 !D(3) !乱数シード 59770 STAGE=D(4) !ミッション番号 59780 !D(5)-D(7) !ミッションクリアタイム 59790 TRAIN=D(8) !トレーニング番号 59800 MYID=D(9) !機体番号 59810 !D(10)-D(98) !予備 59820 !D(100)- !フライトレコード 59830 T=0 59840 FOR I=3 TO DMX 59850 T=MOD(T+ABS(D(I)),2097152) 59860 NEXT I 59870 IF T=SUM THEN R=0 ELSE R=1 59880 END SUB 59890 !========================================= 59900 ! フライトレコーダセーブ 59910 !========================================= 59920 SUB FR_SAVE(FN$) 59930 T=0 59940 FOR I=3 TO DMX 59950 T=MOD(T+ABS(D(I)),2097152) 59960 NEXT I 59970 D(2)=T !チェックサム 59980 CALL V2S(D,D$,DMX) 59990 VARSAVE FN$,D$ 60000 END SUB 60010 !========================================= 60020 ! INITを使わないマスク付クリア 60030 !========================================= 60040 SUB MASKCLEAR 60050 CLEAR 60060 TEXTCOL WHITE 60070 TILEPOS 1000,0,0,640,224,16777200 60080 TILECOL 1000,0,0,0,128 60090 TILEDISP 1000 60100 FSYNC 1 60110 SCREEN SINGLE 60120 EFFECT 0,0,0,0,0,0 60130 BGCOL 0,0,0 60140 FOR T=1 TO 1000 60150 LINEOFF T 60160 TRIOFF T 60170 SPROFF T 60180 MODOFF T 60190 MODJOIN T,0 60200 MODPOS T,0,0,0 60210 MODROT T,0,0,0 60220 MODOPT T,1,1,1,1 60230 NEXT T 60240 FOR T=1 TO 999 60250 TILEOFF T 60260 NEXT T 60270 LENS=512 60280 CAMLENS 1,512 60290 CAMLENS 2,512 60300 END SUB 60310 !========================================= 60320 ! 画面ストリング読み取り 60330 !========================================= 60340 SUB SCRSTR(R$,X1,X2,Y) 60350 R$="" 60360 FOR X=X1 TO X2 STEP SGN(X2-X1)+(X1=X2) 60370 R$=R$+SCRCHR$(X,Y) 60380 NEXT X 60390 END SUB 60400 !========================================= 60410 ! 拡張INKEY$ 60420 !========================================= 60430 SUB INKEYX(INK,INK$) 60440 INK$=INKEY$ 60450 IF INK$="" OR INK$<>INK0$ THEN 60460 INKT=0 60470 ELSE 60480 INKT=INKT+1 60490 END IF 60500 INK0$=INK$ 60510 IF INKT>30 THEN INKT=27 60520 IF INKT>0 AND INKT<30 THEN INK$="" 60530 INK=ORD(INK$) 60540 END SUB 60550 !========================================= 60560 ! 拡張PRINT 60570 !========================================= 60580 SUB LCP(X,Y,C,P$) 60590 SELECT CASE C 60600 CASE 7 60610 TEXTCOL WHITE 60620 CASE 6 60630 TEXTCOL YELLOW 60640 CASE 5 60650 TEXTCOL CYAN 60660 CASE 4 60670 TEXTCOL GREEN 60680 CASE 3 60690 TEXTCOL PURPLE 60700 CASE 2 60710 TEXTCOL RED 60720 CASE 1 60730 TEXTCOL BLUE 60740 CASE 0 60750 TEXTCOL BLACK 60760 END SELECT 60770 LOCATE X,Y 60780 PRINT P$; 60790 END SUB 60800 !========================================= 60810 ! 拡張PRINT2 60820 !========================================= 60830 SUB LCP2(X,Y,C,A,S) 60840 SELECT CASE C 60850 CASE 7 60860 TEXTCOL WHITE 60870 CASE 6 60880 TEXTCOL YELLOW 60890 CASE 5 60900 TEXTCOL CYAN 60910 CASE 4 60920 TEXTCOL GREEN 60930 CASE 3 60940 TEXTCOL PURPLE 60950 CASE 2 60960 TEXTCOL RED 60970 CASE 1 60980 TEXTCOL BLUE 60990 CASE 0 61000 TEXTCOL BLACK 61010 END SELECT 61020 LOCATE X,Y 61030 K=INT(S+.5) 61040 IF K<0 THEN PRINT "-"; ELSE PRINT "+"; 61050 K=ABS(K) 61060 PRINT REPEAT$("0",A-LEN(STR$(K)));K; 61070 END SUB 61080 !========================================= 61090 ! パラメータPRINT 61100 !========================================= 61110 SUB LPP(X,Y,S,M,C) 61120 K=INT(S+1)-1 61130 LOCATE X,Y 61140 IF S>M THEN 61150 TEXTCOL WHITE 61160 ELSEIF S<1 THEN 61170 TEXTCOL RED 61180 ELSE 61190 TEXTCOL YELLOW 61200 END IF 61210 PRINT REPEAT$("0",C-LEN(STR$(K)));K; 61220 END SUB 61230 !========================================= 61240 ! パラメータPRINT(%) 61250 !========================================= 61260 SUB LPR(X,Y,S,M) 61270 K=INT(S/M*100) 61280 LOCATE X,Y 61290 IF K<80 THEN 61300 TEXTCOL WHITE 61310 ELSEIF S=100 THEN 61320 TEXTCOL RED 61330 ELSE 61340 TEXTCOL YELLOW 61350 END IF 61360 T_$=STR$(K)+"%" 61370 PRINT REPEAT$("0",4-LEN(T_$))+T_$; 61380 END SUB 61390 !========================================= 61400 ! スプライト文字描画 61410 !========================================= 61420 SUB SFONT(N,X,Y,XS,YS,Z,PP,PN,AL,S$,C) 61430 FOR I_=1 TO LEN(S$) 61440 X_=ORD(S$(I_:I_))-32 61450 Y_=INT(X_/32)*18 61460 X_=MOD(X_,32)*13 61470 SPRTEX N,11,X_,Y_,X_+12,Y_+17 61480 SPRPOS2 N,X+(I_-1)*XS,Y,X+I_*XS,Y+YS,Z 61490 SPRPAL N,PP,PN,AL 61500 SPRDISP N 61510 N=N+1 61520 NEXT I_ 61530 IF C>0 THEN 61540 FOR I_=N TO 1000 61550 SPROFF I_ 61560 NEXT I_ 61570 END IF 61580 END SUB 61590 !========================================= 61600 ! FILE NAME CHECK 61610 !========================================= 61620 SUB FNCHK(R,S$) 61630 IF LEN(S$)=0 THEN R=1 ELSE R=0 61640 FN_D$="" 61650 FN_N$=S$ 61660 A=0 61670 FOR I=1 TO LEN(S$) 61680 IF S$(I:I)="/" THEN 61690 IF A=0 THEN 61700 FN_D$=S$(1:I-1) 61710 FN_N$=S$(I+1:LEN(S$)) 61720 A=1 61730 ELSE 61740 R=1 61750 EXIT FOR 61760 END IF 61770 END IF 61780 NEXT I 61790 IF LEN(FN_D$)>8 THEN R=1 61800 IF LEN(FN_N$)>8 THEN R=1 61810 END SUB 61820 !========================================= 61830 ! アナログパッド関連の設定 61840 !========================================= 61850 SUB PAD_SETTING 61860 LABEL PAD_SETTING 61870 RESTORE *PAD_SETTING 61880 OPTION BASE 1 61890 DIM PADX(2,20,5) 61900 DIM PADON(2) 61910 !----- オートリピート設定値 -------------- 61920 AUTO_S=20 ! オートリピート開始までの待ち 61930 AUTO_E=21 ! オートリピート周期+AUTO_S 61940 !----- 遊び幅設定値 ---------------------- 61950 DATA 8, 8, 8, 8 ! 方向ボタン 61960 DATA 8, 8, 8, 8 ! 右ボタン 61970 DATA 8, 8, 8, 8 ! 肩ボタン 61980 DATA 96,96,96,96 ! スティック傾け 61990 DATA 0, 0, 0, 0 ! デジタルボタン 62000 !----- 押下判定のしきい値設定 ------------ 62010 FOR I=1 TO 2 62020 FOR J=1 TO 20 62030 PADX(I,J,1)=PAD(I,J) 62040 NEXT J 62050 NEXT I 62060 FOR J=1 TO 20 62070 READ K 62080 FOR I=1 TO 2 62090 PADX(I,J,4)=PADX(I,J,1)-K/2 62100 PADX(I,J,5)=PADX(I,J,1)+K/2 62110 NEXT I 62120 NEXT J 62130 END SUB 62140 !========================================= 62150 ! 拡張型PAD入力参照処理 62160 !========================================= 62170 SUB PADX(B) 62180 PADON(1),PADON(2)=0 62190 FOR J=1 TO 2 62200 IF J=B OR B=3 THEN 62210 FOR I=1 TO 20 62220 A,PADX(J,I,1)=PAD(J,I) 62230 IF A>PADX(J,I,5) THEN 62240 PADON(J)=1 62250 A=MAX(PADX(J,I,3)+1,0) 62260 IF A>AUTO_E THEN A=AUTO_S 62270 PADX(J,I,3)=A 62280 IF A=1 OR A=AUTO_S THEN 62290 PADX(J,I,2)=1 62300 ELSE 62310 PADX(J,I,2)=2 62320 END IF 62330 ELSEIF AAUTO_E THEN A=AUTO_S 62370 PADX(J,I,3)=A 62380 IF A=1 OR A=AUTO_S THEN 62390 PADX(J,I,2)=-1 62400 ELSE 62410 PADX(J,I,2)=-2 62420 END IF 62430 ELSE 62440 PADX(J,I,2),PADX(J,I,3)=0 62450 END IF 62460 NEXT I 62470 END IF 62480 A=MAX(MAX(PADX(J,1,3),PADX(J,2,3)),MAX(PADX(J,3,3),PADX(J,4,3))) 62490 PADX(J,1,3),PADX(J,2,3),PADX(J,3,3),PADX(J,4,3)=A 62500 A=MAX(PADX(J,13,3),PADX(J,14,3)) 62510 PADX(J,13,3),PADX(J,14,3)=A 62520 A=MAX(PADX(J,15,3),PADX(J,16,3)) 62530 PADX(J,15,3),PADX(J,16,3)=A 62540 NEXT J 62550 END SUB 62560 !========================================= 62570 ! 拡張型PAD入力参照処理(軽量型) 62580 !========================================= 62590 SUB PADXL 62600 FOR I=3 TO 7 62610 SELECT CASE I 62620 CASE 3,4,6,7 62630 A,PADX(1,I,1)=PAD(1,I) 62640 IF A>PADX(1,I,5) THEN 62650 A=MAX(PADX(1,I,3)+1,0) 62660 IF A>AUTO_E THEN A=AUTO_S 62670 PADX(1,I,3)=A 62680 IF A=1 OR A=AUTO_S THEN 62690 PADX(1,I,2)=1 62700 ELSE 62710 PADX(1,I,2)=2 62720 END IF 62730 ELSE 62740 PADX(1,I,2),PADX(1,I,3)=0 62750 END IF 62760 END SELECT 62770 NEXT I 62780 END SUB 62790 !========================================= 62800 ! S/W KEYBOARD 62810 !========================================= 62820 SUB SWKB(R$,C,X,Y) 62830 CALL LCP(X,Y+1,0,"ABCDEFGHIJKLM") 62840 CALL LCP(X,Y+2,0,"NOPQRSTUVWXYZ") 62850 CALL LCP(X,Y+3,0,"0123456789_/.") 62860 KBX,KBY=0 62870 TILECOL 1,0,0,128,128 62880 DO 62890 KB_T$=SCRCHR$(KBX+X,KBY+Y+1) 62900 CALL LCP(KBX+X,KBY+Y+1,0,KB_T$) 62910 CALL PADX(1) 62920 CALL INKEYX(INK,INK$) 62930 KBX=MOD(KBX+(PADX(1,1,2)=1)-(PADX(1,2,2)=1),13) 62940 KBY=MOD(KBY+(PADX(1,4,2)=1)-(PADX(1,3,2)=1),3) 62950 KBX=MOD(KBX+(PADX(1,14,2)=1)-(PADX(1,14,2)=-1),13) 62960 KBY=MOD(KBY+(PADX(1,13,2)=1)-(PADX(1,13,2)=-1),3) 62970 SELECT CASE INK 62980 CASE 47 ! / 62990 KBX=11 63000 KBY=2 63010 CASE 48 TO 57 ! 0-9 63020 KBX=INK-48 63030 KBY=2 63040 CASE 65 TO 90 ! A-Z 63050 KBX=MOD(INK-65,13) 63060 KBY=INT((INK-65)/13) 63070 CASE 95 ! _ 63080 KBX=10 63090 KBY=2 63100 CASE 97 TO 122 ! a-z 63110 KBX=MOD(INK-97,13) 63120 KBY=INT((INK-97)/13) 63130 CASE ELSE 63140 INK$="" 63150 END SELECT 63160 KB_T$=SCRCHR$(KBX+X,KBY+Y+1) 63170 TILEPOS 1,(KBX+X)*12+16,(KBY+Y+1)*9+7,(KBX+X)*12+28,(KBY+Y+1)*9+16,Z99 63180 TILEDISP 1 63190 CALL LCP(KBX+X,KBY+Y+1,C,KB_T$) 63200 KBLINK=MOD(KBLINK+1,60) 63210 IF KBLINK<30 THEN 63220 CALL LCP(X,Y,C,">"+R$+" ") 63230 ELSE 63240 CALL LCP(X,Y,C,">"+R$+CHR$(160)+" ") 63250 END IF 63260 FSYNC 1 63270 IF PADX(1,6,2)=1 OR INK$<>"" THEN 63280 IF KB_T$="." THEN EXIT DO 63290 R$=R$(1:16)+KB_T$ 63300 END IF 63310 IF PADX(1,7,2)=1 OR INK=8 THEN R$(LEN(R$):LEN(R$))="" 63320 IF INK=27 THEN 63330 CALL LCP(X,Y,C,REPEAT$(" ",19)) 63340 R$="" 63350 END IF 63360 LOOP UNTIL PADX(1,20,2)=1 OR INK=10 63370 TILEOFF 1 63380 CALL LCP(X,Y,7,REPEAT$(" ",LEN(R$)+2)) 63390 CALL LCP(X,Y+1,7," ") 63400 CALL LCP(X,Y+2,7," ") 63410 CALL LCP(X,Y+3,7," ") 63420 END SUB 63430 !========================================= 63440 ! S/W KEYBOARD 2 63450 !========================================= 63460 SUB SWKB2(R$,C,X,Y) 63470 !01234567890123456789012345678901 63480 ! !"#$%&'()*+,-./0123456789:;<=>? 63490 !@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ 63500 !`abcdefghijklmnopqrstuvwxyz{|}~ 63510 TEXTCOL BLACK 63520 T=32 63530 FOR KBY=Y+1 TO Y+3 63540 FOR KBX=X-8 TO X+31-8 63550 LOCATE KBX,KBY 63560 PRINT CHR$(T); 63570 T=T+1 63580 NEXT KBX 63590 NEXT KBY 63600 KBX,KBY=0 63610 TILECOL 1,0,0,128,128 63620 DO 63630 KB_T$=SCRCHR$(KBX+X-8,KBY+Y+1) 63640 CALL LCP(KBX+X-8,KBY+Y+1,0,KB_T$) 63650 CALL PADX(1) 63660 CALL INKEYX(INK,INK$) 63670 KBX=MOD(KBX+(PADX(1,1,2)=1)-(PADX(1,2,2)=1),32) 63680 KBY=MOD(KBY+(PADX(1,4,2)=1)-(PADX(1,3,2)=1),3) 63690 KBX=MOD(KBX+(PADX(1,14,2)=1)-(PADX(1,14,2)=-1),32) 63700 KBY=MOD(KBY+(PADX(1,13,2)=1)-(PADX(1,13,2)=-1),3) 63710 SELECT CASE INK 63720 CASE 32 TO 126 63730 KBX=MOD(INK-32,32) 63740 KBY=INT((INK-32)/32) 63750 CASE ELSE 63760 INK$="" 63770 END SELECT 63780 KB_T$=SCRCHR$(KBX+X-8,KBY+Y+1) 63790 TILEPOS 1,(KBX+X-8)*12+16,(KBY+Y+1)*9+7,(KBX+X-8)*12+28,(KBY+Y+1)*9+16,Z99 63800 TILEDISP 1 63810 CALL LCP(KBX+X-8,KBY+Y+1,C,KB_T$) 63820 KBLINK=MOD(KBLINK+1,60) 63830 IF KBLINK<30 THEN 63840 CALL LCP(X,Y,C,">"+R$+" ") 63850 ELSE 63860 CALL LCP(X,Y,C,">"+R$+CHR$(160)+" ") 63870 END IF 63880 FSYNC 1 63890 IF PADX(1,6,2)=1 OR INK$<>"" THEN 63900 R$=R$(1:16)+KB_T$ 63910 END IF 63920 IF PADX(1,7,2)=1 OR INK=8 THEN R$(LEN(R$):LEN(R$))="" 63930 IF INK=27 THEN 63940 CALL LCP(X,Y,C,REPEAT$(" ",19)) 63950 R$="" 63960 END IF 63970 LOOP UNTIL PADX(1,20,2)=1 OR INK=10 63980 TILEOFF 1 63990 CALL LCP(X,Y,7,REPEAT$(" ",LEN(R$)+2)) 64000 CALL LCP(X-8,Y+1,7,REPEAT$(" ",32)) 64010 CALL LCP(X-8,Y+2,7,REPEAT$(" ",32)) 64020 CALL LCP(X-8,Y+3,7,REPEAT$(" ",32)) 64030 END SUB 64040 !========================================= 64050 ! ファイルブラウズ 64060 !========================================= 64070 SUB BROWSE(F_MODE,LD) 64080 TRIPOS 1, 0, 0,640, 0, 0,224,16777199 64090 TRIPOS 2,640, 0, 0,224,640,224,16777199 64100 TRICOL3 1,0,0,64,128, 0,0,64,128,100,100,128,128 64110 TRICOL3 2,0,0,64,128,100,100,128,128,100,100,128,128 64120 TRIDISP 1 64130 TRIDISP 2 64140 SLOT,FILE=1 64150 DIR$="" 64160 NAME$="" 64170 DO 64180 IF FILE>0 THEN 64190 FILE=0 64200 CLEAR 64210 IF F_MODE=0 THEN 64220 CALL LCP(1,0,7,"FLIGHT RECORD LOAD") 64230 CALL LCP(42,0,7,"QUIT:△") 64240 ELSE 64250 CALL LCP(1,0,7,"FLIGHT RECORD SAVE") 64260 CALL LCP(29,0,7,"NEW-FILE:□") 64270 CALL LCP(42,0,7,"QUIT:△") 64280 END IF 64290 CALL LCP(1,1,7,"SLOT:") 64300 IF SLOT=1 THEN 64310 DEVICE MEMC1 64320 PRINT "1"; 64330 TEXTCOL BLACK 64340 PRINT "/2"; 64350 TEXTCOL WHITE 64360 ELSE 64370 DEVICE MEMC2 64380 TEXTCOL BLACK 64390 PRINT "1/"; 64400 TEXTCOL WHITE 64410 PRINT "2"; 64420 END IF 64430 PRINT " NAME:" 64440 TEXTCOL BLACK 64450 IF DIR$="" THEN 64460 FILES 64470 ELSE 64480 PRINT " .. ____/__/__" 64490 FILES DIR$ 64500 END IF 64510 FOR FNUM=0 TO 21 64520 IF SCRCHR$(14,FNUM+2)="" THEN EXIT FOR 64530 IF SCRCHR$(14,FNUM+2)="s" THEN EXIT FOR 64540 NEXT FNUM 64550 CSR,CSR0=0 64560 END IF 64570 CALL PADX(1) 64580 FSYNC 1 64590 CALL SCRSTR(R$,0,40,CSR0+2) 64600 CALL LCP(0,CSR0+2,0,R$) 64610 CALL SCRSTR(R$,0,40,CSR+2) 64620 CALL LCP(0,CSR+2,7,R$) 64630 NAME$=LTRIM$(R$(1:14)) 64640 R$=NAME$+CHR$(34)+REPEAT$(" ",12) 64650 IF DIR$<>"" THEN R$=DIR$+"/"+R$ 64660 CALL LCP(16,1,7,CHR$(34)+R$(1:23)) 64670 CSR0=CSR 64680 IF PADX(1,1,2)=1 THEN 64690 SLOT,FILE=2 64700 DIR$="" 64710 ELSEIF PADX(1,2,2)=1 THEN 64720 SLOT,FILE=1 64730 DIR$="" 64740 ELSEIF PADX(1,3,2)=1 THEN 64750 CSR=MOD(CSR-1,FNUM) 64760 ELSEIF PADX(1,4,2)=1 THEN 64770 CSR=MOD(CSR+1,FNUM) 64780 ELSEIF PADX(1,7,2)=1 THEN 64790 FILE=1 64800 DIR$="" 64810 ELSEIF PADX(1,6,2)=1 THEN 64820 IF DIR$="" THEN 64830 FILE=1 64840 DIR$=NAME$ 64850 ELSEIF RTRIM$(NAME$)=".." THEN 64860 FILE=1 64870 DIR$="" 64880 ELSEIF NAME$(LEN(NAME$)-3:LEN(NAME$))=".VRS" THEN 64890 IF F_MODE=0 THEN 64900 CALL LCP(38,CSR+2,7,"loading ") 64910 VARLOAD DIR$+"/"+NAME$(1:LEN(NAME$)-4),D$ 64920 CALL LCP(38,CSR+2,7,"converting") 64930 CALL S2V(D$,D,DMX) 64940 CALL LCP(38,CSR+2,7,"checking ") 64950 CALL FR_CHECK(LD) 64960 IF LD=0 THEN CALL LCP(38,CSR+2,7,"OK. ") ELSE CALL LCP(38,CSR+2,7,"NG. ") 64970 ELSE 64980 FILE=1 64990 CALL LCP(38,CSR+2,7,"saving ") 65000 CALL FR_SAVE(DIR$+"/"+NAME$(1:LEN(NAME$)-4)) 65010 CALL LCP(38,CSR+2,7," ") 65020 END IF 65030 END IF 65040 ELSEIF F_MODE>0 AND PADX(1,8,2)=1 THEN 65050 IF DIR$="" THEN R$="" ELSE R$=DIR$+"/" 65060 CALL SWKB(R$,7,18,19) 65070 CALL FNCHK(R,R$) 65080 IF R=0 THEN 65090 FILE=1 65100 CALL LCP(22,19,7,"saving") 65110 CALL FR_SAVE(R$) 65120 CALL LCP(22,19,7," ") 65130 END IF 65140 END IF 65150 LOOP UNTIL PADX(1,5,2)=1 65160 TRIOFF 1 65170 TRIOFF 2 65180 DEVICE MEMC1 65190 END SUB 65200 !========================================= 65210 ! ランキングデータ 65220 !========================================= 65230 SUB LANKING(L_MODE) 65240 DEVICE MEMC1 65250 VARLOAD "APB/APLANK",LANK$ 65260 CALL BACKGRAD 65270 IF L_MODE>0 THEN 65280 T=INT(D(5)*F60) 65290 IF D(7)<10 THEN T2$="0"+STR$(D(7)) ELSE T2$=STR$(D(7)) 65300 IF D(6)<10 THEN T1$="0"+STR$(D(6)) ELSE T1$=STR$(D(6)) 65310 IF T<10 THEN T0$="0"+STR$(T) ELSE T0$=STR$(T) 65320 T$=T2$+":"+T1$+":"+T0$ 65330 FOR L=1 TO 10 65340 IF LANK$(TRAIN,L,2)>T$ THEN EXIT FOR 65350 NEXT L 65360 IF L<11 THEN 65370 FOR I=9 TO L STEP -1 65380 LANK$(TRAIN,I+1,1)=LANK$(TRAIN,I,1) 65390 LANK$(TRAIN,I+1,2)=LANK$(TRAIN,I,2) 65400 NEXT I 65410 LANK$(TRAIN,L,2)=T$ 65420 CALL LCP(16,8,7,"LANK "+STR$(L)) 65430 CALL LCP(24,8,7,LANK$(TRAIN,L,2)) 65440 R$="" 65450 SEPLAY 5,128,128 65460 CALL SWKB2(R$,7,18,10) 65470 LANK$(TRAIN,L,1)=R$ 65480 CLEAR 65490 VARSAVE "APB/APLANK",LANK$ 65500 END IF 65510 END IF 65520 CSR=TRAIN 65530 DO 65540 CLEAR 65550 T1=0 65560 DO 65570 IF T1=0 THEN 65580 CALL LCP(36,0,7,"[L1←page→R1]") 65590 CALL LCP(1,1,7,"- Training Lanking ("+RTRIM$(TRAIN$(CSR,1))+") -") 65600 END IF 65610 IF T1>0 AND T1<11 THEN 65620 CALL LCP(9,T1*2+1,7,STR$(T1)) 65630 SELECT CASE T1 65640 CASE 1 65650 PRINT "st" 65660 CASE 2 65670 PRINT "nd" 65680 CASE 3 65690 PRINT "rd" 65700 CASE ELSE 65710 PRINT "th" 65720 END SELECT 65730 CALL LCP(14,T1*2+1,7,LANK$(CSR,T1,1)) 65740 CALL LCP(32,T1*2+1,7,LANK$(CSR,T1,2)) 65750 END IF 65760 T1=MIN(T1+1,11) 65770 T2=0 65780 DO 65790 CALL PADX(1) 65800 FSYNC 1 65810 T2=T2+1 65820 LOOP UNTIL T2>20 OR PADX(1,6,2)=1 OR PADX(1,7,2)=1 OR PADX(1,9,2)=1 OR PADX(1,10,2)=1 65830 LOOP UNTIL PADX(1,6,2)=1 OR PADX(1,7,2)=1 OR PADX(1,9,2)=1 OR PADX(1,10,2)=1 65840 CSR=MOD(CSR-1-(PADX(1,9,2)=1)+(PADX(1,10,2)=1),10)+1 65850 LOOP UNTIL PADX(1,6,2)=1 OR PADX(1,7,2)=1 65860 END SUB 65870 !========================================= 65880 ! 背景グラデーション 65890 !========================================= 65900 SUB BACKGRAD 65910 TRIPOS 1, 0,0,640, 0, 0,224,0 65920 TRIPOS 2,640,0, 0,224,640,224,0 65930 TRICOL3 1,0,0,255,128,0,0,255,128,0,128,255,128 65940 TRICOL3 2,0,0,255,128,0,128,255,128,0,128,255,128 65950 TRIDISP 1 65960 TRIDISP 2 65970 END SUB 65980 !========================================= 65990 ! ランキングデータ初期化 66000 !========================================= 66010 LABEL LANKINIT 66020 DEVICE MEMC1 66030 FOR I=1 TO 10 66040 FOR J=1 TO 10 66050 LANK$(I,J,1)="-----------------" 66060 LANK$(I,J,2)="__:__:__" 66070 NEXT J 66080 NEXT I 66090 VARSAVE "APB/APLANK",LANK$ 66100 END 66110 !========================================= 66120 ! MOUNTAIN EDITOR 66130 !========================================= 66140 LABEL M_EDITOR 66150 MTCX=-2600 66160 MTCZ= 2000 66170 SCRN=0 66180 COLL=0 66190 INIT 66200 TEXTMODE 2 66210 RANDOMIZE 66220 CALL LIGHT(0,0) 66230 CALL MODELS1(1,0,0,0,MTCX,MTCZ,5000,-1500,1) 66240 MODROT 400,0,0,RAD(180) 66250 MODPOS 400,5000,-20,-1500 66260 MODSET 599,1,4 66270 MODOPT 599,1,1,1,1 66280 MODDISP 599 66290 CX=0 66300 CY=-1500 66310 CZ=-14000 66320 CRX=INT(DEG(ANGLE(-CZ,-CY))) 66330 CRY=INT(DEG(ANGLE(-CZ,-CX))) 66340 CAMPOS 2,0,-25000,0 66350 CAMROT 2,RAD(90),0,0 66360 X,Y,Z=0 66370 H=2000 66380 DO 66390 FSYNC 1 66400 CLEAR 66410 PRINT "ラフモデル中心(X,Z)=("+STR$(XC)+","+STR$(ZC)+")" 66420 PRINT "ラフモデル倍率="+STR$(RT) 66430 IF COLL<0 THEN 66440 PRINT "NG:ビル用ラフモデルと接触しています." 66450 ELSEIF COLL>0 THEN 66460 PRINT "OK:ビル用ラフモデルと離れています." 66470 END IF 66480 PRINT " X=";INT(X) 66490 PRINT " Y=";INT(Y) 66500 PRINT " Z=";INT(Z) 66510 PRINT " H=";H 66520 PRINT "CX=";INT(CX) 66530 PRINT "CY=";INT(CY) 66540 PRINT "CZ=";INT(CZ) 66550 PRINT "(X1,Z1)-(X2,Z2)" 66560 PRINT "=";X1,Z1,X2,Z2 66570 SELECT CASE SCRN 66580 CASE 0 66590 SCREEN SINGLE 66600 LINEOFF 1 66610 LINEOFF 2 66620 CASE 1 66630 SCREEN SPLIT 66640 GETSPOS X_,Y_,Z_,2,CX,20,CZ 66650 X_=MIN(MAX(X_,320),639) 66660 Y_=MIN(MAX(Y_,0),223) 66670 LINEPOS 1,X_,0,X_,223,16777199 66680 LINEPOS 2,320,Y_,639,Y_,16777199 66690 LINEDISP 1 66700 LINEDISP 2 66710 CASE ELSE 66720 SCREEN VERTICAL 66730 GETSPOS X_,Y_,Z_,2,CX,20,CZ 66740 X_=MIN(MAX(X_,0),639) 66750 Y_=MIN(MAX(Y_,112),223) 66760 LINEPOS 1,X_,112,X_,223,16777199 66770 LINEPOS 2,0,Y_,639,Y_,16777199 66780 LINEDISP 1 66790 LINEDISP 2 66800 END SELECT 66810 MODPOS 1,CX,0,CZ 66820 MODPOS 100,CX,CY,CZ 66830 MODROT 100,RAD(CRX),RAD(CRY),0 66840 CAMPOS 1,CX,CY,CZ 66850 GETWPOS X_,Y_,Z_,100,0,0,1 66860 CAMVEC 1,X_-CX,Y_-CY,Z_-CZ 66870 MODPOS 599,MTCX,H,MTCZ 66880 MODROT 599,RAD(INT(X)),RAD(INT(Y)),RAD(INT(Z)) 66890 CALL PADX(1) 66900 CRX=CRX+((PADX(1,4,2)>0)-(PADX(1,3,2)>0)) 66910 CRX=MIN(MAX(CRX,-89),89) 66920 CRY=CRY+((PADX(1,1,2)>0)-(PADX(1,2,2)>0)) 66930 IF PADX(1,7,2)>0 THEN 66940 T=2^(PADX(1,7,1)/40) 66950 GETWPOS CX,CY,CZ,100,0,0,T 66960 END IF 66970 IF PADX(1,8,2)>0 THEN 66980 T=2^(PADX(1,8,1)/40) 66990 GETWPOS CX,CY,CZ,100,0,0,-T 67000 END IF 67010 IF PADX(1,9,2)>0 THEN 67020 T=2^(PADX(1,9,1)/40) 67030 GETWPOS CX,CY,CZ,100,-T,0,0 67040 END IF 67050 IF PADX(1,10,2)>0 THEN 67060 T=2^(PADX(1,10,1)/40) 67070 GETWPOS CX,CY,CZ,100,T,0,0 67080 END IF 67090 IF PADX(1,11,2)>0 THEN 67100 T=2^(PADX(1,11,1)/40) 67110 GETWPOS CX,CY,CZ,100,0,T,0 67120 END IF 67130 IF PADX(1,12,2)>0 THEN 67140 T=2^(PADX(1,12,1)/40) 67150 GETWPOS CX,CY,CZ,100,0,-T,0 67160 END IF 67170 X=X+((PADX(1,13,2)=-1)-(PADX(1,13,2)=1)) 67180 Y=Y+((PADX(1,14,2)=-1)-(PADX(1,14,2)=1)) 67190 Z=Z+((PADX(1,16,2)=-1)-(PADX(1,16,2)=1)) 67200 H=H-((PADX(1,15,2)=-1)-(PADX(1,15,2)=1))*10 67210 IF PADX(1,17,2)=1 THEN X,Y,Z=0 67220 IF PADX(1,18,2)=1 THEN H=2000 67230 IF PADX(1,5,2)=1 THEN SCRN=(SCRN+1)*(SCRN<2) 67240 IF PADX(1,19,2)=1 THEN MODOFF 399 67250 IF PADX(1,20,2)=1 THEN CALL M_ED_SUB 67260 LOOP 67270 !========================================= 67280 ! MOUNTAIN EDITOR SUB 67290 !========================================= 67300 SUB M_ED_SUB 67310 MODSET 399,1,5 67320 MODROT 399,0,0,0 67330 MODOPT 399,240,1,1,1 67340 MODDISP 399 67350 X1=-24000 67360 DO 67370 MODPOS 399,X1,0,0 67380 IF COLLISION(399,101,199)>0 THEN 67390 X1=X1-30 67400 EXIT DO 67410 END IF 67420 X1=X1+10 67430 LOOP 67440 X2=24000 67450 DO 67460 MODPOS 399,X2,0,0 67470 IF COLLISION(399,101,199)>0 THEN 67480 X2=X2+30 67490 EXIT DO 67500 END IF 67510 X2=X2-10 67520 LOOP 67530 Z1=-24000 67540 DO 67550 MODPOS 399,0,0,Z1 67560 IF COLLISION(399,101,199)>0 THEN 67570 Z1=Z1-30 67580 EXIT DO 67590 END IF 67600 Z1=Z1+10 67610 LOOP 67620 Z2=24000 67630 DO 67640 MODPOS 399,0,0,Z2 67650 IF COLLISION(399,101,199)>0 THEN 67660 Z2=Z2+30 67670 EXIT DO 67680 END IF 67690 Z2=Z2-10 67700 LOOP 67710 X1=X1+12000 67720 X2=X2-12000 67730 Z1=Z1+12000 67740 Z2=Z2-12000 67750 XC=(X1+X2)/2 67760 ZC=(Z1+Z2)/2 67770 SZ=MAX(X2-X1,Z2-Z1) 67780 RT=SZ/100 67790 MODROT 399,0,0,RAD(180) 67800 MODPOS 399,XC,-20,ZC 67810 MODOPT 399,RT,1,1,1 67820 IF COLLISION(399,400,400)>0 THEN 67830 COLL=-1 67840 ELSE 67850 COLL=1 67860 END IF 67870 END SUB