1 SUB NEWDGN(CHN$) 10 ! DNDDGN: DUNGEON PROGRAM FOR DND & ! WRITTEN MAY 1976 BY D LAWRENCE & ! VERSION 3.0 & ! COPYWRITE JUNE 7,1978 BY DANIEL M LAWRENCE & ! V2A JLB LINE 295 & ! V2B RSB - Converted text to lower case. & ! Removed 18 max attribute restriction. & ! V2D JLB & ! Allow 6 Dungeons (Dim level(23999)) & ! Use TMP: for DNDA??.TMP & ! Privilege (1,216), as well as (1,25), (1,254) & ! Return of the Nameless Ghod. & ! Fix calculation of C(21) in line 9190 & ! Removed reference to L in line 9180 (see DNDSPC) & ! V3 DAS Convert to one task (overlaid) & ! Various modifications for VAX compatibility & ! 20 REM WRITTEN MAY 1976 BY D LAWRENCE & 30 REM VERSION 3.0 & 40 REM COPYWRITE JUNE 7,1978 BY DANIEL M LAWRENCE & 50 ! V2A & ! Changed stat changer to make it fair (RSB) & ! V2B & ! Fixed line 295 swapper & ! V3 DAS Convert to one task (overlaid) & ! Various modifications for VAX compatibility & ! & 105 DIM #5,D$(20)=16,S1%(20),L1%(23999) !LEVEL DATA & 110 COM (DNDA) N$(1)=8,C(64),L%(21,21),I(8),I1(8) & 115 DIM #8,N2$(100,1)=8,C2(100,64) !PERM CHAR STORAGE & 120 DIM #9,N3$(1000)=32 !ORB FILE & 200 COM (MEM) M(20),Q(4,2),V$(4)=8,P%(4,4),M$(20)=12,S$(8,6)=32,S$=18, & MINDUNLVL(20),MAXDUNLVL(20),MINMONLVL(20) 205 DEF FNT$(A) !2 CHAR A & 210 Z$=FNN1$(A) & \ IF LEN(Z$)=1 THEN & Z$="0"+Z$ & 215 FNT$=Z$ & 220 FNEND & 225 DEF FNC$ !SINGLE CHAR INPUT SYS FUNCTION VERSION & 230 CALL IN1CHR(CHAR%) & \ FNC$=CHR$(CHAR%) & 235 FNEND & 240 DEF FNS$(U)=MID(S$,3*U-2,3) !STAT NAMES & 245 DEF FNP !POPULATE & 250 IF RND>.4 THEN & FNP=0 & \ GOTO 285 & 255 IF RND>.5 THEN & GO TO 275 & 260 FNP=256 & \ IF RND>.5 THEN & GO TO 285 & 265 FNP=768 & \ IF RND>.05 THEN & GO TO 285 & 270 FNP=1792 & \ GOTO 285 & 275 FNP=512 & \ IF RND>.2 THEN & GO TO 285 & 280 FNP=1536 & 285 FNEND & 290 DEF FNS%(A%,Z) & 295 IF Z=1 THEN & A%=SWAP%(A%) & 296 !V2A IF Z=1 THEN Z1%=INT(A%/256)\Z2%=A%-Z1%*256\A%=Z2%*256+Z1% & ! 300 FNS%=A% AND 255% & 305 FNEND & 310 DEF FNM%(A%,B%)=A%*256%+B% !MERGE & 315 DEF FNE$(E$,P) !EQUIPMENT PRINT & 320 IF P<0 THEN & FNE$="" & \ GOTO 335 & 325 IF P<>0 THEN & E$="Magic "+E$+" +"+FNN1$(P) & 330 FNE$=E$+CHR$(13)+CHR$(10) & 335 FNEND & 340 DEF FNI(R%) !ANALYZE ROOM & 345 I(1),I(3)=R% AND 3% & \ R%=R%/4% & \ I(2),I(4)=R% AND 3% & \ R%=R%/4% & 350 IF C(37)>0 THEN & GO TO 365 & 355 IF RND<.85 AND I(3)=3 THEN & I(3)=1 & 360 IF RND<.85 AND I(4)=3 THEN & I(4)=1 & 365 I(5)=R% AND 15% & \ R%=R%/16% & \ I(6)=R% AND 1% & \ R%=R%/2% & \ I(7)=R% AND 1% & \ R%=R%/2% & 370 I(8)=R% & \ FNI=I(5) & 375 FNEND & 380 DEF FNP$(A$,B$,P) !PUT B$ AT P IN A$ & 385 IF P=1 THEN & FNP$=B$+RIGHT(A$,P+LEN(B$)) & \ GOTO 395 & 390 FNP$=LEFT(A$,P-1)+B$+RIGHT(A$,P+LEN(B$)) & 395 FNEND & 400 DEF FNO(A$) !FAST OUTPUT A$ & 405 Z5$=Z5$+CHR$(10) & \ FOR Z1=1 TO LEN(A$) & \ Z2$=MID(A$,Z1,1) & \ IF Z2$=" " THEN & GO TO 430 & 410 IF C9/2>Z1 THEN & Z5$=Z5$+CHR$(13) & \ C9=0 & 415 IF C9>Z1 THEN & Z5$=Z5$+STRING$(C9-Z1,8) & \ C9=Z1 & 420 WHILE C90 THEN & GO TO 530 & 520 IF RND<.85 AND I1(3)=3 THEN & I1(3)=1 & 525 IF RND<.85 AND I1(4)=3 THEN & I1(4)=1 & 530 I1(5)=R% AND 15% & \ R%=R%/16% & \ I1(6)=R% AND 1% & \ R%=R%/2% & 535 I1(7)=R% AND 1% & \ R%=R%/2% & \ I1(8)=R% & 540 IF T<9 THEN & FNI1=I1(T) & ELSE & IF I1(5)+I1(6)+I1(7)=0 THEN & FNI1=0 & ELSE & FNI1=1 & 545 FNEND & 550 DEF FND1$(X,Y) !DISPLAY FUNCTIONS & 555 IF FNI1(P%(X,Y),3)=0 THEN & FND1$=" " & ELSE & FND1$="I" & 560 FNEND & 565 DEF FND2$(X,Y)=MID(V$(0),FNI1(P%(X,Y),3)+1,1) & 570 DEF FND3$(X,Y)=V$(FNI1(P%(X,Y),4)+1) & 575 DEF FNO$(A$,B$)="Hit to "+A$+", or to "+B$+":" !OPTION PRINT & 600 DEF FNE(L) !EXPERIENCE FOR LEVEL L & 602 IF L>10 THEN & Z2=L-10 \ Z2=Z2^1.5 & \ Z=FNE(10)+INT(FNE(10)*Z2) & \ GOTO 608 & 604 IF C(7)=0 THEN & Z=2000 & ELSE & IF C(7)=2 THEN & Z=2500 & ELSE & Z=1500 & 606 Z=Z*2 FOR Z1=3 TO L & \ IF L=1 THEN & Z=0 & 608 FNE=Z & 610 FNEND & 630 DEF FNR(A,B) !ROLL A B SIDED DICE & 635 Z=0 & \ Z=Z+INT(RND*B+1) FOR Z1=1 TO A & \ FNR=Z & 640 FNEND & 645 DEF FNN1$(N) & 650 Z$="" & 655 IF N=0 THEN & GO TO 675 & 660 Z1=INT(N/10)*10 & 665 Z$=MID("0123456789",N-Z1+1,1)+Z$ & 670 N=Z1/10 & \ GOTO 655 & 675 FNN1$=Z$ & 680 FNEND & 999 GOTO 3000 IF CHN$="NEWDGN" & \GOTO 7005 IF CHN$="NEWTRS" & \STOP & 1000 REM *INITIALIZE* & 1010 REM ALL DONE AT 20050 NOW & 2000 REM *NEW EXPEDITION* & 2005 C(64)=1 & \ IF C(15)=0 THEN & GO TO 2020 & 2010 CALL INILVL & \ PRINT & \ PRINT "Resuming your expedition sire." & 2015 GOTO 3000 & 2020 C(15)=1 & \ C(10)=C(11) & \ C(I)=C(I-6) FOR I=31 TO 36 & 2030 C(16)=FNS%(S1%(-C(18)),1) & \ C(17)=FNS%(S1%(-C(18)),2) & 2040 C(12),C(21)=0 & \ C(I)=0 FOR I=37 TO 47 & \ CALL INILVL & 3000 REM *NEW POSITION* & 3005 I=C(63) & \ ON C(64)+1 GOTO 1000,3010,10000,10150 & 3010 I=FNI(L%(C(16),C(17))) & \ IF RND>.1 AND I(5)=15 THEN & print "You have entered solid rock!" & \ print "The Gods are kind, so, instead of dying, you have been moved." & \ X=C(16) & \ Y=C(17) & \ C(64)=2 & \ GOTO 8000 & 3020 IF RND<.1 OR (C(50)=1 AND RND>.6) THEN & I(6)=1 & \ IF RND>.5 THEN & I(7)=1 & \ IF RND>.1 THEN & I(8)=1 & ELSE & I(8)=0 & 3030 GOSUB 15000 & \ L=C(15) & 4000 REM *ENCOUNTERS* & 4010 C(63)=0 & \ C(64)=1 & 4020 IF NOT(I(6)=1 AND ((C(46)>0 AND RND>.7) OR (C(53)/30>RND))) THEN & GO TO 4040 & 4030 PRINT "You have not been seen..." & \ PRINT FNO$("approach","ignore it"); & 4035 A$=FNC$ & \ PRINT & \ IF A$<>CHR$(13) THEN & I(6),I(7)=0 & 4040 IF I(6)=0 THEN & GO TO 7000 & 4050 IF C(47)>0 OR (C(46)>0 AND RND>.3) THEN & I(6)=0 & \ GOTO 7000 & 4060 IF (C(45)>0) AND RND>.1 THEN & I(7)=1 & 4070 REM *MONSTER* & 4075 CHN$ = "NEWCBT" & \ GOTO 32767 & 7000 REM *TREASURE* & 7001 C(63)=L & \ IF I(7)=0 THEN & C(64)=1 & \ GOTO 8000 & 7005 L=C(63%) & \R%=FNR(1%,100%) & \IF R%<30% THEN IT$="a pile of silver" ELSE & IF R%<40% THEN IT$="a pile of gold" ELSE & IF R%<60% THEN IT$="a pile of platinum" ELSE & IF R%<72% THEN IT$="some gems" ELSE & IF R%<80% THEN IT$="a jewel" & ELSE IF R%<90% THEN 7065 ELSE 7500 & 7010 IF R%<30% THEN T=INT(100*RND*L+10) ELSE & IF R%<40% THEN T=INT(500*RND*L+50) ELSE & IF R%<60% THEN T=INT(1000*RND*L+100) ELSE & IF R%<72% THEN T=INT(500*(RND^.5)*L+500) ELSE & T=INT(6000*(RND^3)*L+500) & 7020 PRINT "You see ";IT$;"..." & \GOSUB 20800 & \PRINT FNO$("pick it up","leave it behind"); & \A$=FNC$ & \PRINT & \GOTO 7900 IF A$=CHR$(10%) & \PRINT "DUMMY!" IF A$<>CHR$(13%) & \GOTO 7020 IF A$<>CHR$(13%) & \Z=FND(C(15)/1.2) IF I(8)=1 & \GOTO 13000 IF Z=-1% & \PRINT "The treasure is worth ";NUM1$(T);" gold." & \GOTO 7100 & 7065 PRINT "You have discovered a chest..." & \GOSUB 20800 & \PRINT FNO$("open it","leave it"); & \A$=FNC$ & \PRINT & \GOTO 7900 IF A$=CHR$(10%) & \PRINT "Stupid DOLT!" IF A$<>CHR$(13%) & \GOTO 7065 IF A$<>CHR$(13%) & \Z=1 IF I(8)=1 AND RND<.5 & \SLEEP 2% & \PRINT "Chest EXPLODES!!!!" IF Z=1 & \Z=FND(L+5) IF Z=1 & \GOTO 13000 IF Z=-1 & \T=INT(3000*RND*L+500) & \PRINT "The chest holds ";NUM1$(T);" in gold." & 7100 C(12)=C(12)+T & \I=C(15)/C(8) & \I=1 IF I>1 & \C(21)=C(21)+INT(T*I) & \GOTO 7900 IF R%<80% OR R%>89% & 7500 R%=FNR(1%,8%) & \ON R% GOTO 7510,7555,7585,7615,7645,7665,7700,7700 & 7510 V$=TRM$(MID("Sword Mace Dagger",C(7%)*6%+1%,6%)) & \R%=(RND>.833) & 7520 PRINT "You have found a magic ";V$;"!" & \I(8)=ABS(R%) & \GOSUB 20800 & \PRINT FNO$("pick it up","leave it behind"); & \A$=FNC$ & \PRINT & \GOTO 7770 IF A$=CHR$(10%) & \PRINT "Think stupid!" IF A$<>CHR$(13%) & \GOTO 7520 IF A$<>CHR$(13%) & \IF C(22)>L THEN PRINT "You already have a ";V$;" +";NUM1$(C(22)) & ELSE IF NOT(R%) THEN C(22%)=C(22%)+1% & \PRINT "You have found a ";FNE$(V$,C(22%)); & ELSE PRINT "Its a hostile ";V$;"!" & \IF FND(C(22%))=-1% THEN 13000 & 7530 GOTO 7770 & 7555 V$=TRM$(MID("Plate Chain Leather",C(7%)*7%+1%,7%))+" Armor" & \I1%=C(23%) & \I1%=C(23%)+1% IF C(23%)CHR$(13%) & \GOTO 7615 IF A$<>CHR$(13%) & \IF RND>.5 THEN GOSUB 21100 ELSE GOSUB 21000 & 7617 GOTO 7770 & 7645 PRINT "You have found a magic torch!" & \PRINT "It starts burning." & \SLEEP 2% & \C(37%)=0% IF C(37%)<0% & \C(37%)=C(37%)+FNR(3%,10%) & \I(7)=0 & \GOSUB 15000 & \GOTO 7900 & 7665 PRINT "You have found a Ring of Regeneration +"; & \I%=INT(RND^3*L+1) & \PRINT NUM1$(I%) & \IF C(51%)>=I% THEN & PRINT "You already have a better one." & \GOTO 7770 & 7680 PRINT FNO$("pick it up","leave it behind"); & \A$=FNC$ & \PRINT & \IF A$=CHR$(10%) THEN 7770 ELSE IF A$=CHR$(13%) THEN C(51%)=I% & ELSE PRINT "Try again, chowderhead!" & \GOTO 7680 & 7700 V$="Elven Cloak" & \V$="a pair of Elven Boots" IF R%=8% & \PRINT "You have found ";MID("an ",-4%*(R%=8%)+1%,3%);V$;" +"; & 7710 I%=INT(RND^2*L+2) & \GOTO 7710 IF RND<.05*(I%-1) & \PRINT NUM1$(I%) & 7715 IF I%<=C(52% -(R%=8%) ) THEN PRINT "You already have one of those." & ELSE PRINT FNO$("put it on","leave it behind"); & \A$=FNC$ & \PRINT & \GOTO 7770 IF A$=CHR$(10%) & \PRINT "Ever try a hearing aid?" IF A$<>CHR$(13%) & \GOTO 7715 IF A$<>CHR$(13%) & \C(52% - (R%=8%))=I% & \GOTO 7770 & 7770 GOTO 7500 IF RND>.8-.02*(C(15)-1) & 7900 C(64)=1 & \GOTO 8000 & 8000 REM *SPECIALS* & 8001 IF C(64)<>1 THEN & GO TO 8005 & 8002 I(6)=0 & \ I(7)=0 & \ I(8)=0 & 8003 L%(C(16),C(17))=1024*I(8)+512*I(7)+256*I(6)+16*I(5)+4*I(2)+I(1) & 8004 IF I(5)=0 THEN & C(64)=2 & \ GOTO 3000 & 8005 CHN$ = "NEWSPC" & \ GOTO 32767 & & 10000 REM *MOVE* & 10010 FOR I=37 TO 47 & \C(I)=C(I)-1 UNLESS C(I)<0 & \NEXT I & \ X=C(16) & \ Y=C(17) & \ IF C(51)<0 THEN & C(51)=0 & 10020 C(11)=C(11)+C(51) & \ IF C(11)>C(10) THEN & C(11)=C(10) & 10030 GOSUB 21600 !VOICES & 10040 PRINT "->"; & \ A$=FNC$ & 10050 I=INSTR(1,"58624SWDXACR"+CHR$(13)+CHR$(10)+CHR$(27)+"KQHU",A$) & 10060 IF I<>0 THEN & GO TO 10080 & 10070 PRINT CHR$(13);"No";CHR$(13); & \ GOTO 10040 & 10080 IF I>10 THEN & I=I-2 & \ GOTO 10190 & 10090 I=I-1 & \ IF I>4 THEN & I=I-5 & 10100 IF I=1 THEN & IF I(2)=1 THEN & GO TO 10070 & ELSE & PRINT "North" & 10110 IF I=4 THEN & IF I(1)=1 THEN & GO TO 10070 & ELSE & PRINT "West" & 10120 IF I=2 THEN & IF FNI1(L%(X,Y+1),1)=1 THEN & GO TO 10070 & ELSE & PRINT "East" & 10130 IF I=3 THEN & IF FNI1(L%(X+1,Y),2)=1 THEN & GO TO 10070 & ELSE & PRINT "South" & 10140 IF I=0 THEN & PRINT "Stay here" & 10150 L%(C(16),C(17))=1024*I(8)+512*I(7)+256*I(6)+16*I(5)+4*I(2)+I(1) & 10160 C(16)=C(16)+Q(I,1) & \ C(17)=C(17)+Q(I,2) & 10170 IF C(16)<1 OR C(16)>20 OR C(17)<1 OR C(17)>20 THEN & GO TO 12000 & 10180 C(64)=1 & \ GOTO 3000 & 10190 ON I-8 GOTO 10200,10210,10240,10250,10260,10270,11000,11020,10900 & 10200 PRINT "Cast" & \ C(64)=3 & \ GOTO 4070 & 10210 IF C(50)=0 THEN & PRINT "You don't have an orb to drop, stupid!" & \ GOTO 10040 & 10220 PRINT "Are you sure?"; & \ IF FNC$<>"Y" THEN & PRINT "I didn't think so!!" & \ GOTO 10040 & 10230 PRINT "The orb disappears as you drop it." & \ C(50)=0 & \ GOTO 10040 & 10240 PRINT "Stats" & \ GOSUB 20500 & \ PRINT & \ GOSUB 20400 & \ PRINT & \ GOTO 10040 & 10250 PRINT "Status" & \ PRINT & \ GOSUB 20510 & \ PRINT & \ GOTO 10040 & 10260 GOSUB 15000 & \ GOTO 10040 & 10270 PRINT "Let me die!" & 10280 PRINT "Are you sure?"; & \ IF FNC$<>"Y" THEN & PRINT "It's not all that bad...I guess." & \ GOTO 10040 & 10290 PRINT & \ PRINT "Good bye cruel world!!" & 10300 PRINT "ARGGGG.GGG..GG...G.... . . . ." & \ SLEEP 2 & \ GOTO 13000 & 10900 ! *JLB* & ! ** Utter a prayer to the Nameless god ** & ! 10910 PRINT & \ PRINT '"Oh, Great Ghod! Get me the F___ out of here!"' & \ C(12)=INT(C(12)*(1-(RND*RND))) ! Steal some of his gold & \ IF (RND > .25) THEN ! Does we hates it? & PRINT '"F___ off little twerp!"' ! Tell it, precious. & \ PRINT & \ C(11)=C(11)-1 ! And gives it a hit. & \ IF (C(11) > 0) THEN ! Did we kill it? & GOTO 10040 ! Too bad. & ELSE ! YES*** & GOTO 13000 ! Let it die. & 10920 C(4)=C(4)-1 ! Decr constitution. & \ C(11)=INT(C(11)*2/3) ! Take 1/3 of its hits. & \ GOTO 13000 IF (C(4) < 1 OR C(11) < 1) ! See if it's dead yet. & \ I=FNR(1,10) ! Shall we take a pretty? & \ C(22+I)=0 IF (I < 4) ! Take some of its arms & \ C(50+I-3)=0 IF (I >= 4 AND I < 7) ! Take a magic thing. & \ C(51)=0 IF (I >= 7 AND I < 8) ! Especially its ring. & \ FOR I=15 TO 17 ! For X, Y, and Z location & \ C(I)=C(I)+FNR(1,5)-3 ! Add between -2 and 2 & \ C(I)=20 IF (C(I) > 20) ! Not too far & \ C(I)=1 IF (C(I) < 1) ! in either direction & \ NEXT I & \ CALL INILVL ! Set up new level & \ PRINT '"Well I can always try, but it will cost you."' & \ C(64)=1 ! Rember what we're doing. & \ GOTO 3000 ! Go redisplay. & & 11000 REM *QUIT* & 11010 PRINT "Quit" & \ PRINT "Are you sure sire?"; & \ A$=FNC$ & 11012 IF A$="Y" THEN & PRINT "Yes" & ELSE & PRINT "No" & \ GOTO 10040 & 11015 PRINT "Saving your position sire. . . " & \ GOTO 12130 & 11020 PRINT "Help" & \ PRINT "Commands are:" & \ PRINT & \ PRINT "5 OR S stay and wait a turn" & \ PRINT "8 OR W Move north" & \ PRINT "6 OR D Move east" & \ PRINT "2 OR X Move south" & \ PRINT "4 OR A Move west" & \ PRINT "C Cast spell" & \ PRINT "R Drop the orb (if you have it)" & \ PRINT " Lists stats and equipment" & \ PRINT " List experience,gold,hits and spells" & \ PRINT " Replots current position" & \ PRINT "K Fall on your sword" & \ PRINT "Q Temporarily quit expedition" & \ PRINT " (It will be restarted where you left)" & \ PRINT "U Utter a pray for escape to the Nameless God." & \ PRINT "H Types this list" & 11100 GOTO 10040 & 12000 REM *EXIT FROM DUNGEON* & 12010 PRINT CHR$(10);CHR$(10);CHR$(10);"You made it out of the dungeon!" & \ PRINT FOR I=1 TO 6 & 12020 IF C(50)=1 THEN & GO TO 12050 & 12030 C(15),C(16),C(17)=0 & \ C(11)=C(10) & \ C(9)=C(9)+C(21) & \ C(13)=C(13)+C(12) & 12040 C(I)=C(I-6) FOR I=31 TO 36 & \ GOSUB 20600 & \ PRINT & \ PRINT & \ GOSUB 20510 & \ PRINT & \ GOTO 12100 & 12050 PRINT "You have the orb with you!!!!" & 12060 PRINT "You have been declared a national hero!!" & 12070 PRINT "The gods will now give you immortality!" & 12080 OPEN "GAME:DNDORB.DAT" FOR INPUT AS FILE 9, VIRTUAL & \goto 12080 if (status and 1024%)<>0% & 12090 N3$(0)=NUM$(VAL(N3$(0))+1) & \ N3$(VAL(N3$(0)))=N$(0) & \ CLOSE 9 & \ GOTO 12290 & 12100 PRINT FNO$("reenter the dungeon","leave"); & 12110 A$=FNC$ & \ PRINT & \ IF A$=CHR$(13) THEN & C(64)=0 & \ GOTO 3000 & 12115 IF A$=CHR$(10) THEN & GO TO 12130 & 12120 PRINT & \ PRINT "Don't you listen?" & \ GOTO 12100 & 12130 REM *BACKUP CHAR TO MASTER DATA FILE* & 12140 ! & 12150 OPEN "GAME:DNDCHR.DAT" FOR INPUT AS FILE 8, VIRTUAL & \ GOTO 12190 IF ((STATUS AND 1024%) = 1024%) & 12160 GOTO 12200 & 12190 PRINT "[File busy - Please wait]" & \ CLOSE 8 & \ SLEEP 3 & \ GOTO 12140 & 12200 GOTO 12270 IF C2(I,0)<>1 FOR I=1 TO 100 & 12210 GOTO 12260 IF C2(I,9)0 THEN & GO TO 13070 & 13020 PRINT CHR$(10);CHR$(10);CHR$(10);"Another "; & \ IF C(8)<4 THEN & PRINT "not so "; & 13030 PRINT "mighty ";TRM$(MID("Warrior Cleric Magician",C(7)*8+1,8)); & " bites the dust." & \ PRINT & \ PRINT & \ PRINT & \ PRINT & 13040 C(I)=0 FOR I=0 TO 64 & 13050 PRINT "Do you want to exit - (Y)es, (N)o, or (C)reate character : "; & \ A$=FNC$ & \ PRINT & \GOTO 14000 IF A$="Y" & \IF INSTR(1%,"NC",A$)=0% THEN 13050 & 13060 C(64)=2 & \C(64)=3 IF A$="N" & \ CHN$ = "NEWDND" & \ GOTO 32767 & 13070 REM *RAISE DEAD* & 13080 PRINT "RAISE DEAD!!!!" & \ SLEEP 2 & 13090 C(34)=C(34)-1 & 13100 C(4)=C(4)-1 & 13110 IF C(4)=0 OR FNR(1,10)>C(4) THEN & PRINT "It failed!!" & \ GOTO 13000 & 13120 C(11)=FNR(1,C(10)) & \C(11)=2 IF C(11)=1 & \ PRINT "You're alive with";C(11);"hit points," & 13130 PRINT "and a constitution of ";NUM1$(C(4));"." & \ C(64)=2 & \ GOTO 3000 14000 REM *STOP HERE* & 14010 PRINT "Fare well, brave sire." & \ CHN$ = "EXIT" & \ GOTO 32767 & 14020 STOP & 15000 ! *POSITION PLOT* & ! 15005 PRINT CHR$(10);CHR$(10); & \ X=C(16) & \ Y=C(17) & \ FOR I=1 TO 11 & \ IF C(36+I)<=0 THEN & GO TO 15015 & 15010 PRINT MID("LGHTPROTSHLDPRAYDTRPSLNCLEVTSTRGFEARINVSTMST",I*4-3,4)+":"; & 15015 NEXT I & \ PRINT & \ PRINT & \ Z9=1 & \ Z0=0 & \ FOR R=-1 TO 2 & \ FOR C=-1 TO 2 & 15020 IF X+R>21 OR Y+C>21 THEN & P%(R+2,C+2)=0 & ELSE & P%(R+2,C+2)=L%(X+R,Y+C) & 15025 NEXT C & \ NEXT R & \ C9=0 & \ Z5$="" & \ IF X=1 THEN & GO TO 15055 & ELSE & IF FNI1(P%(2,2),4)<>0 THEN & GO TO 15055 & 15030 I=FNO(" "+FND3$(1,2)) & 15035 Y1$=" "+FND1$(1,2)+" "+FND1$(1,2+1) & 15040 Y2$=" "+FND2$(1,2)+" "+FND2$(1,2+1) & 15045 IF C(37)>0 THEN & IF FNI1(P%(1,2),9)<>0 THEN & Y2$=FNP$(Y2$,"*",10) & 15050 I=FNO(Y1$) & \ I=FNO(Y2$) & \ I=FNO(Y1$) & 15055 IF Y<>1 THEN & IF FNI1(P%(2,2),3)=0 THEN & Y1$=FND3$(2,2-1) & \ GOTO 15065 & 15060 Y1$=" " & 15065 Y1$=FNP1$(Y1$,FND3$(2,2),7) & 15070 IF FNI1(P%(2,2+1),3)=0 THEN & Y1$=FNP$(Y1$,FND3$(2,2+1),13) & 15075 IF I(4)<>0 THEN & GO TO 15085 & 15080 Y1$=FNP1$(Y1$,FND1$(1,2),7) & \ Y1$=FNP1$(Y1$,FND1$(1,2+1),13) & 15085 I=FNO(Y1$) & \ Y1$,Y2$=SPACE$(19) & \ IF Y=1 THEN & GO TO 15105 & 15090 IF FNI1(P%(2,2),3)<>0 THEN & GO TO 15105 & 15095 Y1$=FNP1$(Y1$,FND1$(2,2-1),1) & \ Y2$=FNP1$(Y2$,FND2$(2,2-1),1) & 15100 IF C(37)>0 THEN & IF FNI1(P%(2,2-1),9)<>0 THEN & Y2$=FNP$(Y2$,"*",4) & 15105 Y1$=FNP1$(Y1$,FND1$(2,2),7) & \ Y2$=FNP1$(Y2$,FND2$(2,2),7) & 15110 Y1$=FNP1$(Y1$,FND1$(2,2+1),13) & \ Y2$=FNP1$(Y2$,FND2$(2,2+1),13) & 15115 IF MID(Y1$,13,1)<>" " THEN & GO TO 15130 & 15120 Y1$=FNP1$(Y1$,FND1$(2,2+2),19) & \ Y2$=FNP1$(Y2$,FND2$(2,2+2),19) & 15125 IF C(37)>0 THEN & IF FNI1(P%(2,2+1),9)<>0 THEN & Y2$=FNP$(Y2$,"*",16) & 15130 Y2$=FNP1$(Y2$,"X",10) & \ Y3$=Y1$ & \ IF I(7)=1 THEN & Y1$=FNP$(Y1$,"$",11) & 15135 IF I(6)=1 THEN & Y1$=FNP$(Y1$,"#",11) & 15140 IF I(6)+I(7)<>0 THEN & GO TO 15150 & 15145 IF I(5)<>0 THEN & Y1$=FNP$(Y1$,MID(" \ /\ /EXCPITTPTFNTALTDGNDGNORBELVTHRSAFRCK",I(5)*3-2,3),9) & 15150 I=FNO(Y1$) & \ I=FNO(Y2$) & \ I=FNO(Y3$) & 15155 IF MID(Y3$,7,1)=" " THEN & Y1$=FND3$(2+1,2-1) & ELSE & Y1$=" " & 15160 Y1$=FNP1$(Y1$,FND3$(2+1,2),7) & 15165 IF MID(Y3$,13,1)=" " THEN & Y1$=FNP1$(Y1$,FND3$(2+1,2+1),13) & 15170 IF MID(Y1$,10,1)<>" " THEN & GO TO 15180 & 15175 Y1$=FNP1$(Y1$,FND1$(2+1,2),7) & \ Y1$=FNP1$(Y1$,FND1$(2+1,2+1),13) & 15180 I=FNO(Y1$) & \ IF MID(Y1$,10,1)<>" " THEN & GO TO 15205 & 15185 Y1$=" "+FND1$(2+1,2)+" "+FND1$(2+1,2+1) & 15190 Y2$=" "+FND2$(2+1,2)+" "+FND2$(2+1,2+1) & 15195 IF C(37)>0 THEN & IF FNI1(P%(2+1,2),9)<>0 THEN & Y2$=FNP$(Y2$,"*",10) & 15200 Y3$=" "+FND3$(2+2,2) & \ I=FNO(Y1$) & \ I=FNO(Y2$) & \ I=FNO(Y1$) & \ I=FNO(Y3$) & 15205 PRINT Z5$ & \ RETURN & 20000 REM *LIST SPELLS* & 20005 IF C(7)=1 THEN & I=4 & ELSE & I=0 & 20010 I=I+A & \ PRINT & 20015 PRINT FNN1$(I1);". ";TRM$(S$(I,I1)) FOR I1=1 TO 4-2*(I<5) & 20020 RETURN & 20400 REM *EQUIPMENT PRINT* & 20405 PRINT "Equipment:" & \ PRINT & 20410 PRINT FNE$(TRM$(MID("Sword Mace Dagger",C(7)*6+1,6)),C(22)); & 20415 PRINT FNE$(TRM$(MID("Plate Chain Leather",C(7)*7+1,7))+ & " Armor",C(23)); & 20420 PRINT FNE$("Shield",C(24)); & 20425 IF C(51)>0 THEN & PRINT "Ring of Regeneration +";FNN1$(C(51)) & 20430 IF C(52)>0 THEN & PRINT "Elven cloak +";FNN1$(C(52)) & 20435 IF C(53)>0 THEN & PRINT "Elven boots +";FNN1$(C(53)) & 20440 IF C(50)=1 THEN & PRINT & \ PRINT "The ORB" & 20445 RETURN & 20500 REM *STAT PRINT* & 20505 PRINT TRM$(N$(0)) & \ PRINT & \ PRINT FNS$(I);" ";C(I) FOR I=1 TO 6 & \ RETURN & 20510 REM *STATUS PRINT* & 20515 PRINT "Level ";C(8) & \ PRINT "Experience ";FNN1$(C(9)) & \ PRINT "Gold found ";FNN1$(C(12)) & \ PRINT "Hit points ";C(11) & 20520 IF C(31)+C(32)+C(33)+C(34)<1 THEN PRINT & \ PRINT "Spells : " & \ RETURN & 20525 PRINT & \ PRINT "Spells: "; & \ PRINT "L";NUM1$(I-30);"=";NUM1$(C(I));" "; FOR I=31 TO 34 & \ PRINT & \ RETURN & 20600 REM *LEVEL?* & 20605 IF C(9)>=FNE(C(8)) THEN & GO TO 20635 & 20610 PRINT "You went down a level!" & \ I1=FNR(1,4+2*(2-C(7))) & 20615 IF C(4)>14 THEN & I1=I1-14+C(4) & 20620 PRINT "You lost";I1;"hit point"; & \PRINT "s"; IF I1<>1 & \PRINT "." & \ C(10)=C(10)-I1 & \ C(11)=C(11)-I1 & \ C(8)=C(8)-1 & 20625 IF C(8)<1 OR C(11)<1 THEN & PRINT "You died!" & \ SLEEP 2 & \ GOTO 13000 & 20630 GOSUB 20700 & \ RETURN & 20635 IF C(9)14 THEN & I1=I1-14+C(4) & 20650 PRINT "You gain";I1;"hit point"; & \PRINT "s"; IF I1<>1 & \PRINT "." & \ C(10)=C(10)+I1 & \ C(11)=C(11)+I1 & \ C(8)=C(8)+1 & 20655 IF C(9)>=FNE(C(8)+1) THEN & C(9)=FNE(C(8)+1)-1 & 20660 GOSUB 20700 & \ RETURN & 20700 REM *SPELL PROGRESSION* & 20705 IF C(7)=0 THEN & RETURN & 20710 FOR I7=1 TO 4 & \ IF C(7)=1 THEN & I8=C(8)-INT((I7+1)/.75)+1 & 20715 IF C(7)=2 THEN & I8=C(8)-INT(I7/.8)+1 & 20720 IF I8<0 THEN & I8=0 & 20725 IF I7=1 THEN & I8=I8+2 & 20730 C(30+I7)=C(30+I7)+I8-C(24+I7) & \ C(24+I7)=I8 & \ NEXT I7 & \ RETURN & 20800 REM *DETECT TRAPS* & 20805 IF C(41)>0 AND I(8)=1 THEN & PRINT & \ PRINT "You detect traps! "; & 20810 RETURN & 20900 DEF FND(L) !DAMAGE TAKEN & 20905 I1=INT(RND*(L*(4-C(7)))+1) & \ IF RND>.7 THEN & I1=I1+1 & \ GOTO 20905 & 20910 PRINT "You suffer";I1;"hit point"; & \PRINT "s"; IF I1<>1 & \PRINT"." & \ C(11)=C(11)-I1 & 20915 IF C(11)>0 THEN & FND=1 & ELSE & PRINT "Your life has been terminated." & \ FND=-1 & 20920 FNEND & 21000 REM *EXPERIENCE CHANGE* & 21005 I1=FNR(1,2) & \ I2=INT(RND*500+2)*C(15) & \ PRINT "You just "; & 21010 IF I1=1 THEN & PRINT "lost"; & ELSE & PRINT "gained"; & 21015 PRINT I2;"experience points." & \ C(9)=C(9)+SGN(I1-1.5)*I2 & \ GOSUB 20600 & \ RETURN & 21100 REM *STAT CHANGE* & 21105 I1=FNR(1,2) & \ I2=FNR(1,6) & \ I3=1 & 21110 IF RND+C(15)*.02>.9 THEN & I3=I3+1 & \ GOTO 21110 & 21115 I3=I3-1 WHILE (C(I2)+SGN(I1-1.5)*I3<1 OR C(I2)+SGN(I1-1.5)*I3>18) & 21120 PRINT "Your ";FNS$(I2);" just went "; & \ IF I1=1 THEN & PRINT "down"; & ELSE & PRINT "up"; & 21125 PRINT " by ";NUM1$(I3);"." & \ C(I2)=C(I2)+SGN(I1-1.5)*I3 & \ PRINT "It is now ";NUM1$(C(I2));"." & \ RETURN & 21600 REM *VOICES* & 21605 IF RND>.05 THEN & RETURN & 21610 ON INT(RND*12+1) GOTO 21615,21620,21625,21630,21635,21640,21650, & 21660,21665,21670,21675,21680 & 21615 PRINT "You hear a mysterious sound from behind....." & \ RETURN & 21620 PRINT "A voice says 'PLUGH'....." & \ RETURN & 21625 PRINT "'Beware the Gulf of Nazguk!!!!'"; & " a voice screams in the distance." & \ RETURN & 21630 PRINT "You hear footsteps and breathing behind you...." & \ RETURN & 21635 PRINT "A cold wind suddenly springs up and dies...." & \ RETURN & 21640 PRINT CHR$(34)+"TURN BACK!!!!"+CHR$(34)+" A voice sceams," & 21645 PRINT CHR$(34);"For you too will die ahead!!!...."+CHR$(34) & \ RETURN & 21650 PRINT "You hear slurping noises to the "; & 21655 PRINT TRM$(MID("northsoutheast west ",INT(RND*4+1)*5-4,5));"." & \ RETURN & 21660 PRINT "You hear rustling noises from the "; & \ GOTO 21655 & 21665 PRINT "Suddenly, there is silence........." & \ RETURN & 21670 PRINT "A mutilated body lies on the floor nearby." & \ RETURN & 21675 print "The room vibrates as if an army is passing by." & \ return & 21680 print 'A resonant voice says "May I take your hat and goat Sir?".' & \ return & 32767 SUBEND