'MODULE 0 MAIN ******FARMTOWN*******9-2-90
'GAMEDTA.BAS CHANGED TO FARMSAV.BAS ON 1-24-91
'ALSO FIXED ENDING WITH WIN NO MATTER WHETHER
'CHANGE SAW RIDDLE AND MAKE STEW 6MAR92
'CHANGED TIMER AND STRT 2-3-94
'CHANGED SAVE GAME TIME$DATE$ CARROTS 2ND FLARE HINT 7-30-95
'changed snips 1-3-96
'added report 3-5-96 FARMDATA.TXT 10-24-96
CLS
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 21,RABBIT'S WARREN,STREAM,CORNFIELD,PASTURE,PIG STY
DATA STORAGE SHED,BARN,POND,GARDEN,BARNYARD
DATA FARMHOUSE,HIGHWAY,HIGHWAY,HIGHWAY,HIGHWAY
DATA HIGHWAY,HIGHWAY,RECYCLING CENTER,STREET,GAS STATION
DATA CAR PARKED ON SOUTH SIDE OF HIGHWAY
FOR I=1 TO NUMBERROOMS
LET DESCRIBEFLAG(I)=0
NEXT I
FOR I=1 TO NUMBERROOMS
READ ROOMDESCRIBE$(I)
READ ROOMDES2$(I)
NEXT I
DATA "The eyes of the rabbit sitting outside his warren are more"
DATA "orange than pink. Too much vitamin A!"
DATA "Though the gurgle is friendly enough,"
DATA "STICK'S STREAM is more dangerous than it looks."
DATA "Here at KELLOG'S CORNFIELD,"
DATA "You see plenty of pig food."
DATA "Here at PIZENSIGH'S PASTURE, we see the dangers of over-"
DATA "grazing. The grass is too short to eat."
DATA "Here at the INNAH PIG STY, The scene reminds you of your"
DATA "school cafeteria on a rainy day."
DATA "There are tools and fruit in the MAGICAL STORAGE SHED,"
DATA "but you have to ask for them by name. Weird."
DATA "The BARN smells, well, like a barn. No wonder people"
DATA "held barn dances out of door whenever possible."
DATA "If the DUCKS weren't so grouchy, this POND"
DATA "would be a good place to spend some time."
DATA "Some vandalous animal has dug up and stolen all of the"
DATA "CARROTS, but you may still find some POTATOES."
DATA "Watch your step!"
DATA "This has been a very active BARNYARD."
DATA "What we have here in the FARMHOUSE is a very crabby FARMER"
DATA "who seems to be waiting for someone to fix supper."
DATA "HIGHWAY"," ","HIGHWAY"," ","HIGHWAY"," ","HIGHWAY"," "
DATA "HIGHWAY"," "
DATA "The sound of the trucks barreling by on the narrow"
DATA "HIGHWAY is quite deafening. "
DATA "Here at the SAVE OUR GLASS RECYCLING CENTER,"
DATA "nothing is wasted."
DATA "MAIN STREET could just as easily"
DATA "have been called ONLY STREET."
DATA "The semi-automated GAS STATION"
DATA "is quite deserted."
DATA "You are out of gas and money, parked along the SOUTH SIDE OF"
DATA "A busy HIGHWAY. You recall passing a town a little way back."
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,2,0,0,0,0,1,4,0,0,0,0
DATA 0,0,4,0,0,0,2,7,5,3,0,0
DATA 0,0,0,4,0,0,0,0,7,0,0,0
DATA 4,10,8,6,0,0,0,0,0,7,0,0
DATA 0,0,10,0,0,0,7,14,11,9,0,0
DATA 0,0,0,10,0,0,0,0,13,12,0,0
DATA 0,0,14,12,0,0,10,19,15,13,0,0
DATA 0,0,16,14,0,0,0,21,17,15,0,0
DATA 0,0,17,16,0,0,0,0,19,0,0,0
DATA 14,0,20,18,0,0,0,0,0,19,0,0
DATA 16,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$(),CONVERTNUM
LET ROOM = 21 'START IN CAR
LET TURNNUMBER =0
DANGEROUS=1
LET THING$=""
DIM FLAG(30)
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 TREE NOT SAWED
'FOR 1, 1 MEANS GAME WON -1 GAME LOST 2 MEANS GAME QUIT
' 3 PIGS* NOT FED 4 HAY NOT GOTTEN
' 5 DUCKS* NOT FED 6 COWS* NOT FED
' 7 PEARS NOT REVEALED 8 HOE NOT REVEALED
' 9 POTATOES NOT GOTTEN 10 FARMER NOT ASLEEP
'11 FLARE NOT DROPPED 12 5 BOTTLES NOT DROPPED
'13 GAS NOT GOTTEN 14 USED IN DESCRIBE
'14 IS USED TO EXIT TURN BUT NOT EXIT THE GAME
'15 SAW NOT REVEALED 16 FLARE NOT REVEALED
'17 CAR SITUATION NOT DESCRIBED
'18 FLARE HINT NOT GIVEN
'19 2ND FLARE HINT NOT GIVEN
LET ROOMOBJECT$(1,1)="SIGN*" 'STARTING LOCATIONS FOR OBJECTS
LET ROOMOBJECT$(1,2)="RABBIT*"
LET ROOMOBJECT$(1,3)="CARROTS"
LET ROOMOBJECT$(2,1)="EMPTYTREE-BRIDGE*"
LET ROOMOBJECT$(3,1)="SIGN*"
LET ROOMOBJECT$(3,2)="CORN"
LET ROOMOBJECT$(4,1)="TREE*"
LET ROOMOBJECT$(4,2)="COWS*"
LET ROOMOBJECT$(4,3)="EMPTYBOTTLE"
LET ROOMOBJECT$(4,4)="EMPTYBOTTLE"
LET ROOMOBJECT$(5,1)="PIGS*"
LET ROOMOBJECT$(5,2)="EMPTYBOTTLE"
LET ROOMOBJECT$(6,1)="FRUIT*"
LET ROOMOBJECT$(6,2)="TOOLS*"
LET ROOMOBJECT$(6,3)="SIGN*"
LET ROOMOBJECT$(6,4)="EMPTYPEARS"
LET ROOMOBJECT$(6,5)="EMPTYHOE"
LET ROOMBOJECT$(6,6)="EMPTYSAW"
LET ROOMOBJECT$(7,1)="HAY"
LET ROOMOBJECT$(7,2)="PITCHFORK"
LET ROOMOBJECT$(7,3)="MEAT"
LET ROOMOBJECT$(7,4)="EMPTYBOTTLE"
LET ROOMOBJECT$(8,1)="DUCKS*"
LET ROOMOBJECT$(8,2)="EMPTYBOTTLE"
LET ROOMOBJECT$(9,1)="SIGN*"
LET ROOMOBJECT$(9,2)="EMPTYPOTATOES"
LET ROOMOBJECT$(10,1)="SIGN*"
LET ROOMOBJECT$(11,1)="SIGN*"
LET ROOMOBJECT$(11,2)="FARMER*"
LET ROOMOBJECT$(11,3)="STOVE*"
LET ROOMOBJECT$(11,4)="POT*"
LET ROOMOBJECT$(11,5)="GAS-CAN"
LET ROOMOBJECT$(11,6)="BREAD"
LET ROOMOBJECT$(18,1)="SIGN*"
LET ROOMOBJECT$(18,2)="EMPTYDOLLAR"
LET ROOMOBJECT$(19,1)="SIGN*"
LET ROOMOBJECT$(20,1)="SIGN*"
LET ROOMOBJECT$(21,1)="SIGN*"
LET ROOMOBJECT$(21,2)="EMPTYFLARE"
READ CONVERTNUM
DIM OBJ$(CONVERTNUM),OBJ2$(CONVERTNUM)
FOR I=1 TO CONVERTNUM 'READ IN WORD!* CONVERSIONS
READ OBJ$(I),OBJ2$(I)
NEXT I
DATA 19,SIGN,SIGN*,RABBIT,RABBIT*,TREE-BRIDGE,TREE-BRIDGE*
DATA BRIDGE,TREE-BRIDGE*,TREE,TREE*,STUMP,STUMP*,COWS,COWS*
DATA PIGS,PIGS*,FRUIT,FRUIT*,TOOLS,TOOLS*,DUCKS,DUCKS*
DATA FARMER,FARMER*,STOVE,STOVE*,POT,POT*,CAN,GAS-CAN,PEAR,PEARS
DATA CARROT,CARROTS,PAIR,PEARS,FLAIR,FLARE
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 "FARMTOWN (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
SELECT CASE DESCRIBEFLAG(ROOM)
CASE 0
PRINT ROOMDESCRIBE$(ROOM)
PRINT ROOMDES2$(ROOM)
DESCRIBEFLAG(ROOM)=1:EXIT SELECT
CASE 1
SELECT CASE DESCRIPTION$(ROOM)
CASE "HIGHWAY"
PRINT "You find yourself on the SOUTH side of a HIGHWAY"
CASE "STREET","BARN","FARMHOUSE"
PRINT "You find yourself in the ";DESCRIPTION$(ROOM)
CASE ELSE
PRINT "You find yourself at the ";DESCRIPTION$(ROOM)
END SELECT
END SELECT
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
'PUT DOLLAR IN 18 IF 5 BOTTLES ARE PRESENT
IF ROOM=18 AND FNFIVEBOTTLES=1 AND FLAG(12)=0 THEN _
ROOMOBJECT$(18,2)="DOLLAR":FLAG(12)=1
IF ROOM=2 AND FLAG(2)=0 THEN PRINT "The narrow streem is too deep to cross":_
FLAG(14)=1:ROOM=4:EXIT SUB
IF ROOM=10 AND FLAG(11)=0 THEN ROOM=14:CLS:PRINT:PRINT:_
PRINT "The blast of air of a big truck going by blows you back to":_
PRINT "the SOUTH SIDE OF THE HIGHWAY. They should slow down!":_
FLAG(14)=1:EXIT SUB
IF FLAG(18)=0 AND TURNNUMBER>30 THEN FLAG(18)=1:_
PRINT "An outrageously dressed passerby tells you your outfit lacks flair"
IF FLAG(19)=0 AND FLAG(11)=0 AND TURNNUMBER>50 AND ROOM=14 THEN FLAG(19)=1:_
PRINT "Maybe I should DROP the REVEALed FLARE here."
PRINT
END SUB
'MODULE 2.1.1 GAME STARTER -- PRINT OUT INTRODUCTORY REMARKS
SUB GAMESTARTER
CLS
PRINT
PRINT " WELCOME TO FARMTOWN"
PRINT
PRINT "Stop vegetating and come away with me on an exciting adventure "
PRINT "to FARMTOWN, home of the rutabaga! You'll DIG the rural life "
PRINT "along a dangerous HIGHWAY. Cope with the widl hare!"
PRINT "MAKE STEW! GET GAS!"
PRINT
PRINT "Give COMMANDs as verb then object, such as GO NORTH,"
PRINT "SAVE GAME, RESTORE GAME, READ SIGN, DIG POTATOES,"
PRINT "AND REVEAL APPLES (REVEALed OBJECTS will show up where you"
PRINT "would expect that OBJECT to be, not where you typed REVEAL )"
PRINT
PRINT "Exceptions to this tow-word sentence rule are single-letter"
PRINT "COMMANDs such as N to GO NORTH, U to GO UP, D to GO DOWN"
PRINT
PRINT "P.S. Don't try to get objects ending in an *, e.g., TREE*,"
PRINT "as they are quite unobtainable-- you get my drift?"
PRINT
PRINT "And if you get stuck, keep trying different things because"
PRINT "after a certain number of turns, a hint will show up."
PRINT "Happy Adventuring!"
PRINT "If done taking notes, 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 19 '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 "SAVE GAME":EXIT SELECT
OPEN "FARMSAV.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 "FARMSAV.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 MOVEMENTTABLE (ROOM,DIRECTION) = 0 THEN _
PRINT "You can't GO that way" ELSE _
LET ROOM = MOVEMENTTABLE (ROOM,DIRECTION)
EXIT SELECT
CASE "GET","TAKE","ACQUIRE"
HOLDING$=OBJECT$
IF ROOM<>1 AND OBJECT$="CARROTS" THEN PRINT "They aren't here":_
EXIT SELECT
OBJECT$="PEARS":IF ROOM=1 AND FNPRESENT=0 THEN _
PRINT "The RABBIT won't let me":EXIT SELECT
OBJECT$=HOLDING$
IF ROOM=6 AND OBJECT$="FRUIT*" THEN PRINT "READ SIGN*":EXIT SELECT
IF ROOM=6 AND OBJECT$="TOOL*" THEN PRINT "READ SIGN*":EXIT SELECT
THING$="PITCHFORK":IF OBJECT$="HAY" AND FNCARRY=0 THEN _
PRINT "You'll need the PITCHFORK":EXIT SELECT
IF FNCARRY=1 AND ROOM=7 AND FLAG(4)=0 AND FNINVENTORYSPACE=1 _
THEN PRINT "Moving the HAY REVEALs a BOTTLE":_
ROOMOBJECT$(7,4)="BOTTLE":FLAG(4)=1
IF OBJECT$="POTATOES" AND FLAG(9)=0 THEN _
PRINT "DIG them up first":EXIT SELECT
IF OBJECT$="GAS-CAN"AND FLAG(10)=0 THEN _
PRINT "The FARMER won't let you":EXIT SELECT
IF OBJECT$="GAS" THEN PRINT "Try FILL GAS-CAN ":EXIT SELECT
IF OBJECT$="CARROTS" THEN PRINT "DROP only at FARMHOUSE!"
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
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","LEAVE"
THING$="HAY":IF ROOM=4 AND FNCARRY=1 AND FNDROPABLESPOT=1 AND _
FLAG(6)=0 AND OBJECT$="HAY" THEN _
PRINT "As the COWS move to the HAY, you see a BOTTLE":_
ROOMOBJECT$(4,3)="BOTTLE":FLAG(6)=1
THING$="CORN":IF ROOM=5 AND FNCARRY=1 AND FNDROPABLESPOT=1 AND _
FLAG(3)=0 THEN PRINT "As the PIGS come over you see a BOTTLE":_
ROOMOBJECT$(5,2)="BOTTLE":FLAG(3)=1
THING$="BREAD":IF ROOM=8 AND OBJECT$="BREAD" AND FNCARRY=1 AND _
FNDROPABLESPOT=1 AND FLAG(5)=0 THEN _
PRINT "As the DUCKS move, you see a BOTTLE":ROOMOBJECT$(8,2)="BOTTLE":_
FLAG(5)=1
IF OBJECT$="FLARE" AND ROOM<>14 THEN PRINT "Not here":EXIT SELECT
IF OBJECT$="CARROTS" AND ROOM<>11 THEN PRINT "Not here":EXIT SELECT
THING$="FLARE":IF ROOM=14 AND OBJECT$="FLARE" AND FNCARRY=1 AND _
FNDROPABLESPOT=1 AND FLAG(11)=0 THEN FLAG(11)=1:_
PRINT "Traffic has slowed. You can now GO NORTH "
THING$=OBJECT$
IF FNCARRY=0 THEN PRINT "You don't have the ";OBJECT$:EXIT SELECT
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 OBJECT$="SIGN*" THEN PRINT "Try READ SIGN* ":EXIT SELECT
PRINT "I don't see anything unexpected":EXIT SELECT
CASE "READ"
IF OBJECT$<>"SIGN*" THEN PRINT "I only READ SIGNS*":EXIT SELECT
PRINT "It says:"
IF ROOM=1 THEN _
PRINT "I'm so sick of CARROTS,":_
PRINT "They're all that I eat;":_
PRINT "A nice piece of fresh fruit,":_
PRINT "Would sure be a treat."
IF ROOM=3 THEN _
PRINT "Santa,s last word,":_
PRINT "Or is it a greeting?":_
PRINT "GET this good tool,":_
PRINT "And STEW you'll be eating."
IF ROOM=6 THEN _
PRINT "You need to ask for something specific like ":_
PRINT "REVEAL APPLES or REVEAL SHOVEL"
IF ROOM=9 THEN _
PRINT "A fruit named for two,":_
PRINT "Like shoes, socks and aces;":_
PRINT "Whose shape is unique,":_
PRINT "And curvy in places."
IF ROOM=10 THEN _
PRINT "Hundreds of teeth,":_
PRINT "Of steel not enamel;":_
PRINT "When you don't push,":_
PRINT "You pull on my handle."
IF ROOM=11 THEN _
PRINT "Recipe for FARMER's STEW:":_
PRINT "DROP MEAT, POTATOES and CARROTS here,":_
PRINT "And type MAKE STEW "
IF ROOM=18 THEN _
PRINT "Leave 5 BOTTLES here and GET a DOLLAR"
IF ROOM=19 THEN _
PRINT "My red glow of caution,":_
PRINT "You start with a scratch;":_
PRINT "Or a way of doing,":_
PRINT "With style and panache."
IF ROOM=20 THEN _
PRINT "DROP a DOLLAR and FILL your GAS-CAN with":_
PRINT "a gallon of gas to win the game."
IF ROOM=21 THEN _
PRINT "An object in this car,":_
PRINT "Will help you with your chores;":_
PRINT "So come back when you know,":_
PRINT "Say its name and it's yours."
PRINT
EXIT SELECT
CASE "DRINK","EAT"
PRINT "This is not the time to worry about your stomach":EXIT SELECT
CASE "CLIMB"
IF OBJECT$="TREE*" THEN PRINT "Easy Tarzan!":EXIT SELECT
PRINT "Come down from there!":EXIT SELECT
CASE "MILK"
PRINT "Oh, leave them alone!":EXIT SELECT
CASE "KILL"
PRINT "Mellow out, it's only a game!":EXIT SELECT
CASE "DIG","HOE"
IF OBJECT$<>"POTATOES" THEN PRINT "Try DIG POTATOES ":EXIT SELECT
THING$="HOE":IF FNCARRY=1 AND ROOM=9 AND FLAG(9)=0 THEN _
PRINT "THERE THEY ARE!":ROOMOBJECT$(9,2)="POTATOES":_
FLAG(9)=1:EXIT SELECT
PRINT "You'll need the right tool":EXIT SELECT
PRINT "The substrate is too hard here to dig":EXIT SELECT
CASE "MAKE","PREPARE"
IF OBJECT$<>"STEW" THEN PRINT "Try MAKE STEW ":EXIT SELECT
OBJECT$="MEAT":IF FNPRESENT=0 THEN PRINT "Where's the MEAT?":EXIT SELECT
OBJECT$="POTATOES":IF FNPRESENT=0 THEN PRINT "Where're the POTATOES?":EXIT SELECT
OBJECT$="CARROTS":IF FNPRESENT=0 THEN PRINT "Where're the CARROTS?":EXIT SELECT
IF FLAG(10)=0 THEN PRINT "The FARMER ate all of your delicious STEW and fell asleep":_
ROOMOBJECT$(11,2)="SLEEPING-FARMER*":FLAG(10)=1:EXIT SELECT
PRINT "Not again":EXIT SELECT
CASE "CROSS"
IF OBJECT$="HIGHWAY" THEN PRINT "Try N or GO NORTH ":EXIT SELECT
PRINT "Don't be CROSS!":EXIT SELECT
CASE "ENTER"
PRINT "No go, sorry":EXIT SELECT
CASE "SAY"
PRINT "Just type the word you were going to say":EXIT SELECT
CASE "SAW"
THING$="SAW":IF OBJECT$="TREE*" AND FNCARRY=1 AND FLAG(2)=0 THEN _
PRINT "Timber! I see a BOTTLE in the hollow STUMP*":FLAG(2)=1 :_
ROOMOBJECT$(2,1)="TREE-BRIDGE*":ROOMOBJECT$(4,1)="STUMP*":_
ROOMOBJECT$(4,4)="BOTTLE":EXIT SELECT
PRINT "You need a SAW and a TREE":EXIT SELECT
CASE "FEED"
PRINT "Try GIVE CORN or GIVE BREAD or GIVE HAY":EXIT SELECT
CASE "NO"
PRINT "Fascinating":EXIT SELECT
CASE "FILL"
IF OBJECT$="TANK" THEN _
PRINT "Just PUT GAS-CAN in the car":EXIT SELECT
IF OBJECT$="POT*" THEN _
PRINT "Just PUT the ingredients in the FARMHOUSE":EXIT SELECT
IF OBJECT$<>"GAS-CAN" THEN _
PRINT "Are you sure it isn't full already?":EXIT SELECT
IF FLAG(13)=1 THEN PRINT "You did that!":EXIT SELECT
IF ROOM<>20 THEN PRINT "GO to the GAS STATION":EXIT SELECT
IF FNPRESENT=0 THEN PRINT "PUT GAS-CAN here":EXIT SELECT
OBJECT$="DOLLAR":IF FNPRESENT=0 THEN PRINT " PUT DOLLAR here":_
EXIT SELECT
PRINT "With the gas, you are able to drive home,":_
PRINT "Happy in the knowledge that you are awesome!":_
PRINT "You've won FARMTOWN; now on to HANGTOWN!":_
ROOMOBJECT$(20,ITEMNUMBER)="EMPTY":FLAG(1)=1:_
FLAG(13)=1:EXIT SELECT
CASE "START","DRIVE"
IF OBJECT$<>"CAR" THEN PRINT "Try DRIVE CAR ":EXIT SELECT
OBJECT$="GAS-CAN":IF FNPRESENT=0 OR FLAG(13)=0 THEN _
PRINT "PUT the GAS-CAN in the car when it is full":EXIT SELECT
PRINT "As you drive home, you congratulate yourself on winning":_
PRINT "the FARMTOWN ADVENTURE! GOOD WORK!!":FLAG(1)=1:EXIT SELECT
CASE "REVEAL"
IF OBJECT$="PEARS" AND FLAG(7)=0 THEN PRINT "OK":_
ROOMOBJECT$(6,4)="PEARS":FLAG(7)=1:EXIT SELECT
IF OBJECT$="HOE" AND FLAG(8)=0 THEN PRINT "OK":_
ROOMOBJECT$(6,5)="HOE":FLAG(8)=1:EXIT SELECT
IF OBJECT$="FLARE" AND FLAG(16)=0 THEN FLAG(16)=1:_
PRINT "The FLARE will light when DROPped.":_
ROOMOBJECT$(21,2)="FLARE":FLAG(16)=1:EXIT SELECT
IF OBJECT$="SAW" AND FLAG(15)=0 THEN PRINT "OK":_
ROOMOBJECT$(6,6)="SAW":FLAG(15)=1:EXIT SELECT
PRINT "Didn't work":EXIT SELECT
CASE "FLARE","FLAIR"
PRINT "Try REVEAL FLARE ":EXIT SELECT
CASE "LIGHT","IGNITE","STRIKE"
IF OBJECT$="FLARE" THEN PRINT "OK":EXIT SELECT
PRINT "That wouldn't be safe":EXIT SELECT
CASE "USE"
PRINT "To do what. Be more specific.":EXIT SELECT
CASE ELSE
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.3.3 DEFINE THE FUNCTION- IS THERE SPACE IN INVENTORY
DEF FNINVENTORYSPACE
SHARED INVENTORY$()
FNINVENTORYSPACE=0
FOR I=1 TO 5
IF INVENTORY$(I)="EMPTY" THEN FNINVENTORYSPACE=1:EXIT DEF
NEXT I
END DEF
'MODULE 2.3.4 DEFINE THE FUNCTION- IS THERE SPACE HERE TO DROP SOMETHING
DEF FNDROPABLESPOT
SHARED ROOMOBJECT$(),ROOM
FOR J=1 TO 15
IF ROOMOBJECT$(ROOM,J)="EMPTY" THEN FNDROPABLESPOT=1:EXIT DEF
NEXT J
FNDROPABLESPOT=0
END DEF
'MODULE 2.3.5 DEFINE THE FUNCTION- DO WE HAVE 5 BOTTLES YET
DEF FNFIVEBOTTLES
SHARED ROOMOBJECT$(),ROOM
TOTAL=0
FOR J=1 TO 15
IF ROOMOBJECT$(ROOM,J)="BOTTLE" THEN TOTAL=TOTAL+1
NEXT J
IF TOTAL=5 THEN FNFIVEBOTTLES=1 ELSE FNFIVEBOTTLES=0
END DEF
'MODULE 3 CLOSING
SUB CLOSING
SHARED FLAG(),TURNNUMBER,ANSWER$(),STRT
PRINT
IF FLAG(1)= 1 THEN CLS:PRINT:PRINT:_
PRINT "With the gas, you fill the tank and drive on!":_
PRINT "You have conquered a most difficult adventure! Good work!!"
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(10)=FLAG(1):LET DTA(35)=DTA(35)+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 "FARMDATA.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 FARMTOWN to play again."
END SUB