1 SUB NEWDND(CHN$) 10 ! DND MAIN SWITCHBOARD FOR DUNGEON AND DRAGON PROGRAM & ! WRITTEN 23-SEP-77 BY D LAWRENCE & ! VERSION 3.0 & ! COPYRIGHT JUNE 7,1978 BY DANIEL M LAWRENCE & ! V2A RJS CHANGE INTRO MESSAGE AND PROMPT & ! V2B RSB Fix dungeon names & ! Caused DNDA??.TMP to reside on TMP: & ! V2C JLB Privilege (1,216) + make TMP: worK & ! V2D JLB Add the M command & ! V3 DAS Convert to one task (overlaid) & ! Various changes for VAX compatability & ! 22 COM (DNDA) N$(1)=8,C(64),L%(21,21),I(8),I1(8) & 26 DIM #9,N3$(1000)=32 !ORB FINDERS FILE & 28 DIM C1(30) !TEMP HOLD & 30 DIM #8,N2$(100,1)=8,C2(100,64) !MAIN CHAR FILE & 32 DIM #5,D$(20)=16,S1%(20),L1%(23999) !LEVEL DATA & 40 IF TIME(0)>0 THEN & H9=1 & \ GOTO 50 & 42 PRINT "The dungeon is not open" & 44 PRINT "Try again later" & \ stop & 50 REM 82 DEF FNR(A,B) !ROLL A B SIDED DICE & 84 Z=0 & \ Z=Z+INT(RND*B+1) FOR Z1=1 TO A & \ FNR=Z & 85 FNEND & 86 DEF FNE(L) !EXPERIENCE FOR LEVEL L & 87 IF L>10 THEN & Z2=L-10 \ Z2=Z2^1.5 & \ Z=FNE(10)+INT(FNE(10)*Z2) & \ GOTO 92 & 88 IF C(7)=0 THEN & Z=2000 & ELSE & IF C(7)=2 THEN & Z=2500 & ELSE & Z=1500 & 90 Z=Z*2 FOR Z1=3 TO L & \ IF L=1 THEN & Z=0 & 92 FNE=Z & 93 FNEND & 100 GOSUB 10000 & 101 E=C(64) & \ IF E<2 OR E>3 THEN & GO TO 109 & 102 ON E-1 GOTO 1550,2300 & 109 PRINT CHR$(12); & \ PRINT "Welcome to Dungeons and Dragons!" & \ PRINT & \ PRINT & 110 ON ERROR GOTO 150 & \OPEN "GAME:DNDNOT.DAT/MO:8192" FOR INPUT AS FILE 2% & \PRINT "Current note:" & \PRINT & \WHILE -1% & \INPUT LINE #2%, N1$ & \PRINT N1$; & \NEXT & 150 PRINT CHR$(10%) IF ERR=11% & \RESUME 180 & 180 CLOSE #2 & \ OPEN "Game:DNDORB.dat/MO:8192" FOR INPUT AS FILE #9, VIRTUAL & \GOTO 270 IF VAL(N3$(0%))=0% & 210 PRINT & \ PRINT "ORB finders are:" & \ PRINT & 230 PRINT N3$(U) FOR U=1 TO VAL(N3$(0)) & 270 CLOSE #9 & \ PRINT & \ IF R=1 THEN & GO TO 1000 & 310 PRINT "%RESTRICTED ACCESS ONLY" & 320 PRINT " This account has not been enabled to play" & 330 PRINT " Please send mail to [1,216] to ask to be enabled" & 340 PRINT & \ GOTO 1000 & 400 DEF FNC$ !SINGLE CHAR INPUT SYS FUNCITON VERSION & 405 CALL IN1CHR(CHAR%) & \ FNC$=CHR$(CHAR%) 410 FNEND 435 DEF FNS$(I)=MID(S$,I*3-2,3) !STAT NAMES & 440 DEF FNT$(J) !2 CHAR NUMBER & 445 Z1$=FNN1$(J) & \ IF LEN(Z1$)<2 THEN & Z1$="0"+Z1$ & 450 FNT$=Z1$ & 460 FNEND & 600 DEF FNN1$(N) & \ Z$="" & 610 IF N=0 THEN & GO TO 620 & 615 Z1=INT(N/10)*10 & \ Z$=MID("0123456789",N-Z1+1,1)+Z$ & \ N=Z1/10 & \ GOTO 610 & 620 IF LEN(Z$)=0 THEN & Z$="0" & 630 FNN1$=Z$ & 631 FNEND & 1000 REM *MAIN ENTRY* & 1010 PRINT "Hit ";CHR$(34);"L";CHR$(34);" for list of options." & 1020 IF H9<>1 THEN & GO TO 42 & ELSE & PRINT "Dnd> "; & \ C$=FNC$ & 1022 IF C$=CHR$(3) THEN & C$="E" & 1024 IF C$=CHR$(13) THEN & PRINT & \ GOTO 1020 & 1030 I=INSTR(1,"RCPKNEOLSFMWD",C$) & \ IF I=0 THEN & PRINT & \ PRINT "%Illegal option." & \ GOTO 1010 & 1050 ON I GOTO 1100,1400,1600,1800,2200,2400,2600,2800,3000,3200, & 1600,1600,1600 & 1100 REM *RUN* & 1105 PRINT "Run" & \ IF R=0 THEN & PRINT "%RESTRICTED OPTION" & \ GOTO 1020 & 1107 ! 1110 OPEN "Game:DNDCHR.dat" FOR INPUT AS FILE #8, VIRTUAL 1112 GOTO 1205 IF (STATUS AND 1024%)<>0% & 1120 I%=ECHO(0%) & \ PRINT "What is your name noble Sir"; & \ INPUT LINE N$ & \ I%=NOECHO(0%) & \ N$=LEFT(N$,LEN(N$)-2) & 1130 GOTO 1140 IF EDIT$(N2$(I,0),39)=EDIT$(N$,39) AND C2(I,0)>0 & FOR I=1 TO 100 & 1135 PRINT "%No such character." & \ CLOSE #8 & \ GOTO 1020 & 1140 PRINT EDIT$(N2$(I,0),136%);"'s SECRET NAME is "; & 1142 INPUT LINE N6$ & \N6$=LEFT(N6$, LEN(N6$)-2%) & \N6$=CVT$$(N6$,-1%) & \PRINT & 1145 PRINT & \ IF EDIT$(N6$,39)<>EDIT$(N2$(I,1),39) THEN & PRINT "%Body Snatcher!!!!" & \ GOTO 2400 & 1155 N$(0)=N2$(I,0) & \ N$(1)=N2$(I,1) & 1160 FOR I1=0 TO 64 & \ C(I1)=C2(I,I1) & \ C2(I,I1)=0 & 1165 NEXT I1 & \ IF C(15)=0 THEN GOSUB 1530 & 1168 C(60)=PEEK(512%) !THE CURRENT DATE & 1170 N2$(I,0)="" & \ N2$(I,1)="" & \ CLOSE #8 & \ GOTO 1510 & 1205 PRINT "[CHARACTER FILE BUSY]" & \ SLEEP 2 & \ GOTO 1107 & 1400 REM *CREATE* & 1405 PRINT "Create" & \ IF R=0 THEN & PRINT "%RESTRICTED OPTION" & \ GOTO 1020 & 1422 PRINT CHR$(12); & \ PRINT "Press to run this character, to try again"; & 1424 PRINT ", or "; CHR$(34);"Q";CHR$(34);" to quit." & 1430 C1(I)=INT(RND*8+1)+INT(RND*6+1)+4 FOR I=1 TO 6 & 1440 PRINT TAB((I-1)*8+1);FNS$(I);" ";FNT$(C1(I)); FOR I=1 TO 6 & 1442 A$=FNC$ & \ IF A$="Q" THEN & PRINT & \ GOTO 1020 & 1450 IF A$=CHR$(10) THEN & PRINT CHR$(13); & \ GOTO 1430 & 1460 IF A$<>CHR$(13) THEN & PRINT & \ PRINT "Read the directions!!! ";CHR$(13); & \ SLEEP 4 & \ GOTO 1440 & 1465 PRINT & \ C(I)=C1(I) FOR I=1 TO 6 & \ C(0)=1 & \I%=ECHO(0%) & 1470 PRINT "What is your name noble Sir "; & \ INPUT LINE N$ & \I%=NOECHO(0%) & \ N$=LEFT(N$,LEN(N$)-2) & \ IF (EDIT$(N$,7%) = "") THEN & PRINT "No-one but a monster has no name." & \ GOTO 1470 & 1472 OPEN "Game:DNDCHR.dat/MO:8192" FOR INPUT AS FILE #8, VIRTUAL & \ FOR I%=1% TO 100% & \ IF (EDIT$(N$,39%) = EDIT$(N2$(I%,0%),39%) AND C2(I%,0) > 0) THEN & PRINT '"How dare you steal my name!", quoth the mighty '; & EDIT$(N2$(I%,0%),136%); '.' & \ PRINT "Please choose another name." & \ CLOSE #8 & \ GOTO 1470 1473 NEXT I% & \ CLOSE #8 & 1475 N$(0)=N$ & \ PRINT "What is ";N$;"'s SECRET NAME" ; 1480 INPUT LINE N1$ & \ N1$=LEFT(N1$,LEN(N1$)-2) & \ PRINT & 1482 N$(1)=N1$ 1485 PRINT "What character class--(F)ighter,(C)leric, or (M)agic user?"; & \ A$=FNC$ & 1490 IF INSTR(1,"FCM",A$)<>0 THEN & C(7)=INSTR(1,"FCM",A$)-1 & ELSE & PRINT & \ GOTO 1485 & 1492 PRINT MID("FighterCleric Magic ",C(7)*7+1,7) & 1495 C(10)=6+2*(2-C(7)) & \ C(11)=C(10) & \ C(8)=1 & \ C(I)=0 FOR I=12 TO 64 & \ C(59)=PEEK(512%) & \ C(60)=PEEK(512%) !THE CURRENT DATE & 1497 IF C(4)>14 THEN & C(10)=C(10)+C(4)-14 & \ C(11)=C(10) & 1498 C(15)=0 & \ C(19)=15 & \ C(20)=2 & 1500 GOSUB 1530 & 1505 IF C(7)=2 THEN & C(22)=0 & \ C(25)=3 & \ C(31)=3 & \ C(24)=-1 & 1506 IF C(7)=1 THEN & C(25)=2 & \ C(31)=2 & 1507 C(48)=P1 & \ C(49)=P2 & \ C(9)=0 & 1510 PRINT "You are now descending into the dungeon:" & 1515 PRINT "Please wait while we force open the main door..."; & 1516 PRINT & 1525 CHN$ = "NEWDGN" & \ C(64)=0 & \ GOTO 32767 & 1530 Print 'You may now choose the Dungeon for your adventure.' & 1533 Print "The choices are" & 1535 PRINT " ("; CHR$(D+48); ") "; TRM$(D$(D)) FOR D=1 TO 3 & 1537 Print "Press 1,2,3 for the dungeon or to "; & 1538 IF C(18)=0 & THEN PRINT "let me choose." & ELSE PRINT "continue in the same dungeon." & 1540 PRINT 'Dungeon number ?'; & \ D=ASCII(FNC$)-48 & \ IF D<>(13-48) AND (D<1 OR D>4) & THEN GOTO 1533 & 1541 IF D=(13-48) & THEN IF C(18)=0 & THEN D=FNR(1,3) & ELSE D=-C(18) & 1542 C(18)=-D & 1543 PRINT TRM$(D$(D)) & 1545 RETURN & 1550 REM CHAR CREATE ENTRY & 1560 H9=1 & 1570 PRINT "Dnd> "; & \ GOTO 1400 & 1600 REM *LIST PLAYERS* & 1605 PRINT "List players" & \ OPEN "Game:DNDCHR.dat/MO:8192" FOR INPUT AS FILE #8, VIRTUAL & \I%=ECHO(0%) & \ INPUT "Programmer number"; PROG% IF C$='W' & \I%=NOECHO(0%) & \ PROG%=P2 IF C$='M' & \ INPUT "Dungeon number"; DUNGEON% IF C$='D' & \ PRINT 1610 PRINT "Player";TAB(11);"Str Int Wis Con Dex Cha Lvl Gld Exp Ppn Type" & \ PRINT & 1615 FOR I=1 TO 100 & \ IF C2(I,0)<>1 THEN & GO TO 1635 & ELSE & IF ((C$="M" OR C$="W") AND (PROG%<>C2(I,49)) & OR(C$="D" AND C2(I,18)<>-DUNGEON%)) THEN & GO TO 1635 & 1620 PRINT LEFT(N2$(I,0),10);TAB(11); & \ PRINT FNT$(C2(I,I1));" "; FOR I1=1 TO 6 & 1630 PRINT FNT$(C2(I,8));" ";FNN1$(C2(I,13));TAB(47);FNN1$(C2(I,9)); & 1632 PRINT TAB(55);"[";FNN1$(C2(I,48));",";FNN1$(C2(I,49));"]"; & \ PRINT TAB(65);"*"; IF (C2(I,15) <> 0) & \ PRINT TAB(66);"t"; IF (C2(I,61) <> 0) & 1633 SPELLS=0 & \ SPELLS=SPELLS+C2(I,TEMP%) FOR TEMP%=25% TO 30% & \ IF ((SPELLS <> 0) AND (C2(I,7) = 0)) THEN & PRINT TAB(67); "F/MU" & ELSE & SPELLS=SPELLS+C2(I,TEMP%) FOR TEMP%=31% TO 36% & \ IF ((SPELLS <> 0) AND (C2(I,7) = 0)) THEN & PRINT TAB(67); "HERO" & ELSE & PRINT TAB(67);MID("FGTRCLRCMAGE",4*C2(I,7)+1,4) & 1635 NEXT I & \ CLOSE #8 & \ GOTO 1020 & 1800 REM *KILL* & 1805 PRINT "Kill" & \ IF R=0 THEN & PRINT "%RESTRICTED OPTION" & \ GOTO 1020 & 1806 ! 1807 OPEN "Game:DNDCHR.dat" FOR INPUT AS FILE #8, VIRTUAL & \ GOTO 1900 IF ((STATUS AND 1024%) <> 0%) 1810 I%=ECHO(0%) & \ PRINT "What is your name noble Sir?"; & \ INPUT LINE N$ & \I%=NOECHO(0%) & \ N$=LEFT(N$,LEN(N$)-2) & 1815 GOTO 1825 IF EDIT$(N2$(I,0),39)=EDIT$(N$,39) AND C2(I,0)>0 FOR I=1 TO 100 & 1820 PRINT "%No such character." & \ CLOSE #8 & \ GOTO 1020 & 1825 PRINT N$;"'s SECRET NAME is"; & \ INPUT LINE N1$ 1830 N1$=LEFT(N1$,LEN(N1$)-2) & \ PRINT 1835 IF EDIT$(N1$,39)<>EDIT$(N2$(I,1),39) THEN & PRINT "%Grave robber!!!" & \ GOTO 2400 & 1840 PRINT "Are you sure you wish to die?"; & \ A$=FNC$ & 1845 IF A$<>"Y" THEN & PRINT "No" & \ CLOSE #8 & \ GOTO 1020 & 1850 PRINT "Yes" & \ C2(I,0)=0 & \ PRINT "Goodbye life.....ARRRGGG.G..G.. . . ." & 1855 CLOSE #8 & \ GOTO 1020 & 1900 ! **no write access** & 1905 PRINT "[File busy - please wait]" & \ SLEEP 2 & \ GOTO 1806 & 2200 REM *NOTEFILES* & 2205 PRINT "Note Files" & \PRINT "no note file exsists" \ GOTO 1020 & 2300 REM NOTEFILE ENTRY & 2305 GOTO 1000 & 2400 REM *EXIT* & 2405 C(64)=0 & 2410 PRINT "Exit" & \ CHN$ = "EXIT" & \ GOTO 32767 & 2600 REM *OPERATOR PROGRAM* & 2605 PRINT "Operator" & 2610 IF P1<>1 OR P2<>11 THEN & PRINT "%OPERATOR PRIVILEGED COMMAND" & \ GOTO 1020 & 2620 CHN$ = "NEWOP" & \ GOTO 32767 & 2800 REM *LIST OPTIONS* & 2810 PRINT "List Options" & \ PRINT "Options are:" & \ PRINT & \ PRINT "R Run a character" & \ PRINT "C Create a character" & \ PRINT "P List all current players" & \ PRINT "M List my own characters" & \ PRINT "W Who - list someone's characters" & \ PRINT "D List players in one dungeon" & \ PRINT "K Kill a character" & \ PRINT "N Go to note files" & \ PRINT "F Find experience needed for a level" & \ PRINT "E Exit dungeon" & \ PRINT "O Go to operator program (privileged option)" & \ PRINT "L List options" & \ GOTO 1020 & 3000 REM *status* & 3005 PRINT "Status" & \ OPEN "Game:DNDCHR.dat/MO:8192" FOR INPUT AS FILE #8, VIRTUAL & \ PRINT & \ PRINT "PLAYER";TAB(25);"DND-Date NDND-Date EXP PPN TYPE" & \ PRINT & \ FOR I=1 TO 100 & \ IF C2(I,0)<>1 THEN & GO TO 3035 3020 PRINT LEFT(N2$(I,0),24);TAB(25); & \ PRINT DATE$(C2(I,59)); ' '; DATE$(C2(I,60)); & \ PRINT TAB(47);FNN1$(C2(I,9)); & \ PRINT TAB(55);"[";FNN1$(C2(I,48));",";FNN1$(C2(I,49));"]"; & \ PRINT TAB(65);"*"; IF (C2(I,15) <> 0) & \ PRINT TAB(66);"t"; IF (C2(I,61) <> 0) & \ SPELLS=0 & \ SPELLS=SPELLS+C2(I,TEMP%) FOR TEMP%=25% TO 30% & \ IF ((SPELLS <> 0) AND (C2(I,7) = 0)) THEN & PRINT TAB(67); "F/MU" & ELSE & SPELLS=SPELLS+C2(I,TEMP%) FOR TEMP%=31% TO 36% & \ IF ((SPELLS <> 0) AND (C2(I,7) = 0)) THEN & PRINT TAB(67); "HERO" & ELSE & PRINT TAB(67);MID("FGTRCLRCMAGE",4*C2(I,7)+1,4) & 3035 NEXT I & \ CLOSE #8 & \ GOTO 1020 & 3200 REM *FIND EXPERIENCE FOR LEVEL* & 3205 PRINT "Find experience for level." & 3210 PRINT "For what character class Sire?" & 3220 PRINT " (M)agician, (C)leric, OR (F)ighter ?"; & \ A$=FNC$ & 3230 I=INSTR(1,"FCM",A$) & \ IF I=0 THEN & PRINT & \PRINT "Come on you jerk!" & \ GOTO 3220 & 3240 PRINT MID("Fighter Cleric Magician",8*I-7,8) & 3250 C(7)=I-1 3260 I%=ECHO(0%) & \ PRINT "For level:"; & \ INPUT L & 3270 I%=NOECHO(0%) & \PRINT "You need ";FNN1$(FNE(L));" experience for level";NUM1$(L);"." & 3280 GOTO 1020 & 8000 REM *LIST MESSAGE HEADER* & 8010 PRINT "Msg # ";N1$(C);" ";N1$(C+3) & \ PRINT "From: ";N1$(C+1) & 8020 PRINT "To: ";N1$(C+2) & \ PRINT "On the subject of: ";N1$(C+4) & \ RETURN & 10000 REM *GET PPN AND RESTRICTION* & 10010 PPN%=PEEK(PEEK(PEEK(520%)+8%)+24%) & \P1=SWAP%(PPN%) AND 255% & \P2=PPN% AND 255% & \J=1 & 10040 S$="StrIntWisConDexCha" & 10050 REM NO MORE PPN FILE 10060 REM 10070 R=1 & \ GOTO 10110 & 10100 IF ERR<>11 THEN & ON ERROR GOTO 0 & ELSE & R=0 & \ RESUME 10110 & 10110 ON ERROR GOTO 0 & \ IF TIME(0)>0 THEN & H9=1 & ELSE & H9=0 & 10120 RETURN & 32767 SUBEND