Introduction: Simple Adventure Game.

About: computoman.blogspot.com Bytesize articles instead of a trilogy in one post.
Simple adventure game to play and modify for your own needs. The program was originally written in Pascal and I transcribed it to be a derivative work in QBasic. It certainly could be transcribed again to some other language. There are no graphics in this adventure, but you could certainly add your own. I compiled with Freebasic for both Linux and for MSWindows. You can easily download freebasic and install it on your system to compile the code.

Note: You should be competent enough to compile programs to get this to work. Since every system is different, I can not give instructions for every system. I can only just give you the program source and and let you run with it.

Step 1: What You Need:

A computer that will run Freebasic
Freebasic
Source for the the mini adventure

Step 2: Freebasic

You need to download and install freebasic for your system. That site has the instructions for installation:

http://www.freebasic.net/

Note: There maybe some qbasic compiler for the Mac computer, but you will have to look for it.

Step 3: Download and Compile the Code.

1. To compile the code, you will want to download the file to your freebasic directory
2.  From the command line issue the command:
    fbc -lang qb gamadven.bas
3. After it compiles you can run gamadven and play the simple game. it is all keyboard controlled      so there should be no problem playing it.

Step 4: Final Words.

Though this game might be simple, it contains the framework for you to be able to develop something much more complicated. I just given you some building blocks to play with.

Watch for a web version that can be run on a server soon.

Enjoy!

Step 5: Bonus 1: a Second Adventure Game.

hh.bas
[code]
REM HOUNTED HOUSE 

REM I made this in about 2 or 3 hours just for fun.
REM This is my first REAL IF game.
REM Im only 15 so gimmie sum slak if it sux lol.
 
FOR s = 1 TO 40 STEP 5
COLOR INT(RND * 15) + 1
PRINT SPACE$(s); " HAUNTED HOUSE ";
NEXT s
'play "L7O1GFGGGBABBBBCO3BBBBDGGGGFGGABCGO4DBBBBGFG"
menu:
CLS
COLOR 4
PRINT " HAUNTED HOUSE - BY GEEK BASIC SOFTWARE"
COLOR 12
PRINT
PRINT "MENU -"
PRINT "1> 'play GAME"
PRINT "2> HELP"
PRINT "0> QUIT"
DO
LET k$ = INKEY$
IF k$ = "1" THEN : GOTO playgame
IF k$ = "2" THEN : GOTO help
IF k$ = "0" THEN : CLS : END
LOOP
 
help:
CLS
COLOR 4
PRINT "HERE ARE SOME BASIC COMMANDS THAT CAN BE USED IN THE GAME..."
PRINT
COLOR 12
PRINT "LOOK                         - CHECKS FOR AVAILABLE EXITS"
PRINT "INVENTORY                    - VIEW ALL OF YOUR ITEMS"
PRINT "NORTH, WEST, SOUTH, AND EAST - MOVES YOU TO AVAILABLE LOCATIONS"
PRINT "EXAMINE (OBJECT)             - EXAMINES AN OBJECT"
PRINT "USE (OBJECT)                 - USE AN OBJECT"
PRINT "TAKE (OBJECT)                - TAKE AN OBJECT"
PRINT "UNLOCK (OBJECT)              - UNLOCK AN OBJECT"
PRINT "HELP                         - VIEW THIS SCREEN"
PRINT "PRESS ANY KEY..."
DO
LOOP UNTIL LEN(INKEY$)
GOTO menu
 
playgame:
 
LET r = 1
LET gotmainkey = 0
LET gotboxkey1 = 0
LET gotboxkey2 = 0
LET gotcandle = 0
LET gotnote = 0
LET gottp = 0
LET boxopen = 0
 
CLS
COLOR 4
PRINT "HAUNTED HOUSE"
PRINT
COLOR 12
PRINT "IT IS HALLOWEEN DAY AT MARIPOSA DRIVE."
PRINT "YOUR MOM HAS GROUNDED YOU FOR THE DAY BECAUSE YOU AND YOUR FRIENDS"
PRINT "THREW TOILET PAPER OVER THE NEIGHBORS HOUSE LAST NIGHT..."
PRINT "AFTER YOU SPEND ABOUT HALF OF THE DAY IN YOUR ROOM STARING AT YOUR"
PRINT "SOCKS AND LISTENING TO THE CHILDREN 'play OUTSIDE, YOU DICIDE TO LEAVE"
PRINT "AND GO ON YOUR OWN LITTLE HALLOWEEN ADVENTURE. YOU RMEMBER THE LOCAL"
PRINT "RUMERS ABOUT THE OLD HOUSE ACROSS THE STREET BIENG HAUNTED."
PRINT "YOU THINK IT MIGHT BE FUN TO GO INSIDE AND EXPLORE IT."
PRINT "YOU PICK UP THE PHONE TO INVITE YOUR FRIENDS TO COME, BUT YOU REMEMBER"
PRINT "THAT THEY ARE GROUNDED TO... YOU PUT THE PHONE BACK DOWN, OPEN THE WINDOW,"
PRINT "AND JUMP OUT."
PRINT "PRESS ANY KEY..."
DO
LOOP UNTIL LEN(INKEY$)
CLS
PRINT "YOU RUN ACROSS THE STREET TO THE 'HAUNTED HOUSE' TO SEE THAT THE DOOR"
PRINT "IS SLIGHTLY OPEN, EVEN THOUGH NOBODY LIVES THERE."
PRINT "YOU RUN INSIDE THE HOUSE AND THE DOOR SLAMS BEHIND YOU."
PRINT "YOU TRY TO OPEN THE DOOR, BUT THERE IS A HUGE LOCK PREVENTING YOU"
PRINT "FROM OPENING IT."
PRINT "PRESS ANY KEY..."
DO
LOOP UNTIL LEN(INKEY$)
 
DO
CLS
GOSUB room
GOSUB parser
LOOP
 
room:
IF r = 1 THEN : GOSUB r1
IF r = 2 THEN : GOSUB r2
IF r = 3 THEN : GOSUB r3
IF r = 4 THEN : GOSUB r4
IF r = 5 THEN : GOSUB r5
IF r = 6 THEN : GOSUB r6
RETURN
 
parser:
COLOR 12
LINE INPUT "> "; cmd$
PRINT
COLOR 4
LET cmd$ = LTRIM$(RTRIM$(UCASE$(cmd$)))
IF cmd$ = "END" OR cmd$ = "QUIT" OR cmd$ = "EXIT" OR cmd$ = "Q" OR cmd$ = "QUIT" THEN
GOTO menu
END IF
IF cmd$ = "HELP" THEN
CLS
COLOR 4
PRINT "HERE ARE SOME BASIC COMMANDS THAT CAN BE USED IN THE GAME..."
PRINT
COLOR 12
PRINT "LOOK                         - CHECKS FOR AVAILABLE EXITS"
PRINT "INVENTORY                    - VIEW ALL OF YOUR ITEMS"
PRINT "NORTH, WEST, SOUTH, AND EAST - MOVES YOU TO AVAILABLE LOCATIONS"
PRINT "EXAMINE (OBJECT)             - EXAMINES AN OBJECT"
PRINT "USE (OBJECT)                 - USE AN OBJECT"
PRINT "TAKE (OBJECT)                - TAKE AN OBJECT"
PRINT "UNLOCK (OBJECT)              - UNLOCK AN OBJECT"
PRINT "HELP                         - VIEW THIS SCREEN"
PRINT "PRESS ANY KEY..."
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF cmd$ = "LOOK" OR cmd$ = "LOOK AROUND" OR cmd$ = "L" THEN
IF r = 1 THEN : PRINT "YOU CAN MOVE NORTH AND WEST."
IF r = 2 THEN : PRINT "YOU CAN MOVE NORTH, SOUTH, AND WEST."
IF r = 3 THEN : PRINT "YOU CAN MOVE WEST AND SOUTH."
IF r = 4 THEN : PRINT "YOU CAN MOVE EAST."
IF r = 5 THEN : PRINT "YOU CAN MOVE EAST."
IF r = 6 THEN : PRINT "YOU CAN MOVE EAST."
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF cmd$ = "INVENTORY" OR cmd$ = "INV" OR cmd$ = "ITEMS" THEN
PRINT "INVENTORY: "
IF gotmainkey = 1 THEN : PRINT "BRONZE KEY"
IF gotboxkey1 = 1 THEN : PRINT "SMALL KEY"
IF gotboxkey2 = 1 THEN : PRINT "SMALL KEY"
IF gotnote = 1 THEN : PRINT "NOTE"
IF gotcandle = 1 THEN : PRINT "CANDLE"
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF cmd$ = "NORTH" OR cmd$ = "GO NORTH" OR cmd$ = "N" THEN
IF r = 1 THEN : LET r = 2: GOTO moved
IF r = 2 THEN : LET r = 3: GOTO moved
END IF
IF cmd$ = "WEST" OR cmd$ = "GO WEST" OR cmd$ = "W" THEN
IF r = 1 THEN : LET r = 5: GOTO moved
IF r = 2 THEN : LET r = 6: GOTO moved
IF r = 3 THEN : LET r = 4: GOTO moved
IF r = 7 THEN : LET r = 2: GOTO moved
END IF
IF cmd$ = "SOUTH" OR cmd$ = "GO SOUTH" OR cmd$ = "S" THEN
IF r = 2 THEN : LET r = 1: GOTO moved
IF r = 3 THEN : LET r = 2: GOTO moved
END IF
IF cmd$ = "EAST" OR cmd$ = "GO EAST" OR cmd$ = "E" THEN
IF r = 4 THEN : LET r = 3: GOTO moved
IF r = 5 THEN : LET r = 1: GOTO moved
IF r = 6 THEN : LET r = 2: GOTO moved
END IF
IF (cmd$ = "EXAMINE OLD RUG" OR cmd$ = "EXAMINE RUG") AND r = 1 THEN
PRINT "IT IS OLD, STAINED AND WORN OUT."
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "EXAMINE HUGE TABLE" OR cmd$ = "EXAMINE TABLE") AND r = 2 THEN
PRINT "IT IS A LARGE GRAND LOOKING HARDWOOD TABLE."
PRINT "IT IS COVERED IN DUST AND HAS CHIPS IN IT."
IF gotnote = 0 THEN : PRINT "THERE IS A SMALL NOTE ON TOP OF IT."
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "EXAMINE CHAIR" OR cmd$ = "EXAMINE CHAIRS") AND r = 2 THEN
PRINT "IT MIGHT NOT BE A GOOD IDEA TO SIT ON THE ONES THAT ARE NOT BROKEN"
PRINT "BECAUSE THEY MIGHT BREAK TOO."
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "EXAMINE PAINTING") AND r = 2 THEN
PRINT "IT IS A PICTURE OF A MIDEVAL CASTLE."
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "EXAMINE SINK") AND r = 3 THEN
PRINT "YOU SEE DRIED OUT SPATTERS OF BLOOD IN THE SINK."
PRINT "YOU ALSO SEE A CANDLE AND SOME MATCHES IN IT."
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "EXAMINE COUNTER") AND r = 3 THEN
PRINT "IT IS PLAIN AND IS VERY DUSTY."
PRINT "THERE IS WRITING IN THE DUST."
PRINT "IT SAYS:"
PRINT "'I HAVE BEEN TRAPPED IN THIS HOUSE FOR DAYS NOW, UNABLE TO ESCAPE."
PRINT "THE FRONT DOOR REQUIRES A SPECIAL KEY TO BE OPEN FROM THE INSIDE."
PRINT "IT IS NOT THE SAME AS THE ONE THAT OPENS IT FROM THE FRONT."
PRINT "I WILL NOT LIVE MUCH LONGER, BUT FOR ANYONE WHO FINDS THEMSELF"
PRINT "TRAPPED IN THIS TERRIBLE PLACE, I HAVE JUST MADE AN INTERRESTING DISCOVERY."
PRINT "I AM NOT ONE HUNDRED PERCENT SURE, BUT I THINK...'"
PRINT "THE REST IS SMEARED AWAY."
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "EXAMINE BUCKET" OR cmd$ = "EXAMINE SMELLY BUCKET") AND r = 4 THEN
PRINT "IT IS FULL OF GREENISH BROWN SEMIHARD STUFF."
IF gotboxkey2 = 0 THEN : PRINT "THERE IS A SMALL KEY IN IT."
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "EXAMINE TOILET PAPER" OR cmd$ = "EXAMINE PAPER") AND gottp = 0 AND r = 4 THEN
PRINT "IT IS VERY OLD LOOKING."
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "EXAMINE PLAIN MAT" OR cmd$ = "EXAMINE MAT") AND r = 5 THEN
PRINT "IT LOOKS SLIGHTLY LESS THAN COZY..."
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "EXAMINE TORN UP BLANKET" OR cmd$ = "EXAMINE BLANKET") AND r = 5 THEN
PRINT "IT PROBABLY WONT KEEP YOU VERY WARM."
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "EXAMINE LARGE JEWLERY BOX" OR cmd$ = "EXAMINE JEWLERY BOX") AND r = 5 THEN
PRINT "IT IS INLAID WITH WHAT LOOKS LIKE MARBLE."
PRINT "THERE ARE TWO SMALL KEY HOLES IN THE MIDDLE."
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "EXAMINE ROPE") AND r = 6 THEN
PRINT "IT IS HANGING FROM AN ODD LOOKING DEVICE IN THE ROOF."
PRINT "IT LOOKS LIKE IT MIGHT ACTIVATE SOMETHING IF YOU PULL IT."
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "EXAMINE BLOOD") AND r = 6 THEN
PRINT "IT IS DRIED UP BLOOD ON THE FLOOR, WHAT MORE CAN I SAY!?"
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "TAKE NOTE" OR cmd$ = "GET NOTE") AND r = 2 AND gotnote = 0 THEN
PRINT "YOU TAKE THE NOTE."
LET gotnote = 1
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "TAKE PAINTING" OR cmd$ = "GET PAINTING") AND r = 2 AND gotboxkey1 = 0 THEN
PRINT "YOU GRAB THE PAINTING AND A SMALL KEY FALLS OUT FROM THE BACK OF IT."
PRINT "YOU PUT THE PAINTING BACK AND GRAB THE SMALL KEY."
LET gotboxkey1 = 1
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "TAKE CANDLE" OR cmd$ = "GET CANDLE") AND r = 3 AND gotcandle = 0 THEN
PRINT "YOU TAKE THE CANDLE."
LET gotcandle = 1
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "TAKE SMALL KEY" OR cmd$ = "TAKE KEY" OR cmd$ = "GET SMALL KEY" OR cmd$ = "GET KEY") AND r = 4 THEN
PRINT "YOU TAKE THE KEY AND GET NASTY STUFF ALL OVER YOUR HAND..."
LET gotboxkey2 = 1
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "TAKE LARGE BRONZE KEY" OR cmd$ = "TAKE BRONZE KEY" OR cmd$ = "TAKE KEY" OR cmd$ = "GET LARGE BRONZE KEY" OR cmd$ = "GET BRONZE KEY" OR cmd$ = "GET KEY") AND boxopen = 1 AND r = 5 THEN
PRINT "YOU TAKE THE LARGE BRONZE KEY."
LET gotmainkey = 1
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "TAKE ROLL OF TOILET PAPER" OR cmd$ = "TAKE TOILET PAPER" OR cmd$ = "GET ROLL OF TOILET PAPER" OR cmd$ = "GET TOILET PAPER") AND gottp = 0 THEN
PRINT "YOU PICK UP THE TOILET PAPER AND IT COMPLTELY FALLS APART IN YOUR HAND."
LET gottp = 1
DO
LOOP UNTIL LEN(INKEY$)
END IF
 
