Games

Classic Castle Adventure

in
1
2
3
4
5
Description:
A remake of the Classic Castle adventure from David Ahl's "Creative Computing" magazine from the 70's and 80's. This game runs better if you paste the code into the development window as the Google-applet combo with text and graphics makes the text off-center and scrolls it off the screen before it is supposed to. This version is different in that the player stats are simplified, the battles tend to be easier to win, and you have a food supply that will run out. You will gain food by eating some of the critters you slay in the dungeon, or by buying it from vendors. Also, you have a lamp that you can shine into any adjacent space so you can see what's there before you step in. Feel free to edit and revise the game to try new things. This site is about learning and sharing and I look forward to you playing with it.
canvas_size:
8x8
Program:
1 REM D(X,Y,Z) IS MAP 2 REM A IS PLAYER STRENGTH 3 REM W AND W1 ARE WEAPON AND WEAPON NAME 4 REM F IS FOOD, L IS LAMP OIL, G IS GOLD 5 REM K AND K1 ARE GENERAL PURPOSE VARAIBLES 6 REM X1,Y1,Z1 ARE PLAYER COORDINATES 7 REM M AND M1 ARE MONSTER STRENGTH AND NAMES 8 REM REM X2,Y2,Z2 ARE THE ORB OF ZOT LOCATION 9 GOSUB 8600 10 DIM D(8,8,8) 11 FOR Z = 1 TO 8 12 FOR Y = 1 TO 8 13 FOR X = 1 TO 8 14 LET D(X,Y,Z) = 0 15 NEXT X: NEXT Y: NEXT Z 16 LET B = "" : LET V = 0 17 LET X1 = 1: LET Y1 = 1 18 LET Z1 = 1 : LET G = 0 19 LET A = 10: LET F = 60: LET L = 10: LET W = 0 20 REM ORB OF ZOT ON LEVEL 6 TO 8 22 LET Z2 = FLOOR(RAND(3))+6 23 GOSUB 9000 : LET X2 = X: LET Y2 = Y 24 LET O = 0 25 ARRAY T1 26 ARRAY T2 35 REM INIT TREASURE ARRAY 36 FOR K = 1 TO 8 37 LET T2[K] = 0 38 NEXT K 300 REM STOCK DUNGEON 310 FOR Z = 1 TO 8 311 PRINT "."; 319 REM MONSTERS 320 FOR K = 1 TO 10 330 GOSUB 9000 340 IF D(X,Y,Z) <> 0 THEN GOTO 330 349 REM MONSTER NUMBERS 2 TO 20, BY EVENS 350 LET K1 = FLOOR(RAND(10))+1 355 LET K1 = K1 * 2 360 LET D(X,Y,Z) = K1 370 NEXT K 380 REM POOLS, BOOKS, CHESTS, ORBS, LAMP OIL 390 FOR K = 1 TO 3 400 GOSUB 9000 410 IF D(X,Y,Z) <> 0 THEN GOTO 400 420 LET D(X,Y,Z) = 30 430 GOSUB 9000 440 IF D(X,Y,Z) <> 0 THEN GOTO 430 450 LET D(X,Y,Z) = 40 460 GOSUB 9000 470 IF D(X,Y,Z) <> 0 THEN GOTO 460 480 LET D(X,Y,Z) = 50 490 GOSUB 9000 500 IF D(X,Y,Z) <> 0 THEN GOTO 490 510 LET D(X,Y,Z) = 60 512 GOSUB 9000 513 IF D(X,Y,Z) <> 0 THEN GOTO 512 514 LET D(X,Y,Z) = 150 520 NEXT K 529 REM WARP, SINKHOLE, UPSTAIR, DOWNSTAIR 530 GOSUB 9000 540 IF D(X,Y,Z) <> 0 THEN GOTO 530 550 LET D(X,Y,Z) = 70 560 GOSUB 9000 570 IF D(X,Y,Z) <> 0 THEN GOTO 560 580 LET D(X,Y,Z) = 80 600 GOSUB 9000 610 IF D(X,Y,Z) <> 0 THEN GOTO 600 620 IF Z < 8 THEN LET D(X,Y,Z) = 100 630 IF Z < 8 THEN LET D(X,Y,Z+1) = 90 649 REM VENDOR 650 GOSUB 9000 660 IF D(X,Y,Z) <> 0 THEN GOTO 650 670 LET D(X,Y,Z) = 110 680 REM TREASURES, 1 PER LEVEL 690 GOSUB 9000 700 IF D(X,Y,Z) <> 0 THEN GOTO 690 710 LET D(X,Y,Z) = 118 + (2 * Z) 720 NEXT Z 730 REM PLACE ENTRANCE ON FIRST LEVEL 731 GOSUB 9000 732 IF D(X,Y,Z1) <> 0 THEN GOTO 731 733 LET D(X,Y,Z1) = 90 900 REM END OF DUNGEON STOCKING 901 REM PLACE PLAYER 902 FOR Y = 1 TO 8: FOR X = 1 TO 8 903 IF D(X,Y,Z1) = 90 THEN LET X1 = X 904 IF D(X,Y,Z1) = 90 THEN LET Y1 = Y 905 NEXT X: NEXT Y 906 PRINT 907 GOTO 2000 910 REM LET Z = 1 920 CLS 921 LET K = D(X1,Y1,Z1) % 2 922 IF K = 0 THEN LET D(X1,Y1,Z1) = D(X1,Y1,Z1) + 1 1000 REM DISPLAY MAP 1001 REM VISITED ROOMS ARE ODD NUMBERS 1010 FOR Y = 1 TO 8 1011 LET B1="" 1020 FOR X = 1 TO 8 1021 LET B = "?" 1029 REM IF SPACE IS EVEN NUMBER, DISPLAY " ? " 1030 IF D(X,Y,Z1) % 2 = 0 THEN GOTO 1210 1040 IF D(X,Y,Z1) = 1 THEN LET B = "." 1050 IF D(X,Y,Z1) > 1 AND D(X,Y,Z1) < 22 THEN LET B = "M" 1060 IF D(X,Y,Z1) = 31 THEN LET B = "P" 1070 IF D(X,Y,Z1) = 41 THEN LET B = "B" 1080 IF D(X,Y,Z1) = 51 THEN LET B = "C" 1090 IF D(X,Y,Z1) = 61 THEN LET B = "O" 1100 IF D(X,Y,Z1) = 71 THEN LET B = "W" 1110 IF D(X,Y,Z1) = 81 THEN LET B = "S" 1120 IF D(X,Y,Z1) = 91 THEN LET B = "U" 1130 IF D(X,Y,Z1) = 101 THEN LET B = "D" 1140 IF D(X,Y,Z1) = 111 THEN LET B = "V" 1141 IF D(X,Y,Z1) = 151 THEN LET B = "L" 1142 IF D(X,Y,Z1) > 120 AND D(X,Y,Z1) < 136 THEN LET B = "T" 1200 IF X1 = X AND Y1 = Y THEN LET B = "<" + B + ">" 1210 IF X1 <> X OR Y1 <> Y THEN LET B = " " + B + " " 1220 REM PRINT B; 1221 LET B1 = B1 + B 1222 LET B ="" 1230 IF X = 8 THEN PRINT B1 1240 NEXT X 1250 NEXT Y 1260 RETURN 2000 REM MAIN PROGRAM LOOP 2001 REM IF NOT DEAD RETURN TO LOOP 2002 IF Z1 = 0 THEN GOSUB 5400 2003 REM ESCAPE 2007 LET K = 0 2011 IF A = 0 THEN GOTO 9900 2012 IF F = 0 THEN GOTO 9900 2050 GOSUB 910 2100 PRINT "YOU ARE AT ("; X1; ",";Y1;") LEVEL ";Z1 2110 PRINT "THERE IS A "; 2120 GOSUB 9100 2121 PRINT M 2125 REM FIRST SEE IF THERE'S A FIGHT, WARP, SINKHOLE 2155 IF D(X1,Y1,Z1) > 1 AND D(X1,Y1,Z1) < 22 THEN GOSUB 7000 2156 IF D(X1,Y1,Z1) = 71 THEN GOSUB 7500 2157 IF D(X1,Y1,Z1) = 81 THEN GOSUB 7800 2158 IF D(X1,Y1,Z1) = 111 THEN GOSUB 6000 2159 IF D(X1,Y1,Z1) = 151 THEN GOSUB 5210 2160 LET K1 = D(X1,Y1,Z1) 2161 IF K1 > 120 AND K1 < 136 THEN GOSUB 8500 2162 IF X1 = X2 AND Y1 = Y2 AND Z1 = Z2 THEN GOSUB 5600 2165 IF K = 999 THEN GOTO 2000 2166 IF F < 15 THEN PRINT "YOU FEEL VERY HUNGRY." 2170 PRINT "ENTER YOUR COMMAND" 2172 PRINT "('?' FOR HELP):" 2186 GOSUB 6900 : REM SINGLE KEY INPUT 2188 LET C1 = C : LET C2 = 0 2190 IF C = "E" OR C = "N" THEN GOSUB 8000 2191 IF C = "S" OR C = "W" THEN GOSUB 8000 2192 IF C ="U" OR C = "D" THEN GOSUB 8000 2193 IF C = "Q" AND D(X1,Y1,Z1) = 31 THEN GOSUB 4100 2194 IF C = "O" AND D(X1,Y1,Z1) = 51 THEN GOSUB 4500 2195 IF C = "O" AND D(X1,Y1,Z1) = 41 THEN GOSUB 4900 2196 IF C = "G" AND D(X1,Y1,Z1) = 61 THEN GOSUB 5220 2198 IF C = "L" THEN GOSUB 6700 2199 IF C = "X" THEN GOSUB 9996 2200 IF C1 <> "?" AND C1 <> "I" THEN GOTO 3990 2201 REM HELP AND INV ARE FREE MOVES 2202 IF C = "?" THEN GOSUB 9500 2205 IF C = "I" THEN GOSUB 9650 2210 IF C1 = "?" THEN GOTO 2000 2215 IF C1 = "I" THEN GOTO 2000 3990 REM LET F = F - 1 3991 GOSUB 5650 : REM MOVE ORB OF ZOT 4000 GOTO 2000 4100 REM DRINK FROM POOLS 4110 PRINT "YOU TAKE A SOOTHING DRAUGHT FROM "; 4115 PRINT "THE COOL POOL OF WATER...." 4120 LET K = RAND(1) 4125 IF K > .55 THEN GOTO 4200 4130 IF K > .45 THEN GOTO 4300 4135 PRINT "THE WATER REFRESHES YOU." 4140 GOTO 4400 4200 PRINT "..THE WATER HAS MAGICAL PROPERTIES!" 4210 PRINT "YOU NOTICE YOUR CUTS HEALING." 4215 IF A < 10 THEN LET A = A + 1 4220 GOTO 4400 4300 PRINT "...YOU FEEL SLEEPY...YOU REST YOUR HEAD ON"; 4305 PRINT " YOUR PACK FOR A MOMENT AND RELAX...."; 4310 PRINT ".......HOW MUCH TIME DID YOU SLEEP??" 4315 PRINT "YOU FEEL A BIT HUNGRIER..." 4320 LET F = F - 1 4400 PRINT "-ANY KEY TO CONTINUE-" 4410 LET C = GETCHAR(): IF C ="" THEN GOTO 4410 4411 LET F = F - 1 : REM EAT FOOD 4420 RETURN 4500 REM CHESTS 4510 PRINT "YOU OPEN THE CHEST..." 4515 LET K = RAND(1) 4520 IF K > .85 THEN GOTO 4600 4525 IF K > .15 THEN GOTO 4700 4530 PRINT "..AND FIND THAT THE CHEST IS EMPTY." 4535 GOTO 4800 4600 PRINT "KA-BANG! THE CHEST EXPLODES!" 4610 LET K = RAND(1) : IF K > .5 THEN LET A = A - 1 4615 GOTO 4800 4700 LET K = FLOOR(RAND(150))+ 25 4705 PRINT "YOU FIND " ; K; " GOLD COINS!" 4706 LET G = G + K 4710 LET K = RAND(1) 4715 IF K > .5 THEN PRINT "YOU FIND PRESERVED FOOD!" 4716 IF K > .5 THEN LET F = F + FLOOR(RAND(6))+1 4720 IF K > .7 THEN PRINT "YOU FIND A HEALING POTION!" 4722 IF K > .7 AND A < 10 THEN LET A = A + 1 4725 IF K > .9 THEN PRINT "YOU FIND A DAGGER!" 4728 IF K > .9 AND W < 2 THEN LET W = 2 4730 IF K > .9 AND W > 2 THEN PRINT "BUT YOUR WEAPON "; 4735 IF K > .9 AND W > 2 THEN PRINT "IS SUPERIOR TO IT." 4800 LET D(X1,Y1,Z1) = 1 4801 PRINT "-PRESS ANY KEY TO CONTINUE-" 4810 LET C = GETCHAR(): IF C = "" THEN GOTO 4810 4811 LET F = F - 1 4815 RETURN 4900 REM BOOKS 4910 PRINT "YOU CAREFULLY STUDY THE OLD BOOK..." 4915 LET K = RAND(1) 4920 IF K > .9 THEN GOTO 5050 4925 IF K > .7 THEN GOTO 5100 4930 IF K > .3 THEN GOTO 5000 4950 PRINT "IT'S A GUIDE TO PROGRAMMING FUN"; 4951 PRINT " GAMES IN 'QUITE-BASIC'." 4955 GOTO 5200 5000 PRINT "YOU READ A DELIGHTFUL STORY ABOUT AN"; 5001 PRINT " UNDERACHIEVING GENIUS THAT WORKS AT"; 5002 PRINT " A FACTORY." 5003 GOTO 5200 5050 PRINT "IT'S A MAP OF THIS LEVEL OF THE CASTLE!" 5051 FOR Y = 1 TO 8 : FOR X = 1 TO 8 5052 LET K = D(X,Y,Z1) 5053 IF K % 2 = 0 THEN LET K = K + 1 5054 LET D(X,Y,Z1) = K 5055 NEXT X: NEXT Y 5056 GOTO 5200 5100 PRINT "IT'S A TREASURE MAP OF THE ENTIRE CASTLE!" 5101 PRINT "(ON EACH LEVEL THE CHESTS ARE REVEALED)" 5102 FOR Z = 1 TO 8 : FOR Y = 1 TO 8: FOR X = 1 TO 8 5103 IF D(X,Y,Z) = 50 THEN LET D(X,Y,Z) = D(X,Y,Z) + 1 5104 NEXT X: NEXT Y: NEXT Z 5200 LET D(X1,Y1,Z1) = 1 5201 PRINT "-ANY KEY TO CONTINUE-" 5202 LET C = GETCHAR(): IF C = "" THEN GOTO 5202 5203 LET F = F - 1 5204 RETURN 5210 REM LAMP OIL 5211 LET L = L + FLOOR(RAND(3))+1 5212 PRINT "YOU NOW HAVE "; L; " TURNS OF LAMP OIL." 5213 LET D(X1,Y1,Z1) = 1 5214 RETURN 5220 REM ORBS 5222 PRINT "YOU GAZE INTO THE CRYSTAL ORB." 5223 PRINT "YOU SEE HAZY CLOUDY IMAGES..." 5224 PRINT "YOU GAZE...GAZE...GAZE..." 5225 LET K = RAND(1) 5226 IF K > .75 THEN GOTO 5260 5227 IF K > .4 THEN GOTO 5240 5228 IF K > .2 THEN GOTO 5236 5229 PRINT "YOU WATCH A RERUN OF 'THE GEEK'." 5235 GOTO 5300 5236 PRINT "YOU SEE NOTHING BUT CLOUDY SHADOWS." 5237 GOTO 5300 5240 GOSUB 9000 5241 LET Z = FLOOR(RAND(8))+1 5242 LET K = D(X,Y,Z): IF K % 2 = 0 THEN LET K = K + 1 5243 GOSUB 9108 5244 PRINT "AT ("; X ; "," ; Y ; 5245 PRINT ") LEVEL "; Z ; " YOU SEE A " ; M 5246 LET D(X,Y,Z) = K 5250 GOTO 5300 5260 PRINT "YOU SEE THE ORB OF ZOT AT (";X2;",";Y2;") "; 5261 PRINT "LEVEL "; Z2 5300 PRINT "-ANY KEY TO CONTINUE-" 5301 LET C = GETCHAR(): IF C = "" THEN GOTO 5301 5302 LET F = F - 1 5303 RETURN 5400 REM ESCAPE 5410 PRINT "ARE YOU SURE YOU WANT TO EXIT THE CASTLE?" 5411 PRINT "(Y)ES OR (N)O?" 5415 GOSUB 6900 5420 IF C <> "Y" THEN GOTO 5500 5422 PRINT "YOU EXIT THE DUNGEON INTO THE FRESH" 5423 PRINT "AIR OF THE COUNTRYSIDE. THE CASTLE " 5424 PRINT "COLLAPSES BEHIND YOU." 5425 GOSUB 9800 : REM IF YES THEN FINAL SCORE 5428 GOTO 9925 5500 LET Z1 = 1 5501 PRINT "-PRESS ANY KEY TO CONTINUE-" 5505 RETURN 5600 REM THE ORB OF ZOT! 5601 PRINT "YOU FOUND THE ORB OF ZOT!" 5602 PRINT "FROM BENEATH A PILE OF OLD DEBRIS YOU "; 5603 PRINT "REMOVE A SHIMMERING GLOBE OF POLISHED "; 5604 PRINT "CRYSTAL. IT'S NOW YOURS!" 5605 LET X2 = 0 : REM TO AVOID THIS MESSAGE AGAIN 5606 LET O = 1 5607 RETURN 5650 REM MOVE ORB 5652 IF RAND(1) > .25 THEN GOTO 5700 5654 LET K = FLOOR(RAND(5))+1 5656 IF K = 1 THEN LET Y2 = Y2 - 1 5657 IF K = 2 THEN LET Y2 = Y2 + 1 5658 IF K = 3 THEN LET X2 = X2 + 1 5660 IF K = 4 THEN LET X2 = X2 - 1 5662 IF K = 5 AND D(X2,Y2,Z2) = 90 THEN LET Z2 = Z2 - 1 5664 IF K = 5 AND D(X2,Y2,Z2) = 91 THEN LET Z2 = Z2 - 1 5668 IF X2 > 8 THEN LET X2 = 8: IF X2 < 1 THEN LET X2 = 1 5670 IF Y2 > 8 THEN LET Y2 = 8: IF Y2 < 1 THEN LET Y2 = 1 5700 RETURN 6000 REM VENDOR INTERACTION 6001 REM V = VENDOR ATTACKED FLAG 6005 IF V = 1 THEN GOSUB 7000 6006 IF V = 1 THEN GOTO 6390 6010 PRINT "A VENDOR IS HERE SELLING WARES." 6020 PRINT "(T)RADE, (I)GNORE, (A)TTACK." 6030 GOSUB 6900 6040 IF C = "I" THEN GOTO 6390 6050 REM IF C = "A" THEN LET M1 = 20 6060 IF C = "A" THEN GOSUB 7000 6065 IF V = 1 THEN GOTO 6390 6070 FOR K = 1 TO 8 6080 IF T2[K] > 0 THEN PRINT "SELL A "; T1[K]; 6090 IF T2[K] > 0 THEN PRINT " FOR "; T2[K] / 4 ; "?" 6100 IF T2[K] > 0 THEN GOSUB 6900 ELSE GOTO 6130 6110 IF C = "Y" THEN LET G = G + (T2[K] / 4) 6120 IF C = "Y" THEN LET T2[K] = 0 6130 NEXT K 6140 IF G > 999 THEN PRINT "WEAPONS FOR SALE:" 6145 IF G > 999 THEN PRINT "(N)OTHING" 6150 IF G > 999 THEN PRINT "(D)AGGER - 1000" 6160 IF G > 1999 THEN PRINT "(S)WORD - 2000" 6170 IF G > 3499 THEN PRINT "(A)XE - 3500" 6180 IF G > 999 THEN GOSUB 6900 6190 IF C = "D" AND G > 999 THEN LET W = 2 6195 IF C = "D" AND G > 999 THEN LET G = G - 1000 6200 IF C = "S" AND G > 1999 THEN LET W = 4 6205 IF C = "S" AND G > 1999 THEN LET G = G - 2000 6210 IF C = "A" AND G > 2999 THEN LET W = 6 6220 IF C = "A" AND G > 2999 THEN LET G = G - 3000 6250 IF A < 10 AND G > 499 THEN PRINT "HEAL WOUNDS?" 6260 IF A < 10 AND G > 499 THEN PRINT "(Y)ES OR (N)O 500GP?" 6265 IF A < 10 AND G > 499 THEN GOSUB 6900 6270 IF C = "Y" THEN LET A = A + 2 ELSE GOTO 6300 6271 IF A > 10 THEN LET A = 10 : REM MAX STR IS 10 6275 PRINT "YOUR STRENGTH IS NOW "; A 6280 IF A < 10 AND G > 499 THEN GOTO 6250 6299 IF G < 5 THEN GOTO 6330 6300 PRINT "YOU HAVE "; L ; " LAMP OIL." 6310 PRINT "BUY SOME OIL FOR 10GP?" 6320 PRINT "(Y)ES OR (N)O." 6325 GOSUB 6900 6330 IF C = "Y" THEN LET L = L + 10 ELSE GOTO 6350 6335 IF C = "Y" THEN LET G = G - 10 6340 IF G > 9 THEN GOTO 6300 6345 IF G < 10 THEN GOTO 6380 6350 PRINT "YOU HAVE " ; F; " TURNS OF FOOD LEFT." 6355 PRINT "BUY 10 TURNS OF FOOD FOR 10GP (Y)ES OR (N)O" 6360 GOSUB 6900 6365 IF C = "Y" THEN LET F = F + 10 ELSE GOTO 6380 6370 IF C = "Y" THEN LET G = G - 10 6375 IF G > 9 THEN GOTO 6350 6380 PRINT "THANK YOU FOR SHOPPING HERE!" 6381 PRINT "-PRESS ANY KEY-" 6382 LET C = GETCHAR(): IF C ="" THEN GOTO 6382 6385 GOSUB 910 6389 LET F = F - 1 6390 RETURN 6700 REM LAMP SUBROUTINE 6701 IF L < 1 THEN PRINT "YOU'RE OUT OF OIL!" 6702 IF L < 1 THEN GOTO 6780 6705 LET Y3 = 0: LET X3 = 0 : REM LAMP DIR COORDINATES 6710 PRINT "WHICH DIRECTION TO SHINE THE LAMP?" 6715 PRINT "(N)ORTH, (S)OUTH, (E)AST, (W)EST?" 6720 GOSUB 6900 6721 LET X3 = X1: LET Y3 = Y1 6725 IF C = "N" THEN LET Y3 = Y1 - 1 6730 IF C = "S" THEN LET Y3 = Y1 + 1 6735 IF C = "W" THEN LET X3 = X1 - 1 6740 IF C = "E" THEN LET X3 = X1 + 1 6745 IF X3 > 8 THEN LET X3 = 1: IF X3 < 1 THEN LET X3 = 8 6750 IF Y3 > 8 THEN LET Y3 = 1: IF Y3 < 1 THEN LET Y3 = 8 6755 LET K = D(X3, Y3, Z1) 6756 IF K % 2 = 0 THEN LET K = K + 1 6760 LET D(X3,Y3,Z1) = K 6765 GOSUB 9108 6770 PRINT "THERE YOU SEE A "; M 6775 PRINT "-ANY KEY TO CONTINUE-" 6777 LET C = GETCHAR(): IF C = "" THEN GOTO 6777 6778 LET L = L - 1 : LET F = F - 1 6780 RETURN 6900 REM SINGLE KEY INPUT SUBROUTINE 6910 LET C = GETCHAR(): IF C="" THEN GOTO 6910 6920 LET C = UPPERCASE(C) 6930 RETURN 6940 REM VENDOR GOODS 6941 LET F = F + FLOOR(RAND(20))+10 6942 PRINT "YOU COLLECT THE VENDOR'S FOOD SUPPLIES." 6943 IF A < 10 THEN LET A = 10 6944 PRINT "YOU DRINK ALL HIS HEALING POTIONS." 6945 LET L = L + FLOOR(RAND(20))+10 6946 PRINT "YOU TAKE ALL HIS LAMP OIL." 6947 IF W < 4 THEN PRINT "YOU TAKE HIS SWORD." 6948 IF W < 4 THEN LET W = 4 6950 PRINT "YOU MURDEROUS ROGUE!" 6951 RETURN 7000 REM FIGHT CODE 7010 PRINT "YOU ARE FACING AN EVIL "; M 7015 PRINT "YOUR STRENGTH IS ";A 7020 PRINT "(A)TTACK OR (R)ETREAT." 7030 GOSUB 6900 7070 IF C = "R" THEN GOTO 7400 7080 LET K = FLOOR(RAND(A+W))+1 7085 LET K1 = FLOOR(RAND(M1))+1 7090 IF K >= K1 THEN GOTO 7200 7100 PRINT "THE EVIL ";M;" WOUNDED YOU!": LET A = A - 1 7102 IF A = 0 THEN GOTO 9900 7110 GOTO 7010 7200 PRINT "YOU SLAY THE EVIL " ; M ; "!" 7201 LET D(X1,Y1,Z1) = 1 7210 LET K1 = (M1 * 15) + FLOOR(RAND(100)) 7215 LET G = G + K1 7220 PRINT "YOU COLLECT IT'S HOARD OF ";K1; " COINS." 7221 IF M1 = 20 THEN GOSUB 6940 7230 LET K = RAND(1) 7235 IF K > .5 THEN GOTO 7490 7240 LET F = F + (2 * M1) 7250 PRINT "YOU SPEND AN HOUR EATING "; M; 7255 LET K = RAND(1) 7260 IF K < .5 THEN PRINT " KABOBS." ELSE PRINT " STEW." 7270 GOTO 7490 7399 REM RUN AWAY 7400 IF RAND(1) < .5 - (M1 / 100) THEN GOTO 7450 7410 PRINT "THE ";M; " BLOCKS YOUR WAY!" 7412 LET K = RAND(1) 7415 IF RAND(1) < .5 + (M1 / 100) THEN GOTO 7100 7421 IF A = 0 THEN GOTO 9900 7425 GOTO 7000 7450 PRINT "YOU PICK A PASSAGE RANDOMLY AND ESCAPE!" 7455 LET K = FLOOR(RAND(4))+1 7460 IF K = 1 THEN LET Y1 = Y1+ 1 7462 IF K = 2 THEN LET Y1 = Y1 - 1 7464 IF K = 3 THEN LET X1 = X1 - 1 7466 IF K = 4 THEN LET X1 = X1 + 1 7480 IF X1 < 1 THEN LET X1 = 8: IF X1 > 8 THEN LET X1 = 1 7482 IF Y1 < 1 THEN LET Y1 = 8: IF Y1 > 8 THEN LET Y1 = 1 7490 PRINT "-ANY KEY TO CONTINUE-" 7492 LET C = GETCHAR(): IF C = "" THEN GOTO 7492 7495 LET K = 999 7496 IF M1 = 20 AND V = 0 THEN LET V = 1 7499 RETURN 7500 REM WARP CODE 7510 GOSUB 9000 : LET Z = FLOOR(RAND(8))+1 7520 PRINT "YOU ARE SUCKED INTO A MAGICAL WARP!" 7525 PRINT "YOU TRAVEL DOWN A SHIMMERING TUNNEL!" 7526 PRINT "THUMP! YOU GET UP AND GET YOUR BEARINGS." 7527 PRINT "-ANY KEY TO CONTINUE-" 7528 LET C = GETCHAR(): IF C="" THEN GOTO 7528 7530 LET X1 = X: LET Y1 = Y: LET Z1 = Z 7538 LET K = 999 7540 RETURN 7800 REM SINK HOLE 7810 PRINT "THE SOFT FLOOR CAVES IN TO YOUR STEP!" 7815 PRINT "JUST AS YOU THINK YOU'RE GOING TO BE" 7820 PRINT "BURIED IN QUICKSAND, YOU LAND ON" 7825 PRINT "A HARD FLOOR. THUMP!" 7826 PRINT "-ANY KEY TO CONTINUE-" 7827 LET C = GETCHAR(): IF C="" THEN GOTO 7827 7830 LET Z1 = Z1 + 1: IF Z1 > 8 THEN LET Z1 = 1 7840 LET K = 999 7850 RETURN 8000 REM MOVEMENT 8001 REM ROUND TOWER, OFF ONE EDGE ONTO ANOTHER 8005 IF C = "E" THEN LET X1 = X1 + 1 8010 IF C = "S" THEN LET Y1 = Y1 + 1 8015 IF C = "W" THEN LET X1 = X1 - 1 8020 IF C = "N" THEN LET Y1 = Y1 - 1 8025 IF X1 > 8 THEN LET X1 = 1: IF X1 < 1 THEN LET X1 = 8 8030 IF Y1 > 8 THEN LET Y1 = 1: IF Y1 < 1 THEN LET Y1 = 8 8040 IF C = "D" AND D(X1,Y1,Z1) = 101 THEN LET Z1 = Z1 + 1 8050 IF C = "U" AND D(X1,Y1,Z1) = 91 THEN LET Z1 = Z1 - 1 8091 IF C = "D" AND D(X1,Y1,Z1) = 101 THEN LET F = F - 1 8092 IF C = "U" AND D(X1,Y1,Z1) = 101 THEN LET F = F - 1 8093 IF C = "E" OR C = "W" THEN LET F = F - 1 8094 IF C = "N" OR C = "S" THEN LET F = F - 1 8100 RETURN 8200 REM LOCATION 8210 PRINT "YOU ARE AT (";X1;",";Y1;") LEVEL ";Z1 8220 RETURN 8500 REM TREASURE 8510 PRINT "YOU FOUND THE ";M; "! WELL DONE!" 8511 LET D(X1,Y1,Z1) = 1 8514 LET K = 0 8515 FOR K1 = 1 TO 8 8516 IF K = 1 THEN GOTO 8522 : REM SKIP REST 8517 IF T2[K1] = 0 THEN LET K = 1 8518 IF T2[K1] = 0 THEN LET T1[K1] = M 8520 IF T2[K1] = 0 THEN LET T2[K1] = M1 8522 NEXT K1 8530 RETURN 8600 PRINT "THE CASTLE ADVENTURE" 8601 PRINT "ORIGINALLY PUBLISHED IN DAVID AHL'S" 8602 PRINT "CREATIVE COMPUTING MAGAZINE." 8603 PRINT 8604 PRINT "THIS VERSION IS WRITTEN IN QUITE-BASIC" 8605 PRINT "BY STEVE REYNOLDS. I CLAIM NO COPYRIGHTS. " 8606 PRINT "AS FAR AS I AM CONCERNED, THIS WORK IS "; 8607 PRINT "PUBLIC DOMAIN." 8608 PRINT 8609 PRINT "DO YOU NEED INSTRUCTIONS? (Y OR N)" 8610 GOSUB 6900: IF C = "" THEN GOTO 8610 8612 IF C = "N" THEN GOTO 8800 8613 PRINT "LONG AGO, THE OLD WIZARD BER-GAL DIED "; 8614 PRINT "AND LEFT HIS FAMED 'ORB OF ZOT' BEHIND "; 8615 PRINT "ALONG WITH A FABULOUS COLLECTION OF "; 8616 PRINT "JEWELS GUARDED BY MANY HIDEOUS "; 8617 PRINT "MONSTERS." 8618 PRINT "ENTER YOU, A FAILED PEASANT FARMER WITH "; 8619 PRINT "NO HOPE BUT TO VENTURE INTO THE "; 8620 PRINT "ABANDONED CASTLE AND TRY TO CLAIM THE "; 8621 PRINT "ORB AND THE TREASURE FOR YOURSELF." 8622 PRINT "YOU SET OFF INTO THE CASTLE WITH NOUGHT "; 8623 PRINT "BUT A SACK OF FOOD AND YOUR TRUSTY LAMP." 8624 PRINT "-ANY KEY TO CONTINUE-" 8625 LET C = GETCHAR(): IF C = "" THEN GOTO 8625 8626 PRINT "THE CASTLE FLOORS ARE REPRESENTED BY "; 8627 PRINT "AN 8X8 GRID INDICATING YOUR LOCATION. " 8628 PRINT "YOU START ON THE TOP FLOOR AND MUST " 8629 PRINT "WORK YOUR WAY DOWN TOWARD THE 8TH " 8630 PRINT "LEVEL IN SEARCH OF THE ORB OF ZOT." 8631 PRINT "ON THE WAY YOU WILL FIGHT MONSTERS, "; 8632 PRINT "FIND TREASURES, AND BUY GOODS FROM "; 8633 PRINT "SHADY DUNGEON VENDORS." 8634 PRINT "HIT '?' DURING THE GAME FOR HELP." 8635 PRINT "-ANY KEY TO CONTINUE-" 8636 LET C = GETCHAR(): IF C = "" THEN GOTO 8636 8637 PRINT "THE DUNGEON IS UNREVEALED AT FIRST. "; 8638 PRINT "EXPLORE WITH BASIC N,S,E,W,U,D DIRECTIONS. "; 8639 PRINT "USE YOUR (L)AMP TO PEEK INTO UNKNOWN "; 8640 PRINT "ROOMS. (O)PEN BOOKS AND CHESTS TO GET "; 8641 PRINT "VARIOUS REWARDS (OR HAZARDS!). (Q)UAFF "; 8642 PRINT "WATER FROM POOLS . "; 8643 PRINT "CHECK YOUR (I)NVENTORY TO TRACK YOUR "; 8644 PRINT "REMAINING STRENGTH, FOOD, AND GOLD."; 8645 PRINT "(G)AZE INTO CRYSTAL ORBS TO REVEAL THE "; 8646 PRINT "LOCATION OF THE ORB OF ZOT." 8647 PRINT "-ANY KEY TO CONTINUE-" 8648 LET C = GETCHAR(): IF C = "" THEN GOTO 8648 8800 RETURN 9000 REM RAND X Y GENERATOR 9005 LET X = FLOOR(RAND(8))+1 9010 LET Y = FLOOR(RAND(8))+1 9015 RETURN 9100 REM IDENTIFY ROOM OR OBJECT 9101 REM ALSO ASSIGNS COMBAT VALUES TO MONSTERS 9102 REM 9103 LET K = D(X1,Y1,Z1) : LET M1 = 0 9104 REM IF K > 111 THEN GOTO 9310 9105 IF K % 2 = 0 THEN LET K = K + 1 9107 LET D(X1,Y1,Z1) = K 9108 LET M = "NOT IMPLEMENTED" 9110 IF K = 1 THEN LET M = "EMPTY ROOM." 9120 IF K = 3 THEN LET M = "BAT" 9121 IF K = 3 THEN LET M1 = 3 9130 IF K = 5 THEN LET M = "RAT" 9131 IF K = 5 THEN LET M1 = 4 9140 IF K = 7 THEN LET M = "KOBOLD" 9141 IF K = 7 THEN LET M1 = 5 9150 IF K = 9 THEN LET M = "BEETLE" 9151 IF K = 9 THEN LET M1 = 5 9160 IF K = 11 THEN LET M = "SPIDER" 9161 IF K = 11 THEN LET M1 = 6 9170 IF K = 13 THEN LET M = "GOBLIN" 9171 IF K = 13 THEN LET M1 = 7 9180 IF K = 15 THEN LET M = "ORC" 9181 IF K = 15 THEN LET M1 = 8 9190 IF K = 17 THEN LET M = "GARGOYLE" 9191 IF K = 17 THEN LET M1 = 10 9200 IF K = 19 THEN LET M = "TROLL" 9201 IF K = 19 THEN LET M1 = 12 9210 IF K = 21 THEN LET M = "DRAGON" 9211 IF K = 21 THEN LET M1 = 15 9220 IF K = 31 THEN LET M = "POOL OF WATER." 9230 IF K = 41 THEN LET M = "OLD DUSTY BOOK." 9240 IF K = 51 THEN LET M = "WOODEN CHEST." 9250 IF K = 61 THEN LET M = "CRYSTAL ORB." 9260 IF K = 71 THEN LET M = "MAGICAL WARP." 9270 IF K = 81 THEN LET M = "SINK HOLE!" 9280 IF K = 91 THEN LET M = "STAIRS LEADING UP." 9290 IF K = 101 THEN LET M = "STAIRS GOING DOWN." 9300 IF K = 111 THEN LET M = "VENDOR" 9301 IF K = 111 THEN LET M1 = 20 9310 IF K = 121 THEN LET M = "AMETHYST" 9311 IF K = 121 THEN LET M1 = 400 9313 IF K = 123 THEN LET M = "AGATE" 9314 IF K = 123 THEN LET M1 = 600 9315 IF K = 125 THEN LET M = "BLOODSTONE" 9316 IF K = 125 THEN LET M1 = 800 9317 IF K = 127 THEN LET M = "OPAL" 9318 IF K = 127 THEN LET M1 = 1600 9319 IF K = 129 THEN LET M = "RUBY" 9320 IF K = 129 THEN LET M1 = 2400 9321 IF K = 131 THEN LET M = "EMERALD" 9322 IF K = 132 THEN LET M1 = 3200 9323 IF K = 133 THEN LET M = "SAPPHIRE" 9324 IF K = 133 THEN LET M1 = 4000 9325 IF K = 135 THEN LET M = "DIAMOND" 9326 IF K = 135 THEN LET M1 = 5600 9320 REM IF K > 119 AND K < 136 THEN GOSUB 8500 9328 IF K = 151 THEN LET M = "LAMP OIL" 9450 RETURN 9500 REM HELP CODE 9510 PRINT "LIST OF COMMANDS" 9520 PRINT "?- GET HELP X - EXIT GAME" 9523 PRINT "N - NORTH E - EAST S - SOUTH W - WEST" 9526 PRINT "D - DOWN U - UP I - INVENTORY" 9529 PRINT "G - GAZE INTO CRYSTAL ORB" 9532 PRINT "Q - QUAFF WATER FROM A POOL" 9535 PRINT "O - OPEN A BOOK OR CHEST" 9538 PRINT 9540 PRINT "MAP SYMBOL KEY" 9543 PRINT "===============" 9545 PRINT ". EMPTY ROOM O - CRYSTAL ORB" 9548 PRINT "B - BOOK C - CHEST L - LAMP OIL" 9551 PRINT "M - MONSTER P - POOL OF WATER" 9555 PRINT "D - DOWNSTAIR U - UPSTAIR" 9556 PRINT "T - TREASURE" 9560 PRINT "-ANY KEY TO CONTINUE-" 9561 LET C = GETCHAR(): IF C ="" THEN GOTO 9561 9580 RETURN 9650 PRINT "INVENTORY AND STATUS" 9655 PRINT "CURRENT STRENGTH: "; A 9660 PRINT "WEAPON: "; 9662 IF W = 2 THEN PRINT "DAGGER" 9663 IF W = 4 THEN PRINT "SWORD" 9664 IF W = 6 THEN PRINT "AXE" 9665 IF W = 0 THEN PRINT "NONE" 9670 PRINT "TURNS OF FOOD: ";F 9675 PRINT "TURNS OF LAMP OIL: "; L 9680 PRINT "GOLD COINS: "; G 9685 PRINT "TREASURES FOUND:" 9690 FOR K = 1 TO 8 9700 IF T2[K] > 0 THEN PRINT " "; T1[K] 9710 NEXT K 9720 IF O = 1 THEN PRINT "YOU HAVE THE ORB OF ZOT." 9722 PRINT "-ANY KEY TO CONTINUE-" 9725 LET C = GETCHAR(): IF C = "" THEN GOTO 9725 9730 RETURN 9800 REM FINAL SCORE 9801 LET K1 = 0 9810 PRINT "YOUR FINAL SCORE: " 9815 FOR K = 1 TO 8 9816 LET K1 = K1 + T2[K] 9818 NEXT K 9820 PRINT K1; " POINTS OF TREASURE" 9822 PRINT G; " POINTS FOR YOUR GOLD" 9824 IF O = 1 THEN PRINT "10,000 FOR THE ORB OF ZOT" 9825 IF A = 0 OR F = 0 THEN PRINT "HALF SCORE FOR DYING" 9826 LET K1 = K1 + G 9827 IF O = 1 THEN LET K1 = K1 + 10000 9828 IF A = 0 OR F = 0 THEN LET K1 = FLOOR(K1 / 2) 9828 PRINT "FOR A FINAL SCORE OF "; K1 9830 RETURN 9900 IF A = 0 THEN PRINT "YOU DIED FOR LACK OF STRENGTH." 9905 IF F = 0 THEN PRINT "YOU STARVED TO DEATH!" 9910 PRINT 9915 PRINT "IT WAS A VALIANT EFFORT." 9920 PRINT "WHAT YOU HAD WHEN YOU DIED:" 9922 GOSUB 9660 9924 GOSUB 9800 9925 IF O = 0 THEN PRINT "THE ORB OF ZOT WAS AT: "; 9930 IF O = 0 THEN PRINT "(";X2;",";Y2;") LEVEL "; Z2 9935 PRINT 9940 PRINT "PLAY AGAIN?" 9944 GOSUB 6900 9955 IF C <> "N" THEN GOTO 9970 ELSE PRINT "SEE YA." 9956 END 9970 PRINT "PLEASE WAIT WHILE I RESET THE DUNGEON" 9975 GOTO 11 9996 PRINT "ARE YOU SURE YOU WANT TO QUIT THE GAME?" 9997 GOSUB 6900 9998 IF C <> "Y" THEN RETURN ELSE GOTO 9915 9999 END
Syndicate content