Source:The Lair of the Minotaur
Jump to navigation
Jump to search
This page is a verbatim reproduction of original source material and should not be edited except for maintenance. | |
Description |
The source code of the DOS 3.3 Eamon adventure The Lair of the Minotaur, written in Applesoft BASIC. |
---|---|
Source |
Disk image provided by Eamon Adventurer's Guild Online |
Date |
Originally written circa 1980; last updated 15 December 1984 |
Author | |
License |
The use of this item is permitted on the grounds that it's free or in the public domain. |
Previous item | |
Next item |
Adventure Program
0 A$ = "LAIR OF THE MINOTAUR":NUM = 2:A2$ = "DONALD BROWN"
5 ONERR GOTO 9
6 D$ = CHR$ (4): PRINT D$"VERIFY GAME.PTRS": PRINT D$"RUN MAIN PGM"
9 POKE 216,0
10 TEXT : HOME : INVERSE
20 PRINT "*****************************************"; SPC( 38);"**"; SPC( INT ((38 - LEN (A$)) / 2));A$; SPC( INT ((38 - LEN (A$)) / 2) + ( LEN (A$) / 2 < > INT ( LEN (A$) / 2)));"**"; SPC( 38);"*****************************************": NORMAL
30 PRINT TAB( 12);"ADVENTURE #";NUM;" FOR": PRINT : PRINT TAB( 7);"THE WONDERFUL WORLD OF EAMON": PRINT : PRINT "----------------------------------------"
40 PRINT "THE EAMON FANTASY GAMING SYSTEM WAS DEVELOPED BY DONALD BROWN": PRINT A$;" WAS": PRINT " DEVELOPED BY ";A2$
50 PRINT "NON-COMMERCIAL DISTRIBTION ENCOURAGED.": PRINT : PRINT "TO USE THIS DISKETTE REQUIRES AN EAMON MASTER DISKETTE WHICH MUST BE BOOTED UP ON.": PRINT
60 NEW
Leadin Program
10 REM ///MINOTAUR'S LAIR
20 REM ///BY DONALD BROWN
30 REM ///
40 REM /// EAMON DUNGEON
50 REM /// #2
55 DK$ = CHR$ (4)
60 FOR P = 770 TO 788: READ A: POKE P,A: NEXT
70 DATA 173,48,192,136,208,4,198,1,240,8,202,208,246,166,0,76,2,3,96
80 ONERR GOTO 1000
100 TEXT : HOME
140 PRINT : PRINT DK$;"OPEN FRESH MEAT": PRINT DK$;"READ FRESH MEAT": INPUT A$,NAME$: FOR A = 1 TO 14: INPUT A$: NEXT : PRINT DK$;"CLOSE"
170 SEX = 1 + (A$ = "F")
180 REL$ = "GIRLFRIEND":PLNM$ = "LARCENOUS LIL":S2$ = "SHE": IF SEX = 2 THEN REL$ = "BOYFRIEND":PLNM$ = "SLIPPERY SVEN":S2$ = "HE"
190 HOME : PRINT : PRINT NAME$;", YOU ARE IN BIG TROUBLE.": PRINT : PRINT : PRINT "YOU HAD ARRANGED TO MEET IN THE TOWN OF": PRINT : PRINT "DUNDERHAVEN WITH YOUR ";REL$;",": PRINT
200 PRINT PLNM$;". WHEN YOU ARRIVED, YOU": PRINT : PRINT "LEARNED THAT ";PLNM$;" HAD COME": PRINT : PRINT "INTO TOWN FLAT BROKE, AND HAD TRIED TO": PRINT
210 PRINT "PICK UP SOME EASY CASH BY BURGLARIZING A": PRINT "NEARBY CASTLE. ";S2$;" HASN'T BEEN SEEN": PRINT : PRINT "SINCE.": PRINT : PRINT
330 VTAB 24: INVERSE : PRINT " PRESS SPACE BAR TO CONTINUE ";
340 GET A$: IF A$ < > " " THEN 340
350 PRINT : NORMAL : HOME
400 PRINT : PRINT " MAKING YOUR OWN SUBTLE ENTRANCE INTO": PRINT : PRINT "THE CASTLE, ALL SEEMED TO BE GOING WELL": PRINT : PRINT "UNTIL SUDDENLY THE LIGHTS GO ON AND YOU": PRINT
410 PRINT "SEE YOURSELF SURROUNDED BY BOWMEN AND A": PRINT : PRINT "FAT, UGLY MAN ON A THRONE. HE SNEERS AT": PRINT "YOU AND SAYS 'WELL, BOYS, ANOTHER THIEF.": PRINT "I GUESS WE'LL SEND THE SCOUNDREL TO": PRINT
420 PRINT "MEET THE FIRST.' WITH THAT, HE PULLS": PRINT : PRINT "A LEVER, AND THE BOTTOM DROPS OUT OF THE": PRINT "FLOOR.": PRINT
430 VTAB 24: PRINT "---------------------------------------";
450 FOR X = 1 TO 1000: IF PEEK ( - 16374) < > 155 THEN NEXT X
455 POKE - 16368,0
460 VTAB 24: HTAB 15: PRINT SPC( 10): PRINT :A = 1:DR = 20:A1 = 14:A2 = 10:TN = 770: FOR Y = 30 TO 100
470 POKE Z,Y: POKE A,DR: PRINT TAB( A1);"I"; SPC( A2);"I": CALL TN
480 NEXT Y
490 PRINT : PRINT TAB( 18);"THUD"
500 PRINT DK$;"RUN MAIN PGM"
1000 ONERR GOTO 1000
1010 HOME : VTAB 5: PRINT "(INSERT EAMON MASTER DISKETTE INTO SLOT": PRINT " SIX, DRIVE ONE DISK DRIVE THEN HIT": PRINT " ANY KEY) ";: POKE - 16368,0: GET A$: PRINT
1020 PRINT DK$;"RUN THE WONDERFUL WORLD OF EAMON,S6,D1"
Main Program
1 REM EAMON ADVENTURE #2
2 REM -> THE MINOTAUR'S LAIR <-
3 REM
4 REM BY DONALD BROWN
5 REM
6 REM CONVERTED TO STD 10-8-84
7 REM
REV.12-15-84
8 REM
EAMON ADVENTURER'S GUILD
7625 HAWKHAVEN DR.
CLEMMONS, NC 27012
10 ONERR GOTO 50
20 DK$ = CHR$ (4): PRINT DK$"VERIFY GAME.PTRS": GOTO 31000
50 POKE 216,0: GOTO 1000
100 REM ///MAIN LOOP. FIRST GIVE ROOM DESC, THEN GET COMMAND
110 PRINT
115 IF SPD THEN SPD = SPD - 1: IF NOT SPD THEN MD%(0,2) = MD%(0,2) / 2:MD%(0,10) = MD%(0,10) - 2 * MD%(0,2): IF RND (1) > .8 THEN PRINT "YOUR SPEED SPELL HAS JUST EXPIRED!": PRINT
120 IF ROOM < 89 AND (AD%(1,4) < > ROOM AND AD%(1,4) < > - 1) THEN PRINT : PRINT "IT IS TOO DARK TO SEE ANYTHING.": GOTO 165
125 IF V%(ROOM) THEN PRINT DK$;"READ EAMON.ROOM NAMES,R";ROOM: INPUT A$: PRINT DK$: PRINT "YOU ARE ": PRINT " ";A$: PRINT
130 IF NOT V%(ROOM) THEN PRINT DK$;"READ EAMON.DESC,R";ROOM: INPUT A$: PRINT DK$: PRINT A$: PRINT :V%(ROOM) = 1: IF ROOM = 16 THEN DIE = 1: GOTO 2000
135 FOR M = 1 TO NM: IF MD%(M,5) = ROOM AND MD%(M,15) THEN PRINT MN$(M);" IS HERE.": PRINT
140 IF MD%(M,5) = ROOM AND NOT MD%(M,15) THEN PRINT DK$;"READ EAMON.DESC,R";M + 300: INPUT A$: PRINT DK$: PRINT A$:MD%(M,15) = 1: PRINT
145 NEXT M: FOR A = 1 TO NA - WZ: IF AD%(A,4) = ROOM AND AD%(A,9) THEN PRINT "YOU SEE ";AN$(A)
150 IF AD%(A,4) = ROOM AND NOT AD%(A,9) THEN PRINT DK$;"READ EAMON.DESC,R";A + 100: INPUT A$: PRINT DK$: PRINT A$:AD%(A,9) = 1: PRINT
155 NEXT A: FOR A = A TO NA: IF AD%(A,4) = ROOM THEN PRINT "YOUR ";AN$(A) + " IS HERE."
160 NEXT A:V%(ROOM) = 1: IF NOT RZ AND ROOM = 52 THEN PRINT : PRINT E1$: PRINT
165 PRINT : INPUT " YOUR COMMAND?";A$
170 IF LEFT$ (A$,1) = " " THEN A$ = MID$ (A$,2): GOTO 170
175 IF A$ = "" THEN A$ = CZ$: VTAB PEEK (37): HTAB 17: PRINT A$
180 CZ$ = A$: FOR A = 2 TO LEN (A$): IF MID$ (A$,A,1) < > " " THEN NEXT
185 V$ = LEFT$ (A$,A - 1):S$ = MID$ (A$,A + 1)
190 IF LEFT$ (S$,1) = " " THEN S$ = MID$ (S$,2): GOTO 190
193 FOR C = 1 TO NC: IF LEFT$ (C$(C), LEN (V$)) = V$ THEN 200
196 NEXT : PRINT : PRINT "HUH? I ONLY UNDERSTAND THESE COMMANDS-- ": FOR C = 1 TO NC: PRINT C$(C); SPC( 20 - LEN (C$(C)));: NEXT : PRINT : PRINT : GOTO 165
200 V$ = C$(C)
205 ON C GOTO 3000,3000,3000,3000,4000,4000,5000,6000,6000,7000,8000,9000,10000,11000,12000,13000,14000,15000,15000,16000,17000,18000,19000,20000,20000,20000,20000,21000,30000
300 REM ///COMMANDS RETURN TO HERE
310 IF NOT NBTL THEN 500
320 FOR M = 1 TO NM: IF MD%(M,5) < > ROOM THEN 490
330 M2 = MD%(M,14) - (MD%(M,14) = 2):MR = FD%(M2) / TD%(M2) * 100 + INT (41 * RND (1) - 20)
340 IF MD%(M,4) < MR THEN PRINT : PRINT MN$(M);" FLEES OUT AN EXIT.": PRINT : GOSUB 8500:MD%(M,5) = R2:M2 = MD%(M,14):TD%(M2) = TD%(M2) - MD%(M,1):FD%(M2) = FD%(M2) - MD%(M,13): GOTO 490
345 IF MD%(M,14) = 2 THEN 490
350 IF MD%(M,14) = 3 THEN 390
360 OF = M: IF TD%(3) = MD%(0,1) THEN DF = 0: GOSUB 7500: GOTO 490
370 FOR M2 = 1 TO NM: IF MD%(M2,5) = ROOM AND MD%(M2,14) = 3 AND RND (1) < .25 THEN DF = M2: GOSUB 7500:M2 = 200: NEXT M2: GOTO 490
380 NEXT M2:DF = 0: GOSUB 7500: GOTO 490
390 OF = M
400 FOR M2 = 1 TO NM: IF MD%(M2,5) = ROOM AND MD%(M2,14) = 1 THEN DF = M2: GOSUB 7500:M2 = 200: NEXT M2: GOTO 490
410 NEXT M2
490 NBTL = (FD%(1) < TD%(1)): IF NBTL THEN NEXT M
500 REM
900 GOTO 100
1000 REM ///INITIALIZE DATA
1005 PRINT : PRINT DK$;"OPEN EAMON.DESC,L256": PRINT DK$;"READ EAMON.DESC,R0": INPUT NR,NZ,NE,NM: PRINT DK$;"CLOSE":NA = NZ
1010 PRINT DK$;"OPEN EAMON.ARTIFACTS,L128": DIM AN$(NA + 4),AD%(NA + 4,9): FOR A = 1 TO NA: PRINT DK$;"READ EAMON.ARTIFACTS,R";A
1015 INPUT AN$(A): FOR A2 = 1 TO 4: INPUT AD%(A,A2): NEXT A2: IF AD%(A,2) > 1 THEN FOR A2 = 5 TO 8: INPUT AD%(A,A2): NEXT A2
1020 NEXT A: PRINT DK$;"OPEN EAMON.MONSTERS,L128": DIM MN$(NM),MD%(NM,15): FOR A = 1 TO NM: PRINT DK$;"READ EAMON.MONSTERS,R";A: INPUT MN$(A): FOR A2 = 1 TO 12: INPUT MD%(A,A2): NEXT A2,A: PRINT DK$;"CLOSE"
1030 PRINT DK$;"OPEN FRESH MEAT": PRINT DK$;"READ FRESH MEAT": INPUT REC: INPUT MN$(0),MD%(0,1),MD%(0,2),CH: FOR A = 1 TO 4: INPUT SA%(A): NEXT : FOR A = 1 TO 5: INPUT WA%(A): NEXT : INPUT AE,SEX$,GOLD,BANK,AC
1040 NW = 15: DIM WN$(NW),WT%(NW),WO%(NW),WD%(NW),WP%(NW): FOR A = 1 TO 4: INPUT WN$(A),WT%(A),WO%(A),WD%(A),WS%(A): NEXT : PRINT DK$;"CLOSE"
1045 REM PRINT DK$;"DELETE FRESH MEAT"
1050 IF SEX$ = "F" THEN MN$(9) = "SLIPPERY SVEN"
1060 E1$ = MN$(9) + " IS CHAINED TO THE ALTAR!"
1070 PRINT DK$;"OPEN EAMON.DESC,L256": PRINT DK$;"OPEN EAMON.ROOM NAMES,L64": PRINT DK$;"OPEN EAMON.ROOMS,L64"
1080 FOR W2 = 1 TO 4: IF WN$(W2) < > "NONE" THEN NA = NA + 1:AN$(NA) = WN$(W2):AD%(NA,2) = 2:AD%(NA,3) = 2:AD%(NA,4) = - 1:AD%(NA,5) = WO%(W2):AD%(NA,6) = WT%(W2):AD%(NA,7) = WD%(W2):AD%(NA,8) = WS%(W2): NEXT :W2 = 4
1090 WZ = W2:WT = W * WZ
1100 FOR W2 = 1 TO WZ: FOR A = 1 TO NA - WZ: IF AN$(A) = WN$(W2) THEN AN$(A) = AN$(A) + "#": FOR A = 0 TO 0: NEXT : GOTO 1100
1110 NEXT A,W2:EA = 0:MD%(0,8) = 0:A2 = INT (AC / 2): IF A2 * 2 < > AC THEN MD%(0,8) = 1:EA = - 5
1120 IF A2 THEN MD%(0,8) = MD%(0,8) + A2:EA = EA - A2 * 10: IF A2 = 3 THEN MD%(0,8) = MD%(0,8) + 2:EA = EA - 30
1130 IF NA > 35 THEN MD%(0,10) = (EA + AE) * ( - EA > AE) + WO%(1) + WA%(WT%(1)) + 2 * MD%(0,2):MD%(0,7) = 0:MD%(0,9) = 36:MD%(0,11) = WD%(1):MD%(0,12) = WS%(1):MD%(0,14) = 3
1140 READ NC: DIM C$(NC): FOR C = 1 TO NC: READ C$(C): NEXT
1150 FOR S = 1 TO 4:S2%(S) = SA%(S): NEXT : DIM V%(96):ROOM = 1
1900 GOTO 100
1910 DATA 29
1920 DATA NORTH,SOUTH,EAST,WEST,GET,TAKE,DROP,LOOK,EXAMINE,ATTACK,FLEE,GIVE,INVENTORY,BLAST,HEAL,POWER,SPEED,SMILE,WAVE,SAY,READY,DRINK,ENTER,OPEN,UNLOCK,RELEASE
1930 DATA FREE,DIG,SAVE
2000 REM ///DONE WITH GAME
2010 PRINT : PRINT "(HIT ANY KEY TO CONTINUE) ";: POKE - 16368,0: GET A$: PRINT
2020 PRINT DK$"CLOSE": IF SPD THEN MD%(0,2) = MD%(0,2) / 2
2030 IF DIE THEN 2500
2040 FOR W = 1 TO 4:WN$(W) = "NONE": NEXT :W2 = 1: FOR A = 1 TO NA: IF AD%(A,2) > 1 AND AD%(A,4) = - 1 THEN WN$(W2) = AN$(A):WP%(W2) = A:W2 = W2 + 1:AD%(A,4) = 0
2050 NEXT A: IF W2 < 6 THEN 2300
2060 HOME : VTAB 5: PRINT "AS YOU START TO ENTER THE MAIN HALL,": PRINT "LORD WILLIAM MISSLEFIRE APPEARS AND": PRINT "TELLS YOU, 'YOU HAVE TOO MANY WEAPONS": PRINT "TO KEEP THEM ALL--4 IS THE LEGAL LIMIT.": PRINT : PRINT "YOUR WEAPONS ARE--"
2070 FOR W = 1 TO W2 - 1: PRINT SPC( 4);W;"--";WN$(W): NEXT : PRINT : PRINT "ENTER THE NUMBER OF THE WEAPON TO SELL (1-";W2 - 1;") "
2080 VTAB PEEK (37): HTAB 23: INPUT A$:W5 = VAL (A$): IF W5 < 1 OR W5 > W2 - 1 OR W5 < > INT (W5) THEN 2080
2090 AD%(WP%(W5),4) = - 1:WN$(W5) = WN$(W2 - 1):WP%(W5) = WP%(W2 - 1):W2 = W2 - 1: IF W2 > 5 THEN 2060
2300 FOR W = 1 TO 4: IF WP%(W) THEN WT%(W) = AD%(WP%(W),6):WO%(W) = AD%(WP%(W),5):WD%(W) = AD%(WP%(W),7):WS%(W) = AD%(WP%(W),8)
2310 NEXT W: HOME : VTAB 5: PRINT "AS YOU DELIVER YOUR TREASURES TO SAM": PRINT "SLICKER, THE LOCAL BUYER FOR SUCH": PRINT "THINGS, HE EXAMINES YOUR GOODS AND": PRINT "PAYS YOU ";
2320 TP = 0: FOR A = 1 TO NA: IF AD%(A,4) < > - 1 THEN 2350
2330 IF AD%(A,2) < > 0 THEN AD%(A,1) = AD%(A,1) * CH / 10
2340 TP = TP + AD%(A,1)
2350 NEXT A: PRINT TP;" GOLD PIECES.": PRINT
2360 GOLD = GOLD + TP: PRINT : PRINT "(HIT ANY KEY TO CONTINUE) ";: GET A$: PRINT
2500 ONERR GOTO 2500
2510 HOME : VTAB 5: PRINT "(INSERT EAMON MASTER DISKETTE, THEN": PRINT " HIT THE 'C' KEY) ";: POKE - 16368,0
2520 GET A$: IF A$ < > "C" THEN 2520
2530 PRINT A$
2540 IF DIE THEN PRINT DK$;"OPEN THE ADVENTURER,S6,D1": PRINT DK$;"DELETE THE ADVENTURER": GOTO 2900
2550 PRINT DK$;"OPEN CHARACTERS,L150,S6,D1": PRINT DK$;"WRITE CHARACTERS,R";REC: PRINT MN$(0): PRINT MD%(0,1): PRINT MD%(0,2): PRINT CH: FOR A = 1 TO 4: PRINT SA%(A): NEXT
2560 FOR A = 1 TO 5: PRINT WA%(A): NEXT : PRINT AE: PRINT SEX$: PRINT GOLD: PRINT BANK: PRINT AC: FOR A = 1 TO 4: PRINT WN$(A): PRINT WT%(A): PRINT WO%(A): PRINT WD%(A): PRINT WS%(A): NEXT
2570 PRINT DK$;"OPEN THE ADVENTURER": PRINT DK$;"WRITE THE ADVENTURER": PRINT MN$(0): PRINT REC: PRINT DK$;"CLOSE"
2900 PRINT DK$;"RUN MAIN HALL,S6,D1"
3000 REM ///MOVE COMMAND
3010 IF NBTL THEN PRINT : PRINT "YOU CAN'T DO THAT WITH UNFRIENDLIES ABOUT!": PRINT : GOTO 100
3020 FOR D = 1 TO 6: IF LEFT$ (V$,1) < > MID$ ("NSEWUD",D,1) THEN NEXT
3030 PRINT DK$;"READ EAMON.ROOMS,R";ROOM: FOR D2 = 1 TO D: INPUT R2: NEXT : PRINT DK$
3040 IF R2 > 0 THEN 3500
3050 REM ///SPECIAL MOVES
3060 IF R2 = - 99 THEN PRINT : PRINT "YOU SUCCESSFULLY RIDE OFF INTO THE": PRINT " SUNSET.": GOTO 2000
3070 IF NOT R2 THEN 3490
3080 IF AD%(3,4) = ROOM THEN R2 = - R2: GOTO 3500
3090 IF ROOM = 54 AND AD%(17,4) = 0 THEN R2 = - R2: GOTO 3500
3490 PRINT : PRINT "YOU CAN'T GO THAT WAY!":V%(ROOM) = 0: GOTO 100
3500 R3 = ROOM:ROOM = R2: GOSUB 3600
3510 IF (R2 > 8 AND R2 < 17) OR (R3 > 8 AND R3 < 17) THEN AD%(3,4) = ROOM
3520 GOTO 100
3600 REM ///CHECK REACTIONS ON MONSTERS
3610 TD%(1) = 0:TD%(3) = MD%(0,1):FD%(1) = 0:FD%(3) = MD%(0,13)
3620 FOR M = 1 TO NM: IF MD%(M,5) = R3 THEN IF MD%(M,14) = 3 OR (MD%(M,14) = 1 AND 200 * RND (1) < MD%(M,4)) THEN MD%(M,5) = ROOM: GOTO 3650
3630 IF MD%(M,5) < > ROOM THEN 3900
3632 IF MD%(M,14) THEN 3650
3635 FR = MD%(M,3): IF FR AND FR < > 100 THEN FR = FR + INT ((CH - 10) * 2)
3640 MD%(M,14) = 1: IF FR > (100 * RND (1)) THEN MD%(M,14) = 2: IF FR > (100 * RND (1)) THEN MD%(M,14) = 3
3650 A = MD%(M,14):FD%(A) = FD%(A) + MD%(M,13):TD%(A) = TD%(A) + MD%(M,1)
3900 NEXT M:NBTL = (TD%(1) > 0): RETURN
4000 REM ///GET COMMAND
4010 GOSUB 4900
4020 IF S$ = "ALL" THEN 4100
4030 IF S$ = "GOLD" THEN S$ = AN$(5)
4040 IF S$ = "SILVER" THEN S$ = AN$(12)
4045 IF S$ = "WATER" AND ROOM > 5 AND ROOM < 28 THEN AD%(5,4) = ROOM
4050 FOR A = 1 TO NA: IF (AN$(A) < > S$ AND LEFT$ (AN$(A), LEN (S$)) < > S$ AND RIGHT$ (AN$(A), LEN (S$)) < > S$) OR AD%(A,4) < > ROOM THEN NEXT : PRINT : PRINT "I SEE NO ";S$;" HERE!": PRINT : GOTO 100
4060 GOSUB 4200: IF WT + AD%(A,3) > 10 * MD%(0,1) THEN PRINT : PRINT "IT IS TOO HEAVY FOR YOU.": PRINT : GOTO 100
4070 PRINT : PRINT "GOT IT.":AD%(A,4) = - 1:WT = WT + AD%(A,3): PRINT : IF AD%(A,2) < 2 OR MD%(0,9) < > - 1 THEN 300
4080 GOTO 17000
4100 FOR A = 1 TO NA: IF AD%(A,4) < > ROOM THEN 4140
4110 GOSUB 4200: IF WT + AD%(A,3) > 10 * MD%(0,1) THEN PRINT AN$(A);" IS TOO HEAVY": GOTO 4140
4120 PRINT AN$(A) + " TAKEN.":AD%(A,4) = - 1:WT = WT + AD%(A,3)
4140 NEXT : PRINT : GOTO 300
4200 IF A < > 10 THEN RETURN
4210 PRINT : PRINT "AS YOU TOUCH THE JEWEL, AN ELECTRIC": PRINT "SHOCK RUNS UP YOUR ARM. YOU HEAR A VOICECHUCKLING AS IT SAY, 'I TOLD YOU NOT TO TOUCH IT!'": PRINT :MD%(0,13) = MD%(0,13) + MD%(0,1) / 2
4220 DF = 0: IF MD%(0,13) > = MD%(0,1) THEN 7700
4230 GOTO 7650
4900 IF S$ = "" THEN PRINT : PRINT C$(C);" WHAT";: INPUT S$: GOTO 4900
4910 RETURN
5000 REM ///DROP COMMAND
5020 IF S$ = "ALL" THEN 5100
5030 FOR A = 1 TO NA: IF (AN$(A) < > S$ AND RIGHT$ (AN$(A), LEN (S$)) < > S$ AND LEFT$ (AN$(A), LEN (S$)) < > S$) OR AD%(A,4) < > - 1 THEN NEXT : PRINT : PRINT "YOU AREN'T CARRYING A ";S$;"!": PRINT : GOTO 100
5040 WT = WT - AD%(A,3):AD%(A,4) = ROOM: PRINT AN$(A);" DROPPED.": PRINT
5050 IF WT > 10 * MD%(0,1) THEN PRINT "YOU SUDDENLY FIND YOU CANNOT CARRY ALL OF THE ITEMS YOU ARE CARRYING, AND THEY ALL FALL TO THE GROUND.": PRINT : GOTO 5100
5060 IF MD%(0,9) > 0 THEN IF AD%(MD%(0,9),4) < > - 1 THEN MD%(0,9) = - 1
5070 GOTO 300
5100 FOR A = 1 TO NA: IF AD%(A,4) = - 1 THEN PRINT AN$(A);" DROPPED.":AD%(A,4) = ROOM
5110 NEXT A:WT = 0: GOTO 5060
6000 REM ///LOOK COMMAND
6020 LK = 0: FOR A = 1 TO NA - WZ: IF AN$(A) = S$ AND (AD%(A,4) = ROOM OR AD%(A,4) = - 1) THEN PRINT DK$;"READ EAMON.DESC,R";A + 100: INPUT A$: PRINT DK$: PRINT : PRINT A$: PRINT :LK = 1
6030 NEXT A: IF LK THEN 300
6040 FOR A = 1 TO NM: IF MN$(A) = S$ AND MD%(A,5) = ROOM THEN PRINT DK$;"READ EAMON.DESC,R";A + 300: INPUT A$: PRINT DK$: PRINT : PRINT A$: PRINT :LK = 1
6050 NEXT A: IF LK THEN 300
6060 V%(ROOM) = 0: GOTO 300
7000 REM ///ATTACK COMMAND
7010 GOSUB 4900: IF S$ = "KNIGHT" THEN S$ = MN$(4)
7020 IF S$ = "BUNNY" OR S$ = "RABBIT" THEN S$ = MN$(2)
7030 IF S$ = "EYE" THEN S$ = MN$(3)
7040 FOR M = 1 TO NM: IF (S$ < > MN$(M) AND LEFT$ (MN$(M), LEN (S$)) < > S$ AND RIGHT$ (MN$(M), LEN (S$)) < > S$) OR MD%(M,5) < > ROOM THEN NEXT : PRINT : PRINT "ATTACK WHO?": PRINT : GOTO 100
7050 IF MD%(0,9) = - 1 THEN PRINT : PRINT "YOU HAVE NO WEAPON READY!": PRINT : GOTO 100
7060 OF = 0:DF = M: GOSUB 7500: IF NOT HIT THEN 7130
7080 IF INC THEN W2 = AD%(MD%(0,9),6):WA%(W2) = WA%(W2) + 2
7090 IF - EA < = AE THEN 300
7100 IF INT (100 * RND (1) + 1) < = MD%(0,10) THEN 7130
7110 A = 2: IF EA + AE = - 1 THEN A = 1
7120 AE = AE + A:MD%(0,10) = MD%(0,10) + A
7130 IF MD%(DF,14) = 1 OR DF = 0 THEN 300
7140 MD%(DF,3) = MD%(DF,3) / 2: FOR M = 1 TO NM: IF MD%(M,5) = ROOM AND MD%(M,14) > 1 THEN MD%(M,14) = 0
7150 NEXT M:R3 = ROOM: GOSUB 3600: GOTO 300
7400 REM ///MONSTER TRIES TO PICK UP WEAPON
7410 IF MD%(OF,10) = 0 THEN RETURN
7420 FOR A = 1 TO NA: IF AD%(A,4) < > ROOM OR AD%(A,2) < 2 THEN NEXT : RETURN
7430 PRINT MN$(OF);" PICKS UP ";AN$(A): PRINT :AD%(A,4) = 0:MD%(OF,9) = A:MD%(OF,10) = MD%(OF,10) + AD%(A,5):MD%(OF,4) = MD%(OF,4) * 2: RETURN
7500 HIT = 0: IF MD%(OF,9) = - 1 THEN RETURN
7505 PRINT MN$(OF);" ATTACKS ";MN$(DF): PRINT " --";:RL = INT (100 * RND (1) + 1):HIT = 0: IF (RL < 5 OR RL < MD%(OF,10)) AND RL < 96 THEN HIT = 1
7510 IF HIT THEN 7600
7520 IF RL < 97 THEN PRINT "A MISS.": RETURN
7525 PRINT "A FUMBLE!":FR = INT (100 * RND (1) + 1): IF FR < = 35 + 40 * ( NOT MD%(OF,9)) THEN PRINT " FUMBLE RECOVERED.": PRINT : RETURN
7530 IF FR < 76 THEN PRINT " WEAPON DROPPED!":AD%(MD%(OF,9),4) = ROOM:MD%(OF,10) = MD%(OF,10) - AD%(MD%(OF,9),5):MD%(OF,9) = - 1:MD%(OF,4) = MD%(OF,4) / 2: PRINT : RETURN
7535 IF FR > 95 THEN 7550
7540 PRINT " WEAPON BROKEN!":AD%(MD%(OF,9),4) = 0:MD%(OF,10) = MD%(OF,10) - AD%(MD%(OF,9),5):MD%(OF,9) = - 1:MD%(OF,4) = MD%(OF,4) / 2: IF RND (1) > .5 THEN PRINT : RETURN
7545 PRINT " BROKEN WEAPON HURTS USER!"
7550 IF FR = 100 THEN 7560
7555 D = MD%(OF,11):S = MD%(OF,12):DF = OF:A = 1: GOTO 7635
7560 D = MD%(OF,11) * 2:S = MD%(OF,12):DF = OF:A = 0: GOTO 7635
7600 INC = ( INT (100 * RND (1) + 1) > MD%(OF,10)):MD%(OF,10) = MD%(OF,10) + 2 * INC
7605 D = MD%(OF,11):S = MD%(OF,12):A = 1: IF RL > 5 THEN PRINT "A HIT!": GOTO 7635
7610 PRINT "A CRITICAL HIT!":R2 = INT (100 * RND (1) + 1): IF R2 < 51 THEN A = 0: GOTO 7635
7615 IF R2 < 86 THEN S = 1.5 * S: GOTO 7635
7620 IF R2 < 96 THEN D = 2 * D: GOTO 7635
7625 IF R2 < 100 THEN D = 3 * D: GOTO 7635
7630 GOTO 7700
7635 D2 = 0: FOR D3 = 1 TO D:D2 = D2 + INT (S * RND (1) + 1): NEXT :D2 = D2 - A * MD%(DF,8): IF D2 < 1 THEN PRINT " BLOW BOUNCES OFF ARMOUR": PRINT : RETURN
7640 MD%(DF,13) = MD%(DF,13) + D2: IF MD%(DF,13) > = MD%(DF,1) THEN 7700
7645 A = MD%(DF,14):FD%(A) = FD%(A) + D2
7650 PRINT : PRINT MN$(DF);: ON INT (MD%(DF,13) * 5 / MD%(DF,1) + 1) GOTO 7655,7660,7665,7670,7675
7655 PRINT " IS STILL IN GOOD": PRINT " SHAPE.": RETURN
7660 PRINT " IS HURTING.": RETURN
7665 PRINT " IS IN PAIN.": RETURN
7670 PRINT " IS VERY BADLY INJURED.": RETURN
7675 PRINT " IS AT DEATH'S DOOR,": PRINT " KNOCKING LOUDLY.": RETURN
7700 PRINT MN$(DF);" IS DEAD!": PRINT :A = MD%(DF,14):FD%(A) = FD%(A) + MD%(DF,1) - MD%(DF,13) + D2:MD%(DF,5) = 0:A2 = DF + 25:AD%(A2,4) = ROOM: IF MD%(DF,9) > 0 THEN AD%(MD%(DF,9),4) = ROOM:MD%(DF,10) = MD%(DF,10) - AD%(MD%(DF,9),5):MD%(DF,9) = - 1:MD%(DF,4) = MD%(DF,4) / 2
7720 IF DF = 0 THEN DIE = 1: GOTO 2000
7730 IF (MN$(DF) = "SKELETON" OR MN$(DF) = "HIGH PRIEST") AND AD%(2,4) = 0 THEN PRINT : PRINT "A SKELETON KEY DROPS FROM HIS CLUTCHES": PRINT :AD%(2,4) = ROOM
7900 PRINT : RETURN
8000 REM ///FLEE COMMAND
8010 IF NOT NBTL THEN PRINT : PRINT "THERE'S NOTHING TO FLEE FROM!": PRINT : GOTO 100
8020 GOSUB 8500: GOTO 3500
8500 PRINT DK$;"READ EAMON.ROOMS,R";ROOM: FOR D = 1 TO 6: INPUT DR%(D): NEXT : PRINT DK$
8510 R2 = DR%(6 * RND (1) + 1): IF R2 < 1 THEN 8510
8520 RETURN
9000 REM ///GIVE COMMAND
9010 A2 = 1
9020 FOR M = 1 TO NM: IF LEFT$ (S$, LEN (MN$(M))) = MN$(M) AND MD%(M,5) = ROOM THEN 9050
9030 NEXT : IF A2 = 1 THEN A2 = 2: PRINT : INPUT "WHO TO GIVE TO? ";S$: GOTO 9020
9040 PRINT : PRINT "NOBODY HERE BY THAT NAME!": PRINT : GOTO 100
9050 S$ = MID$ (S$, LEN (MN$(M)) + 1)
9060 IF LEFT$ (S$,1) = " " THEN S$ = MID$ (S$,2): GOTO 9060
9065 IF VAL (S$) > 0 THEN 9500
9070 FOR A = 1 TO NA: IF LEFT$ (S$, LEN (AN$(A))) = AN$(A) AND AD%(A,4) = - 1 THEN 9095
9080 NEXT : IF A2 = 2 THEN A2 = 3: PRINT : INPUT "WHAT TO GIVE? ";S$: GOTO 9065
9090 PRINT : PRINT "YOU AREN'T CARRYING A ";S$;"!": PRINT : GOTO 100
9095 IF A = MD%(0,9) THEN MD%(0,9) = - 1
9100 PRINT : PRINT "OKAY.":AD%(A,4) = 0:MD%(M,14) = 0:MD%(M,3) = MD%(M,3) * (1 + AD%(A,1) / 100)
9110 IF MD%(M,10) < > 0 AND MD%(M,9) = - 1 THEN MD%(M,9) = A:MD%(M,10) = MD%(M,9) + AD%(A,5):MD%(M,4) = 2 * MD%(M,4)
9120 R3 = ROOM: GOSUB 3600: GOTO 5050
9500 IF VAL (S$) > GOLD THEN PRINT : PRINT "YOU AREN'T CARRYING THAT MUCH GOLD OF YOUR OWN!": PRINT : GOTO 300
9510 GOLD = INT (GOLD - VAL (S$)):MD%(M,14) = 0:MD%(M,3) = MD%(M,3) * (1 + VAL (S$) / 100): GOTO 9120
10000 REM ///INVENTORY COMMAND
10010 PRINT : PRINT "YOU ARE CARRYING THE FOLLOWING--":A0 = 0: FOR A = 1 TO NA: IF AD%(A,4) = - 1 THEN PRINT " ";AN$(A); LEFT$ (" (READY WEAPON)",1 + 20 * (A = MD%(0,9))):A0 = A0 + 1: IF A0 = 15 THEN PRINT : PRINT "(HIT ANY KEY TO CONTINUE)";: GET A$: PRINT :A0 = 0
10020 NEXT : GOTO 300
11000 REM ///BLAST SPELL
11010 GOSUB 4900
11020 FOR M = 1 TO NM: IF S$ < > MN$(M) OR MD%(M,5) < > ROOM THEN NEXT : PRINT : PRINT "YOU CAN'T BLAST ";S$;"!": PRINT : GOTO 100
11030 S = 1: GOSUB 11500: IF NOT SUC THEN 300
11040 PRINT : PRINT "DIRECT HIT!": PRINT :S = 6:D = 1:DF = M:A = 0: GOSUB 7635: PRINT : GOTO 300
11500 SUC = 0: IF SA%(S) THEN RL = INT (100 * RND (1) + 1):SUC = (((RL < S2%(S)) OR (RL < 5)) AND (RL < 95)): IF RL = 100 THEN 11600
11510 IF NOT SUC THEN PRINT : PRINT "NOTHING HAPPENED.": RETURN
11520 RL = INT (100 * RND (1) + 1): IF RL > S2%(S) THEN S2%(S) = S2%(S) + 2:SA%(S) = SA%(S) + 2
11530 S2%(S) = S2%(S) / 2
11540 RETURN
11600 PRINT : PRINT "THE STRAIN OF ATTEMPTING TO CAST THIS SPELL OVERLOADS YOUR BRAIN AND YOU FORGET IT COMPLETELY.": PRINT :SA%(S) = 0: RETURN
12000 REM ///HEAL SPELL
12010 S = 2: GOSUB 11500: IF NOT SUC THEN 300
12020 PRINT : IF MD%(0,13) THEN PRINT "SOME OF YOUR WOUNDS SEEM TO CLEAR UP.": PRINT
12030 MD%(0,13) = MD%(0,13) - INT (10 * RND (1) + 1): IF MD%(0,13) < 0 THEN MD%(0,13) = 0
12040 DF = 0: GOSUB 7650: GOTO 300
13000 REM ///POWER SPELL
13010 S = 4: GOSUB 11500: IF NOT SUC THEN 300
13020 RAISE = 0: FOR M = 1 TO NM:M2 = 25 + M: IF AD%(M2,4) = ROOM OR AD%(M2,4) = - 1 THEN RAISE = 1: PRINT MN$(M);" COMES ALIVE!":AD%(M2,4) = 0:MD%(M,5) = ROOM:MD%(M,13) = 0:WT = WT - AD%(M2,3)
13030 NEXT M: IF RAISE THEN R3 = ROOM: GOSUB 3600: GOTO 300
13040 FOR A = 1 TO NA: IF AD%(A,4) = ROOM THEN RAISE = 1: PRINT AN$(A);" VANISHES!":AD%(A,4) = 0
13050 NEXT A: IF RAISE THEN PRINT : GOTO 300
13060 RR = INT (100 * RND (1) + 1): IF RR < 11 THEN PRINT : PRINT "THE SECTION OF TUNNEL YOU ARE IN ": PRINT " COLLAPSES AND YOU DIE.":DIE = 1: GOTO 2000
13070 IF RR < 31 THEN PRINT : PRINT "YOU ARE TELEPORTED SOMEWHERE IN THE": PRINT " DUNGEON": PRINT :R2 = INT (50 * RND (1) + 28): GOTO 3500
13080 IF RR < 86 THEN PRINT : PRINT "YOU HEAR A VERY LOUD SONIC BOOM": PRINT " THAT ECHOES THROUGH THE TUNNELS.": PRINT : GOTO 300
13090 IF RR > 95 THEN PRINT : PRINT "ALL OF YOUR HITS ARE HEALED.": PRINT :MD%(0,13) = 0: GOTO 300
13100 GOTO 14020
14000 REM ///SPEED SPELL
14010 S = 3: GOSUB 11500: IF NOT SUC THEN 300
14020 IF NOT SPD THEN MD%(0,10) = MD%(0,10) + 2 * MD%(0,2):MD%(0,2) = 2 * MD%(0,2)
14030 SPD = SPD + INT (25 * RND (1) + 10): PRINT : PRINT "YOU CAN FEEL THE NEW AGILITY FLOWING": PRINT " THROUGH YOU!": PRINT : GOTO 300
15000 REM ///SMILE COMMAND
15010 PRINT : FOR M = 1 TO NM: IF MD%(M,5) < > ROOM THEN 15100
15020 ON MD%(M,14) GOTO 15030,15040,15050
15030 PRINT MN$(M);" GROWLS AT YOU": GOTO 15100
15040 PRINT MN$(M);" IGNORES YOU": GOTO 15100
15050 PRINT MN$(M);" ";V$;"S BACK": GOTO 15100
15100 NEXT M: PRINT : GOTO 300
16000 REM ///SAY COMMAND
16010 GOSUB 4900
16020 IF S$ = "MAGIC" AND AD%(8,4) = 0 AND ROOM = AD%(25,4) THEN PRINT : PRINT "AS YOU SAY THE WORD, THERE IS A SMALL ERUPTION FROM THE CENTER OF THE STONE AND AN EMERALD POPS OUT FROM IT.": PRINT :AD%(8,4) = ROOM: GOTO 300
16030 IF S$ = "BLAST" THEN V$ = S$:S$ = "": GOTO 11000
16040 IF S$ = "HEAL" THEN 12000
16050 IF S$ = "POWER" THEN 13000
16060 IF S$ = "SPEED" THEN 14000
16900 PRINT : PRINT "OKAY, '";S$;"'": PRINT : GOTO 300
17000 REM ///READY A WEAPON.
17010 GOSUB 4900
17020 FOR A = 1 TO NA: IF AN$(A) < > S$ OR AD%(A,4) < > - 1 THEN NEXT : PRINT : PRINT "YOU AREN'T CARRYING IT!": PRINT : GOTO 100
17030 IF AD%(A,2) < 2 THEN PRINT : PRINT "THAT ISN'T A WEAPON!": PRINT : GOTO 100
17040 MD%(0,10) = (EA + AE) * ( - EA > AE) + AD%(A,5) + WA%(AD%(A,6)) + 2 * MD%(0,2):MD%(0,9) = A:MD%(0,11) = AD%(A,7):MD%(0,12) = AD%(A,8)
17050 PRINT : PRINT "READIED.": PRINT : GOTO 300
18000 REM ///DRINK COMMAND
18010 GOSUB 4900
18020 IF NBTL THEN 3010
18030 IF S$ < > "WATER" OR RIGHT$ (S$,3) < > "SEA" THEN PRINT : PRINT "A JOB SIMILAR TO GETTING BLOOD FROM A": PRINT " TURNIP.": PRINT : GOTO 300
18040 IF MD%(5,4) < > - 1 AND MD%(5,4) < > ROOM AND (ROOM < 6 OR ROOM > 27) THEN PRINT : PRINT "THERE IS NO ";S$;" HERE!": PRINT : GOTO 300
18050 PRINT : PRINT "THE WATER TASTED SALTY, BUT IT DOESN'T SEEM TO BE POISONOUS.": PRINT : IF AD%(5,4) THEN AD%(5,4) = 0
18060 GOTO 300
19000 REM ///ENTER COMMAND
19010 GOSUB 4900
19020 IF NBTL THEN 3010
19030 IF S$ < > "WATER" AND S$ < > "SEA" THEN 19050
19040 PRINT : PRINT "SORRY, BUT I'M AFRAID TO GO INTO THE": PRINT " WATER WITHOUT MY LIFE PRESERVER!": PRINT : GOTO 300
19050 IF S$ = "BOAT" THEN PRINT : PRINT "OKAY.": PRINT : GOTO 300
19060 PRINT : PRINT "I'M NOT SURE WHAT YOU MEAN BY THAT. TRY GIVING A DIRECTION TO MOVE.": PRINT : GOTO 100
20000 REM ///OPEN COMMAND
20010 IF NBTL THEN 3010
20020 GOSUB 4900: IF LEFT$ (S$,3) < > "DOO" AND LEFT$ (S$,3) < > "GAT" AND LEFT$ (S$,3) < > "IRO" THEN 20060
20030 IF ROOM < > AD%(17,4) THEN PRINT : PRINT "IT ISN'T LOCKED!": PRINT : GOTO 300
20040 IF AD%(2,4) < > - 1 THEN PRINT : PRINT "YOU AREN'T CARRYING A KEY TO UNLOCK IT WITH!": PRINT : GOTO 100
20050 PRINT : PRINT "AS YOU UNLOCK THE IRON GRATE, IT FALLS INTO DUST.": PRINT :AD%(17,4) = 0: GOTO 300
20060 FOR A = 0 TO 6: IF LEFT$ (S$,3) < > MID$ ("CHAROPFRILILSVELARSLI",A * 3 + 1,3) THEN NEXT : GOTO 20100
20070 IF RZ OR ROOM < > 52 THEN PRINT : PRINT "HUH? HOW CAN I ";CZ$: PRINT : GOTO 100
20080 IF AD%(2,4) < > - 1 THEN PRINT : PRINT "YOU AREN'T CARRYING A KEY TO DO THAT!": PRINT : GOTO 100
20090 RZ = 1: PRINT : PRINT "YOU FREE ";MN$(9): PRINT :MD%(9,5) = ROOM:MD%(9,14) = 3: GOTO 300
20100 IF S$ < > "COFFIN" OR ROOM < > AD%(16,4) THEN 20200
20110 IF E1 THEN PRINT : PRINT "YOU CAN'T OPEN IT.": PRINT : GOTO 300
20120 E1 = 1: PRINT : PRINT "AS YOU BEGIN TO OPEN THE LID, A SKELETONJUMPS OUT AND ATTACKS YOU AS THE LID SLAMS BACK SHUT.": PRINT :MD%(1,5) = ROOM:R3 = ROOM: GOSUB 3600: GOTO 300
20200 PRINT : PRINT "MIND TELLING ME HOW?": PRINT : GOTO 100
21000 REM ///DIG COMMAND
21010 IF NBTL THEN 3010
21020 IF AD%(9,4) < > - 1 THEN PRINT : PRINT "THE GROUND IS TOO HARD TO DIG WITH YOUR HANDS.": PRINT : GOTO 300
21030 IF ROOM < > 27 OR AD%(6,4) THEN PRINT : PRINT "YOU FIND NOTHING.": PRINT : GOTO 300
21040 PRINT : PRINT "YOU FIND A BAG OF GOLD COINS!": PRINT :AD%(6,4) = ROOM: GOTO 300
30000 REM // SAVE GAME
30010 PRINT : PRINT "DO YOU WANT TO SAVE THIS GAME? ": PRINT "(Y/N) :";
30020 GET A$: IF A$ < > "Y" AND A$ < > "N" THEN 30020
30030 PRINT A$: IF A$ = "N" THEN 100
30040 PRINT DK$;"CLOSE":X = FRE (0)
30050 PRINT DK$"BSAVE GAME.PTRS,A$69,L8"
30060 PRINT DK$"BSAVE GAME.SVAR,A"; PEEK (105) + PEEK (106) * 256;",L"; PEEK (109) + PEEK (110) * 256 - PEEK (105) - PEEK (106) * 256 + 1
30070 PRINT DK$"BSAVE GAME.STR,A"; PEEK (111) + PEEK (112) * 256;",L"; PEEK (115) + PEEK (116) * 256 - PEEK (111) - PEEK (112) * 256 + 1
30080 PRINT : PRINT "THE GAME IS NOW SAVED. BOOT ON THIS": PRINT " DISKETTE TO RESTART THE GAME."
30090 END
31000 REM /// RESTART
31005 POKE 216,0
31010 PRINT : PRINT "DO YOU WANT TO RESTART THIS GAME?": PRINT " Y OR N:";
31020 GET A$: IF A$ < > "Y" AND A$ < > "N" THEN 31020
31030 PRINT A$: IF A$ = "N" THEN END
31040 PRINT CHR$ (4);"BLOAD GAME.PTRS": PRINT CHR$ (4);"BLOAD GAME.SVAR": PRINT CHR$ (4);"BLOAD GAME.STR"
31050 PRINT DK$;"DELETE GAME.PTRS": PRINT DK$;"DELETE GAME.SVAR": PRINT DK$;"DELETE GAME.STR"
31060 PRINT DK$;"OPEN EAMON.DESC,L256": PRINT DK$;"OPEN EAMON.ROOMS,L64": PRINT DK$;"OPEN EAMON.ROOM NAMES,L64"
31080 GOTO 100