IF (cmd$ = "READ NOTE" OR cmd$ = "USE NOTE") AND gotnote = 1 THEN
PRINT "THE NOTE SAYS:"
PRINT "'BEHIND THE OLD CASTLE LIES HALF OF A TOOL OF YOUR FREEDOM.'"
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "PULL ROPE" OR cmd$ = "USE ROPE") AND r = 6 THEN
GOTO lose
END IF
IF (cmd$ = "UNLOCK JEWLERY BOX" OR cmd$ = "UNLOCK BOX") AND gotboxkey1 = 1 AND gotboxkey2 = 1 AND r = 5 THEN
PRINT "YOU INSERT THE TWO SMALL KEYS IN THE BOX AND IS SPRINGS OPEN"
PRINT "TO REVEAL A LAGRE BRONZE KEY."
LET boxopen = 1
DO
LOOP UNTIL LEN(INKEY$)
END IF
IF (cmd$ = "UNLOCK FRONT DOOR" OR cmd$ = "UNLOCK DOOR") AND gotmainkey = 1 AND r = 1 THEN
GOTO win
END IF
moved:
RETURN
 
r1:
COLOR 4
PRINT "YOU ENTER THE ENTRY WAY."
PRINT "YOU SEE AN OLD RUG LEADING TO WHAT APPEARS TO BE THE DINING ROOM."
PRINT "ANOTHER RUG LEADS TO A DIFFERENT ROOM."
PRINT
RETURN
 
r2:
COLOR 4
PRINT "YOU ENTER THE DINING ROOM."
PRINT "THERE ARE NO WINDOWS IN HERE, BUT THERE IS LIGHT FLOWING IN FROM THE"
PRINT "OTHER ROOM, YOU CAN BARELY SEE ANYTHING."
PRINT "THERE ARE SEVERAL DOORS LEADING TO DIFFERENT LOCATIONS."
PRINT "YOU SEE A TRAP DOOR THAT PROBABLY LEADS DOWN TO THE BASEMENT."
PRINT "THERE IS A HUGE TABLE IN THE MIDDLE OF THE ROOM."
PRINT "MOST OF THE CHAIRS SURROUNDING THE TABLE HAVE BROKEN LEGS."
PRINT "YOU ALSO SEE A PAINTING ON THE WALL."
PRINT
RETURN
 
r3:
COLOR 4
PRINT "YOU ENTER THE KITCHEN."
PRINT "YOU SEE A DOORWAY WITH THE DOOR MISSING."
PRINT "THERE IS A SINK AND A COUNTER."
PRINT "THERE IS A TON OF DUST ON THE COUNTER."
PRINT
RETURN
 
r4:
COLOR 4
PRINT "YOU ENTER THE BATHROOM."
PRINT "THERE IS A SMALL OPAQUE WINDOW ON THE WALL."
PRINT "THERE IS A DOOR THAT LEADS BACK TO THE KITCHEN."
PRINT "YOU SEE A BUCKET OF VILE SMELLING STUFF IN THE CORNER."
IF gottp = 0 THEN : PRINT "THERE IS A ROLL OF TOILET PAPER NEXT TO IT."
PRINT
RETURN
 
r5:
COLOR 4
PRINT "YOU ENTER THE BEDROOM."
PRINT "THERE IS A DOOR THAT LEADS BACK TO THE DINING ROOM."
PRINT "YOU SEE A PLAIN MAT ON THE FLOOR WITH A TORN UP BLANKET."
PRINT "YOU ALSO SEE A LARGE JEWLERY BOX."
PRINT
RETURN
 
r6:
COLOR 4
PRINT "YOU ENTER THE BASEMENT."
IF gotcandle = 1 THEN
PRINT "YOU LIGHT A CANDLE."
PRINT "YOU SEE A ROPE IN THE CENTER OF THE ROOM."
PRINT "THERE IS ALSO DREID UP BLOOD ON THE FLOOR."
ELSE
PRINT "THERE ARE NO WINDOWS IN HERE AND YOU CANT SEE ANYTHING."
PRINT "TRY TO SEE IF YOU CAN FIND A CANDLE."
PRINT "YOU HEAD BACK UP THE LADDER."
LET r = 2
END IF
PRINT
RETURN
 
win:
COLOR 14
PRINT "YOU UNLOCK THE DOOR, OPEN IT AND WALK OUTSIDE AND SMELL THE FRESH AIR."
PRINT "THE SUN IS SETTING. IF YOU HAD STAYED IN THERE LONGER, YOU WOULD"
PRINT "BE IN COMPLETE DARKNESS AND PROBABLY HAD TO SPEND THE NIGHT IN THERE!"
PRINT "REALIZING THAT YOU ARE STILL GROUNDED, YOU HEAD BACK HOME BEFORE YOUR"
PRINT "MOM NOTICES THAT YOU WERE GONE..."
PRINT
PRINT "YOU WIN!"
PRINT "PRESS ANY KEY..."
DO
LOOP UNTIL LEN(INKEY$)
GOTO menu
 
lose:
COLOR 14
PRINT "YOU HEAR SOMETHING UNLOCK FOLLOWD BY A BIG CRASH."
PRINT "YOUR CANDLE BLOWS OUT."
PRINT "A LARGE BLADE SWINGS DOWN FROOM THE CIELING AND DECAPITATES YOU!"
PRINT
PRINT "GAME OVER!"
PRINT "PRESS ANY KEY..."
DO
LOOP UNTIL LEN(INKEY$)
GOTO menu
[/code]

Step 6: Bonus 2: Hunt the Wumpus.

The wumpus game for some reason has become real popular lately. People even want to put it on the arduino. If you do not have an  arduino you can still play the original game on your linux system. (Requires the "C" development system")

Download the archive.

wumpus-1.4.tar.gz

Extract the archive

$ tar zxvf wumpus-1.4.tar.gz
wumpus-1.4/COPYING
wumpus-1.4/Makefile
wumpus-1.4/README
wumpus-1.4/superhack.c
wumpus-1.4/wumpus.6
wumpus-1.4/wumpus.c
wumpus-1.4/wumpus.spec
wumpus-1.4/wumpus.xml

Change to the directory.

$ cd wumpus-1.4

Get a directory listing to see what is there.

wumpus-1.4]$ ls
COPYING   README       wumpus.6  wumpus.spec
Makefile  superhack.c  wumpus.c  wumpus.xml

Compile the program.

wumpus-1.4]$ make
cc  wumpus.c -o wumpus
cc  superhack.c -o superhack

Get a new listing. See that superhack and wumpus are added. The compiled programs.

