100 SCREEN 0:DIM V_NO(3),E(2) 110 FOR I=0 TO 14 : L$=L$+CHR$(I) : NEXT 120 L$=L$+"0123456789ABCDEFGHIJKLMNOPQRSTUWXYZ":FONT_MAX=LEN(L$) 130 FONT_PTR = 11 140 ' 150 ' テクスチャ作成 160 ' 170 SCREEN 0 180 FOR I=0 TO 63:FOR J=0 TO 63 190 Y=(RND(0)+I+J)/4:R=(RND(0)+I+J)/4:PSET (I,J),RGBADD(RGBADD(0,Y,Y,Y*.7),R,0,0) 200 NEXT J,I:GCOPY (0,0)-(63,63) TO A$:CLS 0 210 ' 220 ' メインループ 230 ' 240 *MAIN 250 SCREEN 0:SPRWINDOW,,,,,320/4,224/4:CAMERA (0,0,-130) TO (0,0,0) 260 TEX_ID=0:SETTEX TEX_ID,64,64,32768,RIGHT$(A$,64*64*2): 'テクスチャ定義 270 FONT_NO = ASC(MID$(L$,FONT_PTR+1,1)): 'フォント番号をセット 280 POLY_ID = POLYGONID(-1): 'ポリゴンIDを取得 290 VERT_ID = VERTEXID(-1): '頂点IDを取得 300 ATR_NO = ATRID(-1): 'アトリビュートIDを取得 310 SETPFONT 1,FONT_NO: 'FONT_NOのポリゴンを定義 320 OBJ(1,@XP)=0,0:OBJ(1,@XRV)=.001,.0015,.0013 330 FACES = POLYGONID(POLY_ID): 'ポリゴンの面の数を取得 340 CUR_FACE = 0: '現在表示中の面番号 350 VERTEXES = VERTEXID(VERT_ID): ' 頂点の数を取得 360 ' 370 ' CUR_FACE番めのポリゴンのみ半透明にして残りにはテクスチャを張る 380 ' 390 *TEXTURE_CHANGE 400 SETATR ATR_NO,FACES 410 FOR I=0 TO FACES-1 420 IF I=CUR_FACE THEN SETATR (4,1,3,0,RGB(0,31,0),3) ELSE SETATR (0,1,3,TEX_ID, 0,8+3) 430 NEXT 440 ' 450 ' テキスト描画 460 ' 470 *TEXT_DRAW 480 LOCATE 0,14 490 PRINT "FONT No.";FONT_NO 500 PRINT "FACES ";FACES 510 PRINT "CUR.FACE";CUR_FACE 520 VER_ID = POLYGONID(POLY_ID,CUR_FACE) 530 PRINT "VERTEXES";VERTEXES 540 FOR I=0 TO 3 550 V_NO(I)=POLYGONID(POLY_ID,CUR_FACE,I) 560 PRINT USING "## (";V_NO(I);:FOR J=0 TO 2 570 PRINT USING "####";VERTEXID(VERT_ID,V_NO(I),J);:NEXT :PRINT ")":NEXT 580 ' 590 ' カーソル表示 600 ' 610 *PUT_CURSOR 620 LINE (OLD_X*32+40,OLD_Y*8+152)-(OLD_X*32+71,OLD_Y*8+159),0,BF 630 LINE (NEW_X*32+40,NEW_Y*8+152)-(NEW_X*32+71,NEW_Y*8+159),RGB(0,0,31),BF 640 OLD_X=NEW_X:OLD_Y=NEW_Y 650 ' 660 ' PAD 入力 670 ' 680 *GETPAD 690 P=PAD(0,1):IF P THEN VSYNC 10 ELSE 690 700 IF P AND @PAD_L THEN FONT_PTR=(FONT_PTR-1+FONT_MAX)MOD FONT_MAX : GOTO *MAIN 710 IF P AND @PAD_R THEN FONT_PTR=(FONT_PTR+1 )MOD FONT_MAX : GOTO *MAIN 720 IF P AND @PAD_Y THEN CUR_FACE=(CUR_FACE-1+FACES)MOD FACES : GOTO *TEXTURE_CHANGE 730 IF P AND @PAD_Z THEN CUR_FACE=(CUR_FACE+1 )MOD FACES : GOTO *TEXTURE_CHANGE 740 IF P AND @PAD_UP THEN NEW_Y=(NEW_Y-1) AND 3 : GOTO *PUT_CURSOR 750 IF P AND @PAD_DOWN THEN NEW_Y=(NEW_Y+1) AND 3 : GOTO *PUT_CURSOR 760 IF P AND @PAD_LEFT THEN NEW_X=(NEW_X+2) MOD 3 : GOTO *PUT_CURSOR 770 IF P AND @PAD_RIGHT THEN NEW_X=(NEW_X+1) MOD 3 : GOTO *PUT_CURSOR 780 IF P AND @PAD_B THEN GOSUB *GET_VID:E(NEW_X)=E(NEW_X)-1: GOTO *SET_VTX 790 IF P AND @PAD_C THEN GOSUB *GET_VID:E(NEW_X)=E(NEW_X)+1: GOTO *SET_VTX 800 GOTO *GETPAD 810 *GET_VID 820 FOR I=0 TO 2:E(I)=VERTEXID(VERT_ID,V_NO(NEW_Y),I):NEXT :RETURN 830 *SET_VTX 840 SETVERTEX VERT_ID,VERTEXES,@V_NO(NEW_Y),(E(0),E(1),E(2)) 850 GOTO *TEXT_DRAW