100 REM 110 REM 120 REM +-----------------------------+ 130 REM I I 140 REM I I N V A S I O N ! ! ! I 150 REM I ===================== I 160 REM I I 170 REM I I 180 REM I Ytterligare ett l|jligt I 190 REM I TV-spel p} ABC80. I 200 REM I I 210 REM I (c) Per Lindberg 79-06-25 I 220 REM I I 230 REM +-----------------------------+ 240 REM 250 REM 260 REM **** The mad programmer **** 270 REM **** strikes again !!! **** 280 REM 290 REM 300 REM 310 REM 320 REM 330 DATA 30,3,30,4,30,5,30,6,30,7,31,5,32,5,33,5,34,5,35,5,36,5,37,5,38,3,38,4,38,5 340 DATA 38,6,38,7,38,12,37,12,36,12,35,12,34,12,33,12,32,12,31,12,30,12,31,13,32,14,33,15,34,16 350 DATA 35,17,30,18,31,18,32,18,33,18,34,18,35,18,36,18,37,18,38,18,30,22,31,22,32,22,33,22,34,22 360 DATA 35,22,36,23,37,24,38,25,37,26,36,27,35,28,34,28,33,28,32,28,31,28,30,28,30,34,30,35,30,36 370 DATA 31,33,31,37,32,32,33,32,34,32,35,32,36,32,37,32,38,32,34,33,34,34,34,35,34,36,34,37,32,38 380 DATA 33,38,34,38,35,38,36,38,37,38,38,38,31,48,30,47,30,46,30,45,30,44,30,43,31,42,32,42,33,42 390 DATA 34,43,34,44,34,45,34,46,34,47,35,48,36,48,37,48,38,47,38,46,38,45,38,44,38,43,37,42,30,53 400 DATA 30,54,30,55,30,56,30,57,31,55,32,55,33,55,34,55,35,55,36,55,37,55,38,53,38,54,38,55,38,56 410 DATA 38,57,30,63,30,64,30,65,30,66,30,67,31,68,32,68,33,68,34,68,35,68,36,68,37,68,38,67,38,66 420 DATA 38,65,38,64,38,63,37,62,36,62,35,62,34,62,33,62,32,62,31,62,38,72,37,72,36,72,35,72,34,72 430 DATA 33,72,32,72,31,72,30,72,31,73,32,74,33,75,34,76,35,77,30,78,31,78,32,78,33,78,34,78,35,78,36,78,37,78,38,78 440 ; CHR$(12) : FOR I=0 TO 23 : ; CUR(I,0)CHR$(151); : NEXT I 450 RESTORE 330 460 FOR I%=9% TO 13% : FOR J%=1% TO 39% : A%=31744%+I%*128%-I%/8%*984%+J% : POKE A%,128%+32% : NEXT J% : NEXT I% 470 FOR J%=1% TO 168% : READ R1%,K1% : SETDOT R1%,K1% : NEXT J% 480 FOR I%=0% TO 71% : FOR J%=2% TO 78%-I1% STEP 4% : OUT 6%,43%+2%*((J%)/10=(J%)/10%) 490 IF I%<26% OR I%>42% SETDOT I%,J% ELSE I%=42% 500 NEXT J% 510 NEXT I% 520 OUT 6%,0% 530 RANDOMIZE 540 X%=50% : A%=66% : P%=100% : S%=0% : V%=0% 550 Z$(1%)=" ,, xt ,, ,, xt xt xt" 560 Z%(1%)=0% 570 ; CUR(22%,0%); 580 ; " \NSKAS INSTRUKTIONER? (Nej) ";CUR(22%,30%); 590 INPUTLINE S$ : S$=LEFT$(S$,LEN(S$)-2%) : IF S$="" 640 ELSE ; 600 S$=LEFT$(S$,1%) 610 ON 1%+(INSTR(1%,"JjNn",S$)+1%)/2% GOTO 620,630,640 620 ; CHR$(7%); : GOTO 570 630 GOSUB 1670 : REM insr 640 ; CHR$(12%);Z$(1%); 650 FOR I%=0% TO 22% : ; CUR(I%,0%)CHR$(151%); : NEXT I% 660 RESTORE 690 : FOR J%=60% TO 62% : READ B$ : FOR M%=0% TO 1% : FOR I%=0% TO 38% 670 IF MID$(B$,I%+1%,1%)="" SETDOT J%,M%*39%+I%+2% 680 NEXT I% : NEXT M% : NEXT J% 690 DATA "    " 700 DATA "    " 710 DATA "    " 720 GOTO 790 730 IF (INP(56%) AND 128%)=128% 740 ELSE 870 740 K%=INP(56%) AND 127% 750 IF K%=ASC("Z") OR K%=ASC("z") 790 760 IF K%=ASC("-") 820 770 IF K%=ASC(" ") 850 780 ; CHR$(7%); : GOTO 730 790 IF X%=3% 870 ELSE 800 800 X%=X%-1% : ; CUR(22%,X%/2%)" "; : SETDOT 68%,X%-1% : SETDOT 68%,X% : SETDOT 68%,X%+1% : SETDOT 67%,X% 810 GOTO 870 820 IF X%=78% 870 ELSE 830 830 X%=X%+1% : ; CUR(22%,X%/2%-1%)" "; : SETDOT 68%,X%-1% : SETDOT 68%,X% : SETDOT 68%,X%+1% : SETDOT 67%,X% 840 GOTO 870 850 IF S% 870 ELSE S%=-1% : X1%=X% : P%=P%-1% 860 GOTO 870 870 IF S% 880 ELSE 960 880 CLRDOT A%,X1% : A%=A%-1% : IF A%=-1% 950 890 IF DOT(A%,X1%) CLRDOT A%,X1% : OUT 6%,0% : FOR I%=0% TO 200% : OUT 6%,137% : NEXT I% ELSE 930 900 IF X1%/2%=W% AND A%/3%=V1% AND V% THEN V%=0% : ; CUR(V1%,W%)" "; : REM COLLIDE 910 IF A%<60% X2%=X1%/2% : Z$(1%)=LEFT$(Z$(1%),X2%-1%)+" "+RIGHT$(Z$(1%),X2%+1%) : ; CUR(Z%(1%),1%)Z$(1%); 920 GOTO 950 930 SETDOT A%,X1% 940 GOTO 960 950 S%=0% : A%=66% 960 REM INGET SKOTT 970 IF Z$(1%)=SPACE$(39%) 1260 980 IF V% 1020 990 IF RND>.05 FOR I%=1%+38%*RND TO 39% : IF MID$(Z$(1%),I%,1%)<>" " W%=I% : V1%=Z%(1%)+1% : V%=-1% : NEXT I% 1000 IF RND>.8 V$="5" ELSE V$="V" 1010 GOTO 1110 1020 IF V1%=22% ; CUR(V1%,W%)" "; : V%=0% : GOTO 1110 1030 IF N%/4%=N%/4 ; CUR(V1%,W%)" "; : V1%=V1%+1% : IF V1%<>20% AND V1%<>22% ; CUR(V1%,W%)V$; 1040 IF V1%<>20% 1100 1050 V%=0% 1060 ; CUR(20%,W%); : IF V$="5" ; " ";CUR(20%,W%); 1070 IF DOT(60%,2%*W%) AND DOT(60%,2%*W%+1%) ; "|"; : GOTO 1100 ELSE 1080 1080 IF DOT(61%,2%*W%) AND DOT(61%,2%*W%+1%) ; "p"; : GOTO 1100 ELSE 1090 1090 ; V$; : V%=-1% 1100 IF V1%=22% IF DOT(68%,W%*2%) OR DOT(68%,W%*2%+1%) GOSUB 1180 ELSE ; CUR(22%,W%);V$; 1110 IF NOT S% FOR ]=0 TO 15 : NEXT ] 1120 IF N%=20% N%=0% : GOTO 1130 ELSE 1170 1130 Z$(1%)=RIGHT$(Z$(1%),39%)+LEFT$(Z$(1%),38%) : ; CUR(Z%(1%),1%)Z$(1%) 1140 ON 1%-(RND<.9) GOTO 1150,1170 1150 IF Z%(1%)=18% 1260 ELSE ; CUR(Z%(1%),1%)SPACE$(39%); : Z%(1%)=Z%(1%)+1% : ; CUR(Z%(1%),1%)Z$(1%); 1160 IF Z%(1%)=17% FOR ]=0 TO 500 : OUT 6%,43% : NEXT ] 1170 N%=N%+1% : GOTO 730 1180 M%=W%-3% 1190 IF V$="5" P%=P%-100% ELSE P%=P%-50% 1200 IF M%<0% M%=0% 1210 IF M%>31% M%=31% 1220 ; CUR(23%,M%)"TR[FFAD!"; 1230 FOR M1%=0% TO 2000 : OUT 6%,11% : NEXT M1% 1240 ; CUR(23%,M%)" "; 1250 RETURN 1260 REM SLUT 1270 ; CHR$(7%); 1280 FOR ]=0 TO 1000 : NEXT ] 1290 P2%=7%*70% : REM SKEPPEN 1300 ; CHR$(12%); 1310 FOR I%=1% TO 39% 1320 IF MID$(Z$(1%),I%,1%)=" " THEN P1%=0% : GOTO 1340 ELSE P1%=P1%+1% : P2%=P2%-20% 1330 IF P1%=3% P2%=P2%-10% : P1%=0% 1340 NEXT I% 1350 P%=P%+P2% 1360 ; "Du fick";P%" po{ng av 569 m|jliga." 1370 IF P2%<7%*70%-70% P3%=1% ELSE IF P2%<7%*70%-70%-50% P3%=2% ELSE P3%=3% 1380 IF P3%=1% ; "men lyckades inte"; ELSE IF P3%=2% ; "och lyckades n{stan"; ELSE ; "och lyckades"; 1390 ; " hejda invasionen !!" : ; 1400 IF P%>0% 1420 1410 ; "Ha Ha Ha Ha !!" : GOTO 1580 1420 IF P%>100% 1440 1430 ; "Uselt!" : GOTO 1580 1440 IF P%>=200% 1460 1450 ; "Inte illa gjort av en nyb|rjare !" : GOTO 1580 1460 IF P%>=300% 1480 1470 ; "B{ttre kan du." : GOTO 1580 1480 IF P%>=400% 1500 1490 ; "Skapligt." : GOTO 1580 1500 IF P%>=500% 1520 1510 ; "Mycket bra !!" : GOTO 1580 1520 IF P%=569% 1560 1530 ; "N{stan perfekt !!!" : IF P%>559% 1570 1540 ; "Du har r{ddat basen. Inv}narna jublar!!" 1550 GOTO 1580 1560 ; "Perfekt !!! M{sterligt skjutet !!!" 1570 ; "Dina insatser har kvalificerat dig till galaktiska r}dets hedersmedalj av 10:e storleken. Gratulerar !!" 1580 ; : ; "Vill du f|rs|ka igen ?"; 1590 FOR ]=0 TO 2000 : NEXT ] 1600 GET D$ 1610 INPUTLINE S$ : IF LEN(S$)=2% 1610 ELSE S$=LEFT$(S$,1%) : ; 1620 ON 1%+(1%+INSTR(1%,"JjNn",S$))/2% GOTO 1630,530,1640 1630 ; CHR$(7%);"Ja eller Nej ??" : GOTO 1580 1640 ; : ; "M} stj{rnornas ljus leda dig!" 1650 END 1660 REM INST 1670 ; CHR$(12%); 1680 ; ' Kzintianska rymdskepp hotar basen '; 1690 ; ' p} Mount Lookitthat / Tau Ceti ! ' 1700 ; '* Din uppgift {r att tr{ffa s} m}nga *'; 1710 ; '* som m|jligt med din Z80-kanon, utan *'; 1720 ; '* att sj{lv bli tr{ffad. *' 1730 ; '+ De fientliga rymdskeppen {r bev{p- +'; 1740 ; '+ nade med 8080-bomber som ser ut s} +'; 1750 ; '+ h{r: V och {r relativt ofarliga, +'; 1760 ; '+ och k{rnladdningar som ser ut s} +'; 1770 ; '+ h{r:'CHR$(151)'5'CHR$(135)' och som kan spr{nga sig rakt +'; 1780 ; '+ igenom dina skydd. +' 1790 ; '> Du man|vererar kanonen }t v{nster <'; 1800 ; '> och h|ger med knapparna: Z och - <'; 1810 ; '> samt avfyrar den med mellanslag. <'; 1820 ; '> N{r tidigare skott f|rsvunnit, {r <'; 1830 ; '> kanonen omladdad, och klar att av- <'; 1840 ; '> fyras p} nytt. <' 1850 ; "(Tryck p} RETURN)"; : GET D$ : ; CHR$(12%); 1860 ; '# En varningssignal ljuder n{r inva- #'; 1870 ; '# sionen {r n{ra att lyckas. #' 1880 ; '= Du f}r 30 po{ng f|r varje skade- ='; 1890 ; '= skjutet rymdskepp, och ytterligare ='; 1900 ; '= 40 po{ng f|r varje helt s|nder- ='; 1910 ; '= skjutet skepp. =' 1920 ; ' Om du blir tr{ffad av en 8080-bomb, '; 1930 ; ' f|rlorar du 50 po{ng, och om en '; 1940 ; ' k{rnladdning sl}r ner p} dej, f|r- '; 1950 ; ' lorar du 100 po{ng. ' 1960 ; '% Du har 100 po{ng fr}n b|rjan. %'; 1970 ; '% Varje skott med kanonen kostar %'; 1980 ; '% 1 po{ng. %' 1990 ; 'O Galaxens framtid beror p} dig !!! O'; 2000 ; 'O Lycka till! Det beh|ver du... O' 2010 ; '(Tryck p} return n{r du {r redo!)'; 2020 GET D$ 2030 RETURN