wumpus-1.4]$ ls
COPYING   README     superhack.c  wumpus.6  wumpus.spec
Makefile  superhack  wumpus       wumpus.c  wumpus.xml

Play wumpus.

wumpus-1.4]$ ./wumpus
INSTRUCTIONS (Y-N)
?y
WELCOME TO 'HUNT THE WUMPUS'
  THE WUMPUS LIVES IN A CAVE OF 20 ROOMS. EACH ROOM
HAS 3 TUNNELS LEADING TO OTHER ROOMS. (LOOK AT A
DODECAHEDRON TO SEE HOW THIS WORKS-IF YOU DON'T KNOW
WHAT A DODECAHEDRON IS, ASK SOMEONE)

     HAZARDS:
 BOTTOMLESS PITS - TWO ROOMS HAVE BOTTOMLESS PITS IN THEM
     IF YOU GO THERE, YOU FALL INTO THE PIT (& LOSE!)
 SUPER BATS - TWO OTHER ROOMS HAVE SUPER BATS. IF YOU
     GO THERE, A BAT GRABS YOU AND TAKES YOU TO SOME OTHER
     ROOM AT RANDOM. (WHICH MAY BE TROUBLESOME)
TYPE AN E THEN RETURN
?


Eric Raymond did not like the wumpus interface so he make an alternate version called superhack.

wumpus-1.4]$ ./superhack
Hunt the Superhack
You are in room 8.  Exits lead to 1, 7, 9.  You have 5 pies left.
I smell perfume!
Droids nearby!
Droids nearby!
Throw, move or help [t,m,?]?


Enjoy.

Step 7: Aklabeth

Requires Qbasic or equivalent


 
0  ON ERROR GOTO 4
 
1  SCREEN 1: VIEW PRINT: CLS : q$ = "": DIM pw(5): DIM c(5): DIM m$(10), ml%(10, 1), mz%(10, 1): DIM w$(5)
 
4  REM PR# 0: IN# 0
 
5  REM HIMEM: 49151
 
7  CLEAR : GOSUB 60000
 
8  RANDOMIZE ln
 
9  le = 0
 
10  SCREEN 1: VIEW PRINT: CLS : PRINT TAB(12); : PRINT " WELCOME TO AKALABETH, WORLD OF DOOM!"
 
20  DIM dn%(10, 10), te%(20, 20), xx%(10), yy%(10), pe%(10, 3), ld%(10, 5), cd%(10, 3), ft%(10, 5), la%(10, 3)
 
30  FOR x = 0 TO 20: te%(x, 0) = 1: te%(0, x) = 1: te%(x, 20) = 1: te%(20, x) = 1: NEXT
 
35  LOCATE 23, 1: PRINT "  (PLEASE WAIT)";
 
40  FOR x = 1 TO 19: FOR y = 1 TO 19: te%(x, y) = INT(RND(1) ^ 5 * 4.5)
 
41  IF te%(x, y) = 3 AND RND(1) > .5 THEN te%(x, y) = 0
 
42  NEXT: PRINT "."; : NEXT: SLEEP 2
 
50  te%(INT(RND(1) * 19 + 1), INT(RND(1) * 19 + 1)) = 5: tx = INT(RND(1) * 19 + 1): ty = INT(RND(1) * 19 + 1): te%(tx, ty) = 3
 
51  xx%(0) = 139: yy%(0) = 79
 
52  FOR x = 2 TO 20 STEP 2: xx%(x / 2) = INT(ATN(1 / x) / ATN(1) * 140 + .5): yy%(x / 2) = INT(xx%(x / 2) * 4 / 7)
 
53  pe%(x / 2, 0) = 139 - xx%(x / 2): pe%(x / 2, 1) = 139 + xx%(x / 2): pe%(x / 2, 2) = 79 - yy%(x / 2): pe%(x / 2, 3) = 79 + yy%(x / 2): NEXT
 
54  pe%(0, 0) = 0: pe%(0, 1) = 279: pe%(0, 2) = 0: pe%(0, 3) = 159
 
55  FOR x = 1 TO 10: cd%(x, 0) = 139 - xx%(x) / 3: cd%(x, 1) = 139 + xx%(x) / 3: cd%(x, 2) = 79 - yy%(x) * .7: cd%(x, 3) = 79 + yy%(x): NEXT: PRINT ".";
 
56  FOR x = 0 TO 9: ld%(x, 0) = (pe%(x, 0) * 2 + pe%(x + 1, 0)) / 3: ld%(x, 1) = (pe%(x, 0) + 2 * pe%(x + 1, 0)) / 3: w = ld%(x, 0) - pe%(x, 0)
 
57  ld%(x, 2) = pe%(x, 2) + w * 4 / 7: ld%(x, 3) = pe%(x, 2) + 2 * w * 4 / 7: ld%(x, 4) = (pe%(x, 3) * 2 + pe%(x + 1, 3)) / 3: ld%(x, 5) = (pe%(x, 3) + 2 * pe%(x + 1, 3)) / 3
 
58  ld%(x, 2) = ld%(x, 4) - (ld%(x, 4) - ld%(x, 2)) * .8: ld%(x, 3) = ld%(x, 5) - (ld%(x, 5) - ld%(x, 3)) * .8: IF ld%(x, 3) = ld%(x, 4) THEN ld%(x, 3) = ld%(x, 3) - 1
 
59  NEXT
 
60  FOR x = 0 TO 9: ft%(x, 0) = 139 - xx%(x) / 3: ft%(x, 1) = 139 + xx%(x) / 3: ft%(x, 2) = 139 - xx%(x + 1) / 3: ft%(x, 3) = 139 + xx%(x + 1) / 3
 
61  ft%(x, 4) = 79 + (yy%(x) * 2 + yy%(x + 1)) / 3: ft%(x, 5) = 79 + (yy%(x) + 2 * yy%(x + 1)) / 3: NEXT
 
62  FOR x = 0 TO 9: la%(x, 0) = (ft%(x, 0) * 2 + ft%(x, 1)) / 3: la%(x, 1) = (ft%(x, 0) + 2 * ft%(x, 1)) / 3: la%(x, 3) = ft%(x, 4): la%(x, 2) = 159 - la%(x, 3): NEXT
 
68  LOCATE 1, 1
 
69  LOCATE 1, 1
 
70  GOSUB 100: GOTO 1000
 
90  FOR x = 0 TO 9: FOR y = 0 TO 5: PRINT ld%(x, y); " "; : NEXT: PRINT : NEXT: DO: q$ = INKEY$: LOOP WHILE q$ = ""
 
100  SCREEN 1: VIEW PRINT 1 TO 21: CLS 2: VIEW PRINT 22 TO 25: WINDOW SCREEN (0, 0)-(279, 199): FOR y = -1 TO 1: FOR x = -1 TO 1
 
105  LINE (138, 75)-(142, 75): LINE (140, 73)-(140, 77)
 
110  zz = te%(tx + x, ty + y): x1 = 65 + (x + 1) * 50: y1 = (y + 1) * 50
 
120  IF zz = 2 THEN LINE (x1 + 20, y1 + 20)-(x1 + 30, y1 + 20): LINE -(x1 + 30, y1 + 30): LINE -(x1 + 20, y1 + 30): LINE -(x1 + 20, y1 + 20)
 
130  IF zz = 3 THEN
       LINE (x1 + 10, y1 + 10)-(x1 + 20, y1 + 10): LINE -(x1 + 20, y1 + 40): LINE -(x1 + 10, y1 + 40)
       LINE -(x1 + 10, y1 + 30): LINE -(x1 + 40, y1 + 30): LINE -(x1 + 40, y1 + 40): LINE -(x1 + 30, y1 + 40): LINE -(x1 + 30, y1 + 10): LINE -(x1 + 40, y1 + 10)
       LINE -(x1 + 40, y1 + 20): LINE -(x1 + 10, y1 + 20): LINE -(x1 + 10, y1 + 10)
     END IF
 
140  IF zz = 4 THEN LINE (x1 + 20, y1 + 20)-(x1 + 30, y1 + 30): LINE (x1 + 20, y1 + 30)-(x1 + 30, y1 + 20)
 
150  IF zz = 5 THEN
       LINE (x1, y1)-(x1 + 50, y1): LINE -(x1 + 50, y1 + 50): LINE -(x1, y1 + 50): LINE -(x1, y1)
       LINE (x1 + 10, y1 + 10)-(x1 + 10, y1 + 40): LINE -(x1 + 40, y1 + 40)
       LINE -(x1 + 40, y1 + 10): LINE -(x1 + 10, y1 + 10): LINE -(x1 + 40, y1 + 40): LINE (x1 + 10, y1 + 40)-(x1 + 40, y1 + 10)
     END IF
 
160  IF zz = 1 THEN
       LINE (x1 + 10, y1 + 50)-(x1 + 10, y1 + 40): LINE -(x1 + 20, y1 + 30): LINE -(x1 + 40, y1 + 30)
       LINE -(x1 + 40, y1 + 50): LINE (x1, y1 + 10)-(x1 + 10, y1 + 10): LINE (x1 + 50, y1 + 10)-(x1 + 40, y1 + 10)
       LINE (x1, y1 + 40)-(x1 + 10, y1 + 40): LINE (x1 + 40, y1 + 40)-(x1 + 50, y1 + 40)
     END IF
 
170  IF zz = 1 THEN LINE (x1 + 10, y1)-(x1 + 10, y1 + 20): LINE -(x1 + 20, y1 + 20): LINE -(x1 + 20, y1 + 30): LINE -(x1 + 30, y1 + 30): LINE -(x1 + 30, y1 + 10): LINE -(x1 + 40, y1 + 10): LINE -(x1 + 40, y1)
 
190  NEXT: NEXT: WINDOW: RETURN
 
200  SCREEN 1: VIEW PRINT 1 TO 21: CLS 2: VIEW PRINT 22 TO 25: WINDOW SCREEN (0, 0)-(279, 199): di = 0: tb = 2
 
202  ce = dn%(px + dx * di, py + dy * di): le = dn%(px + dx * di + dy, py + dy * di - dx): ri = dn%(px + dx * di - dy, py + dy * di + dx)
 
204  l1 = pe%(di, 0): r1 = pe%(di, 1): t1 = pe%(di, 2): b1 = pe%(di, 3): l2 = pe%(di + 1, 0): r2 = pe%(di + 1, 1): t2 = pe%(di + 1, 2): b2 = pe%(di + 1, 3)
 
205  ce = INT(ce): le = INT(le): ri = INT(ri)
 
206  mc = INT(ce / 10): ce = ce - mc * 10: le = INT((le / 10 - INT(le / 10)) * 10 + .1): ri = INT((ri / 10 - INT(ri / 10)) * 10 + .1)
 
208  IF di = 0 THEN 216
 
210  IF ce = 1 OR ce = 3 OR ce = 4 THEN LINE (l1, t1)-(r1, t1): LINE -(r1, b1): LINE -(l1, b1): LINE -(l1, t1)
 
212  IF ce = 1 OR ce = 3 THEN en = 1: GOTO 260
 
