100 SCREEN 0:T=-&H0.5:'<--- ねじれ具合(-0.5〜0.5) 110 LMT_LG=800:LMT_ZM=90:'< ズームの制限(距離) 120 PX=90:PY=-68:PZ=82 :'< カメラ座標 121 IF PAD(0,0) >= &H10 AND PAD(0,0) < &H20 THEN ANALOG = 1 122 '▲ アナログデバイス認識 130 S=.005:'STATIC:cam_rot angle for digtal pad 140 SETDISP 2 150 ' 160 ' テクスチャの準備 170 ' 180 LINE (63,0)-(0,63),RGB(31,25,21) 190 FOR I=0 TO 30 200 PSET (RND(64),RND(64)),RGB(RND(32),RND(32),16+RND(16)): NEXT 210 FOR I=0 TO 1:FOR J=0 TO 1 220 GCOPY (0,0)-(63,63) TO (I*64,J*64):NEXT J,I 230 ' 240 ' ポリゴンの定義 250 ' 260 GOSUB *CHANGE_VTX 270 SETPOLYGON 0,5,0:FOR I=0 TO 4 280 SETPOLYGON,(I,(I+1)MOD 5,5+((I+1)MOD 5),5+I MOD 5): NEXT 290 SETTEX 0,64,64,32768: SETATR 0,100,(0,1,3,0,0,0) 300 OBJATR 1,0,0: OBJLINK 1,0: OBJTYPE 1,4 310 OBJ(1,@ZP)=0:OBJ(1,@YRV)=.01 320 ' 330 ' パッド入力 (ねじれ具合とカメラの位置の変更) 340 ' 350 *LOOP 360 I=(I+1)AND 63 370 GCOPY (I,I)-(I+63,I+63) TO TX$ 380 SETTEX 0,64,64,32768,RIGHT$(TX$,LEN(TX$)-4) 390 DIS=XDIST(PX,PY,PZ) 400 HDG=OBJ(0,@YR):PTC=OBJ(0,@XR) 410 P=PAD(0,1):ZM=0:ANG=0 420 IF P AND @PAD_LEFT AND T>-.5 THEN T=T-&H0.01:GOSUB *CHANGE_VTX 430 IF P AND @PAD_RIGHT AND T< .5 THEN T=T+&H0.01:GOSUB *CHANGE_VTX 440 IF P AND @PAD_Z AND DIS>LMT_ZM THEN ZM=-1:GOSUB *CAM_ZOOM 450 IF P AND @PAD_C AND DISANG 471 ELSE 480 IF P AND @PAD_DOWN THEN IF PY>0 AND PTC<=.76 THEN ELSE ANG= S 490 IF P AND @PAD_UP THEN IF PY<0 AND PTC>=.24 THEN ELSE ANG=-S 491 ENDIF 500 *VER_ROT 510 IF ANALOG AND ((PY<0 AND PTC>=.24) AND AY<0) OR ((PY>0 AND PTC<=.76) AND AY>0) THEN *HRZ_ROT 520 X=XDIST(PX,PZ):IF ANALOG THEN ANG=AY 530 PRV_X=X:Y=PY:GOSUB *ROT_2D 540 D=X/PRV_X:PX=PX*D:PZ=PZ*D:PY=Y 550 *HRZ_ROT 551 IF ANALOG THEN 560 ANG=AX 570 X=PX:Y=PZ:GOSUB *ROT_2D 580 PX=X:PZ=Y 581 ENDIF 590 CAMERA (PX,PY,PZ)TO 1 600 LOCATE 0,0 610 PRINT USING "TWIST=##.####";T 620 PRINT USING "PX=#####.####";PX 630 PRINT USING "PY=#####.####";PY 640 PRINT USING "PZ=#####.####";PZ 650 PRINT USING "PTC=#.####";PTC 660 PRINT USING "DIST=###.####";DIS 670 VSYNC :GOTO *LOOP 680 ' 690 ' ねじれ具合を変更する 700 ' 710 *CHANGE_VTX 720 SETVERTEX 0,10 730 FOR J=0 TO 4:SETVERTEX (XSIN(J/5 )*60,-30,XCOS(J/5 )*60):NEXT 740 FOR J=0 TO 4:SETVERTEX (XSIN(J/5+T)*60, 30,XCOS(J/5+T)*60):NEXT 750 ' 760 ' 770 ' 780 *CAM_ZOOM 790 BNK=0 800 VX=XSIN(HDG)*XCOS(PTC)*XCOS(BNK)+XSIN(PTC)*XSIN(BNK) 810 VZ=XCOS(HDG)*XCOS(PTC)+XCOS(BNK)*XSIN(BNK) 820 VY=XCOS(PTC)*-XSIN(PTC) 830 IF (PTC<.76 AND PY>0) OR (PTC>.24 AND PY<0) THEN VX=0:VZ=0:VY=SGN(PY) 840 PX=PX+VX*ZM 850 PZ=PZ-VZ*ZM 860 PY=PY+VY*ZM 870 RETURN 880 ' 890 ' 900 ' 910 *ROT_2D 920 SA=XSIN(ANG):CA=XCOS(ANG) 930 X2=CA*X-SA*Y:Y2=SA*X+CA*Y 940 X=X2 : Y=Y2 :RETURN