1000 !---------------------------- 1010 ! 3D対戦シューティングデモ 1020 ! 2000/10/1 M.Iizuka 新規作成 1030 !---------------------------- 1040 ! 配列用意 1050 DIM HX(2),HY(2),HZ(2),HXP(2),HYP(2),HZP(2) 1060 DIM HD(2),HDP(2),HFP(2),HWT(2),GDR(2),GAG(2) 1070 DIM HYK(2),HMS(2),HHP(2),HSP(2),HHT(2) 1080 DIM MST(20,2),MSI(2),HCM(2) 1090 DIM MT(40),MX(40),MY(40),MZ(40) 1100 DIM MXP(40),MYP(40),MZP(40),MCT(40) 1110 DIM MDR(40),MAG(40) 1120 DIM EST(20),ECT(20) 1130 DIM AUTO(2) 1140 ! 環境初期化 1150 FKEY "RENUMBER AT 1000",6 1160 FKEY "SAVE "+CHR$(34)+"CARNAGE/CARNAGE2"+CHR$(34),3 1170 INIT 1180 TEXTMODE 2 1190 LOCATE 0,1 1200 TEXTCOL GREEN 1210 PRINT " 対戦シューティングデモ" 1220 PRINT " − Carnage Heat −" 1230 PRINT "" 1240 PRINT " 左スティック → 自機操縦" 1250 PRINT " 右スティック → 射撃操作" 1260 PRINT " □・L3ボタン → ミサイル" 1270 PRINT " ×・R3ボタン → ショット" 1280 PRINT " L1ボタン、R1ボタン → スライド移動" 1290 PRINT " L2ボタン、R2ボタン → 高度調整" 1300 PRINT " 方向キー上下 → 視点距離調整" 1310 PRINT " △ → オートターゲット" 1320 PRINT "" 1330 PRINT " - Now Loading -" 1340 LOCATE 24,14 1350 PRINT 6 1360 SELOAD "CARNAGE/CARNAGE" 1370 SEPLAY 14,150,150 1380 LOCATE 24,14 1390 PRINT 5 1400 BGMLOAD "CARNAGE/CARNAGE",1 1410 SEPLAY 14,150,150 1420 LOCATE 24,14 1430 PRINT 4 1440 MODLOAD "CARNAGE/TRIPOD",2 1450 SEPLAY 14,150,150 1460 LOCATE 24,14 1470 PRINT 3 1480 MODLOAD "CARNAGE/CARNAGE",1 1490 SEPLAY 14,150,150 1500 LOCATE 24,14 1510 PRINT 2 1520 PALLOAD "CARNAGE/CARNAGE" 1530 SEPLAY 14,150,150 1540 LOCATE 24,14 1550 PRINT 1 1560 TEXLOAD "CARNAGE/CARNAGE" 1570 SEPLAY 14,150,150 1580 LABEL START 1590 LOCATE 0,13 1600 PRINT " (左右でレベル選択)" 1610 DO 1620 LOCATE 18,14 1630 SELECT CASE E_LV 1640 CASE 0 1650 PRINT "LEVEL [ EASY ]" 1660 CASE 1 1670 PRINT "LEVEL [NORMAL]" 1680 CASE 2 1690 PRINT "LEVEL [ HARD ]" 1700 END SELECT 1710 DO WHILE PAD(1,1)>0 OR PAD(1,2)>0 1720 LOOP 1730 DO WHILE PAD(1,1)=0 AND PAD(1,2)=0 1740 IF PAD(1,20)>0 THEN EXIT DO 1750 LOOP 1760 IF PAD(1,20)>0 THEN EXIT DO 1770 IF PAD(1,2)>0 THEN E_LV=MAX(0,E_LV-1) 1780 IF PAD(1,1)>0 THEN E_LV=MIN(2,E_LV+1) 1790 LOOP 1800 TEXTCOL WHITE 1810 !LABEL START 1820 VOLUME 255 1830 RANDOMIZE 1840 BGMPLAY int(rnd*4)+1 1850 SCREEN SINGLE 1860 CAMLENS 1,512 1870 CAMLENS 2,512 1880 ZSORT 30,90 1890 BGCOL 0,0,0 1900 FOGCOL 88,77,66 1910 FOGSET 100,1600 1920 LIGVEC 1,10,12,-14 1930 LIGCOL 1,255,255,255 1940 LIGVEC 2,0,-100,0 1950 LINEPOS 1,0,112,640,112,10000000 1960 LINECOL 1,100,160,120,128 1970 !LINEDISP 1 1980 TILEPOS 100,0,0,640,224,16777000 1990 TILECOL 100,14,20,20,128 2000 TILEDISP 100 2010 ! 初期データセット 2020 HD(1)=PI 2030 FOR I=1 TO 2 2040 AUTO(I)=-1 2050 ID=(I-1)*10 2060 HX(I)=0 2070 HY(I)=-RND*20 2080 HZ(I)=(I-1)*400-200 2090 HHP(I)=64 2100 HYK(I)=-10 2110 HMS(I)=15 2120 HCM(I)=20 2130 HFP(I),HSP(I),HDP(I)=0 2140 HHT(I),HWT(I)=0 2150 HXP(I),HYP(I),HZP(I)=0 2160 MODPOS 6+I,HX(I),HY(I),HZ(I) 2170 FOR J=9 TO 16 2180 MODSET J+ID,2,J-8 2190 MODDISP J+ID 2200 MODOPT J+ID,1,1,1,1 2210 NEXT J 2220 MODSET 17+ID,1,9 2230 MODOPT 17+ID,1,1,1,1 2240 MODDISP 17+ID 2250 ! 機体組み立て 2260 MODJOIN 9+ID,6+I ! 腰をベース 2270 MODJOIN 10+ID,9+ID ! 胸を腰 2280 MODJOIN 11+ID,10+ID ! 右肩を胸 2290 MODJOIN 12+ID,10+ID ! 左肩を胸 2300 MODJOIN 13+ID,11+ID ! 右手を右肩 2310 MODJOIN 14+ID,12+ID ! 左手を左肩 2320 MODJOIN 15+ID,9+ID ! 右足を腰 2330 MODJOIN 16+ID,9+ID ! 左足を腰 2340 MODPOS 9+ID,0,0,0 2350 MODPOS 10+ID,0,-1.8,-.4 2360 MODPOS 11+ID,-4.2,-2,0 2370 MODPOS 12+ID,4.2,-2,0 2380 MODPOS 13+ID,-2,4,0 2390 MODPOS 14+ID,2,4,0 2400 MODPOS 15+ID,-3.8,1.8,-.8 2410 MODPOS 16+ID,3.8,1.8,-.8 2420 MODROT 11+ID,-.5,0,.2 2430 MODROT 12+ID,-.5,0,-.2 2440 MODROT 13+ID,-1.4,0,0 2450 MODROT 14+ID,0,0,.8 2460 MODROT 15+ID,.5,0,.2 2470 MODROT 16+ID,.5,0,-.2 2480 ! ショットデータ初期化 2490 FOR J=1 TO 20 2500 MST(J,I)=J+(I-1)*20 2510 NEXT J 2520 MSI(I)=1 2530 NEXT I 2540 ! エフェクト用データセット 2550 FOR I=1 TO 20 2560 EST(I)=I 2570 ECT(I)=0 2580 NEXT I 2590 ESI=1 2600 ! 2D表示物セット 2610 FOR I=0 TO 1 2620 SPRTEX 1+I,1,384,64,482,76 2630 SPRTEX 3+I,1,384,0,448,63.5 2640 SPRPAL 1+I,1,5,1 2650 SPRPAL 3+I,1,1,2 2660 SPRPOS 1+I,520,88+112*I,11000000 2670 SPRTEX 5+I,1,128,0,224,80 2680 SPRTEX 7+I,1,256,0,328,80 2690 SPRTEX 9+I,1,0,0,128,80 2700 SPRPAL 5+I,1,0,1 2710 SPRPAL 7+I,1,1,1 2720 SPRPAL 9+I,1,2,1 2730 SPRPOS 5+I,8,70+112*I,10000000 2740 SPRPOS 7+I,20,72+112*I,10000000 2750 SPRPOS 9+I,504,74+112*I,10000000 2760 FOR J=0 TO 14 2770 W=11+I+J*2 2780 SPRTEX W,1,224,0,232,16 2790 SPRPAL W,1,3,1 2800 SPRPOS W,516+J*6,98+112*I,11000000-J 2810 NEXT J 2820 TILECOL 1+I,224,160,44,128 2830 TILEDISP 1+I 2840 NEXT I 2850 FOR I=1 TO 40 2860 SPRDISP I 2870 NEXT I 2880 ! ステージセット 2890 FOR I=1 TO 5 2900 MODPOS I,0,0,0 2910 MODSET I,1,I 2920 MODOPT I,5,1,1,1 2930 MODDISP I 2940 NEXT I 2950 MODOPT 1,5,0,0,1 2960 MODOPT 2,5,0,0,1 2970 ! 弾セット 2980 FOR I=1 TO 40 2990 MT(I)=0 3000 MODPOS 30+I,0,0,0 3010 MODOPT 30+I,5,0,1,2 3020 NEXT I 3030 ! その他セット 3040 FADE=128 3050 GBOM=0 3060 OVER=0 3070 FOG=1 3080 CLEAR 3090 ! メインループ 3100 DO 3110 IF OVER>0 THEN ! 勝者表示 3120 FOR I=1 TO 2 3130 IF HHP(I)<=0 THEN 3140 CALL EXP_SET(I) 3150 OVER=OVER+1 3160 END IF 3170 SPRPAL 40+I,1,9,1 3180 IF HHP(I)<=0 THEN 3190 SPRTEX 40+I,1,0,192,320,256 3200 SPRPOS 40+I,144,(I-1)*112+24,10000000 3210 ELSE 3220 SPRTEX 40+I,1,0,128,320,192 3230 SPRPOS 40+I,144,(I-1)*112+24,10000000 3240 END IF 3250 IF I=1 THEN SPRDISP 40+I 3260 NEXT I 3270 END IF 3280 !FOG=MOD(FOG+1,2000) 3290 !FOGSET 0,500+ABS(1000-FOG) 3300 IF FADE>0 THEN ! オープニングフェード 3310 FADE=INT(FADE*.98) 3320 TILECOL 100,14,20,20,FADE 3330 END IF 3340 HDIS=SQR(ABS(HX(1)-HX(2))^2+ABS(HY(1)-HY(2))^2+ABS(HZ(1)-HZ(2))^2) 3350 FOR I=1 TO 2 ! 機体処理 3360 ID=(I-1)*10 3370 WCY=(I-1)*112 3380 IF HWT(I)=0 THEN 3390 IF PAD(I,8)>0 OR PAD(I,17)>0 THEN ! ミサイル発射 3400 CALL B_FIRE(I,2) 3410 ELSEIF PAD(I,7)>0 OR PAD(I,18)>0 THEN ! 通常弾発射 3420 CALL B_FIRE(I,1) 3430 END IF 3440 IF I=2 AND RND>0.97 THEN 3450 CALL B_FIRE(2,2) 3460 ELSEIF I=2 AND RND*1016 THEN DPW=RND*64 3560 IF I=2 AND WX<-16 THEN DPW=RND*64+192 3570 IF DPW<144 AND DPW>112 THEN DPW=128 3580 DPW=(DPW-128)/100000 3590 HDP(I)=MAX(-.018,MIN(.018,HDP(I)+DPW))*.99 3600 HD(I)=HD(I)+HDP(I) 3610 IF HD(I)>PI THEN HD(I)=HD(I)-2*PI 3620 IF HD(I)<(-PI) THEN HD(I)=HD(I)+2*PI 3630 WHD=HD(I) 3640 FPW=MIN(PAD(I,13),160) 3650 IF I=2 AND HDIS<100 THEN FPW=160 3660 IF I=2 AND HDIS>200 THEN FPW=0 3670 IF FPW<144 AND FPW>112 THEN FPW=128 3680 WHFP,HFP(I)=MAX(-.5,MIN(.2,HFP(I)+(FPW-128)/30000))*.95 3690 AUTOS=AUTOS+1 3700 IF AUTOS>1000 THEN AUTOS=0 3710 SPW=(PAD(I,9)-PAD(I,10))/8000 3720 IF I=2 AND AUTOS<500 THEN SPW=-RND*256/8000 3730 IF I=2 AND AUTOS>500 THEN SPW=RND*256/8000 3740 WHSP,HSP(I)=MAX(-.1,MIN(.1,(HSP(I)+SPW)*.95)) 3750 HXP(I)=(HXP(I)+COS(-WHD)*WHSP+SIN(WHD)*WHFP)*.99 3760 HZP(I)=(HZP(I)+SIN(-WHD)*WHSP+COS(WHD)*WHFP)*.99 3770 W=SQR(HXP(I)^2+HZP(I)^2) 3780 IF W>1.8 THEN 3790 HXP(I)=HXP(I)*(1.8/W) 3800 HZP(I)=HZP(I)*(1.8/W) 3810 END IF 3820 IF PAD(I,12)>0 THEN HYK(I)=MIN(-10,HYK(I)+1) 3830 IF PAD(I,11)>0 THEN HYK(I)=MAX(-60,HYK(I)-1) 3840 AUTOH=AUTOH+1 3850 IF AUTOH>1000 THEN AUTOH=0 3860 IF I=2 AND AUTOH>300 THEN HYK(I)=MIN(-10,HYK(I)+1) 3870 IF I=2 AND AUTOH<700 THEN HYK(I)=MAX(-60,HYK(I)-1) 3880 IF ABS(HY(I)-HYK(I))>1 THEN ! 高度調整 3890 IF HY(I)>HYK(I) THEN 3900 HYP(I)=MAX(-.6,HYP(I)-.03) 3910 ELSE 3920 HYP(I)=MIN(.6,HYP(I)+.03) 3930 END IF 3940 HYP(I)=HYP(I)*.96 3950 END IF 3960 OX=HX(I) 3970 OY=HY(I) 3980 OZ=HZ(I) 3990 WHX,HX(I)=MAX(-650,MIN(650,OX+HXP(I))) 4000 WHY,HY(I)=MIN(-5,OY+HYP(I)) 4010 WHZ,HZ(I)=MAX(-650,MIN(650,OZ+HZP(I))) 4020 MODPOS 6+I,WHX,WHY,WHZ 4030 MODPOS 17+ID,WHX,-1,WHZ+WHY*2+10 4040 MODROT 6+I,0,WHD,0 4050 W=HDP(I)*10 4060 XR=-.1-WHFP*8 4070 MODROT 9+ID,.3-WHFP*4,0,-W+WHSP*2 4080 MODROT 15+ID,XR-W,0,.2+WHSP*3 4090 MODROT 16+ID,XR+W,0,-.2+WHSP*3 4100 GETCOLL N,VX,VY,VZ,9+ID,4,5 4110 IF N<>0 THEN ! 障害物に衝突 4120 HXP(I)=-(VX/ABS(VX))*.5 4130 HYP(I)=-(VY/ABS(VY))*.5 4140 HZP(I)=-(VZ/ABS(VZ))*.5 4150 SEPLAY 16,130,130 4160 END IF 4170 GETCOLL N,VX,VY,VZ,9+ID,19-ID,19-ID 4180 IF N<>0 THEN ! 敵機体に衝突 4190 HXP(I)=-(VX/ABS(VX))*.5 4200 HYP(I)=-(VY/ABS(VY))*.5 4210 HZP(I)=-(VZ/ABS(VZ))*.5 4220 WHX,HX(I)=OX+HXP(I) 4230 WHY,HY(I)=OY+HYP(I) 4240 WHZ,HZ(I)=OZ+HZP(I) 4250 MODPOS 6+I,WHX,WHY,WHZ 4260 SEPLAY 16,130,130 4270 END IF 4280 IF HWT(I)>0 THEN HWT(I)=HWT(I)-1 4290 ! ガンサイト 4300 TMP=PAD(I,5) 4310 IF I=2 AND AUTO(2)<0 THEN TMP=100 4320 IF TMP>0 THEN 4330 IF AUTO(I)=-1 THEN 4340 AUTO(I)=2 4350 LOCATE 0,(I-1)*13 4360 PRINT "AUTO" 4370 END IF 4380 IF AUTO(I)=1 THEN 4390 AUTO(I)=-2 4400 LOCATE 0,(I-1)*13 4410 PRINT " " 4420 END IF 4430 ELSE 4440 AUTO(I)=SGN(AUTO(I)) 4450 END IF 4460 EI=3-I 4470 GETLPOS WX,WY,WZ,13+ID,HX(EI),HY(EI),HZ(EI) 4480 IF AUTO(I)<0 THEN 4490 GDR(I)=(128-PAD(I,16))/200 4500 ELSE 4510 IF WX<=-4 THEN 4520 GDR(I)=GDR(I)-0.08 4530 ELSEIF WX>=4 THEN 4540 GDR(I)=GDR(I)+0.08 4550 END IF 4560 GDR(I)=MAX(GDR(I),-127/200) 4570 GDR(I)=MIN(GDR(I),128/200) 4580 END IF 4590 IF AUTO(I)<0 THEN 4600 GAG(I)=(120-PAD(I,15))/350 4610 ELSE 4620 IF WZ<=-4 THEN 4630 GAG(I)=GAG(I)-0.02 4640 ELSEIF WZ>=4 THEN 4650 GAG(I)=GAG(I)+0.02 4660 END IF 4670 END IF 4680 GAG(I)=MAX(GAG(I),-135/350) 4690 GAG(I)=MIN(GAG(I),120/350) 4700 IF ABS(WX)<8 AND ABS(WZ)<8 THEN PAL=5 ELSE PAL=4 4710 GETWPOS WX,WY,WZ,13+ID,0,HDIS,0 4720 GETSPOS SX,SY,SZ,I,WX,WY,WZ 4730 IF SX>-64 AND SX<704 AND SY>WCY AND SY0 THEN 4940 HCM(I)=MAX(5,HCM(I)*.95) 4950 ELSEIF PAD(I,4)>0 THEN 4960 HCM(I)=MIN(500,HCM(I)*1.05) 4970 END IF 4980 WHCM=HCM(I) 4990 CX=WHX+SIN(WHD)*(30+WHCM) 5000 CY=WHY-11+WHFP*40-MAX(0,WHCM-20) 5010 CZ=WHZ+COS(WHD)*(30+WHCM) 5020 CAMPOS I,CX,CY,CZ 5030 CAMROT I,ANGLE(30+WHCM,WHY-12-WHFP*50-CY), ANGLE(WHZ-CZ,-WHX+CX),-HDP(I)*10+WHSP*2 5040 NEXT I 5050 ! 弾類処理 5060 FOR I=1 TO 40 5070 ON MT(I) GOTO *BULLET,*MISSILE,*EXPLOSION ELSE *B_END 5080 LABEL BULLET ! 通常弾 5090 MX(I)=MX(I)+MXP(I) 5100 MY(I)=MY(I)+MYP(I) 5110 MZ(I)=MZ(I)+MZP(I) 5120 MODPOS 30+I,MX(I),MY(I),MZ(I) 5130 CALL B_AREA_CHK(I) 5140 GOTO *B_END 5150 LABEL MISSILE ! ミサイル 5160 IF MOD(MCT(I),3)=0 THEN ! ホーミング処理 5170 EI=2-INT((I-1)/20) 5180 GETLPOS WX,WY,WZ,30+I,HX(EI),HY(EI),HZ(EI) 5190 IF WX<0 THEN 5200 IF WZ>0 THEN MDR(I)=MDR(I)+.06 ELSE MDR(I)=MDR(I)-.06 5210 IF WY>0 THEN MAG(I)=MAG(I)+.06 ELSE MAG(I)=MAG(I)-.06 5220 END IF 5230 W=MIN(MCT(I)/20,5)+1 5240 MXP(I)=SIN(MDR(I))*W*COS(MAG(I)) 5250 MZP(I)=COS(MDR(I))*W*COS(MAG(I)) 5260 MYP(I)=SIN(MAG(I))*W 5270 END IF 5280 IF MOD(MCT(I),8)=0 THEN CALL EFE_SET(I) 5290 MCT(I)=MCT(I)+1 5300 MX(I)=MX(I)+MXP(I) 5310 MY(I)=MY(I)+MYP(I) 5320 MZ(I)=MZ(I)+MZP(I) 5330 MODPOS 30+I,MX(I),MY(I),MZ(I) 5340 MODROT 30+I,0,MDR(I)+PI/2,-MAG(I) 5350 CALL B_AREA_CHK(I) 5360 GOTO *B_END 5370 LABEL EXPLOSION ! 爆発 5380 MODOPT 30+I,MCT(I),0,1,2 5390 MODROT 30+I,0,MCT(I)/10,0 5400 MCT(I)=MCT(I)+1 5410 IF MCT(I)>30 THEN 5420 IDX=INT((I-1)/20)+1 5430 MSI(IDX)=MSI(IDX)-1 5440 MST(MSI(IDX),IDX)=I 5450 MT(I)=0 5460 MODOFF 30+I 5470 END IF 5480 GBOM=MIN(GBOM+8,100) 5490 LABEL B_END 5500 NEXT I 5510 ! エフェクト処理 5520 FOR I=1 TO 20 5530 IF ECT(I)>0 THEN 5540 MODOPT 70+I,16-ABS(6-ECT(I)),0,1,2 5550 ECT(I)=ECT(I)-1 5560 IF ECT(I)=0 THEN 5570 ESI=ESI-1 5580 EST(ESI)=I 5590 MODOFF 70+I 5600 END IF 5610 END IF 5620 NEXT I 5630 AMBCOL 80+GBOM,80+GBOM*.6,80+GBOM*.3 5640 GBOM=GBOM*.8 5650 FSYNC 1 5660 LOOP WHILE OVER<180 5670 !------------------------------ 5680 ! GAME OVER 5690 !------------------------------ 5700 FSYNC 60 5710 DO 5720 TILECOL 100,14,20,20,FADE 5730 FADE=FADE+1.2 5740 VOLUME 255-FADE 5750 FSYNC 1 5760 LOOP WHILE FADE<128 5770 BGMSTOP 5780 CLEAR 5790 TEXTCOL GREEN 5800 LOCATE 17,8 5810 PRINT "Do You Continue ?" 5820 LOCATE 17,10 5830 PRINT " YES:○, NO:×" 5840 TEXTCOL WHITE 5850 DO WHILE PAD(1,6)=0 AND PAD(1,7)=0 5860 LOOP 5870 INIT 5880 TEXTMODE 2 5890 IF PAD(1,7)>0 THEN END 5900 GOTO *START 5910 !------------------------------ 5920 ! 弾発射 5930 !------------------------------ 5940 SUB B_FIRE(IDX,WPN) 5950 IF MSI(IDX)>20 THEN EXIT SUB 5960 MN=MST(MSI(IDX),IDX) 5970 IF WPN=2 THEN ! ミサイル 5980 IF HMS(IDX)<=0 THEN EXIT SUB 5990 HMS(IDX)=HMS(IDX)-1 6000 SPROFF 11+IDX-1+HMS(IDX)*2 6010 SEPLAY 13,150,150 6020 GETWPOS WX,WY,WZ,10+ID,3,-5,0 6030 GETWPOS WX1,WY1,WZ1,10+ID,0,0,0 6040 GETWPOS WX2,WY2,WZ2,10+ID,0,0,-4 6050 MODSET 30+MN,1,8 6060 MODOPT 30+MN,5,1,1,1 6070 HHT(IDX)=MIN(100,HHT(IDX)+12) 6080 ELSE ! 通常弾 6090 SEPLAY 33,130,130 6100 GETWPOS WX,WY,WZ,13+ID,0,3,0 6110 GETWPOS WX1,WY1,WZ1,13+ID,0,0,0 6120 GETWPOS WX2,WY2,WZ2,13+ID,0,15,0 6130 MODSET 30+MN,1,6 6140 MODOPT 30+MN,4,0,1,2 6150 HHT(IDX)=MIN(100,HHT(IDX)+3) 6160 END IF 6170 MT(MN)=WPN 6180 MCT(MN)=1 6190 MX(MN)=WX 6200 MY(MN)=WY 6210 MZ(MN)=WZ 6220 MXP(MN)=WX2-WX1 6230 MYP(MN)=WY2-WY1 6240 MZP(MN)=WZ2-WZ1 6250 MSI(IDX)=MSI(IDX)+1 6260 L=SQR(MXP(MN)*MXP(MN)+MZP(MN)*MZP(MN)) 6270 MAG(MN)=ANGLE(L,MYP(MN)) 6280 MDR(MN)=ANGLE(MZP(MN),MXP(MN)) 6290 MODROT 30+MN,0,MDR(MN)+PI/2,-MAG(MN) 6300 MODDISP 30+MN 6310 END SUB 6320 !------------------------------ 6330 ! 爆発セット 6340 !------------------------------ 6350 SUB EXP_SET(IDX) 6360 IF MSI(IDX)>20 THEN EXIT SUB 6370 MN=MST(MSI(IDX),IDX) 6380 MSI(IDX)=MSI(IDX)+1 6390 MT(MN)=3 6400 MX(MN)=HX(IDX)+RND*16-8 6410 MY(MN)=HY(IDX)+RND*16-8 6420 MZ(MN)=HZ(IDX)+RND*16-8 6430 MCT(MN)=1 6440 MODPOS 30+MN,MX(MN),MY(MN),MZ(MN) 6450 MODSET 30+MN,1,7 6460 MODDISP 30+MN 6470 IF MOD(MN,5)=0 THEN 6480 W=RND*100+100 6490 SEPLAY 9,W,W 6500 END IF 6510 END SUB 6520 !------------------------------ 6530 ! 弾共通処理 6540 !------------------------------ 6550 SUB B_AREA_CHK(I) 6560 ! フィールド外処理 6570 IF ABS(MX(I))>800 OR MY(I)<-200 OR ABS(MZ(I))>800 THEN 6580 IDX=INT((I-1)/20)+1 6590 MSI(IDX)=MSI(IDX)-1 6600 MST(MSI(IDX),IDX)=I 6610 MT(I)=0 6620 MODOFF 30+I 6630 EXIT SUB 6640 ELSEIF MY(I)>0 THEN ! 着弾 6650 MT(I)=3 6660 MCT(I)=1 6670 MODSET 30+I,1,7 6680 MODOPT 30+I,1,0,1,2 6690 CALL SE_BOM(I) 6700 EXIT SUB 6710 ELSEIF COLLISION(30+I,4,5)<>0 THEN 6720 MT(I)=3 6730 MCT(I)=1 6740 MODSET 30+I,1,7 6750 MODOPT 30+I,1,0,1,2 6760 CALL SE_BOM(I) 6770 EXIT SUB 6780 END IF 6790 EI=2-INT((I-1)/20) 6800 W=COLLISION(30+I,EI*10-1,EI*10-1) 6810 IF W<>0 THEN ! ヒット 6820 HHP(EI)=MAX(0,HHP(EI)-MT(I)*2) 6830 VIBRATE EI,255,1,1 6840 IF HHP(EI)<=0 THEN 6850 HYK(EI)=0 6860 OVER=OVER+1 6870 END IF 6880 MT(I)=3 6890 MCT(I)=1 6900 MODSET 30+I,1,7 6910 MODOPT 30+I,1,0,1,2 6920 HXP(EI)=HXP(EI)+MXP(I) 6930 HZP(EI)=HZP(EI)+MZP(I) 6940 SPRTEX 6+EI,1,256,6,328,6+HHP(EI) 6950 SPRPOS 6+EI,20,75+112*(EI-1),10000000 6960 SEPLAY 9,200,200 6970 END IF 6980 END SUB 6990 !------------------------------ 7000 ! エフェクトセット 7010 !------------------------------ 7020 SUB EFE_SET(IDX) 7030 IF ESI>20 THEN EXIT SUB 7040 EN=EST(ESI) 7050 ESI=ESI+1 7060 ECT(EN)=20 7070 MODPOS 70+EN,MX(IDX),MY(IDX),MZ(IDX) 7080 MODROT 70+EN,0,MDR(IDX)+PI/2,-MAG(IDX) 7090 MODSET 70+EN,1,10 7100 MODOPT 70+EN,5,0,1,1 7110 MODDISP 70+EN 7120 END SUB 7130 !------------------------------ 7140 ! 爆発音 7150 !------------------------------ 7160 SUB SE_BOM(I) 7170 DIS1=HCM(1)+SQR(ABS(MX(I)-HX(1))^2+ABS(MZ(I)-HZ(1))^2) 7180 DIS2=HCM(2)+SQR(ABS(MX(I)-HX(2))^2+ABS(MZ(I)-HZ(2))^2) 7190 SVOL=MAX(5,220-(MIN(DIS1,DIS2)/3)) 7200 SEPLAY 9,SVOL,SVOL 7210 END SUB 7220 !------------------------------ 7230 ! モデル用途 7240 ! 1 -5 グランド 7250 ! 7 -23 機体 7260 ! 31-60 弾 7270 ! 71-90 エフェクト 7280 ! ライン用途 7290 ! 1 画面敷居 7300 ! スプライト用途 7310 ! 3-6 ガンサイト 7320 ! 7-10 体力表示 7330 ! 11-40 ミサイル残表示