214  IF ce = 4 THEN LINE (cd%(di, 0), cd%(di, 3))-(cd%(di, 0), cd%(di, 2)): LINE -(cd%(di, 1), cd%(di, 2)): LINE -(cd%(di, 1), cd%(di, 3)): en = 1: GOTO 260
 
216  IF le = 1 OR le = 3 OR le = 4 THEN LINE (l1, t1)-(l2, t2): LINE (l1, b1)-(l2, b2)
 
218  IF ri = 1 OR ri = 3 OR ri = 4 THEN LINE (r1, t1)-(r2, t2): LINE (r1, b1)-(r2, b2)
 
220  IF le = 4 AND di > 0 THEN LINE (ld%(di, 0), ld%(di, 4))-(ld%(di, 0), ld%(di, 2)): LINE -(ld%(di, 1), ld%(di, 3)): LINE -(ld%(di, 1), ld%(di, 5))
 
222  IF le = 4 AND di = 0 THEN LINE (0, ld%(di, 2) - 3)-(ld%(di, 1), ld%(di, 3)): LINE -(ld%(di, 1), ld%(di, 5))
 
224  IF ri = 4 AND di > 0 THEN LINE (279 - ld%(di, 0), ld%(di, 4))-(279 - ld%(di, 0), ld%(di, 2)): LINE -(279 - ld%(di, 1), ld%(di, 3)): LINE -(279 - ld%(di, 1), ld%(di, 5))
 
226  IF ri = 4 AND di = 0 THEN LINE (279, ld%(di, 2) - 3)-(279 - ld%(di, 1), ld%(di, 3)): LINE -(279 - ld%(di, 1), ld%(di, 5))
 
228  IF le = 3 OR le = 1 OR le = 4 THEN 234
 
230  IF di <> 0 THEN LINE (l1, t1)-(l1, b1)
 
232  LINE (l1, t2)-(l2, t2): LINE -(l2, b2): LINE -(l1, b2)
 
234  IF ri = 3 OR ri = 1 OR ri = 4 THEN 240
 
236  IF di <> 0 THEN LINE (r1, t1)-(r1, b1)
 
238  LINE (r1, t2)-(r2, t2): LINE -(r2, b2): LINE -(r1, b2)
 
240  IF ce = 7 OR ce = 9 THEN LINE (ft%(di, 0), ft%(di, 4))-(ft%(di, 2), ft%(di, 5)): LINE -(ft%(di, 3), ft%(di, 5)): LINE -(ft%(di, 1), ft%(di, 4)): LINE -(ft%(di, 0), ft%(di, 4))
 
242  IF ce = 8 THEN LINE (ft%(di, 0), 158 - ft%(di, 4))-(ft%(di, 2), 158 - ft%(di, 5)): LINE -(ft%(di, 3), 158 - ft%(di, 5)): LINE -(ft%(di, 1), 158 - ft%(di, 4)): LINE -(ft%(di, 0), 158 - ft%(di, 4))
 
244  IF ce = 7 OR ce = 8 THEN ba = la%(di, 3): TP = la%(di, 2): LX = la%(di, 0): RX = la%(di, 1): LINE (LX, ba)-(LX, TP): LINE (RX, TP)-(RX, ba)
 
246  IF ce = 7 OR ce = 8 THEN y1 = (ba * 4 + TP) / 5: Y2 = (ba * 3 + TP * 2) / 5: Y3 = (ba * 2 + TP * 3) / 5: Y4 = (ba + TP * 4) / 5: LINE (LX, y1)-(RX, y1): LINE (LX, Y2)-(RX, Y2): LINE (LX, Y3)-(RX, Y3): LINE (LX, Y4)-(RX, Y4)
 
248  IF di > 0 AND ce = 5 THEN LINE (139 - 10 / di, pe%(di, 3))-(139 - 10 / di, pe%(di, 3) - 10 / di): LINE -(139 + 10 / di, pe%(di, 3) - 10 / di): LINE -(139 + 10 / di, pe%(di, 3)): LINE -(139 - 10 / di, pe%(di, 3))
 
249  IF ce = 5 AND di > 0 THEN VIEW PRINT: LOCATE 1, tb: PRINT "CHEST! "; : tb = tb + 8
 
250  IF di > 0 AND ce = 5 THEN LINE (139 - 10 / di, pe%(di, 3) - 10 / di)-(139 - 5 / di, pe%(di, 3) - 15 / di): LINE -(139 + 15 / di, pe%(di, 3) - 15 / di): LINE -(139 + 15 / di, pe%(di, 3) - 5 / di): LINE -(139 + 10 / di, pe%(di, 3))
 
252  IF di > 0 AND ce = 5 THEN LINE (139 + 10 / di, pe%(di, 3) - 10 / di)-(139 + 15 / di, pe%(di, 3) - 15 / di)
 
260  IF mc < 1 THEN 490
 
265  b = 79 + yy%(di): c = 139
 
266  IF mc = 8 THEN VIEW PRINT: LOCATE 1, tb: PRINT "CHEST! "; : tb = tb + 8: PRINT : GOTO 269: REM call
 
267  VIEW PRINT: LOCATE 1, tb: PRINT m$(mc); : tb = tb + LEN(m$(mc)) + 2: PRINT : REM call
 
269  IF di = 0 THEN 490
 
270  ON mc GOTO 300, 310, 320, 330, 340, 350, 360, 370, 380, 390
 
280  GOTO 490
 
300  LINE (c - 23 / di, b)-(c - 15 / di, b): LINE -(c - 15 / di, b - 15 / di): LINE -(c - 8 / di, b - 30 / di): LINE -(c + 8 / di, b - 30 / di): LINE -(c + 15 / di, b - 15 / di): LINE -(c + 15 / di, b): LINE -(c + 23 / di, b)
 
301  LINE (c, b - 26 / di)-(c, b - 65 / di): LINE (c - 2 / di + .499, b - 38 / di)-(c + 2 / di + .499, b - 38 / di)
     LINE (c - 3 / di + .499, b - 45 / di)-(c + 3 / di + .499, b - 45 / di): LINE (c - 5 / di + .499, b - 53 / di)-(c + 5 / di + .499, b - 53 / di)
 
302  LINE (c - 23 / di, b - 56 / di)-(c - 30 / di, b - 53 / di): LINE -(c - 23 / di, b - 45 / di): LINE -(c - 23 / di, b - 53 / di): LINE -(c - 8 / di, b - 38 / di)
 
303  LINE (c - 15 / di, b - 45 / di)-(c - 8 / di, b - 60 / di): LINE -(c + 8 / di, b - 60 / di): LINE -(c + 15 / di, b - 45 / di)
     LINE -(c + 15 / di, b - 42 / di): LINE -(c + 15 / di, b - 57 / di): LINE (c + 12 / di, b - 45 / di)-(c + 20 / di, b - 45 / di)
 
304  LINE (c, b - 75 / di)-(c - 5 / di + .499, b - 80 / di): LINE -(c - 8 / di, b - 75 / di): LINE -(c - 5 / di + .499, b - 65 / di)
     LINE -(c + 5 / di + .499, b - 65 / di): LINE -(c + 5 / di + .499, b - 68 / di): LINE -(c - 5 / di + .499, b - 68 / di): LINE -(c - 5 / di + .499, b - 65 / di)
 
305  LINE -(c + 5 / di + .499, b - 65 / di): LINE -(c + 8 / di, b - 75 / di): LINE -(c + 5 / di + .499, b - 80 / di): LINE -(c - 5 / di + .499, b - 80 / di): PSET (c - 5 / di + .499, b - 72 / di): PSET (c + 5 / di + .499, b - 72 / di)
 
309  GOTO 490
 
310  LINE (c, b - 56 / di)-(c, b - 8 / di): LINE -(c + 10 / di, b): LINE -(c + 30 / di, b): LINE -(c + 30 / di, b - 45 / di): LINE -(c + 10 / di, b - 64 / di): LINE -(c, b - 56 / di)
 
311  LINE -(c - 10 / di, b - 64 / di): LINE -(c - 30 / di, b - 45 / di): LINE -(c - 30 / di, b): LINE -(c - 10 / di, b): LINE -(c, b - 8 / di)
 
312  LINE (c - 10 / di, b - 64 / di)-(c - 10 / di, b - 75 / di): LINE -(c, b - 83 / di)
     LINE -(c + 10 / di, b - 75 / di): LINE -(c, b - 79 / di): LINE -(c - 10 / di, b - 75 / di): LINE -(c, b - 60 / di)
     LINE -(c + 10 / di, b - 75 / di): LINE -(c + 10 / di, b - 64 / di)
 
319  GOTO 490
 
320  LINE (c + 5 / di, b - 30 / di)-(c, b - 25 / di): LINE -(c - 5 / di, b - 30 / di): LINE -(c - 15 / di, b - 5 / di): LINE -(c - 10 / di, b): LINE -(c + 10 / di, b): LINE -(c + 15 / di, b - 5 / di)
 
321  LINE -(c + 20 / di, b - 5 / di): LINE -(c + 10 / di, b): LINE -(c + 15 / di, b - 5 / di)
     LINE -(c + 5 / di, b - 30 / di): LINE -(c + 10 / di, b - 40 / di): LINE -(c + 3 / di + .499, b - 35 / di)
     LINE -(c - 3 / di + .499, b - 35 / di): LINE -(c - 10 / di, b - 40 / di): LINE -(c - 5 / di, b - 30 / di)
 
322  LINE (c - 5 / di, b - 33 / di)-(c - 3 / di + .499, b - 30 / di): LINE (c + 5 / di, b - 33 / di)-(c + 3 / di + .499, b - 30 / di): LINE (c - 5 / di, b - 20 / di)-(c - 5 / di, b - 15 / di)
 
323  LINE (c + 5 / di, b - 20 / di)-(c + 5 / di, b - 15 / di): LINE (c - 7 / di, b - 20 / di)-(c - 7 / di, b - 15 / di): LINE (c + 7 / di, b - 20 / di)-(c + 7 / di, b - 15 / di)
 
329  GOTO 490
 
330  LINE (c, b)-(c - 15 / di, b): LINE -(c - 8 / di, b - 8 / di): LINE -(c - 8 / di, b - 15 / di): LINE -(c - 15 / di, b - 23 / di): LINE -(c - 15 / di, b - 15 / di): LINE -(c - 23 / di, b - 23 / di)
 
331  LINE -(c - 23 / di, b - 45 / di): LINE -(c - 15 / di, b - 53 / di): LINE -(c - 8 / di, b - 53 / di): LINE -(c - 15 / di, b - 68 / di): LINE -(c - 8 / di, b - 75 / di): LINE -(c, b - 75 / di)
 
332  LINE (c, b)-(c + 15 / di, b): LINE -(c + 8 / di, b - 8 / di): LINE -(c + 8 / di, b - 15 / di): LINE -(c + 15 / di, b - 23 / di): LINE -(c + 15 / di, b - 15 / di): LINE -(c + 23 / di, b - 23 / di)
 
333  LINE -(c + 23 / di, b - 45 / di): LINE -(c + 15 / di, b - 53 / di): LINE -(c + 8 / di, b - 53 / di): LINE -(c + 15 / di, b - 68 / di): LINE -(c + 8 / di, b - 75 / di): LINE -(c, b - 75 / di)
 
