10 REM HAUNTED HOUSE ADVENTURE 20 REM *********************** 30 REM SPECTRUM BASIC VERSION 40 REM [OPTIONAL SAVE/LOAD/QUIT ADDED] 50 REM ******************************* 60 LET F$=" " 70 LET V=28:LET W=36:LET G=18 80 GOSUB 1600 90 CLS:PRINT "HAUNTED HOUSE" 100 PRINT "-------------" 110 PRINT "YOUR LOCATION" 120 PRINT D$(RM+1) 130 PRINT "EXITS:" 140 FOR I=1 TO LEN(R$(RM+1)) 150 PRINT R$(RM+1)(I TO I);","; 160 NEXT I 170 PRINT 180 FOR I=1 TO G 190 IF L(I)=RM AND F(I)=0 THEN PRINT "YOU CAN SEE ";O$(I);" HERE" 200 NEXT I 210 PRINT "=========================" 220 PRINT M$:LET M$="WHAT" 230 PRINT "WHAT WILL YOU DO NOW":INPUT Q$ 240 LET X$="":LET W$="":LET VB=0:LET OB=0 245 IF LEN(Q$)<2 THEN GOTO 290 250 FOR I=1 TO LEN(Q$)-1 260 IF Q$(I TO I)=" " AND X$="" THEN LET X$=Q$( TO I-1) 270 IF Q$(I+1 TO I+1)<>" " AND X$<>"" THEN LET W$=Q$(I+1 TO):LET I=LEN(Q$)-1 280 NEXT I 290 IF W$="" THEN LET X$=Q$ 295 IF LEN(X$) > LEN(V$(1)) OR X$="" THEN GOTO 325 296 LET X$=X$+F$( TO (LEN(V$(1))-LEN(X$))) 300 FOR I=1 TO V 310 IF X$=V$(I) THEN LET VB=I 320 NEXT I 325 IF W$="" OR LEN(W$)>LEN(O$(1)) THEN GOTO 360 326 LET W$=W$+F$( TO (LEN(O$(1))-LEN(W$))) 330 FOR I=1 TO W 340 IF W$=O$(I) THEN LET OB=I 350 NEXT I 360 IF W$>"" AND OB=0 THEN LET M$="THAT'S SILLY" 370 IF VB=0 THEN LET VB=V+1 380 IF W$="" THEN LET M$="I NEED TWO WORDS" 390 IF VB>V AND OB>0 THEN LET M$="YOU CAN'T '"+Q$+"'" 400 IF VB>V AND OB=0 THEN LET M$="YOU DON'T MAKE SENSE" 405 IF OB=0 THEN GOTO 420 410 IF VB0 AND C(OB)=0 THEN LET M$="YOU DON'T HAVE '"+W$ 420 IF F(26)=1 AND RM=13 AND INT(RND*3)+1 <> 3 AND VB <> 21 THEN LET M$="BATS ATTACKING!":GOTO 90 430 IF RM=44 AND INT (RND*2)=1 AND F(24)<>1 THEN LET F(27)=1 440 IF F(20)=1 THEN LET LL=LL-1 450 IF LL<1 THEN LET F(20)=0 460 GOSUB 500*(VB=1)+570*(VB=2)+640*(VB>2 AND VB<10)+980*(VB=10 OR VB=11)+1030*(VB=12)+1070*(VB=13)+1140*(VB=14)+1180*(VB=15)+1220*(VB=16)+1250*(VB=17)+1300*(VB=18)+1340*(VB=19)+1380*(VB=20)+1400*(VB=21)+1430*(VB=22)+1460*(VB=23)+1490*(VB=24)+1510*(VB=25)+3000*(VB=26)+4000*(VB=27)+5000*(VB=28)+1590*(VB=29) 470 IF LL=10 THEN LET M$="YOUR CANDLE IS WANING!" 480 IF LL=1 THEN LET M$="YOUR CANDLE IS OUT!" 490 GOTO 90 500 PRINT "WORDS I KNOW:" 510 FOR I=1 TO V 520 PRINT V$(i);","; 530 NEXT I 540 LET M$="":PRINT 550 GOSUB 1580 560 RETURN 570 PRINT "YOU ARE CARRYING:" 580 FOR I=1 TO G 590 IF C(I)=1 THEN PRINT O$(I);","; 600 NEXT I 610 LET M$="":PRINT 620 GOSUB 1580 630 RETURN 640 LET D=0 650 IF OB=0 THEN LET D=VB-3 660 IF OB=19 THEN LET D=1 670 IF OB=20 THEN LET D=2 680 IF OB=21 THEN LET D=3 690 IF OB=22 THEN LET D=4 700 IF OB=23 THEN LET D=5 710 IF OB=24 THEN LET D=6 720 IF RM=20 AND D=5 THEN LET D=1 730 IF RM=20 AND D=6 THEN LET D=3 740 IF RM=22 AND D=6 THEN LET D=2 750 IF RM=22 AND D=5 THEN LET D=3 760 IF RM=36 AND D=5 THEN LET D=1 770 IF RM=36 AND D=6 THEN LET D=2 780 IF F(14)=1 THEN LET M$="CRASH! YOU FELL OUT OF THE TREE!":LET F(14)=0:RETURN 790 IF F(27)=1 AND RM=52 THEN LET M$="GHOSTS WILL NOT LET YOU MOVE":RETURN 800 IF RM=45 AND C(1)=1 AND F(34)=0 THEN LET M$="A MAGICAL BARRIER TO THE WEST":RETURN 810 IF (RM=26 AND F(20)=0) AND (D=1 OR D=4) THEN LET M$="YOU NEED A LIGHT":RETURN 820 IF RM=54 AND C(15)<>1 THEN LET M$="YOU'RE STUCK!":RETURN 830 IF C(15)=1 AND NOT (RM=53 OR RM=54 OR RM=55 OR RM=47) THEN LET M$="YOU CAN'T CARRY A BOAT!":RETURN 840 IF (RM>26 AND RM<30) AND F(20)=0 THEN LET M$="TOO DARK TO MOVE":RETURN 850 LET F(35)=0:LET RL=LEN(R$(RM+1)) 860 FOR I=1 TO RL 870 LET U$=R$(RM+1)(I TO I) 880 IF (U$="N" AND D=1 AND F(35)=0) THEN LET RM=RM-8:LET F(35)=1 890 IF (U$="S" AND D=2 AND F(35)=0) THEN LET RM=RM+8:LET F(35)=1 900 IF (U$="W" AND D=3 AND F(35)=0) THEN LET RM=RM-1:LET F(35)=1 910 IF (U$="E" AND D=4 AND F(35)=0) THEN LET RM=RM+1:LET F(35)=1 920 NEXT I 930 LET M$="OK" 940 IF F(35)=0 THEN LET M$="CAN'T GO THAT WAY!" 950 IF D<1 THEN LET M$="GO WHERE?" 960 IF RM=41 AND F(23)=1 THEN LET R$(50)="SW":LET M$="THE DOOR SLAMS SHUT!":LET F(23)=0 970 RETURN 980 IF OB>G OR OB=0 THEN LET M$="I CAN'T GET "+W$:RETURN 985 IF L(OB)<>RM THEN LET M$="IT ISN'T HERE" 990 IF F(OB)<>0 THEN LET M$="WHAT "+W$+"?" 1000 IF C(OB)=1 THEN LET M$="YOU ALREADY HAVE IT" 1010 IF OB>0 AND L(OB)=RM AND F(OB)=0 THEN LET C(OB)=1:LET L(OB)=65:LET M$="YOU HAVE THE "+W$ 1020 RETURN 1030 IF RM=43 AND (OB=28 OR OB=29) THEN LET F(17)=0:LET M$="DRAWER OPEN" 1040 IF RM=28 AND OB=25 THEN LET M$="IT'S LOCKED" 1050 IF RM=38 AND OB=32 THEN LET M$="THAT'S CREEPY!":LET F(2)=0 1060 RETURN 1070 IF OB=30 THEN LET F(18)=0:LET M$="SOMETHING HERE!" 1080 IF OB=31 THEN LET M$="THAT'S DISGUSTING!" 1090 IF (OB=28 OR OB=29) THEN LET M$="THERE IS A DRAWER" 1100 IF OB=33 OR OB=5 THEN GOSUB 1140 1110 IF RM=43 AND OB=35 THEN LET M$="THERE IS SOMETHING BEYOND.." 1120 IF OB=32 THEN GOSUB 1030 1130 RETURN 1140 IF RM=42 AND OB=33 THEN LET M$="THEY ARE DEMONIC WORKS" 1150 IF (OB=3 OR OB=36) AND C(3)=1 AND F(34)=0 THEN LET M$="USE THIS WORD WITH CARE 'XZANFAR'" 1160 IF C(5)=1 AND OB=5 THEN LET M$="THE SCRIPT IS IN AN ALIEN TONGUE" 1170 RETURN 1180 LET M$="OK '"+W$+"'" 1190 IF C(3)=1 AND OB=34 THEN LET M$="*MAGIC OCCURS*":IF RM<>45 THEN RM=INT(RND*64) 1200 IF C(3)=1 AND OB=34 AND RM=45 THEN LET F(34)=1 1210 RETURN 1220 IF C(12)=1 THEN LET M$="YOU MADE A HOLE" 1230 IF C(12)=1 AND RM=30 THEN LET M$="DUG THE BARS OUT":LET D$(RM+1)="HOLE IN WALL":LET R$(RM+1)="NSE" 1240 RETURN 1250 IF C(14)<>1 AND RM=7 THEN LET M$="THIS IS NO TIME TO PLAY GAMES" 1260 IF OB=14 AND C(14)=1 THEN LET M$="YOU SWUNG IT" 1270 IF OB=13 AND C(13)=1 THEN LET M$="WHOOSH!" 1280 IF OB=13 AND C(13)=1 AND RM=43 THEN LET R$(RM+1)="WN":LET D$(RM+1)="STUDY WITH SECRET ROOM":LET M$="YOU BROKE THE THIN WALL" 1290 RETURN 1300 IF OB=14 AND C(14)=1 THEN LET M$="IT ISN'T ATTACHED TO ANYTHING!" 1310 IF OB=14 AND C(14)<>1 AND RM=7 AND F(14)=0 THEN LET M$="YOU SEE THICK FOREST AND CLIFF SOUTH":LET F(14)=1:RETURN 1320 IF OB=14 AND C(14)<>1 AND RM=7 AND F(14)=1 THEN LET M$="GOING DOWN!":LET F(14)=0 1330 RETURN 1340 IF OB=17 AND C(17)=1 AND C(8)=0 THEN LET M$="IT WILL BURN YOUR HANDS" 1350 IF OB=17 AND C(17)=1 AND C(9)=0 THEN LET M$="NOTHING TO LIGHT IT WITH" 1360 IF OB=17 AND C(17)=1 AND C(9)=1 AND C(8)=1 THEN LET M$="IT CASTS A FLICKERING LIGHT":LET F(20)=1 1370 RETURN 1380 IF F(20)=1 THEN LET F(20)=0:LET M$="EXTINGUISHED" 1390 RETURN 1400 IF OB=26 AND C(16)=1 THEN LET M$="HISSSS" 1410 IF OB=26 AND C(16)=1 AND F(26)=1 THEN LET F(26)=0:LET M$="PFFT! GOT THEM" 1420 RETURN 1430 IF OB=10 AND C(10)=1 AND C(11)=1 THEN LET M$="SWITCHED ON":LET F(24)=1 1440 IF F(27)=1 AND F(24)=1 THEN LET M$="WHIZZ- VACUUMED THE GHOSTS UP!":LET F(27)=0 1450 RETURN 1460 IF RM=43 AND (OB=27 OR OB=28) THEN GOSUB 1030 1470 IF RM=28 AND OB=25 AND F(25)=0 AND C(18)=1 THEN LET F(25)=1:LET R$(RM+1)="SEW":LET D$(RM+1)="HUGE OPEN DOOR":LET M$="THE KEY TURNS!" 1480 RETURN 1490 IF C(OB)=1 THEN LET C(OB)=0:LET L(OB)=RM:LET M$="DONE" 1500 RETURN 1510 LET S=0 1520 FOR I=1 TO G 1530 IF C(I)=1 THEN LET S=S+1 1540 NEXT I 1550 IF S=17 AND C(15)<>1 AND RM<>57 THEN PRINT "YOU HAVE EVERYTHING":PRINT "RETURN TO THE GATE FOR FINAL SCORE" 1560 IF S=17 AND RM=57 THEN PRINT "DOUBLE SCORE FOR REACHING HERE!":LET S=S*2 1570 PRINT "YOUR SCORE=";S:IF S>18 THEN PRINT "WELL DONE! YOU FINISHED THE GAME":STOP 1580 INPUT "PRESS RETURN TO CONTINUE";Q$ 1590 RETURN 1600 DIM R$(64,4):DIM D$(64,31):DIM O$(W,13):DIM V$(V,9) 1610 DIM C(W):DIM L(G):DIM F(W) 1620 DATA 46,38,35,50,13,18,28,42,10,25,26,4,2,7,47,60,43,32 1630 FOR I=1 TO G 1640 READ L(I) 1650 NEXT I 1660 DATA "HELP","CARRYING?","GO","N","S","W","E","U","D","GET","TAKE","OPEN","EXAMINE","READ","SAY" 1665 DATA "DIG","SWING","CLIMB","LIGHT","UNLIGHT","SPRAY","USE","UNLOCK","LEAVE","SCORE" 1670 DATA "SAVE","LOAD","QUIT" 1680 FOR I=1 TO V 1690 READ V$(I) 1700 NEXT I 1710 DATA "SE","WE","WE","SWE","WE","WE","SWE","SW" 1720 DATA "NS","SE","WE","NW","SE","W","NE","NSW" 1730 DATA "NS","NS","SE","WE","NWUD","SE","WSUD","NS" 1740 DATA "N","NS","NSE","WE","WE","NSW","NS","NS" 1750 DATA "S","NSE","NSW","S","NSUD","N","N","NS" 1760 DATA "NE","NW","NE","W","NSE","WE","W","NS" 1770 DATA "SE","NSW","E","WE","NW","S","SW","NW" 1780 DATA "NE","NWE","WE","WE","WE","NWE","NWE","W" 1790 FOR I=1 TO 64 1800 READ R$(I) 1810 NEXT I 1820 DATA "DARK CORNER","OVERGROWN GARDEN","BY LARGE WOODPILE","YARD BY RUBBISH" 1825 DATA "WEEDPATCH","FOREST","THICK FOREST","BLASTED TREE" 1840 DATA "CORNER OF HOUSE","ENTRANCE TO KITCHEN","KITCHEN & GRIMY COOKER","SCULLERY DOOR" 1845 DATA "ROOM WITH INCHES OF DUST","REAR TURRET ROOM","CLEARING BY HOUSE","PATH" 1860 DATA "SIDE OF HOUSE","BACK OF HALLWAY","DARK ALCOVE","SMALL DARK ROOM" 1865 DATA "BOTTOM OF SPIRAL STAIRCASE","WIDE PASSAGE","SLIPPERY STEPS","CLIFFTOP" 1880 DATA "NEAR CRUMBLING WALL","GLOOMY PASSAGE","POOL OF LIGHT","IMPRESSIVE VAULTED HALLWAY" 1885 DATA "HALL BY THICK WOODEN DOOR","TROPHY ROOM","CELLAR WITH BARRED WINDOW","CLIFF PATH" 1900 DATA "CUPBOARD WITH HANGING COAT","FRONT HALL","SITTING ROOM","SECRET ROOM" 1905 DATA "STEEP MARBLE STAIRS","DINING ROOM","DEEP CELLAR WITH COFFIN","CLIFF PATH" 1920 DATA "CLOSET","FRONT LOBBY","LIBRARY OF EVIL BOOKS","STUDY WITH DESK AND HOLE IN WALL" 1925 DATA "WEIRD COBWEBBY ROOM","VERY COLD CHAMBER","SPOOKY ROOM","CLIFF PATH BY MARSH" 1940 DATA "RUBBLE-STREWN VERANDAH","FRONT PORCH","FRONT TOWER","SLOPING CORRIDOR" 1945 DATA "UPPER GALLERY","MARSH BY WALL","MARSH","SOGGY PATH" 1960 DATA "BY TWISTED RAILING","PATH THROUGH IRON GATE","BY RAILINGS","BENEATH FRONT TOWER" 1965 DATA "DEBRIS FROM CRUMBLING FACADE","LARGE FALLEN BRICKWORK","ROTTING STONE ARCH","CRUMBLING CLIFFTOP" 1980 FOR I=1 TO 64 1990 READ D$(I) 2000 NEXT I 2010 DATA "PAINTING","RING","MAGIC SPELLS","GOBLET","SCROLL","COINS","STATUE","CANDLESTICK" 2012 DATA "MATCHES","VACUUM","BATTERIES","SHOVEL","AXE","ROPE","BOAT","AEROSOL","CANDLE","KEY" 2014 DATA "NORTH","SOUTH","WEST","EAST","UP","DOWN" 2016 DATA "DOOR","BATS","GHOSTS","DRAWER","DESK","COAT","RUBBISH" 2018 DATA "COFFIN","BOOKS","XZANFAR","WALL","SPELLS" 2060 FOR I=1 TO W 2070 READ O$(I) 2080 NEXT I 2090 LET F(18)=1:LET F(17)=1:LET F(2)=1:LET F(26)=1:LET F(28)=1:LET F(23)=1:LET LL=60:LET RM=57:LET M$="OK" 2100 RETURN 3000 INPUT "SAVE POSITION TO FILE>",Y$ 3020 SAVE Y$ LINE 90 3150 M$="OK" 3200 RETURN 4000 INPUT "LOAD POSITION FROM FILE>",Y$ 4020 LOAD Y$ 4150 M$="OK" 4200 RETURN 5000 INPUT "WANT TO QUIT";Q$ 5010 IF Q$<>"Y" THEN RETURN 5020 INPUT "LIKE TO SAVE THE GAME FIRST",Q$ 5030 IF Q$="Y" THEN GOSUB 3000 5040 PRINT "THANKS FOR PLAYING" 5050 END