Games
Classic Castle Adventure
Posted August 11th, 2010 by piggles in
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