I need to hire someone to write a TA

If you don’t mind the download, ‘The Mystery of Winchester High’ is the latest. This has a tutorial. If you’d prefer to play online, ‘Carpathian Vampire’ and ‘Kenny Koala’s Bushfire Survival Plan’ also have tutorials.

It’s hard for me to pick a favourite, as I like them all. In the Adventuron games (with graphics), ‘The Witch’s Apprentice’ was very popular. This was a competition winner. I think that had a two-word parser, from memory. I do like ‘Igor’s Quest’ because of the word play.

‘Captain Cutter’s Treasure’ and ‘Submarine Sabotage’ were both competition winners. The former has some very colourful non-player characters.

5 Likes

won’t go in one piece, so here’s the first part. I had my knee replaced last week and I’m a little dopier than usual. Sorry. John

'MODULE 0 MAIN    ******HANGTOWN******  10-3-90
'MULTIPLE REVISIONS ON 1-25-91
'GOLD HINT BURN HINT KEY HINT REVEAL HINT RESTORE 30 6MAR92
'TIMER AND STRT CHANGE  2-3-94
'TIME$, DATE$, AND SAVE GAME FIX 7-30-95
'SNIp fixes 1-3-96
'REPORT STUFF 3-5-96  HANGDATA.TXT 10-24-96

    CLS:DIM FLAG(30),OBJ$(18),OBJ2$(18)
    STRT=TIMER
    CALL LOGON
    LOCATE 12,12:PRINT "ONE MOMENT PLEASE...."
    CALL SETUP              'MODULE 1 SET UP VARIABLES
    CALL TURN               'MODULE 2 RUN TURNS
    CALL CLOSING            'MODULE 3 END OF GAME STUFF
END

'MODULE 0.1 LOGON
SUB LOGON
   SHARED ANSWER$()
   DIM ANSWER$(305)
   INPUT "YOUR NAME-NUMBER PLEASE";ANSWER$(0)
   LET ANSWER$(0)=ANSWER$(0)+"  "+TIME$+"  "+DATE$
END SUB



'MODULE 1 SETUP
SUB SETUP
    CALL ROOMINFO           'MODULE 1.1 READ ROOM INFORMATION
    CALL ROOMOBJECTS        'MODULE 1.2 READ ROOM OBJECTS
    CALL MOVEMENTTABLE      'MODULE 1.3 READ MOVEMENT TABLE
    CALL INVENTORY          'MODULE 1.4 INITIALIZE INVENTORY ARRAY
                            '             TO AN EMPTY LIST
    CALL OTHERS	            'MODULE 1.5 INITIALIZE OTHER VARIABLES
END SUB

'MODULE 1.1 ROOMINFO
SUB ROOMINFO
    SHARED DESCRIPTION$(),NUMBERROOMS,DESCRIBEFLAG(),ROOMDESCRIBE$(),ROOMDES2$()
    READ NUMBERROOMS
    DIM DESCRIPTION$(NUMBERROOMS),DESCRIBEFLAG(NUMBERROOMS),ROOMDESCRIBE$(NUMBERROOMS)
    DIM ROOMDES2$(NUMBERROOMS)
    FOR I = 1 TO NUMBERROOMS
        READ DESCRIPTION$(I)
    NEXT I
    DATA 33, LEDGE just inside WELL*, RATTLESNAKE WELLS, HANGTOWN SQUARE, SCAFFOLD, SANDY DESERT
    DATA LAST CHANCE SALOON, STREET, HARDROCK JAIL, STEEP'S TEA ROOM, STREET, GOLDEN WELL* HOTEL
    DATA DOCTOR'S OFFICE, STREET, LIVERY STABLE, PASTURE, STREET, LIMPING HORSE CORRAL
    DATA MINER'S SHACK, STREET, FIELD, TOP OF BOULDER, CELLAR, MINESHAFT, MINESHAFT
    DATA MINESHAFT, MINESHAFT, MINESHAFT, MINESHAFT, MINESHAFT, MINESHAFT, MINESHAFT
    DATA MINESHAFT, RANGE

    FOR I=1 TO NUMBERROOMS
       LET DESCRIBEFLAG(I)=1
       LET ROOMDESCRIBE$(I)="EMPTY"
       LET ROOMDES2$(I)="EMPTY"
    NEXT I
    FOR I=1 TO 15
       READ DESCRIBEROOM
       LET DESCRIBEFLAG(DESCRIBEROOM)=0
       READ ROOMDESCRIBE$(DESCRIBEROOM)
       READ ROOMDES2$(DESCRIBEROOM)
    NEXT I
    DATA 2,"Your blood chills with fear at the sight of the huge and horrible"
    DATA "RATTLESNAKE guarding the WELL.  You know that one of you must die!"
    DATA 3,"Curiously, you find yourself in the TOWN SQUARE of a dry, dusty,"
    DATA "apparently deserted gold rush town."
    DATA 4,"You stand at the top of a gruesome SCAFFOLD.  The hangperson"
    DATA "left his/her well-worn noose here. Is this a PC PC or what?"
    DATA 5,"The DESERT seems to stretch out forever to the EAST."
    DATA "It's hard to walk in the soft sand."
    DATA 6,"As you enter the aroma that greets you isn't the stale smoke and "
    DATA "whiskey smell you expected.  You feel magic in the air here."
    DATA 7,"From the STREET you can see the town JAIL to the EAST.      "
    DATA "You wonder why the JAIL door was left locked."
    DATA 9,"An elegantly-dressed but crabby-looking ENGLISHMAN looks at you as"
    DATA "you enter the TEA ROOM, then turns away.  He needs a nice CUP of TEA."
   DATA 10,"All you can see to the SOUTH are hoof prints and wagon ruts,"
    DATA "frozen forever in the hard-baked dirt of the town STREET."
   DATA 11,"The curiously named HOTEL looks pretty run down.  "
    DATA "Hopefully, you won't have to spend the night here."
   DATA 12,"You can almost hear the elevator music in the DOCTOR'S OFFICE. "
    DATA "You see all of the earliest issues of INVESTMENT MAGAZINE."
   DATA 13,"The ROCK you see in the STREET could do a lot of damage if"
    DATA "thrown accurately."
   DATA 14,"With HAY on the floor, the LIVERY STABLE looks more comfortable"
    DATA "than the HOTEL.  There is a small milk-pail here, but no COW."
   DATA 15,"Here in the PASTURE is the most pathetic COW you've ever seen. "
    DATA "GET her some food before it's too late!"
   DATA 17,"Here in the LIMPING HORSE CORRAL you see some SUGAR cubes that"
    DATA "are still in good condition.  Horses love 'em."
   DATA 20,"Here in the FIELD is a huge BOULDER with sheer walls.  To"
    DATA "CLIMB it, You'll need something to stand upon."

END SUB

'MODULE 1.2 ROOM OBJECT INFORMATION
SUB ROOMOBJECTS
    SHARED ROOMOBJECT$(),NUMBERROOMS
    DIM ROOMOBJECT$(NUMBERROOMS,15)
        FOR I=1 TO NUMBERROOMS
            FOR J=1 TO 15
                LET ROOMOBJECT$(I,J)="EMPTY"
            NEXT J
        NEXT I
END SUB

'MODULE 1.3 MOVEMENTTABLE
SUB MOVEMENTTABLE
    SHARED MOVEMENTTABLE(),NUMBERROOMS
    DIM MOVEMENTTABLE(NUMBERROOMS,6)
    FOR I=1 TO NUMBERROOMS
        FOR J = 1 TO 6
           READ MOVEMENTTABLE(I,J)
        NEXT J
    NEXT I
    DATA 0,0,0,0,2,0,0,0,3,0,0,0,0,7,5,2,4,0
    DATA 0,0,0,0,0,3,0,0,5,3,0,0,0,0,7,0,0,0
    DATA 3,10,8,6,0,0,0,0,0,7,0,0,0,0,10,0,0,0
    DATA 7,13,11,9,0,0,0,0,0,10,0,0,0,0,13,0,0,0
    DATA 10,16,14,12,0,0,0,0,0,13,0,0,0,0,16,0,0,0
    DATA 13,19,17,15,0,0,0,0,0,16,0,0,0,0,19,0,0,0
    DATA 16,33,20,18,0,0,0,0,0,19,0,0,0,0,0,0,0,20
    DATA 0,0,0,0,18,25,0,27,24,0,0,0,0,28,25,23,0,0
    DATA 0,29,26,24,22,0,0,30,0,25,0,0,23,31,28,0,0,0
    DATA 24,0,28,27,0,0,25,32,30,28,0,0,26,0,0,29,0,0
    DATA 27,0,0,0,0,0,29,0,0,0,0,0,19,0,0,0,0,0

END SUB

'MODULE 1.4 INVENTORY
SUB INVENTORY
    SHARED INVENTORY$()
    DIM INVENTORY$(5)
    FOR I=1 TO 5
        LET INVENTORY$(I)="EMPTY"
    NEXT I
END SUB

