| 'MODULE 0 MAIN ******CURSED CASTLE******9-2-90 | |
| 'CHANGED GAMEDTA.BAS TO CURSAV.BAS ON 1-24-91 | |
| 'CHANGED TURNNUMBER TO GYNTURN FOR GIANT TURNS 18FEB92 | |
| 'CHANGED TIMER ON 2-3-94 | |
| 'CHANGED SAVE GAME TIME$ DATE$ 7-30-95 | |
| 'snips added 12-18-95 i/5 | |
| 'REPORT ADDED 3-5-96 CURSDATA.TXT 10-24-96 | |
| CLS:DIM FLAG(30),OBJ$(30),OBJ2$(30) | |
| 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 16,DUNGEON,STAIRCASE,ARMORY,STAIRCASE,WALK-IN FIREPLACE | |
| DATA BANQUET HALL,THRONE ROOM,COURTYARD,GATEHOUSE,BLACKSMITH'S | |
| DATA STABLES,STAIRCASE,DRAWING ROOM,BEDCHAMBER,BEDCHAMBER | |
| DATA TOWER | |
| FOR I=1 TO NUMBERROOMS | |
| LET DESCRIBEFLAG(I)=1 | |
| LET ROOMDESCRIBE$(I)="EMPTY" | |
| LET ROOMDES2$(I)="EMPTY" | |
| NEXT I | |
| END SUB | |
| 'MODULE 1.2 ROOM OBJECT INFORMATION | |
| SUB ROOMOBJECTS | |
| SHARED ROOMOBJECT$(),NUMBERROOMS | |
| DIM ROOMOBJECT$(NUMBERROOMS,15) | |
| FOR I=1 TO NUMBERROOMS | |
| FOR J=1 TO 15 | |
| LET ROOMOBJECT$(I,J)="EMPTY" | |
| NEXT J | |
| NEXT I | |
| END SUB | |
| 'MODULE 1.3 MOVEMENTTABLE | |
| SUB MOVEMENTTABLE | |
| SHARED MOVEMENTTABLE(),NUMBERROOMS | |
| DIM MOVEMENTTABLE(NUMBERROOMS,6) | |
| FOR I=1 TO NUMBERROOMS | |
| FOR J = 1 TO 6 | |
| READ MOVEMENTTABLE(I,J) | |
| NEXT J | |
| NEXT I | |
| DATA 0,0,2,0,0,0 | |
| DATA 0,3,0,1,4,0 | |
| DATA 2,0,0,0,0,0 | |
| DATA 0,6,0,0,12,2 | |
| DATA 0,0,6,0,0,0 | |
| DATA 4,7,8,5,0,0 | |
| DATA 6,0,0,0,0,0 | |
| DATA 11,10,9,6,0,0 | |
| DATA 0,0,0,8,0,0 | |
| DATA 8,0,0,0,0,0 | |
| DATA 0,8,0,0,0,0 | |
| DATA 14,15,0,13,16,4 | |
| DATA 0,0,12,0,0,0 | |
| DATA 0,12,0,0,0,0 | |
| DATA 12,0,0,0,0,0 | |
| DATA 0,0,0,0,0,12 | |
| END SUB | |
| 'MODULE 1.4 INVENTORY | |
| SUB INVENTORY | |
| SHARED INVENTORY$() | |
| DIM INVENTORY$(5) | |
| FOR I=1 TO 5 | |
| LET INVENTORY$(I)="EMPTY" | |
| NEXT I | |
| END SUB | |
| 'MODULE 1.5 OTHERS | |
| SUB OTHERS | |
| SHARED GAMESTATE$,ROOM,TURNNUMBER,ROOMOBJECT$(),THING$,INVENTORY$(),_ | |
| FLAG(),OBJ$(),OBJ2$(),DESCRIBEFLAG(),ROOMDESCRIBE$(),ROOMDES2$() | |
| LET TURNNUMBER =0 | |
| LET THING$="" | |
| FOR I=1 TO 30:LET FLAG(I)=0:NEXT I 'SET FLAGS TO 0 | |
| 'FLAG # MEANING OF 0 FLAG# MEANING OF 0 | |
| ' 1 GAME NOT OVER 2 FIRE NOT MADE | |
| 'FOR 1, 1 MEANS GAME WON -1 GAME LOST 2 MEANS GAME QUIT | |
| ' 3 OATMEAL NOT MADE 4 THRONE NOT BROKEN | |
| ' 5 TYPE CARRYOVER FLAG 6 WATER NOT IN BUCKET | |
| ' 7 PUMP NOT OILED 8 GIANT NOT FLED | |
| ' 9 DUNGEON NOT DESCRIBED 10 SWORD PICKED UP | |
| '11 GOLD! NOT DUG 12 STABLES NOT DESCRIBED | |
| '13 COURTYARD NOT DESCRIBED 15 THRONE ROOM NOT DESCRIBED | |
| '14 NEED TO EXIT TURN (GIANT OR DOG IN STREET) | |
| FOR I=1 TO 20 | |
| READ ROOM,J,ROOMOBJECT$(ROOM,J) | |
| NEXT I | |
| DATA 1,1,EMPTYGOLD!,3,1,EMPTYSWORD,5,1,KETTLE*,5,2,EMPTYFIRE* | |
| DATA 7,2,THRONE*,6,1,EMPTYGIANT*,7,1,SIGN*,8,1,PUMP* | |
| DATA 9,1,EMPTYSHOVEL,9,2,EMPTYBUCKET,10,1,FLINT-STEEL | |
| DATA 11,1,STRAW,11,2,EMPTYOATS,13,1,EMPTYHAIR-OIL | |
| DATA 13,2,EMPTYPEARLS!,13,3,SIGN*,14,1,EMPTYRUBIES! | |
| DATA 15,1,EMPTYEMERALDS!,16,1,EMPTYDIAMONDS! | |
| DATA 16,2,AXE | |
| 'THE STARTING ROOM IS THE BANQUET HALL - 6 | |
| ROOM=6 | |
| FOR I=1 TO 20 'READ IN WORD!* CONVERSION | |
| READ OBJ$(I),OBJ2$(I) | |
| NEXT I | |
| DATA SIGN,SIGN*,PEARL,PEARLS!,PEARLS,PEARLS!,OIL,HAIR-OIL | |
| DATA HAIR,HAIR-OIL,GOLD,GOLD!,KETTLE,KETTLE*,FIRE,FIRE* | |
| DATA GIANT,GIANT*,THRONE,THRONE*,PUMP,PUMP*,FLINT,FLINT-STEEL | |
| DATA STEEL,FLINT-STEEL,RUBY,RUBIES!,RUBIES,RUBIES! | |
| DATA DIAMOND,DIAMONDS!,DIAMONDS,DIAMONDS! | |
| DATA EMERALD,EMERALDS!,EMERALDS,EMERALDS! | |
| DATA PUMP,PUMP* | |
| END SUB | |
| 'MODULE 2 TURN | |
| SUB TURN | |
| SHARED FLAG(),TURNNUMBER,GYNTURN | |
| DO UNTIL FLAG(1) <> 0 | |
| FLAG(14)=0 | |
| TURNNUMBER = TURNNUMBER + 1 | |
| GYNTURN=GYNTURN+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 "CURSED (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$(),GYNTURN | |
| IF TURNNUMBER=1 THEN CALL GAMESTARTER 'MODULE 2.1.1 | |
| IF DESCRIBEFLAG(ROOM)=1 THEN PRINT "You are in the ";DESCRIPTION$(ROOM) | |
| IF DESCRIBEFLAG(ROOM)=0 THEN__ | |
| PRINT ROOMDESCRIBE$(ROOM):PRINT ROOMDES2$(ROOM):DESCRIBEFLAG(ROOM)=1 | |
| 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 | |
| 'IN DUNGEON THE FIRST TIME | |
| IF ROOM=1 AND FLAG(9)=0 THEN FLAG(9)=1:_ | |
| PRINT "The dungeon has the only dirt floor in the castle." | |
| 'IN THRONE ROOM FOR THE FIRST TIME | |
| IF ROOM=7 AND FLAG(15)=0 THEN FLAG(15)=1:_ | |
| PRINT "The throne is sturdy and made out of wood." | |
| 'IN STABLES FOR THE FIRST TIME | |
| IF ROOM=11 AND FLAG(12)=0 THEN FLAG(12)=1:_ | |
| PRINT "The straw here is as dry as tinder." | |
| 'IN COURTYARD FOR THE FIRST TIME | |
| IF ROOM=8 AND FLAG(13)=0 THEN FLAG(13)=1:_ | |
| PRINT "The rusty water pump needs to be oiled." | |
| ' | |
| ' TEN TURNS UP AND GIANT RETURNS YOU TO BANQUET HALL | |
| IF GYNTURN=10 AND FLAG(3)=1 AND FLAG(8)=0 AND FLAG(10)=0 THEN _ | |
| PRINT "The GIANT drags you back to the warm hall; says he hates cold food.":_ | |
| GYNTURN=1:ROOM=6:FLAG(14)=1:EXIT SUB | |
| 'GIANT DOESN'T GET YOU IF YOU HAVE THE SWORD- RESET TURNNUMBER TO 1 | |
| IF GYNTURN=10 AND FLAG(10)=1 THEN GYNTURN=1 | |
| 'GIANT FLEES AT SIGHT OF SWORD | |
| IF ROOM=6 AND FLAG(10)=1 AND FLAG(8)=0 THEN FLAG(8)=1:_ | |
| PRINT "The cowardly GIANT flees at the sight of the sword!":_ | |
| ROOMOBJECT$(6,1)="EMPTY":FLAG(14)=1:ROOMOBJECT$(9,1)="SHOVEL":_ | |
| EXIT SUB | |
| END SUB | |
| 'MODULE 2.1.1 GAME STARTER -- PRINT OUT INTRODUCTORY REMARKS | |
| SUB GAMESTARTER | |
| CLS | |
| PRINT " WELCOME TO CURSED CASTLE!" | |
| PRINT " Come along on a creepy adventure to far-off places." | |
| PRINT" Battle GIANTS! Find treasures! MAKE OATMEAL!" | |
| PRINT " While on a vacation to Scotland, you fall asleep " | |
| PRINT "reading about the human-eating GIANT that supposedly used" | |
| PRINT "to terrorize old castle towns." | |
| PRINT " In your dream you find yourself in the banquet hall " | |
| PRINT "of an abandoned castle. You are very cold and hungry." | |
| PRINT "If you do not build a fire soon, you will die!" | |
| PRINT " Give commands as VERB then OBJECT, such as GO NORTH," | |
| PRINT "READ SIGN, BUILD FIRE, OIL PUMP, DIG DIRT, CHOP" | |
| PRINT "THRONE, and so forth." | |
| PRINT " Exceptions to this two-word sentence rule are single-" | |
| PRINT "letter commands such as N to GO NORTH (not GO N, just N)," | |
| PRINT "U to GO UP, and D to GO DOWN." | |
| PRINT " P.S. Don't try to GET objects ending in an *, e.g., KETTLE*," | |
| PRINT "as they are quite unobtainable. Note also that things appear" | |
| PRINT "and disappear suddenly in dreams. Keep you wits about you!" | |
| PRINT "If you're through taking notes, press the Enter key 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(),_ | |
| GYNTURN | |
| IF FLAG(1)<>0 THEN EXIT SUB | |
| IF FLAG(14)=1 THEN EXIT SUB | |
| SELECT CASE VERB$ | |
| CASE "QUIT","Q","AWAKEN","WAKE" | |
| 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 "CURSAV.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 "CURSAV.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","PLUCK","EXTRACT","PULL" | |
| IF ROOM=7 AND RIGHT$(OBJECT$,1)="!" THEN _ | |
| PRINT "Best leave the treasures here, love":EXIT SELECT | |
| THING$="BUCKET" | |
| IF FNCARRY=0 AND OBJECT$="WATER" THEN _ | |
| PRINT "GET the BUCKET":EXIT SELECT | |
| IF OBJECT$="WATER" AND FLAG(7)=0 THEN _ | |
| PRINT "OIL the PUMP first. It's rusty.":EXIT SELECT | |
| IF OBJECT$="WATER" AND ROOM <> 8 THEN _ | |
| PRINT "GO to the courtyard":EXIT SELECT | |
| IF OBJECT$="WATER" THEN FLAG(6)=1:_ | |
| PRINT "The BUCKET is full of nice WATER.":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$="SWORD" THEN FLAG(10)=1 | |
| FOR I=1 TO 5 | |
| IF INVENTORY$(I)="EMPTY" THEN INVENTORY$(I)=OBJECT$:_ | |
| PRINT "Got it.":ROOMOBJECT$(ROOM,ITEMNUMBER)="EMPTY":_ | |
| EXIT SELECT | |
| NEXT I | |
| IF OBJECT$="SWORD" THEN FLAG(10)=0 | |
| PRINT "You're carrying too much. DROP something.":EXIT SELECT | |
| CASE "PUT","DROP","GIVE" | |
| THING$=OBJECT$ | |
| IF FNCARRY=0 THEN PRINT "You don't have the ";OBJECT$:EXIT SELECT | |
| IF OBJECT$="SWORD" THEN PRINT "You'll need the SWORD.":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 "READ" | |
| IF OBJECT$="SIGN*" AND ROOM=7 THEN _ | |
| PRINT "It says - DROP TREASURES! such as GOLD!":_ | |
| PRINT "here and type SCORE":EXIT SELECT | |
| IF OBJECT$="SIGN*"AND ROOM=13 THEN _ | |
| PRINT "Recipe for OATMEAL -> DROP OATS and water BUCKET":_ | |
| PRINT "at kettle and MAKE OATMEAL":EXIT SELECT | |
| PRINT "Try READ SIGN* ":EXIT SELECT | |
| CASE "OIL","LUBRICATE","GREASE","HAIR-OIL" | |
| THING$="HAIR-OIL" | |
| IF FNCARRY=0 THEN PRINT "You don't have the HAIR-OIL":EXIT SELECT | |
| IF ROOM=8 THEN PRINT "Now you can GET the WATER.":_ | |
| FLAG(7)=1:EXIT SELECT | |
| PRINT "You are in the wrong place":EXIT SELECT | |
| CASE "DRINK" | |
| PRINT "You are not thirsty":EXIT SELECT | |
| CASE "EAT" | |
| IF FLAG(3)=0 THEN PRINT "MAKE OATMEAL first":EXIT SELECT | |
| PRINT "You are in the wrong place":EXIT SELECT | |
| CASE "BREAK","CHOP","CUT" | |
| IF FLAG(4)=1 THEN _ | |
| PRINT "The only thing worth breaking was the THRONE":EXIT SELECT | |
| IF ROOM<>7 THEN PRINT "GO to the throne room":EXIT SELECT | |
| THING$="AXE" | |
| IF FNCARRY=0 THEN PRINT "GET the AXE":EXIT SELECT | |
| PRINT "Whew! Now you have some WOOD for a fire":_ | |
| ROOMOBJECT$(7,2)="WOOD":FLAG(4)=1:_ | |
| INVENTORY$(ITEMNUMBER)="EMPTY":EXIT SELECT | |
| CASE "STRIKE" | |
| PRINT "Try - MAKE FIRE ":EXIT SELECT | |
| CASE "FILL" | |
| PRINT "Try - GET WATER":EXIT SELECT | |
| CASE "PUMP" | |
| PRINT "Try - GET WATER ":EXIT SELECT | |
| CASE "SCORE" | |
| IF ROOM<>7 THEN PRINT "Return to the THRONE ROOM":EXIT SELECT | |
| SCORE=0 | |
| FOR I=1 TO 10 | |
| LET STUFF$=ROOMOBJECT$(7,I) | |
| IF RIGHT$(STUFF$,1)="!" THEN SCORE=SCORE+20 | |
| NEXT I | |
| PRINT "Your SCORE is ";SCORE | |
| IF SCORE=100 THEN PRINT "YOU WIN!!!!! FANTASTIC JOB!!!":_ | |
| FLAG(1)=1:EXIT SELECT | |
| PRINT (100-SCORE);" points to go!":EXIT SELECT | |
| CASE "DIG","SHOVEL" | |
| THING$="SHOVEL" | |
| IF FNCARRY=0 THEN PRINT "GET the SHOVEL":EXIT SELECT | |
| IF ROOM<>1 THEN PRINT "The floor is solid rock here":EXIT SELECT | |
| IF FLAG(11)=1 THEN PRINT "Nothing else to DIG":EXIT SELECT | |
| PRINT "YOU HIT SOMETHING!":ROOMOBJECT$(1,1)="GOLD!":_ | |
| FLAG(11)=1:EXIT SELECT | |
| CASE "KILL","MURDER","SLAY" | |
| PRINT "GET a suitable weapon":EXIT SELECT | |
| CASE "MAKE","BUILD","PREPARE","COOK" | |
| IF ROOM<>5 THEN PRINT "GO to the FIREPLACE":EXIT SELECT | |
| 'MAKE FIRE OPTIONS | |
| IF OBJECT$<>"FIRE*" THEN GOTO JUMPOVER | |
| IF FLAG(2)=1 THEN PRINT "There is a fire!":EXIT SELECT | |
| OBJECT$="FLINT-STEEL":IF FNPRESENT=0 THEN _ | |
| PRINT "DROP FLINT-STEEL here":EXIT SELECT | |
| OBJECT$="STRAW":IF FNPRESENT=0 THEN _ | |
| PRINT "DROP STRAW here":EXIT SELECT | |
| OBJECT$="WOOD":IF FNPRESENT=0 THEN _ | |
| PRINT "DROP WOOD here":EXIT SELECT | |
| FLAG(2)=1:PRINT "You now have a lovely, warm fire":_ | |
| ROOMOBJECT$(5,2)="FIRE*":ROOMOBJECT$(9,2)="BUCKET":_ | |
| ROOMOBJECT$(11,2)="OATS":ROOMOBJECT$(13,1)="HAIR-OIL":_ | |
| FLAG(5)=1 | |
| OBJECT$="FLINT-STEEL":IF FLAG(5)=1 AND FNPRESENT=1 THEN _ | |
| ROOMOBJECT$(5,ITEMNUMBER)="EMPTY" | |
| OBJECT$="STRAW":IF FLAG(5)=1 AND FNPRESENT=1 THEN _ | |
| ROOMOBJECT$(5,ITEMNUMBER)="EMPTY" | |
| OBJECT$="WOOD":IF FLAG(5)=1 AND FNPRESENT=1 THEN _ | |
| ROOMOBJECT$(5,ITEMNUMBER)="EMPTY" | |
| IF FLAG(5)=1 THEN FLAG(5)=0:EXIT SELECT | |
| 'JUMPOVER TO MAKE OATMEAL OPTIONS | |
| JUMPOVER: | |
| IF LEFT$(OBJECT$,3)<>"OAT" AND OBJECT$<>"FOOD" THEN _ | |
| PRINT "Try - BUILD FIRE or MAKE OATMEAL":EXIT SELECT | |
| IF FLAG(2)=0 THEN PRINT "BUILD FIRE first":EXIT SELECT | |
| IF FLAG(3)=1 THEN PRINT "Once is enough!":EXIT SELECT | |
| IF FLAG(6)=0 THEN PRINT "GET WATER in the bucket first":_ | |
| EXIT SELECT | |
| OBJECT$="BUCKET":IF FNPRESENT=0 THEN _ | |
| PRINT "DROP BUCKET here first":EXIT SELECT | |
| OBJECT$="OATS":IF FNPRESENT=0 THEN _ | |
| PRINT "DROP OATS here first":EXIT SELECT | |
| FLAG(3)=1:PRINT "The oatmeal was filling. Just then, a GIANT arrives,":_ | |
| PRINT "eats the remaining OATMEAL, pokes you gently in the stomach":_ | |
| PRINT "and wanders into the HALL.":ROOMOBJECT$(6,1)="GIANT*":_ | |
| GYNTURN=1:FLAG(5)=1 | |
| IF FLAG(5)=1 THEN ROOMOBJECT$_ | |
| (13,2)="PEARLS!":ROOMOBJECT$(16,1)="DIAMONDS!":_ | |
| ROOMOBJECT$(14,1)="RUBIES!":ROOMOBJECT$(15,1)="EMERALDS!":_ | |
| ROOMOBJECT$(3,1)="SWORD" | |
| IF FLAG(5)=1 THEN FLAG(5)=0:EXIT SELECT | |
| CASE "USE" | |
| PRINT "To do what? Try something 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.4 UPDATE DATA | |
| SUB UPDATE | |
| END SUB | |
| 'MODULE 3 CLOSING | |
| SUB CLOSING | |
| SHARED FLAG(),TURNNUMBER,ANSWER$(),STRT | |
| IF FLAG(1)=1 THEN PRINT " ***** HOORAY FOR YOU!! YOU'VE WON THE GAME!! ****" | |
| 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(8)=FLAG(1):LET DTA(33)=DTA(33)+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 "CURSDATA.TXT" FOR APPEND AS #2 | |
| PRINT #2,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 CURSED to play again." | |
| END SUB | |
| 'END OF PROGRAM | |
Xet Storage Details
- Size:
- 23.7 kB
- Xet hash:
- 032a9f68d2fee9ea89987bb039d6bab5c67346793b6087e86c8469ce0bf0c3c9
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.