10 REM . SAVE INVADER2 20 REM $$$$$ INVADER $$$$$ 21 REM $ 22 REM $ Av DAVID ANDERSSON 23 REM $ 24 REM $ \REBRO 810221 25 REM $ 26 REM $ 27 REM $ Spaceinvader f|r 28 REM $ ABC80 med floppy 29 REM $$$$$$$$$$$$$$$$$$$$$ 30 REM 34 REM  35 DIM P$=108%,A1$=122%,A2$=122%,D$=4% 36 D%=(PEEK(64769%) AND 7%)+48% : REM drive 40 D$=CHR$(68%,82%,D%,58%) 50 P$=CHR$(12%)+STRING$(40%,36%) 60 P$=P$+CUR(22%,0%)+STRING$(40%,36%) 70 P$=P$+CUR(3%,10%)+'SPACE INVADERS' 80 P$=P$+CUR(6%,0%) 85 ; P$ : GOSUB 3100 90 GOSUB 5000 : RANDOMIZE : ; P$ 100 REM  110 DIM Z5$(1%)=1%,U$(1%)=4%,E$=3% 140 E$='x}0' 150 Z5$(0%)='f' : Z5$(1%)='9' 160 U$(0%)='fww$' : U$(1%)='(ww=' 170 GOSUB 4000 200 REM  210 ; CHR$(12%) : FOR A%=1% TO 23% : ; CUR(A%,0%)CHR$(23%); : NEXT A% 230 ; CUR(0%,0%)'PO[NG: 0'TAB(14%)CHR$(23%) 240 FOR A%=19% TO 21% : ; CUR(A%,2%)'   '; : NEXT A% 250 R%=4% : E%=19% : P0=0% 260 FOR A%=2% TO R% : ; CUR(0%,45%-A%*5%)E$; : NEXT A% 270 Z5%=0% : Z4%=0% : Z6%=0% : Z8%=0% : A9%=70% : H%=0% 290 ; CUR(23%,E%)E$; : GOSUB 1020 295 FOR A%=0% TO 6000% : NEXT A% : ; CHR$(7%); 300 REM SPEL 310 GOSUB 1100 : IF Z4% GOSUB 1700 330 H%=H%+1% : IF H%=19% H%=0% : GOSUB 1000 ELSE FOR A%=0% TO A9% : NEXT A% : REM 29 335 IF Z7% GOSUB 2400 ELSE GOSUB 2300 340 IF Z4% GOSUB 1700 350 IF Z6% GOSUB 2100 ELSE IF RND<.01 GOSUB 2000 ELSE REM FOR 380 IF Z4% GOSUB 1700 390 IF Z5% GOSUB 1300 ELSE GOSUB 1200 391 IF Z8% GOSUB 1350 ELSE GOSUB 1250 395 IF Z7% GOSUB 2400 ELSE GOSUB 2300 400 I$=CHR$(INP(56%) OR 32% XOR 128%) : IF I$='z' OR I$='x' GOSUB 500 430 IF Z4% GOSUB 1700 ELSE IF I$=' ' GOSUB 1600 440 IF R% 300 ELSE 3000 500 REM FLYTTA EGET SKEPP 510 ; CUR(23%,E%)' '; 520 IF I$='x' E%=E%+1% : IF E%>36% E%=36% 530 IF I$='z' E%=E%-1% : IF E%<1% E%=1% 540 ; CUR(23%,E%)E$; : RETURN 1000 REM FLYTTA INVADERS NER 1010 A9%=A9%-2% : N2%=N2%+1% : IF N2%=3% N2%=0% : N1%=N1%+1% 1020 FOR X%=0% TO X0% : N%=X%+X%+N1% : IF N%<=N3% 1040 1030 IF N3%>19% 1070 ELSE N3%=N3%+1% 1040 ; CUR(N%,Y%(X%))V1$(X%,N2%); : ; CUR(N%+1%,Y%(X%))V2$(X%,N2%); : NEXT X% : RETURN 1070 IF INSTR(1%,V2$(X%,0%),'#') ; CUR(21%,1%)SPACE$(38%); 1080 X0%=X0%-1% : GOTO 4300 1100 REM FLYTTA INVADERS SIDAN 1110 X%=RND*5 : IF X%>X0% OR H% AND 1% FOR A%=0% TO A9% : NEXT A% : RETURN 1120 Y%(X%)=Y%(X%)+RND*3-1 : IF Y%(X%)<1% 2600 ELSE IF Y%(X%)>3% 2700 1140 ; CUR(X%+X%+N1%,Y%(X%))V1$(X%,N2%)CUR(X%+X%+N1%+1%,Y%(X%))V2$(X%,N2%); : RETURN 1200 REM INVADERSKOTT 1210 Y%=RND*9 : FOR X%=X0% TO 0% STEP -1% : IF V%(X%,Y%) NEXT X% : RETURN 1240 X5%=X%+X%+N1%+2% : Y5%=Y%(X%)+Y%*4%+2% : Z5%=1% : GOTO 1320 1250 REM INVADERSKOTT2 1260 Y%=RND*9 : FOR X%=X0% TO 0% STEP -1% : IF V%(X%,Y%) NEXT X% : RETURN 1270 X8%=X%+X%+N1%+2% : Y8%=Y%(X%)+Y%*4%+2% : Z8%=1% : GOTO 1370 1300 REM FLYTTA INVADERSKOTT 1310 ; CUR(X5%,Y5%)' '; : X5%=X5%+1% : IF X5%>23% Z5%=0% : RETURN 1320 P%=884%+X5%+X5% : P%=PEEK(P%)+SWAP%(PEEK(P%+1%))+Y5% : IF PEEK(P%)<>32% 1400 1330 ; CUR(X5%,Y5%)Z5$(Z5% AND 1%); : Z5%=Z5%+1% : RETURN 1350 REM FLYTTA INVADERSKOTT2 1360 ; CUR(X8%,Y8%)' '; : X8%=X8%+1% : IF X8%>23% Z8%=0% : RETURN 1370 P%=884%+X8%+X8% : P%=PEEK(P%)+SWAP%(PEEK(P%+1%))+Y8% : IF PEEK(P%)<>32% 1450 1380 ; CUR(X8%,Y8%)Z5$(Z8% AND 1%); : Z8%=Z8%+1% : RETURN 1400 REM TR[FF 1410 Z5%=0% 1420 IF X5%=X4% AND Y5%=Y4% 1900 1430 IF X5%=23% 1500 1440 OUT 6%,0%,6%,129% 1441 IF PEEK(P%)=56% POKE P%,32% : RETURN 1442 IF PEEK(P%)=121% POKE P%,56% : RETURN 1443 POKE P%,121% : RETURN 1450 REM TR[FF2 1460 Z8%=0% 1470 IF X8%=X4% AND Y8%=Y4% 1900 1480 IF X8%=23% 1500 1490 OUT 6%,0%,6%,129% 1491 IF PEEK(P%)=56% POKE P%,32% : RETURN 1492 IF PEEK(P%)=121% POKE P%,56% : RETURN 1493 POKE P%,121% : RETURN 1500 REM TR[FF EGET SKEPP 1510 ; CUR(23%,E%)'0:a'; 1520 FOR A%=0% TO 1000% : OUT 6%,27% : NEXT A% 1522 OUT 6%,0% : ; CUR(23%,E%)' '; 1524 FOR A%=0% TO 1000% : NEXT A% 1530 R%=R%-1% : IF R%=0% RETURN 1540 ; CUR(0%,40%-R%*5%)' '; 1550 E%=19% : ; CUR(23%,E%)E$; : FOR A%=0% TO 1000% : NEXT A% : RETURN 1600 REM EGET SKOTT 1610 OUT 6%,0%,6%,137% 1620 Z4%=1% : Y4%=E%+1% : X4%=22% : GOTO 1730 1700 REM FLYTTA EGET SKOTT 1710 ; CUR(X4%,Y4%)' '; : X4%=X4%-1% : IF X4%<3% Z4%=0% : RETURN 1730 P%=884%+X4%+X4% : P%=PEEK(P%)+SWAP%(PEEK(P%+1%))+Y4% : IF PEEK(P%)=32% ; CUR(X4%,Y4%)'5'; : RETURN 1800 REM EGEN TR[FF 1802 Z4%=0% 1805 IF X5%=X4% AND Y5%=Y4% Z5%=0% : GOTO 1900 1806 IF X7%=X4% AND Y7%=Y4% Z7%=0% : GOTO 1900 1807 IF X8%=X4% AND Y8%=Y4% Z8%=0% : GOTO 1900 1810 IF X4%>N3%+1% POKE P%,32% : OUT 6%,0%,6%,129% : RETURN 1815 IF X4%=4% 1890 1820 FOR X%=X0% TO 0% STEP -1% 1830 IF X%*2%+N1%>X4% NEXT X% : STOP 1840 FOR Y%=0% TO 8% 1850 IF Y%*4%+Y%(X%)+3%72% Y6%=Y6%-Z6% : GOTO 2200 2140 ; CUR(X6%,Y6%/2%)U$(Y6% AND 1%); : OUT 6%,17% : RETURN 2200 REM TABORT UFO 2210 Z6%=0% : OUT 6%,0% 2220 ; CUR(X6%,Y6%/2%)' '; 2230 RETURN 2300 REM UFO SKOTT 2305 IF Z6%=0% RETURN 2310 Y%=Y6%/8% : IF Y%<0% OR Y%>8% RETURN 2320 FOR X%=X0% TO 0% STEP -1% : IF V%(X%,Y%) NEXT X% ELSE RETURN 2330 X7%=5% : Y7%=Y6%/2%+2% 2340 A%=Y%*4%+4% : IF ABS(A%-Y7%)>1% RETURN 2350 Z7%=1% : GOTO 2420 2400 REM FLYTTA UFOSKOTT 2410 ; CUR(X7%,Y7%)' '; : X7%=X7%+1% : IF X7%>23% Z7%=0% : RETURN 2420 P%=884%+X7%+X7% : P%=PEEK(P%)+SWAP%(PEEK(P%+1%))+Y7% 2430 IF PEEK(P%)=32% ; CUR(X7%,Y7%)Z5$(Z7% AND 1%); : Z7%=Z7%+1% : RETURN 2500 REM UFO SKOTT TR[FF 2510 Z7%=0% 2520 IF X7%=X4% AND Y7%=Y4% 1900 2530 IF X7%=23% 1500 2540 OUT 6%,0%,6%,129% : POKE P%,32% : RETURN 2600 REM FLYTTA INVADER V[NSTER 2610 Y%(X%)=3% 2620 FOR A%=0% TO 2% : V1$(X%,A%)=RIGHT$(V1$(X%,A%),5%)+MID$(V1$(X%,A%),2%,4%) 2630 V2$(X%,A%)=RIGHT$(V2$(X%,A%),5%)+MID$(V2$(X%,A%),2%,4%) : NEXT A% 2640 N%=V%(X%,0%) : FOR A%=0% TO 7% : V%(X%,A%)=V%(X%,A%+1%) : NEXT A% : V%(X%,8%)=N% 2690 ; CUR(X%+X%+N1%,1%)TAB(Y%(X%))V1$(X%,N2%)CUR(X%+X%+N1%+1%,1%)TAB(Y%(X%))V2$(X%,N2%); : RETURN 2700 REM FLYTTA INVADER H\GER 2710 Y%(X%)=1% 2720 FOR A%=0% TO 2% : V1$(X%,A%)=MID$(V1$(X%,A%),33%,4%)+LEFT$(V1$(X%,A%),33%) 2730 V2$(X%,A%)=MID$(V2$(X%,A%),33%,4%)+LEFT$(V2$(X%,A%),33%) : NEXT A% 2740 N%=V%(X%,8%) : FOR A%=8% TO 1% STEP -1% : V%(X%,A%)=V%(X%,A%-1%) : NEXT A% : V%(X%,0%)=N% 2790 ; CUR(X%+X%+N1%,Y%(X%))V1$(X%,N2%)TAB(39%)CUR(X%+X%+N1%+1%,Y%(X%))V2$(X%,N2%)TAB(39%); : RETURN 3000 REM SLUT 3005 ; CUR(3%,15%)'GAME OVER' 3010 FOR A%=0% TO 3000% : OUT 6%,5% : NEXT A% : OUT 6%,0% 3020 POKE 65013%,0% 3040 ; P$'Du fick'P0' po{ng !' 3050 ; TAB(7%)CHR$(23%)STRING$(LEN(NUM$(P0))-1%,35%) 3055 ; CUR(11%,0%); : GOSUB 3200 3060 ; CUR(18%,0%)'Vill du spela en g}ng till(J/N)?'; 3070 GET A$ : IF A$<>'n' AND A$<>'N' 100 3080 ; P$ 3090 END : CHAIN D$+'MENY' 3100 REM L[S REKORD 3101 REM RETURN 3110 ONERRORGOTO 3190 : OPEN D$+'INVADER.REK' ASFILE 1% 3120 INPUT #1%,C0 : INPUTLINE #1%,C$ : CLOSE 1% 3130 C$=LEFT$(C$,LEN(C$)-2%) 3140 ONERRORGOTO 0 : RETURN 3190 C0=-1 : C$='' : RETURN 3200 REM TESTA REKORD 3210 IF P0'' ; 'DU SLOG REKORDET'CHR$(7%) : ; 'av 'C$' ('C0' po{ng)' 3300 REM NYTT REKORD 3301 REM RETURN 3305 FOR A%=0% TO 9000% : NEXT A% 3310 ; CUR(14%,0%)SPACE$(155%)CUR(14%,0%)'Vad heter du ?'; 3320 INPUTLINE A1$ : A1$=LEFT$(A1$,LEN(A1$)-2%)+' ' 3330 A2$=' ' : FOR X%=1% TO LEN(A1$) : Y%=ASC(RIGHT$(A1$,X%)) : IF Y%>95% Y%=Y%-32% 3340 IF Y%<>32% OR RIGHT$(A2$,LEN(A2$))<>' ' A2$=A2$+CHR$(Y%) 3350 NEXT X% : IF A2$=' ' 3310 3360 IF LEN(A2$)>22% ; CUR(14%,0%)'Har du inte ett kortare namn ?!'SPACE$(111%) : GOTO 3300 3365 ONERRORGOTO 3390 3370 C0=P0 : C$=A2$ : PREPARE D$+'INVADER.REK' ASFILE 1% : ; #1%C0;CHR$(13%)C$ : CLOSE 1% 3380 GOTO 3140 3390 ; : ; 'error'CHR$(7%)ERRCODE : RETURN 4000 REM INIT INVANDER 4010 DIM V1$(4%,2%)=40%,V2$(4%,2%)=40%,V%(4%,8%) 4030 X0%=4% : N1%=5% : N2%=0% : N3%=17% 4035 FOR X%=0% TO 4% : Y%(X%)=2% : NEXT X% 4040 RESTORE 4120 4050 FOR A%=0% TO 2% : READ A1$,A2$ 4060 FOR X%=0% TO 4% : V1$(X%,A%)=' ' : V2$(X%,A%)=' ' 4070 FOR Y%=0% TO 8% 4080 V%(X%,Y%)=0% 4090 V1$(X%,A%)=V1$(X%,A%)+A1$+' ' 4100 V2$(X%,A%)=V2$(X%,A%)+A2$+' ' 4110 NEXT Y% : NEXT X% : NEXT A% : RETURN 4120 DATA xl0,'"# ','`p ',+.!,' ',n{$ 4200 REM NY BRIGAD 4210 IF Z5% Z5%=0% : ; CUR(X5%,Y5%)' '; 4211 IF Z8% Z8%=0% : ; CUR(X8%,Y8%)' '; 4220 IF Z7% Z7%=0% : ; CUR(X7%,Y7%)' '; 4230 GOSUB 4000 : GOTO 1020 4300 REM TESTA SLUT BRIGAD 4310 FOR X%=0% TO X0% : IF INSTR(2%,V1$(X%,1%),'`') RETURN 4320 NEXT X% : GOTO 4200 5000 REM INSTRUKTIONER 5002 ; P$'\nskas instruktioner(J/N)?'; 5003 GET A$ : IF A$<>'j' AND A$<>'J' RETURN 5010 REM  5015 ; P$'Du ska oskadligg|ra s} m}nga anfallande' 5020 ; 'fientliga farkoster som m|jligt.' 5030 ; 5040 ; 'Du skjuter med mellanslag ock flyttar' 5050 ; 'i sidled med tangenterna Z och X .' : ; 5060 ; 'Om du blir tr{ffad har du 3' : ; 'f|rsvars skepp i reserv.' 5061 ; : ; ' Po{ngs{ttning:' 5062 ; CHR$(23%)' n{$'CHR$(135%)'= 50 po{ng' : ; 5063 ; CHR$(23%)'(ww='CHR$(135%)'= 300 po{ng' 5070 ; CUR(21%,5%)'Tryck return'CHR$(9%,8%); 5090 GET A$ : IF ASC(A$)<>13% 5090 5095 RETURN