334  LINE (c - 15 / di, b - 68 / di)-(c + 15 / di, b - 68 / di): LINE (c - 8 / di, b - 53 / di)-(c + 8 / di, b - 53 / di): LINE (c - 23 / di, b - 15 / di)-(c + 8 / di, b - 45 / di)
 
335  LINE (c - 8 / di, b - 68 / di)-(c, b - 60 / di): LINE -(c + 8 / di, b - 68 / di): LINE -(c + 8 / di, b - 60 / di): LINE -(c - 8 / di, b - 60 / di): LINE -(c - 8 / di, b - 68 / di)
 
336  LINE (c, b - 38 / di)-(c - 8 / di, b - 38 / di): LINE -(c + 8 / di, b - 53 / di): LINE -(c + 8 / di, b - 45 / di): LINE -(c + 15 / di, b - 45 / di): LINE -(c, b - 30 / di): LINE -(c, b - 38 / di)
 
339  GOTO 490
 
340  LINE (c - 10 / di, b - 15 / di)-(c - 10 / di, b - 30 / di): LINE -(c - 15 / di, b - 20 / di): LINE -(c - 15 / di, b - 15 / di): LINE -(c - 15 / di, b): LINE -(c + 15 / di, b): LINE -(c + 15 / di, b - 15 / di): LINE -(c - 15 / di, b - 15 / di)
 
341  LINE (c - 15 / di, b - 10 / di)-(c + 15 / di, b - 10 / di): LINE (c - 15 / di, b - 5 / di)-(c + 15 / di, b - 5 / di)
 
342  LINE (c, b - 15 / di)-(c - 5 / di, b - 20 / di): LINE -(c - 5 / di, b - 35 / di): LINE -(c + 5 / di, b - 35 / di): LINE -(c + 5 / di, b - 20 / di): LINE -(c + 10 / di, b - 15 / di)
 
343  LINE (c - 5 / di, b - 20 / di)-(c + 5 / di, b - 20 / di): LINE (c - 5 / di, b - 25 / di)-(c + 5 / di, b - 25 / di): LINE (c - 5 / di, b - 30 / di)-(c + 5 / di, b - 30 / di)
 
344  LINE (c - 10 / di, b - 35 / di)-(c - 10 / di, b - 40 / di): LINE -(c - 5 / di, b - 45 / di): LINE -(c + 5 / di, b - 45 / di): LINE -(c + 10 / di, b - 40 / di): LINE -(c + 10 / di, b - 35 / di)
 
345  LINE (c - 10 / di, b - 40 / di)-(c, b - 45 / di): LINE -(c + 10 / di, b - 40 / di)
 
346  LINE (c - 5 / di, b - 40 / di)-(c + 5 / di, b - 40 / di): LINE -(c + 15 / di, b - 30 / di): LINE -(c, b - 40 / di): LINE -(c - 15 / di, b - 30 / di): LINE -(c - 5 / di + .499, b - 40 / di)
 
349  GOTO 490
 
350  LINE (c - 20 / di, 79 - yy%(di))-(c - 20 / di, b - 88 / di): LINE -(c - 10 / di, b - 83 / di): LINE -(c + 10 / di, b - 83 / di): LINE -(c + 20 / di, b - 88 / di): LINE -(c + 20 / di, 79 - yy%(di)): LINE -(c - 20 / di, 79 - yy%(di))
 
351  LINE (c - 20 / di, b - 88 / di)-(c - 30 / di, b - 83 / di): LINE -(c - 30 / di, b - 78 / di): LINE (c + 20 / di, b - 88 / di)-(c + 30 / di, b - 83 / di): LINE -(c + 40 / di, b - 83 / di)
 
352  LINE (c - 15 / di, b - 86 / di)-(c - 20 / di, b - 83 / di): LINE -(c - 20 / di, b - 78 / di): LINE -(c - 30 / di, b - 73 / di): LINE -(c - 30 / di, b - 68 / di): LINE -(c - 20 / di, b - 63 / di)
 
353  LINE (c - 10 / di, b - 83 / di)-(c - 10 / di, b - 58 / di): LINE -(c, b - 50 / di): LINE (c + 10 / di, b - 83 / di)-(c + 10 / di, b - 78 / di): LINE -(c + 20 / di, b - 73 / di): LINE -(c + 20 / di, b - 40 / di)
 
354  LINE (c + 15 / di, b - 85 / di)-(c + 20 / di, b - 78 / di): LINE -(c + 30 / di, b - 76 / di): LINE -(c + 30 / di, b - 60 / di)
 
355  LINE (c, b - 83 / di)-(c, b - 73 / di): LINE -(c + 10 / di, b - 68 / di): LINE -(c + 10 / di, b - 63 / di): LINE -(c, b - 58 / di)
 
359  GOTO 490
 
360  LINE (c + 5 / di + .499, b - 10 / di)-(c - 5 / di + .499, b - 10 / di): LINE -(c, b - 15 / di): LINE -(c + 10 / di, b - 20 / di): LINE -(c + 5 / di + .499, b - 15 / di): LINE -(c + 5 / di + .499, b - 10 / di)
 
361  LINE -(c + 7 / di + .499, b - 6 / di): LINE -(c + 5 / di + .499, b - 3 / di): LINE -(c - 5 / di + .499, b - 3 / di): LINE -(c - 7 / di + .499, b - 6 / di): LINE -(c - 5 / di + .499, b - 10 / di)
 
362  LINE (c + 2 / di + .499, b - 3 / di)-(c + 5 / di + .499, b): LINE -(c + 8 / di, b)
     LINE (c - 2 / di + .499, b - 3 / di)-(c - 5 / di + .499, b): LINE -(c - 8 / di, b): PSET (c + 3 / di + .499, b - 8 / di)
     PSET (c - 3 / di + .499, b - 8 / di): LINE (c + 3 / di + .499, b - 5 / di)-(c - 3 / di + .499, b - 5 / di)
 
363  GOTO 490
 
370  LINE (139 - 10 / di, pe%(di, 3))-(139 - 10 / di, pe%(di, 3) - 10 / di): LINE -(139 + 10 / di, pe%(di, 3) - 10 / di): LINE -(139 + 10 / di, pe%(di, 3)): LINE -(139 - 10 / di, pe%(di, 3))
 
371  LINE (139 - 10 / di, pe%(di, 3) - 10 / di)-(139 - 5 / di, pe%(di, 3) - 15 / di): LINE -(139 + 15 / di, pe%(di, 3) - 15 / di): LINE -(139 + 15 / di, pe%(di, 3) - 5 / di): LINE -(139 + 10 / di, pe%(di, 3))
 
372  LINE (139 + 10 / di, pe%(di, 3) - 10 / di)-(139 + 15 / di, pe%(di, 3) - 15 / di)
 
373  GOTO 490
 
380  LINE (c - 14 / di, b - 46 / di)-(c - 12 / di, b - 37 / di): LINE -(c - 20 / di, b - 32 / di): LINE -(c - 30 / di, b - 32 / di)
     LINE -(c - 22 / di, b - 24 / di): LINE -(c - 40 / di, b - 17 / di): LINE -(c - 40 / di, b - 7 / di): LINE -(c - 38 / di, b - 5 / di)
     LINE -(c - 40 / di, b - 3 / di): LINE -(c - 40 / di, b)
 
381  LINE -(c - 36 / di, b): LINE -(c - 34 / di, b - 2 / di): LINE -(c - 32 / di, b): LINE -(c - 28 / di, b)
     LINE -(c - 28 / di, b - 3 / di): LINE -(c - 30 / di, b - 5 / di): LINE -(c - 28 / di, b - 7 / di)
     LINE -(c - 28 / di, b - 15 / di): LINE -(c, b - 27 / di)
 
382  LINE (c + 14 / di, b - 46 / di)-(c + 12 / di, b - 37 / di): LINE -(c + 20 / di, b - 32 / di)
     LINE -(c + 30 / di, b - 32 / di): LINE -(c + 22 / di, b - 24 / di): LINE -(c + 40 / di, b - 17 / di)
     LINE -(c + 40 / di, b - 7 / di): LINE -(c + 38 / di, b - 5 / di): LINE -(c + 40 / di, b - 3 / di): LINE -(c + 40 / di, b)
 
383  LINE -(c + 36 / di, b): LINE -(c + 34 / di, b - 2 / di): LINE -(c + 32 / di, b): LINE -(c + 28 / di, b)
     LINE -(c + 28 / di, b - 3 / di): LINE -(c + 30 / di, b - 5 / di): LINE -(c + 28 / di, b - 7 / di)
     LINE -(c + 28 / di, b - 15 / di): LINE -(c, b - 27 / di)
 
384  LINE (c + 6 / di, b - 48 / di)-(c + 38 / di, b - 41 / di): LINE -(c + 40 / di, b - 42 / di): LINE -(c + 18 / di, b - 56 / di)
     LINE -(c + 12 / di, b - 56 / di): LINE -(c + 10 / di, b - 57 / di): LINE -(c + 8 / di, b - 56 / di): LINE -(c - 8 / di, b - 56 / di)
     LINE -(c - 10 / di, b - 58 / di): LINE -(c + 14 / di, b - 58 / di): LINE -(c + 16 / di, b - 59 / di)
 
385  LINE -(c + 8 / di, b - 63 / di): LINE -(c + 6 / di, b - 63 / di): LINE -(c + 2 / di + .499, b - 70 / di)
     LINE -(c + 2 / di + .499, b - 63 / di): LINE -(c - 2 / di + .499, b - 63 / di): LINE -(c - 2 / di + .499, b - 70 / di)
     LINE -(c - 6 / di, b - 63 / di): LINE -(c - 8 / di, b - 63 / di): LINE -(c - 16 / di, b - 59 / di): LINE -(c - 14 / di, b - 58 / di)
 
386  LINE -(c - 10 / di, b - 57 / di): LINE -(c - 12 / di, b - 56 / di): LINE -(c - 18 / di, b - 56 / di): LINE -(c - 36 / di, b - 47 / di)
     LINE -(c - 36 / di, b - 39 / di): LINE -(c - 28 / di, b - 41 / di): LINE -(c - 28 / di, b - 46 / di): LINE -(c - 20 / di, b - 50 / di)
     LINE -(c - 18 / di, b - 50 / di): LINE -(c - 14 / di, b - 46 / di)
 
387  GOTO 3087
 
390  LINE (c + 6 / di, b - 60 / di)-(c + 30 / di, b - 90 / di): LINE -(c + 60 / di, b - 30 / di): LINE -(c + 60 / di, b - 10 / di): LINE -(c + 30 / di, b - 40 / di): LINE -(c + 15 / di, b - 40 / di)
 
391  LINE (c - 6 / di, b - 60 / di)-(c - 30 / di, b - 90 / di): LINE -(c - 60 / di, b - 30 / di): LINE -(c - 60 / di, b - 10 / di): LINE -(c - 30 / di, b - 40 / di): LINE -(c - 15 / di, b - 40 / di)
 
