'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 END 'PROGRAM