10 DIM G[8,8],M[8,8],Q[8,8],K[9,3] 20 REM DIM A$[50],C$[72],D$[10],L$[4],I$[15] 30 REM READ D$,L$,A$,O2,O3,O4,O5,O8,E1,K1 32 READ O2,O3,O4,O5,O8,E1,K1 40 REM WRITTEN BY JOE ALTMAIER SOMETIME IN THE LATE 70S 42 REM PAPERTAPE HP BASIC CONVERSION 6/2010 BY WTN... 43 REM STARTING W/TSB-E CONVERSION 8/06 REMOVED STRINGS, 44 REM RECODED GOTO N OF STATEMENTS, ADDED POSITION INDICATOR TO 45 REM GALACTIC MAP, NUMERICAL COMMANDS (1 FREE HELP FOR EACH INPUT) 46 REM ADDED INSTRUCTIONS AND PROMPTS FOR RANDOM SEED 47 REM ADDED NUMBER PRINT SUBROUTINE FOR BETTER FORMATTING 55 REM DATA ".123456789",".BE"," . + 'O'/^\>!<***",2,3,4,5,8,10,12 57 DATA 2,3,4,5,8,10,12 60 DEF FNO(Q)=QO8 65 DEF FNR(X)=INT(RND(O1)*X)+O1 70 LET F1=F2=F3=O1=1 80 LET I1=I2=O0=0 90 LET A1=1 92 PRINT 93 PRINT 94 PRINT "WELCOME TO TTY TREK 3" 95 PRINT "1)LIST ALL 2)PAGE INSTRUCTIONS, OR ENTER SEED "; 96 INPUT Z9 97 IF Z9#1 AND Z9#2 THEN 107 98 GOSUB 8000 99 IF Z9#2 THEN 105 100 PRINT "ENTER 2 TO REPEAT INSTRUCTIONS, OR ENTER SEED "; 101 INPUT Z9 102 IF Z9=2 THEN 98 103 GOTO 107 105 PRINT "ENTER SEED "; 106 INPUT Z9 107 FOR I=0 TO Z9 108 LET Z8=RND(1) 109 NEXT I 110 REM GALAXY STARTUP 120 FOR I=O1 TO O8 130 FOR J=O1 TO O8 140 LET G[I,J]=RND(O1)^O2 150 IF I>O2 OR J>O2 THEN 180 160 LET G[I,J]=G[I,J]+O3 170 GOTO 200 180 IF RND(O1)>.125 THEN 200 190 LET G[I,J]=G[I,J]+10 200 NEXT J 210 NEXT I 220 LET G[O1,O1]=G[O1,O1]+20 230 MAT M=G 240 REM SHIP STARTUP 250 READ X,Y,X1,Y1,E,P,S,H 260 DATA 5,5,3,3,1000,10,0,55 265 PRINT "DIFFICULTY FACTOR(1-10) "; 270 INPUT M 275 LET M=M/10 280 GOTO 1660 290 REM PRINT NEW SCREEN 300 IF F1=O0 THEN 700 310 FOR I=O1 TO O8 320 FOR J=O1 TO O8 330 REM PRINT A$[(Q[J,I]+O1)*O3-O2,(Q[J,I]+O1)*O3]; 332 LET Z9=Q[J,I] 333 IF Z9=1 THEN 350 334 IF Z9=2 THEN 360 335 IF Z9=3 THEN 370 336 IF Z9=4 THEN 380 337 IF Z9=5 THEN 390 340 PRINT " . "; 345 GOTO 480 350 PRINT " + "; 355 GOTO 480 360 PRINT "'O'"; 365 GOTO 480 370 PRINT "/^\"; 375 GOTO 480 380 PRINT ">!<"; 385 GOTO 480 390 PRINT "***"; 480 NEXT J 485 PRINT " "; 490 REM PRINT VITAL INFO 500 IF I400 THEN 9900 730 LET H=H-H/(LOG(10)/LOG(H))/10 990 REM COMMAND INPUT 1000 REM INPUT C$ 1005 REM C$=UPS$(C$) 1010 REM I=POS("MPTELSGAR",C$[O1,O1]) 1030 REM GOTO I OF 1100,2100,2500,3000,3500,4000,4500,5000,5500 1031 LET Z8=0 1032 INPUT Z9 1033 IF Z9=1 THEN 1100 1034 IF Z9=2 THEN 2100 1035 IF Z9=3 THEN 2500 1036 IF Z9=4 THEN 3000 1037 IF Z9=5 THEN 3500 1038 IF Z9=6 THEN 4000 1039 IF Z9=7 THEN 5500 1040 IF Z9=8 THEN 5000 1041 IF Z9=9 THEN 4500 1045 IF Z8>0 THEN 6000 1050 PRINT "1)MOVE 2)PHASER 3)TORPEDO" 1060 PRINT "4)ENERGY AL. 5)LONG SCAN 6)SHORT SCAN" 1070 PRINT "7)REPORT 8)AUTO SCAN 9)GALACTIC RECORD" 1080 REM GOTO 6000 1082 LET Z8=Z8+1 1083 GOTO 1032 1090 REM MOVING 1100 PRINT "COURSE(1-9),WARP(0-3) "; 1110 INPUT C,W 1115 IF W>O3 OR WE OR UK2 THEN 2260 2180 LET H1=U/SQR((X1-K[I,O1])^O2+(Y1-K[I,O2])^O2) 2190 LET K[I,O3]=K[I,O3]-H1 2200 IF K[I,O3]>O0 THEN 2250 2210 LET Q[K[I,O1],K[I,O2]]=O0 2220 GOSUB 9200 2230 REM PRINT "KILLED"Q-K2"KLINGONS!"; 2232 PRINT "KILLED "; 2233 LET Z9=Q-K2 2234 GOSUB 7400 2235 IF Z9>1 THEN 2238 2236 PRINT " KLINGON!"; 2237 GOTO 2240 2238 PRINT " KLINGONS!"; 2240 GOTO 2170 2250 NEXT I 2260 IF Q=K2 THEN 2290 2270 PRINT 2280 GOTO 6000 2290 PRINT "NONE KILLED" 2300 GOTO 6000 2490 REM TORPEDOING 2500 IF P#O0 THEN 2530 2510 PRINT "OUT OF TORPEDOES." 2520 GOTO 6000 2530 LET P=P-O1 2540 PRINT "DIRECTION(1-9)"; 2550 INPUT C 2560 GOSUB 9000 2570 IF S1=O0 THEN 2950 2580 LET F1=A1 2590 LET C1=Q[S1,S2] 2610 PRINT "HIT A"; 2620 REM GOTO C1 OF 2630,2630,2650,2810,2850 2621 IF C1=3 THEN 2650 2622 IF C1=4 THEN 2810 2623 IF C1=5 THEN 2850 2630 PRINT " STAR." 2640 LET F1=O0 2645 GOTO 6000 2650 PRINT " KLINGON!" 2653 LET Q[S1,S2]=O0 2655 LET S1=INT(S1+.5) 2657 LET S2=INT(S2+.5) 2660 FOR I=O1 TO K2 2670 IF K[I,1]#S1 OR K[I,O2]#S2 THEN 2780 2680 GOSUB 9200 2760 GOTO 6000 2780 NEXT I 2790 PRINT "PROGRAM CONFUSED." 2800 GOTO 6000 2810 PRINT " STARBASE! YOU FOOL!" 2815 LET Q[S1,S2]=O0 2820 LET G[X,Y]=G[X,Y]-10 2830 LET M[X,Y]=G[X,Y] 2840 GOTO 6000 2850 PRINT " AN ENEMY BASE!" 2860 LET E1=E1-O1 2870 IF E1"; 3870 RETURN 3880 PRINT " "; 3890 RETURN 3990 REM SHORT RANGE SCAN 4000 LET F1=O1 4010 GOTO 6000 4490 REM GALACTIC MAP 4500 FOR I=O1 TO O8 4510 FOR J=O1 TO O8 4520 LET C1=M[J,I] 4530 LET C2=INT(C1/10)+O1 4540 LET C3=INT(C1-(C2-O1)*10)+O1 4550 REM PRINT L$[C2,C2];D$[C3,C3];" "; 4551 GOSUB 3700 4560 NEXT J 4570 PRINT 4580 NEXT I 4590 GOTO 6000 4990 REM AUTO SCAN TOGGLE 5000 LET A1=O1-A1 5010 LET F1=A1 5020 GOTO 6000 5490 REM REPORT OF SHIP STATUS 5500 REM PRINT "SHIELDS "S"QUADRANT "X;Y 5501 REM PRINT "HULL TEMP"INT(H)"ENERGY"E"PHOTONS"P 5502 REM PRINT "KLINGONS "K1"ENEMY BASE"E1" LEVEL"INT(M*10) 5503 PRINT "SHIELDS "; 5504 LET Z9=S 5505 GOSUB 7400 5506 PRINT TAB(17);"QUADRANT "; 5507 LET Z9=X 5508 GOSUB 7400 5509 PRINT ","; 5510 LET Z9=Y 5511 GOSUB 7400 5512 PRINT 5515 PRINT "HULL TEMP "; 5516 LET Z9=INT(H) 5517 GOSUB 7400 5518 PRINT TAB(17);"ENERGY "; 5519 LET Z9=E 5520 GOSUB 7400 5522 PRINT TAB(34);"PHOTONS"P 5530 PRINT "KLINGONS "; 5531 LET Z9=K1 5532 GOSUB 7400 5533 PRINT TAB(17);"ENEMY BASE "; 5534 LET Z9=E1 5535 GOSUB 7400 5540 PRINT TAB(34);"LEVEL"INT(M*10) 5590 GOTO 6000 5990 REM KLINGON FIRING 6000 IF K2=O0 THEN 6100 6005 FOR I=O1 TO K2 6010 LET H1=INT((K[I,O3]/10)+.5) 6020 LET K[I,O3]=K[I,O3]-H1 6025 IF S<1 THEN 6040 6030 LET H=H+(H1/(S+10))*100 6040 LET S=S-H1 6050 PRINT "INCOMING!"H1 6070 NEXT I 6080 PRINT 6090 REM KLINGON FILTERING 6100 FOR I=O1 TO O8 6110 FOR J=O1 TO O8 6120 LET C1=G[I,J] 6130 IF C1 >= 20 OR C1<10 THEN 6220 6140 FOR J2=I-O1 TO I+O1 6150 IF FNO(J2) THEN 6200 6160 FOR J3=J-O1 TO J+O1 6170 IF FNO(J3) THEN 6190 6180 LET M[J2,J3]=G[J2,J3] 6190 NEXT J3 6200 NEXT J2 6210 GOTO 6520 6220 IF I=X AND J=Y THEN 6520 6225 LET C2=C1-INT(C1/10)*10 6230 LET S1=S2=O0 6240 IF C2= 20 THEN 6430 6310 LET G[I,J]=C1-O1 6320 LET M[I,J]=G[I,J] 6330 LET C3=C3+O1 6340 LET G[J2,J3]=C3 6350 REM PRINT "KLINGON ATTACKING"J2;J3; 6352 PRINT "KINGON ATTACKING BASE AT "; 6353 LET Z9=J2 6354 GOSUB 7400 6355 PRINT ","; 6356 LET Z9=J3 6357 GOSUB 7400 6358 PRINT TAB(34); 6360 IF C3-INT(C3/10)*10 >= O3 THEN 6390 6365 PRINT 6370 LET M[J2,J3]=G[J2,J3] 6380 GOTO 6520 6390 PRINT "AHRGH!" 6400 LET G[J2,J3]=C3-10 6410 LET M[J2,J3]=G[J2,J3] 6420 GOTO 6520 6430 IF C3-INT(C3/10)*10 >= O3 THEN 6460 6440 LET S1=J2 6450 LET S2=J3 6460 NEXT J3 6470 NEXT J2 6480 IF S1=O0 THEN 6520 6484 IF I#O1 OR J#O1 THEN 6490 6486 IF C2>6 THEN 6500 6488 GOTO 6520 6490 IF RND(O1)>M/O3 THEN 6520 6500 LET G[I,J]=C1-O1 6510 LET G[S1,S2]=G[S1,S2]+O1 6520 NEXT J 6530 NEXT I 6540 REM KLINGON GENERATION 6550 IF E1=O0 THEN 300 6560 IF X=O1 AND Y=O1 THEN 300 6570 IF INT(G[O1,O1]-20)=9 THEN 300 6580 IF RND(O1)>M THEN 300 6590 LET G[O1,O1]=G[O1,O1]+O1 6600 LET K1=K1+O1 6610 GOTO 300 7395 REM *** INTEGER PRINT SUBROUTINE *** 7396 REM UP TO 6 DIGITS -999999 to 999999, NO SPACES PRINTED 7397 REM NUMBER TO PRINT IN Z9, Z8 AND Z7 USED FOR TEMPS 7398 REM IF OUT OF RANGE JUST PRINTS 7400 IF ABS(Z9)<=999999 THEN 7405 7402 PRINT Z9 7403 RETURN 7405 IF Z9>=0 THEN 7420 7410 PRINT "-"; 7420 LET Z8=ABS(Z9) 7430 LET Z8=INT(Z8) 7440 IF Z8<10 THEN 7560 7450 IF Z8<100 THEN 7530 7460 IF Z8<1000 THEN 7500 7461 IF Z8<10000 THEN 7470 7462 IF Z8<100000 THEN 7466 7463 LET Z7=INT(Z8/100000) 7464 LET Z8=Z8-Z7*100000 7465 GOSUB 7700 7466 LET Z7=INT(Z8/10000) 7467 LET Z8=Z8-Z7*10000 7468 GOSUB 7700 7470 LET Z7=INT(Z8/1000) 7480 LET Z8=Z8-Z7*1000 7490 GOSUB 7700 7500 LET Z7=INT(Z8/100) 7510 LET Z8=Z8-Z7*100 7520 GOSUB 7700 7530 LET Z7=INT(Z8/10) 7540 LET Z8=Z8-Z7*10 7550 GOSUB 7700 7560 LET Z7=Z8 7570 GOSUB 7700 7580 RETURN 7695 REM DIGIT PRINT SUBROUTINE, DIGIT IN Z7 7700 IF Z7=1 THEN 7810 7710 IF Z7=2 THEN 7830 7720 IF Z7=3 THEN 7850 7730 IF Z7=4 THEN 7870 7740 IF Z7=5 THEN 7890 7750 IF Z7=6 THEN 7910 7760 IF Z7=7 THEN 7930 7770 IF Z7=8 THEN 7950 7780 IF Z7=9 THEN 7970 7790 PRINT "0"; 7800 RETURN 7810 PRINT "1"; 7820 RETURN 7830 PRINT "2"; 7840 RETURN 7850 PRINT "3"; 7860 RETURN 7870 PRINT "4"; 7880 RETURN 7890 PRINT "5"; 7900 RETURN 7910 PRINT "6"; 7920 RETURN 7930 PRINT "7"; 7940 RETURN 7950 PRINT "8"; 7960 RETURN 7970 PRINT "9"; 7980 RETURN 7990 REM INSTRUCTIONS FOR PAPERTAPE VERSION OF TTYTRK 8000 PRINT 8010 PRINT "INSTRUCTIONS FOR TTY TREK 3" 8015 PRINT 8020 PRINT "THE GALAXY IS DIVIDED INTO 64 QUADRANTS ARRANGED ON AN" 8025 PRINT "8 BY 8 GRID, EACH QUADRANT IS SUBDIVIDED INTO 64 SECTORS" 8030 PRINT "WHICH CAN CONTAIN STARS, BASES, KLINGONS AND THE"; 8031 PRINT " ENTERPRISE." 8035 PRINT "AS TIME PASSES MESSAGES ARE PRINTED INDICATING BASES"; 8036 PRINT " UNDER" 8040 PRINT "ATTACK, IF KLINGONS ARE PRESENT THEY FIRE AND DRAIN YOUR" 8045 PRINT "SHIELDS. THE KLINGONS MOVE AROUND AND REGENERATE AND HAVE" 8050 PRINT "BEEN KNOWN TO CLOAK. AS COMMANDER OF THE ENTERPRISE YOU" 8055 PRINT "MUST RID THE GALAXY OF KLINGONS AND THEIR BASE." 8060 PRINT 8065 PRINT "THIS VERSION OF TTY TREK HAS BEEN ADAPTED FOR THE" 8070 PRINT "CONFINES OF A MORE PRIMITIVE CONTROL SYSTEM THAT DOES" 8075 PRINT "NOT PERMIT ALPHABETIC ENTRY, THUS COMMANDS MUST BE"; 8076 PRINT " SPECIFIED" 8080 PRINT "USING NUMERIC CODES. ENTER COMMAND 0 FOR HELP, ENTERING" 8082 PRINT "0 A SECOND TIME CAUSES TIME TO PASS." 8085 PRINT 8090 PRINT "WHEN PROMPTED ENTER A SEED VALUE TO INFLUENCE THE INITIAL" 8095 PRINT "CONDITIONS, THEN ENTER THE DESIRED LEVEL OF DIFFICULTY." 8105 PRINT 8111 IF Z9#2 THEN 8120 8112 PRINT 8113 PRINT 8115 GOSUB 8600 8120 PRINT "THE FOLLOWING COMMANDS CAN BE GIVEN:" 8130 PRINT 8140 PRINT "1 - MOVE. MOVEMENT IS SPECIFIED AS DIR,WARP WHERE DIR"; 8141 PRINT " IS A" 8150 PRINT "DIRECTION FROM 1-9 AND WARP IS THE NUMBER OF QUADRANTS TO" 8160 PRINT "TRAVERSE. SPECIFY FRACTIONAL WARP TO MOVE WITHIN A"; 8161 PRINT " QUADRANT." 8170 PRINT "DIRECTIONS ARE AS FOLLOWS..." 8180 PRINT 8190 PRINT " 4 3 2" 8200 PRINT " \ | /" 8210 PRINT " 5--'O'--1" 8220 PRINT " / | \" 8230 PRINT " 6 7 8" 8240 PRINT 8250 PRINT "2 - PHASORS. ENTER HOW MUCH ENERGY TO FIRE AT ENEMY"; 8251 PRINT " SHIPS." 8260 PRINT "3 - TORPEDO. ENTER A DIRECTION NUMBER TO FIRE A TORPEDO." 8270 PRINT "4 - ENERGY ALLOCATE. ENTER HOW MUCH TO DIVERT TO SHIELDS." 8280 PRINT 8290 PRINT "5 - LONG RANGE SCAN OF SURROUNDING QUADRANTS. DIGITS"; 8291 PRINT " INDICATE" 8300 PRINT "THE NUMBER OF ENEMY SHIPS, B FOR STAR BASE, E FOR ENEMY"; 8301 PRINT " BASE." 8310 PRINT "EMPTY SPACE EXCEPT FOR STARS IS INDICATED BY .." 8320 PRINT "SINGLE PERIODS INDICATE THE EDGE OF THE GALAXY." 8330 PRINT 8331 IF Z9#2 THEN 8340 8332 GOSUB 8600 8340 PRINT "6 - SHORT RANGE SCAN OF CURRENT QUADRANT. THE + SYMBOLS"; 8341 PRINT " ARE" 8350 PRINT "STARS, 'O' IS THE ENTERPRISE, /^\ ARE KLINGONS, >!< IS"; 8351 PRINT " A BASE" 8360 PRINT "WHICH YOU CAN DOCK WITH TO REPLENISH ENERGY AND"; 8361 PRINT " TORPEDOES." 8370 PRINT "THE ENEMY BASE IS INDICATED BY A BLOCK OF *** SYMBOLS." 8380 PRINT "PERIODS INDICATE EMPTY SPACE." 8390 PRINT 8400 PRINT "7 - REPORT OF VITAL STATS AND STUFF." 8410 PRINT "8 - TOGGLES AUTOSCAN OFF AND ON. WHEN ON, A SHORT-RANGE"; 8411 PRINT " SCAN" 8420 PRINT "IS AUTOMATICALLY PERFORMED AFTER MOVING. DEFAULT IS ON." 8430 PRINT "9 - GALAXY RECORD, SAME FORMAT AS LONG RANGE SCAN." 8450 PRINT 8460 PRINT "INITIALLY YOU HAVE 1000 UNITS OF ENERGY AND 10"; 8461 PRINT " TORPEDOS, DOCK" 8470 PRINT "WITH A STARBASE (BY COLLIDING WITH IT) FOR 2000 MORE"; 8471 PRINT " UNITS OF" 8480 PRINT "ENERGY AND 5 MORE TORPEDOS. HINTS... WHEN SPECIFYING"; 8481 PRINT " DIRECTION" 8490 PRINT "USE FP NUMBERS FOR FRACTIONAL DIRECTIONS, FOR EXAMPLE 2"; 8491 PRINT " CLICKS" 8500 PRINT "TO THE RIGHT AND 4 CLICKS UP IS A DIRECTION OF 2.5 AND"; 8501 PRINT " 3 CLICKS" 8510 PRINT "TO THE LEFT AND 1 CLICK DOWN IS A DIRECTION OF 5.33."; 8511 PRINT " FOR WARP" 8520 PRINT "SPECIFY .125 FOR EACH SECTOR DISTANCE, REMEMBER THAT"; 8521 PRINT " DIAGONALS" 8530 PRINT "ARE LONGER, 1 QUADRANT LEFT AND 1 UP IS A DISTANCE OF"; 8531 PRINT " 1.414." 8540 PRINT 8550 IF Z9#2 THEN 8590 8552 PRINT 8553 PRINT 8590 RETURN 8600 PRINT TAB(54);"(# FOR NEXT PAGE) "; 8610 INPUT Z8 8620 PRINT 8630 RETURN 8990 REM COLLISION SUBROUTINE 9000 LET I1=COS((C-O1)*.785398) 9010 LET I2=-SIN((C-O1)*.785398) 9020 LET S1=X1 9030 LET S2=Y1 9040 LET S1=S1+I1 9050 LET S2=S2+I2 9060 IF FNO(INT(S1+.5))=O1 OR FNO(INT(S2+.5))=O1 THEN 9100 9070 IF Q[S1,S2]=O0 THEN 9040 9080 IF Q[S1,S2]=O2 THEN 9040 9090 RETURN 9100 LET S1=O0 9110 RETURN 9190 REM DELETE KLINGON 9200 FOR J2=I TO K2-O1 9210 FOR J3=O1 TO O3 9220 LET K[J2,J3]=K[J2+O1,J3] 9230 NEXT J3 9240 NEXT J2 9250 LET G[X,Y]=G[X,Y]-O1 9260 LET M[X,Y]=G[X,Y] 9270 LET K2=K2-O1 9280 LET K1=K1-O1 9290 LET F1=A1 9300 RETURN 9790 REM VICTORY 9800 PRINT 9810 PRINT "YOU HAVE PURGED THE GALAXY OF KLINGONS!" 9820 PRINT "YOU WILL BE AWARDED THE MEDAL OF VALOR"; 9830 IF H <= 500 AND S >= O0 THEN 9999 9840 PRINT ", POSTHUMOUSELY." 9850 STOP 9890 REM DEATH 9900 PRINT "YOU MELTED! WHAT A HORRIBLE END!" 9920 STOP 9950 PRINT "SHIELDS HAVE BUCKLED! YOUR SHIP IS GONE!" 9999 END