392  LINE (c, b - 25 / di)-(c + 6 / di, b - 25 / di): LINE -(c + 10 / di, b - 20 / di): LINE -(c + 12 / di, b - 10 / di): LINE -(c + 10 / di, b - 6 / di)
     LINE -(c + 10 / di, b): LINE -(c + 14 / di, b): LINE -(c + 15 / di, b - 5 / di): LINE -(c + 16 / di, b): LINE -(c + 20 / di, b)
 
393  LINE -(c + 20 / di, b - 6 / di): LINE -(c + 18 / di, b - 10 / di): LINE -(c + 18 / di, b - 20 / di): LINE -(c + 15 / di, b - 30 / di): LINE -(c + 15 / di, b - 45 / di): LINE -(c + 40 / di, b - 60 / di): LINE -(c + 40 / di, b - 70 / di)
 
394  LINE -(c + 10 / di, b - 55 / di): LINE -(c + 6 / di, b - 60 / di): LINE -(c + 10 / di, b - 74 / di): LINE -(c + 6 / di, b - 80 / di)
     LINE -(c + 4 / di + .499, b - 80 / di): LINE -(c + 3 / di + .499, b - 82 / di): LINE -(c + 2 / di + .499, b - 80 / di): LINE -(c, b - 80 / di)
 
395  LINE (c, b - 25 / di)-(c - 6 / di, b - 25 / di): LINE -(c - 10 / di, b - 20 / di): LINE -(c - 12 / di, b - 10 / di): LINE -(c - 10 / di, b - 6 / di)
     LINE -(c - 10 / di, b): LINE -(c - 14 / di, b): LINE -(c - 15 / di, b - 5 / di): LINE -(c - 16 / di, b): LINE -(c - 20 / di, b)
 
396  LINE -(c - 20 / di, b - 6 / di): LINE -(c - 18 / di, b - 10 / di): LINE -(c - 18 / di, b - 20 / di): LINE -(c - 15 / di, b - 30 / di): LINE -(c - 15 / di, b - 45 / di): LINE -(c - 40 / di, b - 60 / di): LINE -(c - 40 / di, b - 70 / di)
 
397  LINE -(c - 10 / di, b - 55 / di): LINE -(c - 6 / di, b - 60 / di): LINE -(c - 10 / di, b - 74 / di): LINE -(c - 6 / di, b - 80 / di)
     LINE -(c - 4 / di + .499, b - 80 / di): LINE -(c - 3 / di + .499, b - 82 / di): LINE -(c - 2 / di + .499, b - 80 / di): LINE -(c, b - 80 / di)
 
398  LINE (c - 6 / di, b - 25 / di)-(c, b - 6 / di): LINE -(c + 10 / di, b): LINE -(c + 4 / di + .499, b - 8 / di): LINE -(c + 6 / di, b - 25 / di)
     LINE (c - 40 / di, b - 64 / di)-(c - 40 / di, b - 90 / di): LINE -(c - 52 / di, b - 80 / di): LINE -(c - 52 / di, b - 40 / di)
 
399  LINE (c + 40 / di, b - 86 / di)-(c + 38 / di, b - 92 / di): LINE -(c + 42 / di, b - 92 / di): LINE -(c + 40 / di, b - 86 / di): LINE -(c + 40 / di, b - 50 / di)
 
400  LINE (c + 4 / di + .499, b - 70 / di)-(c + 6 / di, b - 74 / di): LINE (c - 4 / di + .499, b - 70 / di)-(c - 6 / di, b - 74 / di): LINE (c, b - 64 / di)-(c, b - 60 / di): GOTO 490
 
490  IF en = 1 THEN en = 0: WINDOW: RETURN
 
491  di = di + 1: GOTO 202
 
500  RANDOMIZE -ABS(ln) - tx * 10 - ty * 1000 + in * 31.4
 
501  FOR x = 1 TO 9: FOR y = 1 TO 9: dn%(x, y) = 0: NEXT: NEXT
 
510  FOR x = 0 TO 10: dn%(x, 0) = 1: dn%(x, 10) = 1: dn%(0, x) = 1: dn%(10, x) = 1: NEXT
 
520  FOR x = 2 TO 8 STEP 2: FOR y = 1 TO 9: dn%(x, y) = 1: NEXT: NEXT
 
530  FOR x = 2 TO 8 STEP 2: FOR y = 1 TO 9 STEP 2
 
540  IF RND(1) > .95 THEN dn%(x, y) = 2
 
541  IF RND(1) > .95 THEN dn%(y, x) = 2
 
542  IF RND(1) > .6 THEN dn%(y, x) = 3
 
543  IF RND(1) > .6 THEN dn%(x, y) = 3
 
544  IF RND(1) > .6 THEN dn%(x, y) = 4
 
545  IF RND(1) > .6 THEN dn%(y, x) = 4
 
546  IF RND(1) > .97 THEN dn%(y, x) = 9
 
547  IF RND(1) > .97 THEN dn%(x, y) = 9
 
548  IF RND(1) > .94 THEN dn%(x, y) = 5
 
549  IF RND(1) > .94 THEN dn%(y, x) = 5
 
568  NEXT: NEXT
 
569  dn%(2, 1) = 0: IF in / 2 = INT(in / 2) THEN dn%(7, 3) = 7: dn%(3, 7) = 8
 
570  IF in / 2 <> INT(in / 2) THEN dn%(7, 3) = 8: dn%(3, 7) = 7
 
580  IF in = 1 THEN dn%(1, 1) = 8: dn%(7, 3) = 0
 
585  GOSUB 2000
 
590  RETURN
 
1000  DO: LOOP UNTIL INKEY$ = "": VIEW PRINT 22 TO 25: LOCATE 25, 1: PRINT "COMMAND?                    "; : LOCATE CSRLIN, 10
 
1001  x$ = INKEY$: IF x$ = "" THEN 1001
 
1002  IF ASC(x$) = 0 THEN xq = ASC(MID$(x$, 2)) ELSE xq = 0
 
1010  REM poke -16368, 0
 
1030  IF xq = 72 THEN ON SGN(in) + 1 GOTO 1100, 1150
 
1040  IF xq = 77 THEN ON SGN(in) + 1 GOTO 1200, 1250
 
1050  IF xq = 75 THEN ON SGN(in) + 1 GOTO 1300, 1350
 
1060  IF xq = 80 THEN ON SGN(in) + 1 GOTO 1400, 1450
 
1070  IF x$ = "g" OR x$ = CHR$(13) OR x$ = "e" OR x$ = "k" OR x$ = "d" THEN ON SGN(in) + 1 GOTO 1500, 1550
 
1080  IF x$ = "a" OR x$ = "u" OR x$ = "c" THEN ON SGN(in) + 1 GOTO 1600, 1650
 
1081  IF x$ = " " THEN PRINT "PASS": GOTO 1090
 
1085  IF x$ = "i" OR x$ = "z" OR x$ = "y" THEN 1700
 
1086  IF x$ = "p" THEN IF pa = 1 THEN pa = 0: PRINT "PAUSE OFF": GOTO 1000
 
1087  IF x$ = "p" THEN IF pa = 0 THEN pa = 1: PRINT "PAUSE ON": GOTO 1000
 
1089  PRINT "HUH?": GOTO 1000
 
1090  pw(0) = pw(0) - 1 + SGN(in) * .9: IF pw(0) < 0 THEN c(0) = 0: PRINT : PRINT "YOU HAVE STARVED!!!!!": GOTO 1093
 
1091  FOR jj = 0 TO 2: LOCATE 22 + jj, 30: PRINT "         "; : NEXT
      LOCATE 22, 30: PRINT "FOOD="; LTRIM$(STR$(pw(0))); : LOCATE 23, 30: PRINT "H.P.="; LTRIM$(STR$(c(0)));
      LOCATE 24, 30: PRINT "GOLD="; LTRIM$(STR$(c(5))); : LOCATE 24, 1: REM call -868
 
1092  pw(0) = INT(pw(0) * 10) / 10
 
1093  IF c(0) <= 0 THEN SLEEP 3: GOTO 6000
 
1095  IF in > 0 THEN GOSUB 4000: IF c(0) <= 0 THEN 1093
 
1096  FOR jj = 0 TO 3: LOCATE 22 + jj, 30: PRINT "         "; : NEXT: LOCATE 22, 30: PRINT "FOOD="; LTRIM$(STR$(pw(0))); : LOCATE 23, 30: PRINT "H.P.="; LTRIM$(STR$(c(0))); : LOCATE 24, 30: PRINT "GOLD="; LTRIM$(STR$(c(5))); : LOCATE 24, 1
 
1097  IF in = 0 THEN GOSUB 100: GOTO 1000
 
1098  IF in > 0 THEN GOSUB 200: GOTO 1000
 
1100  PRINT "NORTH": IF te%(tx, ty - 1) = 1 THEN PRINT "YOU CAN'T PASS THE MOUNTAINS": GOTO 1090
 
1110  ty = ty - 1: GOTO 1090
 
1150  IF dn%(px + dx, py + dy) <> 1 AND dn%(px + dx, py + dy) < 10 THEN px = px + dx: py = py + dy
 
1155  PRINT "FORWARD"
 
1160  IF dn%(px, py) = 2 THEN PRINT "AAARRRGGGHHH!!! A TRAP!": c(0) = c(0) - INT(RND(1) * in + 3): MR = 1: in = in + 1: PRINT "FALLING TO LEVEL "; in: SLEEP 2: GOSUB 500: GOTO 1090
 
1165  z = 0
 
1170  IF dn%(px, py) = 5 THEN dn%(px, py) = 0: PRINT "GOLD!!!!!": z = INT(RND(1) * 5 * in + in): PRINT z; "-PIECES OF EIGHT": c(5) = c(5) + z
 
1175  IF z > 0 THEN z = INT(RND(1) * 6): PRINT "AND A "; w$(z): pw(z) = pw(z) + 1: SLEEP 1: GOTO 1090
 
1190  GOTO 1090
 
1200  PRINT "EAST": IF te%(tx + 1, ty) = 1 THEN PRINT "YOU CAN'T PASS THE MOUNTAINS": GOTO 1090
 
1210  tx = tx + 1: GOTO 1090
 
1250  PRINT "TURN RIGHT"
 
1255  IF dx <> 0 THEN dy = dx: dx = 0: GOTO 1090
 
1260  dx = -dy: dy = 0: GOTO 1090
 
1300  PRINT "WEST": IF te%(tx - 1, ty) = 1 THEN PRINT "YOU CAN'T PASS THE MOUNTAINS": GOTO 1090
 
1310  tx = tx - 1: GOTO 1090
 
1350  PRINT "TURN LEFT"
 
1355  IF dx <> 0 THEN dy = -dx: dx = 0: GOTO 1090
 
1360  dx = dy: dy = 0: GOTO 1090
 
1400  PRINT "SOUTH": IF te%(tx, ty + 1) = 1 THEN PRINT "YOU CAN'T PASS THE MOUNTAINS": GOTO 1090
 
1410  ty = ty + 1: GOTO 1090
 
1450  PRINT "TURN AROUND": dx = -dx: dy = -dy: GOTO 1090
 
1500  IF te%(tx, ty) = 3 THEN GOSUB 60080: GOSUB 60200: CLS : GOTO 1090
 
