100 SCREEN 0:CLEAR 256,1300 110 DIM TXPAL(255) 120 ' 130 ' 元絵の作成(32768色) 140 ' 150 GLOAD "CD:TEKEND.1" 160 X=180:Y=120:GCOPY (X,Y)-(X+63,Y+63) TO (0,0) 170 ' 180 '====================================== 190 ' 元絵を半透明ポリゴン用に加工 200 '====================================== 210 ' ▼ 32768色のテクスチャをRAMに保存 220 GCOPY (0,0)-(63,63) TO TX$ 230 POKE 128,0,RIGHT$(TX$,LEN(TX$)-4) 240 ' 250 '====================================== 260 ' 元絵を回転BG用に加工 270 '====================================== 280 ' ▼ 32768色->256色変換処理 290 C=1:TX$=STRW$(2,64):POKE 0,0,STRING$(32768,0) 300 FOR I=0 TO 63:FOR J=0 TO 63 310 P=POINT(J,I):PAL=PEEK(0,P) 320 IF PAL=0 THEN POKE 0,P,C:TXPAL(C)=P:PAL=C:C=C+1 330 TX$=TX$+CHR$(PAL) 340 NEXT J,I 350 ' ▼ グラフィックをキャラクタ形式に変換してRAMに保存 360 SCREEN 1:GCOPY TX$ TO (0,0) 370 TX$="":FOR I=0 TO 7:FOR J=0 TO 7 380 GCOPY (J*8,I*8)-(J*8+7,I*8+7) TO I$ 390 TX$=TX$+RIGHT$(I$,64) 400 NEXT J,I 410 POKE 0,0,TX$ 420 ' 430 ' 回転BG面の準備 440 ' 450 SCREEN 6,,,-1:ROTOVER 0 460 FOR I=0 TO 255:PALETTE 8,I,TXPAL(I):NEXT 470 SETCHR 8,0,PEEK$(0,0,64*64) 480 TX$=CHR$(8)+CHR$(8):FOR I=0 TO 127:TX$=TX$+STRW$(1,I*2):NEXT 490 FOR I=0 TO 127 STEP 8:FOR J=0 TO 127 STEP 8 500 CCOPY TX$ TO 8,(I,J) 510 NEXT J,I 520 ' 530 ' メインルーチン 540 ' 550 *MAIN 560 OBJ NEW :SPEED=4:'<= スクロール速度 570 POS_Y=128:M=&HFFFF.FFFC 580 ' 590 ' 回転BG面にあわせた半透明ポリゴンを定義する 600 ' 610 SETTEX 0,64,64,32768,PEEK$(128,0,64*64*2) 620 SETVERTEX 0,16:FOR I=0 TO 1:FOR J=0 TO 1 630 SETVERTEX (J*64,0,I*64), (J*64+63,0,I*64) 640 SETVERTEX (J*64+63,0,I*64+63),(J*64,0,I*64+63):NEXT J,I 650 SETPOLYGON 0,4,0:FOR I=0 TO 15 STEP 4 660 SETPOLYGON,(I+3,I+2,I+1,I):NEXT 670 SETATR 0,9,(0,1,2,0,0,3) 680 '▼ 水没ポリゴンの定義 690 SETPFONT 1,12,(.5,.5,.5,64,40,72) 700 OBJ(1,@XP)=0,0,-SPEED 710 '▼ 半透明水面の定義 720 OBJATR 2,0,0:OBJ(2,@TYPE)=4:OBJ(2,@PARENT)=1 730 OBJ(2,@XS)=&H0.FFFC,&H0.FFFC,&H0.FFFC 740 ' 750 ' 760 *MAIN_LOOP 770 ' パッド入力 780 P=PAD(0,1) 790 IF P AND @PAD_LEFT THEN POS_X=(POS_X-1) AND! M 800 IF P AND @PAD_RIGHT THEN POS_X=(POS_X+1) AND! M 810 ' 画面の傾き計算 820 DX=POS_X_OLD-POS_X 830 IF DX<0 AND TLT>-100 THEN TLT=TLT-1 840 IF DX>0 AND TLT<100 THEN TLT=TLT+1 850 IF DX=0 THEN TLT=TLT+(TLT>0)-(TLT<0) 860 ' 視点変更 870 CAMERA (POS_X,-POS_Y-64,POS_Z-48),TLT/5000 TO (POS_X,0,POS_Z),BG 880 POS_X = (POS_X+&H0.2+TLT/100*(DX=0))AND! M 890 ' 900 ' 座標更新 910 POS_X_OLD = POS_X 920 POS_Z = (POS_Z+SPEED) AND! M 930 ' 940 'ポリゴンの位置を再計算 950 IF POS_Z > OBJ(1,@ZP)+240 THEN 960 OBJ(1,@XP)=POS_X AND (&H1FFFF-63),,OBJ(1,@ZP)+64*8 970 ENDIF 980 VSYNC 990 GOTO *MAIN_LOOP