'MODULE 1.5 OTHERS
SUB OTHERS
    SHARED GAMESTATE$,ROOM,TURNNUMBER,ROOMOBJECT$(),THING$,INVENTORY$(),_
        FLAG(),OBJ$(),OBJ2$(),DESCRIBEFLAG(),ROOMDESCRIBE$(),ROOMDES2$(),_
        CONVERTNUM
    LET ROOM = 3               'START IN HANGTOWN SQUARE
    LET TURNNUMBER =0
    DANGEROUS=1
    LET THING$=""
    FOR I=1 TO 30:LET FLAG(I)=0:NEXT I      'SET FLAGS TO 0
          'FLAG #  MEANING OF 0      FLAG# MEANING OF 0
          ' 1      GAME NOT OVER       2   DOG NOT GONE
          'FOR 1, 1 MEANS GAME WON -1 GAME LOST 2 MEANS GAME QUIT
          ' 3      SNAKE NOT KILLED    4   TEA NOT MADE
          ' 5      COW NOT FED         6   JAIL DOOR LOCKED
          ' 7      LANTERN NOT CARRIED 8   KITTEN NOT FED
          ' 9      THORN NOT OUT      10   KETTLE NOT FILLED
          '11      BUCKET EMPTY       12   ROPE NOT TIED TO BUCKET
          '13    SAFE HINGE NOT OILED  14  NOT CHASED BY DOG
          '14 IS USED TO EXIT TURN BUT NOT EXIT THE GAME
          '15 SAFE NOT OPENED          16 SILVER NOT DUG
          '17 KEY NOT DUG              18 EMERALD NOT DROPPED
          '19 ROOM NOT DANGEROUS       20 NEVER BEEN TO LANTERN ROOM22
          '21 COYOTE HINT NOT GIVEN    22 COFFEE NOT NAMED
         '23 PAIL NOT FILLED WITH MILK 24 2ND DOG HINT NOT GIVEN
         '25 GOLD HINT NOT GIVEN       26 KEY HINT NOT GIVEN
    LET ROOMOBJECT$(1,1)="GOLD!"         'STARTING LOCATIONS FOR OBJECTS
    LET ROOMOBJECT$(2,1)="WELL*"
    LET ROOMOBJECT$(2,2)="SNAKE"
    LET ROOMOBJECT$(2,3)="BUCKET"
    LET ROOMOBJECT$(3,1)="SIGN*"
    LET ROOMOBJECT$(4,1)="ROPE"
    LET ROOMOBJECT$(5,1)="EMPTYKEY"
    LET ROOMOBJECT$(6,1)="KETTLE"
    LET ROOMOBJECT$(6,2)="SIGN*"
    LET ROOMOBJECT$(6,3)="EMPTYMIRROR*"
    LET ROOMOBJECT$(6,4)="EMPTYSILVER!"
    LET ROOMOBJECT$(7,1)="DOOR*"
    LET ROOMOBJECT$(8,1)="CUP"
    LET ROOMOBJECT$(9,1)="STOVE*"
    LET ROOMOBJECT$(9,2)="SIGN*"
    LET ROOMOBJECT$(9,4)="CHAIR"
    LET ROOMOBJECT$(9,5)="EMPTYEMERALD!"
    LET ROOMOBJECT$(10,1)="EMPTYRUBY!"
    LET ROOMOBJECT$(11,1)="SAFE*"
    LET ROOMOBJECT$(11,2)="EMPTYJADE!"
    LET ROOMOBJECT$(11,3)="MATCHES"
    LET ROOMOBJECT$(12,1)="MAGAZINES"
    LET ROOMOBJECT$(12,2)="TWEEZERS"
    LET ROOMOBJECT$(12,3)="MINERAL-OIL"
    LET ROOMOBJECT$(13,1)="ROCK"
    LET ROOMOBJECT$(14,1)="SHOVEL"
    LET ROOMOBJECT$(14,2)="HAY"
    LET ROOMOBJECT$(14,3)="PAIL"
    LET ROOMOBJECT$(15,1)="COW*"
    LET ROOMOBJECT$(17,1)="SUGAR"
    LET ROOMOBJECT$(18,1)="TEA"
    LET ROOMOBJECT$(18,2)="CELLAR*"
    LET ROOMOBJECT$(20,1)="BOULDER*"
    LET ROOMOBJECT$(21,1)="MAP"
    LET ROOMOBJECT$(22,1)="LANTERN"
    LET ROOMOBJECT$(31,1)="EMPTYDIAMONDS!"
    LET ROOMOBJECT$(33,1)="EMPTYTURQUOISE!"

    LET CONVERTNUM=18
    FOR I=1 TO CONVERTNUM              'READ IN WORD!* CONVERSIONS
        READ OBJ$(I),OBJ2$(I)
    NEXT I
    DATA GOLD,GOLD!,WELL,WELL*,SIGN,SIGN*,DOOR,DOOR*,STOVE,STOVE*,EMERALD,_
        EMERALD!,RUBY,RUBY!,DIAMONDS,DIAMONDS!,COW,COW*,CELLAR,CELLAR*,_
        BOULDER,BOULDER*,JADE,JADE!,SILVER,SILVER!,TURQUOISE,TURQUOISE!,_
        MINERAL,MINERAL-OIL,OIL,MINERAL-OIL,SAFE,SAFE*,MIRROR,MIRROR*

END SUB

'MODULE 2 TURN
SUB TURN
    SHARED FLAG(),TURNNUMBER
    DO UNTIL FLAG(1) <> 0
        FLAG(14)=0
        TURNNUMBER = TURNNUMBER + 1
        IF TURNNUMBER=295 THEN BEEP 3:_
           PRINT "Type   SAVE GAME  and then  QUIT":_
           PRINT "You can then return to this spot by typing":_
           PRINT "HANGTOWN (at the DOS prompt) and later,":_
           PRINT "as a command, RESTORE GAME":_
           PRINT "Please forgive the necessary inconvenience."
        IF TURNNUMBER=300 THEN FLAG(1)=2
        CALL DESCRIBE      'MODULE 2.1 DESCRIBE THE ROOM
        CALL COMMANDS      'MODULE 2.2 INPUT THE COMMANDS
        CALL EVALUATE      'MODULE 2.3 EVALUATE COMMANDS
    LOOP
END SUB

'MODULE 2.1 DESCRIBE THE CURRENT ROOM
SUB DESCRIBE
    SHARED DESCRIPTION$(),ROOM,MOVEMENTTABLE(),ROOMOBJECT$(),FLAG(),_
        TURNNUMBER,INVENTORY$(),THING$,OBJECT$,DESCRIBEFLAG(),ROOMDESCRIBE$(),_
        ROOMDES2$()

    IF TURNNUMBER=1 THEN CALL GAMESTARTER   'MODULE 2.1.1
    IF DESCRIBEFLAG(ROOM)=0 THEN PRINT ROOMDESCRIBE$(ROOM):_
       PRINT ROOMDES2$(ROOM):DESCRIBEFLAG(ROOM)=1:GOTO JUMPOVER
    IF DESCRIBEFLAG(ROOM)=1 AND DESCRIPTION$(ROOM)="STREET" THEN _
        PRINT "You find yourself in the STREET"
    IF DESCRIBEFLAG(ROOM)=1 AND DESCRIPTION$(ROOM)<>"STREET" THEN _
        PRINT "You find yourself at the ";:PRINT DESCRIPTION$(ROOM)
    JUMPOVER:     'HOPELESS KLUDGE I MUST BE GETTING TIRED
    DELAY 0.3
    PRINT "The noticeable exits are: ";
    IF MOVEMENTTABLE(ROOM,1)<>0 THEN PRINT "NORTH ";
    IF MOVEMENTTABLE(ROOM,2)<>0 THEN PRINT "SOUTH ";
    IF MOVEMENTTABLE(ROOM,3)<>0 THEN PRINT "EAST ";
    IF MOVEMENTTABLE(ROOM,4)<>0 THEN PRINT "WEST ";
    IF MOVEMENTTABLE(ROOM,5)<>0 THEN PRINT "UP ";
    IF MOVEMENTTABLE(ROOM,6)<>0 THEN PRINT "DOWN ";
    PRINT
    DELAY 0.3
    PRINT "The noticeable objects are: ";
    COUNTER=0
    FOR I=1 TO 15
        LET STUFF$= ROOMOBJECT$(ROOM,I)
        IF LEFT$(STUFF$,5)<>"EMPTY" THEN PRINT "   ";ROOMOBJECT$(ROOM,I);_
          :COUNTER=COUNTER+1
    NEXT I
    IF COUNTER=0 THEN PRINT "noticeably absent!";
    PRINT
    DELAY 0.3
    PRINT "You are carrying: ";
            COUNTER=0
            FOR I= 1 TO 5
                IF INVENTORY$(I)<>"EMPTY" THEN COUNTER=COUNTER + 1:_
                    PRINT INVENTORY$(I);"   ";
            NEXT I
            IF COUNTER = 0 THEN PRINT "nothing at all."
     PRINT
     DELAY 0.3
    OBJECT$="SNAKE"
        IF FLAG(21)=0 AND TURNNUMBER>90 AND FLAG(2)=0 AND FNPRESENT=1 THEN_
          PRINT "A coyote strolls by, sees the dead SNAKE and runs away":_
          FLAG(21)=1
        IF FLAG(24)=0 AND FLAG(21)=1 AND DESCRIPTION$(ROOM)="STREET" AND _
          TURNNUMBER>120 THEN  FLAG(24)=1:__
          PRINT "A tourist tells you his dog ran off after seeing a dead SNAKE."

    IF ROOM =22 AND FLAG(20)=0 THEN PRINT "The glowing LANTERN is quite bright":_
        FLAG(20)=1

    IF ROOM = 10 AND FLAG(4)=1 AND FLAG(8)=0 THEN PRINT_
       "There is a shy and hungry KITTEN here"
    IF ROOM = 9 AND FLAG(4)=0 THEN PRINT "There is an unhappy ENGLISHMAN* here"
    OBJECT$="SUGAR"
       IF ROOM=33 AND FLAG(4)=1 AND FNPRESENT = 0 AND FLAG(9)=0 THEN _
          PRINT "You see a limping HORSE. You'll need a bribe to lure him over."
       IF ROOM = 33 AND FLAG(4)=1 AND FNPRESENT = 1 AND FLAG(9)=0 THEN_
          PRINT "The HORSE with a THORN in his hoof is nibbling on the SUGAR"
    THING$="LANTERN"
       IF ROOM=23 OR ROOM=24 OR ROOM=25 OR ROOM=26 OR ROOM=27 OR ROOM=28_
          OR ROOM=29 OR ROOM=30 OR ROOM=31 OR ROOM=32 THEN FLAG(19)=1 ELSE FLAG(19)=0
       IF FLAG(19)=1 AND FNCARRY=0 THEN PRINT "Too dark -- Dangerous!":_
           DANGEROUS=DANGEROUS + 1
       IF DANGEROUS=8 THEN PRINT "You bumped your head in the dark": _
          FLAG(1)=-1:EXIT SUB
    IF ROOM=15 AND FLAG(5)=0 THEN PRINT "There's a mighty hungry COW here"
    IF ROOM=15 AND FLAG(5)=1 THEN PRINT "There is a contented COW here"
    THING$="SNAKE": IF ROOM =18 AND FLAG(2)=0 AND FNCARRY=0 THEN CLS:PRINT:PRINT:_
       PRINT "A vicious DOG chases you out of the shack and back into the STREET":_
       FLAG(14)=1:ROOM=19:EXIT SUB
    IF ROOM=18 AND FLAG(2)=0 AND FNCARRY=1 THEN FLAG(2)=1:PRINT _
       "The DOG was frightened off by the dead RATTLESNAKE"
    IF TURNNUMBER=150 AND FLAG(17)=0 AND FLAG(26)=0 THEN FLAG(26)=1:_
       PRINT "The JAIL door KEY is buried somewhere."
    IF SCORE=86 AND FLAG(25)=0 THEN FLAG(25)=1:_
       PRINT "A stranger asks you the name of the HOTEL."
    PRINT
