10 REM  ** (C) PAOLO 1984 **  .
20 CALL CLEAR :: RANDOMIZE
30 CALL SCREEN(2) :: CALL PRES
40 RESTORE 50 :: FOR I=1 TO 93 :: READ D,F :: CALL SOUND(-D*300,F,0,F*2,1,F+5,3) :: NEXT I
50 DATA 1,294,1,440,1,370,1,440,1,294,1,440,1,370,1,440,1,587
60 DATA 1,440,1,770,1,440,1,659,1,587,1,554,1,587,1,659,1,587
70 DATA 1,440,1,740,1,440,1,659,1,440,1,740,1,440,1,784,1,440
80 DATA 1,740,1,440,1,659,1,587,1,554,1,494,1,554,1,587,1,659
90 DATA 1,784,1,740,1,587,2,587,1,659,1,440,1,440,1,440,1,740,1,440
100 DATA 1,440,1,440,1,784,1,440,1,440,1,440,1,740,1,440,1,440,1,440
110 DATA 1,659,1,440,1,740,1,440,1,784,1,440,1,740,1,440,1,659,1,587
120 DATA 1,554,1,494,1,440,1,392,1,370,1,330,1,294,1,587,1,587,1,587
130 DATA 1,554,1,659,1,659,1,659,1,587,1,740,1,740,1,740,1,659,1,784
140 DATA 1,784,1,784,1,659,1,554,2,587,2,587,4,587,1
150 CALL DELSPRITE(ALL) :: CALL MAGNIFY(3) :: FOR I=1 TO 14 :: CALL COLOR(I,11,1) :: NEXT I :: CALL COLOR(8,7,1,14,16,1)
160 CALL CLEAR :: INPUT "DIFFICOLTA' (1/5) ? ":DD :: IF DD<1 OR DD>5 THEN CALL CLEAR :: GOTO 160
170 CALL CLEAR :: DD=DD*3
180 CALL FUN
190 SUB FUN
200 FUEL=900 :: VS=-8 :: RESTORE 210 :: FOR I=1 TO 5 :: READ NEM$(I) :: NEXT I
210 DATA "0000000000071FFF1F070000000000000000E02020E0E0C0E0E02020E00000"
220 DATA "0000000001000000000001000000000000000000FF021F361F02FF00000000000"
230 DATA "000000000100003F7F3F00000100000000000000F04080F8F0F88040F0000000"
240 DATA "0000000000000000000000000000000003FEFE03000000000000000003FEFE03"
250 DATA "00000000070A123F201F0F030000000000000000E05048FC04F8F0C000000000"
260 CALL INIT
270 CALL CLEAR
280 CALL HCHAR(19,1,95,96) :: CALL HCHAR(1,1,95,96)
290 DISPLAY AT(22,13):"FUEL   SC  HI SC"
300 CALL SPRITE(#13,120,11,80,114,0,-11,#8,124,7,130,78,0,VS,#9,128,7,129,164,0,VS)
310 CALL SPRITE(#10,108,7,130,250,0,VS,#11,92,7,146,49,#12,92,7,8,49)
320 SCO,VALO=0 :: AST=5 :: ATT=1 :: BO=1 :: I=0
330 CALL HCHAR(10,1,32,32)
340 FOR I=1 TO 4 :: CALL SPRITE(#(I+2),96,11,178,1+(I*16)) :: NEXT I
350 CALL SPRITE(#1,96,11,70,49)
360 NA,I=0 :: GOSUB 720
370 FOR J=1 TO 150
380 CALL COINC(#2,#13,15,CE) :: CALL COINC(ALL ,CO) :: IF CE=0 AND CO=-1 THEN GOSUB 500 :: GOTO 350
390 CALL POSITION(#1,X1,Y1,#2,X2,Y2) :: VR=MAX(VR-1,-100) :: CALL MOTION(#2,(MIN(X1,135)-X2)/4,VR)
400 CALL COINC(#2,#13,15,CE) :: CALL COINC(ALL ,CO) :: IF CE=0 AND CO=-1 THEN GOSUB 500 :: GOTO 350
410 CALL JOYST(2,X,Y) :: CALL MOTION(#1,-6*Y,0) :: FUEL=FUEL-2
420 CALL KEY(2,K,S) :: IF S THEN GOSUB 440
430 NEXT J :: GOSUB 500 :: GOTO 350
440 CALL MOTION(#1,0,0) :: CALL POSITION(#1,X1,Y1) :: IF X1>160 THEN 490
450 CALL COINC(#1,#2,9,CO) :: CALL COINC(#1,#13,8,CO) :: IF CO THEN GOSUB 500 :: GOTO 350
460 R=INT(X1/8)+2 :: CALL HCHAR(R,9,136+X1-(R-2)*8,23) :: CALL HCHAR(R,9,32,23)
470 CALL POSITION(#2,X2,Y2)
480 FUEL=FUEL-5 :: IF(ABS(X1-X2)<6)*(Y2>39)THEN X1=X2 :: Y1=Y2 :: CALL DELSPRITE(#2) :: AST=AST+1 :: GOSUB 520 :: GOSUB 650 :: GOSUB 720
490 RETURN
500 CALL POSITION(#1,X1,Y1)
510 CALL DELSPRITE(#1) :: AA=1
520 CALL CHAR(116,"00000000010805030F03050001"&RPT$("0",16)&"200080D080400") :: CALL DELSPRITE(#2)
530 CALL SOUND(-350,-6,2) :: CALL SOUND(-650,-7,0) :: CALL SPRITE(#15,116,16,X1,Y1,0,0) :: CALL COLOR(#15,12)
540 CALL CHAR(116,"0000000024006033B03250801250000000000208890024C0F8E080104014") :: CALL COLOR(#15,11)
550 CALL CHAR(116,"00002002080022003A00120408120200000082048090A6083200A0104820A2") :: CALL COLOR(#15,10) :: CALL SOUND(-650,-7,1) :: CALL SOUND(-100,-8,2)
560 CALL CHAR(116,"0042200009400000600000040800254140490004080009008006000108440240") :: CALL COLOR(#15,9)
570 CALL CHAR(116,"80440010000000400000000000102000808204008000000480000002008002") :: CALL COLOR(#15,7)
580 CALL DELSPRITE(#15) :: IF AA=0 AND NA=5 AND ATT=5 THEN CALL ATTR(FUEL) :: ATT=1 :: CALL MOTION(#8,0,-8,#9,0,-8,#10,0,-8) :: GOTO 350
590 AST=AST-1
600 IF AST=0 THEN 820
610 IF AA=1 THEN DISPLAY AT(24,14)SIZE(3):"900" :: AA=0 :: FUEL=900
620 CALL DELSPRITE(#(AST+2)) :: FOR I=1 TO 50 :: NEXT I
630 RETURN
640 CALL COINC(#1,#2,9,CO) :: IF CO THEN GOSUB 500 :: GOTO 350
650 CALL DELSPRITE(#2) :: SCO=SCO+VALO :: IF(SCO<5000)+(BO=0)THEN 680
660 AST=AST+1 :: BO=0 :: IF AST>5 THEN 680
670 CALL SPRITE(#(AST+1),96,11,178,1+((AST-1)*16))
680 DISPLAY AT(24,18)SIZE(5):USING "#####":SCO
690 DISPLAY AT(24,24)SIZE(5):USING "#####":TOP
700 DISPLAY AT(24,13)SIZE(4):USING "####":FUEL
710 RETURN
720 IF NA=5 THEN NA=1 :: IF ATT=5 THEN ATT=1 ELSE ATT=ATT+1 ELSE NA=NA+1
730 CALL CHAR(116,NEM$(ATT))
740 IF ATT=1 THEN GOSUB 940 :: VALO=100 :: GOTO 810
750 IF ATT=2 THEN GOSUB 1090 :: VALO=100 :: GOTO 790
760 IF ATT=3 THEN GOSUB 1130 :: VALO=200 :: GOTO 790
770 IF ATT=4 THEN GOSUB 1170 :: VALO=200 :: GOTO 790
780 IF ATT=5 THEN GOSUB 880 :: GOTO 810
790 CALL SPRITE(#2,116,INT(RND*14)+3,INT(130*RND)+5,256,0,0)
800 VR=-(10*ATT+20+DD)
810 RETURN
820 IF SCO>TOP THEN TOP=SCO
830 DISPLAY AT(24,24)SIZE(5):USING "#####":TOP
840 DISPLAY AT(10,5):"GIOCHI ANCORA? (S/N) "
850 CALL KEY(0,K,S) :: IF S=0 THEN 850
860 IF CHR$(K)="N" OR CHR$(K)="n" THEN END ELSE 320
870 RETURN
880 CALL SPRITE(#2,116,INT(RND*14)+3,INT(130*RND)+5,256,0,0) :: VALO=200
890 FOR S1=1 TO 3 :: GOSUB 1010 :: NEXT S1
900 FOR VR=80 TO-20 STEP-10
910 CALL MOTION(#2,0,VR) :: CALL JOYST(2,X,Y) :: CALL MOTION(#1,-(6*Y),0) :: CALL COINC(#1,#2,9,CO) :: IF CO THEN GOSUB 500 :: GOTO 350
920 NEXT VR
930 RETURN
940 GOSUB 1050
950 CALL SPRITE(#2,116,INT(RND*14)+3,1,240,0,0)
960 VR=-(10+DD)
970 FOR VC=80 TO-40+RND*30 STEP-10
980 CALL MOTION(#2,VC,VR) :: CALL JOYST(2,X,Y) :: CALL MOTION(#1,-(6*Y),0)
990 NEXT VC :: VR=-(35+DD)
1000 RETURN
1010 IF NA>1 THEN 1040
1020 RESTORE 1030 :: FOR SS=0 TO 14 :: READ F :: CALL SOUND(150,F,0,F*2,2,F+5,2) :: CALL JOYST(2,X,Y) :: CALL MOTION(#1,-(6*Y),0) :: NEXT SS
1030 DATA 494,523,494,494,440,494,794,659,494,523,494,494,440,494
1040 RETURN
1050 IF NA>1 THEN 1080
1060 RESTORE 1070 :: FOR SS=1 TO 8 :: READ F :: CALL SOUND(140,F,0,F*2,2,F+5,2) :: CALL JOYST(2,X,Y) :: CALL MOTION(#1,-(6*Y),0) :: NEXT SS
1070 DATA 294,440,370,440,294,440,370,440,1
1080 RETURN
1090 IF NA>1 THEN 1120
1100 RESTORE 1110 :: FOR SS=1 TO 12 :: READ F :: CALL SOUND(140,F,0,F*2,2,F+5,2) :: CALL JOYST(2,X,Y) :: CALL MOTION(#1,-(6*Y),0) :: NEXT SS
1110 DATA 494,587,784,988,784,880,784,988,785,587,784,988,1
1120 RETURN
1130 IF NA>1 THEN 1160
1140 RESTORE 1150 :: FOR SS=1 TO 10 :: READ F :: CALL SOUND(150,F,0,F*2,2,F+5,5) :: CALL JOYST(2,X,Y) :: CALL MOTION(#1,-(6*Y),0) :: NEXT SS
1150 DATA 440,392,370,440,587,440,370,440,587,440,1
1160 RETURN
1170 IF NA>1 THEN 1200
1180 RESTORE 1190 :: FOR SS=1 TO 10 :: READ F :: CALL SOUND(150,F,0,F*2,2,F+5,2) :: CALL JOYST(2,X,Y) :: CALL MOTION(#1,-(6*Y),0) :: NEXT SS
1190 DATA 220,247,277,294,370,330,294,294,330,330,1
1200 RETURN
1210 SUBEND
1220 SUB INIT
1230 A$="0000000" :: B$="FFFFFFFF"
1240 CALL CHAR(108,"080C0C0C0E1F3F3F3F7F7F7FFFFFFF0000101010181818BCBCFCFEFEFFFFFF",120,"003CFEBEFEBEFFBFBFFFBEFEBEFE7C0000003F3F0C0CFFFFFFFF0C0C3F3F0000")
1250 CALL CHAR(124,"00040C1C1E3F3F3F3F3F3F3F3F7F7FFF"&A$&"008080C0D0D8FCFCFEFFFFFF",128,A$&"000010707070F4F6"&B$&"F"&A$&A$&"A0B0F4FCFEFEFFFFFF")
1260 CALL CHAR(136,"FF"&RPT$("0",16)&"FF"&RPT$("0",16)&"FF"&RPT$("0",16)&"FF"&RPT$("0",16))
1270 CALL CHAR(140,"00000000FF"&RPT$("0",16)&"FF"&RPT$("0",16)&"FF"&RPT$("0",16)&"FF",96,"00007C7E1008040F0F0408107E7C000000000000003C66FFFF663C000000")
1280 CALL CHAR(92,RPT$("F",64))
1290 CALL CHAR(100,"0200104012008421084112200100200080010400A20841042080021880044001",104,"01040012800520020820048009200004004010042004410820841042082088")
1300 SUBEND
1310 SUB ATTR(FUEL)
1320 RESTORE 1330 :: FOR I=1 TO 16 :: READ F :: CALL SOUND(150,F,0,F*2,2,F+4,2) :: NEXT I
1330 DATA 370,392,440,370,294,370,440,370,294,370,440,587,587,554,494,440,1
1340 FOR I=1 TO 4000 :: CALL POSITION(#1,X,Y) :: IF X>80 THEN CALL MOTION(#1,-2,0)
1350 IF X<80 THEN CALL MOTION(#1,2,0)
1360 IF X=80 THEN 1380
1370 NEXT I
1380 CALL MOTION(#1,0,0) :: FOR I=1 TO 4000 :: CALL POSITION(#13,XX,YY) :: IF YY>49 THEN CALL MOTION(#13,0,-(YY-Y)/15)
1390 IF YY=65 THEN CALL MOTION(#13,0,0,#8,0,0,#9,0,0,#10,0,0) :: CALL SOUND(-10,-5,0) :: GOTO 1410
1400 NEXT I
1410 FOR I=INT(FUEL/10)*10 TO 900 STEP 10 :: DISPLAY AT(24,13)SIZE(4):USING "####":I :: CALL SOUND(-20,440,0) :: NEXT I :: FUEL=900
1420 CALL DELSPRITE(#1,#13) :: CALL SPRITE(#13,120,11,80,180,0,-11)
1430 SUBEND
1440 SUB PRES
1450 CALL COLOR(11,7,2,9,7,6,10,7,6,12,11,2)
1455 CALL CHAR(97,"F0F8FC78C00000007FCE8C0800000000000103070301000000081830602",98,"000000000C183CFE0103010000012377010307070F0F1F1FFFFFFFE7C38381")
1460 CALL CHAR(100,"F0F8FC78C00000007FCE8C0800000000000103070301000000081830602",104,"000000000C183CFE0103010000012377010307070F0F1F1FFFFFFFE7C38381")
1470 CALL CHAR(108,"FED88080000006CF00E07040000000007F3F1F0F03072377C1E3FFFFC110050F",112,"FEFEFEFCFCFCF8F8F0F0E0E0C0C08000FEF8F0C080000000FFFFFFFFFFFEF88")
1480 CALL CHAR(116,"0001070F1F3F7F7F0080E0F0F8FCFEFE7F7F3F1F0F070100FEFEFCF8F0E08",120,"071F3F7F7F7FFFFFFFFF7F7F7F3F1F07E0F8FCFEFEFEFFFFFFFFFEFEFEFCF8E")
1490 FOR I=1 TO 4 :: CALL HCHAR(1,I,I+95) :: NEXT I :: FOR I=1 TO 3 :: CALL HCHAR(2,I,99+I) :: CALL HCHAR(3,I,102+I) :: NEXT I :: CALL HCHAR(2,4,112)
1500 CALL HCHAR(3,4,113) :: CALL HCHAR(4,1,106) :: CALL HCHAR(4,2,115) :: CALL HCHAR(4,3,114) :: FOR I=1 TO 3 :: CALL HCHAR(14,25+I,108+I) :: NEXT I
1510 CALL HCHAR(13,26,116) :: CALL HCHAR(13,27,107) :: CALL HCHAR(13,28,117) :: CALL HCHAR(15,26,118) :: CALL HCHAR(15,27,111) :: CALL HCHAR(15,28,119)
1520 CALL HCHAR(16,16,120) :: CALL HCHAR(16,17,122) :: CALL HCHAR(17,16,121) :: CALL HCHAR(17,17,123)
1530 CALL MAGNIFY(2) :: CALL SPRITE(#1,86,11,50,84,#2,69,11,50,108,#3,71,11,50,132,#4,65,11,50,156)
1540 SUBEND
