Listing of file='LASERBLT' on disk='vmedia/more_games.wvd.zip'
# Sector 745, program filename = 'LASERBLT' 0010 REM % -- LB GAME -- by Steve McGarry 0020 PRINT HEX(03) 0030 PRINT " LASER BLAST GAME" : PRINT : PRINT "KEYS USED 4= SHIP GOES TO THE LEFT" 0040 PRINT " 5= SHIP STOPS" : PRINT " 6= SHIP GOES TO THE RIGHT" 0050 PRINT " 2= SHIP GOES DOWN " : PRINT " 8= SHIP GOES UP " : PRINT " RETURN= FIRE LASER" 0060 PRINT : PRINT "TO FIRE LASER, HIT RETURN ONCE, THEN YOU CAN AIM LASER BY USEING K EYS 4,5,OR 6, HIT RETURN KEY AGAIN WILL FIRE LASER" 0070 PRINT "THE OBJECT IS FOR YOU TO KILL AS MANY ROBOTS AS YOU CAN BEFOR THA Y GET YOU.. YOU HAVE FOUR (4) SHIP..." 0080 PRINT : PRINT "HIT RETURN TO START" : INPUT A 0090 DIM K$1,L$1,E(3),D(3),A(3),P$(11)42,L$(11)2,W$(11)42,L0$2 0100 X=2 : Y,S=0 0110 E(1),E(2),E(3)=99 0120 A(1)=79 : A(2)=99 : A(3)=117 0130 S1=3 0140 P=0 0150 PRINT HEX(06030202020F); : PRINTUSING "#,###,###",S0 : PRINT BOX(0,80);AT(22,0);BOX(0,80) : GOSUB 1270 0160 REM ------------- VARIABLES --------------- 0170 REM X,Y = SHIP POSITION 0180 REM S = POSITION IN SHIP ROTATION 0190 REM L = LINE THAT LASER IS ON 0200 REM T = TURRET POSITION (0=OFF 1=LEFT 2=CENTER 3=RIGHT) 0210 REM C = COLUMN THAT LASER IS IN 0220 REM D1 = X INCREMENT FOR MOVING SHIP 0230 REM D2 = Y INCREMENT FOR MOVING SHIP 0240 REM I = LASER INCREMENT (COLUMN) 0250 REM L$ = LASER CHARACTER 0260 REM Q = COUNTER FOR WHEN TO ROTATE SHIP 0270 REM E() = POSITIONS OF ENEMIES (IF 99, ENEMY HAS BEEN DESTROYED) 0280 REM Q2 = COUNTER FOR WHEN TO UPDATE ENEMIES 0290 REM Z = LOOP COUNTER FOR DOING ALL ENEMY TESTING 0300 REM D() = DIFFERENCE BETWEEN EACH ENEMY AND THE SHIP (IN COLUMNS) 0310 REM M = MINIMUM DIFFERENCE (SEE D()) 0320 REM S0 = PLAYER'S SCORE 0330 REM S1 = NUMBER OF REINFORCEMENT SHIPS 0340 REM Z1 = LOOP FOR PRINTING THE REINFORCEMENT SHIPS AT TOP OF SCREEN 0350 REM P = POINT VALUE FOR EACH OF THE PRESENT SET OF ENEMIES 0360 REM B = COUNT FOR BELL WHEN NEW REINFORCEMENT IS EARNED 0370 REM L1 = LINE THAT ENEMY LASER IS ON 0380 REM Q3 = COUNTER FOR WHEN TO LET ENEMIES AIM 0390 REM E = NUMBER OF THE ENEMY THAT IS FIRING 0400 REM T1 = ENEMY TURRET POSITION (SEE T FOR EXPL.) 0410 REM I1 = ENEMY LASER INCREMENT (COLUMN) 0420 REM C1 = COLUMN THAT ENEMY LASER IS IN 0430 REM H = SET TO ONE (1) IF SHIP HAS BEEN HIT (FALLING), ZERO OTHERWISE 0440 REM F = POSITION OF THE ENEMY THAT FIRED 0450 REM A() = COLUMNS OF THE APPROACHING ENEMIES 0460 REM F1 = NUMBER OF THE ENEMY THAT FIRED 0470 REM F0 = POSITION (COLUMN) OF THE SHIP WHEN IT FIRED 0480 REM --------------------------------------- 0490 K$=" " 0500 KEYIN K$,510,500 : GOTO 800 0510 IF L>0THEN 800 0520 IF K$<>HEX(0D)THEN 600 0530 IF H=1OR MIN(E())=99THEN 800 0540 D1,D2=0 0550 IF T>0THEN 570 0560 T=2 : GOTO 640 0570 L=X+1 : I=T : T=0 : C,F0=Y+3 : L$=HEX(FF) 0580 PRINT AT(X+1,Y,9) 0590 PRINT AT(L,C);HEX(0E);L$ : GOTO 800 0600 IF K$<"1"OR K$>"9"THEN 800 0610 IF T=0THEN 690 0620 IF K$="1"OR K$="4"OR K$="7"AND T>1THEN T=T-1 0630 IF K$="3"OR K$="6"OR K$="9"AND T<3THEN T=T+1 0640 PRINT AT(X+1,Y+2); 0650 ON TGOTO 660,670,680 0660 PRINT HEX(C8C7C0) : GOTO 800 0670 PRINT HEX(C0CFC0) : GOTO 800 0680 PRINT HEX(C0CBC4) : GOTO 800 0690 CONVERT K$TO K 0700 ON KGOTO 710,720,730,740,750,760,770,780,790 0710 D1=1 : D2=-1 : GOTO 800 0720 D1=1 : D2=0 : GOTO 800 0730 D1=1 : D2=1 : GOTO 800 0740 D1=0 : D2=-1 : GOTO 800 0750 D1=0 : D2=0 : GOTO 800 0760 D1=0 : D2=1 : GOTO 800 0770 D1=-1 : D2=-1 : GOTO 800 0780 D1=-1 : D2=0 : GOTO 800 0790 D1=-1 : D2=1 : GOTO 800 0800 IF X>0THEN 810 : IF S1=0THEN 1290 : S1=S1-1 : GOSUB 1270 : X=2 : Y,S,H=0 0810 IF H=1THEN D1=.5 : IF L=0THEN 850 : C=C+(I-2) : L=L+1 : IF L>21OR C<0OR C>79THEN L=0 : IF L$=" "OR L>0THEN 840 : FOR Z=1TO 3 : IF (C-(I-2))<E(Z)OR (C-(I-2))>E(Z)+2THEN 830 : PRINT AT(20,E(Z),3);AT(21,E(Z));HEX(0EFACFF500) : E(Z)=99 : IF INT((S0+P)/1000)<=INT(S0/1000)OR S1=6THEN 820 : S1=S1+1 : B=.2 : GOSUB 1270 0820 S0=S0+P : IF S0>9999999THEN S0=S0-10000000 : PRINT HEX(01); : PRINTUSING "#,###,###",S0 0830 NEXT Z : L$=" " : L=X+1 : C=F0 0840 IF L>0THEN PRINT AT(L,C);HEX(0E);L$ : IF L>0THEN Q=Q+1 0850 Q=Q+1 : IF Q<5THEN 1010 0860 IF B=0THEN GOTO 870 : B=INT(B+5) : IF B>50THEN B=0 0870 IF H=0THEN 900 : IF X+D1<22THEN 910 : PRINT AT(X,Y);HEX(0EC0C0C0C0C0C0C0C0) : X,D1,D2=0 : K$=" " : FOR Z=1TO 3 : IF E(Z)<YOR E(Z)>Y+6THEN 890 : PRINT AT(20,0,79) : E(Z)=99 : IF INT((S0+P)/1000)<=INT(S0/1000)OR S1=6THEN 880 : S1=S1+1 : B=.1 : GOSUB 1270 0880 S0=S0+P : IF S0>9999999THEN S0=S0-10000000 : PRINT HEX(01); : PRINTUSING "#,###,###",S0 0890 NEXT Z : GOTO 800 0900 IF X+D1<2OR X+D1>(110-P)/10THEN D1=0 0910 IF Y+D2<0OR Y+D2>71THEN D2=0 0920 IF D1<>0THEN PRINT AT(X,Y,8) 0930 X=X+D1 : Y=Y+D2 0940 S=S+1 : IF S>5THEN S=1 : Q=0 0950 PRINT AT(X,Y); : ON SGOTO 960,970,980,990,1000 0960 PRINT HEX(C0EEFBFFF7DDC0) : GOTO 1010 0970 IF H=1THEN PRINT HEX(0E); : PRINT HEX(C0EEF7FFFFD9C0) : GOTO 1010 0980 PRINT HEX(C0EEFFFBFFD5C0) : GOTO 1010 0990 IF H=1THEN PRINT HEX(0E); : PRINT HEX(C0EAFFF7FFDDC0) : GOTO 1010 1000 PRINT HEX(C0E6FFFFFBDDC0) : GOTO 1010 1010 IF H=1THEN 1210 : Q2=Q2+1 : IF MIN(E())=99THEN 1240 : IF Q2<100-PTHEN 1080 : Q2=0 1020 IF L1>0THEN 1080 1030 FOR Z=1TO 3 : IF E(Z)=99THEN D(Z)=1000 : ELSE D(Z)=(Y+3)-(E(Z)+1) : NEXT Z : M=99 : FOR Z=1TO 3 : IF ABS(D(Z))<MTHEN M=D(Z) : NEXT Z : ON SGN(M)+2GOTO 1040,1060 : IF E(3)>76AND E(3)<>99THEN 1060 : GOTO 1050 1040 IF E(1)=0THEN 1060 1050 FOR Z=1TO 3 : IF E(Z)<>99THEN E(Z)=E(Z)+SGN(M) : NEXT Z 1060 PRINT AT(21,0); : FOR Z=1TO 3 : IF E(Z)=99THEN 1070 : PRINT TAB(E(Z));HEX(FACFF5); 1070 NEXT Z : PRINT TAB(80) : IF H=1THEN 1210 1080 IF T1>0THEN 1200 : IF L1>0THEN 1210 : Q3=Q3+1 : IF Q3<(100-P)*3THEN 1260 : Q3=0 1090 E=INT(RND(1)*3)+1 1100 IF E(E)=99AND MIN(E())<99THEN 1090 : IF E(E)=99THEN 1260 1110 F=E(E) : F1=E 1120 T1=2 1130 IF F<YTHEN T1=3 1140 IF F>Y+6THEN T1=1 1150 PRINT AT(20,F); : ON T1GOTO 1160,1170,1180 1160 PRINT HEX(C8F4) : GOTO 1190 1170 PRINT HEX(C0FC) : GOTO 1190 1180 PRINT HEX(C0F8C4) : GOTO 1190 1190 L1=20 : I1=T1 : C1=F+1 : L1$=HEX(FF) : C2=50 1200 C2=C2-1 : IF C2>0THEN 1260 : T1=0 : IF E(F1)=99THEN L1=0 : IF L1=0THEN 1230 : PRINT AT(20,F,3) : GOTO 1230 1210 C1=C1+(I1-2) : L1=L1-1 : IF L1<2OR C1<0OR C1>79THEN L1=0 : IF L1$=" "OR L1<>XOR C1<YOR C1>Y+5THEN 1220 : L1,T=0 : H=1 : IF MIN(E())=99THEN PRINT AT(21,0,80) 1220 IF L1$=" "OR L1>0THEN 1230 : L1$=" " : L1=20 : C1=F+1 : F=0 1230 IF L1>0THEN PRINT AT(L1,C1);HEX(0E);L1$ : IF L1>0THEN Q=Q+1 : GOTO 1260 1240 IF Q2<(100-P)/10THEN 1250 : Q2=0 : Q=Q+2 : PRINT AT(21,0); : FOR Z=1TO 3 : A(Z)=A(Z)-2 : IF A(Z)<79THEN PRINT TAB(A(Z));HEX(FACFF5); : NEXT Z : PRINT TAB(80) : IF A(1)>21THEN 1250 : MAT E=A : A(1)=79 : A(2)=99 : A(3)=117 : IF P=90THEN 1240 : P=P+10 : PRINT AT(X,Y,8) : IF X>(110-P)/10THEN X=X-1 1250 GOTO 1210 1260 GOTO 490 1270 PRINT AT(0,19); : IF S1=0THEN 1280 : FOR Z1=1TO S1 : PRINT TAB(10+Z1*9);HEX(EEFBFFF7DD); : NEXT Z1 1280 PRINT TAB(79) : RETURN 1290 REM -------- THIS ROUTINE WILL KEEP TRACK OF THE TOP TEN SCORES --------- 1300 DATA LOAD DC OPEN T#1,"LB SCORE" : DATA LOAD DC #1,Q9,P$() : REM Q9 = GARBAGE 1310 CONVERT S0TO P$(1),(#,###,###) : STR(P$(1),1,POS(P$(1)>HEX(30))-1)=ALL(20) : MAT SORTP$()TO W$(),L$() 1320 IF L$(1)=HEX(0001)THEN 1350 1330 W$()=P$() : MAT MOVE W$(),L$()TO P$() : PRINT HEX(030202000F0A06);"Your score qualifies you for entry into the li st of top ten scores!" : PRINT "Please enter your name below." : PRINT AT(5,0) : MAT SEARCHL$(),=HEX(0001)TO L0$STEP 2 : L=INT(VAL(L0$,2)/2)+1 : FOR K=11TO 2STEP -1 : IF K=LTHEN PRINT HEX(0E); : PRINT TAB(19);P$(K) : NEXT K 1340 PRINT AT(16-L,30);HEX(0E); : LINPUT -STR(P$(L),13,30) 1350 DBACKSPACE #1,BEG : DATA SAVE DC #1,S0,P$() : DATA SAVE DC #1,END : DATA SAVE DC CLOSE#1 1360 LOAD T#1,"LB TITLE" 1370 DEFFN'31"Z$=";HEX(22);"LB GAME ";HEX(22);":SCRATCH T Z$:SAVE T() Z$";HEX( 0D)