END SUB

'MODULE 2.1.1 GAME STARTER -- PRINT OUT INTRODUCTORY REMARKS
SUB GAMESTARTER
     CLS
     PRINT
     PRINT "                WELCOME TO HANGTOWN"
     PRINT
     PRINT
     PRINT "Come away with me on an exciting adventure to "
     PRINT "HANGTOWN, home of the GOLD rush!  Cope with "
     PRINT "mad dogs and ENGLISHMEN!  Save endangered animals!"
     PRINT "GET TREASURES!     MAKE TEA!"
     PRINT
     PRINT "Give COMMANDs as verb then object, such as  GO NORTH,"
     PRINT "SAVE GAME, RESTORE GAME, READ SIGN, KILL SNAKE,"
     PRINT "and GO CELLAR."
     PRINT
     PRINT "Exceptions to this two-word sentence rule are single-letter"
     PRINT "COMMANDs such as  N to GO NORTH, U to GO UP, AND D to GO"
     PRINT "DOWN."
     PRINT
     PRINT "P.S. Don't try to GET objects ending in an *, e.g., BOULDER*,"
     PRINT "as they are quite unobtainable-- comprendez, podner?"
     PRINT
     PRINT "And if you get stuck, just keep trying things, because"
     PRINT "After a certain number of turns, a hint will show up."
     PRINT "Press ENTER to begin"
     DO WHILE LEN(INKEY$)=0:LOOP
     CLS
END SUB

'MODULE 2.1.2 ERASER ERASES ONE LINE OF TEXT
SUB ERASER
    REM    FOR I=1 TO 12:PRINT "          ";:NEXT I
END SUB

'MODULE 2.2 COMMANDS
SUB COMMANDS
    SHARED VERB$, OBJECT$,ROOM,DESCRIPTION$(),FLAG(),INVENTORY$(),_
        ROOMOBJECT$(),OBJ$(),OBJ2$(),C$,ANSWER$(),TURNNUMBER,CONVERTNUM

    IF FLAG(1)<>0 THEN EXIT SUB
    IF FLAG(14)=1 THEN EXIT SUB
    ' BE SURE THAT INPUT IS OK  DUMMY2=0
    DUMMY2=0
   DO UNTIL DUMMY2=1
    'C$=THE INPUTTED COMMAND SENTENCE - MAY BE MORE THAN 2 WORDS
    'BUT ONLY THE FIRST TWO WORDS ARE ACCEPTED
    ' THE FIRST IS CALLED VERB$ AND THE SECOND OBJECT$
    LET C$=""
    PRINT:PRINT
    PRINT "*****************************************************************"
    DO UNTIL C$<>""
        INPUT "COMMAND";C$                 'GET THE RAW SENTENCE
    LOOP

    REM SPACES TAKE OFF LEADING AND PERHAPS TRAINING CHR$(32)'S
    DO WHILE RIGHT$(C$,1)=CHR$(32)
      LET C$=LEFT$(C$,LEN(C$)-1)
    LOOP

    LET C$=UCASE$(C$)

    LET I=1                                'LETTER COUNTER

    DO WHILE NOT (ASC (MID$(C$,I,1)) = 32) AND NOT (I= LEN(C$))
                                           'LOOP TO LOOK FOR FIRST SPACE
        LET I = I + 1                      'WHICH SHOULD DENOTE END OF FIRST
    LOOP                                   'WORD

    LET VERB$=MID$(C$,1,I)                 'ASSIGN THOSE CHARACTERS TO VERB$

LET ANSWER$(TURNNUMBER)=C$

    LET OBJECT$ = MID$(C$,I+1,LEN(C$))     'ASSIGN REST OF SENTENCE TO OBJECT$


    IF LEN(OBJECT$)<>0 THEN VERB$=LEFT$(VERB$,LEN(VERB$)-1)
    FOR J=1 TO 18                          'CONVERT OBJECT$ LACKING * OR !
        IF OBJECT$=OBJ$(J) THEN LET OBJECT$=OBJ2$(J)
    NEXT J
    'CHECK FOR EXTRA WORDS
    COUNTER=0
    FOR J=1 TO LEN(OBJECT$)
      LET DUMMY$=MID$(OBJECT$,J,1)
      IF DUMMY$=CHR$(32) THEN COUNTER=COUNTER+1
    NEXT J
    IF COUNTER<>0 THEN PRINT "One space (two words) only, please." _
      ELSE DUMMY2=1

 LOOP
END SUB
       WRITE #1,DTA(I)
         NEXT I
         FOR I=1 TO 10
           WRITE #1,DTA$(I)
         NEXT I
       CLOSE #1

    OPEN "HANGDATA.TXT" FOR APPEND AS #2
    PRINT #2, DATE$,TIME$
    FOR I=0 TO TURNNUMBER
         IF INT(I/5)=I/5 THEN PRINT #2, ANSWER$(I) ELSE PRINT #2,ANSWER$(I),
    NEXT I
    PRINT #2,INT((STRT-TIMER)/6),
    PRINT #2,INT(1000*RND(0))
    CLOSE #2
    PRINT "This game is over.  Type HANGTOWN to play again."
END SUB

'END OF PROGRAM









3 Likes

'MODULE 1.3 MOVEMENTTABLE
SUB MOVEMENTTABLE
SHARED MOVEMENTTABLE(),NUMBERROOMS
DIM MOVEMENTTABLE(NUMBERROOMS,6)
FOR I=1 TO NUMBERROOMS
FOR J = 1 TO 6
READ MOVEMENTTABLE(I,J)
NEXT J
NEXT I
DATA 0,0,0,0,2,0,0,0,3,0,0,0,0,7,5,2,4,0
DATA 0,0,0,0,0,3,0,0,5,3,0,0,0,0,7,0,0,0
DATA 3,10,8,6,0,0,0,0,0,7,0,0,0,0,10,0,0,0
DATA 7,13,11,9,0,0,0,0,0,10,0,0,0,0,13,0,0,0
DATA 10,16,14,12,0,0,0,0,0,13,0,0,0,0,16,0,0,0
DATA 13,19,17,15,0,0,0,0,0,16,0,0,0,0,19,0,0,0
DATA 16,33,20,18,0,0,0,0,0,19,0,0,0,0,0,0,0,20
DATA 0,0,0,0,18,25,0,27,24,0,0,0,0,28,25,23,0,0
DATA 0,29,26,24,22,0,0,30,0,25,0,0,23,31,28,0,0,0
DATA 24,0,28,27,0,0,25,32,30,28,0,0,26,0,0,29,0,0
DATA 27,0,0,0,0,0,29,0,0,0,0,0,19,0,0,0,0,0

