! This program was originally written in MICROSOFT BASIC for CP/M
! and was first distributed by the HEATH USERS GROUP (HUG). I found it
! titled: OSZ-JEDI.BAS (FOR THE OSBORNE-1) and modified it to run on my
! ALPHA MICRO AM1000. The line #'s are choppy due to my editing, but
! have remained largely unchanged due to the number of line # calls.
!
! There may still be a bug or two - if you find 'em, fix 'em!
!
! Makes use of TCRT calls and GRAPHICS CHARACTERS FOR AM-62 TERMINAL
! Makes use of INKEY.SBR (from AMUS) (Thanx, Mr. Jarboe!)
!
! I suggest you copy the following into a .CMD file to load and start the
! program.  It runs a great deal faster with INKEY.SBR resident in memory.
!
! DEL *
! LOAD INKEY.SBR
! :R
! RUN JEDI
!
! ENJOY!
!
! Marc McCauley   MARY/AM    12/30/85
!
1100 MAP1 A$,S,2
1110 MAP1 B$,S,1
1120 MAP1 E$,S,1,CHR$(27)
1130 MAP1 ED,F           ! enemies destroyed - mod line 3280 for more
1140 MAP1 CD,F
1150 MAP1 CT,F           ! timer - mod line 2910 for longer game
1160 MAP1 KM,F
1170 MAP1 BR,F
1180 MAP1 EV,F
1190 MAP1 DG,F
1200 MAP1 FQ,F
1210 MAP1 FX,F
1220 MAP1 FY,F
1230 MAP1 FZ,F
1240 MAP1 X,F
1250 MAP1 Y,F
1260 MAP1 A9,F
1270 MAP1 FL$,S,1
1280 MAP1 DM$,S,1
1290 RANDOMIZE
1380 PRINT TAB(-1,0)
1390 PRINT ,"   ********   **********    ******    *********"
1400 PRINT ,"  **      **      **       **    **   **      **"
1410 PRINT ,"  **              **      **      **  **      **"
1420 PRINT ,"   ********       **      **********  *********"
1430 PRINT ,"          **      **      **      **  **    **"
1440 PRINT ,"  **      **      **      **      **  **     **"
1450 PRINT ,"   ********       **      **      **  **      **":PRINT
1460 PRINT
1470 PRINT ,"  **      **    ******    *********    ********"
1480 PRINT ,"  **      **   **    **   **      **  **      **"
1490 PRINT ,"  **      **  **      **  **      **  **"
1500 PRINT ,"  **  **  **  **********  *********    ********"
1510 PRINT ,"  **  **  **  **      **  **    **            **"
1520 PRINT ,"   ********   **      **  **     **   **      **"
1530 PRINT ,"    **  **    **      **  **      **   ********":GOSUB DELAY
1560 PRINT ,"A LONG TIME AGO IN A GALAXY FAR, FAR AWAY, A GREAT":GOSUB DELAY
1580 PRINT ,"ADVENTURE TOOK PLACE.  IT IS A PERIOD OF CIVIL WAR.":GOSUB DELAY
1600 PRINT ,"REBEL SPACE SHIPS STRIKING FROM A HIDDEN BASE HAVE":GOSUB DELAY
1620 PRINT ,"WON THEIR FIRST VICTORY AGAINST THE EVIL  GALACTIC":GOSUB DELAY
1640 PRINT ,"EMPIRE.  DURING THE BATTLE, REBEL SPIES MANAGED TO":GOSUB DELAY
1660 PRINT ,"STEAL SECRET PLANS TO THE EMPIRE'S ULTIMATE WEAPON":GOSUB DELAY
1680 PRINT ,"THE DEATH STAR, AN ARMOURED SPACE STATION WITH THE":GOSUB DELAY
1700 PRINT ,"FIRE POWER TO DESTROY AN ENTIRE PLANET. ":GOSUB DELAY:PRINT
1720 PRINT ,"     YOUR MISSION AS ONE OF THE REBEL PILOTS IS TO":GOSUB DELAY
1740 PRINT ,"ATTACK AND DESTROY THE `DEATH STAR'.  WHILE MAKING":GOSUB DELAY
1760 PRINT ,"YOUR ATTACK YOU HAVE ENCOUNTERED `DARTH VADER' AND":GOSUB DELAY
1780 PRINT ,"HIS IMPERIAL STORM TROOPERS IN THEIR TIE FIGHTERS.":GOSUB DELAY
1800 PRINT ,"YOU MUST DESTROY THEM BEFORE THEY CAN DESTROY YOU.":PRINT
1820 PRINT ,"    GOOD LUCK, AND MAY THE `FORCE' BE WITH YOU    "
1830 FOR I=1 TO 20000:NEXT I
1840 PRINT TAB(-1,0)
1850 ! *** INSTRUCTION ROUTINE ***
1880 PRINT E$;"=*6";"DO YOU NEED:":PRINT
1890 PRINT TAB(30);"FULL INSTRUCTIONS <F>?"
1900 PRINT TAB(30);"BRIEF INSTRUCTIONS <B>?"
1910 PRINT TAB(30);"NO INSTRUCTIONS <N>?"
1920 INPUT A$:IF A$=" " THEN A$="N"
1925 IF UCS(A$)="F" THEN 2010
1930 IF UCS(A$)="B" THEN 2410
1940 IF UCS(A$)<>"N" THEN 1920
1950 PRINT
1960 PRINT TAB(29):INPUT "WHAT IS YOUR SKILL RATING? ",A$
1970 IF A$<"1" OR A$>"9" THEN 1990
1980 A$=A$+"0":A9=INT(VAL(A$)):A9=A9-12336:GOTO 2680
1990 PRINT
1995 PRINT TAB(26);"EVIDENTLY YOU NEED INSTRUCTIONS!"
2000 FOR I=1 TO 500:NEXT I:PRINT
2010 PRINT TAB(-1,0)
2020 PRINT "You have been equipped with an X-wing    as in a real DOG-FIGHT you  must  lead"
2040 PRINT "Fighter by the Rebel Alliance.   Your    the target when firing your laser.  If"
2060 PRINT "fighter is computer controlled by the    you wait until he is exactly centered"
2080 PRINT "NUMERIC KEYPAD on your keyboard.  The    to fire, then you will miss him.  You"
2100 PRINT "display you will see is your ON-BOARD    may continue to fire at him, but when"
2120 PRINT "SCANNER.  In order to kill  an  enemy    you are firing your weapon, your con-"
2140 PRINT "fighter he must receive a  DIRECT HIT    trol of direction is not as  good  as"
2160 PRINT "OR MULTIPLE DAMAGING HITS.   He  will    when you aren't Firing and the Target"
2180 PRINT "receive damage if hit when he is  +/-    may fly out of your sights."
2200 PRINT "10 DEGREES IN ELEVATION and he is +/-"
2220 PRINT "9 DEGREES IN BEARING.  In addition to    In order to CENTER your target on the"
2240 PRINT "this, he MUST BE WITHIN 7500 KMS.        Scanner, you must fly towards him."
2260 PRINT "                                         To do this you PRESS THE KEY  ON  THE"
2280 PRINT "WARNING:  THE `TIE' FIGHTER  HAS  THE    NUMERIC KEY PAD THAT IS IN HIS DIREC-"
2300 PRINT "CAPABILITY TO POP IN AND OUT OF  HYP-    TION. ie: IF HE IS IN THE UPPER RIGHT"
2320 PRINT "ERSPACE.  THEREFORE HE MAY  DISAPPEAR    QUADRANT YOU WOULD PRESS KEY 9 TO FLY"
2340 PRINT "RIGHT FROM BEFORE YOUR SIGHTS.           TOWARDS HIM. IF HE IS BELOW, PRESS 2."
2360 PRINT " ":PRINT
2380 INPUT "      MAY THE FORCE BE WITH YOU                 Press RETURN to Continue ",NADA
2410 PRINT TAB(-1,0)
2430 PRINT ,"     UP &                UP             UP &"
2440 PRINT TAB(17);"  LEFT";TAB(-1,23);"      rzzzzzs rzzzzzs rzzzzzs  ";TAB(-1,24);"RIGHT"
2450 PRINT TAB(17);TAB(-1,23);"            v     v v     v v     v"
2460 PRINT TAB(17);"            qzzzzzu qzzzzzu qzzzzzu"
2470 PRINT ,"               rzzzzzs rzzzzzs rzzzzzs";TAB(-1,24)
2480 PRINT ,"      LEFT     ";TAB(-1,23);"v     v v     v v     v";TAB(-1,24);"   RIGHT"
2490 PRINT TAB(-1,23),"               qzzzzzu qzzzzzu qzzzzzu"
2500 PRINT ,"               rzzzzzs rzzzzzs rzzzzzs"
2510 PRINT TAB(17);"            v     v v     v v     v"
2520 PRINT TAB(-1,24),"      DOWN";TAB(-1,23);"     qzzzzzu qzzzzzu qzzzzzu    ";TAB(-1,24);"DOWN"
2530 PRINT ,"    & LEFT";TAB(-1,23);"     rzzzzzs";TAB(-1,24);"   DOWN           & RIGHT"
2540 PRINT TAB(-1,23);"                             v     v"
2550 PRINT "                             qzzzzzu";TAB(-1,24)
2560 PRINT ,"                FIRE"
2561 PRINT TAB(4,33);"7";TAB(4,41);"8";TAB(4,49);"9"
2562 PRINT TAB(7,33);"4";TAB(7,41);"5";TAB(7,49);"6"
2563 PRINT TAB(10,33);"1";TAB(10,41);"2";TAB(10,49);"3";TAB(13,33);"0"
2570 PRINT TAB(17,20);"<<PRESS '5' TO STOP ANY TURNS OR CLIMBS>>":PRINT
2580 PRINT TAB(20);"PLEASE ENTER A SKILL RATING FROM 1 TO 9":PRINT
2590 PRINT TAB(27);"NOVICE = 1   EXPERT = 9":PRINT
2610 PRINT "AFTER SCANNER CONSTRUCTION IS COMPLETE, PRESS ANY NUMBER KEY TO START."
2630 INPUT "SKILL LEVEL > ",A$:IF A$<"1" OR A$>"9" THEN 2630
2640 A$=A$+"0":A9=INT(VAL(A$)):A9=A9-12336
2650 !
2660 ! *** GRID CONSTRUCTION ROUTINE ***
2670 !
2680 ED=0:CT=0
2690 PRINT TAB(-1,0);TAB(-1,29);TAB(-1,11);
2710 PRINT TAB(1,11);"RANGE:        KM   ELEVATION:      DEG   BEARING:      DEG"
2720 PRINT
2730 PRINT TAB(8);"-90  -75  -60  -45  -30  -15   0   +15  +30  +45  +60  +75  +90"
2740 PRINT TAB(5);"+90 ";TAB(-1,23);"r0000b0000b0000b0000b0000b0000b0000b0000b0000b0000b0000b0000s";TAB(-1,24);" +90"
2750 PRINT TAB(9);TAB(-1,23);"v";SPACE(59);"v":PRINT TAB(9);"v";SPACE(59);"v";TAB(-1,24)
2760 PRINT TAB(5);"+60 ";TAB(-1,23);"x";SPACE(59);"x";TAB(-1,24);" +60"
2770 PRINT TAB(9);TAB(-1,23);"v";SPACE(59);"v":PRINT TAB(9);"v";SPACE(59);"v";TAB(-1,24)
2780 PRINT TAB(5);"+30 ";TAB(-1,23);"x";SPACE(59);"x";TAB(-1,24);" +30"
2790 PRINT TAB(9);TAB(-1,23);"v";SPACE(59);"v":PRINT TAB(9);"v";SPACE(59);"v";TAB(-1,24)
2800 PRINT TAB(6);"0 ";TAB(-1,23);" x";SPACE(59);"x ";TAB(-1,24);" 0"
2810 PRINT TAB(9);TAB(-1,23);"v";SPACE(59);"v":PRINT TAB(9);"v";SPACE(59);"v";TAB(-1,24)
2820 PRINT TAB(5);"-30 ";TAB(-1,23);"x";SPACE(59);"x";TAB(-1,24);" -30"
2830 PRINT TAB(9);TAB(-1,23);"v";SPACE(59);"v":PRINT TAB(9);"v";SPACE(59);"v";TAB(-1,24)
2840 PRINT TAB(5);"-60 ";TAB(-1,23);"x";SPACE(59);"x";TAB(-1,24);" -60"
2850 PRINT TAB(9);TAB(-1,23);"v";SPACE(59);"v":PRINT TAB(9);"v";SPACE(59);"v";TAB(-1,24)
2860 PRINT TAB(5);"-90 ";TAB(-1,23);"q]]]]a]]]]a]]]]a]]]]a]]]]a]]]]a]]]]a]]]]a]]]]a]]]]a]]]]a]]]]u";TAB(-1,24);" -90"
2870 PRINT TAB(8);"-90  -75  -60  -45  -30  -15   0   +15  +30  +45  +60  +75  +90";TAB(-1,12)
2880 !
2890 ! *** INPUT CONTROL SCAN ROUTINE ***
2900 !
2910 CD=200+INT(200+RND(1)):FL$="5"
2920 IF CT=CD THEN 4020 ELSE CT=CT+1
2930 IF FL$="0" THEN 3050
2940 XCALL INKEY,B$
2950 IF B$>="0" AND B$<="9" THEN FL$=B$ ELSE IF B$<>"" THEN DM$=B$
2960 XCALL INKEY,B$
2970 IF B$>"0" AND B$<="9" THEN FL$=B$ ELSE IF B$<>"" THEN DM$=B$
2980 GOSUB 3440
2990 PRINT E$;"=&3+";E$;"=23+";E$;"=)=+";E$;"=/=+";E$;"=,G+";E$;"=)Q+";E$;"=/Q+";E$;"=&[+";E$;"=2[+";
3000 FOR I=1 TO 100:NEXT I
3010 GOTO 2920
3020 !
3030 ! *** FIRE WEAPON ROUTINE ***
3040 !
3050 FOR I=8 TO 1 STEP -1
3060 PRINT E$;"=";CHR$(44+I);CHR$(71-I);TAB(-1,23);"a";
3070 PRINT E$;"=";CHR$(44+I);CHR$(71+I);"a";TAB(-1,24);
3080 IF I>6 THEN 3110
3090 PRINT E$;"=";CHR$(46+I);CHR$(69-I);" ";
3100 PRINT E$;"=";CHR$(46+I);CHR$(73+I);" ";
3110 NEXT I
3120 PRINT E$;"=.E ";E$;"=.I ";E$;"=-F ";E$;"=-H ";
3130 IF FX<>44 OR FY<>70 THEN 3290
3140 IF KM>5000 THEN 2960
3150 PRINT TAB(25,31);TAB(-1,32);" ENEMY DESTROYED ";TAB(-1,33);:DG=0
3160 ED=ED+1
3170 PRINT E$;"=";CHR$(FX-1);CHR$(FY);"<|>"
3180 PRINT E$;"=";CHR$(FX);CHR$(FY-1);"     "
3190 PRINT E$;"=";CHR$(FX+1);CHR$(FY);">|<"
3200 FOR I=1 TO 50:PRINT CHR$(7);:NEXT I
3210 PRINT E$;"=";CHR$(FX);CHR$(FY);"***"
3220 FOR I=1 TO 50:NEXT I
3230 PRINT E$;"=";CHR$(FX-1);CHR$(FY);"   "
3240 PRINT E$;"=";CHR$(FX);CHR$(FY-1);"***"
3250 PRINT E$;"=";CHR$(FX+1);CHR$(FY);"   "
3260 FOR I=1 TO 50:NEXT I
3270 PRINT E$;"=";CHR$(FX);CHR$(FY);"   "
3280 FQ=0:IF ED=5 THEN 3960 ELSE GOTO 2960
3290 IF FX<43 OR FX>45 THEN 3410
3300 IF FY<68 OR FY>72 THEN 3410
3310 DG=DG+1:IF DG=3 THEN 3150
3320 PRINT E$;"=";CHR$(FX-1);CHR$(FY);"[=]"
3330 PRINT E$;"=";CHR$(FX);CHR$(FY-1);"I"
3340 PRINT E$;"=";CHR$(FX);CHR$(FY+3);"I"
3350 PRINT E$;"=";CHR$(FX+1);CHR$(FY);"]*["
3360 FOR I=1 TO 50:NEXT I
3370 PRINT E$;"=";CHR$(FX-1);CHR$(FY);"   "
3380 PRINT E$;"=";CHR$(FX);CHR$(FY-1);" "
3390 PRINT E$;"=";CHR$(FX);CHR$(FY+3);" "
3400 PRINT E$;"=";CHR$(FX+1);CHR$(FY);"   ":GOTO 2960
3410 PRINT E$;"=8 ";E$;"T";
3420 GOTO 2960
3430 !
3440 ! *** FIGHTER POSITION UPDATE ***
3450 !
3460 IF FQ=1 THEN 3530 ELSE FQ=1
3470 LET FX=INT(100*RND(1))
3480 IF FX<36 OR FX>52 THEN 3470
3490 LET FY=INT(200*RND(1))
3500 IF FY<44 OR FY>97 THEN 3490
3510 LET KM=INT(10000*RND(1))
3520 FZ=INT(16*RND(1))
3530 IF INT(100*RND(1))>6 THEN 3550
3540 FZ=INT(16*RND(1))
3550 IF INT(10*RND(1))<A9 THEN 3560 ELSE X=FX:Y=FY:GOTO 3720
3560 IF FZ<>0 THEN 3570 ELSE X=FX-1:Y=FY+1
3570 IF FZ<>1 THEN 3580 ELSE X=FX:Y=FY+1
3580 IF FZ<>2 THEN 3590 ELSE X=FX+1:Y=FY+1
3590 IF FZ<>3 THEN 3600 ELSE X=FX+1:Y=FY
3600 IF FZ<>4 THEN 3610 ELSE X=FX+1:Y=FY-1
3610 IF FZ<>5 THEN 3620 ELSE X=FX:Y=FY-1
3620 IF FZ<>6 THEN 3630 ELSE X=FX-1:Y=FY-1
3630 IF FZ<>7 THEN 3640 ELSE X=FX-1:Y=FY
3640 IF FZ<>8 THEN 3650 ELSE X=FX-1:Y=FY+2
3650 IF FZ<>9 THEN 3660 ELSE X=FX-1:Y=FY+3
3660 IF FZ<>10 THEN 3670 ELSE X=FX+1:Y=FY+3
3670 IF FZ<>11 THEN 3680 ELSE X=FX+1:Y=FY+2
3680 IF FZ<>12 THEN 3690 ELSE X=FX+1:Y=FY-2
3690 IF FZ<>13 THEN 3700 ELSE X=FX+1:Y=FY-3
3700 IF FZ<>14 THEN 3710 ELSE X=FX-1:Y=FY-3
3710 IF FZ<>15 THEN 3720 ELSE X=FX-1:Y=FY-2
3720 IF FL$<>"1" THEN 3730 ELSE X=X-1:Y=Y+1
3730 IF FL$<>"2" THEN 3740 ELSE X=X-2:Y=Y
3740 IF FL$<>"3" THEN 3750 ELSE X=X-1:Y=Y-1
3750 IF FL$<>"4" THEN 3760 ELSE X=X:Y=Y+2
3760 IF FL$<>"6" THEN 3770 ELSE X=X:Y=Y-2
3770 IF FL$<>"7" THEN 3780 ELSE X=X+1:Y=Y+1
3780 IF FL$<>"8" THEN 3790 ELSE X=X+2:Y=Y
3790 IF FL$<>"9" THEN 3800 ELSE X=X+1:Y=Y-1
3800 IF X>39 AND X<50 AND Y>55 AND Y<87 THEN 3840
3810 IF SGN(KM)=+1 THEN KM=KM+INT(200*RND(1))
3820 IF SGN(KM)=-1 THEN KM=KM-INT(200*RND(1))
3830 IF KM<10000 THEN 3860 ELSE GOTO 3930
3840 IF SGN(KM)=+1 THEN KM=KM-INT(200*RND(1))
3850 IF SGN(KM)=-1 THEN KM=KM+INT(200*RND(1))
3860 IF X<36 OR X>52 OR Y<42 OR Y>98 THEN 3930
3870 IF X=FX AND Y=FY THEN RETURN
3880 PRINT E$;"=";CHR$(FX);CHR$(FY);"   ":FX=X:FY=Y
3890 PRINT E$;"=";CHR$(FX);CHR$(FY);TAB(-1,23);"4/9";TAB(-1,24)
3900 PRINT TAB(1,19);KM
3910 EV=10*(44-FX):PRINT TAB(1,42);EV
3920 BR=3*(FY-70):PRINT TAB(1,62);BR:RETURN
3930 PRINT E$;"=";CHR$(FX);CHR$(FY);"   ";
3940 FQ=0:RETURN
3950 PRINT E$;"=8 ";E$;"T";:RETURN
3960 FOR I=1 TO 500:NEXT I:PRINT E$;"=  ";TAB(-1,0)
3970 PRINT TAB(-1,12);E$;"=( ";
3980 PRINT TAB(-1,0)
3990 PRINT ,"CONGRATULATIONS ON A JOB WELL DONE.  YOU HAVE"
4000 PRINT ,"DESTROYED DARTH VADER AND HIS STORM TROOPERS,"
4010 PRINT ,"AND SAVED THE REBELLION.": GOTO 4070
4020 PRINT TAB(-1,0)
4040 PRINT ,"YOU HAVE ONLY DESTROYED";ED;"TIE FIGHTERS AND"
4050 PRINT ,"YOU LET DARTH VADER GET AWAY.  OH WELL, I GUESS"
4060 PRINT ,"WE WANT HIM AROUND FOR THE SEQUEL ANYWAY!"
4070 PRINT TAB(-1,28):INPUT "DO YOU WANT TO PLAY AGAIN <Y or N>? ",A$
4080 IF UCS(A$)="Y" THEN B$=" ":GOTO 1950
4090 PRINT TAB(-1,0);TAB(-1,28)
4110 PRINT TAB(5,5);"FIGHTING EVIL CAN BE TIRING...COME BACK WHEN YOU'RE READY FOR";TAB(-1,21);"ACTION !";TAB(-1,22)
4120 END
4130 DELAY:
4140  FOR I=1 TO 1000:NEXT I:PRINT
4150  RETURN