| '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 "; | |
| 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!"; | |
| 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." | |
| 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." | |
| END SUB | |
| 'MODULE 2.1.1 GAME STARTER -- PRINT OUT INTRODUCTORY REMARKS | |
| SUB GAMESTARTER | |
| CLS | |
| PRINT " WELCOME TO FARMTOWN" | |
| 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 "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 "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 "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 "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." | |
| 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 | |
| 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 | |
Xet Storage Details
- Size:
- 30.6 kB
- Xet hash:
- fe2b0ef27327505077370b74def8baf936cf263cedbd1ab73cc1e1f847be8bba
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.