END SUB

'MODULE 1.4 INVENTORY
SUB INVENTORY
SHARED INVENTORY$()
DIM INVENTORY$(5)
FOR I=1 TO 5
LET INVENTORY$(I)=“EMPTY”
NEXT I
END SUB

'MODULE 1.5 OTHERS
SUB OTHERS
SHARED GAMESTATE$,ROOM,TURNNUMBER,ROOMOBJECT$(),THING$,INVENTORY$(),_
FLAG(),OBJ$(),OBJ2$(),DESCRIBEFLAG(),ROOMDESCRIBE$(),ROOMDES2$(),_
CONVERTNUM
LET ROOM = 3 'START IN HANGTOWN SQUARE
LET TURNNUMBER =0
DANGEROUS=1
LET THING$=“”
FOR I=1 TO 30:LET FLAG(I)=0:NEXT I 'SET FLAGS TO 0
'FLAG # MEANING OF 0 FLAG# MEANING OF 0
’ 1 GAME NOT OVER 2 DOG NOT GONE
'FOR 1, 1 MEANS GAME WON -1 GAME LOST 2 MEANS GAME QUIT
’ 3 SNAKE NOT KILLED 4 TEA NOT MADE
’ 5 COW NOT FED 6 JAIL DOOR LOCKED
’ 7 LANTERN NOT CARRIED 8 KITTEN NOT FED
’ 9 THORN NOT OUT 10 KETTLE NOT FILLED
'11 BUCKET EMPTY 12 ROPE NOT TIED TO BUCKET
'13 SAFE HINGE NOT OILED 14 NOT CHASED BY DOG
'14 IS USED TO EXIT TURN BUT NOT EXIT THE GAME
'15 SAFE NOT OPENED 16 SILVER NOT DUG
'17 KEY NOT DUG 18 EMERALD NOT DROPPED
'19 ROOM NOT DANGEROUS 20 NEVER BEEN TO LANTERN ROOM22
'21 COYOTE HINT NOT GIVEN 22 COFFEE NOT NAMED
'23 PAIL NOT FILLED WITH MILK 24 2ND DOG HINT NOT GIVEN
'25 GOLD HINT NOT GIVEN 26 KEY HINT NOT GIVEN
LET ROOMOBJECT$(1,1)=“GOLD!” 'STARTING LOCATIONS FOR OBJECTS
LET ROOMOBJECT$(2,1)=“WELL*”
LET ROOMOBJECT$(2,2)=“SNAKE”
LET ROOMOBJECT$(2,3)=“BUCKET”
LET ROOMOBJECT$(3,1)=“SIGN*”
LET ROOMOBJECT$(4,1)=“ROPE”
LET ROOMOBJECT$(5,1)=“EMPTYKEY”
LET ROOMOBJECT$(6,1)=“KETTLE”
LET ROOMOBJECT$(6,2)=“SIGN*”
LET ROOMOBJECT$(6,3)=“EMPTYMIRROR*”
LET ROOMOBJECT$(6,4)=“EMPTYSILVER!”
LET ROOMOBJECT$(7,1)=“DOOR*”
LET ROOMOBJECT$(8,1)=“CUP”
LET ROOMOBJECT$(9,1)=“STOVE*”
LET ROOMOBJECT$(9,2)=“SIGN*”
LET ROOMOBJECT$(9,4)=“CHAIR”
LET ROOMOBJECT$(9,5)=“EMPTYEMERALD!”
LET ROOMOBJECT$(10,1)=“EMPTYRUBY!”
LET ROOMOBJECT$(11,1)=“SAFE*”
LET ROOMOBJECT$(11,2)=“EMPTYJADE!”
LET ROOMOBJECT$(11,3)=“MATCHES”
LET ROOMOBJECT$(12,1)=“MAGAZINES”
LET ROOMOBJECT$(12,2)=“TWEEZERS”
LET ROOMOBJECT$(12,3)=“MINERAL-OIL”
LET ROOMOBJECT$(13,1)=“ROCK”
LET ROOMOBJECT$(14,1)=“SHOVEL”
LET ROOMOBJECT$(14,2)=“HAY”
LET ROOMOBJECT$(14,3)=“PAIL”
LET ROOMOBJECT$(15,1)=“COW*”
LET ROOMOBJECT$(17,1)=“SUGAR”
LET ROOMOBJECT$(18,1)=“TEA”
LET ROOMOBJECT$(18,2)=“CELLAR*”
LET ROOMOBJECT$(20,1)=“BOULDER*”
LET ROOMOBJECT$(21,1)=“MAP”
LET ROOMOBJECT$(22,1)=“LANTERN”
LET ROOMOBJECT$(31,1)=“EMPTYDIAMONDS!”
LET ROOMOBJECT$(33,1)=“EMPTYTURQUOISE!”

LET CONVERTNUM=18
FOR I=1 TO CONVERTNUM              'READ IN WORD!* CONVERSIONS
    READ OBJ$(I),OBJ2$(I)
NEXT I
DATA GOLD,GOLD!,WELL,WELL*,SIGN,SIGN*,DOOR,DOOR*,STOVE,STOVE*,EMERALD,_
    EMERALD!,RUBY,RUBY!,DIAMONDS,DIAMONDS!,COW,COW*,CELLAR,CELLAR*,_
    BOULDER,BOULDER*,JADE,JADE!,SILVER,SILVER!,TURQUOISE,TURQUOISE!,_
    MINERAL,MINERAL-OIL,OIL,MINERAL-OIL,SAFE,SAFE*,MIRROR,MIRROR*

END SUB

'MODULE 2 TURN
SUB TURN
SHARED FLAG(),TURNNUMBER
DO UNTIL FLAG(1) <> 0
FLAG(14)=0
TURNNUMBER = TURNNUMBER + 1
IF TURNNUMBER=295 THEN BEEP 3:_
PRINT “Type SAVE GAME and then QUIT”:_
PRINT “You can then return to this spot by typing”:_
PRINT “HANGTOWN (at the DOS prompt) and later,”:_
PRINT “as a command, RESTORE GAME”:_
PRINT “Please forgive the necessary inconvenience.”
IF TURNNUMBER=300 THEN FLAG(1)=2
CALL DESCRIBE 'MODULE 2.1 DESCRIBE THE ROOM
CALL COMMANDS 'MODULE 2.2 INPUT THE COMMANDS
CALL EVALUATE 'MODULE 2.3 EVALUATE COMMANDS
LOOP
END SUB

'MODULE 2.1 DESCRIBE THE CURRENT ROOM
SUB DESCRIBE
SHARED DESCRIPTION$(),ROOM,MOVEMENTTABLE(),ROOMOBJECT$(),FLAG(),_
TURNNUMBER,INVENTORY$(),THING$,OBJECT$,DESCRIBEFLAG(),ROOMDESCRIBE$(),_
ROOMDES2$()

IF TURNNUMBER=1 THEN CALL GAMESTARTER   'MODULE 2.1.1
IF DESCRIBEFLAG(ROOM)=0 THEN PRINT ROOMDESCRIBE$(ROOM):_
   PRINT ROOMDES2$(ROOM):DESCRIBEFLAG(ROOM)=1:GOTO JUMPOVER
IF DESCRIBEFLAG(ROOM)=1 AND DESCRIPTION$(ROOM)="STREET" THEN _
    PRINT "You find yourself in the STREET"
IF DESCRIBEFLAG(ROOM)=1 AND DESCRIPTION$(ROOM)<>"STREET" THEN _
    PRINT "You find yourself at the ";:PRINT DESCRIPTION$(ROOM)
JUMPOVER:     'HOPELESS KLUDGE I MUST BE GETTING TIRED
DELAY 0.3
PRINT "The noticeable exits are: ";
IF MOVEMENTTABLE(ROOM,1)<>0 THEN PRINT "NORTH ";
IF MOVEMENTTABLE(ROOM,2)<>0 THEN PRINT "SOUTH ";
IF MOVEMENTTABLE(ROOM,3)<>0 THEN PRINT "EAST ";
IF MOVEMENTTABLE(ROOM,4)<>0 THEN PRINT "WEST ";
IF MOVEMENTTABLE(ROOM,5)<>0 THEN PRINT "UP ";
IF MOVEMENTTABLE(ROOM,6)<>0 THEN PRINT "DOWN ";
PRINT
DELAY 0.3
PRINT "The noticeable objects are: ";
COUNTER=0
FOR I=1 TO 15
    LET STUFF$= ROOMOBJECT$(ROOM,I)
    IF LEFT$(STUFF$,5)<>"EMPTY" THEN PRINT "   ";ROOMOBJECT$(ROOM,I);_
      :COUNTER=COUNTER+1
NEXT I
IF COUNTER=0 THEN PRINT "noticeably absent!";
PRINT
DELAY 0.3
PRINT "You are carrying: ";
        COUNTER=0
        FOR I= 1 TO 5
            IF INVENTORY$(I)<>"EMPTY" THEN COUNTER=COUNTER + 1:_
                PRINT INVENTORY$(I);"   ";
        NEXT I
        IF COUNTER = 0 THEN PRINT "nothing at all."
 PRINT
 DELAY 0.3
