REM STAR WORMS REM A VIC-20 game written by Tom Stewart REM circa 1982 REM REM NH is number of holes REM SC is score REM SN is number of worms used REM L is length of worm REM M4 is number of moves made REM TI is time REM REM Spaces were eliminated wherever possible to save memory REM Statements were strung out on a line separated by : to save line numbers, and therefore memory REM REM These remarks are not part of the VIC-20 listing REM VIC-20 program starts on the next line 5 POKE52,28:POKE56,28:CLR 10 DIMJS(2,2):POKE37139,0:DD=37154:PA=37137:PB=37152 20 FORI=0TO2:FORJ=0TO2:READJS(J,I):NEXTJ,I 30 DATA-23,-22,-21,-1,0,1,21,22,23 50 PRINT"“ ***STAR WORMS’***" 104 GOSUB10000 120 INPUT"BLACK HOLES";NH 130 PRINT"“" 135 PRINT" !!!!STAR WORMS!!!!" 140 POKE36879,8 200 L=7:M1=7790:M2=8185:C1=38510:S1=0:S2=60:S3=58:A=6:B=2:NS=M2-M1-L-NH+1:SC=0:SN=0 260 POKE 36878,15 400 M3=M2-M1 410 R=0:POKE36875,0 415 FOR I=0 TO M3-L:CS=INT(RND(0)*6)+2:POKEM1+I,62:POKEC1+I,CS:NEXTI:IFNH=0THEN550 500 FORI=1TONH 510 T=INT(RND(0)*(M3-L))+1:IFPEEK(M1+T)=15THEN510 520 POKEM1+T,15:POKEC1+T,0:NEXTI 550 FOR I=1 TO L 560 X(I)= M2-L+I 570 POKEX(I),S2:POKEC1+X(I)-M1,B:NEXTI 580 POKEX(1),S1 590 IFSC=0THENTI$="000000" 591 ND=0:KB=0 592 GOSUB11000:IFSC<50000THENIFFR=1THENND=0:GOTO695 593 IFQ=0THEN605 594 ND=Q:KB=0:GOTO700 595 IFKB=1THEN605 596 ND=0:GOTO700 605 GETN$:IFN$=""THEN695 606 KB=1 610 IFN$="W"THENND=-22 620 IFN$="E"THENND=-21 630 IFN$="D"THENND=1 640 IFN$="C"THENND=23 650 IFN$="X"THENND=22 660 IFN$="Z"THENND=21 670 IFN$="A"THENND=-1 675 IFN$="Q"THENND=-23 680 IFN$="S"THENND=0 695 IFND=0THEN592 700 T=X(1)+ND:M4=M4+1 710 IFT<=M2ANDT>=M1THEN716 711 IFABS(ND)=23THENND=SGN(ND)*21:GOTO715 712 IFABS(ND)=21THENND=SGN(ND)*23 715 ND=-ND:GOTO700 716 C=PEEK(C1+T-M1)AND15 720 IFC=0THENGOTO1000 730 IFPEEK(T)=S3ORPEEK(T)=S2THEN750 731 IFABS(ND)=21ORABS(ND)=23THEND1=2:GOTO735 734 D1=1 735 SC=SC+10*D1*(C+1):R=R+1:PRINT"";SC 750 POKEX(L),S3:POKEC1+X(L)-M1,A 760 FOR I=0TOL-2 770 X(L-I)=X(L-I-1):NEXTI 780 X(1)=T 790 GOSUB2000:GOTO592 1000 SN=SN+1:POKE X(1),S2:SC=SC-1000*SN:PRINT" ";SC:POKE36875,0 1060 FOR J=LTO1STEP-1 1061 POKE36876,240-14*J 1065 FORK=1TO50:NEXTK 1070 POKE X(J),S3:POKEC1+X(J)-M1,B:NEXTJ 1072 POKE36876,0 1075 PRINT"";SN;" GONE":PRINT" PRESS F1" 1076 POKE36875,0 1077 FOR J=1TO15 1082 FOR M=200TO220+J*2:GETN$:IFN$="…"THENPRINT"‘ ":GOTO1084 1083 POKE 36876,M:POKE36879,M:NEXTM:NEXTJ 1084 POKE36876,0:POKE36879,8:POKET,S3:POKEC1+T-M1,B:IFN$="…"THEN550 1091 POKE36875,0:POKE36879,27:POKE36878,0 1095 PRINT"“GAME OVER":PRINT"TOTAL SCORE = ";SC:PRINT"TIME = ";INT(10*TI/60)/10 1096 PRINT"NO. WORMS = ";SN:PRINT"PTS/WORM = ";INT(10*SC/SN)/10 1100 PRINT"TOTAL MOVES = ";M4:PRINT"PTS/MIN = ";INT(SC/(TI/36000))/10 1105 PRINT"PTS/MOVE = ";INT(10*SC/M4)/10 1110 EX=INT(10*(SC-TI/6-10*M4))/10:AJ=NH*EX/10:PRINT"EXPERTISE = ";EX 1115 PRINT"DIFFICULTY = ";NH/10 1120 PRINT"ADJUSTED SCORE = ";AJ:PRINT"ANOTHER GAME (Y OR N)?" 1130 GETG$:IFG$=""THEN1130 1140 IFG$="N"THENPOKE36869,240:END 1150 PRINT"“":GOTO120 2000 POKE X(1),S1 2010 POKEX(2),S2 2020 POKEC1+X(1)-M1,B 2030 POKEC1+X(2)-M1,B 2040 POKE 36875,245-(X(1)-M1)/4.3 2045 IF R=NSTHEN410 2050 RETURN 10000 FORI=7168TO7679:POKEI,PEEK(I+25600):NEXT:POKE36869,255 10020 FORI=7664TO7671:READA:POKEI,A:NEXT 10030 FORI=7648TO7655:READA:POKEI,A:NEXT 10040 FORI=7168TO7175:READA:POKEI,A:NEXTI 10042 FORI=7632TO7639:READA:POKEI,A:NEXT 10045 RETURN 10050 DATA0,16,84,56,254,56,84,16,231,195,165,24,24,165,195,231 10060 DATA60,90,153,255,255,153,90,60 10070 DATA0,00,36,24,24,36,00,0 11000 POKEDD,127:Z3=-((PEEK(PB)AND128)=0):POKEDD,255 11010 P=PEEK(PA):Z1=-((PAND8)=0):Z2=((PAND16)=0):Z0=((PAND4)=0) 11020 Z=Z2+Z3:Y=Z0+Z1:Q=JS(Z+1,Y+1):FR=-((PAND32)=0):RETURN