1 REM Ins{nt av 2839 100 REM  110 REM +++++++++++++++++++++++++++++ 120 REM ++++ * D E F E N D E R * ++++ 130 REM + =============== + 140 REM + AV. NIKLAS M\LLBERG + 150 REM + TEL. 0150/153 02 + 160 REM + 12 APRIL 1982 + 170 REM + KATRINEHOLM + 180 REM +++++++++++++++++++++++++++++ 190 REM  200 DIM Q%(20),Q$(20)=10,A$(32)=4,Q1$(20)=10 210 ; CHR$(12); : FOR I%=0% TO 23% : ; CUR(I%,0%)CHR$(151) : NEXT I% 220 X%=10% : Y%=2% : P9%=10% : P2=0 : RESTORE : C$="{t0" : P1%=5000% : RANDOMIZE 230 Z%=13% : ]%=37% : U%=4% : V%=37% : \%=0% : I%=0% : V5%=0% : X9%=19% 240 U1%(1%)=2% : U1%(2%)=6% : U1%(3%)=10% : U1%(4%)=14% : U1%(5%)=18% : U1%(6%)=22% : U1%(7%)=26% 250 ; CUR(0%,1%)" {t0 {t0 {t0" : ; CUR(0%,31%)CHR$(135)P% 260 REM  GROUNDDATA  270 A$='dp& "!),)p,& "' : B$=" 8d&)0` 8,80" : A$=A$+A$+"," : B$=B$+B$+" " 280 S$(1%)="n$" : S$(2%)="=5" : S$(3%)="w5" : S$(4%)="91" 281 S$(5%)=";1" : S$(6%)="f$" : S$(7%)="v4" : S$(8%)=">4" 290 T1%=1% : S$=S$(T1%) : ; CUR(21,1)A$ : ; CUR(20,1)B$ 300 ; CUR(6%,16%)",KEYS," : ; CUR(7%,16%)"######" 310 ; CUR(9%,13%)"A , UP" 320 ; CUR(10%,13%)"Z , DOWN" 330 ; CUR(11%,12%)CHR$(135)"-"CHR$(151)", FIRE LASER" 340 POKE 65013%,0 : ; CUR(15%,8%)"HIT RETURN FOR GAMESTART"; : GET Z2$ : IF ASC(Z2$)>13% THEN 340 350 FOR I%=6% TO 15% : ; CUR(I%,8%)SPACE$(30) : NEXT I% 360 GOSUB 1770 : GOTO 450 370 REM  HUVUDPROGRAM  380 REM  SKEPPET  390 IF X%=2% 410 400 ; CUR(X%-1%,Y%)" " 410 ; CUR(X%,Y%)C$" " : IF X%=19% 430 420 ; CUR(X%+1%,Y%)" " 430 RETURN 440 REM  CONTROL  450 FOR P=1 TO P9% : NEXT P : T%=INP(56%)-128% : OUT 6%,217% 460 IF T%=65% AND X%<>2% X%=X%-1% : GOTO 490 470 IF T%=90% AND X%<>19% X%=X%+1% : GOTO 490 480 IF T%=45% GOSUB 670 490 GOSUB 390 : GOSUB 630 : GOSUB 510 : GOSUB 1040 : GOTO 450 500 REM  FIENDESKEPPET  510 IF V%>1% AND V%<37% THEN 540 520 V%=36% : ; CUR(X9%,1%)" " : GOSUB 390 530 D6%=D6%+1% : FOR P=1 TO 20 : NEXT P : IF D6%<15% V%=37 : GOTO 610 540 S9=RND : IF S9<.35 THEN X9%=X9%+1 : GOTO 560 550 IF S9>.65 X9%=X9%-1 560 IF X9%<2% X9%=2% : GOTO 580 570 IF X9%>18% X9%=18% 580 ; CUR(X9%,V%)S$ : ; CUR(X8%,V%+1%)" " 590 V%=V%-1% : X8%=X9% : IF X9%=X% AND V%=Y% GOSUB 880 : GOTO 520 600 GOSUB 1830 : ; CUR(0,23)CHR$(135);M5%":";S5%" " 610 RETURN 620 REM  MOVING GROUND  630 B5$=LEFT$(A$,1%) : A$=RIGHT$(A$,2%) : A$=A$+B5$ 640 B5$=LEFT$(B$,1%) : B$=RIGHT$(B$,2%) : B$=B$+B5$ 650 ; CUR(21,1)A$ : ; CUR(20,1)B$ : OUT 6%,217% : RETURN 660 REM  LASER  670 X1%=X%*3%+2% : OUT 6%,221% 680 IF INT(X1%/3%)=X9% 750 690 FOR I4%=13% TO 41% STEP 2% : SETDOT X1%,I4% : CLRDOT X1%,I4%-4 : NEXT I4% 700 GOSUB 630 : GOSUB 1040 710 FOR I4%=43% TO 79% STEP 2% : SETDOT X1%,I4% : CLRDOT X1%,I4%-4 : NEXT I4% 720 CLRDOT X1%,I4%-4% 730 CLRDOT X1%,I4%-2% : GOSUB 630 740 RETURN 750 FOR I%=13% TO V%*2% STEP 2 : SETDOT X1%,I% : CLRDOT X1%,I%-4 : NEXT I% 760 REM  TR[FF !!  770 CLRDOT X1%,I%-4 780 CLRDOT X1%,I%-2 790 IF T1%=18% T1%=1% : GOSUB 1170 : V%=1% 800 P2=P2+(T1%*10%) : ; CUR(0%,33%)P2 810 IF P2>=P1% GOSUB 1000 820 T1%=T1%+1% : T2%=INT(8%*RND+1%) 830 FOR I%=1 TO 30 : OUT 6%,9% : ; CUR(X9%,V%)"18a" : ; CUR(X9%,V%)" " : NEXT I% : ; CUR(X9%,V%)" " 840 FOR P=1 TO 200 : OUT 6%,9% : NEXT P 850 X9%=INT(RND*17+1) 860 S$=S$(T2%) : D6%=0 : V%=1% : RETURN 870 REM  KROCK !  880 U%=U%-1% : ; CUR(0%,U1%(U%))" " 890 FOR I%=1 TO 40 : OUT 6%,9% : ; CUR(X%,Y%)"18a" 891 ; CUR(X%,Y%)" " : NEXT I% : ; CUR(X%,Y%)" " : IF U%=0% 950 900 FOR P=1 TO 800 : OUT 6%,9% : NEXT P : OUT 6%,23% 910 X9%=INT(RND*17+1) : F%=0% : V%=1% : GOSUB 1750 920 IF T1%=1 GOSUB 1770 930 RETURN 940 REM  GAME OVER  950 OUT 6,0 : GOSUB 1750 : GOTO 1230 960 ; CUR(14,10)CHR$(135)"NEW GAME (Y/N)"; 970 GET A$ : ; CUR(14,10)SPACE$(15) 980 IF A$="N" CHAIN "DEFEND.GAM" ELSE IF A$="Y" THEN 210 ELSE 960 990 REM  BONUS SKEPP  1000 P1%=P1%+5000% : U%=U%+1% : IF U%>6% THEN 1020 1010 ; CUR(0%,U1%(U%-1))C$ 1020 OUT 6%,135% : RETURN 1030 REM  BOMBDEPARTEMENT  1040 IF F%=1% 1080 1050 D=RND : L5%=10% : L6%=10% : IF D<.75 RETURN 1060 F%=1% : L1%=X9%*3%+1% : L2%=V%*2% : I2%=74%-L2% : L3%=0% : L4%=INT(RND*4%+3%) 1070 REM  FLYTTA BOMBEN  1080 L3%=SGN((X%*3%+1%)-L1%) 1100 IF L2%-L4%<=9% L4%=2% 1110 L1%=L1%+L3% : L2%=L2%-L4% : IF L2%<=3% F%=0% : CLRDOT L5%,L6% : RETURN 1120 IF DOT(L1%,L2%) THEN 1150 1130 SETDOT L1%,L2% : CLRDOT L5%,L6% : L5%=L1% : L6%=L2% : RETURN 1140 REM  HIT ON SHIP  1150 CLRDOT L5%,L6% : F%=0% : GOTO 880 1160 REM  ATTACK WAVES  1170 FOR I%=1 TO 30 : OUT 6%,9% : ; CUR(X9%,V%)"18a" : ; CUR(X9%,V%)" " : NEXT I% 1171 ; CUR(X9%,V%)" " 1180 FOR P=1 TO 200 : OUT 6%,9% : NEXT P 1190 GOSUB 1750 : V5%=V5%+1% : ; CUR(10%,10%)CHR$(135)"ATTACK WAVE "V5%CHR$(151) 1191 ; CUR(11%,12%)"COMPLETED" 1200 GOSUB 1630 : IF P9%>0% P9%=P9%-5% 1210 GOSUB 1750 : F%=0% : V%=37% : GOSUB 1770 : GOTO 450 1220 REM  PO[NGKOLL  1230 OPEN "DEFEND.DAT" ASFILE 1 : INPUT #1,E$ : A%=VAL(E$) 1240 FOR I%=1% TO A% : INPUT #1,Q$(I%) : INPUT #1,E$ : Q%(I%)=VAL(E$) : NEXT I% 1250 CLOSE 1 : IF P2>Q%(1%) 1400 1260 GOTO 960 1270 REM  SORTERING  1280 FOR I%=1% TO A%+1% 1290 IF Q%(I%+1%)>Q%(I%) THEN 1300 ELSE 1310 1300 X$=Q$(I%) : Q$(I%)=Q$(I%+1%) : Q$(I%+1%)=X$ : X%=Q%(I%) 1301 Q%(I%)=Q%(I%+1%) : Q%(I%+1%)=X% : GOTO 1280 1310 NEXT I% 1320 REM  INMATNING I FIL  1330 OPEN "DEFEND.DAT" ASFILE 1 1340 IF A%=11% A%=10% 1350 ; #1,NUM$(A%) : FOR I%=A% TO 1% STEP -1% 1360 ; #1,Q$(I%) : ; #1,NUM$(Q%(I%)) : NEXT I% 1370 REM  ]TERV[ND  1380 CLOSE 1 : GOTO 960 1390 REM  INMATNING AV INITIALER 1400 ; CHR$(12) : ; CUR(4%,4%)"YOUR SCORE IS ONE OF THE BEST" 1410 ; CUR(6%,6%)"PLEASE GIVE YOUR SIGNATURE" 1420 ; CUR(8%,0%)"A = FORWARD Z = BACKWARDS RETURN = O.K" 1430 ; CUR(11%,14%)"_ _ _" : I%=1% : A$="_ABCDEFGHIJKLMNOPQRSTUVWXYZ" 1440 FOR I%=1% TO 27% : A$(I%)=MID$(A$,I%,1%) : NEXT I% 1450 I%=0 : A$(0)="" 1460 ; CUR(11,14%+\%*3)A$(I%) 1470 GET W$ 1480 IF W$='A' I%=I%+1% : IF I%>=28% I%=1% 1490 IF W$='Z' I%=I%-1% : IF I%=-1% I%=27% 1500 IF W$=CHR$(13) THEN 1550 1510 IF \%=0% ; CUR(11%,14%)A$(I%) 1520 IF \%=1% ; CUR(11%,17%)A$(I%) 1530 IF \%=2% ; CUR(11%,20%)A$(I%) 1540 GOTO 1460 1550 \%=\%+1% : ON \% GOTO 1560,1570,1580 1560 GOSUB 1600 : Q$(A%+1%)=A$(I%) : I%=0% : GOTO 1460 1570 GOSUB 1600 : Q$(A%+1%)=Q$(A%+1%)+A$(I%) : I%=0% : GOTO 1460 1580 GOSUB 1600 : Q$(A%+1%)=Q$(A%+1%)+A$(I%) : Q%(A%+1%)=P2 1590 A%=A%+1% : FOR P=1 TO 1000 : NEXT P : GOTO 1280 1600 IF A$(I%)="_" A$(I%)=" " 1610 RETURN 1620 REM  TIDSBONUS  1630 GOSUB 1830 : IF M%>=2% B%=0% 1640 IF M5%=1% AND S5%>=30% B%=2% 1650 IF M5%=1% AND S5%<30% B%=4% 1660 IF M5%<1% AND S5%>=30% B%=6% 1670 IF M5%<1% AND S5%<30% B%=8% 1680 ; CUR(13%,14%)"BONUS" 1690 FOR I%=1% TO B% : ; CUR(15%,I%*2%+8%)"" : P2=P2+100 : ; CUR(0%,33%)P2 1691 OUT 6%,135% : FOR P=1 TO 60 : NEXT P : NEXT I% 1700 ; CUR(15%,I%*2%+8%)CHR$(135)"x 100" 1710 FOR P=1 TO 2500 : NEXT P : ; CUR(15%,2%)SPACE$(30) : ; CUR(13%,14%)SPACE$(12) 1720 IF P2>P1% GOSUB 1000 1730 RETURN 1740 REM  CLEAR LINE 2-21  1750 FOR I%=2% TO 18% : ; CUR(I%,1%)SPACE$(37) : NEXT I% : RETURN 1760 REM  NOLLST[LL KLOCKAN  1770 H5%=0% : M5%=0% : S5%=0% 1780 Z5=H5%*3600+M5%*60%+S5% 1790 Z5%=Z5/5.12 1800 POKE -528%, NOT (Z5*50-Z5%*256), NOT (Z5%),SWAP%( NOT (Z5%)) 1810 RETURN 1820 REM  L[S TID  1830 Z0%=PEEK(-528%) : Z1%=PEEK(-527%)+PEEK(-526%)*256% 1840 IF Z0%=0% THEN Z1%=Z1%+1% 1850 Z5=.02*(255% XOR Z0%)+5.12*( NOT Z1%) 1860 IF Z5>=86400 THEN Z5=Z5-86400 : GOSUB 1790 1870 H5%=Z5/3600% : Z5%=Z5-3600*H5% 1880 M5%=Z5%/60% : S5%=Z5%-60%*M5% 1890 REM JUSTERA F\R MIN-MAX 1900 IF S5%<0% THEN S5%=S5%+60% : M5%=M5%-1% 1910 IF S5%>=60% THEN S5%=S5%-60% : M5%=M5%+1% 1920 IF M5%<0% THEN M5%=M5%+60% : H5%=H5%-1% 1930 IF M5%>=60% THEN M5%=M5%-60% : H5%=H5%+1% 1940 RETURN