OBJECT$="SNAKE"
    IF FLAG(21)=0 AND TURNNUMBER>90 AND FLAG(2)=0 AND FNPRESENT=1 THEN_
      PRINT "A coyote strolls by, sees the dead SNAKE and runs away":_
      FLAG(21)=1
    IF FLAG(24)=0 AND FLAG(21)=1 AND DESCRIPTION$(ROOM)="STREET" AND _
      TURNNUMBER>120 THEN  FLAG(24)=1:__
      PRINT "A tourist tells you his dog ran off after seeing a dead SNAKE."

IF ROOM =22 AND FLAG(20)=0 THEN PRINT "The glowing LANTERN is quite bright":_
    FLAG(20)=1

IF ROOM = 10 AND FLAG(4)=1 AND FLAG(8)=0 THEN PRINT_
   "There is a shy and hungry KITTEN here"
IF ROOM = 9 AND FLAG(4)=0 THEN PRINT "There is an unhappy ENGLISHMAN* here"
OBJECT$="SUGAR"
   IF ROOM=33 AND FLAG(4)=1 AND FNPRESENT = 0 AND FLAG(9)=0 THEN _
      PRINT "You see a limping HORSE. You'll need a bribe to lure him over."
   IF ROOM = 33 AND FLAG(4)=1 AND FNPRESENT = 1 AND FLAG(9)=0 THEN_
      PRINT "The HORSE with a THORN in his hoof is nibbling on the SUGAR"
THING$="LANTERN"
   IF ROOM=23 OR ROOM=24 OR ROOM=25 OR ROOM=26 OR ROOM=27 OR ROOM=28_
      OR ROOM=29 OR ROOM=30 OR ROOM=31 OR ROOM=32 THEN FLAG(19)=1 ELSE FLAG(19)=0
   IF FLAG(19)=1 AND FNCARRY=0 THEN PRINT "Too dark -- Dangerous!":_
       DANGEROUS=DANGEROUS + 1
   IF DANGEROUS=8 THEN PRINT "You bumped your head in the dark": _
      FLAG(1)=-1:EXIT SUB
IF ROOM=15 AND FLAG(5)=0 THEN PRINT "There's a mighty hungry COW here"
IF ROOM=15 AND FLAG(5)=1 THEN PRINT "There is a contented COW here"
THING$="SNAKE": IF ROOM =18 AND FLAG(2)=0 AND FNCARRY=0 THEN CLS:PRINT:PRINT:_
   PRINT "A vicious DOG chases you out of the shack and back into the STREET":_
   FLAG(14)=1:ROOM=19:EXIT SUB
IF ROOM=18 AND FLAG(2)=0 AND FNCARRY=1 THEN FLAG(2)=1:PRINT _
   "The DOG was frightened off by the dead RATTLESNAKE"
IF TURNNUMBER=150 AND FLAG(17)=0 AND FLAG(26)=0 THEN FLAG(26)=1:_
   PRINT "The JAIL door KEY is buried somewhere."
IF SCORE=86 AND FLAG(25)=0 THEN FLAG(25)=1:_
   PRINT "A stranger asks you the name of the HOTEL."
PRINT

END SUB

'MODULE 2.1.1 GAME STARTER – PRINT OUT INTRODUCTORY REMARKS
SUB GAMESTARTER
CLS
PRINT
PRINT " WELCOME TO HANGTOWN"
PRINT
PRINT
PRINT "Come away with me on an exciting adventure to "
PRINT "HANGTOWN, home of the GOLD rush! Cope with "
PRINT “mad dogs and ENGLISHMEN! Save endangered animals!”
PRINT “GET TREASURES! MAKE TEA!”
PRINT
PRINT “Give COMMANDs as verb then object, such as GO NORTH,”
PRINT “SAVE GAME, RESTORE GAME, READ SIGN, KILL SNAKE,”
PRINT “and GO CELLAR.”
PRINT
PRINT “Exceptions to this two-word sentence rule are single-letter”
PRINT “COMMANDs such as N to GO NORTH, U to GO UP, AND D to GO”
PRINT “DOWN.”
PRINT
PRINT “P.S. Don’t try to GET objects ending in an , e.g., BOULDER,”
PRINT “as they are quite unobtainable-- comprendez, podner?”
PRINT
PRINT “And if you get stuck, just keep trying things, because”
PRINT “After a certain number of turns, a hint will show up.”
PRINT “Press ENTER to begin”
DO WHILE LEN(INKEY$)=0:LOOP
CLS
END SUB

'MODULE 2.1.2 ERASER ERASES ONE LINE OF TEXT
SUB ERASER
REM FOR I=1 TO 12:PRINT " ";:NEXT I
END SUB

'MODULE 2.2 COMMANDS
SUB COMMANDS
SHARED VERB$, OBJECT$,ROOM,DESCRIPTION$(),FLAG(),INVENTORY$(),_
ROOMOBJECT$(),OBJ$(),OBJ2$(),C$,ANSWER$(),TURNNUMBER,CONVERTNUM

IF FLAG(1)<>0 THEN EXIT SUB
IF FLAG(14)=1 THEN EXIT SUB
' BE SURE THAT INPUT IS OK  DUMMY2=0
DUMMY2=0

DO UNTIL DUMMY2=1
'C$=THE INPUTTED COMMAND SENTENCE - MAY BE MORE THAN 2 WORDS
'BUT ONLY THE FIRST TWO WORDS ARE ACCEPTED
’ THE FIRST IS CALLED VERB$ AND THE SECOND OBJECT$
LET C$=“”
PRINT:PRINT
PRINT “*****************************************************************”
DO UNTIL C$<>“”
INPUT “COMMAND”;C$ 'GET THE RAW SENTENCE
LOOP

REM SPACES TAKE OFF LEADING AND PERHAPS TRAINING CHR$(32)'S
DO WHILE RIGHT$(C$,1)=CHR$(32)
  LET C$=LEFT$(C$,LEN(C$)-1)
LOOP

LET C$=UCASE$(C$)

LET I=1                                'LETTER COUNTER

DO WHILE NOT (ASC (MID$(C$,I,1)) = 32) AND NOT (I= LEN(C$))
                                       'LOOP TO LOOK FOR FIRST SPACE
    LET I = I + 1                      'WHICH SHOULD DENOTE END OF FIRST
LOOP                                   'WORD

LET VERB$=MID$(C$,1,I)                 'ASSIGN THOSE CHARACTERS TO VERB$

LET ANSWER$(TURNNUMBER)=C$

LET OBJECT$ = MID$(C$,I+1,LEN(C$))     'ASSIGN REST OF SENTENCE TO OBJECT$


IF LEN(OBJECT$)<>0 THEN VERB$=LEFT$(VERB$,LEN(VERB$)-1)
FOR J=1 TO 18                          'CONVERT OBJECT$ LACKING * OR !
    IF OBJECT$=OBJ$(J) THEN LET OBJECT$=OBJ2$(J)
NEXT J
'CHECK FOR EXTRA WORDS
COUNTER=0
FOR J=1 TO LEN(OBJECT$)
  LET DUMMY$=MID$(OBJECT$,J,1)
  IF DUMMY$=CHR$(32) THEN COUNTER=COUNTER+1
NEXT J
IF COUNTER<>0 THEN PRINT "One space (two words) only, please." _
  ELSE DUMMY2=1

LOOP
END SUB

