100 SCREEN 0:CLEAR 16*64,1380 110 DIM TXPAL(255) 120 ' 130 ' 元絵の作成(32768色) 140 ' 150 LINE (0,0)-(63,63),RGB(10,10,31),BF 151 F$=FILES$("*.1"):'<--- .1 ファイルがあったら読み込む 152 IF LEN(F$)>8 THEN 153 GLOAD MID$(F$,1,10) 154 ELSE :'<--- そうでなければつくる 160 FOR I=0 TO 50 170 X=RND(64):Y=RND(64):W=RND(10) 180 FOR J=0 TO 4+RND(16):FOR K=0 TO 3+RND(8) 190 XX=(X+J)AND 63:YY=(Y+K)AND 63:' <--- 上下左右が連続になるようにする 200 PSET (XX,YY),RGBTO(POINT(XX,YY),RGB(15,15,31)) 210 NEXT K,J 220 NEXT 222 ENDIF 225 F$="":'<--- この行を消すとなぜか重くなる(T-T) 230 ' 240 ' 32768色->256色変換処理 250 ' 260 C=1:TX$=STRW$(2,64):POKE 0,0,STRING$(32768,0) 270 FOR I=0 TO 63:FOR J=0 TO 63 280 P=POINT(J,I):PAL=PEEK(0,P) 290 IF PAL=0 THEN POKE 0,P,C:TXPAL(C)=P:PAL=C:C=C+1 300 TX$=TX$+CHR$(PAL) 310 NEXT J,I 320 SCREEN 1 330 FOR I=0 TO 255:PALETTE 0,I,TXPAL(I):NEXT 340 GCOPY TX$ TO (128,0) 350 ' 360 ' テクスチャを波立たせる 370 ' 380 FOR H=0 TO 63 390 T=-6/360:' <--- 6度傾けた場所から眺めたとして計算する 400 FOR I=0 TO 63.999 STEP .2 410 Y=I/64*XCOS(T)-XSIN(I/64)*XSIN(T):'<--- Y=XSIN(I/64)を T度 回転 420 GCOPY (128,(I+H)AND 63)-(191,(I+H)AND 63) TO (0,(Y*64/XCOS(T)+H)AND 63) 430 NEXT 440 ' 450 '▼ グラフィックをキャラクタ形式に変換してRAMに保存 460 TX$="":FOR J=0 TO 7:FOR K=0 TO 7 470 GCOPY (K*8,J*8)-(K*8+7,J*8+7) TO I$ 480 TX$=TX$+RIGHT$(I$,64) 490 NEXT K,J 500 POKE H*16,0,TX$ 510 NEXT 520 ' 530 ' 回転BG面の準備 540 ' 550 SCREEN 6,,,-1:COLOR,,,RGB(20,22,31):ROTOVER 0 560 FOR I=0 TO 255:PALETTE 8,I,TXPAL(I):NEXT 570 SETCHR 8,0,PEEK$(0,0,64*64) 580 FOR J=0 TO 127:FOR K=0 TO 127 590 PUTCHR 8,(K,J),((J AND 7)*8 + (K AND 7))*2 600 NEXT K,J 610 ' 620 ' メインルーチン 630 ' 640 *MAIN 650 POS_Y=32:M=&HFFFF.FFFC 660 FOR I=1 TO 15 STEP 2:' <--- 水面から出ている物体と影の描画 670 SETPFONT I,ASC("A"),(10,10,10,0,-10*35,1000+I*500),RGB(31,0,0) 680 A_ID=ATRID(-1):SETPFONT I+1,ASC("A"),(10,-10,10,0,10*35,1000+I*500) 690 SETATR A_ID,27,(4,1,1,0,0,0) 700 NEXT 710 *MAIN_LOOP 720 P=PAD(0,1) 730 IF P AND @PAD_UP AND POS_Y> 32 THEN POS_Y=(POS_Y-1) AND! M 740 IF P AND @PAD_DOWN AND POS_Y<128 THEN POS_Y=(POS_Y+1) AND! M 750 IF P AND @PAD_LEFT THEN POS_X=(POS_X-1) AND! M 760 IF P AND @PAD_RIGHT THEN POS_X=(POS_X+1) AND! M 762 DX=POS_X_OLD-POS_X 763 IF DX<0 AND TLT>-100 THEN TLT=TLT-1 764 IF DX>0 AND TLT<100 THEN TLT=TLT+1 765 IF DX=0 THEN TLT=TLT+(TLT>0)-(TLT<0) 770 CAMERA (POS_X,-POS_Y,POS_Z-200),TLT/5000 TO (POS_X,0,POS_Z),BG 780 F = (F+1)AND 127:POS_X=(POS_X+&H0.2+TLT/100*(DX=0))AND! M:POS_Z=(POS_Z+&H0.3)AND! M 790 SETCHR 8,0,PEEK$(INT(F/2)*16,0,64*64):VSYNC :' <--- キャラクタ書き換え 800 POS_X_OLD=POS_X:GOTO *MAIN_LOOP