1510  IF te%(tx, ty) = 4 AND in = 0 THEN PRINT "GO DUNGEON": PRINT "PLEASE WAIT ": SLEEP 1: in = 1: GOSUB 500: dx = 1: dy = 0: px = 1: py = 1: CLS : GOTO 1090
 
1515  IF te%(tx, ty) = 5 THEN 7000
 
1520  PRINT "HUH?": GOTO 1000
 
1550  IF dn%(px, py) <> 7 AND dn%(px, py) <> 9 THEN 1580
 
1555  PRINT "GO DOWN TO LEVEL "; in + 1
 
1560  in = in + 1: GOSUB 500: MR = 1: GOTO 1090
 
1580  IF dn%(px, py) <> 8 THEN PRINT "HUH?": GOTO 1090
 
1581  IF in = 1 THEN PRINT "LEAVE DUNGEON": in = 0: GOTO 1586
 
1584  PRINT "GO UP TO LEVEL "; in - 1
 
1585  in = in - 1: GOSUB 500: MR = 1
 
1586  IF in = 0 THEN PRINT "THOU HAST GAINED": PRINT lk; " HIT POINTS": SLEEP 2: c(0) = c(0) + lk: lk = 0
 
1587  CLS : GOTO 1090
 
1600  GOTO 1090
 
1650  mn = 0: da = 0: PRINT "ATTACK ": PRINT "WHICH WEAPON "; : DO: q$ = INKEY$: LOOP WHILE q$ = ""
 
1651  IF q$ = "r" THEN da = 10: PRINT "RAPIER": IF pw(1) < 1 THEN PRINT "NOT OWNED": GOTO 1650
 
1652  IF q$ = "a" THEN da = 5: PRINT "AXE": IF pw(2) < 1 THEN PRINT "NOT OWNED": GOTO 1650
 
1653  IF q$ = "s" THEN da = 1: PRINT "SHIELD": IF pw(3) < 1 THEN PRINT "NOT OWNED": GOTO 1650
 
1654  IF q$ = "b" THEN da = 4: PRINT "BOW": IF pw(4) < 1 THEN PRINT "NOT OWNED": GOTO 1650
 
1655  IF q$ = "m" THEN PRINT "MAGIC AMULET": GOTO 1680
 
1656  IF q$ = "b" AND pt$ = "m" THEN PRINT "MAGES CAN'T USE BOWS!": GOTO 1650
 
1657  IF q$ = "r" AND pt$ = "m" THEN PRINT "MAGES CAN'T USE RAPIERS!": GOTO 1650
 
1659  IF da = 0 THEN PRINT "HANDS"
 
1660  IF da = 5 OR da = 4 THEN 1670
 
1661  mn = dn%(px + dx, py + dy) / 10: mn = INT(mn)
 
1662  IF mn < 1 OR c(2) - RND(1) * 25 < mn + in THEN PRINT " YOU MISSED": GOTO 1668
 
1663  PRINT "HIT!!! ": da = (RND(1) * da + c(1) / 5): mz%(mn, 1) = INT(mz%(mn, 1) - da)
 
1664  PRINT m$(mn); "'S HIT POINTS="; mz%(mn, 1)
 
1665  IF mz%(mn, 1) < 1 THEN PRINT "THOU HAST KILLED A "; m$(mn): PRINT "THOU SHALT RECEIVE": da = INT(mn + in): PRINT da; " PIECES OF EIGHT"
 
1666  IF mz%(mn, 1) < 1 THEN c(5) = INT(c(5) + da): dn%(ml%(mn, 0), ml%(mn, 1)) = dn%(ml%(mn, 0), ml%(mn, 1)) - 10 * mn: mz%(mn, 0) = 0
 
1667  lk = lk + INT(mn * in / 2): IF mn = ta THEN ta = -ta
 
1668  IF pa = 1 THEN PRINT "-CR- TO CONT. "; : INPUT q$
 
1669  SLEEP 1: GOTO 1090
 
1670  IF da = 5 THEN PRINT "TO THROW OR SWING:"; : DO: q$ = INKEY$: LOOP WHILE q$ = "": IF q$ <> "t" THEN PRINT "SWING": GOTO 1661
 
1671  IF da = 5 THEN PRINT "THROW": pw(2) = pw(2) - 1
 
1672  FOR y = 1 TO 5: IF px + dx * y < 1 OR px + dx * y > 9 OR py + dy * y > 9 OR py + dy * y < 0 THEN 1662
 
1673  mn = dn%(px + dx * y, py + dy * y): mn = INT(mn / 10): IF mn > 0 THEN 1662
 
1674  NEXT: GOTO 1662
 
1680  IF pw(5) < 1 THEN PRINT "NONE OWNED": GOTO 1650
 
1681  IF pt$ = "f" THEN q = INT(RND(1) * 4 + 1): GOTO 1685
 
1682  PRINT "1-LADDER-UP", "2-LADDER-DN": PRINT "3-KILL", "4-BAD??": PRINT "CHOICE "; : DO: q$ = INKEY$: LOOP WHILE q$ = "": q = VAL(q$): PRINT q: IF q < 1 OR q > 4 THEN 1682
 
1683  IF RND(1) > .75 THEN PRINT "LAST CHARGE ON THIS AMULET!": pw(5) = pw(5) - 1
 
1685  ON q GOTO 1686, 1690, 1691, 1692
 
1686  PRINT "LADDER UP": dn%(px, py) = 8: SLEEP 1: GOTO 1090
 
1690  PRINT "LADDER DOWN": dn%(px, py) = 7: SLEEP 1: GOTO 1090
 
1691  PRINT "MAGIC ATTACK": da = 10 + in: GOTO 1672
 
1692  ON INT(RND(1) * 3 + 1) GOTO 1693, 1695, 1697
 
1693  PRINT "YOU HAVE BEEN TURNED": PRINT "INTO A TOAD!"
 
1694  FOR z2 = 1 TO 4: c(z2) = 3: NEXT z2: SLEEP 3: GOTO 1090
 
1695  PRINT "YOU HAVE BEEN TURNED": PRINT "INTO A LIZARD MAN": FOR y = 0 TO 4: c(y) = INT(c(y) * 2.5): NEXT: SLEEP 3: GOTO 1090
 
1697  PRINT "BACKFIRE": c(0) = c(0) / 2: SLEEP 2: GOTO 1090
 
1700  GOSUB 60080: LOCATE 1, 1: PRINT "PRESS -CR- TO CONTINUE"; : INPUT q$: SCREEN 1: CLS : GOTO 1090
 
2000  nm = 0: FOR x = 1 TO 10
 
2005  mz%(x, 0) = 0: mz%(x, 1) = x + 3 + in
 
2010  IF x - 2 > in OR RND(1) > .4 THEN 2090
 
2020  ml%(x, 0) = INT(RND(1) * 9 + 1): ml%(x, 1) = INT(RND(1) * 9 + 1)
 
2030  IF dn%(ml%(x, 0), ml%(x, 1)) <> 0 THEN 2020
 
2040  IF ml%(x, 0) = px AND ml%(x, 1) = py THEN 2020
 
2050  dn%(ml%(x, 0), ml%(x, 1)) = x * 10
 
2051  mz%(x, 0) = 1
 
2052  nm = nm + 1
 
2055  mz%(x, 1) = x * 2 + in * 2 * lp
 
2090  NEXT: RETURN
 
3087  LINE (c - 28 / di, b - 41 / di)-(c + 30 / di, b - 55 / di): LINE (c + 28 / di, b - 58 / di)-(c + 22 / di, b - 56 / di): LINE -(c + 22 / di, b - 53 / di)
      LINE -(c + 28 / di, b - 52 / di): LINE -(c + 34 / di, b - 54 / di): LINE (c + 20 / di, b - 50 / di)-(c + 26 / di, b - 47 / di)
 
3088  LINE (c + 10 / di, b - 58 / di)-(c + 10 / di, b - 61 / di): LINE -(c + 4 / di, b - 58 / di): LINE (c - 10 / di, b - 58 / di)-(c - 10 / di, b - 61 / di)
      LINE -(c - 4 / di, b - 58 / di): LINE (c + 40 / di, b - 9 / di)-(c + 50 / di, b - 12 / di): LINE -(c + 40 / di, b - 7 / di)
 
3089  LINE (c - 8 / di, b - 25 / di)-(c + 6 / di, b - 7 / di): LINE -(c + 28 / di, b - 7 / di): LINE -(c + 28 / di, b - 9 / di): LINE -(c + 20 / di, b - 9 / di): LINE -(c + 6 / di, b - 25 / di): GOTO 490
 
4000  FOR mm = 1 TO 10: IF mz%(mm, 0) = 0 THEN 4999
 
4010  ra = SQR((px - ml%(mm, 0)) ^ 2 + (py - ml%(mm, 1)) ^ 2)
 
4011  IF mz%(mm, 1) < in * lp THEN 4030
 
4020  IF ra < 1.3 THEN 4500
 
4025  IF mm = 8 AND ra < 3 THEN 4999
 
4030  x1 = SGN(px - ml%(mm, 0)): y1 = SGN(py - ml%(mm, 1))
 
4031  IF mz%(mm, 1) < in * lp THEN x1 = -x1: y1 = -y1
 
4035  IF y1 = 0 THEN 4045
 
4040  d = dn%(ml%(mm, 0), (ml%(mm, 1) + y1 + .499)): IF d = 1 OR d > 9 OR d = 2 THEN 4045
 
4042  x1 = 0: GOTO 4050
 
4045  y1 = 0: IF x1 = 0 THEN 4050
 
4046  d = dn%((ml%(mm, 0) + x1 + .499), ml%(mm, 1)): IF d = 1 OR d > 9 OR d = 2 THEN x1 = 0: GOTO 4081
 
4050  dn%(ml%(mm, 0), ml%(mm, 1)) = dn%(ml%(mm, 0), ml%(mm, 1)) - 10 * mm
 
4055  IF ml%(mm, 0) + x1 = px AND ml%(mm, 1) + y1 = py THEN 4999
 
4060  ml%(mm, 0) = ml%(mm, 0) + x1: ml%(mm, 1) = ml%(mm, 1) + y1
 
4080  dn%(ml%(mm, 0), ml%(mm, 1)) = (dn%(ml%(mm, 0), ml%(mm, 1)) + 10 * mm + .499)
 
4081  IF x1 <> 0 OR y1 <> 0 THEN 4999
 
4082  IF mz%(mm, 1) < in * lp AND ra < 1.3 THEN 4500
 
4083  IF mz%(mm, 1) < in * lp THEN mz%(mm, 1) = mz%(mm, 1) + mm + in
 
4499  GOTO 4999
 
4500  IF mm = 2 OR mm = 7 THEN 4600
 
4509  PRINT "YOU ARE BEING ATTACKED": PRINT "BY A "; m$(mm)
 
4510  IF RND(1) * 20 - SGN(pw(3)) - c(3) + mm + in < 0 THEN PRINT "MISSED": GOTO 4525
 
4520  PRINT "HIT": c(0) = c(0) - INT(RND(1) * mm + in)
 
4525  IF pa = 1 THEN PRINT "-CR- TO CONT. "; : INPUT q$
 
