1 SUB NEWSPC(CHN$) 10 ! DNDSPC: SPECIAL OBJECT PROGRAM FOR DND & ! WRITTEN MAY 1976 BY D LAWRENCE & ! VERSION 3.0 & ! COPYWRITE JUNE 7,1978 BY DANIEL M LAWRENCE & ! V2A & ! Added ERROR TRAPING on EXIT & ! By Bob Spence Sep 1978 & ! Lines 12269,12291 & ! Fixed fountain bug RSB 10/3/78 & ! V2B & ! Eliminated top limit on stat change to be fair (RSB) & ! Fixed line 295 swapper & ! V2D - JLB & ! Fixed calculation of C(21) in line 9190 & ! Changed L {undef} to C(15) in line 9180 & ! V3 - David Solomon & ! Changed 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 & \ rem Allow 6 Dungeons (Dim level(23999)) & \ rem Use TMP: for DNDA??.TMP & \ rem Privilege (1,216), as well as (1,25), (1,254) & 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%) & 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 PRINT 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 & PRINT CHR$(13); & \ C9=0 & 415 IF C9>Z1 THEN & PRINT STRING$(C9-Z1,8); & 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$)="Press 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 GOSUB 20050 & \ GOTO 8005 & 3000 REM *NEW POSITION* & 3001 C(63)=I & 3005 CHN$ = "NEWDGN" & \ GOTO 32767 & 4070 REM *MONSTER* & 4075 CHN$ = "NEWCBT" & \ GOTO 32767 & 7000 REM *TREASURE* & 7001 C(63)=C(15) & \ IF I(7)=0 THEN & C(64)=1 & \ GOTO 8000 & 7005 CHN$ = "NEWTRS" & \ GOTO 32767 & 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 ON C(64) GOTO 8020,8410 & 8020 S=I(5) & 8025 ON S GOTO 8100,8100,8100,8200,8300,8400,8500,8600,8700,8800,8900,9000,9100,9200,9300 & 8100 REM *STAIRS*(S=1,2,3) & 8105 PRINT "You have found a circular stairway." & 8110 PRINT "Do you want to "; & \ IF S<>1 THEN & PRINT "go (U)p, "; & 8115 IF S<>2 THEN & PRINT "go (D)own, "; & 8120 PRINT "or stay on the (S)ame level:"; & \ A$=FNC$ & 8122 IF A$="S" THEN & PRINT "Same" & \ C(64)=2 & \ GOTO 3000 & 8125 IF A$="U" AND S=1 THEN & GO TO 8110 & 8130 IF A$="D" AND S=2 THEN & GO TO 8110 & 8135 IF A$<>"D" THEN & GO TO 8140 & ELSE & PRINT "Down" & 8136 IF C(15)<>20 THEN & C(15)=C(15)+1 & \ CALL INILVL & \ C(64)=1 & \ GOTO 3000 & 8137 PRINT "You find the way is blocked by an iron gate.." & \ C(64)=2 & \ GOTO 3000 & 8140 IF A$<>"U" THEN & GO TO 8145 & ELSE & PRINT "Up" & 8142 C(15)=C(15)-1 & \ IF C(15)=0 THEN & GO TO 12000 & ELSE & CALL INILVL & \ C(64)=1 & \ GOTO 3000 & 8145 PRINT & \ PRINT "Do you have a hearing problem?" & \ GOTO 8110 & 8200 REM *EXCELSIOR TRANSPORTER*(S=4) & 8205 PRINT "You have found the Excelsior Transporter." & 8210 IF C(50)=1 THEN & PRINT "But, the controls just went dead!" & \ C(64)=2 & \ GOTO 3000 & 8211 IF C(47)>0 THEN & PRINT "But the controls seem frozen!" & \ C(64)=2 & \ GOTO 3000 & 8215 PRINT "What level do you want to go to?" & \ PRINT "( to stay here)"; & \I%=ECHO(0%) & \ INPUT A$ & \I%=NOECHO(0%) & 8220 IF A$="" THEN & C(64)=2 & \ GOTO 3000 & 8222 IF LEN(A$)>2 THEN & GO TO 8215 & 8225 ON ERROR GOTO 8270 & \ I1=VAL(A$) & \ ON ERROR GOTO 0 & \ IF I1<1 OR I1>20 THEN & GO TO 8215 & 8230 I2=INT((ABS(C(15)-I1)+1)*((I1+C(15))/2)*25) & 8235 IF I2>C(12) THEN & PRINT "You need";I2;"gold for that trip." & \ GOTO 8215 & 8240 C(12)=C(12)-I2 & \ PRINT "It cost";I2;"gold, you have";C(12);"left." & 8245 C(15)=I1 & \ CALL INILVL & \ GOTO 8255 IF (L%(R,C) AND 240%)=64% FOR C=1 TO 20 FOR R=1 TO 20 & 8250 R=FNR(1,20) & \ C=FNR(1,20) & 8255 C(16)=R & \ C(17)=C & \ I=FNI(L%(R,C)) & 8257 IF FNR(3,7)<=(C(2)+C(3))/2 THEN & C(64)=1 & \ GOTO 3000 & 8260 PRINT "The transporter malfunctioned!" & \ SLEEP 1 & 8265 IF FND((ABS(C(15)-I1)+.5*INT(C(15)+I1))*(RND^3)/2)=-1 THEN & GO TO 13000 & 8267 C(64)=1 & \ GOTO 3000 & 8270 IF ERR=0 THEN & ON ERROR GOTO 0 & ELSE & RESUME 8275 & 8275 PRINT "Try again bird brain!!" & \ GOTO 8215 & 8300 REM *PIT*(S=5) & 8305 IF C(43)>0 THEN & PRINT "You are hovering over a pit." & \ GOTO 8320 & 8310 IF FNR(3,6)+3>C(5) AND (SQR(C(52)/25))*250 OR FNR(3,6)+120 THEN & IF FND(C(15))=-1 THEN & GO TO 13000 & ELSE & GO TO 8355 & 8350 PRINT "It's bottomless!!! IIIEEEEEEEEEEEEE!!!!!!... . . " & \ GOTO 13000 & 8355 C(15)=C(15)+1 & \ CALL INILVL & \ C(64)=1 & \ GOTO 3000 & 8400 REM *TELEPORT*(S=6) & 8405 PRINT "ZZAP! You've been teleported!" & \ SLEEP 2 & 8410 X=C(16) & \ Y=C(17) & \ IF INT((X+Y)/2)=(X+Y)/2 THEN & C(15)=C(15)-1 & ELSE & C(15)=C(15)+1 & 8415 IF C(15)=0 THEN & C(15)=1 & 8420 IF C(15)=21 THEN & C(15)=20 & 8425 X=X+C(15)*7+Y*13 & \ Y=Y+C(15)*6+X*17 & \ X=X-20 WHILE X>20 & \ Y=Y-20 WHILE Y>20 & 8430 C(16)=X & \ C(17)=Y & 8435 IF RND>.8 THEN & GO TO 8410 & 8440 CALL INILVL & \ C(64)=1 & \ GOTO 3000 & 8500 REM *FOUNTAIN*(S=7) & 8505 PRINT "You see a Fountain with "; & \ I1=FNR(1,5) & 8510 PRINT TRM$(MID("whitegreenblue red black",I1*5-4,5));" water." & 8515 PRINT FNO$("take a drink","walk by"); & \ A$=FNC$ & \ PRINT & 8517 IF A$=CHR$(10) THEN & C(64)=2 & \ GOTO 3000 & 8520 IF A$<>CHR$(13) THEN & PRINT "Sluggard! Follow directions!!" & \ GOTO 8515 & 8525 R=RND & \ IF R<.4+.1*I1 THEN & GO TO 8540 & 8530 PRINT "It tastes good!" & \ C(11)=C(11)+FNR(1,3*C(15)) & \ IF C(11)>C(10) THEN & C(11)=C(10) & 8535 PRINT "You now have";C(11);"hit points." & \ C(64)=2 & \ GOTO 3000 & 8540 IF R>.1*I1 THEN & GO TO 8555 & 8545 PRINT "Poison! Gurgle.. .. .. ."; & \ IF FND(C(15))=-1 THEN & GO TO 13000 & 8550 PRINT "You have only";C(11);"hit point"; & \PRINT "s"; IF C(11)<>1% & \PRINT " left." & \ C(64)=2 & \ GOTO 3000 & 8555 IF R>.6 THEN & PRINT "It's just water." & \ C(64)=2 & \ GOTO 3000 & 8560 IF RND>.5 THEN & GOSUB 21000 & \ C(64)=2 & \ GOTO 3000 & 8565 GOSUB 21100 & \ C(64)=2 & \ GOTO 3000 & 8570 RESUME 8580 & 8580 ON ERROR GOTO 0 & \I%=NOECHO(0%) & \GOTO 8630 & 8600 REM *ALTERS*(S=8) & 8605 PRINT "You have found a Holy Altar." & 8610 PRINT "Do you wish to (W)orship "; & \R%=FNR(1,20)=1% & \ PRINT ", (D)esicrate, "; IF R% & \ PRINT "or (I)gnore it? "; & \ A$=FNC$ & \ GOTO 8620 IF (A$="W") & \ GOTO 8612 IF (A$="D") AND R%<>0% & \ GOTO 8675 IF (A$="I") & \ PRINT & \ PRINT "Ignorant pagan! " & \ GOTO 8610 & 8612 PRINT "Desicrate" & \ PRINT "You do vile and unspeakable things to the altar." & \ IF (FNR(1,4) = 2) THEN & PRINT "Nothing happens here." & \ PRINT "{Hope that made you feel better.}" & IF (FNR(1,10) = 7) & \ C(64)=2 & \ GOTO 3000 & 8614 IF (FNR(1,20) < 10) THEN & PRINT 'A Voice booms out "I shall be avenged."' & \ C(63)=8 & \ C(64)=1 & \ GOTO 4070 & 8616 PRINT "The sound of thunder shatters the air." & \ PRINT "The altar crumbles to dust before your eyes." & \ I(5)=0 & \ I(5)=5 IF (FNR(1,10) <= 2) & \ IF (FNR(1,4) <> 4) THEN & C(64)=2 & \ GOTO 8300 IF (I(5) = 5) & \ GOTO 3000 & 8618 PRINT "Something seems to be left behind." & \ C(63)=C(15)+10 & \ I(7)=1 & \ I(8)=1 IF (FNR(1,10) = 3) & \ GOTO 7005 & 8620 PRINT "Worship" & \ PRINT FNO$("give money","just pray"); & \ A$=FNC$ & \ PRINT & \ IF A$=CHR$(10) THEN & GO TO 8670 & 8625 PRINT "How much of your";C(12);"gold" & \ON ERROR GOTO 8570 & \I%=ECHO(0%) & \ INPUT I1 & \ON ERROR GOTO 0 & \I%=NOECHO(0%) & \ IF I1<0 OR I1>C(12) THEN & PRINT "You don't have that much!" & \ GOTO 8625 & 8630 IF I1.9 THEN & GOSUB 21000 & \ C(64)=2 & \ GOTO 3000 & 8640 IF RND>.9 THEN & GOSUB 21100 & \ C(64)=2 & \ GOTO 3000 & 8645 IF RND>.5 THEN & PRINT "Thank you for your donation." & \ C(64)=2 & \ GOTO 3000 & 8650 I2=INT((RND^2)*11+1) & \ I1=INT(RND*(I1/(C(12)+1))*20)+INT(RND*20+1) & 8655 IF I3<3 THEN & I3=3 & 8660 IF C(36+I2)<0 THEN & C(36+I2)=0 & 8665 C(36+I2)=C(36+I2)+I1 & \ PRINT "You've been heard." & \ C(64)=2 & \ GOTO 3000 & 8670 IF RND>.4 THEN & C(64)=2 & \ GOTO 3000 & 8675 PRINT "Ignore" & \ IF RND>.7 THEN & C(64)=2 & \ GOTO 3000 & 8680 PRINT "Dirty Pagen Trash!" & \ C(64)=2 & \ GOTO 4070 & 8700 REM *DRAGON(S=9)* & 8705 I(5)=0 & \ I(7)=1 & \ PRINT "You have encountered a Dragon in it's lair!" & 8710 C(63)=9 & \ C(64)=1 & \ GOTO 4070 & 8800 REM *DRAGON WITH ORB(S=10)* & 8805 I(5)=11 & \ I(7)=1 & \ PRINT "You have encountered a dragon in it's lair!" & 8810 C(63)=10 & \ C(64)=1 & \ GOTO 4070 & 8900 REM *ORB(S=11)* & 8905 I(5)=0 & \ PRINT "You have found the Orb!!!!" & 8910 PRINT FNO$("pick it up","leave it"); & \ A$=FNC$ & \ PRINT & 8915 IF A$=CHR$(13) THEN & C(50)=1 & \ PRINT "You've got it!" & \ C(64)=2 & \ GOTO 3000 & 8920 IF A$=CHR$(10) THEN & PRINT "Lost your chance, Mister!" & \ C(64)=2 & \ GOTO 3000 & 8925 PRINT "?What?" & \ GOTO 8910 & 9000 REM *ELEVATOR*(S=12) & 9005 PRINT "You feel heavy for a moment, but the sensation disappears." & 9010 IF C(15)=1 THEN & GO TO 12000 & 9015 C(15)=C(15)-1 & \ CALL INILVL & \ C(64)=1 & \ GOTO 3000 & 9100 REM *THRONE*(S=13) & 9105 PRINT "You see a massive throne covered with jewels and" & 9110 PRINT "mysterious runes...." & 9115 PRINT "Do you want to (S)it on it, (P)ry out some jewels," & 9120 PRINT "(R)ead the runes, or totaly (I)gnore it:"; & \ A$=FNC$ & 9125 I=INSTR(1,"SPRI",A$) & \ IF I=0 THEN & PRINT "Come now!" & \ GOTO 9115 & 9130 IF I=4 THEN & PRINT "Ignore" & \ C(64)=2 & \ GOTO 3000 & 9135 ON I GOTO 9140,9165,9195 & 9140 PRINT "Sit down" & \ SLEEP 2 & \ IF RND>.05 THEN & GO TO 9150 & 9145 C(9)=FNE(C(8)+1) & \ PRINT "A loud gong sounds." & \ GOSUB 20600 & \ C(64)=2 & \ GOTO 3000 & 9150 IF RND>.9 THEN & GO TO 8400 & 9155 IF RND>.1 THEN & PRINT "Nothing happens." & \ C(64)=2 & \ GOTO 3000 & 9160 PRINT "The Dwarven King returns...." & \ C(63)=13 & \ C(64)=1 & \ GOTO 4070 & 9165 PRINT "Pry" & \ SLEEP 2 & \ IF RND<.1 THEN & GO TO 9160 & 9170 IF RND>.3 THEN & PRINT "They won't come off!" & \ C(64)=2 & \ GOTO 3000 & 9175 PRINT "They pop into your greedy hands!" & 9180 T=INT(6000*(RND^2)*C(15)+500) & \ PRINT "They're worth";T;"gold!" & 9185 C(12)=C(12)+T & \ I1=C(15)/C(8) & \ IF I1>1 THEN & I1=1 & 9190 C(21)=C(21)+INT(T*I1) & \ C(64)=2 & \ GOTO 3000 & 9195 PRINT "Read" & \ IF C(7)<>0 OR RND > .10 THEN & PRINT "You don't understand them!" IF C(7)=0 & \PRINT "They say 'BEWARE OF THE DWARVEN KING......'" IF C(7)<>0 & \ C(64)=2 & \ GOTO 3000 & 9197 GOTO 9160 IF RND > .5 & \ PRINT "The letters blur before your eyes." & \ PRINT "You feel giddy as power surges in you." & \ SLEEP 2 & \ PRINT "You seem to have changed." & \ SPELL=31.+(RND * RND * 4.) & \ C(SPELL)=C(SPELL)+5 & \ C(SPELL-6)=C(SPELL-6)+1 IF RND > (2./3.) & \ C(64)=2 & \ GOTO 3000 & 9200 REM *TREASURE TROVE*(S=14) & 9205 IF C(58)=0 THEN C1%=FNR(1,4) & \C(58)=C1%+ (FNR(1,4)*10) & 9210 C2=INT( C(58)/10 ) & \C1=C(58) - (C2*10%) & \PRINT "[The correct colors are:";C1;C2;"]" IF C(61)<>0% & 9215 PRINT "You see a small safe with four colored lights in a row." & 9220 PRINT "They are red, green, blue, and orange." & 9225 PRINT FNO$("try a combination","avoid it"); & \ A$=FNC$ & 9230 IF A$=CHR$(10) THEN & PRINT & \ C(64)=2 & \ GOTO 3000 & 9235 IF A$<>CHR$(13) THEN & PRINT "Trying to be cute?" & \ GOTO 9225 & 9240 PRINT & \ PRINT "Press two colors:"; & \ GOSUB 9290 & \ IF C4=0 THEN & GO TO 9250 & ELSE & C3=C4 & 9245 GOSUB 9290 & \ IF C4<>0 THEN & GO TO 9260 & 9250 PRINT & \ PRINT "That's not a legal color!" & 9255 PRINT "Try red, green, blue or orange!" & \ GOTO 9240 & 9260 PRINT & \PRINT "You guessed";C3;C4 IF C(61)<>0 & \ IF C1=C3 AND C2=C4 THEN & PRINT "You got it!" & \ GOTO 9275 & 9265 PRINT "An electric shock jolts your body!" & 9270 IF FND(C(15)*2)=-1 THEN & GO TO 13000 & ELSE & GO TO 9225 & 9275 C(58)=0 & \ T=INT(5000*(RND^2)*C(15)+500) & \ C(12)=C(12)+T & \ I1=C(15)/C(8) & 9280 PRINT T;"gold worth in gems and jewels pour out!" & \ IF I1>1 THEN & I1=1 & 9285 C(21)=C(21)+INT(T*I1) & \ C(64)=1 & \ GOTO 3000 & 9290 A$=FNC$ & \ C4=INSTR(1,"RGBO",A$) & \ IF C4=0 THEN & PRINT A$+" "; & \ RETURN & 9295 PRINT MID("Red Green Blue Orange ",C4*7-6,7); & \ RETURN & 9300 REM *SOLID ROCK*(S=15) & 9305 PRINT "You're in solid rock!!!!!!!!" & \ PRINT "You die of course..." & 9310 SLEEP 2 & \ GOTO 13000 & 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 12085 IF (STATUS AND 1024%)<>0% THEN SLEEP 1 \ GOTO 12080 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 12160 GOTO 12190 IF (STATUS AND 1024%)<>0% & \ GOTO 12200 & 12190 PRINT "[CHAR FILE BUSY..]" & \ 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" & \GOTO 13050 IF INSTR(1%,"NC",A$)=0% & 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 & 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 & 20025 PRINT & \ RETURN & 20050 ! *INITIALIZE DATA* & 20100 REM *INITALIZE JOB DATA & 20105 J=1 !JOB# 20110 P1,P2=0 !PPN 20115 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)=0 THEN & PRINT "Spells: " & \ RETURN & 20525 PRINT & \ PRINT "Spells: "; & \ PRINT "L";NUM1$(30-I);"=";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 & 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) & 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 & 32767 SUBEND