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))