PCjs Machines

Home of the original IBM PC emulator for browsers.

Logo

PC-SIG Diskette Library (Disk #721)

[PCjs Machine "ibm5150"]

Waiting for machine "ibm5150" to load....

Information about “LORDS OF THE UNDERWORLD”

Here is the second prize winner in PC-SIG's ``Write an Adventure Module'
contest.

You must fight your way through ``the underworld,'' taking on many foes
in order  to realize the object of your quest--a powerful sword.  The
adventure contained on this disk must be used in conjunction with the
main adventure program on disk #297 in our library.

System Requirements:  (see disk #297).

How to Start:  (see disk #297).

File Descriptions:

DUNGEON  BAS  Main dungeon module.
EAMON    ???  Data file (6 files).
???????? PIC  Picture data file (2 files).
RESUME   BAS  Subprogram.
ROOM     NAM  Data file.
UNDERLND DOC  Documentation file.

DUNGEON.BAS

1 RANDOMIZE VAL(RIGHT$(TIME$,2))
2 DIM MAP(100,6)
3 REM Basic dungeon program
4 REM Origionaly made by Donald Brown (bless his soul)
5 REM Converted with modifications by Jon Walker,139 S. Central Ave
6 REM Marshfield, WI, 54449 (no Lithuanian currency please!)
7 REM
8 REM  Debubbed and altered for 'Lord of the Uunderland' by Justin Langseth
9 REM
10 REM   CNAME$: CHARACTER NAME      HD: HARDINESS  AG: AGILITY  CH: CHARISMA
15 REM
20 REM   SA(1)-SA(4):SPELL ABILITIES
30 REM   WA(1)-WA(5):WEAPON ABILITIES
35 REM
40 REM   AE: AMROUR EXPERT.  SEX$: M OR F  GOLD: ON PERSON  BANK: GOLD IN BANK
50 REM   AC: ARMOUR CLASS
60 REM
70 REM WEAPON INFO:
80 REM     WNAME$: WEAPON NAME
85 REM
86 REM
87 DEF FND$(X$)=MID$(X$,INSTR(X$,".")+1)+CHR$(10)+CHR$(13)
88 INPUT "Graphics? (y/n)-->",A$:IF A$="n" OR A$="N" THEN 60000
89 SCREEN 1:BLOAD "INTRO.pic":GOTO 93
90 PLAY "mbo2t85l4l8el4gl8amlb.o3l16cmno2l8bl4al8f#mld.l16emnl8f#l4gl8emlel16d#mnl8el4f#l8d#o1l4bo2l8el4gl8abmll16o3cmnl8o2bl4al8f#d.mll16emnl8f#mlgf#mnemld#.l16c#mnl8d#l4el8el4ep8o3l4d.mll8d.l16cmno2l8bl4a"
91 GOTO 95
93 FOR A=1 TO 2000:NEXT A:SCREEN 0:WIDTH 80:BLOAD "welcome.pic":GOTO 90
95 GOTO 22000
96 REM
100 COLOR 3:REM /// give room description if never here, then get command
110 SCREEN 0:WIDTH 80:PRINT
115 IF SPD>0 THEN SPD=SPD-1:IF SPD=0 THEN MD(0,2)=MD(0,2)/2:MD(0,10)=MD(0,10)-2*MD(0,2)
120 IF V(ROOM) THEN GET#2,ROOM:COLOR 10:PRINT"You are ";R2$
125 IF NOT V(ROOM) THEN GET#1,ROOM:PRINT FND$(R1$)
130 COLOR 1:FOR M=1 TO NM:IF MD(M,5)=ROOM AND MD(M,15) THEN PRINT MN$(M);" is here."
135 IF MD(M,5)=ROOM AND MD(M,15)=0 THEN GET#3,M+NZ:PRINT FND$(R3$):MD(M,15)=-1
140 NEXT M:FOR A=1 TO NA-1:IF AD(A,4)=ROOM AND (A<NA) AND NOT V(ROOM) THEN GET#3,A:PRINT FND$(R3$)
145 COLOR 1:IF AD(A,4)=ROOM AND (A<NA) AND V(ROOM) THEN PRINT"You see ";AN$(A)
150 NEXT A:COLOR 12 :IF AD(NA,4)=ROOM THEN PRINT"Your ";AN$(A);" is here."
155 V(ROOM)=-1
160 PRINT:COLOR 4:PRINT"   Your command ?";:COLOR 9:LINE INPUT "",A$:COLOR 14
161 IF A$="ESCAPE" OR A$="escape" OR A$="Escape" THEN 162 ELSE 163
162 PRINT:COLOR 12:PRINT"Sorry, I consider this command cheating. Use the flee command...":GOTO 100
163 GOSUB 31000
170 IF A$="" THEN A$=CZ$
175 CZ$=A$:A=INSTR(2,A$," ")
180 IF A<>0 THEN V$=LEFT$(A$,A-1):S$=MID$(A$,A+1) ELSE V$=A$:S$=""
185 IF LEFT$(S$,1)=" " THEN S$=MID$(S$,2):GOTO 185
190 FOR C=1 TO NC:IF C$(C)=V$ OR C$(C)=S$ THEN 195 ELSE NEXT C
191 COLOR 2:PRINT"Huh? I only understand these commands--"
192 FOR C=1 TO NC:PRINT C$(C);SPACE$(30-LEN(C$(C)));
193 IF C/2=INT(C/2) THEN PRINT
194 NEXT C:PRINT:PRINT:GOTO 160
195 IF C$(C)=S$ THEN S$=V$:V$=C$(C)
200 ON C GOTO 1000,1000,2000,3000,4000,4000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,6000,7000,8000,10000,11000,11000,13000,14000,15000,16000,17000,17000,17000,18000,18000,19000,20000,21000,21500,21700
300 REM ///
301 REM /// commands return here
310 IF NOT NBTL THEN 440
320 FOR M=1 TO NM:IF MD(M,5)<>ROOM THEN 430
330 MR=FD(MD(M,14))/TD(MD(M,14))-FD(ABS(MD(M,14)=0))/TD(ABS(MD(M,14)=0))/5+INT(41*RND(1)-20)
340 IF MD(M,4)<MR THEN PRINT:PRINT MN$(M);" flees out an exit.":PRINT:GOSUB 17500:MD(M,5)=R2:TD(MD(M,14))=TD(MD(M,14))-MD(M,1):FD(MD(M,14))=FD(MD(M,14))-MD(M,13):GOTO 430
350 IF MD(M,14)<>0 THEN 390
360 OF=M:IF TD(1)=MD(0,1) THEN DF=0:GOSUB 3500:GOTO 430
370 SKIP=0:FOR M2=1 TO NM:IF MD(M2,5)=ROOM AND (MD(M2,14)<>0) AND RND(1)<0.25 THEN DF=M2:GOSUB 3500:M2=200:SKIP=-1
380 NEXT M2:IF SKIP THEN 430 ELSE DF=0:GOSUB 3500:GOTO 430
390 OF=M
400 SKIP=0:FOR M2=1 TO NM:IF MD(M2,5)=ROOM AND MD(M2,14)=0 THEN DF=M2:GOSUB 3500:M2=200:SKIP=-1
410 NEXT M2:IF SKIP THEN 430 ELSE 430
420 REM
430 NBTL=(FD(0)<TD(0))
435 IF NBTL THEN NEXT M
440 REM
450 GOTO 100
460 REM
470 REM
1000 REM /// get command
1010 GOSUB 1950
1030 IF S$="ALL" THEN 1120
1080 FOR A=1 TO NA:IF AN$(A)<> S$ OR AD(A,4)<>ROOM THEN NEXT A:PRINT:PRINT"I see no ";S$;" here!":PRINT:GOTO 100
1090 IF WT+AD(A,3)>10*MD(0,1) THEN PRINT:PRINT"It is too heavy for you.":PRINT:GOTO 100
1100 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
1110 GOTO 16000
1120 FOR A=1 TO NA:IF AD(A,4)<>ROOM THEN 1150
1130 IF WT+AD(A,3)>10*MD(0,1) THEN PRINT AN$(A);" is too heavy.":GOTO 1150
1140 PRINT AN$(A);" taken.":AD(A,4)=-1:WT=WT+AD(A,3)
1150 NEXT A:PRINT:GOTO 300
1950 IF S$="" THEN PRINT:PRINT C$(C);" what ";:A3$=A$:INPUT A$:GOSUB 31000:S$=A$:A$=A3$:GOTO 1950
1955 A$=S$:GOSUB 31000:S$=A$
1960 RETURN
2000 REM /// drop command
2010 GOSUB 1950
2020 IF NBTL THEN PRINT:PRINT"You can't do that with unfriendlies about!":PRINT:GOTO 100
2030 IF S$="ALL" THEN 2060
2040 FOR A=1 TO NA:IF AN$(A)<>S$ OR AD(A,4)<>-1 THEN NEXT A:PRINT"You aren't carrying a ";S$:GOTO 100
2050 WT=WT-AD(A,3):PRINT:PRINT"Dropped.":AD(A,4)=ROOM:PRINT:GOTO 300
2060 FOR A=1 TO NA:IF AD(A,4)<>-1 THEN 2080
2070 WT=WT-AD(A,3):AD(A,4)=ROOM:PRINT AN$(A);" dropped."
2080 NEXT A:GOTO 300
3000 REM /// attack command
3010 GOSUB 1950
3050 FOR M=1 TO NM:IF S$<>MN$(M) OR MD(M,5)<>ROOM THEN NEXT M:PRINT:PRINT"Attack who?":PRINT:GOTO 100
3060 IF MD(0,9)=-1 THEN PRINT:PRINT"You have no weapon ready!":PRINT:GOTO 100
3070 OF=0:DF=M:GOSUB 3500:IF NOT HIT THEN 3130
3080 IF INC<>0 THEN W2=AD(MD(0,9),6):WA(W2)=WA(W2)+2
3090 IF -EA<=AE THEN 300
3100 IF INT(100*RND(1)+1)<=MD(0,10) THEN 3130
3110 A=2:IF EA+AE=1 THEN A=1
3120 AE=AE+A:MD(0,10)=MD(0,10)+A
3130 IF MD(DF,14)=0 OR DF=0 THEN 300
3140 MD(DF,3)=MD(DF,3)/2:IF NBTL THEN MD(DF,14)=0:TD(0)=TD(0)+MD(DF,1):TD(1)=TD(1)-MD(DF,1):FD(0)=FD(0)+MD(DF,13):FD(1)=FD(1)-MD(DF,13):GOTO 300
3150 R2=ROOM:MD(DF,14)=0:GOTO 5100
3500 HIT=0:IF MD(OF,9)=-1 THEN RETURN
3505 PRINT MN$(OF);" attacks ";MN$(DF):PRINT" -- ";
3510 RL=INT(100*RND(1)+1):HIT=0:IF RL<5 OR RL<MD(OF,10) THEN HIT=-1
3515 IF HIT THEN 3600
3520 IF RL<97 THEN PRINT"a miss.":RETURN
3525 PRINT"a fumble!":FR=INT(100*RND(1)+1):IF FR<=35+40*ABS(MD(OF,9)=0) THEN PRINT" fumble recovered.":PRINT:RETURN
3530 IF FR<76 THEN PRINT" weapon dropped!":AD(MD(OF,9),4)=ROOM:MD(OF,9)=-1:PRINT:RETURN
3535 IF FR>95 THEN 3550
3540 PRINT" weapon broken!":AD(MD(OF,9),4)=0:MD(OF,9)=-1:IF RND(1)>0.9 THEN PRINT:RETURN
3545 PRINT" Broken weapon hurts user!"
3550 IF FR=100 THEN 3560
3555 D=MD(OF,11):S=MD(OF,12):DF=OF:A=1:GOTO 3650
3560 D=MD(OF,11)*2:S=MD(OF,12):DF=OF:A=0:GOTO 3650
3600 INC=INT(100*RND(1)+1)>MD(OF,10):MD(OF,10)=MD(OF,10)+2*(-INC)
3605 D=MD(OF,11):S=MD(OF,12):A=1:IF RL>5 THEN PRINT"a hit!":GOTO 3650
3610 PRINT"a critical hit!":R2=INT(100*RND(1)+1):IF R2<51 THEN A=0:GOTO 3650
3615 IF R2<86 THEN S=1.5*S:GOTO 3650
3620 IF R2<96 THEN D=2*D:GOTO 3650
3625 IF R2<100 THEN D=3*D:GOTO 3650
3630 GOTO 3700
3650 D2=0:FOR D3=1 TO D:D2=D2+INT(S*RND(1)+1):NEXT D3:D2=D2-A*MD(DF,8):IF D2<1 THEN PRINT" blow bounces off armour":PRINT:RETURN
3655 MD(DF,13)=MD(DF,13)+D2:IF MD(DF,13)>=MD(DF,1) THEN 3700
3660 A=MD(DF,14):FD(A)=FD(A)+D2
3665 ON INT(MD(DF,13)*5/MD(DF,1)+1) GOTO 3670,3675,3680,3685,3690
3670 PRINT:PRINT MN$(DF);" takes damage but is still in good shape.":RETURN
3675 PRINT:PRINT MN$(DF);" is hurting.":RETURN
3680 PRINT:PRINT MN$(DF);" is in pain.":RETURN
3685 PRINT:PRINT MN$(DF);" is very badly injured.":RETURN
3690 PRINT:PRINT MN$(DF);"is at death's door, knocking loudly.":RETURN
3700 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=NA-1-NM+DF:AD(A2,4)=ROOM:IF MD(DF,9)>0 THEN AD(MD(DF,9),4)=ROOM
3710 IF FD(0)>TD(0) THEN NBTL=0
3720 IF DF=0 THEN DIE=-1:GOTO 23010
3750 PRINT:RETURN
3760 REM
4000 REM /// look command
4010 IF NBTL THEN 2020
4030 V(ROOM)=0
4040 FOR A=1 TO NA-1:IF AN$(A)=S$ AND (AD(A,4)=ROOM OR AD(A,4)=-1) THEN GET#3,A:PRINT FND$(R3$)
4050 NEXT A
4060 GOTO 100
4080 REM
5000 REM /// movement command
5010 IF NBTL THEN 2020
5020 FOR D=1 TO 6:IF LEFT$(V$,1)<>MID$("NSEWUD",D,1) THEN NEXT
5030 R2=MAP(ROOM,D)
5040 IF R2>0 THEN 5100
5045 REM /// put special moves here
5050 IF R2=-999 THEN PRINT:PRINT"You successfully ride off into the sunset.":GOTO 23010
5060 IF R2=-5 THEN PRINT:DIE=1:PRINT"You have created an avalanche! You are buried alive in dirt and rocks. You are  never heard from again... I warned you!":GOTO 23010
5070 IF R2=-4 THEN PRINT:PRINT"You have gone the wrong way! No one ever sees you again...":DIE=1:GOTO 23010
5090 PRINT:PRINT"You can't go that way!":V(ROOM)=0:GOTO 100
5100 R3=ROOM:ROOM=R2:TD(0)=0:TD(1)=MD(0,1):FD(0)=0:FD(1)=MD(0,13)
5110 FOR M=1 TO NM:IF MD(M,5)=R3 THEN IF MD(M,14)<>0 THEN MD(M,5)=ROOM:GOTO 5150
5120 IF MD(M,5)<>ROOM THEN 5160
5130 FR=MD(M,3):IF FR<>0 AND FR<>100 THEN FR=FR+INT((CH-10)/2)
5140 MD(M,14)=ABS(FR>100*RDN(1)):IF MD(M,14)=0 THEN NBTL=1
5150 A=MD(M,14):FD(A)=FD(A)+MD(M,13):TD(A)=TD(A)+MD(M,1)
5160 NEXT M:NBTL=(TD(0)>0)
5170 GOTO 100
6000 REM /// power spell
6005 IF ROOM=49 THEN 6006 ELSE 6010
6006 PRINT:PRINT"You'll have to fight this one by yourself! Sorry...":GOTO 100
6010 S=4:GOSUB 7500:IF NOT SUC THEN 300
6020 RAISE=0:FOR M=1 TO NM:M2=13+M:IF AD(M2,4)=ROOM OR AD(M2,4)=-1 THEN RAISE=-1:PRINT MN$(M);" come alive!":AD(M2,4)=0:MD(M,5)=ROOM:MD(M,13)=0:IF MD(M,9)>0 THEN AD(MD(M,9),4)=0:IF MD(M,9)=MD(0,9) THEN MD(0,9)=0
6030 NEXT M:IF RAISE THEN NBTL=0:R2=ROOM:GOTO 5100
6040 FOR A=1 TO NA:IF AD(A,4)=ROOM THEN RAISE=-1:PRINT AN(A);" vanishes!":AD(A,4)=0
6050 NEXT A:IF RAISE THEN PRINT:GOTO 300
6060 RR=INT(100*RND(1)+1):IF RR<11 THEN PRINT:PRINT"The section of tunnel you are in collapses and you die.":DIE=1:GOTO 23010
6070 IF RR<31 THEN PNT:PRINT"You are teleported somewhere in the dungeon":PRINT:R2=INT(26*RND(1)+1):NBTL=0:GOTO 5100
6080 IF RR<86 THEN PRINT:PRINT"You hear a very loud sonic boom that echoes through the tunnels.":PRINT:GOTO 300
6090 IF RR>95 THEN PRINT:PRINT"All of your hits are healed.":PRINT:MD(0,13)=0:GOTO 300
6100 GOTO 10020
7000 REM /// heal spell
7010 S=2:GOSUB 7500:IF NOT SUC THEN 300
7020 PRINT:IF MD(0,13)<>0 THEN PRINT"Some of your wounds seem to clear up.":PRINT
7030 MD(0,13)=MD(0,13)-INT(10*RND(1)+1):IF MD(0,13)<0 THEN MD(0,13)=0
7040 ON INT(MD(DF,13)*5/MD(DF,1)+1) GOTO 7045,7050,7060,7070,7080
7045 PRINT"You feel great!.":PRINT:GOTO 7100
7050 PRINT"You feel much better.":PRINT :GOTO 7100
7060 PRINT"You feel better.":PRINT:GOTO 7100
7070 PRINT"Though you feel better, you are still very,very sick!":PRINT :GOTO 7100
7080 PRINT"Though you feel better, you are still at death's door knocking loudly!":PRINT
7090 REM
7100 GOTO 300
7495 REM
7496 REM try out success on spell
7497 REM
7500 SUC=0:IF SA(S)<>0 THEN RL=INT(100*RND(1)+1):SUC=(((RL<=S2(S)) OR (RL<5)) AND (RL<95))
7510 IF NOT SUC THEN PRINT:PRINT"Nothing happened.":RETURN
7520 RL=RND(100)*RND(1)+1):IF RL>S2(S) THEN S2(S)=S2(S)+2:SA(S)=SA(S)+2
7525 IF RL=100 THEN SA(S)=0:S2(S)=0:PRINT"The power required to cast this spell overloaded your mind and you forgot it!"
7530 S2(S)=S2(S)/2
7540 RETURN
8000 REM /// blast spell (alright!!!)
8010 GOSUB 1950
8020 FOR M=1 TO NM:IF S$<>MN$(M) OR MD(M,5)<>ROOM THEN NEXT M:PRINT:PRINT"You can't blast ";S$;"!":PRINT:GOTO 300
8030 S=1:GOSUB 7500:IF NOT SUC THEN 300
8040 PRINT:PRINT"Direct hit!":PRINT:S=5:D=1:DF=M:MD(M,14)=0:GOSUB 3650:PRINT:GOTO 300
10000 REM /// speed spell
10010 S=3:GOSUB 7500:IF NOT SUC THEN 300
10020 IF SPD=0 THEN MD(0,10)=MD(0,10)+2*MD(0,2):MD(0,2)=2*MD(0,2)
10030 SPD=INT(25*RND(1)+1:PRINT:PRINT"You can feel the new agility flowing through you!":PRINT:GOTO 300
11000 REM /// smile & wave command
11010 FOR I=1 TO NM
11020 PRINT MN$(I);
11030 IF MD(I,14)=0 THEN PRINT" growls at you." :GOTO 11040
11035 IF V$="WAVE" THEN PRINT " waves back." ELSE PRINT " smiles back."
11040 NEXT I
11050 GOTO 100
13000 REM /// say command
13010 GOSUB 1950
13030 IF S$="POWER" THEN 6000
13040 IF S$="HEAL" THEN 7000
13050 IF S$="BLAST" THEN 8000
13060 IF S$="SPEED" THEN 10000
13070 PRINT:PRINT"Okay, '";S$;"'":PRINT:GOTO 300
14000 REM /// drink command
14010 GOSUB 1950
14020 IF NBTL THEN 2020
14030 IF A$="POTION OF HEALING" AND POT=1 THEN 7020
14520 PRINT:PRINT"I don't think that's a very good idea."
14530 GOTO 300
15000 REM ///read command
15010 GOSUB 1950
15020 IF NBTL THEN 2020
15110 PRINT"I see no markings here!"
15120 GOTO 300
16000 REM ///ready a weapon
16010 GOSUB 1950
16020 FOR A=1 TO NA:IF AN$(A)<>S$ OR AD(A,4)<>-1 THEN NEXT A:PRINT:PRINT"You aren't carrying it!":PRINT:GOTO 100
16030 IF AD(A,2)<2 THEN PRINT:PRINT"That isn't a weapon!":PRINT:GOTO 100
16040 MD(0,10)=(EA+AE)*ABS(-EA>AE)+AD(A,4)+WA(AD(A,6))+2*MD(0,2):MD(0,9)=A:MD(0,11)=AD(A,7):MD(0,12)=AD(A,8)
16050 PRINT" readied.":PRINT:GOTO 300
16070 REM
17000 REM ///flee command
17010 IF NOT NBTL THEN PRINT:PRINT"What are you fleeing from?":PRINT:GOTO 100
17030 M=0:GOSUB 17500
17040 NBTL=0:GOTO 5100
17500 ' map is in memory now
17510 R2=MAP(ROOM,INT(6*RND(1)+1)):IF R2<1 THEN 17510
17520 RETURN
18000 REM /// inventory command
18005 PRINT:PRINT"You are carrying the following --":FOR A=1 TO NA:IF AD(A,4)=-1 THEN PRINT"  ";AN$(A);:IF MD(0,9)=A THEN PRINT"  (Ready Weapon)" ELSE PRINT
18010 NEXT A:GOTO 100
19000 REM /// enter command
19005 IF NBTL THEN 2020
19010 GOSUB 1950
19050 PRINT:PRINT"I'm not sure what you mean by that.  Try giving a direction to move.":PRINT:GOTO 100
19060 REM
20000 REM /// give command
20001 GOSUB 1950
20003 PRINT:INPUT"To Who ";M1$:IF M1$="" THEN 20003
20004 A$=M1$:GOSUB 31000:M1$=A$
20005 FOR M1=1 TO NM:IF MN$(M1)=M1$ AND MD(M1,5)=ROOM THEN 20010
20006 NEXT M1:PRINT:PRINT"Give ";S$;" to who??":PRINT:GOTO 100
20010 FOR I1=1 TO NA
20030 IF S$<>AN$(I1) OR AD(I1,4)<>-1 THEN 20100
20040 IF AD(I1,2)<2  OR MD(I1,14)=0 THEN PRINT:PRINT"It is refused.":GOTO 300
20050 MD(M1,9)=I1:PRINT:PRINT MN$(M1);" takes it."
20090 GOTO 300
20100 NEXT I1
20110 PRINT"You aren't carrying ";S$;"!"
21000 REM ///open command
21010 IF NBTL THEN 2020
21060 PRINT:PRINT"Would you have any bloody ideas how?":GOTO 100
21500 REM /// Save command
21510 INPUT"Save under what name ";N$
21520 IF N$="" THEN GOTO 100
21525 CLOSE#1
21530 OPEN "O",#1,N$
21540 FOR I=1 TO NA:FOR J=1 TO 8: PRINT#1,AD(I,J):NEXT J:NEXT I
21550 FOR I=0 TO NM:FOR J=1 TO 15:PRINT#1,MD(I,J):NEXT J:NEXT I
21560 FOR I=1 TO NR:FOR J=1 TO 6: PRINT#1,MAP(I,J):NEXT J:NEXT I
21570 GOSUB 30600
21580 PRINT#1,A$
21590 PRINT#1,R2:PRINT#1,ROOM
21600 CLOSE#1
21605 OPEN "R",#1,"EAMON.DES",255
21606 FIELD 1,255 AS R1$
21610 INPUT"Do you wish to quit ?";A$
21620 IF A$<>"Y" AND A$<>"y" THEN 100
21625 CLOSE#1:CLOSE#2:CLOSE#3
21630 CLS:END
21700 REM /// Get old game
21710 INPUT"Name of game to play ?";N$
21720 IF N$="" THEN RETURN
21725 CLOSE#1
21730 OPEN "I",#1,N$
21740 FOR I=1 TO NA:FOR J=1 TO 8: INPUT#1,AD(I,J):NEXT J:NEXT I
21750 FOR I=0 TO NM:FOR J=1 TO 15:INPUT#1,MD(I,J):NEXT J:NEXT I
21760 FOR I=1 TO NR:FOR J=1 TO 6: INPUT#1,MAP(I,J):NEXT J:NEXT I
21770 LINE INPUT#1,B$
21775 GOSUB 30000
21780 INPUT#1,R2:INPUT#1,ROOM
21800 CLOSE#1
21805 OPEN "R",#1,"EAMON.DES",255
21806 FIELD 1,255 AS R1$
21810 GOTO 100
22000 REM /// initialize the program!!!
22010 OPEN "I",#1,"EAMON.ART"
22011 INPUT#1,NA
22012 DIM AN$(NA+4),AD(NA+4,8)
22013 FOR A=1 TO NA:INPUT#1,AN$(A)
22014 FOR A2=1 TO 4:INPUT#1,AD(A,A2)
22015 NEXT A2:IF AD(A,2)>1 THEN FOR A2=5 TO 8:INPUT#1,AD(A,A2):NEXT A2
22016 NEXT A:CLOSE#1
22017 REM
22020 OPEN"I",#1,"EAMON.MON"
22021 INPUT#1,NM:DIM MN$(NM),MD(NM,15)
22022 FOR A=1 TO NM:INPUT#1,MN$(A)
22023 FOR A2=1 TO 12:INPUT#1,MD(A,A2)
22024 NEXT A2:NEXT A
22025 CLOSE#1
22028 ON ERROR GOTO 24000
22029 A$="FRESHMEA.T"
22030 OPEN "I",#1,A$
22031 A$="":INPUT#1,REC
22035 LINE INPUT#1,B$:GOSUB 30000
22036 CLOSE#1
22037 MN$(0)=CNAME$:MD(0,1)=HD:MD(0,2)=AG
22039 REM
22040 '
22048 OPEN "I",#1,"EAMON.ROM"
22049 LINE INPUT#1,R5$:NR=50
22050 FOR ROOM=1 TO NR
22052 GOSUB 25000
22053 NEXT ROOM
22054 CLOSE#1
22059 '
22060 OPEN"R",#2,"ROOM.NAM",32
22061 FIELD 2,32 AS R2$
22062 OPEN"R",#1,"EAMON.DES",255
22063 FIELD 1,255 AS R1$
22064 OPEN"R",#3,"EAMON.EFF",255
22065 FIELD 3,255 AS R3$
22070 COLOR 12
22071 SCREEN 0:CLS:KEY 1,"NORTH"+CHR$(13):KEY 2,"EAST"+CHR$(13):KEY 3,"WEST"+CHR$(13):KEY 4,"SOUTH"+CHR$(13):KEY 5,"LOOK"+CHR$(13):KEY 6,"GET"+CHR$(13):KEY 7,"INVENTORY"+CHR$(13):KEY 8,"ATTACK"+CHR$(13):KEY 9,"SAVE"+CHR$(13):KEY 10,"PLAY"+CHR$(13)
22120 NZ=NA
22121 FOR W2=1 TO 4:IF WN$(W2)="NONE" THEN 22161
22160 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)
22161 NEXT W2
22165 W2=4
22166 WZ=W2
22170 EA=0:MD(0,8)=0:A2=INT(AC/2):IF A2*2<>AC THEN MD(0,8)=1:EA=-5
22180 IF A2<>0 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
22190 MD(0,10)=(EA+AE)*ABS(-EA>AE)+WO(W2)+WA(WT(W2))+2*MD(0,2):MD(0,7)=0:MD(0,9)=NA:MD(0,11)=WD(W2):MD(0,12)=WS(W2)
22200 REM /// init things
22210 READ NC:DIM C$(NC):FOR C=1 TO NC:READ C$(C):NEXT C
22220 FOR S=1 TO 4:S2(S)=SA(S):NEXT S
22230 DIM V(60):ROOM=1
22235 FOR A=1 TO NA-1:IF AN$(NA)=AN$(A) THEN AN$(A)=AN$(A)+"#":GOTO 22235
22236 NEXT A
22241 WIDTH 80:SCREEN 0:COLOR 13:PRINT:PRINT"(Hit any key to continue)  ";
22242 A$=INKEY$:IF A$="" THEN 22242
22243 PRINT:PRINT:GOTO 100
22250 DATA 38
22260 DATA GET,PICK,DROP,ATTACK,LOOK,EXAMINE,UP,U,DOWN,D,NORTH,N,EAST,E,WEST,W,SOUTH,S,POWER,HEAL,BLAST,SPEED,SMILE,WAVE,SAY,DRINK,READ,READY,ESCAPE,RETREAT,FLEE,INVENTORY,I,ENTER,GIVE,OPEN,SAVE,PLAY
22270 END
23000 REM /// END GAME
23010 PRINT:PRINT"(Hit any key to continue)  ";
23011 A$=INKEY$:IF A$="" THEN 23011 ELSE PRINT
23020 CLOSE#1:CLOSE#2:CLOSE#3
23030 AD(10,8)=10
23040 IF SPD THEN MD(0,2)=MD(0,2)/2
23050 IF DIE THEN 23240
23060 FOR W=2 TO 4:IF WN$(W)<>"NONE" THEN NEXT W
23070 W2=W:FOR W3=1 TO NA-1:IF AD(W3,2)>1 AND AD(W3,4)=-1 THEN WN$(W2)=AN$(W3):WP(W2)=W3:W2=W2+1:AD(W3,4)=0
23080 NEXT W3:IF W2<6 THEN 23160
23090 CLS:PRINT :PRINT :PRINT :PRINT :PRINT"As you try to enter the main hall, Sir William Missfire appears and tells you,  'You have too many weapons-- 4 is the leagal limit.'":PRINT:PRINT"Your weapons are---"
23100 FOR W4=1 TO W2-1:PRINT"    ";W4;"--";WN$(W4):NEXT W4:PRINT:PRINT"Hit the number key for one to throw away. ( 1 -";W2-1;")  ";
23110 A$=INKEY$:IF A$="" THEN 23110 ELSE W5=VAL(A$):IF W5<1 OR W5>W2-1 THEN 23110
23120 IF WP(W5)<>0 THEN AD(WP(W5),4)=-1
23130 WN$(W5)=WN$(W2-1):WP(W5)=WP(W2-1):W2=W2-1:IF W2>5 THEN 23090
23140 FOR W4=2 TO W2-1:FOR W5=1 TO W4-1:IF WN$(W4)=WN$(W5) THEN WN$(W4)=WN$(W4)+"#":GOTO 23140
23150 NEXT W5:NEXT W4
23160 FOR W=1 TO 4:IF WP(W)<>0 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)
23170 NEXT W:CLS:LOCATE 5,1:PRINT"As you deliver your treasures to Sam Slicker, the local buyer of such things,":PRINT"he examines your goods and pays you ";
23180 TP=0:FOR A=1 TO NA-1:IF AD(A,4)<>-1 THEN 23210
23190 IF AD(A,2)<>0 THEN AD(A,1)=AD(A,1)*CH/10
23200 TP=INT(TP+AD(A,1))
23210 NEXT A:PRINT TP;"gold pieces.":PRINT
23220 GOLD=GOLD+TP
23230 PRINT:PRINT:PRINT"(Hit any key to continue)  ";
23231 A$=INKEY$:IF A$="" THEN 23231 ELSE PRINT
23240 KILL"FRESHMEA.T"
23241 A$=INKEY$:PRINT:CLS:LOCATE 5,1:PRINT"(Insert EAMON MASTER diskette, then hit any key";:IF DIE THEN PRINT")  "; ELSE PRINT " to goto Main Hall)  ";
23242 A$=INKEY$:IF A$="" THEN 23242
23250 ON ERROR GOTO 24000
23251 IF DIE THEN KILL"ADVENTUR.ER":END
23260 OPEN"R",#1,"CHARACTE.RS",255
23261 GOSUB 30600
23262 FIELD 1,255 AS R1$
23263 LSET R1$=A$
23264 PUT#1,REC+1
23270 CLOSE#1
23290 OPEN "O",#1,"ADVENTUR.ER"
23291 PRINT#1,MN$(0):PRINT#1,REC
23292 CLOSE#1
23300 KEY OFF:RUN"MAINHALL"
23310 STOP
24000 IF ERR=53 THEN 24100
24005 PRINT "Error #";ERR
24010 PRINT "At line";ERL
24020 PRINT:PRINT"Hit any key to continue"
24030 A$=INKEY$:IF A$="" THEN 24030
24040 RESUME NEXT
24050 STOP
24100 CLS
24110 IF A$<>"FRESHMEA.T" THEN 24005
24120 CLS
24130 PRINT"You must enter this program through the EAMON program and main hall."
24140 PRINT:PRINT:STOP
25000 REM /// get room move info
25010 LINE INPUT#1,R$
25030 FOR I=1 TO 6
25040 ML=INSTR(R$,",")
25045 IF ML=0 THEN MAP(ROOM,I)=VAL(R$):R$="":GOTO 25070
25050 MAP(ROOM,I)=VAL(LEFT$(R$,ML-1))
25060 R$=MID$(R$,ML+1)
25070 NEXT I
25080 RETURN
28000 T1=VAL(S$)
28010 IF T1>NR OR T1<1 THEN 300
28020 R2=T1:GOTO 5100
30000 REM
30010 REM  break up record into its needed parts
30020 REM  and damned be he the first to screw up this ordered set!!!
30030 REM
30031 REM HINT: a string of 37 commas will clear all fields!
30040 REM
30050 R$=B$
30060 W=1:X=1:Y=1:IF LEN(R$)=0 THEN R$=",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
30070 FOR I=1 TO 38
30075 A1$=""
30080 IF R$="" THEN 30555
30090 J=INSTR(R$,",")
30095 IF J<>0 THEN A1$=LEFT$(R$,J-1):R$=MID$(R$,J+1) ELSE IF R$<>"" THEN A1$=R$:R$=""
30100 REM
30110 REM
30120 ON I    GOTO 30170,30180,30190,30200,30210,30210,30210,30210,30250,30250
30130 ON I-10 GOTO 30250,30250,30250,30300,30310,30320,30330,30340,30350,30360
30140 ON I-20 GOTO 30370,30380,30390,30350,30360,30370,30380,30390,30350,30360
30150 ON I-30 GOTO 30370,30380,30390,30350,30360,30370,30380,30390
30160 STOP
30170 CNAME$=A1$:GOTO 30550
30180 HD=VAL(A1$):GOTO 30550
30190 AG=VAL(A1$):GOTO 30550
30200 CH=VAL(A1$):GOTO 30550
30210 SA(X)=VAL(A1$):X=X+1:GOTO 30550
30250 WA(Y)=VAL(A1$):Y=Y+1:GOTO 30550
30300 AE=VAL(A1$):GOTO 30550
30310 SEX$=A1$:GOTO 30550
30320 GOLD=VAL(A1$):GOTO 30550
30330 BANK=VAL(A1$):GOTO 30550
30340 AC=VAL(A1$):GOTO 30550
30350 WN$(W)=A1$:GOTO 30550
30360 WT(W)=VAL(A1$):GOTO 30550
30370 WO(W)=VAL(A1$):GOTO 30550
30380 WD(W)=VAL(A1$):GOTO 30550
30390 WS(W)=VAL(A1$):W=W+1:GOTO 30550
30550 REM
30555 NEXT I
30560 RETURN
30570 REM
30580 REM   pack the array with commas
30590 REM
30600 A$=CNAME$+","+STR$(HD)+","+STR$(AG)+","+STR$(CH)+","
30610 FOR I=1 TO 4:A$=A$+STR$(SA(I))+",":NEXT I
30620 FOR I=1 TO 5:A$=A$+STR$(WA(I))+",":NEXT I
30630 A$=A$+STR$(AE)+","+SEX$+","+STR$(GOLD)+","+STR$(BANK)+","+STR$(AC)
30640 FOR I=1 TO 4:A$=A$+","+WN$(I)+","
30650 A$=A$+STR$(WT(I))+","+STR$(WO(I))+","
30660 A$=A$+STR$(WD(I))+","+STR$(WS(I))
30670 NEXT I
30680 RETURN
31000 REM turn to upper case
31005 A2$=""
31010 FOR I=1 TO LEN(A$)
31020 A1$=MID$(A$,I,1)
31030 IF A1$<"a" OR A1$>"z" THEN 31047
31040 A2$=A2$+CHR$(ASC(A1$)-32)
31045 GOTO 31050
31047 A2$=A2$+A1$
31050 NEXT I
31055 A$=A2$
31060 RETURN
32000 CLS
60000 WIDTH 80:CLS:KEY OFF:LOCATE 5,1:PRINT"               T H E   L O R D  O F  T H E  U N D E R L A N D"
60001 GOTO 90

FILES721.TXT

------------------------------------------------------------------------
Disk no 721   "Lord of the Underland" by Justin Langseth             V1
------------------------------------------------------------------------
Here is the second prize winner in PC-SIG's "Write an Adventure
Module" contest. The adventure contained on this disk must be used in
conjunction with the main adventure program on disk #297 in our
library.

DUNGEON  BAS  Main dungeon module
EAMON    ???  Data file (6 files)
???????? PIC  Picture data file (2 files)
RESUME   BAS  Sub-program
ROOM     NAM  Data file
UNDERLND DOC  Documentation file

PC-SIG
1030D E. Duane Ave.
Sunnyvale, CA  94086
(408) 730-9291
(c) Copyright 1987 PC-SIG

RESUME.BAS

1000 REM  Go on and Adventure
1001 REM
1010 CLS:PRINT:PRINT:PRINT:PRINT:COLOR 20:PRINT"To start old game, type PLAY at the YOUR COMMAND question..."
1015 FOR ZZX=1 TO 2000:NEXT ZZX
1020 '$=INKEY$:IF A$="" THEN 1020
1021 'F A$<>"c" AND A$<>"C" THEN 1020
1030 PRINT
1040 OPEN"I",#1,"EAMON.NAM"
1041 INPUT#1,ADNAME$:INPUT#1,FINM$
1042 CLOSE#1
1050 CLS:PRINT:PRINT:PRINT:PRINT
1052 COLOR 11:PRINT"You are about to adventure in ";ADNAME$:PRINT:PRINT
1060 OPEN "O",#1,"FRESHMEA.T"
1062 GOSUB 30000:PRINT#1,RC:PRINT#1,A$
1066 CLOSE#1
1068 RUN FINM$
1070 STOP
29990 REM
30000 REM SET UP CHARACTER INFO FOR DUNGEON
30010 REM
30100 CNAME$="-"
30110 SEX$="M"
30120 IF CNAME$="" THEN CNAME$="You"
30130 IF SEX$<>"M" AND SEX$<>"F" THEN 30110
30140 '
30150 WNAME$(1)="SWORD"
30160 WTYPE(1)=4
30170 WODDS(1)=20
30180 WDICE(1)=1
30190 WSIDE(1)=6
30194 FOR I=2 TO 4
30195 WNAME$(I)="NONE"
30196 NEXT I
30200 '
30600 A$=CNAME$+","+STR$(18)+","+STR$(18)+","+STR$(18)+","
30610 FOR I=1 TO 4:A$=A$+STR$(100)+",":NEXT I
30620 FOR I=1 TO 5:A$=A$+STR$(40)+",":NEXT I
30630 A$=A$+STR$(50)+","+SEX$+","+STR$(1000)+","+STR$(1000)+","+STR$(3)
30640 FOR I=1 TO 4:A$=A$+","+WNAME$(I)+","
30650 A$=A$+STR$(WTYPE(I))+","+STR$(WODDS(I))+","
30660 A$=A$+STR$(WDICE(I))+","+STR$(WSIDE(I))
30670 NEXT I
30680 RETURN

UNDERLND.DOC



             A MODULE TO THE EAMON ADVENTURE GAME SYSTEM...





                        The Lord of the Underland


                           by Justin Langseth





For use on IBM PC and compatable systems...





TO START:
Use the EAMON master disk and go to the Main Hall. Use the (1) option
from there.  When prompted, place the "Lord of the Underland" disk
in the drive. From there, you will get a title page if you gave a
graphics moniter. From there, refer to your EAMON manual.

SPECIAL COMMANDS:
These commands are not covered in the EAMON manual:

SAVE - To save games...
PLAY - Restores games...

NOTE: To restore games, from DOS type BASICA/S:256. When you get into
basica, put the "Lord of the Underland" disk in the drive and type:
RUN RESUME.BAS. When you get into the game, user the PLAY command right
away to restore game...

FUNCTION KEYS:
The bottom of the screen contains a list of the function keys and
what they do. For example, if you want to go north, you could simply
press F1.

ADDRESS:
If you find this module enjoyable, send a contribution to:

Justin Langseth
12 Thirteenth Avenue
Warwick, RI 02886-8428

If you have a problem or question with this module, you can call me
weekdays 5-7PM (EST-Eastern Standard Time) and weekends 11AM-7PM (EST)
PLEASE- Rember that I am in Eastern Standard Time. (401)738-4347











Directory of PC-SIG Library Disk #0721

 Volume in drive A has no label
 Directory of A:\

DUNGEON  BAS     17664   1-01-80  12:03a
EAMON    ART      1536   1-01-80  12:21a
EAMON    DES     12800   1-01-80  12:13a
EAMON    EFF     27136   1-01-80  12:22a
EAMON    MON      1408   1-01-80  12:21a
EAMON    NAM       128   1-01-80  12:01a
EAMON    ROM      1152   1-01-80  12:21a
FILES721 TXT       732   3-02-87   2:51p
GO       BAT       441   1-04-80   8:39a
INTRO    PIC     16512   1-01-80  12:18a
RESUME   BAS      1152   1-01-80  12:41a
ROOM     NAM      1664   1-01-80  12:21a
UNDERLND DOC      1419   1-01-80  12:49a
WELCOME  PIC      4007   1-01-80  12:21a
       14 file(s)      87751 bytes
                       69632 bytes free