image of READY prompt

Wang2200.org

Listing of file='Star1' on disk='vmedia/games-droz00.wvd.zip'

# Sector 805, program filename = 'Star1'
1760 IF F<>0THEN LOAD T#1,"StarTrek"
1762 DEFFN'15
1765 PRINT HEX(020D0C030F0306)
1780 GOSUB 3030
1795 GOSUB 3110
1810 GOSUB '101
1815 GOSUB '105
1830 GOSUB '102
1835 GOSUB '105
1850 IF F<>0THEN 6096
1855 GOTO 1810
1865 DEFFN'101
1880 DIM C,R,X2,Y2
1885 DIM I1$
1890 DIM S1$(11)22,S$(11)22
1955 GOSUB 2045
1960 GOSUB '105
1975 GOSUB 2455
1980 GOSUB '105
1995 GOSUB 2600
2000 GOSUB '105
2015 GOSUB 2795
2020 GOSUB '105
2025 RETURN
2045 R=R(1)
2050 C=C(1)
2055 S$="Short Range Sensor Scan"
2070 X2=FN0(X1)
2075 Y2=FN0(Y1)
2090 GOSUB 2265
2105 GOSUB 2355
2110 IF W1>1THEN 2220
2115 IF FND(8)=-1THEN 2175
2130 MAT COPY S$()TO S1$()
2135 $TRAN(S1$()," #`\81*+'/\")
2140 FOR I=1TO 11
2145 PRINT AT(R+I,C+3);STR(S1$(I));
2150 NEXT I
2155 PRINT HEX(0F)
2160 RETURN
2175 S1$()=" "
2180 PRINT F1$(3);
2185 S$="Short Range"
2190 STR(S1$(5),(22-LEN(S$)+1)/2+1)=S$
2195 S$="Sensors Are Out"
2200 STR(S1$(6),(22-LEN(S$)+1)/2+1)=S$
2205 GOTO 2140
2220 S1$()=" / \"&STR(S1$())
2225 FOR I=1TO 11
2230 PRINT AT(R+I,C+3);STR(S1$(I))
2235 NEXT I
2240 S$="Warp Speed"
2245 PRINT AT(R+5,C+3+(22-LEN(S$)+1)/2);F1$(3);" ";S$;" ";HEX(0F);
2250 RETURN
2265 PRINT AT(R,C+3+(22-LEN(S$)+1)/2);S$
2270 PRINT AT(R+1,C+3);BOX(11,22)
2275 FOR I=-5TO +5
2280 PRINT AT(R+1+I+5,C);
2285 IF INT((X2-1)/8)=INT((X2+I-1)/8)AND FND(4)=1THEN PRINT F1$(2);
   : ELSE PRINT HEX(0F);
2290 IF X2+I>0AND X2+I<65THEN PRINTUSING "##-",-(X2+I);
   : ELSE PRINT "##-";
2295 NEXT I
2300 PRINT HEX(0F);
2305 PRINT AT(R+1+11,C+3);" \86 ' \86 ' \86 ' \86 ' \86 ' \86"
2310 PRINT AT(R+1+12,C+3);
2315 FOR I=-5TO 5STEP 2
2320 IF INT((Y2-1)/8)=INT((Y2+I-1)/8)AND FND(4)=1THEN PRINT F1$(2);
   : ELSE PRINT HEX(0F);
2325 IF Y2+I>0AND Y2+I<65THEN PRINTUSING "##  ",Y2+I;
   : ELSE PRINT "##  ";
2330 NEXT I
2335 PRINT HEX(0F);
2340 RETURN
2355 S$()=HEX(00070008)&STR(S$())
2360 IF MIN(X2,Y2)>64THEN RETURN
2365 FOR I=MAX(X2-5,1)TO MIN(X2+5,64)
2370 FOR J=MAX(Y2-5,1)TO MIN(Y2+5,64)
2375 IF MIN(X2,Y2)<=64THEN STR(S$(I-X2+5+1),2*(J-Y2+5+1),1)=U$(I,J)
2380 NEXT J
2385 NEXT I
2390 S$=ALL(00)
2395 MAT SEARCHS$(),=HEX(03)TO S$
2400 K2=INT((POS(-S$<>HEX(00))+1)/2)
2405 IF K2=0THEN 2440
2410 GOSUB '107("Red",1)
2415 IF S1>100OR STR(C1$(6),9,1)>HEX(00)THEN 2440
2420 MAT MOVE M1$()TO M$()
2425 M$(1)="``"&F1$(3)&"Combat Area!!"&HEX(0F)
2430 M$(2)="   Shields dangerously low."
2435 GOSUB '106(2)
2440 RETURN
2455 R=R(2)
2460 C=C(2)
2465 S$="Cumulative Galactic Record"
2470 PRINT AT(R,C+(4*8-LEN(S$)+1)/2);S$
2475 PRINT AT(R+1,C);BOX(8,4*8)
2490 IF FND(1)=1OR FND(4)=1THEN 2545
2495 FOR I=1TO 8
2500 PRINT AT(R+I,C,8*4);
2505 NEXT I
2510 S$="Computer and Long Range"
2515 PRINT AT(R+1+3,C+(4*8-LEN(S$)+1)/2);F1$(3);S$
2520 S$="Sensor Scan Disabled"
2525 PRINT AT(R+1+4,C+(4*8-LEN(S$)+1)/2);S$;HEX(0F)
2530 GOTO 2590
2545 X2=INT((X1-1)/8)
2550 Y2=INT((Y1-1)/8)
2555 FOR I=0TO 7
2560 PRINT AT(R+I+1,C+1);F1$(2);HEX(0F);
2565 FOR J=0TO 7
2570 IF ABS(X2-I)<=1AND ABS(Y2-J)<=1AND FND(4)=1THEN PRINT HEX(0E);L$(I-X2+2,J
     -Y2+2);" ";HEX(0F);
   : ELSE IF FND(1)=1THEN PRINT STR(C$(I+1,J+1));" ";
   : ELSE PRINT "??? ";
2575 NEXT J
2580 PRINT
2585 NEXT I
2590 RETURN
2600 R=R(3)
2605 C=C(3)
2610 S$="Star Trek"
2615 PRINT AT(R,C+(19-LEN(S$)+1)/2+1);S$
2620 PRINT AT(R+1,C);BOX(8,19)
2625 PRINT AT(R+1,C+1);
2630 PRINTUSING "Stardate:   ####.#",T1;
2635 IF S1<250AND C1$<>"Red"AND C1$<>"Docked"THEN F1=MAX(F1,4)
2640 C1$=C1$(1)
2645 FOR I=2TO 8
2650 IF STR(C1$(I),9,1)>HEX(00)THEN C1$=C1$(I)
2655 IF STR(C1$(I),9,1)>HEX(00)THEN STR(C1$(I),9,1)=SUBHEX(01)
2660 NEXT I
2665 PRINT AT(R+2,C+1);"Condition:  ";
2670 IF C1$="Yellow"THEN PRINT F1$(2);
2675 IF C1$="Red"THEN PRINT F1$(3);
2680 PRINTUSING "######",C1$;
2685 PRINT HEX(0F);
2690 PRINT AT(R+3,C+1);
2695 PRINTUSING "Sector:     ##, ##",FN0(X1),FN0(Y1);
2700 PRINT AT(R+4,C+1);
2705 PRINTUSING "Energy:       ####",E1;
2710 PRINT AT(R+5,C+1);
2715 PRINTUSING "Shields:      ####",MAX(0,S1);
2720 PRINT AT(R+6,C+1);
2725 PRINTUSING "Torpedoes:      ##",P1;
2730 PRINT AT(R+7,C+1);
2735 PRINTUSING "Course:      #.###",C1;
2740 PRINT AT(R+8,C+1);
2745 PRINTUSING "Warp Factor: #.###",W1;
2750 RETURN
2760 DEFFN'107(C0$,I9)
2765 S$=ALL(00)
2770 MAT SEARCHC1$(),=C0$TO S$STEP 9
2775 STR(C1$(1+VAL(STR(S$,1,2),2)/9),9,1)=BIN(I9)
2780 IF STR(S$,3,2)>HEX(0000)THEN STR(C1$(1+VAL(STR(S$,3,2),2)/9),9,1)=BIN(2)
2785 RETURN
2795 R=R(4)
2800 C=C(4)
2805 PRINT AT(R,C);BOX(10,21);AT(R+10,C);BOX(4,21);
2810 PRINT AT(R,C+1);"State of Repair:";
2825 IF FND(2)=1THEN 2880
2830 FOR I=1TO 9
2835 PRINT AT(R+I,C,21);F1$(3);
2840 NEXT I
2845 S$="Damage Control"
2850 PRINT AT(R+1+4,C+(20-LEN(S$)+1)/2);S$;
2855 S$="Disabled"
2860 PRINT AT(R+1+5,C+(20-LEN(S$)+1)/2);S$;HEX(0F);
2865 GOTO 2925
2880 FOR I=1TO 9
2885 PRINT AT(R+I,C+1);
2890 IF FND(I)<>1THEN PRINT F1$(3);
2895 PRINTUSING "############### ###%",D$(I),FN0(D(I));
2900 IF FND(I)<>1THEN PRINT HEX(0F);
2905 NEXT I
2925 IF FND(1)=1THEN 2980
2930 FOR I=10TO 13
2935 PRINT AT(R+I,C,21);
2940 NEXT I
2945 S$="Computer"
2950 PRINT AT(R+11,C+(20-LEN(S$)+1)/2);F1$(3);S$;
2955 S$="Disabled"
2960 PRINT AT(R+12,C+(20-LEN(S$)+1)/2);S$;HEX(0F);
2965 GOTO 3020
2980 PRINT AT(R+10,C+1);
2985 PRINTUSING "Starbases Left:   ##",B1;
2990 PRINT AT(R+11,C+1);
2995 PRINTUSING "Klingons Left:    ##",K1;
3000 PRINT AT(R+12,C+1);
3005 PRINTUSING "Stardates Left:   ##",FN0(D1);
3010 PRINT AT(R+13,C+1);
3015 PRINTUSING "Max. Rating: #####.#",FN0(650000*K0/(MAX(D0-D1,2)*B0*A1))/10;
3020 RETURN
3030 R=R(5)
3035 C=C(5)
3040 S$="Courses"
3055 PRINT AT(R,C+(10-LEN(S$)+1)/2);S$;
3060 PRINT AT(R+1,C);BOX(5,10);
3075 PRINT AT(R+1,C+1);"4   3   2";
3080 PRINT AT(R+2,C+1);"  \ \86 /  ";
3085 PRINT AT(R+3,C+1);"5 - + - 1";
3090 PRINT AT(R+4,C+1);"  / \86 \  ";
3095 PRINT AT(R+5,C+1);"6   7   8";
3100 RETURN
3110 R=R(6)
3115 C=C(6)
3120 S$="Command"
3135 PRINT AT(R,C+(15-LEN(S$)+1)/2);S$;
3140 PRINT AT(R+1,C);BOX(7,15);
3155 IF F=0THEN 3190
3160 PRINT AT(R+1,C+1);
3165 PRINTUSING "# - ##########",I$(8),STR(I$(8),POS(I$(8)="\80")+1)
3170 FOR I=2TO 7
3175 PRINT AT(R+I,C+1,15)
3180 NEXT I
3185 GOTO 3220
3190 FOR I=1TO 7
3195 J=POS(I$(I)="\80")
3200 IF J=0THEN 3215
3205 PRINT AT(R+I,C+1);
3210 PRINTUSING "# - ##########",I$(I),STR(I$(I),J+1,POS(STR(I$(I),J+1)=" ")-1
     );
3215 NEXT I
3220 RETURN
3230 DEFFN'102
3245 DIM C2,E2,F2,X2,X3,Y2,Y3
3290 T1=T1+T2
3295 D1=D1-T2
3300 F1=F1-1
3305 IF D1<0THEN F=3
3310 IF E1<0THEN F=4
3315 IF K1=0AND C1$="Docked"THEN F=9
3320 IF K1=0AND B1=0THEN F=9
3335 GOSUB 6268
3340 GOSUB '105
3355 GOSUB 6384
3360 GOSUB '105
3375 GOSUB 6576
6000 GOSUB '105
6012 GOSUB 6648
6016 GOSUB '105
6028 GOSUB 7056
6032 GOSUB '105
6044 GOSUB 7564
6048 GOSUB '105
6060 GOSUB 7396
6064 GOSUB '105
6076 GOSUB 7268
6080 GOSUB '105
6088 RETURN
6096 GOSUB '101
6097 MAT MOVE M1$()TO M$()
6100 ON FGOTO 6108,6128,6144,6156,6176,,,6144,6200
   : ELSE GOTO 6236
6108 M$(1)="``***  The Enterprise Has Been Destroyed!!  ***"
6112 M$(2)="``You ran into one of your own torpedoes, Captain!"
6116 M$(3)="``Nice going."
6120 GOTO 6232
6128 M$(2)="`` The Enterprise has become the prey of a Black Hole!!"
6132 M$(3)="`` You shall never be seen or heard from again..."
6136 GOTO 6232
6144 PRINTUSING TO M$(1),"Stardate ####.#!   You have not completed your missi
     on.",T1
6148 GOTO 6212
6156 M$(1)="``ENERGY = 0.  The Enterprise is dead in space."
6160 M$(4)="``If we survive all impending attacks."
6164 E1=0
6168 GOTO 6212
6176 M$(1)="``*** The Enterprise has been destroyed!!! ***"
6180 M$(2)="``  The Federation will be conquered!!"
6184 PRINTUSING TO M$(3),"  ## Klingon battle cruisers remain.",K1
6188 M$(4)="``  (YOU BLEW IT, Captain.)"
6192 GOTO 6232
6200 M$(1)="``You have successfully completed your mission."
6204 PRINTUSING TO M$(4),"Your Efficency Rating is ####.#",FN0(650000*K0/(MAX(
     D0-D1,2)*B0*A1))/10;
6212 IF K1>0THEN PRINTUSING TO M$(2),"  ## Klingon battle cruisers remain.",K1
6216 IF K1=0AND B1>0THEN M$(2)="`` The Federation is saved!!"
6220 IF K1=0AND B1=0THEN M$(2)="``Unfortunately, no Federation Starbases remai
     n."
6224 IF F<>9THEN M$(3)="``You shall be demoted to the rank of Ensign..."
6228 IF P$="D"THEN M$(3)="``You go via shuttle craft the Betelgeuse Dilithium
     Mines..."
6232 GOSUB '106(2)
6236 IF F=4THEN 1795
6252 PRINT AT(16,0,40)
   : PRINT AT(17,1);"End of game. KEY SF '31 for menu."
6254 KEYIN S$,,6255
   : GOTO 6254
6255 IF VAL(STR(S$,,1))<>31 THEN 6254
6260 DEFFN'31
   : COM CLEAR F
   : LOAD T#1,O9$
   : ERRORLOAD TO9$
   : ERRORLOAD T"!"
   : ERRORLOAD T"START"
6268 ON SGN(F2)+2GOSUB 6284,6296,6308
6272 F2=F2-SGN(F2)
6276 RETURN
6284 GOSUB '106(-F2)
6288 RETURN
6296 PRINT AT(19,0,58);AT(20,0,58);AT(21,0,58);AT(22,0,58);AT(23,0,58);
6300 RETURN
6308 IF RND(1)>.08THEN RETURN
6312 MAT MOVE M1$()TO M$()
6316 M$(1)="``Uhura here."
6320 ON 4*RND(1)+1GOTO 6324,6336,6348,6360
6324 M$(2)="``Starfleet informs me that you have once again been elected"
6328 M$(3)="``Starship Captain of the Month!  Congradulations!"
6332 GOTO 6372
6336 PRINTUSING TO M$(2),"Starfleet reminds us that we have ## Stardates",ROUN
     D((D1,0)
6340 IF K1>0THEN M$(3)="``in which to complete our mission."
   : ELSE M$(3)="``to return to the nearest Starbase."
6344 GOTO 6372
6348 M$(2)="``Starfleet informs us that our Neilson Ratings"
6352 PRINTUSING TO M$(3),"have gone up ## points.",5*RND(1)+2
6356 GOTO 6372
6360 M$(2)="``I've just received another communication"
6364 M$(3)="``from this woman, Shana, of the planet Triskelion."
6368 M$(4)="``She keeps mentioning something about a paternity suit ..."
6372 GOSUB '106(-5)
6376 RETURN
6384 IF C1$<>"Docked"THEN 6416
6388 FOR I=1TO 9
6392 IF D(I)<80THEN D(I)=MIN(D(I)+80*T2,80)
6396 NEXT I
6400 E1=MIN(1.1*E0,E1+S1+T2*E0)
6404 S1=0
6408 P1=MIN(P0,P1+T2*P0)
6412 GOTO 6564
6416 IF E1<=0THEN 6448
6420 FOR I=1TO 9
6424 IF FND(I)<1THEN 6432
6428 IF D(I)>33OR E1<250THEN 6440
6432 D(I)=MIN(100,D(I)+T2*10)
6436 E1=E1-T2*5
6440 NEXT I
6448 IF E1>250OR FND(2)=0OR E1<=0THEN 6508
6452 GOSUB '107("Yellow",1)
6456 MAT MOVE M1$()TO M$()
6460 M$(1)="``Scotty here, Captain:"
6464 IF E1<75THEN 6488
6468 PRINTUSING TO M$(2),"We have ### units of energy, sir ...",E1
6472 M$(3)="``We're not about to go anywhere on that!"
6476 IF S1>50THEN PRINTUSING TO M$(4),"The shields are carrying #### units, si
     r ...",S1
6480 GOSUB '106(-3)
6484 GOTO 6508
6488 IF E1>50OR S1<50THEN 6508
6492 M$(2)="``All systems show a net deficit in available energy!"
6496 M$(3)="``(You better take some off the shields fast!!)"
6500 GOSUB '106(3)
6508 IF RND(1)>.08THEN 6564
6512 I=INT(RND(1)*9+1)
6516 IF RND(1)>.4THEN 6544
6520 IF D(I)<50THEN 6564
6524 D(I)=MAX(D(I)-RND(1)*50,0)
6528 MAT MOVE M1$()TO M$()
6532 M$(1)="``Damage control report:"
6536 M$(2)="``   "&D$(I)&" Damaged."
6540 GOTO 6560
6544 D(I)=MIN(D(I)+RND(1)*50,100)
6548 MAT MOVE M1$()TO M$()
6552 M$(1)="``Damage control report:"
6556 M$(2)="``   "&D$(I)&" State of repair improved."
6560 GOSUB '106(3)
6564 RETURN
6568 RETURN
6576 IF K1<1THEN 6640
6580 FOR I=1TO K1
6584 GOSUB '105
6588 $UNPACK(F=K$)K$(I)TO X2,Y2,E2
6592 IF RND(1)>.8*T2OR E2=0THEN 6636
6596 X3=X2+SGN(X1-X2)
6600 Y3=Y2+SGN(Y1-Y2)
6604 IF U$(X3,Y3)=HEX(00)THEN 6616
6608 X3=X3+SGN(RND(1)-.49)*FN0(RND(1))
6612 Y3=Y3+SGN(RND(1)-.49)*FN0(RND(1))
6616 IF X3<1OR X3>64OR Y3<1OR Y3>64THEN 6636
6620 IF U$(X3,Y3)<>HEX(00)THEN 6636
6624 U$(X2,Y2)=HEX(00)
6628 U$(X3,Y3)=HEX(03)
6632 $PACK(F=K$)K$(I)FROMX3,Y3,E2-1
6636 NEXT I
6640 RETURN
6648 GOSUB '105
6652 IF P2=0THEN 6784
6656 I=1
6660 $UNPACK(F=T$)T$(I)TO X2,Y2,C2
6664 U$(FN0(X2),FN0(Y2))=HEX(00)
6668 X2=X2+FNX(C2)
6672 Y2=Y2+FNY(C2)
6676 IF X2<.5OR X2>=64.5THEN X2=INT(RND(1)*64+1)
6680 IF Y2<.5OR Y2>=64.5THEN Y2=INT(RND(1)*64+1)
6684 E1=E1-INT(26/MAX((X2-X1)^2+(Y2-Y1)^2,1))
6688 IF U$(FN0(X2),FN0(Y2))>HEX(00)THEN 6724
6700 U$(FN0(X2),FN0(Y2))=HEX(06)
6704 $PACK(F=T$)T$(I)FROMFNR(X2),FNR(Y2)
6708 I=I+1
6712 GOTO 6776
6724 X3=FN0(X2)
6728 Y3=FN0(Y2)
6732 ON U$(X3,Y3)GOSUB 6800,6848,6876,6980,7024,7040
6736 GOSUB '106(6)
6748 FOR J=ITO P2
6752 IF J<P2THEN T$(J)=T$(J+1)
6756 NEXT J
6760 T$(P2)=ALL(HEX(00))
6764 P2=P2-1
6776 GOSUB '105
6780 IF I<=P2THEN 6660
6784 RETURN
6800 MAT MOVE M1$()TO M$()
6804 PRINTUSING TO M$(1),"***  StarBase at ##, ## Destroyed!  ***",X3,Y3
6808 M$(2)="``When you have completed your mission, Captain,"
6812 M$(3)="``you will be reassigned to the Betelgeuse dilithium"
6816 M$(4)="``mines.  Dig?"
6820 U$(X3,Y3)=HEX(00)
6824 GOSUB '107("Bad!!",10)
6828 P$="D"
6832 B1=B1-1
6836 RETURN
6848 MAT MOVE M1$()TO M$()
6852 M$(1)="``Spock here, Captain..."
6856 M$(2)="``It seems that our photon torpedo has been"
6860 PRINTUSING TO M$(3),"totally absorbed by the 'black hole' at ##, ##.",X3,
     Y3
6864 RETURN
6876 MAT MOVE M1$()TO M$()
6880 PRINTUSING TO M$(1),"***  Klingon at ##, ## Destroyed!  ***",X3,Y3
6892 $PACK(F=K$)S$FROMX3,Y3
6896 J=VAL(STR(K$,2))+VAL(STR(K$,4))
6900 MAT SEARCHK$(),=STR(S$,,J)TO STR(S$,,2)STEP LEN(STR(K$(1)))
6904 FOR J=INT(VAL(S$,2)/LEN(STR(K$(1))))+1TO K1-1
6908 IF J<K1THEN K$(J)=K$(J+1)
6912 NEXT J
6916 K$(K1)=ALL(HEX(00))
6920 K1=K1-1
6932 U$(X3,Y3)=HEX(00)
6940 IF K1>0THEN 6968
6944 MAT MOVE M1$()TO M$()
6948 M$(1)="``Uhura here, Captian...  Starfleet command reports"
6952 M$(2)="``that the last Klingon in the galaxy has been destroyed."
6956 M$(3)="``We are to return to the nearest Starbase"
6960 M$(4)="``for furthur instructions."
6964 GOSUB '106(8)
6968 RETURN
6980 MAT MOVE M1$()TO M$()
6984 M$(1)="``Spock here, Captian.  You have just destroyed an"
6988 PRINTUSING TO M$(2),"entire solar system containing ###.## trillion senti
     ent",1+INT(RND(1)*90000)/100
6992 M$(3)="``beings.  Tsk...  Tsk..."
6996 U$(X3,Y3)=HEX(02)
7000 GOSUB '107("Blue",8)
7004 R1=R1-1
7008 H1=H1+1
7012 RETURN
7024 F=1
7028 RETURN
7040 MAT MOVE M1$()TO M$()
7044 PRINTUSING TO M$(1),"***  Torpedo at ##, ## Destroyed!  ***",X3,Y3
7048 RETURN
7056 U$(FN0(X1),FN0(Y1))=HEX(00)
7060 IF W1>1THEN 7192
7064 IF W1=0THEN 7148
7072 E1=E1-8*W1
7076 X2=X1
7080 Y2=Y1
7084 FOR I=1TO 8*W1
7088 X3=X2+I*FNX(C1)
7092 Y3=Y2+I*FNY(C1)
7096 GOSUB '104(X3,Y3)
7100 IF F4=1THEN 7116
7104 X1=X4
7108 Y1=Y4
7112 NEXT I
7116 W3=W3-8*W1
7120 W1=W1*2^SGN(W3-4*W2-.01)
7124 IF FND(9)<0THEN W1=.2
7128 IF W1<1THEN 7140
7132 W1=W2
7136 F1=2
7140 IF W3<0OR W1<.2OR F4=1THEN W1=0
7148 GOSUB '108(FN0(X1),FN0(Y1),HEX(01),1)
7152 IF I4$=" "THEN 7256
7156 GOSUB '107("Docked",1)
7160 W1=0
7164 IF S1=0THEN 7256
7168 E1=E1+S1
7172 S1=0
7176 M$()="   Shields dropped for docking purposes."
7180 GOSUB '106(5)
7184 GOTO 7256
7192 X1=X1+8*MIN((W2-.75)/3,W3)*COS((C1+1)*#PI/4)
7196 Y1=Y1+8*MIN((W2-.75)/3,W3)*SIN((C1+1)*#PI/4)
7200 E1=E1-8*W2/3
7202 W1=W2
7204 X2=FN0(X1)
7208 Y2=FN0(Y1)
7212 IF X2<1OR X2>64OR Y2<1OR Y2>64THEN 7232
7216 IF U$(X2,Y2)=HEX(00)THEN 7244
7220 X1=X1+FNX(C1)
7224 Y1=Y1+FNY(C1)
7228 GOTO 7204
7232 GOSUB '104(X1,Y1)
7236 X1=X4
7240 Y1=Y4
7244 W3=W3-8*W2/3
7248 IF FND(9)<0THEN W1=.2
7252 IF W3<=0THEN W1=0
7256 U$(FN0(X1),FN0(Y1))=HEX(05)
7260 RETURN
7268 IF K2=0OR RND(1)<.5OR F1>0THEN RETURN
7272 GOSUB '108(X1,Y1,HEX(03),5)
7276 IF I4$=" "THEN RETURN
7280 $PACK(F=K$)S$FROMX3,Y3,0
7284 J=VAL(STR(K$,2))+VAL(STR(K$,4))
7288 MAT SEARCHK$(),=STR(S$,,J)TO L8$()STEP LEN(STR(K$(1)))
7292 I=1+VAL(L8$(1),2)/4
7296 $UNPACK(F=K$)K$(I)TO X2,Y2,E2
7300 IF E2<=0THEN 7376
7304 H=INT(1+(E2/MAX(SQR((X2-X1)^2+(Y2-Y1)^2),1)))*(1.5+RND(1))
7308 $PACK(F=K$)K$(I)FROMX2,Y2,MAX(0,E2-.2*H)
7312 IF STR(C1$(6),9,1)=HEX(00)THEN 7328
7316 M$()="``Starbase shields protect the Enterprise."
7320 I9=1000
7324 GOTO 7348
7328 S1=S1-H
7329 I9=MAX(0,S1)
7332 IF S1<0THEN F=5
7336 MAT MOVE M1$()TO M$()
7340 IF H>1THEN PRINTUSING TO M$(2),"#,### unit hit on the Enterprise from sec
     tor ##, ##.",H,X2,Y2
7344 IF S1>0THEN PRINTUSING TO M$(3),"Shields holding, with #,### units left."
     ,S1
7348 GOSUB '106(3)
7352 D5=400*H/(I9+80)
7356 FOR J=1TO 10
7360 D6=MOD(9*RND(1),9)+1
7364 D(D6)=MAX(0,D(D6)-.1*D5)
7368 NEXT J
7372 F1=F1+1
7376 RETURN
7384 DIM L2$(8)2
7396 MAT SEARCHS$(),=HEX(02)TO L2$()
7400 IF L2$(1)=HEX(0000)OR RND(1)<.3THEN 7428
7404 GOSUB '108(FN0(X1),FN0(Y1),HEX(02),5)
7408 IF I4$=" "THEN 7428
7409 X5=X3
7410 Y5=Y3
7416 GOSUB '108(X3,Y3," ",MAX(1,FN0(2.7*RND(1)^2)))
7420 IF I4$<>HEX(05)THEN 7432
7424 IF W1>=1THEN W1=.25
   : ELSE F=2
7428 RETURN
7432 ON VAL(I4$)GOSUB 7480,7520,7504,7536
   : ELSE RETURN
7436 U$(X3,Y3)=HEX(00)
7440 IF FND(8)=-1THEN RETURN
7444 MAT MOVE M1$()TO M$()
7448 M$(1)="``Spock here, Captain ..."
7452 M$(4)="Sensors indicate that the "&S$&" at ##, ##"
7456 PRINTUSING TO M$(2),M$(4),X3,Y3;
7460 PRINTUSING TO M$(3),"has just been absorbed by the black hole at ##, ##."
     ,X5,Y5;
7464 M$(4)=" "
7468 GOSUB '106(3)
7472 RETURN
7480 GOSUB '107("Bad!",5)
7484 S$="star base"
7488 B1=B1-1
7492 RETURN
7504 GOSUB 6892
7508 S$="Klingon"
7512 RETURN
7520 S$="black hole"
7524 H1=H1-1
7528 RETURN
7536 S$="star"
7540 R1=R1-1
7544 RETURN
7548 DIM C2$3
7564 IF FND(4)<>1THEN 7636
7568 X2=INT((X1-1)/8)*8
7572 Y2=INT((Y1-1)/8)*8
7576 L$()="000"&STR(L$())
7580 FOR I=MAX(X2-8,0)TO MIN(X2+8,64-8)STEP 8
7584 FOR J=MAX(Y2-8,0)TO MIN(Y2+8,64-8)STEP 8
7588 C2$=HEX(000000)
7592 FOR X3=I+1TO I+7+1
7596 FOR Y3=J+1TO J+7+1
7600 IF U$(X3,Y3)=HEX(04)THEN C2$=ADDHEX(000001)
   : ELSE IF U$(X3,Y3)=HEX(03)THEN C2$=ADDHEX(010000)
   : ELSE IF U$(X3,Y3)=HEX(02)THEN C2$=ADDHEX(000001)
   : ELSE IF U$(X3,Y3)=HEX(01)THEN C2$=ADDHEX(000100)
7604 NEXT Y3
7608 NEXT X3
7612 $TRAN(C2$,"0123456789xxxxxxxxxxxxxxxxxxxxxx")
7616 L$((I-X2)/8+2,(J-Y2)/8+2)=C2$
7620 IF FND(1)=1THEN C$(I/8+1,J/8+1)=C2$
7624 NEXT J
7628 NEXT I
7632 L$(2,2)="\81#*"
7636 RETURN
7660 DEFFN'103
7664 X=INT(RND(1)*64+1)
7668 Y=INT(RND(1)*64+1)
7672 IF U$(X,Y)<>HEX(00)THEN 7664
7676 RETURN
7684 DIM X4,Y4
7700 DEFFN'104(X4,Y4)
7704 X4=FN0(X4)
7708 Y4=FN0(Y4)
7712 IF MIN(X4,Y4)>=1AND MAX(X4,Y4)<=64THEN 7808
7716 MAT MOVE M1$()TO M$()
7720 M$(1)="``Spock here, Captain..."
7724 M$(2)="``It seems you have attempted to leave the galaxy..."
7728 M$(3)="``The Enterprise has encountered a dimensional interphase."
7732 M$(4)="``If we survive, it it not clear where in the galaxy we"
7736 M$(5)="``shall find ourselves.      Spock out."
7740 GOSUB '106(1)
7744 GOSUB '107("Red",11)
7748 X1,Y1=9E99
7752 FOR T1=T1TO T1+1STEP .1
7756 F4=INT(RND(1)*9+1)
7760 D(F4)=MAX(D(F4)-RND(1)*20,0)
7764 GOSUB 2045
7768 GOSUB 2600
7772 GOSUB 2455
7776 GOSUB 2795
7780 NEXT T1
7784 GOSUB '103
7788 X4=X
7792 Y4=Y
7796 A1=A1+5
7800 F4=0
7804 GOTO 7836
7808 IF U$(X4,Y4)>HEX(00)THEN 7820
7812 F4=0
7816 GOTO 7836
7820 ON U$(X4,Y4)GOSUB 7848,7880,7896,7924,,7980
7824 GOSUB '106(4)
7828 A1=A1+4
7832 F4=1
7836 RETURN
7848 MAT MOVE M1$()TO M$()
7852 M$(1)="``McCoy here, Captain..."
7856 PRINTUSING TO M$(2),"I've got ## unconscious people down here",RND(1)*56
7860 M$(3)="``who all passed out from the way you rammed"
7864 M$(4)="``that last starbase!"
7868 RETURN
7880 F=2
7884 RETURN
7896 MAT MOVE M1$()TO M$()
7900 M$(1)="``Spock here, Captain ..."
7904 M$(2)="``Collision with a Klingon battle cruiser is not"
7908 M$(3)="``a recomended procedural tactic, Sir ..."
7912 RETURN
7924 KEYIN M$(1),7924,7924
7928 IF RND(1)>.5THEN 7952
7932 MAT MOVE M1$()TO M$()
7936 M$(1)="``Sulu here, Captain..."
7940 M$(2)="``When are you going to learn how to navigate this"
7944 M$(3)="``starship, Sir?"
7948 GOTO 7968
7952 MAT MOVE M1$()TO M$()
7956 M$(1)="``Chekov here..."
7960 M$(2)="``You seem to be having trouble"
7964 M$(3)="``With getting the hang of navigation, Captain..."
7968 RETURN
7980 F=1
7984 RETURN
7992 DIM C4,R4
7996 DEFFN'108(X4,Y4,I4$,R4)
8000 FOR I9=1TO R4
8004 X9=INT(8*RND(1))
8008 FOR C4=X9TO X9+8STEP 1/R4
8012 X3=FN0(X4+I9*FNX(MOD(C4,8)+1))
8016 Y3=FN0(Y4+I9*FNY(MOD(C4,8)+1))
8020 IF X3<1OR Y3<1OR X3>64OR Y3>64THEN 8040
8024 IF U$(X3,Y3)=HEX(00)THEN 8040
8028 IF I4$<>" "AND U$(X3,Y3)<>I4$THEN 8040
8032 I4$=U$(X3,Y3)
8036 RETURN
8040 NEXT C4
8044 NEXT I9
8048 I4$=" "
8052 RETURN
8060 DEFFN'105
8064 $IF OFF /001,8076
8068 GOSUB 8152
8072 GOTO 8064
8076 RETURN
8084 DEFFN'106(F2)
8088 IF F2<0THEN 8112
8092 $TRAN(M$(),HEX(200D))R
8096 PRINT AT(19,0);STR(M$(1),3);STR(M$(2),3);STR(M$(3),3);STR(M$(4),3);STR(M$
     (5),3);
8100 SELECT P2
8104 PRINT HEX(070D070D07);
8108 SELECT P0
8112 RETURN
8124 DIM I9,X9,Y9
8128 DIM I9$1,S9$80
8152 KEYIN I9$
8156 IF I1>0THEN STR(I$,I1,1)=AND HEX(7F)
8160 $TRAN(I9$,"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz")R
8172 MAT SEARCHI$(),=I9$TO STR(S9$,,2)STEP LEN(STR(I$(1)))
8176 I9=INT((VAL(S9$,2)+LEN(STR(I$(1)))-1)/LEN(STR(I$(1))))
8180 IF I9=0THEN 8212
8184 I0=I9
8188 I$=I$(I0)
8192 I1=POS(I$="#")
8196 $TRAN(I$," \80")R
8200 GOTO 8224
8212 ON POS(HEX(080DE5)=I9$)GOSUB 8252,8280,8368
   : ELSE IF VER(I9$,STR(I$,MAX(I1,1),1))=1THEN GOSUB 8392
   : ELSE GOSUB 8440
8224 IF I1>0THEN STR(I$,I1,1)=OR HEX(80)
8228 PRINT AT(R(7),C(7));"Command:";
8232 PRINT AT(R(7)+1,C(7));BOX(1,LEN(STR(I$))-1);" ";STR(I$,3);
8236 RETURN
8252 I1=MAX(I1-1,POS(I$(I0)="#"))
8256 IF I1>0THEN STR(I$,I1)=STR(I$(I0),I1)
8260 RETURN
8280 IF I$<>" "THEN 8292
8284 GOSUB 8440
8288 GOTO 8356
8292 IF I0<>3THEN 8312
8296 IF POS(I$="#")=0THEN 8308
8300 GOSUB 8440
8304 GOTO 8356
8308 CONVERT STR(I$,POS(I$=",")+1)TO X9
8312 I1=POS(I$(I0)="#")
8316 IF I1=0THEN 8340
8320 I9=NUM(STR(I$,I1))
8324 IF I9>0THEN 8336
8328 GOSUB 8440
8332 GOTO 8356
8336 CONVERT STR(I$,I1,I9)TO I9
8340 IF F=4AND I0<>8THEN 8348
8344 ON I0GOSUB 8484,8540,8500,8612,8772,8816,8920,8472
8348 I$=" "
8352 I1=0
8356 RETURN
8368 I$=I$(I0)
8372 I1=POS(I$="#")
8376 $TRAN(I$," \80")R
8380 RETURN
8392 STR(I$,MAX(I1,1),1)=I9$
8396 I1=MIN(I1,LEN(I$))+1
8400 RETURN
8412 A1=A1+.5
8416 MAT MOVE M1$()TO M$()
8420 M$(1)="``Invalid number, Captain ..."
8424 GOSUB '106(1)
8428 RETURN
8440 A1=A1+.2
8444 MAT MOVE M1$()TO M$()
8448 M$(1)="``Invalid command, Captain ..."
8452 GOSUB '106(1)
8456 RETURN
8472 F=8
8476 RETURN
8484 IF I9>=1AND I9<9THEN C1=FNR(I9)
   : ELSE GOSUB 8412
8488 RETURN
8500 IF FND(1)=1THEN 8520
8504 MAT MOVE M1$()TO M$()
8508 M$(1)="``  Navigation computer dammaged."
8512 GOSUB '106(-1)
8516 GOTO 8600
8520 C1=MOD(6-4*SGN(SGN(I9-X1+1E-4)-1)+FNR(4/#PI*ARCTAN((X9-Y1+1E-4)/(I9-X1+1E
     -4))),8)+1
8524 E1=E1-2
8528 RETURN
8540 IF FND(3)=1THEN 8560
8544 MAT MOVE M1$()TO M$()
8548 M$(1)="``  Impulse engines are dammaged."
8552 GOSUB '106(1)
8556 GOTO 8600
8560 IF C1$="Docked"AND S1<100THEN F1=MAX(F1,2)
8564 U$(FN0(X1),FN0(Y1))=HEX(00)
8568 X9=X1+FNX(C1)
8572 Y9=Y1+FNY(C1)
8576 GOSUB '104(X9,Y9)
8580 IF F4<>0THEN 8596
8584 X1=X4
8588 Y1=Y4
8592 U$(FN0(X1),FN0(Y1))=HEX(05)
8596 E1=E1-2
8600 RETURN
8612 MAT MOVE M1$()TO M$()
8616 I0=1
8620 IF FND(5)=1THEN 8636
8624 M$(1)="``  Phasors are inoperable."
8628 GOSUB '106(1)
8632 RETURN
8636 IF K2>0THEN 8656
8640 M$(1)="``  Sensors detect no Klingons in the area."
8644 GOSUB '106(-1)
8648 A1=A1+1
8652 RETURN
8656 IF I9<.8*E1THEN 8672
8660 GOSUB 8412
8664 RETURN
8672 E1=E1-I9
8676 IF FND(1)=1THEN 8692
8680 M$(I0)="`` Computer failure hampers accuracy."
8684 I9=I9*RND(1)
8688 I0=I0+1
8692 FOR I1=1TO K1
8696 IF I1>K1THEN 8748
8700 $UNPACK(F=K$)K$(I1)TO X3,Y3,E3
8704 IF ABS(X3-X1)>5OR ABS(Y3-Y1)>5THEN 8748
8708 H9=I9/K2*.95^SQR((X3-X1)^2+(Y3-Y1)^2)
8712 E3=E3-H9
8716 IF E3>0THEN 8732
8720 GOSUB 6892
8724 PRINTUSING TO M$(I0),"Klingon at sector ##, ## destroyed.",X3,Y3
8728 GOTO 8740
8732 PRINTUSING TO M$(I0),"#### unit hit on Klingon at sector ##, ##  (-####)
     left.",H9,X3,Y3,E3
8736 $PACK(F=K$)K$(I1)FROMX3,Y3,E3
8740 I0=I0+1
8744 IF I0>4THEN 8752
8748 NEXT I1
8752 GOSUB '106(2)
8756 F1=1
8760 RETURN
8772 IF FND(7)=1THEN 8792
8776 MAT MOVE M1$()TO M$()
8780 M$(1)="``  Shield control damaged."
8784 GOSUB '106(-1)
8788 GOTO 8804
8792 E1=E1+S1
8796 S1=MIN(.8*E1,I9)
8800 E1=E1-S1
8804 RETURN
8816 F1=0
8820 IF P2<10THEN 8852
8824 MAT MOVE M1$()TO M$()
8828 M$(1)="``Spock here, Captain..."
8832 M$(2)="``It seems that there are too many photon torpedoes"
8836 M$(3)="``drifting around to keep track of.  I would not recommend"
8840 M$(4)="``firing yet another at this time."
8844 GOSUB '106(-6)
8848 GOTO 8908
8852 IF P1>0THEN 8872
8856 MAT MOVE M1$()TO M$()
8860 M$(1)="``   All photon torpedoes expended."
8864 GOSUB '106(-1)
8868 GOTO 8908
8872 IF FND(6)=1THEN 8892
8876 MAT MOVE M1$()TO M$()
8880 M$(1)="``   Photon tubes are not operational."
8884 GOSUB '106(-1)
8888 GOTO 8908
8892 P2=P2+1
8896 P1=P1-1
8900 E1=E1-150
8904 $PACK(F=T$)T$(P2)FROMFNR(X1),FNR(Y1),C1
8908 RETURN
8920 IF I9=0THEN 8956
8924 IF I9>=.2AND I9<=8THEN 8936
8928 GOSUB 8412
8932 GOTO 8976
8936 IF FND(9)=1THEN 8956
8940 MAT MOVE M1$()TO M$()
8944 M$(1)="``Scott here, Captain:"
8948 PRINTUSING TO M$(2),"  The warp engines are damaged and cannot handle war
     p #,",MIN(1,I9)
8949 PRINTUSING TO M$(3),"  but I can give you warp .2 for the next##.# Starda
     tes.",I9/.2*T2
8952 GOSUB '106(-INT(I9/.2))
8956 IF C1$="Docked"AND S1<100THEN F1=MAX(F1,2)
8960 IF I9>=1THEN W1=MAX(.25,W1)
   : ELSE W1=I9
8964 W2=I9
8968 W3=8*I9
8972 E1=E1-2
8976 RETURN
9012 DEFFND(X)=SGN(D(X)-25)
9024 DEFFN0(Z)=ROUND((Z,0)
9028 DEFFNR(Z)=ROUND((Z,3)
9040 DEFFNX(Z)=X(Z)+(X(Z+1)-X(Z))*(Z-INT(Z))
9044 DEFFNY(Z)=Y(Z)+(Y(Z+1)-Y(Z))*(Z-INT(Z))