1000 ' 1001 CLEAR ,&H5000 1002 ADR=&H5E00:IF PEEK(ADR)=0 THEN LOADM "PRN.BIN" 1003 AD2=&H6600:AD3=&H6900 1005 RANDOMIZE TIME/4 1010 SCREEN@1:CLS:KANJI:WIDTH 40,25 1020 PALETTE@:GOSUB 4000 1030 GOSUB 2000 1040 DIM SC%(4),N$(11),HS(11),LN(11),LV(11) 1050 SC%(0)=0:SC%(1)=100:SC%(2)=500:SC%(3)=1000:SC%(4)=2000 1060 FOR I=1 TO 10:N$(I)="CMP":HS(I)=(11-I)*1000:NEXT 1070 PLAY #1,"@43O1T255V15" 1090 GOTO 7000 1100 'MAIN ------------------------------------------------------------------- 1200 ' 1202 SC=0:LN=0:LV=1:GOSUB 1820 1205 EXEC &H6000:LV%=5:X%=4 1206 C0%=INT(RND*7)+1 1210 C1%=C0%:C0%=INT(RND*7)+1 1215 LINE(XS+X%*8,0)-(XS+(X%+4)*8,15),PSET,0,BF 1220 Y%=0:CALL AD3(X%,Y%,LV%,C0%):EXEC &H5E92 1225 IF PEEK(&H6461)>0 THEN 1400 1230 Y%=3:CALL AD3(X%,Y%,LV%,C1%):EXEC &H6023 1240 ' 1280 GOSUB 1600 1390 GOTO 1210 1400 'GAME OVER -------------------------------------------------------------- 1401 ' 1405 SCREEN 7,7 1410 FOR I=3 TO 22:Y=I*8 1420 LINE(XS+8,Y)-(XE-8,Y+7),OR,[0,0,12*16],BF 1425 FOR T=0 TO 50:NEXT 1430 NEXT 1445 SCREEN 6,7 1446 X=XPOS+1 1450 Y= 6:PR$=" GAME ":GOSUB 2400 1455 Y= 7:PR$=" OVER ":GOSUB 2400 1500 ' 1510 HS=11:FOR I=1 TO 10:IF SC>HS(I) THEN HS=I:I=99 1520 NEXT:IF I=11 THEN 1570 1530 FOR I=11 TO HS+1 STEP -1 1540 N$(I)=N$(I-1):HS(I)=HS(I-1):LN(I)=LN(I-1):LV(I)=LV(I-1):NEXT 1550 GOSUB 1900:N$(HS)=N$ 1560 HS(HS)=SC:LN(HS)=LN:LV(HS)=LV:ST=0:GOTO 1590 1570 Y=10:PR$="PUSH TRG":GOSUB 2400 1580 GOSUB 7900 1590 SCREEN 6,7:RETURN 1600 'DELETE -------------------------------------------------------------- 1601 ' 1605 GS%=0:Y1%=0:Y2%=0:Y3%=0:Y4%=0 1610 CALL AD2(GS%,Y1%,Y2%,Y3%,Y4%) 1620 ON GS%+1 GOTO 1790,1660,1650,1640,1630 1630 LINE(XS+8,Y4%*8)-(XE-8,Y4%*8+7),PSET,2,BF 1640 LINE(XS+8,Y3%*8)-(XE-8,Y3%*8+7),PSET,2,BF 1650 LINE(XS+8,Y2%*8)-(XE-8,Y2%*8+7),PSET,2,BF 1660 LINE(XS+8,Y1%*8)-(XE-8,Y1%*8+7),PSET,2,BF 1665 FOR T=12 TO 12*GS%+100:NEXT 1720 ON GS% GOTO 1760,1750,1740,1730 1730 LINE(XS+8,Y4%*8)-(XE-8,Y4%*8+7),PSET,0,BF 1740 LINE(XS+8,Y3%*8)-(XE-8,Y3%*8+7),PSET,0,BF 1750 LINE(XS+8,Y2%*8)-(XE-8,Y2%*8+7),PSET,0,BF 1760 LINE(XS+8,Y1%*8)-(XE-8,Y1%*8+7),PSET,0,BF 1765 FOR T=12 TO 12*GS%:NEXT 1766 IF GS%>1 THEN PR$=STR$(SC%(GS%)):PR$=STRING$(5-LEN(PR$),32)+PR$: SYMBOL((XPOS+2)*8,Y1%*8),PR$,1,1,6 1768 PLAY #1,"A":FOR T=0 TO 200:NEXT 1770 LINE(XS+8,Y1%*8)-(XE-8,Y1%*8+7),PSET,0,BF 1780 EXEC &H6800 1790 ' 1800 SC=SC+SC%(GS%):LN=LN+GS%:CN=CN-(GS%>0) 1810 IF CN=4 THEN CN=0:LV=LV+1:LV%=LV%+5*-(LV%<45):IF LV MOD 10=0 THEN LV%=LV/10+6:IF LV=30 THEN LV%=40 1820 LOCATE XPOS-13,3:PRINT USING "########";SC 1830 LOCATE XPOS-13,6:PRINT USING "########";LN 1840 LOCATE XPOS-13,9:PRINT USING "########";LV 1850 RETURN 1900 'INPUT NAME -------------------------------------------------------- 1905 X=XPOS+1 1910 Y=14:PR$=" NAME ":GOSUB 2400 1920 Y=15:PR$=" INPUT ":GOSUB 2400 1921 CH$="ABCDEFGHIJKLMNOPQRSTUVWXYZ.-!" 1925 TI=TIME:C=0 1930 N$="":AC=0:FOR I=1 TO 3 1940 S1=STICK(1):IF S1=1 THEN AC=AC-1:IF AC<0 THEN AC=28 1950 IF S1=5 THEN AC=AC+1:IF AC>28 THEN AC=0 1954 LOCATE X+1+I,Y+2:PRINT MID$(CH$,AC+1,1) 1955 C=C+1:COLOR (C MOD 4+3):LOCATE X+I,Y+3:PRINT " ~":COLOR 7 1956 FOR TM=0 TO 10:NEXT:IF ABS(TIME-TI)>30 THEN I=3:GOTO 1980 1960 S2=S0:S0=STRIG(1):IF S2=0 AND S0<>0 THEN 1970 1965 GOTO 1940 1970 N$=N$+MID$(CH$,AC+1,1) 1980 NEXT:N$=N$+STRING$(3-LEN(N$),32) 1990 RETURN 2000 'GET BLOCK -------------------------------------------------------------- 2010 SCREEN 7,7 2020 XPOS=15:XS=(XPOS-1)*8:XE=(XPOS+11)*8-1:X1=(XPOS+3)*8-1:X2=(XPOS+7)*8+1 2030 POKE &H5E57,(XPOS-1) 2040 FORI=1 TO 8:READ A$ 2050 FORJ=1 TO 8:C=VAL(MID$(A$,J,1))*16 2060 PSET(J-1,I-1,[0,0,C]) 2070 NEXT:NEXT 2080 EXEC &H6A03:CLS 2090 RETURN 2100 'SET SCREEN --------------------------------------------------------------- 2105 SCREEN 7,0:CLS 2106 EXEC &H5A00 2110 LINE (XS , 16)-(XE ,199) ,PSET,[128,128,128],BF 2120 CONNECT(X1-1, 17)-(XS+1, 17)-(XS+1,198),[ 80, 80, 80],PSET 2130 CONNECT(XS+7,185)-(XE-6,185)-(XE-6, 23),[ 80, 80, 80],PSET 2135 CONNECT(X2 , 22)-(X2 , 17)-(XE-1, 17),[ 80, 80, 80],PSET 2140 CONNECT(X1-1, 17)-(X1-1, 22)-(XS+6, 22)-(XS+6,185),[160,160,160],PSET 2150 CONNECT(XS+1,198)-(XE-1,198)-(XE-1, 17),[160,160,160],PSET 2160 CONNECT(X2 , 22)-(XE-6, 22) ,[160,160,160],PSET 2175 LINE((XPOS+3)*8,0*8)-((XPOS+6)*8+7, 2*8+7),PSET,0,BF 2176 LINE( XPOS *8,3*8)-((XPOS+9)*8+7,22*8+7),PSET,0,BF 2200 ' 2210 SX=XPOS+3:SY=0:EX=XPOS+ 7:EY= 2:GOSUB 2500 2220 SX=XPOS :SY=3:EX=XPOS+10:EY=23:GOSUB 2500 2300 ' 2301 X=XPOS-10 2305 Y=2:PR$="SCORE":GOSUB 2400:Y=5:PR$="LINES":GOSUB 2400 2310 Y=8:PR$="LEVEL":GOSUB 2400 2320 X=XPOS-1:Y=1:PR$="NEXT":GOSUB 2400 2330 SCREEN 6,7 2340 RETURN 2400 'TEXT PRINT ------------------------------------------------------------- 2410 XT=X*8:YT=Y*8 2420 SYMBOL(XT,YT),PR$,1,1,6:SYMBOL(XT-1,YT),PR$,1,1,6 2430 RETURN 2450 'TEXT PRINT ------------------------------------------------------------- 2460 XT=X*8:YT=Y*8 2470 SYMBOL(XT,YT),PR$,1,1,2:SYMBOL(XT-1,YT),PR$,1,1,2 2480 RETURN 2500 'BLOCK GET(XS,YS)-(XE,YE) ------------------------------------------------ 2510 POKE &H6AC7,SX:POKE &H6AC8,SY:POKE &H6AC9,EX:POKE &H6ACA,EY 2520 EXEC &H6A00 2530 RETURN 4000 'PALET --------------------------------------------------------------- 4010 C1=1*16:C2=2*256:C3=C1+C2:C4=1*256:C5=C1+C4:C6=C2+C4:C7=C1+C2+C4 4020 FOR I=0 TO 3:P=I*3*16+96:Z=96*-(I=3) 4030 PALETTE C1+I,[Z ,Z,P]:PALETTE C2+I,[Z,P,Z]:PALETTE C3+I,[Z,P,P] 4040 PALETTE C4+I,[P ,Z,Z]:PALETTE C5+I,[P,Z,P]:PALETTE C6+I,[P,P,Z] 4050 PALETTE C7+I,[P*.6,P,Z]:PALETTE I,0:PALETTE 240+I,0 4060 PALETTE 4080+I,7 4070 NEXT 4080 PALETTE 240+3,[160,160,160]:PALETTE 240+4,[160,160,160] 4090 FOR I=12 TO 15:P=96*-(I>13) 4100 PALETTE C1+I,[P,P,P]:PALETTE C2+I,[P,P,P]:PALETTE C3+I,[P,P,P] 4110 PALETTE C4+I,[P,P,P]:PALETTE C5+I,[P,P,P]:PALETTE C6+I,[P,P,P] 4120 PALETTE C7+I,[P,P,P]:PALETTE I,0 4130 NEXT 4140 GOSUB 60000 4150 RETURN 7000 'TITLE ---------------------------------------------------------------- 7010 SCREEN 7,0:CLS 7020 X=11:Y=20:PR$="PUSH STICK TRIGGER":GOSUB 2450 7022 X= 6:Y=22:PR$="COPYRIGHT (C) 1990 by TOMOKUN":GOSUB 2400 7030 SX=0:SY=0:EX=40:EY=15:GOSUB 2500 7040 SCREEN 6,7 7041 FOR I=0 TO 28:O=I*4 7042 LINE( 40+O,76-I)-(279-O,76-I),PSET,[0,16,0] 7043 LINE( 40+O,76+I)-(279-O,76+I),PSET,[0,16,0] 7044 NEXT 7045 'LINE(56,48)-(56+6*4*8+15,64+8*4+7),PSET,[0,16,0],BF 7046 SYMBOL(63+3,56),"TETRIS",4,6,[0,0,0] 7050 FOR I=0 TO 6 7060 SYMBOL(63-I,56),"TETRIS",4,6,[32,0,0] 7070 NEXT 7080 ' 7200 GOSUB 7900 7210 IF ST THEN GOSUB 2100:GOSUB 1100:GOTO 7210 7220 GOSUB 8000:IF ST THEN 7210 7290 GOTO 7000 7900 ' 7910 FOR TM=0 TO 300:P=ABS((TM MOD 16)-8):PALETTE 240,[P*16+112,240,0] 7920 ST=STRIG(1):IF ST THEN TM=9999 7930 NEXT 7940 PALETTE 240,0:RETURN 8000 'HI-SCORE ---------------------------------------------------------------- 8010 SCREEN 7,7:CLS:PSET(0,0,[0,0,16]) 8020 SX=0:SY=0:EX=40:EY=25:GOSUB 2500 8025 LINE(0,0)-(319,199),OR,[0,16,0],BF 8026 PALETTE 240,2:PALETTE 4080,6 8030 COLOR 6:LOCATE 6,2:PRINT " NAME SCORE LINES LEVEL" 8040 FOR I=1 TO 10:Y=I*2+2:LOCATE 6,Y:COLOR 7:IF HS=I THEN COLOR 2 8050 PRINT USING "## ";I;:PRINT N$(I);:PRINT USING "##########";HS(I); 8060 PRINT USING "######";LN(I);LV(I) 8070 NEXT 8080 GOSUB 7900 8085 PALETTE 240,0:PALETTE 4080,7:COLOR 7 8090 RETURN 9000 'BLOCK DATA 9010 DATA 33333332 9020 DATA 31111220 9030 DATA 31112210 9040 DATA 31122110 9050 DATA 31221110 9060 DATA 32211110 9070 DATA 32111110 9080 DATA 20000000 9090 ' 60000 ' 60010 POKE &H5A5B,15 60020 FOR P%=0 TO 15:AD%=&H5000+P%*3 60030 P0%=PEEK(AD%):P1%=PEEK(AD%+1):P2%=PEEK(AD%+2) 60040 PALETTE P%*16+3840,[P2%*16,P1%*16,P0%*16] 60050 NEXT 60130 RETURN