1 ' Dropout
2 ' by Paul Robson
3 ' Amstrad Action March 88
10 GOSUB 890
20 GOSUB 800
30 dir=246:a=2:b=4:t=0
40 PEN 12:LOCATE 16,23:PRINT c$(lev)
50 LOCATE 6,1:PEN 4:PRINT USING":###";beat
60 '* HOLES,BALL
70 FOR f=4 TO 17
80 IF lev=1 THEN r%=RND*9+6 ELSE r%=RND*17+2
90 IF f=4 AND r%=2 THEN 80
100 LOCATE r%,f:PRINT" "
110 x(r%,f)=1
120 NEXT
130 bv=3:IF lev=1 THEN bh%=RND*7+7 ELSE bh%=RND*15+3
140 LOCATE bh%,bv:PEN 4:PRINT "à"
150 '* MAIN LOOP
160 WHILE bv<17
170 PEN 1:LOCATE a,b:PRINT b$;CHR$(dir);a$
180 IF INKEY(74)=0 THEN z=-1:dir=247
190 IF INKEY(75)=0 THEN z=1:dir=246
200 IF z=-1 AND a>3 AND x(a-1,b)<>2 OR z=1 AND a<18 AND x(a+1,b)<>2 THEN GOSUB 660:z=0
210 IF z=-1 AND a=3 OR z=1 AND a=18 THEN i=1:GOSUB 660:a=a+z:IF x(a,b)=1 THEN x(a,b)=0:x(ABS(a-21),b)=1:LOCATE ABS(a-21),b:GOSUB 740:z=0 ELSE GOSUB 750:z=0
220 IF z=-1 AND a=2 OR z=1 AND a=19 THEN i=1:GOSUB 660:a=ABS(a-21):GOSUB 750:GOSUB 690:z=0
230 IF INKEY(72)=0 AND x(a,b-1)=0 AND b>4 THEN y=-1:i=1:GOSUB 750:b=b+y:GOSUB 770
240 IF INKEY(73)=0 AND x(a,b+1)=0 AND b<17 THEN y=1:i=1:GOSUB 750:b=b+y:GOSUB 770
250 IF x(bh%,bv+1)=1 THEN GOSUB 600:x(bh%,bv)=2:IF bv<17 AND x(bh%,bv+1)=0 THEN SOUND 4,bv*50,0,1,1,1
260 IF INKEY(67)=0 THEN 520
270 t=t+1:PEN 4:LOCATE 16,1:PRINT USING":###";t:SOUND 1,t,3,7
280 IF t>899 THEN 450
290 WEND
300 '* DROP BALL-DOWN
310 WHILE x(bh%,bv+1)=0
320 IF bv=25 THEN 430
330 GOSUB 600
340 WEND
350 SOUND 4,bv*50,0,1,1,1
360 '* DROP BALL-DIAG.
370 IF bh%<10 THEN z=1:e=11 ELSE z=-1:e=10
380 WHILE bh%<>e:set=1
390 IF bv=25 THEN 430
400 GOSUB 600
410 WEND
420 '* END+SCORE
430 set=0:SOUND 4,4000,0,1,1,1
440 LOCATE 10,25:PRINT SPC(2)
450 IF t>=beat THEN 520
460 beat=t
470 FOR f=40 TO 1 STEP -1
480 SOUND 4,f*10,6,7
490 LOCATE 16,1:PEN 4:PRINT t
500 LOCATE 16,1:PEN 3:PRINT t
510 NEXT
520 GOSUB 800
530 '* CLEAR X
540 FOR f=2 TO 19:FOR g=4 TO 17
550 x(f,g)=0:NEXT:NEXT
560 '* CLS+NEW SCREEN
570 CALL &A804
580 CALL &A7F8:GOTO 30
590 :'* DROP BALL
600 LOCATE bh%,bv:PRINT" "
610 bv=bv+1
620 IF set=1 THEN bh%=bh%+z
630 PEN 4:LOCATE bh%,bv:PRINT"à"
640 RETURN
650 '* DELETE ARROW
660 PEN b-2:LOCATE a,b:PRINT CHR$(143)
670 IF i=1 THEN i=0:RETURN
680 a=a+z
690 IF x(a,b)=1 THEN GOSUB 720
700 RETURN
710 '* REPRINT HOLE+ARROW
720 x(a,b)=0:x(a+z,b)=1
730 LOCATE a+z,b
740 PRINT " "
750 LOCATE a,b:PEN b-2:PRINT CHR$(143)
760 IF i=1 THEN i=0:RETURN
770 LOCATE a,b:PEN 1:PRINT b$;CHR$(dir);a$
780 RETURN
790 '* START NEW GAME
800 LOCATE 2,23:PEN 12:PRINT"Level":IF st=0 THEN lev=1:beat=250:LOCATE 16,23:PRINT c$(1)
810 IF INKEY(64)=0 THEN lev=1:beat=250
820 IF INKEY(65)=0 THEN lev=2:beat=500
830 PEN 12:LOCATE 16,23:PRINT c$(lev);"?"
840 PEN 4:LOCATE 2,25:PRINT"PRESS":LOCATE 14,25:PRINT CHR$(167);"FIRE'"
850 IF INKEY(76)=-1 THEN 810
860 IF st=0 THEN st=1:LOCATE 2,25:PRINT SPC(5):LOCATE 14,25:PRINT SPC(6):GOSUB 1240:LOCATE 19,23:PRINT" "
870 RETURN
880 '* INKS,SCREEN,M/C
890 a$=CHR$(22)+CHR$(0):b$=CHR$(22)+CHR$(1):c$(1)=CHR$(24)+"1"+CHR$(24)+"/2":c$(2)="1/"+CHR$(24)+"2"+CHR$(24)
900 DIM x(20,26)
910 MODE 0:INK 0,0:BORDER 0:INK 1,0:INK 5,15:INK 13,24:INK 14,26:INK 15,15
920 ENV 1,10,-1,10:ENT 1,50,4,1
930 IF HIMEM<>&3FFF THEN SYMBOL AFTER 64:SYMBOL 64,0,24,60,126,126,126,60,24
940 LOCATE 2,2:PEN 6:PRINT STRING$(19,207)
950 LOCATE 1,2:PRINT CHR$(222):LOCATE 20,2:PRINT CHR$(223)
960 FOR f=3 TO 17
970 LOCATE 1,f:PRINT CHR$(207)
980 LOCATE 20,f:PRINT CHR$(207)
990 NEXT
1000 LOCATE 1,18:PRINT CHR$(221):LOCATE 20,18:PRINT CHR$(220)
1010 LOCATE 2,18:PRINT STRING$(2,207):LOCATE 18,18:PRINT STRING$(2,207)
1020 lft=3:rgt=18
1030 FOR f=18 TO 24
1040 x(lft,f)=1
1050 LOCATE lft,f:PRINT CHR$(223):LOCATE lft,f+1:PRINT CHR$(221)
1060 x(rgt,f)=1
1070 LOCATE rgt,f:PRINT CHR$(222):LOCATE rgt,f+1:PRINT CHR$(220)
1080 lft=lft+1:rgt=rgt-1
1090 NEXT
1100 LOCATE 9,25:PRINT CHR$(207):LOCATE 12,25:PRINT CHR$(207)
1110 p=2:FOR f=4 TO 17
1120 LOCATE 2,f:PEN p
1130 PRINT STRING$(18,143):p=p+1
1140 NEXT
1150 GOSUB 1240
1160 LOCATE 2,1:PEN 13:PRINT"BEAT";SPC(6);"TIME"
1170 MEMORY &3FFF:RESTORE 1200
1180 FOR f=&A7F8 TO &A811
1190 READ d$:POKE f,VAL("&"+d$):NEXT
1200 DATA 21,0,C0,11,0,40,1,0,40,ED,B0,C9,21
1205 DATA 0,C0,11,1,C0,1,FF,3F,36,0,ED,B0,C9
1210 CALL &A7F8
1220 POKE &A7FA,&40:POKE &A7FD,&C0
1230 RETURN
1240 LOCATE 2,23:PEN 5:PRINT CHR$(24);"Q";CHR$(24);"uit "
1250 RETURN