'MODULE 2.3 EVALUATE THE COMMANDS
SUB EVALUATE
SHARED VERB$, OBJECT$,ROOM,DIRECTION,MOVEMENTTABLE(),NUMBERROOMS,_
ROOMOBJECT$(),ITEMNUMBER,TURNNUMBER,THING$,INVENTORY$(),FLAG()
IF FLAG(1)<>0 THEN EXIT SUB
IF FLAG(14)=1 THEN EXIT SUB
SELECT CASE VERB$
CASE “QUIT”
LET FLAG(1)=2 'GAME NOT WON(1) OR LOST(-1):EXIT SELECT
CASE “SAVE”
IF OBJECT$<>“GAME” THEN PRINT “TRY- SAVE GAME”:EXIT SELECT
OPEN “HANGSAV.BAS” FOR OUTPUT AS #1

        WRITE #1,ROOM


        FOR I=1 TO 5
            LET DUMMY$=""
            FOR J=1 TO LEN(INVENTORY$(I))
             LET DUMMY$=DUMMY$+CHR$(ASC(MID$(INVENTORY$(I),J,1))+4)
            NEXT J
            WRITE #1,DUMMY$
        NEXT I
        FOR I=1 TO NUMBERROOMS
           FOR J=1 TO 15
            LET DUMMY$=""
            FOR K=1 TO LEN (ROOMOBJECT$(I,J))
             LET DUMMY$=DUMMY$+CHR$(ASC(MID$(ROOMOBJECT$(I,J),K,1))+4)
            NEXT K
            WRITE #1,DUMMY$
           NEXT J
        NEXT I
        FOR I=1 TO 30
            WRITE  #1,FLAG(I)
        NEXT I
        CLOSE #1

        PRINT "OK
        EXIT SELECT
    CASE "RESTORE", "LOAD"
        IF OBJECT$<> "GAME" THEN PRINT "RESTORE GAME":EXIT SELECT
        OPEN "HANGSAV.BAS" FOR INPUT AS #1

        INPUT #1,ROOM


        FOR I=1 TO 5
          INPUT #1,DUMMY$
            LET INVENTORY$(I)=""
            FOR J=1 TO LEN(DUMMY$)
             LET INVENTORY$(I)=INVENTORY$(I)+CHR$(ASC(MID$(DUMMY$,J,1))-4)
            NEXT J
        NEXT I
        FOR I=1 TO NUMBERROOMS
           FOR J=1 TO 15
            INPUT #1,DUMMY$
            LET ROOMOBJECT$(I,J)=""
            FOR K=1 TO LEN (DUMMY$)
             LET ROOMOBJECT$(I,J)=ROOMOBJECT$(I,J)+CHR$(ASC(MID$(DUMMY$,K,1))-4)
            NEXT K
           NEXT J
        NEXT I


        FOR I=1 TO 30
            INPUT  #1,FLAG(I)
        NEXT I

        CLOSE #1
        PRINT "OK
        EXIT SELECT

    CASE "INVENTORY","I"
        COUNTER=0
        PRINT "   You carry: ";
        FOR I= 1 TO 5
            IF INVENTORY$(I)<>"EMPTY" THEN COUNTER=COUNTER + 1:_
                PRINT INVENTORY$(I);"   ";
        NEXT I
        IF COUNTER = 0 THEN PRINT "nothing at all" :EXIT SELECT
        PRINT:EXIT SELECT

    CASE "GO","MOVE","N","S","E","W","U","D"
        IF LEN (VERB$)=1 THEN OBJECT$=VERB$
        IF OBJECT$="NORTH" OR OBJECT$="N" THEN DIRECTION = 1
        IF OBJECT$="SOUTH" OR OBJECT$="S" THEN DIRECTION = 2
        IF OBJECT$="EAST"  OR OBJECT$="E" THEN DIRECTION = 3
        IF OBJECT$="WEST"  OR OBJECT$="W" THEN DIRECTION = 4
        IF OBJECT$="UP"    OR OBJECT$="U" THEN DIRECTION = 5
        IF OBJECT$="DOWN"  OR OBJECT$="D" THEN DIRECTION = 6
        IF OBJECT$="WELL*" AND FLAG(3)=0 THEN_
           PRINT "SNAKE won't let me":EXIT SELECT
        IF ROOM=2 AND OBJECT$="WELL*" AND FLAG(3)=1 THEN PRINT "OK":_
           ROOM=1:EXIT SELECT
        IF ROOM=7 AND FLAG(6)=0 AND DIRECTION = 3 THEN_
           PRINT "Can't enter JAIL - door is locked":EXIT SELECT
        IF ROOM=18 AND OBJECT$="CELLAR*" THEN PRINT "OK":ROOM=22:EXIT SELECT
        IF MOVEMENTTABLE (ROOM,DIRECTION) = 0 THEN _
            PRINT "You can't GO that way" ELSE _
            LET ROOM = MOVEMENTTABLE (ROOM,DIRECTION)
        EXIT SELECT

    CASE "GET","TAKE","PLUCK","EXTRACT","PULL","REMOVE"
        IF ROOM=1 AND OBJECT$="WATER" THEN_
            PRINT "Too dangerous from the LEDGE":EXIT SELECT
        IF ROOM=2 AND OBJECT$="WATER" AND FLAG(3)=0 THEN _
           PRINT "The SNAKE won't let me":EXIT SELECT
        THING$="BUCKET"
        IF ROOM = 2 AND OBJECT$="WATER" AND FLAG(3)=1 AND FNCARRY = 0_
           THEN PRINT "You'll need a BUCKET.":EXIT SELECT
        IF ROOM =2 AND FNCARRY = 1 AND OBJECT$="WATER" AND FLAG(12)=0 THEN PRINT_
            "The BUCKET won't reach the WATER.":EXIT SELECT
        IF ROOM = 2 AND OBJECT$="WATER" AND FLAG(3)=1 AND FNCARRY = 1_
           AND FLAG(12)=1 THEN PRINT "OK":_
           FLAG(11)=1:EXIT SELECT
        THING$="PAIL"
           IF FLAG(5)=1 AND ROOM=15 AND FNCARRY=0 AND OBJECT$="MILK" THEN _
              PRINT "You'll need a PAIL":EXIT SELECT
           IF FLAG(5)=1 AND ROOM = 15 AND OBJECT$="MILK" AND FNCARRY=1 THEN _
              PRINT "OK":FLAG(23)=1: EXIT SELECT
           IF FLAG(5)=0 AND ROOM=15 AND OBJECT$="MILK" THEN_
              PRINT "The hungry COW is too nervous":EXIT SELECT
           IF ROOM<>15 AND OBJECT$="MILK" THEN PRINT "Find a COW":EXIT SELECT
        LET THING$="TWEEZERS"
           IF OBJECT$="THORN" AND FNCARRY=0 THEN _
              PRINT "You'll need something to remove the THORN with.":_
              EXIT SELECT
           IF ROOM=33 AND FLAG(4)=1 AND FNCARRY=1 AND FLAG(9)=0 AND OBJECT$="THORN" THEN _
              PRINT "The happy HORSE shakes something from its mane and runs away":_
              ROOMOBJECT$(33,1)="TURQUOISE!":FLAG(9)=1:EXIT SELECT
        IF OBJECT$="LANTERN" THEN FLAG(7)=1
        IF ROOM=10 AND OBJECT$="KITTEN" THEN _
           PRINT "Too shy - Runs away from you":EXIT SELECT

        LET HOLDING$=OBJECT$
        LET OBJECT$="SUGAR"
        IF ROOM = 33 AND FLAG(4)=1 AND HOLDING$= "HORSE" AND _
           FNPRESENT=0 AND FLAG(9)=0 THEN _
           PRINT "The HORSE won't come to you without a bribe":EXIT SELECT
        LET OBJECT$=HOLDING$

        IF  FNPRESENT = 0 THEN PRINT "I don't see  ";OBJECT$:EXIT SELECT
        IF RIGHT$(OBJECT$,1)="*" THEN PRINT "I can't handle it":EXIT SELECT
        IF OBJECT$="LANTERN" THEN FLAG(7)=1

        IF RIGHT$(OBJECT$,5)="SNAKE" AND FLAG(3)=0 THEN PRINT_
           "I don't handle live SNAKES, thank you very much":EXIT SELECT

        FOR I=1 TO 5
            IF INVENTORY$(I)="EMPTY" THEN INVENTORY$(I)=OBJECT$:_
                PRINT "GOT IT":ROOMOBJECT$(ROOM,ITEMNUMBER)="EMPTY":_
                EXIT SELECT
        NEXT I
        PRINT "You're carrying too much.  Drop something!"
    CASE "PUT","DROP","GIVE"
        IF OBJECT$="MILK"  THEN PRINT "Try  DROP PAIL":EXIT SELECT
        THING$=OBJECT$
        IF OBJECT$="PAIL" AND ROOM=10 AND FLAG(8)=0 AND _
            FNCARRY = 1 THEN FLAG(8)=1:_
            PRINT "The now full KITTEN returns with a pack rat.":_
            PRINT "The pack rat drops something and runs off, ":_
            PRINT "with the KITTEN in hot pursuit":_
            ROOMOBJECT$(10,1)="RUBY!":_
            PRINT:EXIT SELECT
        IF OBJECT$="MILK" AND ROOM=9 THEN PRINT "Try  DROP PAIL":EXIT SELECT
        IF OBJECT$="WATER" THEN PRINT "Try  FILL KETTLE ":EXIT SELECT
        THING$=OBJECT$
        IF FNCARRY=0 THEN PRINT "You don't have the ";OBJECT$:EXIT SELECT
        'PREVENTS DROPPING TWO OF ANYTHING ANYWHERE
        IF FNPRESENT=1 THEN PRINT "Not again.":EXIT SELECT
        IF OBJECT$="LANTERN" THEN FLAG(7)=0
        IF OBJECT$="HAY" AND ROOM=15 THEN FLAG(5)=1
        FOR J=1 TO 15
            IF ROOMOBJECT$(ROOM,J)="EMPTY"THEN ROOMOBJECT$(ROOM,J)=OBJECT$_
                :LET INVENTORY$(ITEMNUMBER)="EMPTY" :PRINT "OK":_
                EXIT SELECT
        NEXT J
        PRINT "This room is full, take it elsewhere":EXIT SELECT
    CASE "LOOK","EXAMINE","INSPECT"
        IF ROOM=2 AND OBJECT$="WELL*" THEN PRINT _
           "I see GOLD!  Maybe I should GO WELL*":EXIT SELECT
        IF ROOM=6 AND OBJECT$="MIRROR*" THEN _
           PRINT "The rest of the sign can now be seen.  It says:":_
           PRINT "      ITEM #2          Sometimes I'm perky,":_
           PRINT "                       Sometimes I'm a drip;":_
           PRINT "                       When I'm freshly brewed,":_
           PRINT "                       Would you like a sip?":_
           PRINT:EXIT SELECT
        IF OBJECT$="SIGN*" THEN PRINT "Try  READ SIGN*  ":EXIT SELECT
        IF OBJECT$="MAP" THEN PRINT "Try -   READ MAP":EXIT SELECT
        PRINT "I don't see anything unexpected":EXIT SELECT
    CASE "READ"
        IF ROOM=9 AND OBJECT$="SIGN*" THEN PRINT "To MAKE TEA --":_
            PRINT "Bring here and DROP the following -":_
            PRINT "TEA, KETTLE, WATER, MILK, MATCHES, SUGAR, ":_
            PRINT "CUP, and something to burn, then type MAKE TEA":EXIT SELECT
        IF ROOM=3 AND OBJECT$="SIGN*" THEN PRINT "The SIGN* says -":_
            PRINT "DROP TREASURES! Such as GOLD! here and type  SCORE  ":EXIT SELECT
        IF ROOM=6 AND OBJECT$="SIGN*" THEN _
            PRINT "         The SIGN* says: Some things you need,":_
            PRINT "                         Can be found here;":_
            PRINT "                         Just say the word,":_
            PRINT "                         And they'll appear.":_
            PRINT "           ITEM #1:      I hang on the wall,":_
            PRINT "                         With nothing to do;":_
            PRINT "                         When you LOOK at me,":_
            PRINT "                         You see only you.":_
            PRINT "       You can't make out the last 4 or 5 lines.":_
            PRINT "       They look backwards or something.":_
            PRINT:EXIT SELECT
        IF ROOM=6 AND OBJECT$="MIRROR*" THEN _
            PRINT "Try -    LOOK MIRROR":EXIT SELECT

        THING$="MAP":IF OBJECT$="MAP" AND FNCARRY=0 THEN PRINT "You don't have the MAP":EXIT SELECT
        THING$="MAP":IF OBJECT$="MAP" AND FNCARRY=1 THEN _
            PRINT "Says  DOWN WEST WEST SOUTH SOUTH DIG":EXIT SELECT
        PRINT "Try READ SIGN* or  READ MAP":EXIT SELECT
   CASE "OIL","LUBRICATE","GREASE"
       THING$="MINERAL-OIL"
           IF FNCARRY=0 THEN PRINT "You don't have the MINERAL-OIL":EXIT SELECT
       IF ROOM=11 THEN PRINT "OK":FLAG(13)=1:EXIT SELECT
       PRINT "Not here":EXIT SELECT
   CASE "DRINK","EAT"
      PRINT "What is it with you and food?":EXIT SELECT
  CASE "SCORE"
      IF ROOM <>3 THEN PRINT "Return to the TOWN SQUARE":EXIT SELECT
      SCORE=2
      FOR I=1 TO 10
          LET STUFF$=ROOMOBJECT$(3,I)
          IF RIGHT$(STUFF$,1)="!" THEN SCORE=SCORE + 14
      NEXT I
      PRINT "Your SCORE is ";SCORE
      IF SCORE=100 THEN PRINT "You win!!!!  Fantastic Job!!!  YAHOO!!":FLAG(1)=1:EXIT SELECT
      PRINT (100-SCORE);" points to go":EXIT SELECT
  CASE "CLIMB"
      IF OBJECT$="WELL" OR OBJECT$="WELL*" THEN PRINT "Try GO WELL*":EXIT SELECT
      THING$="CHAIR"
          IF ROOM=20 AND FNCARRY=1 THEN_
             PRINT "PUT or DROP CHAIR here first.":EXIT SELECT
          OBJECT$="CHAIR":IF ROOM=20 AND FNPRESENT=0 THEN_
             PRINT "The BOULDER is too high, GET something to stand on":_
             EXIT SELECT
          IF ROOM=20 THEN PRINT "Good climbing!":ROOM=21:EXIT SELECT
      PRINT "Come down from there!":EXIT SELECT
  CASE "TIE","CONNECT","ATTACH"
     IF LEFT$(OBJECT$,2)="UP" THEN PRINT "Try  TIE ROPE ":EXIT SELECT
     THING$="ROPE":IF FNCARRY=0 THEN PRINT "You'll need the ROPE":EXIT SELECT
     THING$="BUCKET":IF FNCARRY=0 THEN PRINT "GET the BUCKET":EXIT SELECT
     IF OBJECT$="DOG" THEN PRINT "You want me to try to TIE up a vicious DOG?  HA! HA!":_
         EXIT SELECT
     IF OBJECT$="ROPE" OR OBJECT$="BUCKET" THEN PRINT "One end of the rope is tied to the BUCKET"_
         :FLAG(12)=1:EXIT SELECT
     PRINT "I hardly know you!":EXIT SELECT

  CASE "UNTIE","UNDO"
      IF FLAG(12)=1 AND (OBJECT$="ROPE" OR OBJECT$="BUCKET") THEN_
          PRINT "OK":FLAG(12)=0:EXIT SELECT
  CASE "LOWER"
      PRINT "Try  GET WATER":EXIT SELECT
  CASE "MILK"
      PRINT "Try  GET MILK":EXIT SELECT
  CASE "KILL"
      THING$="ROCK"
          IF FNCARRY=0 AND ROOM=2 THEN PRINT "You'll need a suitable weapon":_
              EXIT SELECT
          IF FNCARRY=1 AND ROOM=2 AND FLAG(3)=0 THEN_
              PRINT "The dead RATTLESNAKE is still frightening.":_
              LET ROOMOBJECT$(2,2)="SNAKE":FLAG(3)=1:EXIT SELECT
      PRINT "You must think I'm crazy!":EXIT SELECT
  CASE "UNLOCK"
      IF OBJECT$="SAFE" THEN PRINT "Try-  OPEN SAFE":EXIT SELECT
      THING$="KEY"
          IF FNCARRY=0 THEN PRINT "You'll need a KEY":EXIT SELECT
          IF ROOM=7 THEN PRINT "The JAIL DOOR* is unlocked. You can GO EAST":FLAG(6)=1:_
              EXIT SELECT
      PRINT "No lock here":EXIT SELECT
  CASE "OPEN"
      IF ROOM=11 AND OBJECT$="SAFE*" AND FLAG(13)=0 THEN _
          PRINT "The rusty hinge needs OIL to open":EXIT SELECT
      IF ROOM=11 AND OBJECT$="SAFE*" AND FLAG(13)=1 AND FLAG(15)=0 THEN _
          PRINT "I see JADE!":ROOMOBJECT$(11,2)="JADE!":_
          FLAG(15)=1:EXIT SELECT
      IF ROOM=11 AND OBJECT$="SAFE*" AND FLAG(15)=1 THEN _
          PRINT "It is open!":EXIT SELECT
      IF OBJECT$="DOOR*" AND FLAG(6)=0 THEN _
          PRINT "The JAIL DOOR is locked!":EXIT SELECT
      IF ROOM=7 AND OBJECT$="DOOR*" AND FLAG(6)=1 THEN _
          PRINT "The JAIL DOOR is open, GO EAST to enter":EXIT SELECT
      PRINT "No........You can't make me":EXIT SELECT
 CASE "THROW"
     IF ROOM=2 THEN PRINT "Try  KILL SNAKE ":EXIT SELECT
     PRINT "Not here":EXIT SELECT
 CASE "DIG","SHOVEL"
     THING$="SHOVEL"
         IF FNCARRY=0 THEN PRINT "You'll need a SHOVEL":EXIT SELECT
         IF ROOM=31 OR ROOM=5 THEN PRINT "I hit something"
         IF ROOM=31 AND FLAG(16)=0 THEN ROOMOBJECT$(31,1)="DIAMONDS!":_
             FLAG(16)=1:EXIT SELECT
         IF ROOM=5 AND FLAG(17)=0 THEN ROOMOBJECT$(5,1)="KEY":_
             FLAG(17)=1:EXIT SELECT
     PRINT "The substrate is too hard here to dig":EXIT SELECT
 CASE "MAKE","PREPARE"
     IF OBJECT$<>"TEA" THEN PRINT "Don't know how":EXIT SELECT
     IF FNPRESENT = 0 THEN PRINT "You'll need TEA":EXIT SELECT
     OBJECT$="KETTLE":IF FNPRESENT=0 OR FLAG(10)=0 THEN _
        PRINT "You'll need a KETTLE FILLed with WATER.":EXIT SELECT
     OBJECT$="PAIL":IF FNPRESENT=0 OR FLAG(23)=0 THEN _
        PRINT "You'll need a PAIL FILLed with MILK.":EXIT SELECT
     OBJECT$="SUGAR":IF FNPRESENT=0 THEN PRINT "You'll need the SUGAR ":EXIT SELECT
     OBJECT$="MATCHES":IF FNPRESENT=0 THEN PRINT "You'll need some MATCHES":EXIT SELECT
     OBJECT$="CUP":IF FNPRESENT=0 THEN PRINT "You'll need a CUP":EXIT SELECT
     OBJECT$="MAGAZINES":IF FNPRESENT=0 THEN PRINT "You'll need something to burn":EXIT SELECT

     IF FLAG(18)=0 THEN FLAG(4)=1:_
          FLAG(18)=1 :ROOMOBJECT$(9,2)="EMERALD!":_
          PRINT "The grateful ENGLISHMAN leaves a big tip":EXIT SELECT
     IF FLAG(18)=1 THEN PRINT "Not again!":EXIT SELECT
     PRINT "PUT the items you need in the TEA ROOM":EXIT SELECT
 CASE "FILL"
     THING$="KETTLE"
     IF OBJECT$="KETTLE" AND FNCARRY=1 AND FLAG(11)=1 THEN _
        FLAG(10)=1:PRINT "The KETTLE is FILLed.":EXIT SELECT
     IF OBJECT$="KETTLE" AND FNPRESENT=1 AND FLAG(11)=1 THEN _
        FLAG(10)=1:PRINT "The KETTLE is FILLed.":EXIT SELECT

     IF OBJECT$="BUCKET" AND ROOM=2 THEN PRINT "Try GET WATER":EXIT SELECT
     IF OBJECT$="PAIL" AND ROOM=15 THEN PRINT "Try  GET MILK":EXIT SELECT
     PRINT "You'll need a KETTLE or a BUCKET or a PAIL":EXIT SELECT

 CASE "ENTER"
     PRINT "Try GO WELL* or GO CELLAR*":EXIT SELECT

 CASE "BURN"
     IF OBJECT$="HAY" THEN PRINT "Too green --- Won't BURN.":EXIT SELECT
     PRINT "Don't play with fire!":EXIT SELECT

 CASE "MIRROR*","MIRROR"
      PRINT "Suddenly you notice a MIRROR* on the wall":_
      PRINT "opposite the SIGN*":LET ROOMOBJECT$(6,3)="MIRROR*":EXIT SELECT

 CASE "SAY"
     PRINT "Just type the word you were going to say":EXIT SELECT

 CASE "COFFEE"
     IF FLAG(22)=0 THEN PRINT "Suddenly you smell and then see some":_
         PRINT "fresh coffee on the bar.  So does a passing prospector":_
         PRINT "who takes it, leaving some SILVER! in exchange.":_
         LET ROOMOBJECT$(6,4)="SILVER!":FLAG(22)=1:EXIT SELECT
     PRINT "All that's left of the coffee is the aroma":EXIT SELECT

 CASE "FEED"
    PRINT "Try the word  GIVE  followed by the name of the food.":_
       EXIT SELECT
 CASE "USE"
   PRINT "Try - DIG or UNLOCK or TIE or PLUCK":EXIT SELECT
 CASE "REVEAL"
   PRINT "Just type the name of the object by itself.":EXIT SELECT
  CASE ELSE
      IF ROOM=6 AND OBJECT$="MIRROR*" THEN _
         PRINT "Try -   LOOK MIRROR":EXIT SELECT
      IF OBJECT$="CELLAR*" THEN _
         PRINT "Try-    GO CELLAR":EXIT SELECT
      IF OBJECT$="WELL*" THEN PRINT "Try-  GO WELL":EXIT SELECT
      PRINT "I don't know that verb":EXIT SELECT
