10 '******************************************************************* 20 ' A l i e n Version 1.0 30 ' 40 ' By James Scott Ghofulpo 50 ' July 3, 1987 60 ' 70 ' Version 1.0 : Original Basic Program 80 '******************************************************************* 90 DIM FLOOR$(70) 100 DIM ALIENX(100),ALIENY(100),ALIENZ(100) 110 LF$=CHR$(10) 120 CLS$=LF$+LF$+LF$+LF$+LF$+LF$ 130 CLS$=CLS$+CLS$+CLS$+CLS$+CLS$ 140 RIPX = 0 150 RIPY=0 160 CLS$=CHR$(12): ' I can clear my screen. delete this if you cannot. 170 RIPCAL=100 180 RIPRND=0 190 DESTRC=0 200 OPEN "I",#1,"NOSTROM1.FPL" 210 FOR I = 1 TO 70 220 INPUT#1, FLOOR$(I) 230 NEXT I 240 CLOSE 250 PRINT CLS$ 260 PRINT SPC(15); 270 PRINT "A L I E N" 280 PRINT 290 PRINT "Computer..." 300 PRINT 310 PRINT "Floor plan, USS Nostromo, read in to data banks." 320 PRINT " analyzing..." 330 PRINT 340 FOR I = 70 TO 1 STEP -1 350 IF RIPX <> 0 THEN 390 360 FOR J = 1 TO 70 370 IF MID$(FLOOR$(I),J,1)="S" THEN RIPX=J : RIPY = I 380 NEXT J 390 NEXT I 400 PRINT "Coordinates (X,Y) ::"; RIPX; ","; RIPY 410 Y=RIPY: X=RIPX: GOSUB 1610 420 PRINT 430 PRINT "Ripley: your mission:" 440 PRINT " Destroy all alien life forms if possible." 450 PRINT " Ammo (A) and food (F) are available through-" 460 PRINT " out the infested spacecraft, Nostromo." 470 PRINT " If ship is NOT recoverable, go to the" 480 PRINT " forward end of the ship and destroy it," 490 PRINT " escaping through the drop ship (E) for exit)." 500 PRINT " Good luck." 510 PRINT "The Company" 520 PRINT 530 PRINT "Press any key to begin your mission..." 540 PRINT 550 A$=INKEY$: IF A$="" THEN 550 560 PRINT CLS$ 570 ' 580 ' B e g i n G a m e 590 ' 600 ' R e s e t T o g g l e s 610 ' 620 LV = 1 630 FOR I = 1 TO LV 640 X=INT(70*RND(1))+1 650 Y=INT(70*RND(1))+1 660 IF MID$(FLOOR$(Y),X,1)<>" " THEN 640 670 ALIENX(I)=X 680 ALIENY(I)=Y 690 FLOOR$(Y)=LEFT$(FLOOR$(Y),X-1)+"$"+RIGHT$(FLOOR$(Y),70-X-1) 700 ALIENZ(I)=0 710 NEXT I 720 DESTRC=0 730 PRINT "Level "; LV; " : "; LV; " alien(s) on board." 740 PRINT 750 GOTO 810 760 ' 770 ' M a i n L o o p 780 ' 790 PRINT CLS$ 800 GOSUB 2430 810 GOSUB 1450 : ' map 820 GOSUB 2330 830 GOSUB 2640 840 PRINT "==1 square = 5m.==" 850 PRINT 860 PRINT "KiloCalories left : "; INT(RIPCAL) 870 PRINT "Rounds left in chamber : "; RIPRND 880 PRINT 890 IF RIPCAL<25 THEN PRINT "++ NEED FOOD ++" 900 IF RIPRND<25 THEN PRINT "++ NEED AMMO ++" 910 IF RIPCAL<=0 THEN 2620 920 GOSUB 1280 930 IF DESTRC=1 THEN GOSUB 3350 940 A$=INKEY$ 950 TLG=0 960 IF A$="" THEN 940 970 IF A$="8" THEN RIPY=RIPY-1 980 IF A$="2" THEN RIPY=RIPY+1 990 IF A$="4" THEN RIPX=RIPX-1 1000 IF A$="6" THEN RIPX=RIPX+1 1010 IF TLG=1 THEN 760 1020 IF MID$(FLOOR$(RIPY),RIPX,1)<>" " THEN TLG=1 1030 IF TLG=1 AND A$="8" THEN A$="2": GOTO 970 1040 IF TLG=1 AND A$="2" THEN A$="8": GOTO 970 1050 IF TLG=1 AND A$="4" THEN A$="6": GOTO 970 1060 IF TLG=1 THEN A$="4": GOTO 970 1070 IF A$="O" THEN GOSUB 1160 1080 IF A$="P" THEN GOSUB 1680 1090 IF A$="G" THEN GOSUB 1780 1100 IF A$="F" AND RIPRND>0 THEN GOSUB 1980 1110 IF A$="F" AND RIPRND=0 THEN PRINT "** NO AMMO **" 1120 IF A$="D" THEN GOSUB 3120 1130 IF A$="E" THEN GOTO 3520 1140 IF DESMIN=0 AND DESSEC=0 AND DESTRC = 1 THEN 3440 1150 RIPCAL=RIPCAL-.5 : GOTO 760 1160 ' 1170 ' O p e n D o o r s 1180 ' 1190 Y=RIPY-1 : X=RIPX 1200 IF MID$(FLOOR$(Y),X,1)="." THEN GOSUB 1610 1210 Y=RIPY+1 1220 IF MID$(FLOOR$(Y),X,1)="." THEN GOSUB 1610 1230 X=RIPX-1: Y=RIPY 1240 IF MID$(FLOOR$(Y),X,1)="." THEN GOSUB 1610 1250 X=RIPX+1 1260 IF MID$(FLOOR$(Y),X,1)="." THEN GOSUB 1610 1270 RETURN 1280 ' 1290 ' Calculate alien distances 1300 ' 1310 DIST=9999 1320 NUMAL=0 1330 FOR I = 1 TO LV 1340 IF ALIENZ(I)=1 THEN NUMAL=NUMAL+1 : GOTO 1370 1350 DIST1=SQR((RIPX-ALIENX(I))^2+(RIPY-ALIENY(I))^2) 1360 IF DIST1 direction" 2020 A$=INKEY$ : IF A$="" THEN 2020 2030 IF A$="8" THEN GOSUB 2090 2040 IF A$="4" THEN GOSUB 2150 2050 IF A$="2" THEN GOSUB 2210 2060 IF A$="6" THEN GOSUB 2270 2070 RIPRND=RIPRND-1 2080 RETURN 2090 FOR I=RIPY-1 TO RIPY-3 STEP -1 2100 FOR J=1 TO LV 2110 IF ALIENX(J)=RIPX AND ALIENY(J)=I THEN ALIENZ(J)=1 : PRINT "** hit **" 2120 NEXT J 2130 NEXT I 2140 RETURN 2150 FOR I=RIPX-1 TO RIPX-3 STEP -1 2160 FOR J=1 TO LV 2170 IF ALIENX(J)=I AND ALIENY(J)=RIPY THEN ALIENZ(J)=1: PRINT "** hit **" 2180 NEXT J 2190 NEXT I 2200 RETURN 2210 FOR I=RIPY+1 TO RIPY+3 2220 FOR J=1 TO LV 2230 IF ALIENX(J)=RIPX AND ALIENY(J)=I THEN ALIENZ(J)=1: PRINT "** hit **" 2240 NEXT J 2250 NEXT I 2260 RETURN 2270 FOR I=RIPX+1 TO RIPX+3 2280 FOR J=1 TO LV 2290 IF ALIENX(J)=I AND ALIENY(J)=RIPY THEN ALIENZ(J)=1 : PRINT "** hit **" 2300 NEXT J 2310 NEXT I 2320 RETURN 2330 ' 2340 ' R e m o v e a l l a l i e n s 2350 ' 2360 FOR I=1 TO LV 2370 IF ALIENZ(I)=1 THEN 2410 2380 X=ALIENX(I) 2390 Y=ALIENY(I) 2400 GOSUB 1610 2410 NEXT I 2420 RETURN 2430 ' 2440 ' P l a c e a l l a l i e n s 2450 ' 2460 FOR I=1 TO LV 2470 IF ALIENZ(I)=1 THEN 2520 2480 X=ALIENX(I) 2490 Y=ALIENY(I) 2500 Q$="$" 2510 GOSUB 1660 2520 NEXT I 2530 RETURN 2540 ' 2550 ' E N D 2560 ' 2570 PRINT "Alien got you!" 2580 GOTO 3720 2590 PRINT "All aliens destroyed!" 2600 PRINT "Good work!" 2610 GOTO 2840 2620 PRINT "Out of food!" 2630 GOTO 3720 2640 ' 2650 ' M o v e a l l a l i e n s 2660 ' 2670 FOR I=1 TO LV 2680 TGL=0 2690 IF ALIENZ(I)=1 THEN 2820 2700 ADIR=INT(4*RND(1))+1 2710 IF ADIR=1 THEN ALIENX(I)=ALIENX(I)+1 2720 IF ADIR=2 THEN ALIENX(I)=ALIENX(I)-1 2730 IF ADIR=3 THEN ALIENY(I)=ALIENY(I)+1 2740 IF ADIR=4 THEN ALIENY(I)=ALIENY(I)-1 2750 IF TGL=1 THEN 2820 2760 A$=MID$(FLOOR$(ALIENY(I)),ALIENX(I),1) 2770 IF A$<>" " THEN TGL=1 2780 IF TGL=1 AND ADIR=1 THEN ADIR=2: GOTO 2710 2790 IF TGL=1 AND ADIR=2 THEN ADIR=1: GOTO 2710 2800 IF TGL=1 AND ADIR=3 THEN ADIR=4: GOTO 2710 2810 IF TGL=1 THEN ADIR=3: GOTO 2710 2820 NEXT I 2830 RETURN 2840 ' 2850 ' A d v a n c e 2860 ' 2870 LV=LV+1 2880 CLOSE 2890 OPEN "I",#1,"NOSTROM1.FPL" 2900 FOR I=1 TO 70 2910 INPUT#1,FLOOR$(I) 2920 NEXT I 2930 PRINT "Advance to level"; LV 2940 PRINT 2950 RIPX=0: RIPY=0 2960 IF EXIT = 1 THEN 2980 2970 PRINT "Bonus: 25 rounds, 100 Kcal." 2980 FOR I=70 TO 1 STEP -1 2990 IF RIPX<>0 THEN 3030 3000 FOR J=1 TO 70 3010 IF MID$(FLOOR$(I),J,1)="S" THEN RIPX=J: RIPY=I 3020 NEXT J 3030 NEXT I 3040 IF EXIT = 1 AND DESTRC = 0 THEN 3080 3050 IF EXIT = 1 THEN 3070 3060 RIPRND=RIPRND+25 3070 RIPCAL=RIPCAL+100 3080 CLOSE 3090 EXIT = 0 3100 DESTRC=0 3110 GOTO 630 3120 ' 3130 ' D e s t r u c t 3140 ' 3150 TGL=0 3160 IF MID$(FLOOR$(RIPY),RIPX-1,1)="D" THEN TGL=1 3170 IF MID$(FLOOR$(RIPY),RIPX+1,1)="D" THEN TGL=1 3180 IF MID$(FLOOR$(RIPY-1),RIPX,1)="D" THEN TGL=1 3190 IF MID$(FLOOR$(RIPY+1),RIPX,1)="D" THEN TGL=1 3200 IF TGL=0 THEN PRINT "** Need Destruct terminal **": FOR I=1 TO 300: NEXT I: RETURN 3210 PRINT 3220 PRINT "** Nuclear Destruct Sequence Activated **" 3230 PRINT 3240 PRINT "2:00 to nuclear destruct" 3250 PRINT "Please exit the ship." 3260 PRINT "Destruct sequence is irreversable" 3270 PRINT 3280 PRINT "==press any key to continue==" 3290 DESMIN=2 3300 DESSEC=0 3310 DESTRC=1 3320 A$=INKEY$ 3330 IF A$="" THEN 3320 3340 RETURN 3350 ' 3360 ' C o u n t d o w n 3370 ' 3380 PRINT "** Time to destruct : "; DESMIN; ":";DESSEC; " **" 3390 DESSEC=DESSEC-1 3400 IF DESSEC>=0 THEN RETURN 3410 DESSEC=59 3420 DESMIN=DESMIN-1 3430 RETURN 3440 ' 3450 ' Destruct 3460 ' 3470 PRINT 3480 PRINT "Nostromo has self destructed with you inside." 3490 PRINT "Sorry!" 3500 PRINT 3510 GOTO 3720 3520 ' 3530 ' E x i t 3540 ' 3550 TGL=0 3560 IF MID$(FLOOR$(RIPY),RIPX-1,1)="E" THEN TGL=1 3570 IF MID$(FLOOR$(RIPY),RIPX+1,1)="E" THEN TGL=1 3580 IF MID$(FLOOR$(RIPY-1),RIPX,1)="E" THEN TGL=1 3590 IF MID$(FLOOR$(RIPY+1),RIPX,1)="E" THEN TGL=1 3600 IF TGL=0 THEN PRINT "** NEED EXIT **": GOTO 810 3610 PRINT 3620 PRINT "*** Exiting Nostromo...***" 3630 PRINT 3640 IF DESTRC = 0 THEN PRINT "Ship adrift...found later. 21 killed." 3650 IF DESTRC = 0 THEN PRINT "Bonus lost." 3660 PRINT 3670 IF DESTRC = 1 THEN PRINT "Ship destroyed, $56 million lost." 3680 IF DESTRC = 1 THEN PRINT "Only calories gained." 3690 PRINT 3700 EXIT = 1 3710 GOTO 2840 3720 ' 3730 ' END ! 3740 ' 3750 PRINT 3760 INPUT "AGAIN "; A$ 3770 IF LEFT$(A$,1)="Y" THEN RUN 3780 END