image of READY prompt

Wang2200.org

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)