END  SELECT

END SUB

'MODULE 2.3.1 DEFINE THE FUNCTION- IS THE OBJECT PRESENT?
DEF FNPRESENT
SHARED ROOMOBJECT$(),OBJECT$,ITEMNUMBER
FOR J=1 TO 15
IF ROOMOBJECT$(ROOM,J)=OBJECT$ THEN _
FNPRESENT=1:ITEMNUMBER=J:EXIT DEF
NEXT J
FNPRESENT=0
END DEF

'MODULE 2.3.2 DEFINE THE FUNCTION- IS IT BEING CARRIED?
DEF FNCARRY
SHARED INVENTORY$(),THING$,ITEMNUMBER
FOR I = 1 TO 5
IF INVENTORY$(I)=THING$ THEN FNCARRY = 1: ITEMNUMBER = I: EXIT DEF
NEXT I
FNCARRY=0
END DEF

'MODULE 2.4 UPDATE DATA
SUB UPDATE
END SUB

'MODULE 3 CLOSING
SUB CLOSING
SHARED FLAG(),TURNNUMBER,ANSWER$(),STRT
FOR I=1 TO 6:PRINT:NEXT I
INPUT “Be sure that your disk is in the drive and press ENTER”;DUMMY$

   DIM DTA(40),DTA$(10)
   OPEN "REPORT.DTA" FOR INPUT AS #1
     REM RETRIEVES OLD DATA FROM REPORT.DTA
     FOR I=1 TO 40
       INPUT #1,DTA(I)
     NEXT I
     FOR I=1 TO 10
       INPUT #1,DTA$(I)
     NEXT I
   CLOSE #1

  LET DTA(13)=FLAG(1):LET DTA(38)=DTA(38)+INT((TIMER-STRT)/6)
   OPEN "REPORT.DTA" FOR OUTPUT AS #1
     REM SENDS UPDATED DATA TO REPORT.DTA (WITH NAIME$)
     FOR I=1 TO 40
       WRITE #1,DTA(I)
     NEXT I
     FOR I=1 TO 10
       WRITE #1,DTA$(I)
     NEXT I
   CLOSE #1

