'MODULE 0 MAIN ***PIRATE 8-31-90***
'CHANGED GAMEDTA.BAS TO PIRESAV.BAS ON 1-24-91
'GO DOWNSTAIRS FROM MAIN DECK 6MAR92
'CHANGED CLOCK TIMER STRT 2-3-94
'CHANGED SAVE GAME DATE$ TIME$ 7-30-95
'snips added 1-2-96
'PIRTDATA.TXT ADDED AND REPORT.DTA CHECKED 10-24-96
STRT=TIMER
CLS
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,FOOD LOCKER,SHIP'S LAUNDRY,MAIN DECK,CODE ROOM,OPEN SEA
DATA ARMORY,SANDY BEACH,ROCKY BEACH,TIDE POOL,UPPER BEACH
DATA WOODS,HILLSIDE,HILLTOP,PIRATE'S FORT,HUT,CAMPFIRE AREA,STOCKADE
DATA PASSAGEWAY,SICK BAY,BRIG,TOOL ROOM
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 "You are in the ship's FOOD LOCKER. There is some fruit"
DATA "here, but you will have to REVEAL it by name."
DATA "As you might expect, the laundry room is a mess. The "
DATA "PIRATES are lucky their moms aren't here to see it."
DATA "From the deck of the BASE CANARD, you can see "
DATA "PIRATE ISLAND a short distance to the NORTH."
DATA "Here in the ship's CODE ROOM, secret coded messages"
DATA "are enciphered and deciphered."
DATA "The SEA WATER isn't cold and you can see a SANDY"
DATA "BEACH just to the NORTH."
DATA "Here in the ARMORY is where the PIRATES keep their weapons."
DATA "It looks as if they've taken all but one of them away."
DATA "You are on the BEACH of a beautiful, tropical island."
DATA "The warm sun quickly dries your clothes."
DATA "In this part of the BEACH, waves crash over the rocks."
DATA "For a moment, you forget the danger you are in."
DATA "There are FISH in the TIDE POOL."
DATA "You'll need to try your hand at spear-fishing."
DATA "Here at the UPPER BEACH, The sand is firmer."
DATA "To the EAST you can see WOODS."
DATA "The WOODED AREA you are in is quite small."
DATA "The trees are tall, with long, straight limbs."
DATA "You are on the side of the island's one hill."
DATA "The path is steep and hasn't been used much."
DATA "From the top of the hill, you see the ship to the SOUTH. Your"
DATA "attention, however, is focused on the poor fellow before you."
DATA "The gate of the PIRATE'S FORT is wide open. You sense "
DATA "danger and hope that you are dressed appropriately."
DATA "The PIRATE'S rude HUT is also messy."
DATA "The PIRATES need to learn more self-discipline."
DATA "The fearsome-looking PIRATES are standing around the "
DATA "COALS of a once-roaring campfire. BE CAREFUL!"
DATA "The prisoners locked inside the GATE are glad to see you at first."
DATA "But when you don't UNLOCK the GATE, they move to the far side."
DATA "You are in the dark, dank ship's PASSAGEWAY."
DATA "You can see light at the top of the stairs."
DATA "Here in the SICK BAY, you can find something to take for the"
DATA "malarial fever you picked up in the tropics."
DATA "You find yourself tied up with ropes in the BRIG of a PIRATE"
DATA "SHIP. The foul odor suggests deferred maintenance."
DATA "The TOOL ROOM is empty except for one tool left behind. You"
DATA "will have to unscramble the name of the tool and REVEAL it."
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 3,0,0,0,0,0,0,0,3,0,0,0
DATA 5,1,4,2,0,18,0,0,0,3,0,0
DATA 7,3,0,0,0,0,0,18,0,0,0,0
DATA 10,5,8,0,0,0,11,0,9,7,0,0
DATA 0,0,0,8,0,0,14,7,11,0,0,0
DATA 0,8,0,10,12,0,0,0,0,0,13,11
DATA 0,0,0,0,0,12,17,10,15,16,0,0
DATA 0,0,0,14,0,0,0,0,14,0,0,0
DATA 0,14,0,0,0,0
DATA 6,21,19,20,3,0,0,0,0,18,0,0
DATA 0,0,18,0,0,0,18,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$()
LET ROOM = 20 'START IN THE BRIG- ROOM 20
LET TURNNUMBER =0
LET THING$=""
DIM FLAG(30)
FOR I=1 TO 10:LET FLAG(I)=0:NEXT I 'SET FLAGS TO 0
'FLAG # MEANING OF 0 FLAG# MEANING OF 0
' 1 GAME NOT OVER 2 CLOTHES NOT WORN
' 3 SPEAR NOT CARRIED 4 BRANCH NOT SHARPENED
' 5 FISH NOT COOKED 6 HERMIT NOT FED
' 7 HERMIT NOT WELL 8 HERMIT NOT MOVED
' 9 HOW OFTEN IN ROOM16 10 QUININE NOT TAKEN
'11 RAT NOT REVEALED 12 BRANCH NOT REVEALED
'13 KEY NOT REVEALED
'14 IS USED TO EXIT TURN BUT NOT GAME- FOR HINTS AND EXCEPTIONS
'15 SHOVEL NOT REVEALED 16 SWORD NOT REVEALED
'17 CLOTHES NOT REVEALED 18 QUININE NOT REVEALED
'19 PARROT NOT NAMED 20 ORANGES NOT REVEALED
'21 KEY NOT REVEALED
LET ROOMOBJECT$(1,1)="SOMETHING*" 'ORANGES
LET ROOMOBJECT$(1,2)="SIGN*"
LET ROOMOBJECT$(2,1)="SOMETHING*" 'CLOTHES
LET ROOMOBJECT$(2,2)="SIGN*"
LET ROOMOBJECT$(3,1)="CANNON*" 'STARTING LOCATIONS FOR OBJECTS
LET ROOMOBJECT$(4,1)="SIGN*"
LET ROOMOBJECT$(6,1)="SOMETHING*" 'SWORD
LET ROOMOBJECT$(6,2)="SIGN*"
LET ROOMOBJECT$(9,1)="FISH"
LET ROOMOBJECT$(11,1)="CNBAHR*" 'BRANCH
LET ROOMOBJECT$(13,1)="A SICK AND HUNGRY HERMIT*"
LET ROOMOBJECT$(15,1)="GUNBOX*"
LET ROOMOBJECT$(15,2)="EKY*" 'KEY
LET ROOMOBJECT$(16,1)="PIRATES*"
LET ROOMOBJECT$(16,2)="COALS"
LET ROOMOBJECT$(17,1)="PRISONERS*"
LET ROOMOBJECT$(17,2)="LOCK*"
LET ROOMOBJECT$(18,1)="SIGN*"
LET ROOMOBJECT$(19,1)="SOMETHING*" 'QUININE
LET ROOMOBJECT$(19,2)="SIGN*"
LET ROOMOBJECT$(20,1)="SOMETHING*" 'RAT
LET ROOMOBJECT$(20,2)="SIGN*"
LET ROOMOBJECT$(21,1)="VLHSOE*" 'SHOVEL
READ NUMBERCONVERTS
DIM OBJ$(NUMBERCONVERTS),OBJ2$(NUMBERCONVERTS)
FOR I=1 TO NUMBERCONVERTS 'READ IN WORD!* CONVERSIONS
READ OBJ$(I),OBJ2$(I)
NEXT I
DATA 12,SIGN,SIGN*,GUNBOX,GUNBOX*,BOX,GUNBOX*,PIRATES,PIRATES*
DATA PIRATE,PIRATES*,PRISONER,PRISONERS*,PRISONERS,PRISONERS*
DATA LOCK,LOCK*,RAT,RAT*,ORANGE,ORANGES,SOMETHING,SOMETHING*
DATA CANNON,CANNON*
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 "PIRATE (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 "MAIN DECK","SANDY BEACH","ROCKY BEACH","UPPER BEACH"
PRINT "You find yourself on the ";DESCRIPTION$(ROOM)
CASE "OPEN SEA","BRIG","FOOD LOCKER","CODE ROOM","WOODS","HUT",_
"PASSAGEWAY","SICK BAY","TOOL ROOM"
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
IF TURNNUMBER=8 AND FLAG(11)=0 THEN _
PRINT "A cat strolls by hunting for something."
IF TURNNUMBER=30 AND FLAG(18)=0 THEN _
PRINT "A PARROT squawks, TAKE QUININE ! "
IF TURNNUMBER=60 AND FLAG(2)=0 THEN _
PRINT "The PARROT squawks, change your outfit!'"
IF TURNNUMBER=80 AND FLAG(19)=0 THEN _
PRINT "The PARROT squawks, If A is 1, what is B?'"
IF TURNNUMBER=100 AND FLAG(4)=0 THEN _
PRINT "A PARROT squawks, SHARPEN BRANCH, Matey.'"
IF FLAG(9)=2 AND ROOM = 16 AND FLAG(8)=0 AND FLAG(2)= 0 THEN_
PRINT "The PIRATES notice your CLOTHES and recapture you.":_
FLAG(14)=1:ROOM=20:EXIT SUB
IF FLAG(9)=0 AND ROOM = 16 AND FLAG(2)= 0 THEN _
PRINT "The PIRATES eye you suspiciously - You'd better leave":FLAG(14)=1:_
FLAG(9)=1:EXIT SUB
IF FLAG(9)=1 AND ROOM=16 THEN FLAG(9)=2
IF ROOM=3 AND FLAG(10)=0 THEN ROOM=18:CLS:PRINT:PRINT:PRINT: _
PRINT "You are too weak with malaria to climb the stairs.":_
FLAG(14)=1:DESCRIBEFLAG(3)=0:EXIT SUB
IF ROOM=18 AND FLAG(11)=0 THEN ROOM=20:CLS:PRINT:PRINT:PRINT: _
PRINT "You can't move very well while tied up.":FLAG(14)=1:_
DESCRIBEFLAG(18)=0:EXIT SUB
END SUB
'MODULE 2.1.1 GAME STARTER -- PRINT OUT INTRODUCTORY REMARKS
SUB GAMESTARTER
CLS
PRINT
PRINT " WELCOME TO PIRATE ISLAND"
PRINT
PRINT "Are you ready for this: PIRATES, danger, secret codes,"
PRINT "spear-fishing? Good! I thought you would be!"
PRINT "Give COMMANDS as VERB then OBJECT, such as GO NORTH,"
PRINT "SAVE GAME, RESTORE GAME, READ SIGN, TAKE FISH,"
PRINT "AND REVEAL APPLES."
PRINT "Exceptions to this two-word sentence rule are single-letter"
PRINT "COMMANDS such as N to GO NORTH (not GO N, just N), U to GO UP,"
PRINT "and D to GO DOWN."
PRINT "Don't try to GET OBJECTS ending in an *, e.g., CANNON*,"
PRINT "as they are quite unobtainable. Sometimes the names of"
PRINT "OBJECTS will be scrambled, e.g., APPLES may appear as "
PRINT "PELSPA*. To GET the APPLES, type REVEAL APPLES and then"
PRINT "TYPE GET APPLES. Sometimes the presence of an object "
PRINT "will be indicated by SOMETHING* and you must guess and"
PRINT "REVEAL what it is before you can GET it. For the word "
PRINT "That 'starts with a Q and ends with an E', You may"
PRINT "need to consult a dictionary."
PRINT "If you get stuck, keep trying different things because"
PRINT "after a certain number of turns, a hint will show up."
PRINT "Happy Adventuring! 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
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 20 '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 "PIRESAV.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$="CANNON" THEN PRINT "IT'S LOADED!":EXIT SELECT
IF OBJECT$<> "GAME" THEN PRINT "RESTORE GAME":EXIT SELECT
OPEN "PIRESAV.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" ELSE PRINT
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 MID$(OBJECT$,1,4)="PORT" AND ROOM = 6 THEN DIRECTION = 4
IF MOVEMENTTABLE (ROOM,DIRECTION) = 0 THEN _
PRINT "You can't GO that way" ELSE _
LET ROOM = MOVEMENTTABLE (ROOM,DIRECTION)
CASE "GET","TAKE"
IF OBJECT$="QUININE" AND FLAG(10)=1 THEN _
PRINT "That should be enough.":EXIT SELECT
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$="QUININE" AND FNPRESENT=1 THEN FLAG(10)=1
IF OBJECT$="CLOTHES" THEN _
PRINT "GETting something is not the same as WEARing it"
IF OBJECT$="BRANCH" AND ROOM=11 AND FLAG(19)=0 THEN _
PRINT "PARROT won't let me...wants to be CALLed by name.":_
EXIT SELECT
IF OBJECT$="FISH" THEN THING$="SPEAR":IF FNCARRY =0 THEN _
PRINT "You'll need a SPEAR":THING$="":EXIT SELECT
IF MID$(OBJECT$,1,4)="COAL" THEN THING$="SHOVEL":IF FNCARRY = 0_
THEN PRINT "You'll need something to carry it in.":_
THING$="":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"
THING$=OBJECT$
IF FNCARRY=0 THEN PRINT "You don't have the ";OBJECT$:EXIT SELECT
IF OBJECT$="FISH" AND ROOM=13 AND FLAG(7)=0 THEN _
PRINT "Cure the scurby first.":EXIT SELECT
IF OBJECT$="FISH" AND FLAG(5)=0 THEN PRINT _
"COOK it first":EXIT SELECT
IF OBJECT$="ORANGES" AND ROOM = 13 AND FLAG(7)=0 THEN FLAG(7)=1:__
PRINT "OK":ROOMOBJECT$(13,1)="A still hungry HERMIT*" _
:EXIT SELECT
IF OBJECT$="FISH" AND ROOM=13 AND FLAG(8)=0 THEN_
FLAG(8)=1:ROOMOBJECT$(16,1)="EMPTY":_
PRINT "The grateful HERMIT leaves to fire the CANNON ":_
PRINT "in order to lure the PIRATES to the SHIP.":_
ROOMOBJECT$(13,1)="EMPTY":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 location is full, take it elsewhere."
CASE "FEED"
PRINT "Try: GIVE FISH":EXIT SELECT
CASE "KILL"
PRINT "Who do you think you are, Rambo?":EXIT SELECT
CASE "WEAR","CHANGE"
THING$=OBJECT$
IF OBJECT$="CLOTHES" AND FNCARRY = 1 THEN FLAG(2)=1:_
PRINT "Now you look somewhat like a PIRATE.":EXIT SELECT
IF OBJECT$="CLOTHES" THEN PRINT "GET CLOTHES first":EXIT SELECT
PRINT "Didn't help. Try something different.":EXIT SELECT
CASE "CUT","TRIM","SHARPEN","CARVE"
THING$=OBJECT$
IF FNCARRY = 0 THEN PRINT "You don't have the BRANCH.":EXIT SELECT
THING$="SWORD"
IF FNCARRY= 0 THEN PRINT "You'll need a cutting instrument.":EXIT SELECT
THING$=OBJECT$
IF FNCARRY =1 THEN LET INVENTORY$(ITEMNUMBER)="SPEAR":_
PRINT "You now have a fine SPEAR.":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 a color, I'm a fruit,":_
PRINT "I'm a lovely thing to be;":_
PRINT "Feed me to that HERMIT guy,":_
PRINT "'cause he lacks vitamin C."
IF ROOM=2 THEN _
PRINT "No, No, No, Not open,":_
PRINT "What, oh what, do I wear?;":_
PRINT "I must change my whole look,":_
PRINT "or face the PIRATES' glare."
IF ROOM=4 THEN _
PRINT "Just in from the A1 code service: ":_
PRINT:_
PRINT "20-8-5 16-1-18-18-15-20'19":_
PRINT "14-1-13-5 9-19 2-9-12-12."
IF ROOM=6 THEN _
PRINT "One letter is silent,":_
PRINT "Like the k in knife;":_
PRINT "This truly fine weapon,":_
PRINT "May yet save a life."
IF ROOM=18 THEN _
PRINT "Foot is to shoe as hand is to glove.":_
PRINT "Cut is to knife as dig is to ________.":_
PRINT "Sugar is to horse as cracker is to __________.":_
PRINT "Switch is to light as ________ is to lock."
IF ROOM=19 THEN _
PRINT "What starts with a Q,":_
PRINT "And ends with an E;":_
PRINT "A medicine strong,":_
PRINT "Tastes bitter to me."
IF ROOM=20 THEN _
PRINT "He hides on the ship,":_
PRINT "And he's no human being;":_
PRINT "REVEAL what he is,":_
PRINT "And your ropes he'll be freeing."
PRINT
CASE "REVEAL"
IF OBJECT$="BRANCH" AND ROOM=11 AND FLAG(12)=0 THEN _
PRINT "OK":ROOMOBJECT$(11,1)="BRANCH":FLAG(12)=1:EXIT SELECT
IF OBJECT$="KEY" AND ROOM=15 AND FLAG(21)=0 THEN PRINT "OK":_
ROOMOBJECT$(15,2)="KEY":FLAG(21)=1:EXIT SELECT
IF OBJECT$="RAT*" AND ROOM=20 AND FLAG(11)=0 THEN ROOMOBJECT$(20,1)="RAT*":_
PRINT "The RAT* has gnawed through your ropes!":_
FLAG(11)=1:EXIT SELECT
IF OBJECT$="SHOVEL" AND FLAG(15)=0 AND ROOM=21 THEN PRINT "OK":_
ROOMOBJECT$(21,1)="SHOVEL":FLAG(15)=1:EXIT SELECT
IF OBJECT$="SWORD" AND ROOM=6 AND FLAG(16)=0 THEN PRINT "OK":_
ROOMOBJECT$(6,1)="SWORD":FLAG(16)=1:EXIT SELECT
IF OBJECT$="CLOTHES" AND ROOM=2 AND FLAG(17)=0 THEN PRINT "OK":_
ROOMOBJECT$(2,1)="CLOTHES":FLAG(17)=1:EXIT SELECT
IF OBJECT$="QUININE" AND ROOM=19 AND FLAG(18)=0 THEN PRINT "OK":_
ROOMOBJECT$(19,1)="QUININE":FLAG(18)=1:EXIT SELECT
IF OBJECT$="ORANGES" AND ROOM=1 AND FLAG(20)=0 THEN PRINT "OK":_
ROOMOBJECT$(1,1)="ORANGES":FLAG(20)=1:EXIT SELECT
IF OBJECT$="MOUSE" OR OBJECT$="MICE" THEN _
PRINT "You are thinking too small.":EXIT SELECT
IF LEFT$(OBJECT$,4)="CLOS" THEN _
PRINT "Try a different spelling.":EXIT SELECT
IF OBJECT$="KNIFE" THEN PRINT "Ouch! Better not.":EXIT SELECT
PRINT "Nothing happened. Try something else.":EXIT SELECT
CASE "COOK","HEAT","WARM","ROAST"
THING$=OBJECT$
IF FNCARRY=0 THEN PRINT "You don't have the fish":EXIT SELECT
THING$="COALS"
IF FNCARRY=0 THEN PRINT "You'll need to GET the COALS":EXIT SELECT
LET FLAG(5)=1:PRINT "OK":EXIT SELECT
CASE "UNLOCK","OPEN"
SELECT CASE OBJECT$
CASE "BOX","GUNBOX"
PRINT "You'll need a crowbar to OPEN it":EXIT SELECT
CASE "LOCK","GATE","DOOR"
THING$="KEY"
IF FNCARRY=0 THEN PRINT "You'll need the KEY"_
:EXIT SELECT
IF FLAG (8)=0 THEN PRINT "The PIRATES recapture you as you";_
:PRINT "try to UNLOCK the GATE":ROOM=20:_
EXIT SELECT
FLAG(1)=1:PRINT "OK":EXIT SELECT
END SELECT
CASE "CLIMB"
IF LEFT$(OBJECT$,4)="TREE" THEN PRINT "Too difficult.":EXIT SELECT
PRINT "Try: GO UP.":EXIT SELECT
CASE "CALL","NAME","SAY"
PRINT "Just type the name you were going to CALL.":EXIT SELECT
CASE "FISH","CATCH"
PRINT "Try: GET FISH":EXIT SELECT
CASE "EAT","CONSUME"
PRINT "Save the food for the hermit.":EXIT SELECT
CASE "BILL"
IF ROOM=11 THEN FLAG(19)=1:_
PRINT "The PARROT flies over and affectionately bites your nose.":_
EXIT SELECT
PRINT "Not here":EXIT SELECT
CASE "POLLY"
PRINT "The male PARROT is quite offended.":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
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
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
IF FLAG(1)=1 THEN PRINT "One of the prisoners has a crowbar and GETs the guns."
IF FLAG(1)=1 THEN PRINT "Fully armed, the goodguys capture the PIRATES. (Thanks to you!)
IF FLAG(1)=1 THEN PRINT "Amidst cheers and adulation, you know you've won the PIRATE adventure!"
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(9)=FLAG(1):LET DTA(34)=DTA(34)+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 "PIRTDATA.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),INT(1000*RND(0))
CLOSE #2
PRINT "This game is over. Type PIRATE to play again."
END SUB