4530  GOTO 4999
 
4600  IF RND(1) < .5 THEN 4509
 
4610  IF mm = 7 THEN pw(0) = INT(pw(0) / 2): PRINT "A GREMLIN STOLE SOME FOOD": GOTO 4525
 
4620  zz = INT(RND(1) * 6): IF pw(zz) < 1 THEN 4620
 
4630  PRINT "A THIEF STOLE A "; w$(zz): pw(zz) = pw(zz) - 1: GOTO 4525
 
4999  NEXT: RETURN
 
6000  VIEW PRINT: CLS : PRINT : PRINT : PRINT "        WE MOURN THE PASSING OF"
 
6005  IF LEN(pn$) > 22 THEN pn$ = ""
 
6010  IF pn$ = "" THEN pn$ = "THE PEASANT"
 
6020  pn$ = pn$ + " AND HIS COMPUTER"
 
6030  PRINT TAB(20 - INT(LEN(pn$) / 2)); : PRINT pn$
 
6035  PRINT "  TO INVOKE A MIRACLE OF RESSURECTION"
 
6040  PRINT "             <HIT ESC KEY>";
 
6050  DO: LOOP UNTIL INKEY$ = CHR$(27)
 
6060  GOTO 1
 
7000  SCREEN 1: VIEW PRINT: CLS
 
7001  REM
 
7010  IF pn$ <> "" THEN 7500
 
7020  PRINT : PRINT : PRINT "     WELCOME PEASANT INTO THE HALLS OF": PRINT "THE MIGHTY LORD BRITISH. HEREIN THOU MAYCHOOSE TO DARE BATTLE WITH THE EVIL": PRINT "CREATURES OF THE DEPTHS, FOR GREAT": PRINT "REWARD!"
 
7030  PRINT : PRINT "WHAT IS THY NAME PEASANT "; : INPUT pn$: pn$ = UCASE$(pn$)
 
7040  PRINT "DOEST THOU WISH FOR GRAND ADVENTURE ? "; : DO: q$ = INKEY$: LOOP WHILE q$ = ""
      IF q$ <> "y" THEN PRINT : PRINT "THEN LEAVE AND BEGONE!": pn$ = "": PRINT : PRINT "         PRESS -SPACE- TO CONT."; : DO: q$ = INKEY$: LOOP UNTIL q$ = " ": CLS : GOTO 1090
 
7045  PRINT
 
7050  PRINT : PRINT "GOOD! THOU SHALT TRY TO BECOME A ": PRINT "KNIGHT!!!": PRINT : PRINT "THY FIRST TASK IS TO GO INTO THE": PRINT "DUNGEONS AND TO RETURN ONLY AFTER": PRINT "KILLING A(N) "; : ta = INT(c(4) / 3): PRINT m$(ta)
 
7060  PRINT : PRINT "     GO NOW UPON THIS QUEST, AND MAY": PRINT "LADY LUCK BE FAIR UNTO YOU.....": PRINT ".....ALSO I, BRITISH, HAVE INCREASED": PRINT "EACH OF THY ATTRIBUTES BY ONE!"
 
7070  PRINT : PRINT "         PRESS -SPACE- TO CONT."; : DO: q$ = INKEY$: LOOP WHILE q$ = "": FOR x = 0 TO 5: c(x) = c(x) + 1: NEXT: CLS : GOTO 1090
 
7500  IF ta > 0 THEN PRINT : PRINT : PRINT pn$; " WHY HAST THOU RETURNED?": PRINT "THOU MUST KILL A(N) "; m$(ta)
      PRINT "GO NOW AND COMPLETE THY QUEST!": PRINT : PRINT "         PRESS -SPACE- TO CONT."; : DO: q$ = INKEY$: LOOP WHILE q$ = "": CLS : GOTO 1090
 
7510  PRINT : PRINT : PRINT : PRINT "AAHH!!....."; pn$: PRINT : PRINT "THOU HAST ACOMPLISHED THY QUEST!": IF ABS(ta) = 10 THEN 7900
 
7520  PRINT "UNFORTUNATELY, THIS IS NOT ENOUGH TO": PRINT "BECOME A KNIGHT.": ta = ABS(ta) + 1: PRINT : PRINT "NOW THOU MUST KILL A(N) "; m$(ta)
 
7530  GOTO 7060
 
7900  SCREEN 1: VIEW PRINT: CLS : PRINT : PRINT : PRINT : pn$ = "LORD " + pn$: PRINT " "; pn$; ","
 
7910  PRINT "       THOU HAST PROVED THYSELF WORTHY": PRINT "OF KNIGHTHOOD, CONTINUE PLAY IF THOU": PRINT "DOTH WISH, BUT THOU HAST ACOMPLISHED": PRINT "THE MAIN OBJECTIVE OF THIS GAME..."
 
7920  IF lp = 10 THEN 7950
 
7930  PRINT : PRINT "   NOW MAYBE THOU ART FOOLHEARTY": PRINT "ENOUGH TOTRY DIFFICULTY LEVEL "; lp + 1
 
7940  GOTO 7070
 
7950  PRINT : PRINT "...CALL CALIFORNIA PACIFIC COMPUTER": PRINT "AT (415)-569-9126 TO REPORT THIS": PRINT "AMAZING FEAT!"
 
7990  GOTO 7070
 
60000  SCREEN 1: VIEW PRINT: CLS : LOCATE 5, 1: INPUT "TYPE THY LUCKY NUMBER....."; q$: ln = VAL(q$)
 
60005  LOCATE 7, 1: INPUT "LEVEL OF PLAY (1-10)......"; q$: lp = INT(VAL(q$))
 
60006  IF lp < 1 OR lp > 10 THEN 60005
 
60010  RANDOMIZE ln
 
60020  DATA   "HIT POINTS.....","STRENGTH.......","DEXTERITY......","STAMINA........","WISDOM.........","GOLD..........."
 
60025  REM
 
60030  DIM c$(5): FOR x = 0 TO 5: READ c$(x): NEXT
 
60040  REM
 
60041  REM
 
60042  DATA       "SKELETON","THIEF","GIANT RAT","ORC","VIPER","CARRION CRAWLER","GREMLIN","MIMIC","DAEMON","BALROG"
 
60043  FOR x = 1 TO 10: READ m$(x): NEXT
 
60050  FOR x = 0 TO 5: c(x) = INT(SQR(RND(1)) * 21 + 4): NEXT x
 
60060  CLS : LOCATE 8, 1: FOR x = 0 TO 5: PRINT c$(x); c(x): NEXT: PRINT : PRINT "SHALT THOU PLAY WITH THESE QUALITIES?": PRINT TAB(20); : DO: q$ = INKEY$: LOOP WHILE q$ = "": IF q$ <> "y" THEN 60050
 
60061  LOCATE 15, 1: PRINT : PRINT "AND SHALT THOU BE A FIGHTER OR A MAGE?": PRINT TAB(20); : DO: pt$ = INKEY$: LOOP WHILE pt$ = ""
 
60062  IF pt$ = "m" OR pt$ = "f" THEN 60070
 
60063  GOTO 60061
 
60070  DATA    "FOOD","RAPIER","AXE","SHIELD","BOW AND ARROWS","MAGIC AMULET": FOR x = 0 TO 5: READ w$(x): NEXT
 
60075  GOSUB 60080: GOSUB 60200: RETURN
 
60080  SCREEN 1: VIEW PRINT: CLS : PRINT : PRINT : PRINT "     STAT'S              WEAPONS": PRINT : FOR x = 0 TO 5: PRINT c$(x); c(x); TAB(24); "0-"; w$(x): NEXT: LOCATE 1, 1
 
60081  LOCATE 11, 18: PRINT "Q-QUIT"
 
60082  REM IF pw(0) > 0 THEN REM  CALL 62450
 
60085  FOR z = 0 TO 5: LOCATE 5 + z, 25 - LEN(STR$(pw(z))): PRINT STR$(pw(z)); : NEXT
 
60090  LOCATE 17, 5: PRINT "PRICE"; : PRINT TAB(15); : PRINT "DAMAGE"; : PRINT TAB(25); : PRINT "ITEM"
 
60100  FOR x = 0 TO 5: LOCATE 19 + x, 25: PRINT w$(x); : NEXT
 
60110  LOCATE 19, 5: PRINT "1 FOR 10"; : PRINT TAB(15); : PRINT "N/A": LOCATE 20, 5: PRINT "8"; : PRINT TAB(15); : PRINT "1-10": LOCATE 21, 5: PRINT "5"; : PRINT TAB(15); : PRINT "1-5"
 
60120  LOCATE 22, 5: PRINT "6"; : PRINT TAB(15); : PRINT "1": LOCATE 23, 5: PRINT "3"; : PRINT TAB(15); : PRINT "1-4"; : LOCATE 24, 5: PRINT "15"; : PRINT TAB(15); : PRINT "?????"; : LOCATE 1, 1
 
60130  RETURN
 
60200  LOCATE 1, 1: PRINT "WELCOME TO THE ADVENTURE SHOP"
 
60210  LOCATE 13, 1: FOR jj = 0 TO 1: PRINT "                                      ": NEXT
       LOCATE 12, 1: PRINT "WHICH ITEM SHALT THOU BUY        "; : LOCATE 12, 27: DO: q$ = INKEY$: LOOP WHILE q$ = ""
       IF q$ = "q" THEN PRINT : PRINT : PRINT "BYE": SLEEP 1: SCREEN 1: CLS : RETURN
 
60215  z = -1
 
60220  IF q$ = "f" THEN PRINT "FOOD": z = 0: p = 1
 
60221  IF q$ = "r" THEN PRINT "RAPIER": z = 1: p = 8
 
60222  IF q$ = "a" THEN PRINT "AXE": z = 2: p = 5
 
60223  IF q$ = "s" THEN PRINT "SHIELD": z = 3: p = 6
 
60224  IF q$ = "b" THEN PRINT "BOW": z = 4: p = 3
 
60225  IF q$ = "m" THEN PRINT "AMULET": z = 5: p = 15
 
60226  IF z = -1 THEN PRINT UCASE$(q$): PRINT "I'M SORRY WE DON'T HAVE THAT.": SLEEP 2: GOTO 60210
 
60227  IF q$ = "r" AND pt$ = "m" THEN PRINT "I'M SORRY MAGES": PRINT "CAN'T USE THAT!": SLEEP 2: GOTO 60210
 
60228  IF q$ = "b" AND pt$ = "m" THEN PRINT "I'M SORRY MAGES": PRINT "CAN'T USE THAT!": SLEEP 2: GOTO 60210
 
60230  IF c(5) - p < 0 THEN PRINT "M'LORD THOU CAN NOT AFFORD THAT ITEM.": SLEEP 2: GOTO 60210
 
60235  IF z = 0 THEN pw(z) = pw(z) + 9
 
60236  pw(z) = pw(z) + 1: c(5) = c(5) - p
 
60237  LOCATE 10, 16: PRINT c(5); "  "
 
60240  LOCATE 5 + z, 25 - LEN(STR$(pw(z))): PRINT pw(z); : LOCATE 14, 1: PRINT
 
60250  GOTO 60210