OPEN "HANGDATA.TXT" FOR APPEND AS #2
PRINT #2, DATE$,TIME$
FOR I=0 TO TURNNUMBER
     IF INT(I/5)=I/5 THEN PRINT #2, ANSWER$(I) ELSE PRINT #2,ANSWER$(I),
NEXT I
PRINT #2,INT((STRT-TIMER)/6),
PRINT #2,INT(1000*RND(0))
CLOSE #2
PRINT "This game is over.  Type HANGTOWN to play again."

END SUB

'END OF PROGRAM

2 Likes

It would be much easier to for you and the recipients to process, if the code was attached as a text file or zipped text file.

Maybe @HanonO or another mod can expedite the process to give John to use attachment privileges.

Edit: Mistype

2 Likes

The Hangtown you played was translated from this. My publisher wanted a professional programmer’s hand. Eric Thornton didn’t much like turbo basic and used x-basic, so some such, and used functions rather than subroutines.

1 Like

Thank you. I apologize, but my aged brain is unfortunately, a bit fried. My daughter and grandson suggested google docs, but I’ve never done that either. I’ll try to get some help. Thanks again. John

4 Likes

Please sir, there is nothing to apologize for.

I have collected the text for Hangtown source from your post, I hope I haven’t messed it up while copy pasting the segments. Here it is:

hangtown_src.txt (43.8 KB)

And when you get the permission to use attachments, you can just hit the button highlighted down below while posting and point to the text file(file extension has to be .txt) or zip file in your hard drive.

And thank you for posting your game’s source code.

5 Likes

Thank you so much. Scott Adams put the source for his pirate adventure in BYTE magazine and I used it as a template in all of mine. If I could, I’d put the rest of the trilogy, as well as the Adventures in Danger trilogy, which was also published by Midwest/CriticalThinking in the archives if they want them.

4 Likes

Ignoring your request for collaborators for a moment, I’m really interested in your ultimate goal. Do you mind sharing more on that, like course objectives, outline of course content and how or where this would be delivered? It might be worth starting a new thread on that, perhaps in the Education category.

4 Likes

I would love to share ideas on the educational benefits of IF. Besides the article that Lee found, documenting improvements in intelligence, creativity and such, I’d like to share a 19 minute video of a presentation I made to the faculty of Sacramento State. In it, I outlined how it started with my year teaching at the University of Melbourne in1968. The course is in rough draft on Drdooriddle and not quite ready for prime time. As i found sharing Hangtown, I need to find how one uploads larger files to the thread. But, it’s nearly 2 am in Sacramento and I’m off. Thank you for your interest my stuff.

7 Likes

@Dooriddle I’ve been charging ahead on this and it’s going well. I’ve sent you a couple of personal messages to keep you up to date with progress. Just thought I’d mention it here in case you hadn’t noticed. There should be an envelope icon on your avatar. Just click on this to find the message.

4 Likes

Hopefully, this is the Pirate Island adventure.
Pirate Island.txt (28.6 KB)

Please let me know if this works, and if it’s what’s wanted for the Archive.
Thanks
John

2 Likes

Looks ok to me.

1 Like

The Hangtown trilogy is already archived at the Internet Archive (see link earlier in this thread), but that disk doesn’t include the uncompiled source code. This listing will be very helpful when it comes to porting this to a modern platform.

3 Likes

I started uploading ADVENTURES IN DANGER, and found that I was denied because I was a new user. Bummer.

4 Likes

I’ve sent you an email. We’ll get this sorted out for you.

3 Likes

I can’t say how appreciative I am. Thank you much. I’m planning on sending all my adventures plus a short video presentation I made to my faculty on how i came to IF.

7 Likes

Although I wanted to get a lot of stuff off, I realize that you are still in your competition and hope that you just set it all aside until the smoke clears. Thanks.

3 Likes

I would’ve worry too much. There isn’t too much left to do. The website hosting the competition tabulates the results automatically.

2 Likes

Fingers crossed

2 Likes