10 REM . SAVE PINBALL 20 REM ------------------------------- 30 REM 1986-09-13 40 REM DAVID ANDERSSON <5201> 50 REM 60 REM FLIPPERSPEL F\R ABC80 70 REM 80 REM ------------------------------- 90 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