100 REM THUNDERBIRD by Dave Sanders›110 REM FROM JAN '83 COMPUTE! ›115 REM converted for ASCII transfer by Greg Leslie 2/83›120 GRAPHICS 0:BASE=(PEEK(106)-16)*256:GOSUB 1570›130 DIM A$(40),BALL$(4):POKE 82,0:BALL$="****":BALL$(2,2)=CHR$(170):BALL$(3,3)=CHR$(10):BALL$(4,4)=CHR$(138)›135 BALLS=4›140 CHSET=BASE:IF PEEK(CHSET+9)<>252 THEN GOSUB 1210›150 GRAPHICS 0:POKE 752,1:POKE 559,0›160 DLIST=PEEK(560)+256*PEEK(561)+4›170 FOR I=3 TO 24:POKE DLIST+I,4:NEXT I›180 POKE DLIST-1,6+64:POKE DLIST+2,6›190 POKE 756,CHSET/256›200 SETCOLOR 0,0,12:SETCOLOR 1,3,6›210 RESTORE 240›220 POSITION 0,0:? BALL$(1,BALLS)›240 DATA 1,1,2,3,14,129,130,131›250 SCR=PEEK(88)+256*PEEK(89)›270 FOR I=SCR+520 TO SCR+800 STEP 40:READ A:FOR J=I TO I+39:POKE J,A:NEXT J:NEXT I›280 POSITION 5,0:? #6;CHR$(212);CHR$(200);CHR$(213);CHR$(206);CHR$(196);CHR$(197);CHR$(210);CHR$(194);›285 ? #6;CHR$(201);CHR$(210);CHR$(196)›290 P0=BASE+1024:PADR=P0+48›300 POKE 704,28+176*(DIFF=1)+80*(DIFF=2)›310 POKE 54279,BASE/256›320 POKE 53277,3:POKE 53256,3-2*(DIFF=1)-3*(DIFF=2)›330 RESTORE 370›340 FOR I=0 TO 21:POKE PADR+I,0:NEXT I›350 FOR I=0 TO 7*(3-DIFF) STEP 3-DIFF:READ A:FOR J=0 TO 3-DIFF:POKE PADR+I+J,A:NEXT J:NEXT I›370 DATA 0,24,8,107,28,8,0,0›380 IF PEEK(547)<>6 THEN A=USR(1536)›390 POKE 559,62:GOSUB 750›400 DY=1:DX=0.5:IF RND(1)>0.5 THEN DX=-0.5›410 BX=INT(40*RND(0)):BY=INT(7*RND(0)+3)›430 IF STRIG(0)=0 THEN GOSUB 800›440 IF STICK(0)<>15 THEN POKE 77,0›450 TX=BX+DX:TY=BY+DY›460 IF TY<1 THEN GOSUB 610:GOTO 430›470 IF TY>20 THEN DY=-DY:GOSUB 920:GOTO 430›480 IF TX<0 OR TX>39 THEN DX=-DX›490 TPOS=SCR+TX+40*TY›500 IF PEEK(TPOS)=0 THEN POKE TPOS,5:POKE SCR+BX+40*BY,0:BX=TX:BY=TY:GOTO 430›520 IF PEEK(TPOS)=4 THEN GOSUB 890:SCORE=SCORE-50:DY=ABS(DY):GOTO 560›530 DY=-ABS(DY):IF RND(0)>0.5 THEN DX=-DX›540 FOR W=14 TO 0 STEP -2:SOUND 0,W*5,10,W:NEXT W›550 SCORE=SCORE+(BY-11)*5:BLOCKS=BLOCKS+1›560 POKE TPOS,0:POSITION 29-LEN(STR$(SCORE))/2,0:? " ";SCORE;" ";›570 IF BLOCKS=320 THEN 1010›580 IF SCORE<0 THEN 730›590 GOTO 500›610 IF PEEK(53252) THEN DY=-DY:Z=1:GOTO 630›620 GOTO 670›630 FOR W=14 TO 0 STEP -2:SOUND 0,W+10,10,W:NEXT W›640 POKE SCR+BX+40*BY,0:BX=BX+DX:BY=BY+DY›650 POKE 53278,255:RETURN ›670 POKE SCR+BX+40*BY,0›680 FOR W=100 TO 0 STEP -5:SOUND 0,W,12,8:NEXT W:FOR W=W=0 TO 100 STEP 5:SOUND 0,W,12,8:NEXT W:SOUND 0,0,0,0›690 POKE 53278,255›700 BALLS=BALLS-1:POSITION BALLS,0:? " ";›710 IF BALLS>0 THEN 400›730 POSITION 5,0:? " G";CHR$(193);"m";CHR$(229);" O";CHR$(246);"e";CHR$(210);" "›740 GOSUB 750:RUN ›750 IF PEEK(53279)=6 THEN POSITION 20,0:? " ":RETURN ›760 IF PEEK(20)>20 THEN POSITION 20,0:? "PRESS"›770 IF PEEK(20)>40 THEN POSITION 20,0:? CHR$(243);CHR$(244);CHR$(225);CHR$(242);CHR$(244):POKE 20,0›780 GOTO 750›800 XPOS=(PEEK(1664)-48)/4+4:FLIP=0›810 FOR I=3 TO 12:WHERE=SCR+XPOS+40*I›820 P=PEEK(WHERE):POKE WHERE,6+FLIP:FLIP=1-FLIP›830 SOUND 0,I*10,0,15-I:POKE 710,PEEK(53770)›840 NEXT I›850 FOR I=3 TO 12:POKE SCR+XPOS+40*I,0:NEXT I›860 WHERE=SCR+12*40+XPOS:SOUND 0,0,0,0:POKE WHERE-1,4:POKE WHERE+1,4:POKE WHERE,4›870 SETCOLOR 2,9,4:RETURN ›890 FOR W=0 TO 240 STEP 30:SOUND 0,W,12,15-W/17:SOUND 1,W+10,10,15-W/17:NEXT W:SOUND 0,0,0,0:SOUND 1,0,0,0›900 RETURN ›920 IF DONE THEN RETURN ›930 FOR I=1 TO 100:POKE 53274,PEEK(53770):SOUND 0,I,0,15-I/10:NEXT I›940 SOUND 0,0,0,0:POSITION 4,0:? CHR$(226);CHR$(242);CHR$(229);CHR$(225);CHR$(235);CHR$(244);CHR$(232);CHR$(242);›945 ? CHR$(239);CHR$(245);CHR$(231);CHR$(232):POSITION 22,0›946 ? "1000 point ";CHR$(194);CHR$(207);CHR$(206);CHR$(213);CHR$(211)›950 FOR I=1 TO 10:POSITION 22,0:? "1000":FOR W=1 TO 20:NEXT W:POSITION 22,0:? " ":FOR W=1 TO 20:NEXT W:NEXT I›960 POSITION 4,0:? " ";CHR$(212);CHR$(200);CHR$(213);CHR$(206);CHR$(196);CHR$(197);CHR$(210);CHR$(194);›965 ? #6;CHR$(201);CHR$(210);CHR$(196);" ":POSITION 22,0:? " "›970 FOR I=1 TO 10:FOR J=0 TO 15 STEP 5:SOUND 0,50+10-I,0,15-J:NEXT J:SCORE=SCORE+100›980 POSITION 29-LEN(STR$(SCORE))/2,0:? " ";SCORE;" ";›990 NEXT I:DONE=1:RETURN ›1010 GOSUB 1100›1020 FOR I=1 TO 50:FOR J=0 TO 3:POKE 708+J,PEEK(53770):NEXT J:Z=Z*(Z<5)+1›1030 SOUND 0,I+Z,10,I/10:SOUND 1,I+Z+10,10,I/10:NEXT I›1040 SOUND 0,0,0,0:SOUND 1,0,0,0:GOSUB 1570›1050 GRAPHICS 18:POSITION 0,6:? #6;CHR$(17);CHR$(16);CHR$(12);CHR$(16);CHR$(16);CHR$(16);" point ";›1055 ? #6;CHR$(226);CHR$(239);CHR$(238);CHR$(245);CHR$(243);CHR$(129)›1060 FOR W=1 TO 100:SOUND 0,PEEK(53770),0,15-W/10:POKE 712,(3-FLIP*2)*16+FLIP*4+4:FLIP=1-FLIP:NEXT W›1070 SCORE=SCORE+10000:SOUND 0,0,0,0›1080 DIFF=DIFF+1:IF DIFF>2 THEN DIFF=2›1090 GOTO 150›1100 POKE 82,5:POSITION 5,10›1110 ? "!!!! # ";CHR$(162);" ... ";:FOR Z=1 TO 4:? CHR$(161);:NEXT Z:? CHR$(161)›1120 ? "! ! # ";CHR$(162);" ";CHR$(162);" . . ";CHR$(161)›1130 ? "! ! # ";CHR$(162);" ";CHR$(162);" . ";CHR$(161)›1140 ? "!!!! # ";CHR$(162);" ";CHR$(162);" .... ";CHR$(161)›1150 ? "! ! # ";:FOR Z=1 TO 5:? CHR$(162);:NEXT Z:? " . ";CHR$(161)›1160 ? "! ! # ";CHR$(162);" ";CHR$(162);" . . ";CHR$(161)›1170 ? "!!!! #### ";CHR$(162);" ";CHR$(162);" ... ";CHR$(161)›1180 POKE 82,0:RETURN ›1190 END ›1210 POKE 88,0:POKE 89,BASE/256:? CHR$(125):GRAPHICS 2+16›1220 POSITION 5,0:? #6;CHR$(244);CHR$(232);CHR$(245);CHR$(238);CHR$(228);CHR$(229);CHR$(242);CHR$(226);CHR$(233);›1225 ? #6;CHR$(242);CHR$(228):POSITION 6,4:? #6;"patience":POSITION 5,8:? #6;"READING ML"›1230 RESTORE 1260›1240 FOR I=1536 TO 1611:READ A:SOUND 0,A,10,8:POKE 712,A:POKE I,A:NEXT I›1250 A=USR(1536):GOTO 1400›1260 DATA 104,173,34,2,141,74›1270 DATA 6,173,35,2,141,75›1280 DATA 6,169,6,162,6,160›1290 DATA 23,32,92,228,96,24›1300 DATA 173,128,6,141,0,208›1310 DATA 173,124,2,208,6,206›1320 DATA 128,6,206,128,6,173›1330 DATA 125,2,208,6,238,128›1340 DATA 6,238,128,6,173,128›1350 DATA 6,201,1,176,5,169›1360 DATA 200,141,128,6,201,250›1370 DATA 144,5,169,32,141,128›1380 DATA 6,76,73,6›1400 POSITION 3,8:? #6;"LOADING CHSET"›1410 FOR I=128 TO 510:POKE CHSET+I,PEEK(57344+I):SOUND 0,I/2,12,8:POKE 712,I/2:NEXT I›1420 RESTORE 1460›1430 READ A:IF A=-1 THEN SOUND 0,0,0,0:SOUND 1,0,0,0:RETURN ›1440 FOR J=0 TO 7:READ B:SOUND 0,B,10,8:SOUND 1,B+10,10,8:POKE 712,B:POKE CHSET+A*8+J,B:NEXT J›1450 GOTO 1430›1460 DATA 1,0,252,168,84,252,168,252,0›1470 DATA 2,0,168,168,252,252,168,168,0›1480 DATA 3,0,216,120,184,228,180,212,0›1490 DATA 4,0,0,0,219,150,0,0,0›1500 DATA 5,0,0,0,16,32,0,0,0›1510 DATA 6,192,192,48,48,12,12,3,3›1520 DATA 7,3,3,12,12,48,48,192,192›1530 DATA 10,24,40,24,153,126,255,20,34›1540 DATA 14,0,126,126,126,126,126,126,0›1550 DATA -1›1570 POKE 53277,0:FOR I=0 TO 3:POKE 53261+I,0:NEXT I›1580 RETURN ›