1 REM **Varuables, strings and arrays used** 2 REM **A$ - Temp String** 3 REM **B - Number of rounds in blaster** 4 REM **C - Number of items counter** 5 REM **C1 - Communicator** 6 REM **C$ - Current user command line** 7 REM **D - Hanger door status. 0-Closed** 8 REM **D1 - Jail door status. 0-Closed** 9 REM **D2 - Display debug data. 1-enabled** 10 REM **G - Guard chance** 11 REM **H$(x) - List of help strings** 12 REM **I - Temp index counter** 13 REM **I1 - Item counter was IC** 14 REM **J - Score** 15 REM **K - Comma toggle** 16 REM **L0 - Current location in map** 17 REM **M0 - Turns left on hamburger.** 18 REM **M$(x) - List of message strings** 19 REM **N - Total number of nouns** 20 REM **N0 - Current noun number** 21 REM **N$ - Current noun** 22 REM **N$(x) - List of noun strings** 23 REM **O - Total number of objects** 24 REM **O$(x) - List of object strings** 25 REM **O(x,y) - Array of objects data** 26 REM **S - Maximum score** 27 REM **S1 - Screen length** 28 REM **S(x,y) - Array of locations data**F 29 REM **S$(x) - List of location strings** 30 REM **R0 - Was RV and now removed** 31 REM **T - Number of turns was ** 32 REM **T1 - Tractor beam status -1 beam on** 33 REM **T$(x) - List of triggers** 34 REM **V - Total number of verbs** 35 REM **V0 - Current verb number** 36 REM **V$ - Current verb** 37 REM **V$(x) - List of verb strings** 38 REM **X - Temp X** 39 REM **Y - Temp Y** 40 REM **Z - Temp counter varable** 100 REM **DOGSTAR.BAS - Dog Star Adventure by Lance Micklus** 110 REM **From SoftSide MAY 1979 (A TRS-80 Software Magazine)** 120 REM **Modified by Gern for Zenith Z-100 05/30/83 & 12/30/84** 130 REM **Modified by Dave Runkle for Retro Elf Super BASIC 10/31/2019** 140 CLS:PRINT:PRINT:PRINT "DOG STAR - ELF Super BASIC version" 150 PRINT "by Lance Micklus," 160 PRINT "Winooski, Vt. 05404":PRINT 170 PRINT "Copyright 1979":PRINT 180 REM **Int. the game** 190 DEFINT Z 200 LET L=37:REM **Set number of locations** 210 LET O=23:REM **Set number of objects** 220 DIM S(L,6),O(O,3) 230 LET V=21:LET V0=0:LET V$="":REM **Setup verbs** 240 LET N=37:LET N0=0:LET N$="":REM **Setup nouns** 250 LET D=0:REM **Hanger door closed** 260 LET D1=0:REM **Jail door locked** 270 LET D2=0:REM **Debug 1 is enabled** 280 LET S1=64:REM **Set max score** 290 LET B=4:REM **Set blaster rounds** 300 LET M0=0:REM **Hamburger life** 310 LET G=50:REM **Set guard probability** 320 LET C=0:REM **Number of items** 330 LET S1=75:LET C$="":REM **Set line length and clear command** 340 LET C1=0:REM **Communicator not used** 350 LET T1=-1:REM **Enbale tactor beam** 360 LET L0=2:REM **Startup map location** 370 LET T=0:REM **Clear turns** 380 LET J=0:REM **Clear score** 390 LET S=215:REM **Set max score** 400 GOSUB 30300 410 GOTO 10300 2100 REM **MAIN LOOP** 2125 REM **GUARD LOGIC** 2130 IF T<25 GOTO 2425 2140 IF INT(RND(G)+1)<>1 GOTO 2425 2150 IF T=300 THEN LET G=20 2160 IF L0<3 GOTO 2425 2170 IF L0=9 GOTO 2425 2180 IF L0=26 GOTO 2425 2190 IF L0=36 GOTO 2425 2200 IF L0=37 GOTO 2425 2210 IF L0>26 THEN IF L0<31 GOTO 2425 2220 PRINT CHR$(7);"Holy smokes. An armed guard just walked in." 2250 GOSUB 20350 2260 IF V0<>12 GOTO 10000 2270 IF N0<>15 GOTO 10000 2280 LET X=13:GOSUB 21450 2290 IF Y<>-1 GOTO 10000 2300 IF B>0 GOTO 2340 2310 CLS 2320 PRINT "I'm out of ammunition.":PRINT 2330 GOTO 10030 2340 PRINT "zzZAP! No more guard." 2350 LET B=B-1 2360 IF B=0 THEN PRINT "I'm out of ammunition." 2425 REM **Hamburger status** 2430 IF M0<>T GOTO 2470 2440 LET X=22:GOSUB 21450 2450 IF Y<>-1 GOTO 2470 2460 PRINT "Your McDonald's Hamburger is cold." 2470 GOSUB 20350:REM **Get users verb and noun** 2490 LET T=T+1 2500 IF V0=0 THEN IF N0=0 GOTO 2520 2510 GOTO 2570 2520 PRINT "I don't know how to do that." 2530 GOTO 2125 2540 PRINT "Nothing happened." 2550 GOTO 2125 2560 REM **OK TO MOVE?** 2570 IF V0>1 GOTO 3080 2580 IF N0>7 GOTO 3080 2590 IF N0=0 GOTO 2520 2600 IF S(L0,N0)=0 THEN PRINT "I can't go that way!":GOTO 2125 2875 REM **HANGER DOOR STATUS** 2880 IF D=0 GOTO 2930 2890 IF S(L0,N0)>2 THEN IF S(L0,N0)<6 GOTO 2910 2900 GOTO 2930 2910 PRINT "I can't go that way. Flight deck doors are open." 2920 PRINT "NO AIR!!!" 2930 REM **JAIL DOOR STATUS** 2940 IF N0=3 THEN IF L0=31 THEN IF D1=0 THEN PRINT M$(0):GOTO 2125 2950 REM 2960 IF L0=35 THEN IF S(L0,N0)=36 THEN IF O(21,2)<>0 GOTO 2980 2970 GOTO 3000 2980 PRINT "The robot won't let me through." 2990 GOTO 2125 3000 IF L0=17 THEN IF O(13,1)=17 GOTO 10000 3010 IF L0=9 THEN IF O(5,1)=9 GOTO 10000 3020 IF L0=9 THEN LET H$(L0)="" 3030 IF L0=17 THEN LET H$(L0)="" 3040 LET L0=S(L0,N0): REM **MOVE LOCATION** 3050 IF L0=34 THEN LET H$(L0)="" 3060 IF L0=26 GOTO 11800 3070 GOTO 10300 3080 IF V0=3 GOTO 10300 :REM **LOOK** 3090 REM **GET** 3100 IF V0<>2 GOTO 3700 3110 IF N0=0 THEN PRINT "I don't know what a ";CHR$(34);N$;CHR$(34);" is.":GOTO 2125 3120 IF C>5 THEN PRINT "I can't carry any more.":PRINT"HINT: Drop something.":GOTO 2125 3130 LET I=1 3140 IF O(I,1)=N0 GOTO 3170 3150 IF IL0 THEN PRINT "I don't see it.":GOTO 2125 3190 IF N0<>37 GOTO 3260:REM **LOAD AMMUNITION** 3200 LET X=13:GOSUB 21450 3210 IF Y<>-1 THEN PRINT "I don't have a blaster to put it in.":GOTO 2125 3220 LET B=4 3230 LET O(I,2)=0 3240 PRINT "My BLASTER's reloaded." 3250 GOTO 2125 3260 IF N0=15 THEN PRINT "He looks pretty mean to me.":GOTO 2125 3270 IF N0=25 THEN PRINT "He looks pretty mad to me.":GOTO 2125 3280 IF N0=34 THEN PRINT "He is way to heavy!":GOTO 2125 3290 LET C=C+1 3300 LET O(I,2)=-1 3310 PRINT "O.K." 3320 IF N0=14 THEN IF C1=0 THEN PRINT "A voice says: SESAME.":C1=-1 3330 IF N0=22 THEN IF M0=0 THEN LET M0=T+50 3340 IF N0=12 THEN LET H$(2)="" 3350 IF N0=13 THEN LET H$(7)="" 3360 GOTO 2125 3700 REM **Display inventory ** 3710 IF V0<>4 GOTO 3820 3720 PRINT "I'm carrying:" 3730 LET K=0 3740 FOR I=1 TO O STEP 1 3750 IF O(I,2)=-1 THEN PRINT O$(I):LET K=1 3760 NEXT I 3770 IF K=0 THEN PRINT "NOTHING" 3780 PRINT 3810 GOTO 2125 3820 REM **SCORE** 3830 IF V0<>5 GOTO 3860 3840 GOSUB 21050 3850 GOTO 2125 3860 REM **DROP** 3870 IF V0<>6 GOTO 4200 3980 IF N0=0 GOTO 3110 3990 IF L0=2 THEN PRINT "There's no room here.":GOTO 2125 4000 LET I1=0 4010 FOR I=1 TO O STEP 1 4020 IF O(I,2)=L0 THEN I1=I1+1 4030 NEXT I 4040 IF I1>12 THEN PRINT "There not enough room. Get rid of something.":GOTO 2125 4050 LET I=1 4060 IF O(I,1)=N0 GOTO 4090 4070 IF I-1 THEN PRINT "I'm not carrying it.":GOTO 2125 4100 LET C=C-1 4110 LET O(I,2)=L0 4120 PRINT "O.K." 4130 GOTO 2125 4200 REM **HELP** 4210 IF V0<>7 GOTO 4250 4220 IF H$(L0)="HELP" THEN PRINT "How am I supposed to know what to do?":GOTO 2125 4230 PRINT H$(L0) 4240 GOTO 2125 4250 REM **SAVE** 4260 IF V0<>8 GOTO 4290 4270 PRINT "WE HAVE NO SAVE" 4280 GOTO 2125 4290 REM **LOAD** 4300 IF V0<>9 GOTO 4330 4310 PRINT "WE HAVE NO LOAD" 4320 GOTO 2125 4330 REM **QUIT** 4340 IF V0<>10 GOTO 4380 4350 CLS 4360 LET J=0 4370 GOTO 11200 4380 REM **PRESS** 4390 IF V0<>11 GOTO 5480 4400 IF N0<>10 GOTO 2520 4410 IF L0<>2 THEN IF L0<>11 THEN PRINT "What button,":GOTO 2125 4420 IF L0=11 THEN IF T1=0 THEN LET T1=-1:PRINT T$(3):GOTO 2125 4430 IF L0=11 THEN IF T1=-1 THEN LET T1=0:PRINT T$(2):GOTO 2125 4440 LET X=12:GOSUB 21450:IF Y<>1 GOTO 2540 5425 LET X=24:GOSUB 21450:IF Y<>1 GOTO 2540 5450 IF T1=-1 THEN PRINT T$(3):GOTO 2540 5460 IF D=0 THEN PRINT T$(4):GOTO 2540 5470 GOTO 11150 5480 REM **SHOOT** 5490 IF V0<>12 GOTO 5670 5500 IF N0=0 GOTO 5670 5510 IF B=0 THEN PRINT "But I don't have any ammunition left.":GOTO 2125 5520 LET X=13:GOSUB 21450 5530 IF Y<>-1 THEN PRINT "But I'm not carrying a BLASTER.":GOTO 2125 5540 LET X=N0:GOSUB 21450 5550 IF Y=-1 THEN PRINT "I can't. I'm holding it.":GOTO 2125 5560 IF N0=34 THEN PRINT "zzZAP!":LET B=B-1:GOTO 2125 5570 IF Y<>L0 THEN PRINT "I don't see it.":GOTO 2125 5580 LET I=1 5590 IF O(I,1)=N0 GOTO 5620 5600 IF I13 GOTO 5800 5690 IF N0=0 THEN PRINT "Say what?":GOTO 2125 5700 LET X=14:GOSUB 21450 5710 IF Y<>-1 THEN PRINT "O.K. ";N$(N0):GOTO 2125 5720 IF N0<>19 THEN PRINT "O.K. ";N$(N0):GOTO 2125 5730 IF D=-1 GOTO 2540 5740 LET D=-1 5750 PRINT "A voice comes over the P.A. system and says:" 5760 PRINT "OPENNING FLIGHT DECK DOORS" 5770 PRINT 5780 IF L0>2 THEN IF L0<6 THEN PRINT:PRINT "Yips!!! There's no air!!! CROAK...":END 5790 GOTO 2125 5800 REM **READ** 5810 IF V0<>14 GOTO 6010 5820 IF N0<>20 THEN IF N0<>16 THEN IF N0<>11 THEN IF N0<>33 GOTO 2520 5830 IF N0=20 GOTO 5940 5840 IF N0<>16 GOTO 5890 5850 IF O(6,2)=-1 THEN PRINT "Sorry. I'm not a cartographer.":GOTO 2125 5860 IF O(6,2)=L0 THEN PRINT "Try GET MAP.":GOTO 2125 5870 PRINT "It's not here." 5880 GOTO 2125 5890 LET X=N0:GOSUB 21450 5900 IF Y<>L0 THEN IF Y<>-1 GOTO 5870 5910 IF N0=11 THEN PRINT "It says: >> NEEDS TURBO <<" 5920 IF N0=33 THEN PRINT "It says: >> OUT OF ORDER <<" 5930 GOTO 2125 5940 IF L0<>13 THEN PRINT "I don't see any.":GOTO 2125 5950 PRINT 5960 PRINT "It says on the wall," 5970 PRINT ">> YOUR MOTHER'S GOT A BIG NOSE <<" 5980 PRINT ">> KILROY MADE IT HERE, TOO <<" 5990 PRINT ">> SAY SECURITY <<" 6000 GOTO 2125 6010 REM **EAT** 6020 IF V0<>15 GOTO 6140 6030 IF N0=0 THEN PRINT "What's a ";CHR$(34);N$(0);CHR$(34);"?":GOTO 2125 6040 IF N0<>22 THEN PRINT "Don't be rediculous.":GOTO 2125 6050 LET X=22:GOSUB 21450 6060 IF Y<>-1 THEN PRINT "I'm not holding it.":GOTO 2125 6070 LET I=1 6080 IF O(I,1)=22 THEN 6110 6090 IF I16 GOTO 6250 6160 IF N0<>23 GOTO 6250 6170 IF L0<>16 GOTO 6250 6180 LET X=23: GOSUB 21450 6190 IF Y<>-1 THEN PRINT M$(1):GOTO 2125 6200 LET O(11,2)=0 6210 LET O(14,2)=16 6220 LET C=C-1 6230 PRINT M$(2) 6240 GOTO 2125 6250 REM *OPEN* 6260 IF V0<>18 GOTO 6360 6270 IF N0<>36 PRINT "Nothing to open.":GOTO 2125 6280 IF N0<>36 GOTO 2520 6290 IF L0<>31 GOTO 2520 6300 LET X=17:GOSUB 21450 6310 IF Y<>-1 THEN PRINT M$(3):GOTO 2125 6320 LET H$(31)="" 6330 LET D1=-1 6340 PRINT M$(4) 6350 GOTO 2125 6360 REM *FEED* 6370 IF V0<>19 GOTO 6680 6380 IF N0=0 GOTO 6680 6390 IF L0<>35 THEN IF N0=34 THEN PRINT M$(5):GOTO 2125 6400 LET X=22:GOSUB 21450 6410 IF Y<>-1 THEN PRINT M$(6):GOTO 2125 6420 LET X=35:GOSUB 21450 6430 IF Y<>1 THEN IF Y<>L0 GOTO 6530 6440 IF N0<>35 GOTO 6470 6450 PRINT"I don't see her." 6460 GOTO 2125 6470 PRINT M$(7) 6480 LET K=I 6490 LET I=1 6500 IF O(I,1)=22 GOTO 6650 6510 IF I34 THEN PRINT N$;M$(8):GOTO 2125 6540 IF T>M0 THEN PRINT M$(9):GOTO 2125 6550 LET I=1 6560 IF O(I,1)=34 GOTO 6590 6570 IF I17 GOTO 6720 6700 PRINT N$ 6710 GOTO 2125 6720 REM *HIT* 6730 IF V0<>20 GOTO 6890 6740 IF N0=0 GOTO 2520 6750 LET X=N0:GOSUB 21450 6760 IF Y=-1 THEN PRINT "I'm carrying it. That's impossible.":GOTO 2125 6770 IF Y=L0 GOTO 6840 6780 IF N0<11 GOTO 2520 6790 IF N0=19 GOTO 2520 6800 IF N0=20 GOTO 2520 6810 IF N0=30 GOTO 2520 6820 PRINT "I can't hit something I can't see." 6830 GOTO 2125 6840 IF N0<>15 THEN IF N0<>25 THEN IF N0<>34 GOTO 6870 6850 PRINT "I'd rather not. He might hit me back!" 6860 GOTO 2125 6870 IF N0=35 THEN PRINT "That's not nice!":GOTO 2125 6880 GOTO 2540 6890 REM **KILL** 6900 IF V0<>21 GOTO 6930 6910 PRINT "I'm not strong enough to kill anything." 6920 GOTO 2125 6930 GOTO 2520 10000 CLS 10010 PRINT "H E L P ! ! !" 10020 PRINT 10030 PRINT "Roche Soldiers are everywhere. I've been captured." 10040 PRINT "I'm now a prisoner. Woe is me...":PRINT 10050 GOTO 11500 10300 REM **Display location details** 10310 CLS 10320 PRINT S$(L0) 10330 LET A$="" 10340 IF L0=35 THEN LET G=10 10350 IF L0=7 GOTO 10480 10360 LET K=0 10370 FOR I=1 TO O STEP 1 10380 IF O(I,2)<>L0 GOTO 10460 10390 IF K=1 GOTO 10440 10400 LET K=1 10410 PRINT:PRINT "Around me I see:" 10420 LET A$=O$(I) 10430 GOTO 10460 10440 IF LEN(A$)+5+LEN(O$(I))>S1 THEN PRINT A$:LET A$=O$(I):GOTO 10460 10450 LET A$=A$+" "+O$(I) 10460 NEXT I 10470 IF A$<>"" THEN PRINT A$ 10480 PRINT 10490 PRINT "Obvious directions are "; 10500 LET K=0 10510 FOR I=1 TO 6 STEP 1 10520 IF S(L0,I)=0 GOTO 10560 10530 IF K<>0 THEN PRINT ", "; 10540 PRINT N$(I); 10550 LET K=1 10560 NEXT I 10570 IF K=0 THEN PRINT "unknown"; 10580 PRINT "." 10590 REM **Display debug data** 10600 IF D2<>1 GOTO 2125 10610 PRINT "======================================================================" 10620 PRINT TAB(13);"Turns:";TAB(20);T; 10622 PRINT TAB(30);"Location:";TAB(40);L0; 10624 PRINT TAB(46);"Last command:";TAB(60);C$ 10630 PRINT TAB(9);"Last verb:";TAB(20);V$;" - ";V0; 10632 PRINT TAB(39);"Last noun:";TAB(50);N$;" - ";N0 10640 PRINT TAB(4);"Blaster rounds:";TAB(20);B; 10642 PRINT TAB(28);"Item count:";TAB(40);C; 10644 PRINT TAB(53);"Score:";TAB(60);J 10650 PRINT "Hanger door status:";TAB(20);D; 10652 PRINT TAB(34);"Jail:";TAB(40);D1; 10654 PRINT TAB(46);"Tractor beam:";TAB(60);T1 10660 PRINT TAB(11);"Objects:";TAB(20);O; 10662 PRINT TAB(29);"Max score:";TAB(40);S; 10664 PRINT TAB(53);"Verbs:";TAB(60);V 10670 PRINT TAB(13);"Nouns:";TAB(20);N; 10672 PRINT TAB(27);"Screen size:";TAB(40);S1; 10674 PRINT TAB(47);"Comunicator:";TAB(60);C1 10680 PRINT TAB(6);"Guard chance:";TAB(20);G; 10682 PRINT TAB(25);"Commma toggle:";TAB(40);K; 10684 PRINT TAB(44);"Hamburger life:";TAB(60);M0 10690 PRINT "======================================================================" 10700 GOTO 2125 11150 REM **FINISHED GAME** 11155 CLS 11160 PRINT "The engins fire up and you fly out of General Doom's Battle Cruiser!" 11165 PRINT 11170 GOSUB 21050 11200 REM **QUIT GAME** 11210 IF J<>0 GOTO 11230 11220 PRINT "We have FAILED our mission. The forces of Princess Leya will be conquered." 11230 IF J0 THEN IF J13 GOTO 10000 11845 IF N0<>30 GOTO 10000 11850 PRINT T$(1) 11860 GOSUB 20350 11870 LET X=31:GOSUB 21450 11880 IF Y<>-1 GOTO 10000 11890 IF V0<>17 GOTO 10000 11900 IF N0<>31 GOTO 10000 11910 GOTO 10300 20350 REM **GET USER COMMAND** 20360 PRINT 20370 INPUT "What should I do"C$ 20380 PRINT 20390 IF C$="N" THEN LET C$="GO NORTH" 20400 IF C$="S" THEN LET C$="GO SOUTH" 20410 IF C$="E" THEN LET C$="GO EAST" 20420 IF C$="W" THEN LET C$="GO WEST" 20430 IF C$="U" THEN LET C$="GO UP" 20440 IF C$="D" THEN LET C$="GO DOWN" 20450 IF C$="L" THEN LET C$="LOOK" 20460 IF C$="I" THEN LET C$="INVENTORY" 20470 IF C$="H" THEN LET C$="HELP" 20480 LET V$="":LET N$="" 20490 IF LEN(C$)=0 GOTO 20350 20500 REM **COPY VERB TO V$** 20510 LET Z=1:LET V$="" 20520 IF MID$(C$,Z,1)=" " GOTO 20550 20530 LET V$=V$+MID$(C$,Z,1) 20540 IF Z"" THEN IF MID$(V$,1,LEN(V$(Z)))=V$(Z) THEN LET V0=Z: GOTO 20620 20580 IF Z=LEN(C$) THEN LET N0=0: GOTO 20690 20630 LET N$=MID$(C$,LEN(V$)+2) 20640 REM **FIND NOUN** 20650 LET Z=1 20660 IF N$(Z)<>"" THEN IF MID$(N$,1,LEN(N$(Z)))=N$(Z) THEN LET N0=Z: GOTO 20690 20670 IF Z