1 REM +++++++++++++++++++++++++++++++++
2 REM ! Program .... PINBALL.BAS
3 REM ! Utg}va 1986-09-13
4 REM ! av DAVID ANDERSSON <5201>
5 REM ! f|r ABC80 i grundutf|rande
6 REM ! Ins{nt av <5201>
7 REM +++++++++++++++++++++++++++++++++
8 REM
9 REM FLIPPERSPEL F\R ABC80
10 REM
100 REM INIT
110 DIM T$(3%)=30%,P$(9%)=10%,P1$(9%)=5%,X%(71%),Y%(79%)
120 I%=INP(3%) : REM 40 KOLUMNER
130 DEFFNC%(X%,Y%)=PEEK(884%+X%*2%)+SWAP%(PEEK(885%+X%*2%))+Y%
140 DEFFNN%(X%,Y%)=-X%*(X%T0% GOSUB 1000
560 T1%=INP(56%) : IF B%=0% GOSUB 800 : GOTO 680
580 X1%=X1%+X7% : Y1%=Y1%+Y7% : X5%=X5%-X6% : Y5%=Y5%-Y6%
590 X%=SWAP%(X1%) AND 255% : Y%=SWAP%(Y1%) AND 255% : IF X%=X0% IF Y%=Y0% GOSUB 800 : GOTO 680
610 G2%=X%(X%) AND Y%(Y%) : IF G2% IF G2% AND 1% GOSUB 4000 : GOTO 680 ELSE GOSUB 2000 ELSE IF P5% AND 1% GOSUB 840
630 CLRDOT X0%,Y0%+1% : CLRDOT X0%+1%,Y0% : CLRDOT X0%,Y0% : IF PEEK(65013%) GOSUB 900
640 D%=-DOT(X%,Y%)-DOT(X%,Y%+1%)*2%-DOT(X%+1%,Y%)*4%-DOT(X%+1%,Y%+1%)*8%
650 IF D% GOSUB 1900 : GOSUB 2200 : X%=X0% : Y%=Y0% ELSE X0%=X% : Y0%=Y%
660 SETDOT X%,Y% : SETDOT X%+1%,Y% : SETDOT X%,Y%+1% : IF G2% GOSUB 2100
680 IF L0% OUT 6%,121% : L0%=0% ELSE IF L% OUT 6%,0%,6%,L% : L0%=L% : L%=0%
700 NEXT P5%
705 REM TIMEOUTHANTERING
710 IF M3% M3%=M3%-1% : IF M3%=0% GOSUB 4400
711 IF M2% M2%=M2%-1% : IF M2%=0% ; P$(0%); : M1%=-8%*(P1%=2%) : P1%=0% : IF M1% POKE P4%,160%
720 IF M1% M1%=M1%-1% : IF M1%=0% POKE P4%,PEEK(P4%) AND 127%
731 IF M5% M5%=M5%-1% : IF M5%=0% GOSUB 3100
732 IF P7% I%=FNC%(0%,36%-M5%*2%) : POKE I%,PEEK(I%)+128%,PEEK(I%+1%)+128%
740 GOTO 500
750 END
800 REM JUSTERA HAST O ACCELERATION
810 X6%=X5%/12% : IF X6%<-3% X6%=-3% ELSE IF X6%>3% X6%=3%
820 X6%=X6%-6%+(X5%>256%)
830 X7%=X5% : IF X7%>256% X7%=256% ELSE IF X7%<-256% X7%=-256%
840 Y6%=Y5%/24% : IF Y6%<-3% Y6%=-3% ELSE IF Y6%>3% Y6%=3%
850 Y7%=Y5% : IF Y7%>256% Y7%=256% ELSE IF Y7%<-256% Y7%=-256%
860 RETURN
900 REM NY TANGENT
910 POKE 65013%,0% : IF T1%<128% T1%=INP(56%)
920 RETURN
1000 REM TANGENT
1010 T0%=T1% : L%=121%
1020 IF T0%=141% GOTO 1520 ELSE IF T0%=137% GOTO 1400 ELSE IF T0%=177% GOTO 4200
1030 I%=(INSTR(1%,'ZXCVzxcv-.,m;:_M ',CHR$(T0% XOR 128%))+7%)/8%+1%
1040 ON I% GOTO 1100,1300,1400,1500
1100 REM INGEN
1110 IF T0%>=128% AND B% GOTO 1560
1120 IF T2% T2%=0% : GOSUB 1160
1130 IF T3% T3%=0% : GOSUB 1200
1140 IF T4% T4%=0% : GOSUB 1250
1150 RETURN
1160 REM SL[PP V[NSTER
1170 X2%=0%
1180 IF X0%>=60% AND Y0%<=51% GOTO 1230 ELSE 1240
1190 ; T$(0%);
1200 REM SL[PP H\GER
1210 X2%=1%
1220 IF X0%>=60% AND Y0%>=55% AND Y0%<66% GOTO 1230 ELSE 1240
1230 GOSUB 1800 : Y0%=53% : GOSUB 1900
1240 ; T$(X2%); : RETURN
1250 REM SL[PP RETURN
1260 IF X0%<61% OR Y0%<75% GOTO 1280
1270 GOSUB 1800 : Y5%=-6% : X5%=-(58%-X0%)^2%*16%-ABS(X5%) : Y0%=76% : X0%=61% : GOSUB 1900 : GOSUB 800
1280 ; CUR(21%,38%)'g'CHR$(8%,10%)'9'CHR$(8%,10%)'f';
1290 RETURN
1300 REM V[NSTER
1310 IF T2% RETURN ELSE X2%=2% : T2%=1% : Y%=Y0%/2%
1320 IF X0%+Y%<78% OR X0%-Y0%>16% OR Y0%>52% GOTO 1470 ELSE GOSUB 1800
1330 X5%=-ABS(X5%)/3%-35%*(X0%-80%+Y%)-35%*(Y0%-41%)
1340 Y5%=Y5%/3%+350%*(X0%-60%)/(Y0%-39%)+15%*(Y0%-41%)
1350 IF Y0%<50% X0%=FNN%(80%-Y%,X0%) ELSE Y0%=52% : Y5%=Y5%+40%
1360 GOTO 1460
1400 REM H\GER
1410 IF T3% RETURN ELSE X2%=3% : T3%=1% : Y%=Y0%/2%
1420 IF X0%-Y%<25% OR X0%+Y0%>122% OR Y0%<54% GOTO 1470 ELSE GOSUB 1800
1430 X5%=-ABS(X5%)/3%-35%*(X0%-27%-Y%)-35%*(66%-Y0%)
1440 Y5%=Y5%/3%+350%*(X0%-60%)/(Y0%-67%)+15%*(Y0%-65%)
1450 IF Y0%>56% X0%=FNN%(27%+Y%,X0%) ELSE Y0%=54% : Y5%=Y5%-40%
1460 GOSUB 1900 : GOSUB 800 : L%=9%
1470 ; T$(X2%); : RETURN
1500 REM
1510 GOSUB 1300 : GOTO 1400
1520 REM
1530 IF T4% RETURN ELSE T4%=1%
1540 ; CUR(21%,38%)' 'CHR$(8%,10%)'|'CHR$(8%,10%)'';
1550 RETURN
1560 REM TILT
1570 ; P$(9%) : M1%=0% : OUT 6%,7% : P1%=9% : IF M2%<5% Y5%=Y5%+96% : X5%=X5%-96% : M2%=10%
1580 RETURN
1800 REM CLRDOT
1810 CLRDOT X0%,Y0%+1% : CLRDOT X0%+1%,Y0% : CLRDOT X0%,Y0% : RETURN
1900 REM TILL F\REG]ENDE POS
1910 X1%=SWAP%(X0%)+128% : Y1%=SWAP%(Y0%)+128% : RETURN
2000 REM KOLLA SPECIALFALL
2010 IF G2% AND 16% IF X0%>23% CLRDOT 23%,30% : CLRDOT 23%,31% : CLRDOT 23%,76% : CLRDOT 23%,77%
2020 IF P1%=9% GOTO 2060
2030 IF G2% AND 64% IF P1%<>5% GOTO 2080
2040 IF G2% AND 128% IF M1% P1%=4% : GOSUB 3200
2050 IF G2% AND 2% IF P1%<>3% P1%=3% : GOSUB 3200
2060 IF G2% AND 32% IF P1% ; P$(0%);
2070 RETURN
2080 P1%=5% : GOSUB 3200 : IF B%<4% B%=B%+1% : ; CUR(17%,4%)' BONUS ' : M3%=5%
2090 RETURN
2100 REM ]TERST[LL SPECIALFALL
2110 IF G2% AND 32% IF P1% ; P$(P1%); : RETURN
2120 IF G2% AND 8% SETDOT 23%,30% : SETDOT 23%,31% : SETDOT 23%,76% : SETDOT 23%,77% : CLRDOT X%+1%,Y%+1%
2130 RETURN
2200 REM STUDS
2210 X2%=0% : IF X%>=46% GOTO 2250 ELSE IF G2% AND 4% GOSUB 3000
2220 IF ABS(X%-16%)<4 IF ABS(Y%-43%)<4 X2%=16% : Y2%=43%
2230 IF ABS(X%-19%)<4 IF ABS(Y%-63%)<4 X2%=19% : Y2%=63%
2240 IF ABS(X%-40%)<4 IF ABS(Y%-47%)<4 X2%=40% : Y2%=47%
2250 ON D% GOSUB 2320,2330,2350,2330,2360,2320,2320,2320,2330,2360,2330,2350,2330,2320
2260 IF X2% AND P1%<>9% P1%=2% : GOSUB 2400 ELSE IF I%>=40%-30%*(X%+Y%>129%) L%=137%
2270 IF (D% AND 3%)=0% IF X5%>16% X5%=X5%/4%
2280 IF (D% AND 12%)=0% IF X5%<-16% X5%=X5%/4%
2290 IF (D% AND 5%)=0% IF Y5%>16% Y5%=Y5%/4%
2300 IF (D% AND 10%)=0% IF Y5%<-16% Y5%=Y5%/4%
2310 GOTO 800
2320 I%=X5% : X5%=-Y5%+SGN(Y5%)*2%+Y5%/4% : Y5%=-I%+SGN(I%)+I%/6% : GOTO 2340
2330 I%=X5% : X5%=Y5%-SGN(Y5%)*2%-Y5%/4% : Y5%=I%-SGN(I%)-I%/6%
2340 I%=ABS(X5%)+ABS(Y5%) : RETURN
2350 X5%=-X5%+SGN(X5%)*2%+X5%/4% : I%=ABS(X5%) : RETURN
2360 Y5%=-Y5%+SGN(Y5%)+Y5%/4% : I%=ABS(Y5%) : RETURN
2400 REM BUMPA
2410 FOR I%=X2%-1% TO X2%+1% : FOR J%=Y2%-1% TO Y2%+1% : SETDOT I%,J% : NEXT J% : NEXT I% : CLRDOT X2%,Y2%
2420 X5%=X5%/3%+(X0%-X2%)*160% : Y5%=Y5%/3%+(Y0%-Y2%)*160%
2430 X5%=X5%-.7*RND*X5% : Y5%=Y5%-.7*RND*X5%
2440 GOSUB 3200 : L%=155% : OUT 6%,9%
2450 FOR I%=X2%-1% TO X2%+1% : FOR J%=Y2%-1% TO Y2%+1% : CLRDOT I%,J% : NEXT J% : NEXT I% : SETDOT X2%,Y2%
2460 RETURN
3000 REM BINGO
3010 IF P6%=0% OR P7% OR P1%=9% RETURN
3020 ; CUR(0%,17%)CHR$(1%);
3030 IF P6%<>8% ; 'By D.A. in Jun 1986'CHR$(23%) ELSE ; ' Master of PinBall 'CHR$(23%,7%)
3040 M5%=10% : P1%=P6% : P7%=1% : GOTO 3200
3100 REM S[TT BINGO
3110 IF P7% GOTO 3150
3120 IF P6%=0% P6%=6% : M5%=140% : GOTO 3170
3130 IF P6%=6% P6%=7% : M5%=60% : GOTO 3170
3140 IF P6%=7% AND COMP%(P$,'20000')>=0% AND B% P6%=8% : M5%=60% : GOTO 3170
3150 P6%=0% : P7%=0% : M5%=25%
3160 ; CUR(0%,17%)'9999999997i9999999999' : RETURN
3170 ; CUR(0%,29%)CHR$(1%,40%)P1$(P6%)CHR$(41%,23%)'99'
3180 RETURN
3200 REM R[KNA PO[NG
3210 M2%=3% : ; P$(P1%); : M1%=0% : L%=131%
3220 P$=ADD$(P$,P1$(P1%),0%) : ; CUR(11%,11%-LEN(P$))P$;
3230 RETURN
4000 REM BOLLEN UTE
4010 GOSUB 1800 : GOSUB 4300 : L%=95%
4020 OUT 6%,119% : FOR I%=0% TO 1200% : NEXT I%
4030 B%=B%-1% : GOSUB 4400 : IF B% RETURN
4040 OUT 6%,223% : FOR I%=0% TO 1200% : NEXT I%
4100 REM GAME OVER
4110 B%=0% : P1%=0% : M1%=0% : M2%=0% : P7%=0%
4120 POKE P4%-4%,199%,193%,205%,197%,160%,207%,214%,197%,210%
4130 ; CUR(20%,0%)'Start play=1'TAB(17%)CHR$(23%) : ; TAB(17%)CHR$(23%) : ; TAB(17%)CHR$(23%);
4140 IF COMP%(P$,P9$)<=0% RETURN
4150 P9$=P$ : ; CUR(6%,11%-LEN(P9$))P9$
4160 FOR I%=FNC%(6%,4%) TO I%+6% : POKE I%,PEEK(I%) OR 128% : NEXT I%
4170 RETURN
4200 REM START PLAY
4210 IF B% RETURN ELSE B%=4% : P7%=1% : GOSUB 3100 : OUT 6%,0%,6%,131%
4220 ; CUR(8%,23%)SPACE$(9%) : GOSUB 4400
4230 ; CUR(20%,0%)' Spring=RETURN' : ; ' Left pin=Z' : ; ' Right pin=-';
4240 FOR I%=FNC%(6%,4%) TO I%+6% : POKE I%,PEEK(I%) AND 127% : NEXT I%
4250 P$='0' : ; CUR(11%,4%)'0000000'
4300 REM NY BOLL
4310 X5%=0% : Y5%=0% : GOSUB 800
4320 X0%=61% : Y0%=76% : GOTO 1900
4400 REM BALLS
4410 ; CUR(17%,4%)SPACE$(7%)
4420 FOR I%=1% TO B% : ; CUR(17%,2%+I%*2%)"'" : NEXT I%
4430 RETURN
5000 REM INIT SCREEN
5010 ; CHR$(12%) : RESTORE
5020 FOR I%=0% TO 23% : READ I$ : ; CUR(I%,0)CHR$(23%)I$; : NEXT I%
5030 SETDOT 69%,79% : SETDOT 70%,79% : REM SETDOT 71%,79%
5040 ; CUR(6%,3%)CHR$(1%)CUR(6%,11%)CHR$(23%)CUR(11%,3%)CHR$(1%)CUR(11%,11%)CHR$(23%)
5050 FOR X%=1% TO 9%
5060 READ I$,P1$(X%) : P$(X%)=CUR(8%,24%)+CHR$(1%)+I$+CHR$(23%)
5070 NEXT X%
5080 P$(0%)=CUR(8%,24%)+SPACE$(6%)
5090 P4%=FNC%(8%,27%)
5100 POKE FNC%(11%,35%),160%
5110 POKE FNC%(8%,15%),160%
5120 FOR X%=0% TO 3% : READ X1% : FOR Y%=19% TO 22%
5130 READ I$ : T$(X%)=T$(X%)+CUR(Y%,X1%)+I$
5140 NEXT Y% : NEXT X%
5150 ; T$(0%)T$(1%)
5160 READ X1%,X2%,Y1%,Y2%,I% : IF I%=0% RETURN
5170 FOR X%=X1% TO X2% : X%(X%)=X%(X%) OR I% : NEXT X%
5180 FOR Y%=Y1% TO Y2% : Y%(Y%)=Y%(Y%) OR I% : NEXT Y%
5190 GOTO 5160
5500 DATA '8=----------m9999999999997i999999999990
5510 DATA 'f5 PIN BALL jfffffv.##############.vfff
5520 DATA '9;;;;;;;;;;;;9999# )99
5530 DATA 'ff&&&&&&&&&ffff& jf
5540 DATA '99TOP SCORE(995 p0 =
5550 DATA 'fn.........vfn j(j p0 j
5560 DATA '9{ 0000000 =95 #! j(j j
5570 DATA 'ffggggggggggf5p #! pj
5580 DATA '9999))))))9995 j;t 85 j
5590 DATA 'fff$SCORE fff5 jff5 ff5 j
5600 DATA '9y---------=95 j995 0 )5 j
5610 DATA 'fn 0000000 wf5 "ff% `f5 5 j
5620 DATA '9;;;;;;;;;;995 ! p0 j95 j 5 j
5630 DATA 'fffffffffffff5 j(j jf5 j 5 j
5640 DATA '9999))))))9995 #! j9! j 5 j
5650 DATA 'fff$BALLS fffm " j 5 j
5660 DATA '9y---------=9990 j 5 j
5670 DATA 'fn wffffd j 5 j
5680 DATA '9;;;;;;;;;;99999990 z 5 j
5690 DATA '.................vfd0 `fn 5 j
5700 DATA ' =9yi# #6={ 5 j
5710 DATA ' wfn2, ,agn 5gj
5720 DATA ' =99;t 899{ 59j
5730 DATA 'ggggggggggggggggggffffm0 `ffffn 5f
5740 DATA ' 100',100
5750 DATA ' 50 ',50
5760 DATA ' 300',300
5770 DATA ' 600',600
5780 DATA '1000',1000
5790 DATA ' 400',400
5800 DATA '2500',2500
5810 DATA '8000',8000
5820 DATA 'TILT',0
5830 DATA 23,' ','d ','p)0',' #.'
5840 DATA 28,' ',' 8','`&p','-# '
5850 DATA 23,'p,;','`& ','! ',' '
5860 DATA 28,'g,p',' )0',' "',' '
5870 DATA 71,71,48,73,1
5880 DATA 32,35,69,71,2
5890 DATA 3,3,52,54,4
5900 DATA 21,26,28,32,8
5910 DATA 21,26,74,79,8
5920 DATA 23,26,28,31,16
5930 DATA 23,26,74,79,16
5940 DATA 22,27,44,63,32
5950 DATA 24,25,29,31,64
5960 DATA 23,26,53,55,128
5970 DATA 0,0,0,0,0