1 SUB NEWCBT(CHN$) 10 ! DNDCBT & ! COMBAT AND SPELL PROGRAM FOR DND & ! WRITTEN MAY 1976 BY D LAWRENCE & ! VERSION 3.0 & ! COPYWRITE JUNE 7,1978 BY DANIEL M LAWRENCE & ! V2A & ! RSB - 10/3/78 - Converted text to lower case & ! V2B & ! Fixed line 295 swapper & ! & ! V2D & ! JLB - Make Dwarven King tougher + fix "bug" in line 4800 & ! NEW JLB - Rwrite Combat system & ! NEW-1 JLB - Fix bug in hit % & ! NEW-3 JLB - Fix Surprise/advantage. & ! 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%) & 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 GOSUB 20050 & \ GOTO 4075 & 3000 REM *NEW POSITION* & 3001 C(63)=I & 3005 CHN$ = "NEWDGN" & \ GOTO 32767 & 4070 REM *MONSTER* & 4075 ON C(64) GOTO 4090,4520,6000 & 4090 IF C(63)=0 THEN & GO TO 4500 & 4100 IF C(63)=13 THEN & M=11 & \ M$="Dwarf Lord" & \ M1=INT(C(15)+10)+FNR(1,6) & \ M.STR=FNR(1,M(M))+5 & \ M.ARM=FNR(1,M1) & \ GOTO 4550 & 4105 IF (C(63) = 8) THEN & M=18+FNR(1,2) & \ M$="Demon Prince" & \ M1=INT(C(15)+5+FNR(1,20)) & \ M.STR=FNR(1,M(M))+5 & \ M.ARM=FNR(1,M1) & \ GOTO 4550 & 4110 IF C(63)<>9 AND C(63)<>10 THEN & PRINT "Interr-01" & \ STOP & 4120 M=20 & \ M$="Dragon Lord" & \ M1=INT(C(15)+FNR(1,20)) & \ M.STR=FNR(1,M(M)) & \ M.ARM=FNR(1,M1) -1 & \ GOTO 4550 & 4500 REM *COMBAT* & 4510 M=FNR(1,20) & \ IF M>6 THEN & GO TO 4530 & 4520 M=INT(RND^(2-.04*C(15))*6+1) & \ ON C(64) GOTO 4540,4542,4540 & 4530 M=6+INT(RND^(2-.04*C(15))*14+1) & 4540 IF MINDUNLVL(M)>C(15) THEN GOTO 4075 & 4542 IF MAXDUNLVL(M)= 1.2*C(10)) AND (C(11) > 1) ) THEN & IF (FNR(1,20) <= C(6)) THEN & PRINT "A level "; M1; EDIT$(M$,128%+8%); & " takes one look at you... "; & \ SLEEP 1 & \ PRINT "snarls and knocks you cold." & \ C(11)=INT(C(11)/2.) & \ SLEEP 2 & \ PRINT "You wake up feeling half dead." & \ PRINT "It has stalked off." & \ C(64)=1 & \ GOTO 8000 & 4550 M2,M2.OLD=FNR(M1,M(M)) & \ PRINT "You have encountered a level";M1;TRM$(M$);"." & \ PRINT "Str:"; M.STR; "Arm:"; M.ARM; "Hits:"; M2; "Die:"; M(M) & IF (C(61) <> 0) & 4560 IF C(42)>0 AND FNR(1,20) < 15+(C(8)-M1) THEN & GO TO 4580 & 4570 IF (FNR(1,20) > (C(2)+C(5))/2) THEN ! Throw against INT,DEX & GO TO 5000 ! initiative. & 4580 PRINT "Press (F)ight"; & \ IF C(31)+C(32)+C(33)+C(34)>0% THEN & PRINT ", (C)ast,"; & 4590 PRINT " or (E)vade: "; & \ A$=FNC$ & ! \ IF A$="C" AND C(7)=0 THEN & ! A$="" & 4600 IF INSTR(1,"FEC",A$)=0 THEN & PRINT "The ";M$;" is not amused..." & \ GOTO 4580 & 4610 IF A$<>"E" THEN & GO TO 4750 & 4620 IF RND<.9 THEN & PRINT "Evade" & ELSE & PRINT "Run away" & 4630 IF ((I(1) = 1. OR I(1) = 3.) AND (I(2) = 1. OR I(2) = 3.)) THEN & IF ((L%(C(16),C(17)+1) AND 1%) = 1%) THEN & IF ((L%(C(16)+1,C(17)) AND 4%) = 4%) THEN & PRINT "There's no where to go!" & \ GOTO 5000 & 4660 IF FNR(2,10)>C(5) AND (SQR(C(52)/25))*25.5 THEN & I(6),I(7),I(8)=0 & 4730 C(64)=3 & \ GOTO 3000 & 4740 PRINT "You're rooted to the spot...the ";M$;" bites back!" & \ GOTO 5000 & 4750 IF A$="C" THEN & PRINT "Cast" & \ GOTO 6000 & 4760 PRINT "Fight" & \ I1=(3 * C(5)) + C(1) ! 3% per DEX, 1% per STR. & + C(22) ! + 1% * weapon point. & + C(8) * (5 - C(7)) ! + 3, 4, or 5% per level & - M1 * (M(M) / 2) ! - 1...10% per Mlevel & \ I1=I1 + 5 IF (C(40) > 0) ! +5% for Pray Spell. & \ I1.OLD=I1 ! Remember this value. & \ I1=I1*((C(10) + C(11)) / (2 * C(10))) ! Deduct for hits taken. & \ DICE=FNR(1,100) ! Throw on percentile dice. & \ PRINT "Chance:"; I1; "["; I1.OLD; "] Dice:"; DICE & IF (C(61) <> 0) & \ IF (DICE > I1) THEN ! Get it? & PRINT "You missed"; ! Too bad. Tell'm. & \ PRINT " due to your weakened condition"; ! Tell him if it was & IF (DICE <= I1.OLD) ! The hits he's taken. & \ PRINT "." & \ GOTO 5000 & 4830 D=FNR(1, 8 - (2 * C(7))) + C(22) ! Throw by class + weapon. & \ I2=C(1) ! Base strength. & \ I2=I2+3 IF (C(44) > 0) ! Has he got Strength Spell? & \ IF (I2 > 14) THEN ! Strength bonus? & D=D+FNR(1,I2-14) ! Random bonus. & ELSE & IF (I2 < 7) THEN ! Weakling? & D=D-FNR(1,7-I2) ! Random penalty & 4840 PRINT "Force:"; D & IF (C(61) <> 0) & \ D=D-(FNR(1,M.ARM))-FNR(1,M.ARM) ! Can he defend? & ! Once for "Shield" & ! And once for "Armor" & IF (M.ARM > 0.) ! Only if he is experienced. & 4850 IF (D < 1) THEN ! Any damage done? & PRINT "It fends you off." ! Sorry & \ GOTO 5000 & 4870 PRINT "You did";D;"point"; & \PRINT "s"; IF D<>1 & \PRINT " of damage." & \ M2=M2-D & \ IF M2>0 THEN & GO TO 5000 & 4880 IF RND>.1 THEN & I(8)=0 & 4890 PRINT "It died." & \ I(6)=0 & \ GOTO 6915 & 5000 REM *MONSTER ATTACK* & 5010 IF M = 20 THEN & IF (FNR(1,10) = 1) THEN & PRINT "The ";M$;" breathes fire on you!!" & \ SLEEP 2 & \ D=FNR(2,20)+M1 & \ IF ((FNR(1,20) >= (17-C(8)*.5))) THEN & PRINT "You partially dodge it." & \ D=INT(D/2) & \ GOTO 5150 & 5050 I1=50 + M(M) + M.STR + M.ARM ! Chance is 50% + monster & +(C(7) * 10) ! Mage = +20% Cleric = +10%. & + M1 * (M(M) / 2) ! + 1..10% per M level & - C(8) * (5 - C(7)) ! - 3, 4, 5% per level. & \ I1=I1 - 10 IF (C(38) > 0) ! Protection Spell. & \ I1=I1 - 20 IF (C(39) > 0) ! Shield Spell. & \ I1=I1 - 10 IF (C(40) > 0) ! Pray Spell. & \ I1=I1 - (2 * (C(5) - 14)) IF (C(5) > 14) ! Dexterity Bonus. & \ I1.OLD=I1 & \ I1=I1*((M2.OLD + M2) / (2 * M2.OLD)) ! Deduct for hits taken & \ DICE=FNR(1,100) & \ PRINT "Chance:"; I1; "["; I1.OLD; "] Dice:"; DICE & IF (C(61) <> 0) & \ IF (DICE > I1) THEN & PRINT "It missed"; & \ PRINT " due to its weakened condition"; & IF (DICE <= I1.OLD) & \ PRINT "." & \ GOTO 5170 & 5060 IF M > 3 AND M < 7 THEN ! High level undead? & I2=10 * (M - 3) ! Base chance. & \ I2=I2 - 5 IF (C(38) > 0) ! Protect from Evil. & \ I2=I2 - 5 IF (C(40) > 0) ! Pray Spell. & \ IF (FNR(1,100) <= I2) THEN & PRINT "The ";M$;" drains an energy level!" & \ C(9)=FNE(C(8))-1 & \ GOSUB 20600 & 5100 D=FNR(1,M(M))+M1 ! 1D(monster) + M level & 5140 IF M = 19 THEN ! Balrog? & IF (FNR(1,3) < 3) THEN & PRINT "The ";M$;" uses it's sword!" & ELSE & PRINT "The ";M$;" uses it's whip!!" & \ D=INT(D*1.5) & 5150 PRINT "Force:"; D & IF (C(61) <> 0) & \ D=D-(1 + FNR(1%,C(24))) ! Shield takes some & \ IF (D <= 0) THEN & PRINT "You block with your shield." & \ GOTO 5170 & 5155 D=D-(FNR(1%,C(23)) + 2 - C(7)) & \ IF (D <= 0) THEN & PRINT "Your armor protects you." & \ GOTO 5170 & 5160 PRINT "It did";D;"point"; & \PRINT "s"; IF D<>1 & \PRINT " damage." & \ C(11)=C(11)-D & \ IF (C(11) <= 0) THEN & PRINT "You died!" & \ GOTO 13000 & 5170 IF M<>15 THEN & GO TO 5220 & 5180 IF FNR(1,4)<>3 THEN & GO TO 4580 & 5190 PRINT "The ";M$;" looks just like you: "; & \SLEEP 1 & 5200 IF FNR(1,20)12 THEN & GO TO 4580 & 5230 IF FNR(1,3)=1 THEN & GO TO 4580 & 5240 PRINT "The ";M$;" charms you with her voice!" & 5250 IF FNR(1,20)"4" THEN & PRINT "A number from 1 to 4 you jester!" & \ GOTO 6015 & 6025 A=VAL(A$) & \ IF C(A+30)<=0 THEN & PRINT "You have no more level";A;"spells." & \ GOTO 6900 & 6030 PRINT "Spell number ('L'=list):"; & \ A$=FNC$ & \ IF A$=CHR$(13) THEN & GO TO 6900 & 6035 IF A$<"1" OR (C(7)=1 AND A$>"4") OR (C(7)<>1 AND A$>"6") THEN & GOSUB 20000 & \ GOTO 6030 & 6040 A1=VAL(A$) & \ C(30+A)=C(30+A)-1 & \ PRINT TRM$(S$(A-4*(C(7)=1),A1)) & 6045 IF C(7)=1 THEN & GO TO 6075 & 6050 ON A GOTO 6055,6060,6065,6070 & 6055 ON A1 GOTO 6100,6115,6165,6175,6220,6230 & 6060 ON A1 GOTO 6240,6260,6290,6310,6320,6330 & 6065 ON A1 GOTO 6340,6360,6390,6435,6460,6470 & 6070 ON A1 GOTO 6480,6495,6525,6550,6560,6590 & 6075 ON A GOTO 6080,6085,6090,6095 & 6080 ON A1 GOTO 6220,6230,6625,6640 & 6085 ON A1 GOTO 6665,6675,6685,6435 & 6090 ON A1 GOTO 6695,6710,6470,6730 & 6095 ON A1 GOTO 6495,6755,6525,6775 & 6100 REM *MAGIC MISSLE* & 6105 IF H=1 THEN & GO TO 6785 & 6110 D=FNR(1,6) & \ GOTO 4870 & 6115 REM *CHARM* & 6120 IF H=1 THEN & GO TO 6785 & 6125 IF M<7 THEN & PRINT "You can't charm the undead!" & \ GOTO 5000 & 6130 IF M=15 THEN & GO TO 6195 & 6135 IF 2*(FNR(3,6)-C(8)+M1)>C(2)+C(6) THEN & GO TO 6160 & 6140 PRINT "The ";M$;" is charmed, ";FNO$("kill","evade"); & 6145 A$=FNC$ & \ IF A$=CHR$(10) THEN & GO TO 4670 & 6150 IF FNR(3,6)-C(8)+M1<=C(6) THEN & GO TO 4890 & 6155 PRINT "It broke your charm!" & \ GOTO 5000 & 6160 PRINT "Your charm failed!" & \ GOTO 5000 & 6165 REM *SHIELD* & 6170 C(39)=FNR(1,10) & \ GOTO 6910 & 6175 REM *SLEEP* & 6180 IF H=1 THEN & GO TO 6785 & 6185 IF M<7 THEN & PRINT "The undead never sleep!" & \ GOTO 5000 & 6190 IF FNR(3,6)-C(8)+M1>C(2) THEN & PRINT "It won't sleep!" & \ GOTO 5000 & 6195 IF M=15 THEN & PRINT "The Doppleganger is magic resistant!!" & \ GOTO 5000 & 6200 PRINT "The ";M$;" is sleeping, ";FNO$("kill","evade"); & 6205 A$=FNC$ & \ IF A$=CHR$(10) THEN & GO TO 4670 & 6210 IF FNR(3,6)-C(8)+M1C(2)+C(5) THEN & GO TO 6285 & 6275 PRINT "The ";M$;" is webbed, ";FNO$("kill","evade"); & \ A$=FNC$ & 6280 IF A$=CHR$(10) THEN & GO TO 4670 & ELSE & GO TO 4890 & 6285 PRINT "You missed the ";M$;"." & \ GOTO 5000 & 6290 REM *LIGHTNING BOLT* & 6295 IF H=1 THEN & GO TO 6785 & 6300 D=FNR(C(8),6) & \ IF FNR(1,10)-M1+C(8)<6 THEN & D=INT(D/2+.5) & 6305 PRINT "ZZAAAPPPP!!!!!!!" & \ GOTO 4870 & 6310 REM *STRENGTH* & 6315 C(44)=FNR(1,10) & \ GOTO 6910 & 6320 REM *LEVITATE* & 6325 C(43)=FNR(2,10) & \ GOTO 6910 & 6330 REM *INVISABILITY* & 6335 C(46)=FNR(2,10) & \ GOTO 6910 & 6340 REM *FIREBALL* & 6345 IF H=1 THEN & GO TO 6785 & 6350 D=FNR(C(8),10) & \ IF FNR(10,1)-M1+C(8)<6 THEN & D=INT(D/2+.5) & 6355 PRINT "The ";M$;" is burning." & \ GOTO 4870 & 6360 REM *CONFUSE* & 6365 IF H=1 THEN & GO TO 6785 & 6370 IF M=15 THEN & GO TO 6195 & 6375 IF FNR(3,6)>C(2) THEN & PRINT "The ";M$;" is too smart for you!" & \ GOTO 5000 & 6380 D=INT(M(M)*RND+M1) & \D=2 IF D=1 & \ PRINT "It gave itself";D;"damage points." & 6385 M2=M2-D & \ IF M2>0 THEN & GO TO 5000 & ELSE & GO TO 4890 & 6390 REM *PASS-WALL* & 6395 IF H=0 THEN & PRINT "Not in the middle of a battle dolt!" & \ GOTO 5000 & 6400 PRINT "Direction ->"; & \ I=INSTR(1,"8624WDXA",FNC$) & 6405 IF I=0 THEN & PRINT & \ PRINT "Surely you jest Sire!" & \ GOTO 6400 & 6410 IF I>4 THEN & I=I-4 & \ X1=C(16)+Q(I,1) & \ Y1=C(17)+Q(I,2) & 6415 IF ABS(10.5-X1)<10 AND ABS(10.5-Y1)<10 THEN & GO TO 6425 & 6420 PRINT & \ PRINT "Only stone there..." & \ GOTO 6910 & 6425 IF (L%(X1,Y1) AND 240%) = 240% THEN & GO TO 6420 & 6430 PRINT "*Poof*>>><<< ****  ..  " & 6432 C(64)=3 & \ GOTO 3000 & 6435 REM *HOLD MONSTER* & 6440 IF H=1 THEN & GO TO 6785 & 6445 IF M=15 THEN & GO TO 6195 & 6450 IF FNR(3,6)-C(8)+M1>C(6) THEN & PRINT "The ";M$;" breaks free!" & \ GOTO 5000 & 6455 PRINT "The ";M$;" is held, hit to kill :"; & \ A$=FNC$ & \ GOTO 4890 & 6460 REM *FEAR* & 6465 C(45)=FNR(3,20) & \ GOTO 6910 & 6470 REM *CONTINUAL LIGHT* & 6475 C(37)=FNR(3,20) & \ GOTO 6910 & 6480 REM *TELEPORT* & 6485 IF FNR(3,6)+1>C(2) THEN & PRINT "You materialized in solid rock!!" & \ GOTO 13000 & 6490 C(15)=FNR(1,20) & \ C(16)=FNR(1,20) & \ C(17)=FNR(1,20) & 6492 CALL INILVL & \ C(64)=1 & \ GOTO 3000 & 6495 REM *POWER WORD KILL* & 6500 IF FNR(3,6)=18 THEN & PRINT "It backfired, ---> you die!!!! (Heh heh heh said the Wumpus)" & \ GOTO 13000 & 6505 IF H=1 THEN & GO TO 6785 & 6510 IF M=15 AND RND>.5 THEN & GO TO 6195 & 6515 IF FNR(3,6).3 THEN & PRINT " is no longer there." & \ I(6),I(7)=0 & \ GOTO 7000 & 6545 PRINT " is waiting for you." & \ GOTO 5000 & 6550 REM *TIME STOP* & 6555 PRINT "Time is frozen, monsters cannot attack you." & \ C(47)=FNR(1,10) & \ GOTO 7000 & 6560 REM *WALL OF FIRE* & 6565 IF H=1 THEN & GO TO 6785 & 6570 PRINT "A wall of flames appears about you." & \ SLEEP 2 & 6575 IF RND>.7 THEN & PRINT "The ";M$;" tried to get you through the flames!!" & \ GOTO 4890 & 6580 IF RND>.4 THEN & PRINT "The ";M$;" cannot stand the heat and leaves." & \ I(6),I(7)=0 & \ GOTO 7000 & 6585 PRINT "The ";M$;" is patient!!" & \ GOTO 5000 & 6590 REM *SUMMON DEMON* & 6595 IF FNR(3,6)+1>C(2) THEN & PRINT "Sorry, the demon is taking a bath." & \ GOTO 6910 & 6600 IF H=1 THEN & GO TO 6610 & 6605 PRINT "The demon demolishes the ";M$;"." & \ I(6)=0 & 6610 SLEEP 2 & 6615 IF FNR(3,6)+1<=C(2) THEN & PRINT "You dispelled the demon." & \ IF H=1 THEN & GO TO 6785 & ELSE & GO TO 7000 & 6620 PRINT "It attacks you!!" & \ M$="Demon" & \ H=0 & \ M=20 & \ M1=C(8)+5 & \ M2,M2.OLD=FNR(M1,16) & \ M.STR=FNR(1,M(M)) & \ M.ARM=FNR(1,M1) -1 & \ GOTO 5000 & 6625 REM *CURE LIGHT WOUNDS* & 6630 C(11)=C(11)+FNR(1,6)+1 & \ IF C(11)>C(10) THEN & C(11)=C(10) & 6635 PRINT "You have";C(11);"hit point"; & \PRINT "s"; IF C(11)<>1 & \PRINT " left." & \ GOTO 6910 & 6640 REM *TURN UNDEAD* & 6645 PRINT "GET YE HENCE VILE CREATURE!!!" & \ IF H=1 THEN & GO TO 6785 & 6650 IF M>6 THEN & PRINT "The ";M$;" feels insulted at being called undead." & \ GOTO 5000 & 6655 IF FNR(3,6)+3+M1-C(8)>C(3) THEN & PRINT "The ";M$;" listens with deaf ears." & \ GOTO 5000 & 6660 PRINT "The ";M$;" runs in terror!" & \ I(6)=0 & \ GOTO 7000 & 6665 REM *DETECT TRAPS* & 6670 C(41)=FNR(2,10) & \ GOTO 6910 & 6675 REM *SILENCE* & 6680 C(42)=FNR(2,10) & \ GOTO 6910 & 6685 REM *PRAY* & 6690 C(40)=FNR(2,10) & \ GOTO 6910 & 6695 REM *CURE SERIOUS WOUNDS* & 6700 C(11)=C(11)+FNR(2,6)+2 & \ IF C(11)>C(10) THEN & C(11)=C(10) & 6705 PRINT "You now have";C(11);"hit point"; & \PRINT "s"; IF C(11)<>1 & \PRINT "." & \ GOTO 6910 & 6710 REM *DISPELL* & 6715 IF H=1 THEN & GO TO 6785 & ELSE & IF M>6 THEN & GO TO 6650 & 6720 IF FNR(3,6)+2>C(3) THEN & PRINT "The ";M$;" scorns your words." & \ GOTO 5000 & 6725 PRINT "The ";M$;" is dispelled into thin air." & \ I(6)=0 & \ GOTO 6915 & 6730 REM *PLAGUE* & 6735 IF H=1 THEN & GO TO 6785 & 6740 IF FNR(3,6)+2>C(3) THEN & PRINT "The ";M$;" just had it's penicillin shot!" & \ GOTO 5000 & 6745 PRINT "The ";M$;" dies of the black plague!!" & \ I(6)=0 & 6750 IF FNR(1,10)>1 THEN & GO TO 6915 & ELSE & PRINT "You caught it too!! you die!" & \ GOTO 13000 & 6755 REM *FINGER OF DEATH* & 6760 IF H=1 THEN & GO TO 6785 & 6765 PRINT "Die ";M$;"!! ZZAAAPPP!!!!" & \ IF FNR(1,20)<=C(3) THEN & GO TO 4890 & 6770 PRINT "The ";M$;" dodges!!" & \ GOTO 5000 & 6775 REM *RAISE DEAD* & 6780 PRINT "You can't cast this on yourself - you have to die first!" & 6785 PRINT "Too bad you just wasted a combat spell!" & 6900 REM *SPELL RECOVERY* & 6905 IF H=0 THEN & GO TO 4580 & ELSE & GO TO 7000 & 6910 IF H=0 THEN & GO TO 5000 & ELSE & GO TO 7000 & 6915 REM *MONSTER EXPERIENCE* & 6920 E=INT(( (M(M)*M1) + (M.STR*(M.ARM)) )*10/C(8)) & \ PRINT "You got";E;"experience point"; & \PRINT "s"; IF E<>1 & \PRINT "." & \ C(9)=C(9)+E & 6925 SLEEP 1 & \ GOSUB 20600 & \ GOSUB 15000 & \ GOTO 7000 & 7000 REM *TREASURE* & 7001 C(63)=L & \ 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 CHN$ = "NEWSPC" & \ GOTO 32767 & 13000 REM *DEATH* & 13010 IF C(7)=1 AND C(34)>0 THEN & GOTO 13070 & 13020 PRINT CHR$(10);CHR$(10);CHR$(10);"Another "; & \ IF C(8)<4 THEN & PRINT "not so "; & 13030 PRINT "mighty ";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 wish to try again:"; & \ A$=FNC$ & \ PRINT & \ IF A$<>"Y" THEN & GO TO 14000 & 13060 C(64)=2 & \ 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)) & \ PRINT "You're alive with";C(11);"hit points," & 13130 PRINT "and a constitution of ";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);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(" \ /\ /EXCPITTPTFNTALTDGNDGNORBELVTHRTRVRCK",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 & 20025 PRINT & \ RETURN & 20050 ! *INITIALIZE DATA* & 20100 REM *INITALIZE JOB DATA & 20105 J=1 !JOB# 20110 P1,P2=0 !PPN 20115 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 points" & \ 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(s)" & \ 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 & 32767 SUBEND