1 REM FIREFLIES 2 REM C64 VERSION 1.1 6/21/84 3 REM COPYRIGHT (C) 1984 BY DAN TOBIAS 4 GOSUB41000:REM INSTRUCTIONS 5 PRINTCHR$(142):REM UPPER CASE MODE 6 POKE53280,0:POKE53281,0:PRINT"" 7 PRINT"[147]":INPUT"TODAY'S DATE (MM/DD/YY)";SD$ 8 GOSUB6000 9 JS=0 10 PRINT:INPUT"(J)OYSTICK OR (K)EYBOARD";I$:IFI$="J"ORI$="[202]"THENJS=-1 12 FORA=54272TO54296:POKEA,0:NEXT:POKE54296,8:POKE54277,0:POKE54278,240 13 POKE54282,3:POKE54284,0:POKE54285,240 20 DIMX%(30),Y%(30),L%(30),TL%(30) 25 GOSUB4000 30 GOTO75 40 REM POSITION 45 PRINTLEFT$("",V)SPC(H-1);:RETURN 75 GOSUB30000 80 REM NG 82 PRINT"[147] FIREFLIES - BY DAN TOBIAS - C64 V1.1" 87 PRINT:PRINT" HIT ANY KEY TO START. "; 88 GETI$:IFI$=""THEN88 89 PRINT"[147]" 90 SN=0:JN=8:OF=0:SC=0 94 POKE53248,255:POKE53249,128 95 POKE53269,PEEK(53269)OR1 100 REM NS 101 I=0:POKE54283,64 102 KB=0:SN=SN+1 103 KO=0 105 X=20:Y=10:IFOF<30THENOF=OF+5 106 TL=120+(OF*6) 107 NF=OF:N2=NF:NL=NF 110 FORA=1TONF 120 X%(A)=INT(RND(0)*38)+2:Y%(A)=INT(RND(0)*19)+2 130 L%(A)=-INT(RND(0)*2):TL%(A)=INT(RND(0)*3) 150 NEXT 155 KX%=(RND(0)*50)-5:KY%=-10:KL%=RND(0)*2:IFRND(0)<.5THENKY%=35 157 KT%=RND(0)*3 160 PRINT"[147]":GOSUB5000 161 V=22:H=1:GOSUB40:PRINT"SCORE:"SC;:H=20:GOSUB40:PRINT"HI SCORE:";HS(0,1) 163 V=23:H=1:GOSUB40:PRINT"FIREFLIES ON SCREEN:"N2; 164 PRINTTAB(24);"TIME LEFT:"TL:PRINT"FIREFLIES LEFT: "N2;TAB(24);"SCREEN #:"SN 165 POKE54275,8:FORI=1TO8:POKE54273,T%(I,0):POKE54272,T%(I,1):POKE54276,65 166 FORJ=1TOT%(I,2):NEXT:POKE54276,64:NEXT 167 GOSUB1000 170 FORA=1TONF 171 KO=KO+1 172 POKE54279,RND(0)*256 173 LC=L%(A):TL%(A)=TL%(A)+1:IFTL%(A)>2THENTL%(A)=0:LC=NOTLC 174 XC=1:YC=1:IFRND(0)<.5THENXC=-1 175 IFRND(0)<.5THENYC=-1 176 F%=0 177 IFX%(A)<2ORX%(A)>39ORY%(A)<2ORY%(A)>20THENF%=-1:GOTO200 190 H=X%(A):V=Y%(A):GOSUB40:PRINT" " 200 X%(A)=X%(A)+XC:Y%(A)=Y%(A)+YC:L%(A)=LC 210 IFX%(A)<2ORX%(A)>39ORY%(A)<2ORY%(A)>20THENN2=N2+(NOTF%):GOTO300 215 IFF%<>0THENN2=N2+1 220 IFNOTL%(A)THEN300 230 H=X%(A):V=Y%(A):GOSUB40:PRINT"[158]." 300 REM 302 V=23:H=21:GOSUB40:PRINTN2"[157] ":V=24:H=21:GOSUB40:PRINTNL"[157] " 303 IFN2=0THENA=999:NEXT:GOTO900 305 GOSUB500 307 IFKO/5=INT(KO/5)THENGOSUB312 310 NEXT:GOSUB800 311 GOTO170 312 REM 315 KB=0 320 XC=SGN(X-KX%):YC=SGN(Y-KY%):LC=KL%:KT%=KT%+1:IFKT%>2THENLC=NOTLC:KT%=0 330 IFKX%<2ORKX%>39ORKY%<2ORKY%>20THEN360 340 H=KX%:V=KY%:GOSUB40:PRINT" " 360 KX%=KX%+XC:KY%=KY%+YC:KL%=LC 370 IFKX%<2ORKX%>39ORKY%<2ORKY%>20THENPOKE54283,64:GOTO400 372 POKE54280,6:POKE54279,RND(0)*256:POKE54283,65 375 IFKL%=0THEN400 380 H=KX%:V=KY%:GOSUB40:PRINT"[209]" 390 KB=1 400 IFKX%X+2ORKY%Y+1THENRETURN 410 H=KX%:V=KY%:GOSUB40:PRINT"[209]" 415 X$="THE KILLER BUG GOT YOU!" 430 GOTO9000:REM POP? 500 REM 508 OX=X:OY=Y 509 IFJS<>0THEN3000 510 GETI$ 512 IFI$=""THENI$=J$ 515 J$="" 516 IFI$=""THEN2000 517 IFI$=" "THENI=0:GOTO600 520 IFI$="J"THENX=X-1:J$=I$:IFX<1THENX=1 530 IFI$="K"THENX=X+1:J$=I$:IFX>38THENX=38 540 IFI$="I"THENY=Y-1:J$=I$:IFY<1THENY=1 550 IFI$="M"THENY=Y+1:J$=I$:IFY>19THENY=19 553 TL=TL-1:V=23:H=35:GOSUB40:PRINTTL"[157] " 556 IFTL<=0THENX$="TIME HAS RUN OUT!":GOTO9000 570 IFX=OXANDY=OYTHENRETURN 580 GOSUB1000 590 RETURN 600 REM C 610 FORB=1TONF 620 XB=X%(B):YB=Y%(B) 630 IFXBX+2ORYBY+1THEN670 640 SC=SC+10:NL=NL-1:N2=N2-1 641 V=23:H=21:GOSUB40:PRINTN2"[157] ":V=24:H=21:GOSUB40:PRINTNL"[157] ":V=22:H=7 642 GOSUB40:PRINTSC"[157] ":H=XB:V=YB:GOSUB40:PRINT"[158]." 645 POKE54275,8:POKE54273,22:POKE54272,21:POKE54276,65:FORA=1TO50:NEXT 646 POKE54276,64 647 GOSUB40:PRINT" " 650 X%(B)=-16384:Y%(B)=-16384 670 NEXTB 680 IFKX%X+2ORKY%Y+1THENRETURN 685 H=KX%:V=KY%:GOSUB40:PRINT"[209]" 690 POKE54275,8:POKE54273,24:POKE54272,1:POKE54276,65:FORA=1TO80:NEXT 695 POKE54276,64 700 SC=SC+500 705 V=22:H=7:GOSUB40:PRINTSC"[157] " 710 H=KX%:V=KY%:GOSUB40:PRINT" " 715 KB=0:KX%=-16384:KY%=-16384 720 RETURN 800 REM 810 A=1 820 IFX%(A)<-10000THEN850 830 A=A+1:IFA<=NFTHEN820 840 RETURN 850 IFA=NFTHENNF=NF-1:RETURN 860 FORB=A+1TONF:X%(B-1)=X%(B):Y%(B-1)=Y%(B):L%(B-1)=L%(B) 870 TL%(B-1)=TL%(B):NEXT 880 NF=NF-1:GOTO830 900 REM DONE WITH BOARD 910 IFNL=0THENSC=SC+100 920 SC=SC+50+TL 930 GOTO100 1000 REM DRAW JAR 1010 XX=X*8+16 1020 HX=INT(XX/256):LX=XX-256*HX 1030 POKE53248,LX:POKE53264,HX 1040 POKE53249,Y*8+42 1050 RETURN 2000 GETI$:IFI$=""THEN2000 2010 GOTO500 3000 REM JOYSTICK 3010 JV=PEEK(56321) 3020 FR=JVAND16:JV=15-(JVAND15) 3030 IFFR<>16THEN600 3040 IFJVAND1THENY=Y-1:IFY<1THENY=1 3050 IFJVAND2THENY=Y+1:IFY>19THENY=19 3060 IFJVAND4THENX=X-1:IFX<1THENX=1 3070 IFJVAND8THENX=X+1:IFX>38THENX=38 3080 GOTO553 3090 DATA18,209,200,15,210,100,12,143,100,18,209,300,16,195,100 3095 DATA15,210,200,14,24,200,12,143,400 4000 REM READ IN SPRITES 4010 FORI=896TO959:READJ:POKEI,J:NEXT 4020 POKE2040,14:POKE53287,4 4025 POKE832,0:REM MAKE SURE MENU SPRITES ARE RELOADED 4030 RETURN 4100 DATA16,0,8,16,0,8,16,0,8,32,0,4,64,0,2,128,0,1 4110 DATA128,0,1,128,0,1,128,0,1,128,0,1,128,0,1,128,0,1,128,0,1,128,0,1 4120 DATA128,0,1,128,0,1,128,0,1,128,0,1,128,0,1,64,0,2,63,255,250 4130 DATA0 5000 REM DRAW SCREEN 5010 PRINT"[159][213][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][201]"; 5020 FORI=2TO20:PRINT"[194] [194]";:NEXT 5030 PRINT"[202][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][203]" 5040 RETURN 6000 REM SET UP TUNE 6005 DIMT%(8,2) 6010 FORI=1TO8:READT%(I,0),T%(I,1),T%(I,2):NEXT 6020 RETURN 9000 REM END 9002 PRINT"[147]" 9005 POKE54283,64:POKE53269,PEEK(53269)AND254 9006 PRINT:PRINTTAB(20-LEN(X$)/2)X$ 9007 PRINT:PRINT" G A M E O V E R" 9008 PRINT:PRINT" FINAL SCORE:"SC 9010 GOSUB31000 9015 PRINT:PRINT"P=PLAY AGAIN, Q=QUIT, H=HIGH SCORES" 9100 REM 9110 GETI$:IFI$=""THEN9110 9120 IFI$="Q"THEN33000:REM POP? 9130 IFI$="P"THEN80:REM POP? 9140 IFI$="H"THEN32000 9150 GOTO9100 30000 REM H 30020 OPEN15,8,15:OPEN5,8,5,"FF.HI-SCORES" 30025 INPUT#15,A$,B$,C$,D$:IFVAL(A$)>0THEN30100 30030 FORA=1TO10 30040 INPUT#5,HS(0,A):INPUT#5,SN$(0,A):INPUT#5,SD$(0,A) 30050 NEXT 30060 CLOSE5:CLOSE15:RETURN 30100 REM 30110 CLOSE5:CLOSE15 30120 RETURN 31000 REM U 31005 XX=0 31010 FORA=0TO1 31020 B=1 31030 IFSC>HS(A,B)THENGOSUB31500:GOTO31100 31040 B=B+1:IFB<11THEN31030 31100 NEXT:RETURN 31500 REM 31503 IFXX=1THEN31540 31506 IFA=0THENXX=1 31510 PRINT:PRINT"YOUR SCORE IS IN THE TOP TEN!" 31520 PRINT:PRINT"ENTER YOUR NAME. (LIMIT 16 CHARACTERS)" 31530 PRINT:INPUTSN$ 31532 IFLEN(SN$)>16THENSN$=LEFT$(SN$,16) 31540 IFB=10THENHS(A,B)=SC:SN$(A,B)=SN$:SD$(A,B)=SD$:RETURN 31550 FORC=9TOBSTEP-1 31560 HS(A,C+1)=HS(A,C):SN$(A,C+1)=SN$(A,C):SD$(A,C+1)=SD$(A,C) 31570 NEXT:HS(A,B)=SC:SN$(A,B)=SN$:SD$(A,B)=SD$:RETURN 32000 REM DISP HI SCORES 32010 PRINT"[147]" 32030 PRINT:PRINT:PRINT"HIGH SCORES FOR CURRENT RUN:":PRINT 32050 FORA=1TO10 32055 IFHS(1,A)=0THENPRINT:GOTO32070 32060 PRINTA;TAB(4);HS(1,A);TAB(15);SN$(1,A);TAB(32);SD$(1,A) 32070 NEXT 32075 PRINT:PRINT"HIT ANY KEY TO CONTINUE." 32077 GETI$:IFI$=""THEN32077 32080 PRINT"[147]":PRINT:PRINT"ALL-TIME HIGH SCORES FOR THIS DISK:" 32085 PRINT 32090 FORA=1TO10 32095 IFHS(0,A)=0THENPRINT:GOTO32120 32100 PRINTA;TAB(4);HS(0,A);TAB(15);SN$(0,A);TAB(32);SD$(0,A) 32120 NEXT 32125 PRINT 32127 GETI$ 32130 PRINT"P=PLAY, Q=QUIT, H=HIGH SCORES" 32140 GETI$:IFI$=""THEN32140 32150 IFI$="P"THEN80 32160 IFI$="Q"THEN33000 32170 IFI$="H"THEN32000 32180 GOTO32140 33000 REMX 33005 PRINT"[147]":PRINT"SAVING HIGH SCORES TO DISK." 33020 OPEN15,8,15,"S0:FF.HI-SCORES":OPEN5,8,5,"FF.HI-SCORES,S,W" 33030 FORA=1TO10:PRINT#5,HS(0,A):PRINT#5,CHR$(34)SN$(0,A) 33032 PRINT#5,CHR$(34)SD$(0,A):NEXT 33035 CLOSE5:CLOSE15 33045 PRINT"[147]LOAD"CHR$(34)"PAYLOAD"CHR$(34)",8":PRINT"RUN" 33050 POKE631,13:POKE632,13:POKE198,2 39999 END 40000 NF=25 40005 N2=25 40010 FORA=1TO5:X%(A)=A:Y%(A)=1:NEXT 40020 FORA=6TO10:X%(A)=A-5:Y%(A)=2:NEXT 40030 FORA=11TO15:X%(A)=A-10:Y%(A)=3:NEXT 40040 FORA=16TO20:X%(A)=A-15:Y%(A)=4:NEXT 40050 FORA=21TO25:X%(A)=A-20:Y%(A)=5:NEXT 40060 RETURN 41000 REM INSTRUCTIONS 41002 POKE53280,2:POKE53281,1 41005 PRINT"[144][147]" 41010 PRINT" [198] [201][160][210][160][197][160][198] [204][160][201][160][197][160][211]" 41020 PRINT:PRINT" [195]OPYRIGHT ([195])[160]1984 BY [196]ANIEL [212]OBIAS." 41030 PRINT:INPUT " [201]NSTRUCTIONS ([217]/[206])";I$ 41040 IFLEFT$(I$,1)<>"[217]"ANDLEFT$(I$,1)<>"Y"THENRETURN 41050 PRINT"[147]"; 41060 PRINT"[212]HE OBJECT OF THE GAME IS TO CATCH" 41070 PRINT:PRINT"FIREFLIES BY MOVING YOUR COLLECTION JAR" 41080 PRINT:PRINT"AROUND THE SCREEN." 41090 PRINT:PRINT"[217]OU ALSO HAVE TO WATCH OUT FOR THE" 41100 PRINT:PRINT"MUTANT KILLER FIREFLY." 41110 PRINT:PRINT:PRINT"[212]HE GAME STARTS WITH 5 FIREFLIES ON THE" 41120 PRINT:PRINT"SCREEN. [212]HEY MAY WANDER OFF THE SCREEN" 41125 PRINT:PRINT"AND MAY WANDER BACK ON. [193]LL ARE LIT" 41130 PRINT:PRINT"HALF THE TIME AND ARE INVISIBLE THE REST" 41140 PRINT" [200]IT ANY KEY TO CONTINUE. [146]"; 41145 GETI$:IFI$=""THEN41145 41147 PRINT"[147]"; 41150 PRINT"OF THE TIME. [212]O CATCH THEM, USE THE" 41160 PRINT:PRINT"FOLLOWING KEYS:" 41170 PRINT:PRINT" I=[205]OVE [213]P" 41180 PRINT:PRINT" J=[205]OVE [204]EFT K=[205]OVE [210]IGHT" 41185 PRINT:PRINT" M=[205]OVE [196]OWN" 41190 PRINT:PRINT" [211]PACE [194]AR=[195]ATCH [198]IREFLIES" 41200 PRINT:PRINT" [193]NY [207]THER [203]EY: [211]TOP MOVING" 41230 PRINT 41240 PRINT"([207]R, YOU CAN SELECT THE JOYSTICK OPTION," 41250 PRINT"IN WHICH YOU USE THE JOYSTICK TO MOVE" 41260 PRINT:PRINT"AROUND, AND THE BUTTON TO CATCH FIRE-" 41270 PRINT:PRINT"FLIES.)" 41280 PRINT" [200]IT ANY KEY TO CONTINUE. [146]"; 41283 GETI$:IFI$=""THEN41283 41287 PRINT"[147]"; 41290 PRINT"[215]HEN YOU HIT THE SPACE BAR (OR THE JOY-" 41295 PRINT:PRINT"STICK BUTTON IN JOYSTICK MODE), ALL" 41300 PRINT:PRINT"FIREFLIES WITHIN THE JAR SHOWN ON THE" 41310 PRINT:PRINT"SCREEN, WHETHER LIT OR NOT, WILL BE" 41320 PRINT:PRINT"CAUGHT. [217]OU SCORE 10 POINTS EACH." 41330 PRINT:PRINT:PRINT"[217]OU MUST CATCH ALL FIREFLIES ON THE" 41340 PRINT:PRINT"SCREEN BEFORE THE TIME RUNS OUT. [217]OU" 41350 PRINT:PRINT"NEED NOT NECESSARILY CATCH ALL THE" 41360 PRINT:PRINT"FIREFLIES WHICH APPEARED ORIGINALLY;" 41370 PRINT:PRINT"IF SOME WANDER OFF THE SCREEN YOU NEED" 41373 PRINT" [200]IT ANY KEY TO CONTINUE. [146]"; 41376 GETI$:IFI$=""THEN41376 41378 PRINT"[147]"; 41380 PRINT"NOT CATCH THEM. [200]OWEVER, IF THEY FLY" 41390 PRINT:PRINT"BACK ONTO THE SCREEN YOU MUST CATCH" 41400 PRINT:PRINT"THEM. [215]HEN THERE ARE NONE LEFT ON THE" 41410 PRINT:PRINT"SCREEN, THE ROUND ENDS, AND YOU SCORE A" 41420 PRINT:PRINT"BONUS OF 50 POINTS PLUS THE NUMBER OF" 41430 PRINT:PRINT"TIME UNITS REMAINING. [201]N ADDITION, IF" 41440 PRINT:PRINT"YOU CATCH ALL THE FIREFLIES WITHOUT" 41450 PRINT:PRINT"ANY ESCAPING OFF THE SCREEN, YOU GET" 41455 PRINT:PRINT"A BONUS OF 100 POINTS." 41457 PRINT:PRINT"[212]HEN, A NEW ROUND STARTS. [197]ACH ROUND" 41458 PRINT:PRINT"HAS 5 MORE FIREFLIES TO CATCH THAN" 41459 PRINT" [200]IT ANY KEY TO CONTINUE. [146]"; 41460 GETI$:IFI$=""THEN41460 41461 PRINT"[147]"; 41462 PRINT:PRINT"THE LAST, UP TO 30 FIREFLIES. [193]FTER" 41465 PRINT:PRINT"THAT, THERE ARE 30 FIREFLIES IN EACH" 41467 PRINT:PRINT"ROUND. [200]OWEVER, YOU ALSO GET MORE TIME" 41469 PRINT:PRINT"TO CATCH THEM." 41471 PRINT:PRINT:PRINT"[194]UT THERE'S ANOTHER PROBLEM. [212]HE MUTANT" 41473 PRINT"KILLER FIREFLY WILL SHOW UP EACH ROUND." 41475 PRINT:PRINT"[201]TS STING IS FATAL, BUT IT ONLY STINGS" 41477 PRINT:PRINT"WHEN IT MOVES. [201]N BETWEEN, YOU CAN" 41479 PRINT:PRINT"CATCH IT, AND IT IS WORTH 500 POINTS." 41481 PRINT:PRINT"[215]ARNING: IT ACTIVELY SEEKS YOU OUT!" 41485 PRINT" [200]IT ANY KEY TO CONTINUE. [146]"; 41487 GETI$:IFI$=""THEN41487 41488 PRINT"[147]"; 41490 PRINT"[212]HE HIGH SCORES ARE KEPT, AND SAVED TO" 41500 PRINT:PRINT"DISK WHEN YOU ARE FINISHED." 41510 PRINT:PRINT" [200]IT ANY KEY TO START. [146]"; 41520 GETI$:IFI$=""THEN41520 41530 RETURN