home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Beijing Paradise BBS Backup
/
PARADISE.ISO
/
software
/
BBSDOORW
/
DND29C4.ZIP
/
SOURCE.ZIP
/
DNDSUB4.BAS
< prev
next >
Wrap
BASIC Source File
|
1993-01-07
|
67KB
|
2,955 lines
Rem dndsub4.bas v2.9c
Rem $Include: 'dndbbs.inc'
Sub Examine.Treasure
On Local Error Goto 10002
Temp4=False
Call Check.Inventory.Treasure
If Temp7=False Then
Call Num
Temp4=True
Call Check.Room.Inventory
If Temp7=False Then
Call Num
Temp4=1
Call Check.Room.Treasure
Endif
Endif
10001
Exit Sub
10002
Resume 10001
End Sub
Sub Find.Inventory
On Local Error Goto 10012
Call Parse
If Parser Then
Call Numeric
Endif
Call Check.Inventory.Treasure
10011
Exit Sub
10012
Resume 10011
End Sub
Sub Find.Object
On Local Error Goto 10022
Call Parse
If Parser Then
Call Numeric
Endif
Call Check.Inventory.Objects
10021
Exit Sub
10022
Resume 10021
End Sub
Sub Check.Room.Treasure
On Local Error Goto 10032
Temp6=False
Temp7=False
TempC=False
If Parsed.Command1<>Nul Then
For Temp5=1 To 10
TempA=RoomRecord.Treasure(Temp5)
If TempA>False And TempA<=Lof(8)/Len(TreasureRecord) Then
Get 8,TempA,TreasureRecord
Out3=TreasureRecord.ShortName
Out3=Left$(Out3,Len(Parsed.Command1))
If Out3=Parsed.Command1 Then
TempC=TempC+1
If Parse.Temp=False Or TempC=Parse.Temp Then
Out3=TreasureRecord.TreasureName
Out3=Rtrim$(Out3)
Temp7=RoomRecord.Treasure(Temp5)
Temp6=RoomRecord.TreCharges(Temp5)
Exit For
Endif
Endif
Endif
Next
Endif
10031
Exit Sub
10032
Resume 10031
End Sub
Sub Check.Room.Objects
On Local Error Goto 10042
Temp6=False
Temp7=False
TempC=False
If Parsed.Command1<>Nul Then
For Temp5=1 To 10
If RoomRecord.Object(Temp5) Then
Get 6,RoomRecord.Object(Temp5),ObjectRecord
Out3=ObjectRecord.ShortName
Out3=Left$(Out3,Len(Parsed.Command1))
If Out3=Parsed.Command1 Then
TempC=TempC+1
If Parse.Temp=False Or TempC=Parse.Temp Then
Out3=ObjectRecord.ObjectName
Out3=Rtrim$(Out3)
Temp7=RoomRecord.Object(Temp5)
Temp6=RoomRecord.ObjCharges(Temp5)
Exit For
Endif
Endif
Endif
Next
Endif
10041
Exit Sub
10042
Resume 10041
End Sub
Sub Check.Room.Inventory
On Local Error Goto 10052
Temp6=False
Temp7=False
TempC=False
If Parsed.Command1<>Nul Then
For Temp5=1 To Room.Treasure.Max
If Room.Inventory(Temp5) Then
Get 8,Room.Inventory(Temp5),TreasureRecord
Out3=TreasureRecord.ShortName
Out3=Rtrim$(Out3)
Out3=Left$(Out3,Len(Parsed.Command1))
If Out3=Parsed.Command1 Then
TempC=TempC+1
If Parse.Temp=False Or TempC=Parse.Temp Then
Out3=TreasureRecord.TreasureName
Out3=Rtrim$(Out3)
Temp7=Room.Inventory(Temp5)
Temp6=Room.Inventory.Charges(Temp5)
Exit For
Endif
Endif
Endif
Next
Endif
10051
Exit Sub
10052
Resume 10051
End Sub
Sub Check.Inventory.Treasure
On Local Error Goto 10062
Temp6=False
Temp7=False
TempC=False
If Parsed.Command1<>Nul Then
For Temp5=1 To Number.Inventory
If Treasure(Temp5) Then
Get 8,Treasure(Temp5),TreasureRecord
Out3=TreasureRecord.ShortName
Out3=Left$(Out3,Len(Parsed.Command1))
If Out3=Parsed.Command1 Then
TempC=TempC+1
If Parse.Temp=False Or TempC=Parse.Temp Then
Out3=TreasureRecord.TreasureName
Out3=Rtrim$(Out3)
Temp7=Treasure(Temp5)
Temp6=Treasure.Charges(Temp5)
Exit For
Endif
Endif
Endif
Next
Endif
10061
Exit Sub
10062
Resume 10061
End Sub
Sub Check.Inventory.Objects
On Local Error Goto 10072
Temp6=False
Temp7=False
TempC=False
If Parsed.Command1<>Nul Then
For Temp5=1 To 5
If UserRecord.Object(Temp5) Then
Get 6,UserRecord.Object(Temp5),ObjectRecord
Out3=ObjectRecord.ShortName
Out3=Left$(Out3,Len(Parsed.Command1))
If Out3=Parsed.Command1 Then
TempC=TempC+1
If Parse.Temp=False Or TempC=Parse.Temp Then
Out3=ObjectRecord.ObjectName
Out3=Rtrim$(Out3)
Temp7=UserRecord.Object(Temp5)
Temp6=UserRecord.ObjCharges(Temp5)
Exit For
Endif
Endif
Endif
Next
Endif
10071
Exit Sub
10072
Resume 10071
End Sub
Sub Search.User.Inventory
On Local Error Goto 10082
Temp6=False
Temp7=False
Get 1,TempC,MessWorkRecord1
If Parsed.Command1<>Nul Then
Do
For Temp5=1 To 20
Temp2=MessWorkRecord1.Treasure(Temp5)
If Temp2 Then
Get 8,Temp2,TreasureRecord
Out3=TreasureRecord.ShortName
Out3=Left$(Out3,Len(Parsed.Command1))
If Out3=Parsed.Command1 Then
Out3=TreasureRecord.TreasureName
Out3=Rtrim$(Out3)
Temp7=MessWorkRecord1.Treasure(Temp5)
Temp6=MessWorkRecord1.TreasureCharges(Temp5)
Exit Do
Endif
Endif
Next
Var=MessWorkRecord1.NextRecord
If Var>False Then
TempC=Var
Get 1,Var,MessWorkRecord1
Else
Exit Do
Endif
Loop
Endif
10081
Exit Sub
10082
Resume 10081
End Sub
Sub Check.Monster
On Local Error Goto 10092
Temp5=False
TempC=False
Monster.Temp=False
If Parsed.Command1<>Nul Then
For Temp5=1 To Number.Monsters
TempA=False
TempB=False
Out3=MonsterArray(Temp5).MonsterName
Out3=Rtrim$(Out3)
Out3=Ucase$(Out3)
TempA=Instr(TempA+1,Out3," ")
While TempA
TempB=TempA
TempA=Instr(TempA+1,Out3," ")
Wend
Out2=Mid$(Out3,TempB+1)
Out2=Left$(Out2,Len(Parsed.Command1))
If Out2=Parsed.Command1 Then
TempC=TempC+1
If Parse.Temp=False Or TempC=Parse.Temp Then
Out3=MonsterArray(Temp5).MonsterName
Out3=Rtrim$(Out3)
Monster.Temp=Temp5
Last.Monster=Parsed.Command1
Exit For
Endif
Endif
Next
Endif
10091
Exit Sub
10092
Resume 10091
End Sub
Sub Check.User
On Local Error Goto 10102
Temp5=False
TempC=False
User.Temp=False
If Parsed.Command1<>Nul Then
For Temp5=1 To Number.Users
TempA=False
TempB=False
Out3=UserArray(Temp5).CodeName
Call Decrypt(Out3)
Out3=Rtrim$(Out3)
Out3=Ucase$(Out3)
TempA=Instr(TempA+1,Out3," ")
While TempA
TempB=TempA
TempA=Instr(TempA+1,Out3," ")
Wend
Out2=Mid$(Out3,TempB+1)
Out2=Left$(Out2,Len(Parsed.Command1))
If Out2=Parsed.Command1 Then
TempC=TempC+1
If Parse.Temp=False Or TempC=Parse.Temp Then
Out3=UserArray(Temp5).CodeName
Call Decrypt(Out3)
Out3=Rtrim$(Out3)
User.Temp=Temp5
Last.Monster=Parsed.Command1
Exit For
Endif
Endif
Next
Endif
10101
Exit Sub
10102
Resume 10101
End Sub
Sub Equate(Temp#) ' My famous recursive descent parser.
On Local Error Goto 10112
Temp#=False
If Out2<>Nul Then
Out2=Ucase$(Out2)
Token.Index=1
Call Get.Token
Call Parse1(Temp#)
Endif
10111
Exit Sub
10112
Resume 10111
End Sub
Sub Parse1(Temp#)
On Local Error Goto 10122
Call Parse2(Temp#)
Token.Parsed$=Strng
While Token.Parsed$="<" Or Token.Parsed$=">" Or_
Token.Parsed$="=" Or Token.Parsed$="#"
Call Get.Token
Call Parse2(Temp2#)
Call Arith(Token.Parsed$,Temp#,Temp2#)
Token.Parsed$=Strng
Wend
10121
Exit Sub
10122
Resume 10121
End Sub
Sub Parse2(Temp#)
On Local Error Goto 10132
Call Parse3(Temp#)
Token.Parsed$=Strng
While Token.Parsed$="+" Or Token.Parsed$="-"
Call Get.Token
Call Parse3(Temp2#)
Call Arith(Token.Parsed$,Temp#,Temp2#)
Token.Parsed$=Strng
Wend
10131
Exit Sub
10132
Resume 10131
End Sub
Sub Parse3(Temp#)
On Local Error Goto 10142
Call Parse4(Temp#)
Token.Parsed$=Strng
While Token.Parsed$="*" Or Token.Parsed$="/"
Call Get.Token
Call Parse4(Temp2#)
Call Arith(Token.Parsed$,Temp#,Temp2#)
Token.Parsed$=Strng
Wend
10141
Exit Sub
10142
Resume 10141
End Sub
Sub Parse4(Temp#)
On Local Error Goto 10152
Call Parse5(Temp#)
If Strng="^" Then
Call Get.Token
Call Parse4(Temp2#)
Call Arith(Token.Parsed$,Temp#,Temp2#)
Endif
10151
Exit Sub
10152
Resume 10151
End Sub
Sub Parse5(Temp#)
On Local Error Goto 10162
Token.Parsed$=Nul
If Token=1 And (Strng="+" Or Strng="-") Then
Token.Parsed$=Strng
Call Get.Token
Endif
Call Parse6(Temp#)
If Token.Parsed$<>Nul Then
Call Arith(Token.Parsed$,Temp#,Temp2#)
Endif
10161
Exit Sub
10162
Resume 10161
End Sub
Sub Parse6(Temp#)
On Local Error Goto 10172
If Strng="(" And Token=1 Then
Call Get.Token
Call Parse1(Temp#)
Call Get.Token
Else
Call Primitive(Temp#)
Endif
10171
Exit Sub
10172
Resume 10171
End Sub
Sub Primitive(Temp#)
On Local Error Goto 10182
If Token=2 Then
Temp#=Val(Strng)
Call Get.Token
Else
If Token=3 Then
Select Case Strng
Case "STR", "ST"
Temp#=UserRecord.Stats(1)
Case "INT", "IN"
Temp#=UserRecord.Stats(2)
Case "WIS", "WI"
Temp#=UserRecord.Stats(3)
Case "DEX", "DX"
Temp#=UserRecord.Stats(4)
Case "CON", "CO"
Temp#=UserRecord.Stats(5)
Case "PIE", "PI"
Temp#=UserRecord.Stats(6)
Case "CHA", "CH"
Temp#=UserRecord.Stats(7)
Case "FAT", "FT"
Temp#=UserRecord.Fatigue
Case "VIT", "VT"
Temp#=UserRecord.Vitality
Case "MAG", "MG"
Temp#=UserRecord.Magic
Case "EXP", "XP"
Temp#=UserRecord.Experience
Case "LVL", "LF"
Temp#=UserRecord.Level
Case "AR"
Temp#=Weapon1
Case "WE"
Temp#=Weapon2
Case "SH"
Temp#=Weapon3
Case "WP1"
Temp#=UserRecord.Weapons(1)
Case "WP2"
Temp#=UserRecord.Weapons(2)
Case "WP3"
Temp#=UserRecord.Weapons(3)
Case "WP4"
Temp#=UserRecord.Weapons(4)
Case "MHP"
Temp#=MonsterArray(Monster.Temp).Hits
Case "MEXP"
Temp#=MonsterArray(Monster.Temp).Experience
Case "MLVL"
Temp#=MonsterArray(Monster.Temp).Level
Case "XX"
Temp#=Multiplier
Case "RND"
Temp#=Rnd
Case "RG"
Temp#=Treasure.Charges(Weapon7)
Case "WT"
Temp#=Weight
Case "GD"
Temp#=UserRecord.Gold
Case "BR"
Temp#=UserRecord.Brief
Case "PSIA"
Temp#=Psi.Attack.Mode
Case "PSID"
Temp#=Psi.Defense.Mode
Case "MPSI"
Temp#=MonsterArray(Monster.Temp).Psionic
End Select
Call Get.Token
Endif
Endif
10181
Exit Sub
10182
Resume 10181
End Sub
Sub Arith(Token.Parsed$,Temp#,Temp2#)
On Local Error Goto 10192
If Token.Parsed$="+" Then
Temp#=(Temp#+Temp2#)
Endif
If Token.Parsed$="-" Then
Temp#=(Temp#-Temp2#)
Endif
If Token.Parsed$="/" Then
Temp#=(Temp#/Temp2#)
Endif
If Token.Parsed$="*" Then
Temp#=(Temp#*Temp2#)
Endif
If Token.Parsed$="^" Then
Temp#=(Temp#^Temp2#)
Endif
If Token.Parsed$="<" Then
Temp#=(Temp#<Temp2#)
Endif
If Token.Parsed$=">" Then
Temp#=(Temp#>Temp2#)
Endif
If Token.Parsed$="=" Then
Temp#=(Temp#=Temp2#)
Endif
If Token.Parsed$="#" Then
Temp#=(Temp#<>Temp2#)
Endif
10191
Exit Sub
10192
Resume 10191
End Sub
Sub Get.Token
On Local Error Goto 10202
Strng=Nul
If Instr("-+*/^()<>=#",Mid$(Out2,Token.Index,1)) Then
Token=1
Strng=Mid$(Out2,Token.Index,1)
Token.Index=Token.Index+1
Exit Sub
Endif
If Mid$(Out2,Token.Index,1)>="A" And Mid$(Out2,Token.Index,1)<="Z" Then
While Instr(" -+*/^()<>=#",Mid$(Out2,Token.Index,1))=False
Strng=Strng+Mid$(Out2,Token.Index,1)
Token.Index=Token.Index+1
Wend
Token=3
Exit Sub
Endif
If Mid$(Out2,Token.Index,1)>="0" And Mid$(Out2,Token.Index,1)<="9" Then
While Instr(" -+*/^()<>=#",Mid$(Out2,Token.Index,1))=False
Strng=Strng+Mid$(Out2,Token.Index,1)
Token.Index=Token.Index+1
Wend
Token=2
Endif
10201
Exit Sub
10202
Resume 10201
End Sub
Sub Sort.Inventory
On Local Error Goto 10212
If Sorting=False Then
Sorting=True
Strng="Inventory sorting on."
Else
Sorting=False
Strng="Inventory sorting off."
Endif
Call IO.O
10211
Exit Sub
10212
Resume 10211
End Sub
Sub Sorter
On Local Error Goto 10222
If Sorting Then
Call Sort.Array(Number.Inventory,1)
Endif
10221
Exit Sub
10222
Resume 10221
End Sub
Sub Sort.Array(VarZ,VarQ)
On Local Error Goto 10224
TempQ=4
While TempQ<=VarZ
TempQ=TempQ*2
Wend
TempQ=Int((TempQ-1)/2)
While TempQ>False
For Var=1 To VarZ-TempQ
VarX=Var
While VarX>False
VarN=VarX+TempQ
Select Case VarQ
Case 1
If Treasure.Charges(VarX)<Treasure.Charges(VarN) Then
Swap Treasure(VarX),Treasure(VarN)
Swap Treasure.Charges(VarX),Treasure.Charges(VarN)
Gosub Swap.Weapons
VarX=VarX-TempQ
Else
VarX=False
Endif
Case 2
If Temp.ArrayZ(VarX)<Temp.ArrayZ(VarN) Then
Swap Temp.Array1(VarX),Temp.Array1(VarN)
Swap Temp.ArrayZ(VarX),Temp.ArrayZ(VarN)
VarX=VarX-TempQ
Else
VarX=False
Endif
Case 3
If Temp.ArrayX(VarX)>Temp.ArrayX(VarN) Then
Swap Node.Work.Array1(VarX),Node.Work.Array1(VarN)
Swap Temp.Array1(VarX),Temp.Array1(VarN)
Swap Temp.Array2(VarX),Temp.Array2(VarN)
Swap Temp.ArrayS(VarX),Temp.ArrayS(VarN)
Swap Temp.ArrayX(VarX),Temp.ArrayX(VarN)
VarX=VarX-TempQ
Else
VarX=False
Endif
End Select
Wend
Next
TempQ=Int(TempQ/2)
Wend
Exit Sub
Swap.Weapons:
Select Case Weapon4
Case VarX
Weapon4=VarN
Case VarN
Weapon4=VarX
End Select
Select Case Weapon5
Case VarX
Weapon5=VarN
Case VarN
Weapon5=VarX
End Select
Select Case Weapon6
Case VarX
Weapon6=VarN
Case VarN
Weapon6=VarX
End Select
Select Case Weapon7
Case VarX
Weapon7=VarN
Case VarN
Weapon7=VarX
End Select
Return
10223
Exit Sub
10224
Resume 10223
End Sub
Sub Toggle.Echo
On Local Error Goto 10232
Echo=Not Echo
Strng="Echo now on."
If Echo Then
Strng="Echo now off."
Endif
Call IO.O
10231
Exit Sub
10232
Resume 10231
End Sub
Sub Page.Sysop
On Local Error Goto 10242
If Chat.Annoy Then
Strng="The Sysop does not want to be disturbed now.."
Call IO.O
Exit Sub
Endif
If Config2(69)>False Then
If UserRecord.Level<Config2(69) Then
Strng="The Sysop is not answering pages now."
Call IO.O
Exit Sub
Endif
Endif
Temp5=False
Graphics.Off=True
Strng="Paging Sysop."
Call IO.O
Strng="Hit <control-k> to return to prompt."
Call IO.O
Strng="Sysop hit <escape> to enter chat."+Chr$(13)+Chr$(10)
Call Scrn(Strng)
Strng="Paging Sysop:"
Carriage.Return=True
Call IO.O
Chat=True
Allow.Break=True
Do While Chat
Strng=Chr$(7)+Mask$
Carriage.Return=True
Call IO.O
Call Pause.Second
Temp5=Temp5+1
If Temp5>=10 Or Break Then
Chat=True
Allow.Break=False
Call IO.O
Exit Do
Endif
Loop
If Chat=False Then
Chat=True
Allow.Break=False
Strng=Nul
Call IO.O
Call Enter.Chat
Endif
10241
Chat=False
Exit Sub
10242
Resume 10241
End Sub
Sub Enter.Chat
On Local Error Goto 10252
Graphics.Off=True
Temp1!=Timeon
Temp2!=Timer
Temp3!=Time.Left
Timeon=Timer
Time.Left=60
Allow.Break=False
Strng=Nul
Call IO.O
Strng="Chat Mode.."
Call IO.O
Word.Wrap=True
Do While Chat
Timeon=Timer
Time.Left=600
Call IO.I
Loop
Timeon=Temp1!+Fix(Timer-Temp2!)
Time.Left=Temp3!
Word.Wrap=False
Allow.Break=False
Strng=Nul
Call IO.O
10251
Exit Sub
10252
Resume 10251
End Sub
Sub Set.Clock ' Watch for the hanging at midnight.
On Local Error Goto 10262
If Time$>"23:59:59" Then
Sleep 2
If Time$="24:00:00" Then
Time$="00:00:01"
Endif
Endif
10261
Exit Sub
10262
Resume 10261
End Sub
Sub DM.Help
On Local Error Goto 10272
Temp$=Stored.Parsed.Command1
If Left$(Temp$,Len(Config3(9)))<>Config3(9) Then
Strng="Enter DM command, form: "+Config3(9)+"Help "+Config3(9)+"<command>"
Call IO.O
Exit Sub
Endif
Temp$=Mid$(Temp$,Len(Config3(9))+1)
Stored.Parsed.Command1=Temp$
Call Read.Help(True)
10271
Exit Sub
10272
Resume 10271
End Sub
Sub Read.Help(Var)
On Local Error Goto 10282
Graphics.Off=True
Temp$=Stored.Parsed.Command1
Temp$=Rtrim$(Temp$)
Temp$=Ucase$(Temp$)
Temp$=Left$(Temp$,8)
If Var Then
FileName=DMhelp.Filename
Else
FileName=Help.Filename
Endif
Close #13
Open FileName For Random Shared As #13 Len=Len(HelpRecord2)
Temp=2
Temp5=False
Allow.Break=True
Do
Get 13,Temp,HelpRecord2
Temp2$=HelpRecord2.CommandName
Temp2$=Rtrim$(Temp2$)
If Left$(Temp2$,Len(Temp$))=Temp$ Then
Temp1=Temp
Do
Strng=HelpRecord2.Text
Strng=Rtrim$(Strng)
Call IO.O
If Break Then
Exit Do
Endif
Temp5=Temp5+1
If Temp5=23 Then
Temp5=False
Call More.Prompt
If No Then
Exit Do
Endif
Endif
Temp=Temp+1
Get 13,Temp,HelpRecord2
If HelpRecord2.NextRecNum<>Temp1 Then
Exit Do
Endif
If Temp>Lof(13)/Len(HelpRecord2) Then
Exit Do
Endif
Loop
Allow.Break=False
Graphics.Off=False
Exit Sub
Endif
Temp=HelpRecord2.NextRecNum
If Temp>=Lof(13)/Len(HelpRecord2) Then
Exit Do
Endif
Loop
Graphics.Off=False
Strng="Help text not found."
Call IO.O
Exit Sub
10281
Exit Sub
10282
Resume 10281
End Sub
Sub Train.Stats
On Local Error Goto 10292
If UserRecord.Level<False Then
UserRecord.Level=False
Endif
If UserRecord.Level>=MaxInt Then
Strng="Nothing happens.."
Call IO.O
Exit Sub
Endif
If UserRecord.Level>False Then
Call Gold(Temp#)
UserRecord.Gold=UserRecord.Gold-Temp#
Endif
Temp1=Int(Rnd*7+1)
If UserRecord.Stats(Temp1)<Config2(31) Or Normal.User=False Then
UserRecord.Stats(Temp1)=UserRecord.Stats(Temp1)+1
Strng="gained one "+Rtrim$(Stat(Temp1))+" point"
Call Update.DayFile(Strng,False)
Endif
If UserRecord.Level<6 Then
If UserRecord.Stats(6)<Config2(31) Then
UserRecord.Stats(6)=UserRecord.Stats(6)+1
Strng="gained one "+Rtrim$(Stat(6))+" point"
Call Update.DayFile(Strng,False)
Endif
Endif
UserRecord.Level=UserRecord.Level+1
Call New.Stats
Call Experience(Temp#)
UserRecord.Experience=Temp#
Strng="trained for level"
If UserRecord.Level>10 Then
Strng=Strng+Str$(UserRecord.Level)
Else
Strng=Strng+" "+Rtrim$(Numeral(UserRecord.Level))
Endif
Call Update.DayFile(Strng,False)
Strng="After many hours of training and meditation..."
Call IO.O
Call Display.Stats
10291
Exit Sub
10292
Resume 10291
End Sub
Sub New.Stats
On Local Error Goto 10310
If UserRecord.Level<False Then
UserRecord.Level=False
Endif
10301
Temp#=Cdbl(Training.Room(UserRecord.ClassType,1))*Cdbl(UserRecord.Level)
10302
If Temp#>MaxInt Then
Temp#=MaxInt
Endif
UserRecord.FatigueMax=Cint(Temp#)
10303
Temp#=Cdbl(Training.Room(UserRecord.ClassType,2))*Cdbl(UserRecord.Level)
10304
If Temp#>MaxInt Then
Temp#=MaxInt
Endif
UserRecord.VitalityMax=Cint(Temp#)
10305
Temp#=Cdbl(Training.Room(UserRecord.ClassType,3))*Cdbl(UserRecord.Level)
10306
If Temp#>MaxInt Then
Temp#=MaxInt
Endif
UserRecord.MagicMax=Cint(Temp#)
10307
Temp#=Cdbl(Training.Room(UserRecord.ClassType,4))*Cdbl(UserRecord.Level)
10308
If Temp#>MaxInt Then
Temp#=MaxInt
Endif
UserRecord.PsionicMax=Cint(Temp#)
If UserRecord.Fatigue<False Or_
UserRecord.Fatigue>UserRecord.FatigueMax Then
UserRecord.Fatigue=UserRecord.FatigueMax
Endif
If UserRecord.Vitality<False Or_
UserRecord.Vitality>UserRecord.VitalityMax Then
UserRecord.Vitality=UserRecord.VitalityMax
Endif
If UserRecord.Magic<False Or_
UserRecord.Magic>UserRecord.MagicMax Then
UserRecord.Magic=UserRecord.MagicMax
Endif
If UserRecord.Psionic<False Or_
UserRecord.Psionic>UserRecord.PsionicMax Then
UserRecord.Psionic=UserRecord.PsionicMax
Endif
If Normal.User Then
For Temp=1 To 7
If UserRecord.Stats(Temp)>Config2(31) Then
UserRecord.Stats(Temp)=Config2(31)
Endif
Next
Endif
Call Status.Line(False)
If Normal.User Then
For Temp=1 To 7
If UserRecord.Stats(Temp)<=False Then
Message1="Your "+Stat(Temp)+" is zero!"
Strng="died from low stats!"
Call Update.DayFile(Strng,False)
Call Player.Died
Exit Sub
Endif
Next
Endif
If Config2(48) Then
If UserRecord.Level>=10 Then
If UserRecord.ClassType>=1 And UserRecord.ClassType<=10 Then
Out2=High.Class.Name(UserRecord.ClassType)
Call Valid(Out2,20)
If Len(Out2) Then
Call Encrypt(Out2,True)
UserRecord.ClassName=Out2
Endif
Endif
Endif
Endif
10309
Exit Sub
10310
If Erl=10301 Then
Resume 10302
Endif
If Erl=10303 Then
Resume 10304
Endif
If Erl=10305 Then
Resume 10306
Endif
If Erl=10307 Then
Resume 10308
Endif
Resume 10309
End Sub
Sub Bank.Interest
On Local Error Goto 10316
Strng=UserRecord.DateOn
Call Decrypt(Strng)
If Date$<>Strng Then
UserRecord.NumCalls=False
TempX=DateValue#(Date$)-DateValue#(Strng)
If TempX>False Then
If UserRecord.Bank>False Then
TempG#=False
10311 For Temp3=1 To TempX
Temp3#=Int(UserRecord.Bank*Config1(30))
UserRecord.Bank=UserRecord.Bank+Temp3#
TempG#=TempG#+Temp3#
Next
10312 If TempG#>False Then
Strng="The bank reports interest posting of"+_
Str$(TempG#)+" gold to your account!"
Call IO.O
Endif
Endif
If UserRecord.Borrow>False Then
10313 For Temp3=1 To TempX
Temp=Int(UserRecord.Borrow*Config1(10))
UserRecord.Borrow=UserRecord.Borrow+Temp
Next
10314 If UserRecord.Borrow>False Then
Strng="The lending interest rate of"+Str$(Config1(10)*100)+_
"% increased your borrowed amount to"+Str$(UserRecord.Borrow)+"!"
Call IO.O
Endif
Endif
Endif
Endif
10315
Strng=Date$
Call Valid(Strng,10)
Call Encrypt(Strng,True)
UserRecord.DateOn=Strng
Exit Sub
10316
If Erl=10311 Then
Resume 10312
Endif
If Erl=10313 Then
Resume 10314
Endif
Resume 10315
End Sub
Sub Open.Recep.File
On Local Error Goto 10322
Close 13
FileName=Config3(51)+Rtrim$(TreasureRecord.RecepFileName)+Config3(57)
Open FileName For Random Shared As #13 Len=Len(RecepRec)
10321
Exit Sub
10322
Resume 10321
End Sub
Sub Edit.Room(Var1)
On Local Error Goto 10342
Graphics.Off=True
Get 5,Var1,RoomRecord
Strng="Current short description:"
Call IO.O
Strng=RoomRecord.ShortDesc
Call IO.O
Strng="Enter short description(78 characters):"
Call IO.O
Strng="Press "+Enter$+" to leave unchanged."
Call IO.O
Line.Length=78
Strng="?"
Call IO.I
If No.Input=False Then
RoomRecord.ShortDesc=Out2
Endif
Put 5,Var1,RoomRecord
Strng="Edit long description(y/n)?"
Call IO.I
If Yes Then
Strng="Enter four lines for long description:"
Call IO.O
Strng="Press "+Enter$+" when done."
Call IO.O
For Var2=1 To 4
RoomRecord.LongDesc(Var2)=Nul
Next
Word.Wrap=True
For Var2=1 To 4
Strng="?"
If Var2=4 Then
Word.Wrap=False
Endif
Call IO.I
If No.Input Then
Exit For
Endif
RoomRecord.LongDesc(Var2)=Out2
Next
Word.Wrap=False
Put 5,Var1,RoomRecord
Endif
10341
Exit Sub
10342
Resume 10341
End Sub
Sub Add.Monclass(Var1)
On Local Error Goto 10344
Strng="Add monster class(y/n)?"
Call IO.I
If Yes Then
Strng="Enter monster class(1-"+Mid$(Str$(Monclass.Max),2)+")?"
Call IO.I
Temp2=Int(Val(Out2))
If Temp2>False And Temp2<=Monclass.Max Then
Get 5,Var1,RoomRecord
RoomRecord.MonsterClass=Temp2
Put 5,Var1,RoomRecord
Strng="Monster class"+Str$(Temp2)+" added to room"+Str$(Var1)+"."
Call IO.O
Endif
Endif
10343
Exit Sub
10344
Resume 10343
End SUb
Sub Add.Room
On Local Error Goto 10352
Graphics.Off=True
Strng="Add new room(y/n)?"
Call IO.I
If No Then
TempC=False
Exit Sub
Endif
TempC=True
TempD=Room
Room=Lof(5)/Len(RoomRecord)+1
Call Clear.Room(Room)
Call Edit.Room(Room)
Strng="Add room link(y/n)?"
Call IO.I
If Yes Then
Strng="(Press "+Enter$+" for entry link)"
Call IO.O
Temp3=TempA
Call Add.Link(TempD,Room)
Endif
Call Add.Monclass(Room)
10351
Exit Sub
10352
Resume 10351
End Sub
Sub Clear.Room(Var)
On Local Error Goto 10354
RoomRecord.ShortDesc=Nul
For Var1=1 To 4
RoomRecord.LongDesc(Var1)=Nul
Next
RoomRecord.MonsterClass=False
RoomRecord.SpellTrigger=False
RoomRecord.MonsterTrigger=False
RoomRecord.HealthRate=False
RoomRecord.EncounterRate=False
RoomRecord.HitPoints=False
RoomRecord.Inventory=False
RoomRecord.MonsterTalk=False
RoomRecord.Fumble=False
RoomRecord.Level=False
RoomRecord.Teleport=False
RoomRecord.Restrictions=False
RoomRecord.RustRate=False
RoomRecord.StealRate=False
For Var1=1 To 11
RoomRecord.Direct(Var1)=False
Next
For Var1=1 To 10
RoomRecord.Object(Var1)=False
RoomRecord.ObjCharges(Var1)=False
RoomRecord.Treasure(Var1)=False
RoomRecord.TreCharges(Var1)=False
RoomRecord.Flags(Var1)=False
Next
Put 5,Var,RoomRecord
10353
Exit Sub
10354
Resume 10353
End Sub
Sub Link.Room
On Local Error Goto 10362
Graphics.Off=True
Strng="Enter room(1-"+Mid$(Str$(Lof(5)/Len(RoomRecord)),2)+")?"
Call IO.I
Temp1=Int(Val(Out2))
If Temp1>False And Temp1<=Lof(5)/Len(RoomRecord) Then
Strng="Enter link command(A to add, D to delete)?"
Call IO.I
Select Case Ucase$(Out2)
Case "A"
Strng="Enter link room(1-"+Mid$(Str$(Lof(5)/Len(RoomRecord)),2)+")?"
Call IO.I
Temp2=Int(Val(Out2))
If Temp2>False And Temp2<=Lof(5)/Len(RoomRecord) Then
Temp3=False
Call Add.Link(Temp1,Temp2)
Endif
Case "D"
Call Delete.Link(Temp1)
End Select
Endif
Get 5,Room,RoomRecord
10361
Exit Sub
10362
Resume 10361
End Sub
Sub Add.Link(Var1,Var2)
On Local Error Goto 10364
Strng="Enter direction(N/E/S/W/O/U/D/NE/SE/SW/NW)?"
Call IO.I
Call Find.Link(Out2)
If Temp3=False Then
Exit Sub
Endif
Get 5,Var1,RoomRecord
RoomRecord.Direct(Temp3)=Var2
Put 5,Var1,RoomRecord
Strng="Room"+Str$(Var1)+" link added to room"+Str$(Var2)+"."
Call IO.O
If Temp3=5 Then
Exit Sub
Endif
Strng="Link room"+Str$(Var2)+" back to room"+Str$(Var1)+"(y/n)?"
Call IO.I
If Yes Then
Call Find.Back.Link(Temp3)
If Temp4 Then
Get 5,Var2,RoomRecord
RoomRecord.Direct(Temp4)=Var1
Put 5,Var2,RoomRecord
Strng="Room"+Str$(Var2)+" link added back to room"+Str$(Var1)+"."
Call IO.O
Endif
Endif
10363
Exit Sub
10364
Resume 10363
End Sub
Sub Delete.Link(Var1)
On Local Error Goto 10366
Strng="Enter direction(N/E/S/W/O/U/D/NE/SE/SW/NW)?"
Call IO.I
Call Find.Link(Out2)
If Temp3 Then
Get 5,Var1,RoomRecord
RoomRecord.Direct(Temp3)=False
Put 5,Var1,RoomRecord
Strng="Room"+Str$(Var1)+" link removed."
Call IO.O
Endif
10365
Exit Sub
10366
Resume 10365
End Sub
Sub Find.Link(Var1$)
On Local Error Goto 10372
Select Case Ucase$(Var1$)
Case "N"
Temp3=1
Case "E"
Temp3=2
Case "S"
Temp3=3
Case "W"
Temp3=4
Case "O"
Temp3=5
Case "U"
Temp3=6
Case "D"
Temp3=7
Case "NE"
Temp3=8
Case "SE"
Temp3=9
Case "SW"
Temp3=10
Case "NW"
Temp3=11
End Select
10371
Exit Sub
10372
Resume 10371
End Sub
Sub Find.Back.Link(Var2)
On Local Error Goto 10382
Select Case Var2
Case 1
Temp4=3
Case 2
Temp4=4
Case 3
Temp4=1
Case 4
Temp4=2
Case 5
Temp4=0
Case 6
Temp4=7
Case 7
Temp4=6
Case 8
Temp4=10
Case 9
Temp4=11
Case 10
Temp4=8
Case 11
Temp4=9
Case Else
Temp4=0
End Select
10381
Exit Sub
10382
Resume 10381
End Sub
Sub Drop(Var1)
On Local Error Goto 10392
Temp1=1
If Right$(Out2,7)=" points" Then
Out2=Left$(Out2,Len(Out2)-7)
Temp1=2
Endif
For Temp5=1 To 7
If Out2=Rtrim$(Stat(Temp5)) Then
If (UserRecord.Flags And 2^Temp5) Then
If Normal.User Then
Graphics.Off=True
Strng="The Ghods Thunder..."
Call IO.O
Strng=" Your Wish Is Denied!"
Call IO.O
Graphics.Off=False
Exit Sub
Endif
Endif
UserRecord.Flags=(UserRecord.Flags Or 2^Temp5)
If UserRecord.Stats(Temp5)<Config2(31) Or Normal.User=False Then
UserRecord.Stats(Temp5)=UserRecord.Stats(Temp5)+Temp1
Strng="gained "
Strng=Strng+Rtrim$(Numeral(Temp1))+" "
Strng=Strng+Rtrim$(Stat(Temp5))+" point"
If Temp1>1 Then
Strng=Strng+"s"
Endif
Call Update.DayFile(Strng,False)
Endif
Graphics.Off=True
Strng="The Ghods Thunder..."
Call IO.O
Strng=" Your "+Rtrim$(Stat(Temp5))+" Has Been Raised!"
Call IO.O
Graphics.Off=False
Exit Sub
Endif
Next
If Var1=False Then
If (UserRecord.Flags And Wished) And Normal.User Then
Graphics.Off=True
Strng="The Ghods Thunder..."
Call IO.O
Strng=" Your Wish Is Denied!"
Call IO.O
Graphics.Off=False
Exit Sub
Endif
Endif
UserRecord.Flags=UserRecord.Flags Or Wished
Temp2=False
Temp6=False
Temp7=False
For Temp5=1 To Lof(8)/Len(TreasureRecord)
Get 8,Temp5,TreasureRecord
Out3=TreasureRecord.TreasureName
Out3=Left$(Out3,Len(Out2))
If Out2=Out3 Then
Temp2=Temp2+1
If Parse.Temp=False Or Temp2=Parse.Temp Then
Temp7=Temp5
If TreasureRecord.Vehicle Then
Temp6=TreasureRecord.VehicleHits
Else
Temp6=TreasureRecord.Charges
Endif
Exit For
Endif
Endif
Next
If Temp7=False Then
If Normal.User=False Or Var1 Then
For Temp5=1 To Lof(6)/Len(ObjectRecord)
Get 6,Temp5,ObjectRecord
Out3=ObjectRecord.ObjectName
Out3=Left$(Out3,Len(Out2))
If Out2=Out3 Then
Temp2=Temp2+1
If Parse.Temp=False Or Temp2=Parse.Temp Then
Temp7=-Temp5
Temp6=False
Exit For
Endif
Endif
Next
Endif
Endif
If Var1=False Then
If Temp7>False And Normal.User Then
If TreasureRecord.Recep Then
Temp7=False
Endif
If TreasureRecord.Vehicle Then
Temp7=False
Endif
Temp4=TreasureRecord.Spell
If Temp4>False And Temp4<=Spells.Max Then
If SpellArray(Temp4).SpellType=4 Then
Temp7=False
Endif
Endif
Endif
Endif
If Temp7=False Then
Graphics.Off=True
Strng="The Ghods Thunder..."
Call IO.O
Strng=" Your Wish Is Denied!"
Call IO.O
Graphics.Off=False
Exit Sub
Endif
Temp8=False
If Temp7>False Then
For Temp5=1 To 10
If RoomRecord.Treasure(Temp5)=False Then
RoomRecord.Treasure(Temp5)=Temp7
RoomRecord.TreCharges(Temp5)=Temp6
RoomRecord.Flags(Temp5)=False
Put 5,Room,RoomRecord
Temp8=True
Exit For
Endif
Next
Endif
If Temp7<False Then
For Temp5=1 To 10
If RoomRecord.Object(Temp5)=False Then
RoomRecord.Object(Temp5)=Abs(Temp7)
RoomRecord.ObjCharges(Temp5)=Temp6
RoomRecord.Flags(Temp5)=False
Put 5,Room,RoomRecord
Temp8=True
Exit For
Endif
Next
Endif
Graphics.Off=True
Strng="A Dark Cloud Passes Overhead..."
Call IO.O
Strng=" Some Treasure Falls From The Sky..."
Call IO.O
Strng="The Cloud Disappears..."
Call IO.O
Graphics.Off=False
If Temp8=False Then
Strng="It fell, then rolled away.."
Call IO.O
Endif
10391
Exit Sub
10392
Resume 10391
End Sub
Sub Goto.Bank
On Local Error Goto 10402
If Config2(50)=False Then
Call In.Room(16)
If TempA=False Then
Strng="Find the Pawn Shop.."
Call IO.O
Exit Sub
Endif
Endif
Call Bank
10401
Exit Sub
10402
Resume 10401
End Sub
Sub DM.Send
On Local Error Goto 10412
Strng="Enter text: "
Line.Length=80
Call IO.I
Out2=Mask$+Mask$+Mask$+" "+Out2
If No.Input=False Then
Call Send.Mess(5,False,False,Out2)
Endif
10411
Exit Sub
10412
Resume 10411
End Sub
Sub DM.Noid
On Local Error Goto 10422
Strng="Enter no-id text: "
Line.Length=80
Call IO.I
If No.Input=False Then
Call Send.Mess(5,False,False,Out2)
Endif
10421
Exit Sub
10422
Resume 10421
End Sub
Sub Discard(Var1,Var2)
On Local Error Goto 10432
TempA=Treasure(Var1)
TempB=Treasure.Charges(Var1)
Get 8,Abs(TempA),TreasureRecord
Weight=Weight-TreasureRecord.Weight
If Weight<False Then
Weight=False
Endif
For TempC=Var1 To Number.Inventory-1
Treasure(TempC)=Treasure(TempC+1)
Treasure.Charges(TempC)=Treasure.Charges(TempC+1)
Next
Treasure(Number.Inventory)=False
Treasure.Charges(Number.Inventory)=False
Number.Inventory=Number.Inventory-1
If Number.Inventory=<False Then
Number.Inventory=False
Weight=False
Endif
If Var1=Weapon6 Then
Weapon2=False
Weapon6=False
Weapon10=False
Endif
If Var1=Weapon5 Then
Weapon3=False
Weapon5=False
Endif
If Var1=Weapon4 Then
Weapon1=False
Weapon4=False
Endif
If Var1=Weapon7 Then
Weapon7=False
Weapon8=False
Weapon9=False
Endif
If Var1<Weapon6 Then
Weapon6=Weapon6-1
Endif
If Var1<Weapon5 Then
Weapon5=Weapon5-1
Endif
If Var1<Weapon4 Then
Weapon4=Weapon4-1
Endif
If Var1<Weapon7 Then
Weapon7=Weapon7-1
Endif
If Var2=False Then
Get 5,Room,RoomRecord
For TempC=1 To 10
If RoomRecord.Treasure(TempC)=False Then
RoomRecord.Treasure(TempC)=TempA
RoomRecord.TreCharges(TempC)=TempB
RoomRecord.Flags(TempC)=False
Put 5,Room,RoomRecord
Exit For
Endif
Next
Endif
10431
Exit Sub
10432
Resume 10431
End Sub
Sub Clean.Room
On Local Error Goto 10442
If Config2(58)=False Then
If Room>False And Room<=Lof(5)/Len(RoomRecord) Then
Get 5,Room,RoomRecord
For Temp5=1 To 10
Temp2=RoomRecord.Treasure(Temp5)
If Temp2>False And Temp2<=Lof(8)/Len(TreasureRecord) Then
Get 8,Temp2,TreasureRecord
If TreasureRecord.Invisible=False Then
If RoomRecord.Flags(Temp5)=False Then
RoomRecord.Treasure(Temp5)=False
RoomRecord.TreCharges(Temp5)=False
Endif
Endif
Endif
Next
Put 5,Room,RoomRecord
Endif
Endif
10441
Exit Sub
10442
Resume 10441
End Sub
Sub User.List
On Local Error Goto 10452
Put 3,User.Index,UserRecord
Strng="(hit <control-k> to interrupt).."
Call IO.O
Graphics.Off=True
Strng="DNDBBS V"+Version$+" User List For "+Left$(FNclock$,13)+"."
Call IO.O
Strng=Nul
Call IO.O
Strng="Number User Name Class Name"
Strng=Strng+" Race Level"
Call IO.O
Strng=String$(73,"-")
Call IO.O
Temp5=3
Allow.Break=True
For Temp.User.Index=1 To Lof(3)/Len(UserRecord)
Get 3,Temp.User.Index,UserRecord
Strng=UserRecord.CodeName
Call Decrypt(Strng)
If Left$(Strng,9)<>Deleted$ Then
Temp9=False
If UserRecord.Flags And Locked.User Then
If Normal.User Then
Temp9=True
Endif
Endif
If Temp9=False Then
Strng=Mid$(Str$(Temp.User.Index),2)+"."
Strng=Strng+Space$(7-Len(Strng))
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Strng=Strng+Out2+" "
Out2=UserRecord.ClassName
Call Decrypt(Out2)
Strng=Strng+Out2+" "
If UserRecord.Race<1 Then
UserRecord.Race=1
Endif
Out2=Race(UserRecord.Race)
Out2=Rtrim$(Out2)
Out2=Out2+Space$(8-Len(Out2))
Strng=Strng+Out2
If UserRecord.Level<=False Then
Out2=" -dead-"
Else
Out2=Str$(UserRecord.Level)
Endif
Out2=Out2+Space$(7-Len(Out2))
If UserRecord.Flags And Locked.User Then
Out2=Out2+Mask$
Endif
If UserRecord.ClassType>8 Then
Out2=Out2+"*"
Endif
Strng=Strng+Out2
Call IO.O
If Break Then
Exit For
Endif
Temp5=Temp5+1
If Temp5=21 Then
Temp5=False
Call More.Prompt
If No Then
Exit For
Endif
Endif
Endif
Endif
Next
Get 3,User.Index,UserRecord
10451
Allow.Break=False
If Temp5>False Then
Call More.Prompt
Endif
Exit Sub
10452
Resume 10451
End Sub
Sub Get.User.Record
On Local Error Goto 10462
Get 3,User.Index,UserRecord
Number.Inventory=False
Temp1=False
For Temp=1 To 15
Temp1=Temp1+1
Treasure(Temp1)=Abs(UserRecord.Inv(Temp))
Treasure.Charges(Temp1)=UserRecord.Charges(Temp)
Next
For Temp=1 To 5
If Normal.User Or UserRecord.Object(Temp)<False Then
UserRecord.Object(Temp)=False
UserRecord.ObjCharges(Temp)=False
Endif
Next
Weight=False
For Temp2=1 To 15
Temp3=Treasure(Temp2)
If Temp3=False Then
Exit For
Endif
Number.Inventory=Number.Inventory+1
Get 8,Temp3,TreasureRecord
Weight=Weight+TreasureRecord.Weight
Next
Call Get.User.Stats(Temp)
If Normal.User Then
For Temp=1 To 5
UserRecord.Object(Temp)=False
UserRecord.ObjCharges(Temp)=False
Next
Endif
Room=UserRecord.Room
Hidden.Player=Config2(13)
If UserRecord.Brief Then
Action.Prompt=Config3(8)
Else
Action.Prompt=Config3(7)
Endif
If UserRecord.Level<Config2(12) Then
UserRecord.Brief=False
Action.Prompt=Config3(7)
Endif
10461
Exit Sub
10462
Resume 10461
End Sub
Sub Get.User.Stats(Var)
On Local Error Goto 10472
Var=True
Town.Mayor=False
If UserRecord.Flags And Special.Char1 Then
Town.Mayor=True
Endif
Governor=False
If UserRecord.Flags And Special.Char2 Then
Governor=True
Endif
Guild.Master=False
If UserRecord.Flags And Special.Char3 Then
Guild.Master=True
Endif
Dungeon.Master.Assistant=False
If UserRecord.ClassType=9 Or UserRecord.Level>999 Then
Dungeon.Master.Assistant=True
Endif
Dungeon.Master=False
If UserRecord.ClassType=10 Or UserRecord.Level>9999 Then
Dungeon.Master=True
Endif
Normal.User=True
Sysop=False
If UserRecord.Flags And Special.Char4 Then
Dungeon.Master=True
Sysop=True
Endif
If Dungeon.Master Or Dungeon.Master.Assistant Or Sysop Then
Normal.User=False
Endif
If Disable.DM Then
If Normal.User=False Or Town.Mayor Or Governor Or Guild.Master Then
Var=False
Endif
Endif
10471
Exit Sub
10472
Resume 10471
End Sub
Sub Put.User.Record
On Local Error Goto 10482
Call Bank.Interest
Temp1=False
For Temp7=1 To 15
UserRecord.Inv(Temp7)=False
UserRecord.Charges(Temp7)=False
Next
For Temp7=1 To Number.Inventory
If Temp1=15 Then
Exit For
Endif
If Treasure(Temp7)>False Then
Temp1=Temp1+1
UserRecord.Inv(Temp1)=Treasure(Temp7)
UserRecord.Charges(Temp1)=Treasure.Charges(Temp7)
Endif
Next
If Normal.User Then
For Temp=1 To 5
UserRecord.Object(Temp)=False
UserRecord.ObjCharges(Temp)=False
Next
Endif
UserRecord.Room=Room
Put 3,User.Index,UserRecord
10481
Exit Sub
10482
Resume 10481
End Sub
Sub Health.Update
On Local Error Goto 10492
Graphics.Off=False
Room.Rate=Room.Rate+1
If Room.Rate<Room.Health.Rate Then
Exit Sub
Endif
Room.Rate=False
If Intoxicated>False Then
Intoxicated=Intoxicated-1
If Intoxicated<=False Then
Intoxicated=False
Strng="Your drunk is over.."
Else
UserRecord.Fatigue=UserRecord.Fatigue-Config2(21)
If UserRecord.Fatigue<=False Then
UserRecord.Fatigue=False
Intoxicated=False
Strng="Your drunk is over.."
Else
Strng="You feel drunk!"
Endif
Endif
Call IO.O
Endif
UserRecord.Fatigue=UserRecord.Fatigue+Config2(21)
UserRecord.Magic=UserRecord.Magic+Config2(23)
UserRecord.Psionic=UserRecord.Psionic+Config2(82)
If UserRecord.Poison=False Then
UserRecord.Vitality=UserRecord.Vitality+Config2(22)
Endif
Call New.Stats
If Invisible>False Then
Invisible=Invisible-1
If Invisible<=False Then
UserRecord.Invisible=False
Invisible=False
Strng="You are no longer invisible!"
Call IO.O
Endif
Endif
If UserRecord.Poison Then
Message1="You finally died from your poisonous wounds!"
UserRecord.Vitality=UserRecord.Vitality-Config2(24)
Strng="You feel poison running through your veins!"
Call IO.O
If UserRecord.Vitality<=False Then
UserRecord.Vitality=False
Strng="died from poisonous wounds"
Call Update.DayFile(Strng,False)
Call User.Died
Endif
Endif
10491
Exit Sub
10492
Resume 10491
End Sub
Sub Search.Room
On Local Error Goto 10502
Strng="You search the room.."
Call IO.O
Graphics.Off=True
Strng="You find "
Carriage.Return=True
Call IO.O
Temp9=False
If Node>False Then
Call Search.Mess(True)
Strng=Nul
For Temp5=1 To 36
Temp6=False
If Temp5<>(Noden+1) Then
If Node.Work.Array1(Temp5)<>Nul Then
Get 1,Temp5,MessWorkRecord1
If MessWorkRecord1.Invisible Then
If Rnd<Config1(11) Then
Temp6=True
Endif
Endif
Endif
Endif
If Temp6 Then
Carriage.Return=True
Call IO.O
Strng=Node.Work.Array1(Temp5)+", "
Temp9=Temp9+1
Endif
Next
Endif
For Temp5=1 To 10
Temp4=RoomRecord.Object(Temp5)
If Temp4>False And Temp4<=Lof(6)/Len(ObjectRecord) Then
Get 6,Temp4,ObjectRecord
Temp6=False
If ObjectRecord.Invisible Then
If Rnd<Config1(11) Then
Temp6=True
Endif
Endif
If ObjectRecord.Hidden Then
If Normal.User Then
Temp6=False
Endif
Endif
If Temp6 Then
Carriage.Return=True
Call IO.O
Strng=Rtrim$(ObjectRecord.ObjectName)+", "
Temp9=Temp9+1
Endif
Endif
Next
For Temp5=1 To 10
Temp4=RoomRecord.Treasure(Temp5)
If Temp4>False And Temp4<=Lof(8)/Len(TreasureRecord) Then
Get 8,Temp4,TreasureRecord
Temp6=False
If TreasureRecord.Invisible Then
If Rnd<Config1(11) Then
Temp6=True
Endif
Endif
If RoomRecord.Flags(Temp5)=Hidden.Object Then
If Rnd<Config1(11) Then
Temp6=True
Endif
Endif
If Temp6 Then
Carriage.Return=True
Call IO.O
Strng=Rtrim$(TreasureRecord.TreasureName)+", "
Temp9=Temp9+1
Endif
Endif
Next
If Temp9=False Then
Strng="nothing.."
Call IO.O
Exit Sub
Endif
Strng=Left$(Strng,Len(Strng)-2)+"."
If Temp9>1 Then
Strng="and "+Strng
Endif
Call IO.O
10501
Exit Sub
10502
Resume 10501
End Sub
Sub Get.Direction
On Local Error Goto 10512
For TempA=1 To 11
Out3=Direction(TempA)
Out3=Rtrim$(Out3)
Out3=Ucase$(Out3)
If User.Command=Out3 Then
Exit Sub
Endif
Next
Select Case User.Command
Case "N"
TempA=1
Case "E"
TempA=2
Case "S"
TempA=3
Case "W"
TempA=4
Case "O"
TempA=5
Case "U"
TempA=6
Case "D"
TempA=7
Case "NE"
TempA=8
Case "SE"
TempA=9
Case "SW"
TempA=10
Case "NW"
TempA=11
Case Else
TempA=False
End Select
10511
Exit Sub
10512
Resume 10511
End Sub
Sub Go.Direction
On Local Error Goto 10522
Last.Command=Ucase$(Direction(TempA))
Last.Command.Number=True
Call Update.Mess(4)
Call Verify.Room
If New.Room Then
Call Enter.Room
Endif
10521
Exit Sub
10522
Resume 10521
End Sub
Sub Actions
On Local Error Goto 10532
Graphics.Off=False
Out2=Nul
Select Case RoomRecord.Inventory
Case 1
Temp4=False
Weapon2=False
Weapon6=False
Weapon10=False
For Temp2=1 To Number.Inventory
Temp1=Treasure(Temp2)
If Temp1 Then
Get 8,Temp1,TreasureRecord
If TreasureRecord.Plus Then
If TreasureRecord.Type=False Then
If Treasure.Charges(Temp2) Then
Treasure.Charges(Temp2)=False
Temp4=True
Endif
Endif
Endif
Endif
Next
If Temp4 Then
Strng=Out3
Call IO.O
Strng="All your weapons break!"
Call IO.O
Endif
Case 2
Temp4=False
Weapon3=False
Weapon5=False
For Temp2=1 To Number.Inventory
Temp1=Treasure(Temp2)
If Temp1 Then
Get 8,Temp1,TreasureRecord
If TreasureRecord.Type<False Then
If Treasure.Charges(Temp2) Then
Treasure.Charges(Temp2)=False
Temp4=True
Endif
Endif
Endif
Next
If Temp4 Then
Strng=Out3
Call IO.O
Strng="All your shields break in half!"
Call IO.O
Endif
Case 3
Temp4=False
Weapon1=False
Weapon4=False
For Temp2=1 To Number.Inventory
Temp1=Treasure(Temp2)
If Temp1 Then
Get 8,Temp1,TreasureRecord
If TreasureRecord.Type>False Then
If Treasure.Charges(Temp2) Then
Treasure.Charges(Temp2)=False
Temp4=True
Endif
Endif
Endif
Next
If Temp4 Then
Strng=Out3
Call IO.O
Strng="All your armor crumbles!"
Call IO.O
Endif
Case 4
Temp4=False
Weapon7=False
Weapon8=False
For Temp2=1 To Number.Inventory
Temp1=Treasure(Temp2)
If Temp1 Then
Get 8,Temp1,TreasureRecord
If TreasureRecord.Spell Then
If Treasure.Charges(Temp2) Then
Treasure.Charges(Temp2)=False
Temp4=True
Endif
Endif
Endif
Next
If Temp4 Then
Strng=Out3
Call IO.O
Strng="All your magic items discharge!"
Call IO.O
Endif
End Select
If RoomRecord.Fumble Then
Call Fumble
Endif
If RoomRecord.Teleport Then
Strng=Out3
Call IO.O
Strng="You are teleported elsewhere!"
Call IO.O
Next.Room=RoomRecord.Teleport
Call Teleport
Call Enter.Room
Endif
Temp2=RoomRecord.HitPoints
If Temp2 Then
Strng=Out3
Call IO.O
Strng=Out4
Prefix2=Nul
Out3="entering a room"
Call Hit.Player(Temp2)
Endif
10531
Exit Sub
10532
Resume 10531
End Sub
Sub Teleport
On Local Error Goto 10542
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Out2=Lcase$(Out2)
Out2=Rtrim$(Out2)
Out2=Out2+" was just teleported away!"
Call Send.Mess(8,False,Room,Out2)
Teleported=True
10541
Exit Sub
10542
Resume 10541
End Sub
Sub Verify.Room
On Local Error Goto 10552
New.Room=False
If UserRecord.ClassType<8 Then
For Temp5=1 To Number.Monsters
If MonsterArray(Temp5).Block Then
If Rnd<(MonsterArray(Temp5).BlockPercent/100) Then
Out2=MonsterArray(Temp5).MonsterName
Out2=Rtrim$(Out2)
Strng="The "+Out2+" blocks your way!"
Call IO.O
Exit Sub
Endif
Endif
Next
Endif
Next.Room=RoomRecord.Direct(TempA)
If Next.Room=False Then
If Normal.User=False Then
Call Add.Room
If Temp=False Then
Exit Sub
Endif
New.Room=True
Else
Strng="You can't go in that direction!"
Call IO.O
Exit Sub
Endif
Else
Call Restrict(TempA)
If TempB Then
Strng="Your level does not permit entrance to that room!"
Call IO.O
Exit Sub
Endif
Endif
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Out2=Lcase$(Out2)
Out2=Rtrim$(Out2)
Out2=Out2+" just went "
Strng=Rtrim$(Direction(TempA))
Strng=Rtrim$(Strng)
Out2=Out2+Strng+"."
Call Send.Mess(8,False,Room,Out2)
New.Room=True
10551
Exit Sub
10552
Resume 10551
End Sub
Sub Enter.Room
On Local Error Goto 10562
New.Room=True
Call Clean.Room
If Next.Room>False And Next.Room<=Lof(5)/Len(RoomRecord) Then
Swap Room,Next.Room
Endif
Call Status.Line(False)
Redim Room.Inventory(1 To 20) As Integer,_
Room.Inventory.Charges(1 To 20) As Integer
Number.Users=False
Room.Treasure.Max=20
Rust.Rate=False
Steal.Rate=False
Monster.Rate1=False
Room.Rate=False
Get 5,Room,RoomRecord
If RoomRecord.SpellTrigger=False Then
If RoomRecord.MonsterTrigger=False Then
If RoomRecord.MonsterTalk=False Then
Out3="As you enter the room,"
Out4="You are hit for"
Call Actions
Endif
Endif
Endif
Select Case Last.Command.Number
Case 48,73,74
If Vehicle1 Then
TempA=False
For Temp2=1 To 10
If RoomRecord.Treasure(Temp2)=False Then
TempA=True
Get 5,Next.Room,RoomRecord
RoomRecord.Treasure(Vehicle1)=False
RoomRecord.TreCharges(Vehicle1)=False
Put 5,Next.Room,RoomRecord
Vehicle1=Temp2
Get 5,Room,RoomRecord
RoomRecord.Treasure(Vehicle1)=Vehicle3
RoomRecord.TreCharges(Vehicle1)=Vehicle2
Put 5,Room,RoomRecord
Exit For
Endif
Next
If TempA=False Then
Out3=TreasureRecord.ShortName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Strng="The "+Out3+" stays behind!"
Call IO.O
Endif
Endif
Case Else
If Vehicle1 Then
Out3=TreasureRecord.ShortName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Strng="You exit the "+Out3+"."
Call IO.O
Vehicle1=False
Vehicle2=False
Vehicle3=False
Endif
End Select
For Temp5=1 To Number.Monsters
If MonsterArray(Temp5).Permanent=True Then
Temp2=MonsterIndex(Temp5)
Get 7,Temp2,MonsterRecord
MonsterRecord.Level=MonsterArray(Temp5).Level
MonsterRecord.Hits=MonsterArray(Temp5).Hits
Put 7,Temp2,MonsterRecord
Endif
Next
Call In.Room(13)
If UserRecord.ClassType<=7 Then
Number.Monsters=False
Endif
If TempA Then
Number.Monsters=False
Endif
If Teleported Then
Out3=" teleports with you!"
Else
Out3=" follows you!"
Endif
Teleported=False
Temp2=False
For Temp5=1 To Number.Monsters
TempA=False
If MonsterArray(Temp5).Follow Then
If Temp Then
If Rnd<(MonsterArray(Temp5).Teleport/100) Then
TempA=True
Endif
Else
If Rnd<(MonsterArray(Temp5).FollowPercent/100) Then
TempA=True
Endif
Endif
If TempA Then
If MonsterArray(Temp5).Permanent=False Then
Temp2=Temp2+1
MonsterArray(Temp2)=MonsterArray(Temp5)
MonsterIndex(Temp2)=MonsterIndex(Temp5)
Out2=MonsterArray(Temp2).MonsterName
Out2=Rtrim$(Out2)
Strng="The "+Out2+Out3
Call IO.O
Endif
Endif
Endif
Next
Number.Monsters=Temp2
10561
Exit Sub
10562
Resume 10561
End Sub
Sub Invisibility
On Local Error Goto 10572
UserRecord.Invisible=Not UserRecord.Invisible
Strng="You are no longer invisible!"
If UserRecord.Invisible Then
Strng="You are invisible!"
Endif
Call IO.O
10571
Exit Sub
10572
Resume 10571
End Sub
Sub Brief.Mode
On Local Error Goto 10582
If UserRecord.Level<Config2(12) Then
Strng="Brief mode not allowed until level"+Str$(Config2(12))+"."
Call IO.O
Exit Sub
Endif
If UserRecord.Brief=False Then
UserRecord.Brief=True
Action.Prompt=Config3(8)
Strng="Brief mode on."
Else
UserRecord.Brief=False
Action.Prompt=Config3(7)
Strng="Brief mode off."
Endif
Call IO.O
10581
Exit Sub
10582
Resume 10581
End Sub
Sub Weapons.Shop
On Local Error Goto 10592
If Config2(50)=False Then
Call In.Room(11)
If TempA=False Then
Strng="Find the weapons shoppe."
Call IO.O
Exit Sub
Endif
Endif
Call Check.Inventory.Treasure
If Temp7=False Then
Strng="The Blacksmith says: You can't repair that!"
Call IO.O
Exit Sub
Endif
If Treasure.Charges(Temp5)>False Then
Strng="The Blacksmith says: That isn't broken!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Spell Then
Strng="The Blacksmith says: Cant fix that here!"
Call IO.O
Exit Sub
Endif
Temp!=Int(TreasureRecord.Gold*Config1(17))
If Temp!>UserRecord.Gold Then
Strng="The Blacksmith says: You don't have enough gold!"
Call IO.O
Exit Sub
Endif
Strng="The Blacksmith asks: How about"+Str$(Temp!)+" gold?"
No.Input.Out="Y"
Call IO.I
If Yes Then
UserRecord.Gold=UserRecord.Gold-Temp!
Treasure.Charges(Temp5)=TreasureRecord.Charges
Strng="The Blacksmith says: There, it's repaired."
Call IO.O
Exit Sub
Endif
Strng="The Blacksmith says: Later then!"
Call IO.O
10591
Exit Sub
10592
Resume 10591
End Sub
Sub Alchemist
On Local Error Goto 10602
If Config2(50)=False Then
Call In.Room(15)
If TempA=False Then
Strng="Find the mages guild."
Call IO.O
Exit Sub
Endif
Endif
Call Check.Inventory.Treasure
If Temp7=False Then
Strng="The Alchemist says: That can't be recharged here!"
Call IO.O
Exit Sub
Endif
Temp1=TreasureRecord.Spell
If Temp1<=False Or Temp1>Spells.Max Then
Strng="The Alchemist says: You can't recharge that here!"
Call IO.O
Exit Sub
Endif
If Treasure.Charges(Temp5)>False Then
Strng="The Alchemist says: That's not discharged!"
Call IO.O
Exit Sub
Endif
SpellRecord=SpellArray(Temp1)
If SpellRecord.SpellType=4 Then
Strng="The Alchemist says: I won't recharge that item!"
Call IO.O
Exit Sub
Endif
Temp!=Int(TreasureRecord.Gold*Config1(18))
If Temp!>UserRecord.Gold Then
Strng="The Alchemist says: You don't have enough gold!"
Call IO.O
Exit Sub
Endif
Strng="The Alchemist says: How about"+Str$(Temp!)+" gold?"
No.Input.Out="y"
Call IO.I
If Yes Then
UserRecord.Gold=UserRecord.Gold-Temp!
Treasure.Charges(Temp5)=TreasureRecord.Charges
Strng="The Alchemist chants an invocation."
Call IO.O
Exit Sub
Endif
Strng="The Alchemist says: Too bad!"
Call IO.O
10601
Exit Sub
10602
Resume 10601
End Sub
Sub Pawn.Shop
On Local Error Goto 10612
If Config2(50)=False Then
Call In.Room(16)
If TempA=False Then
Strng="Find the pawn shoppe."
Call IO.O
Exit Sub
Endif
Endif
Temp9=False
Call Check.Inventory.Treasure
If Temp7=False Then
Strng="The Broker says: You can't sell that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Recep Then
Temp!=False
If TreasureRecord.Locked>False Then
Strng="The Broker tries the lock and says: Arrghh!! Can't open it!"
Call IO.O
Exit Sub
Endif
Temp9=True
Call Open.Recep.File
For Temp5=1 To Lof(13)/Len(RecepRec)
Get 13,Temp5,RecepRec
If RecepRec.Invis=False Then
Temp2=RecepRec.Inv
If Temp2>False And Temp2<Lof(8)/Len(TreasureRecord) Then
Get 8,Temp2,TreasureRecord
If TreasureRecord.Recep=False Then
Temp!=Temp!+Int(TreasureRecord.Gold*Config1(19))
Endif
Endif
Endif
Next
If Temp!=False Then
Strng="The Broker says: There's nothin' in it!"
Call IO.O
Exit Sub
Endif
Out3="contents of the "+Out3
Else
Temp!=Int(TreasureRecord.Gold*Config1(19))
If TreasureRecord.Plus Or TreasureRecord.Spell Then
If Treasure.Charges(Temp5)=False Then
Temp!=1
Out3="broken "+Out3
Endif
Endif
Endif
Strng="The Broker says: Well, Ill give you"+Str$(Temp!)+_
" gold for the "+Rtrim$(Lcase$(Out3))+"."
Call IO.O
Strng="The Broker asks: Good nuff?"
No.Input.Out="y"
Call IO.I
If No Then
Strng="The Broker says: Oh well!"
Call IO.O
Exit Sub
Endif
UserRecord.Gold=UserRecord.Gold+Temp!
Strng="The Broker says: Great!"
Call IO.O
If Temp9 Then
For Temp5=1 To Lof(13)/Len(RecepRec)
Get 13,Temp5,RecepRec
If RecepRec.Invis=False Then
Temp2=RecepRec.Inv
If Temp2>False And Temp2<=Lof(8)/Len(TreasureRecord) Then
Get 8,Temp2,TreasureRecord
If TreasureRecord.Recep=False Then
RecepRec.Inv=False
RecepRec.Charges=False
RecepRec.Invis=False
RecepRec.TName=Nul
Put 13,Temp5,RecepRec
Endif
Endif
Endif
Next
Exit Sub
Endif
Call Discard(Temp5,True)
10611
Exit Sub
10612
Resume 10611
End Sub
Sub Weapons.Shoppe
On Local Error Goto 10622
If Config2(50)=False Then
Call In.Room(11)
If TempA=False Then
Strng="Find the weapons shoppe."
Call IO.O
Exit Sub
Endif
Endif
Temp2=Int(Val(Parsed.Command1))
Temp5=False
Temp8=False
Var$=Config3(74)+","
Do While Instr(Var$,",")
Temp5=Temp5+1
If Temp2=Temp5 Then
Temp8=Val(Left$(Var$,Instr(Var$,",")-1))
Exit Do
Endif
Var$=Mid$(Var$,Instr(Var$,",")+1)
Loop
If Temp8=False Then
Strng="The Blacksmith says: You can't buy that!"
Call IO.O
Exit Sub
Endif
If Temp8<=False Or Temp8>Lof(8)/Len(TreasureRecord) Then
Strng="The Blacksmith says: You can't buy that!"
Call IO.O
Exit Sub
Endif
Get 8,Temp8,TreasureRecord
If UserRecord.Gold-TreasureRecord.Gold<False Then
Strng="The Blacksmith says: You don't have enough gold!"
Call IO.O
Exit Sub
Endif
If Weight+TreasureRecord.Weight>UserRecord.Stats(1)*10 Then
Strng="The Blacksmith says: You can't carry any more!"
Call IO.O
Exit Sub
Endif
Temp9=TreasureRecord.Charges
Call Add.Inventory(Temp8,Temp9)
UserRecord.Gold=UserRecord.Gold-TreasureRecord.Gold
Strng="The Blacksmith says: Ok, there ya go!"
Call IO.O
10621
Exit Sub
10622
Resume 10621
End Sub
Sub Cursor(Var)
On Local Error Goto 10632
Static Cursor.Position
Select Case Var
Case False
Inregs.AX=&H0300
Inregs.BX=Video.Page
Call Interrupt(&H10,Inregs,Outregs)
Cursor.Position=Outregs.DX
Case True
Inregs.AX=&H0200
Inregs.BX=Video.Page
Inregs.DX=Cursor.Position
Call Interrupt(&H10,Inregs,Outregs)
End Select
10631
Exit Sub
10632
Resume 10631
End Sub
Sub Scrn(Var$)
On Local Error Goto 10642
Inregs.AX=&H0300
Inregs.BX=Video.Page
Call Interrupt(&H10,Inregs,Outregs)
Row=Outregs.DX\256
Column=Outregs.DX And &HFF
If Row>Max.Row Then
Gosub Scroll.Screen
Endif
If Row=Max.Row Then
If Var$=Chr$(13) Or Column=79 Then
Gosub Scroll.Screen
Endif
Endif
Call Put.Screen(Var$)
Exit Sub
Scroll.Screen:
Inregs.AX=&H0601
Inregs.BX=&H0700
Inregs.CX=&H0000
Inregs.DX=Max.Row*256+&H4F
Call Interrupt(&H10,Inregs,Outregs)
Inregs.AX=&H0200
Inregs.BX=Video.Page
Inregs.DX=Max.Row*256
Call Interrupt(&H10,Inregs,Outregs)
Return
10641
Exit Sub
10642
Resume 10641
End Sub
Sub Local.ANSI(Var1,Var2,Var3)
On Local Error Goto 10652
If Local.Avatar Then
Call Avatar(Var1,Var2,Var3)
Else
Call ANSI(Var1,Var2,Var3)
Endif
10651
Exit Sub
10652
Resume 10651
End Sub
Sub Screen.ANSI(Var1,Var2,Var3)
On Local Error Goto 10662
Call Local.ANSI(Var1,Var2,Var3)
If Local.Avatar=False Then
Call Put.Screen(TempD$)
Else
For VarX=1 To Len(TempD$)
Inregs.AX=&H0600
Inregs.DX=Asc(Mid$(TempD$,VarX,1))
Call Interrupt(&H21,Inregs,Outregs)
Next
Endif
10661
Exit Sub
10662
Resume 10661
End Sub
Sub Modem.ANSI(Var1,Var2,Var3)
On Local Error Goto 10672
If Color.Graphics Then
If Extended.ANSI Then
Call Avatar(Var1,Var2,Var3)
Else
Call ANSI(Var1,Var2,Var3)
Endif
Call Put.Modem(TempD$)
Endif
10671
Exit Sub
10672
Resume 10671
End Sub
Sub ANSI(VarX,VarY,VarZ)
On Local Error Goto 10682
TempD$=Nul
Select Case VarX
Case 1
TempD$=Chr$(27)+"[0;"+Mid$(Str$(VarY),2)+"m"
Case 2
TempD$=Chr$(27)+"["+Mid$(Str$(VarY),2)+";"+Mid$(Str$(VarZ),2)+"H"
Case 3
TempD$=Chr$(27)+"[2J"
Case 4
TempD$=Chr$(27)+"[1;"+Mid$(Str$(VarY),2)+"m"
End Select
10681
Exit Sub
10682
Resume 10681
End Sub
Sub Avatar(VarX,VarY,VarZ)
On Local Error Goto 10692
TempD$=Nul
Select Case VarX
Case 1, 4
If VarZ Then
TempD$=Chr$(22)+Chr$(1)+Chr$(VarZ)
Endif
Case 2
TempD$=Chr$(22)+Chr$(8)+Chr$(VarY)+Chr$(VarZ)
Case 3
TempD$=Chr$(27)+"[2J"
End Select
10691
Exit Sub
10692
Resume 10691
End Sub
Sub Put.Screen(Var1$)
On Local Error Goto 10694
Var1$=Var1$+"$"
InregsX.AX=&H0900
InregsX.DS=Sseg(Var1$)
InregsX.DX=Sadd(Var1$)
Call InterruptX(&H21,InregsX,OutregsX)
10693
Exit Sub
10694
Resume 10693
End Sub
Sub In.Room(Var)
On Local Error Goto 10702
TempA=False
Var1$=","+Room.Array(Var)+","
Var2$=","+Mid$(Str$(Room),2)+","
If Instr(Var1$,Var2$) Then
TempA=True
Endif
10701
Exit Sub
10702
Resume 10701
End Sub
Sub He.She
On Local Error Goto 10712
If UserArray(User.Temp).ClassType=8 Then
Prefix1="She"
Else
Prefix1="He"
Endif
10711
Exit Sub
10712
Resume 10711
End Sub
Sub Him.Her
On Local Error Goto 10722
If UserArray(User.Temp).ClassType=8 Then
Prefix1="her"
Else
Prefix1="him"
Endif
10721
Exit Sub
10722
Resume 10721
End Sub
Sub The.Or.An
On Local Error Goto 10732
If MonsterArray(Monster.Temp).Permanent<True Then
Prefix1="the "
Else
Var2$=MonsterArray(Monster.Temp).MonsterName
Var2$=Left$(Var2$,1)
If Instr("aeiou",Var2$) Then
Prefix1="an "
Else
Prefix1="a "
Endif
Endif
10731
Exit Sub
10732
Resume 10731
End Sub
Sub Numeric
On Local Error Goto 10742
Var=False
Var1=Instr(Parsed.Command1,"#")
If Var1 Then
Var=Int(Val(Mid$(Parsed.Command1,Var1+1)))
Parsed.Command1=Left$(Parsed.Command1,Var1-1)
Endif
Parse.Temp=Var
10741
Exit Sub
10742
Resume 10741
End Sub
Sub Num
On Local Error Goto 10752
Var=Parse.Temp
If Var>False Then
Var=Var-TempC
If Var<False Then
Var=False
Endif
Endif
Parse.Temp=Var
10751
Exit Sub
10752
Resume 10751
End Sub
Sub Parse
On Local Error Goto 10762
Var=Instr(Parsed.Command2," ")
Parser=False
If Var Then
Parsed.Command1=Left$(Parsed.Command2,Var-1)
Parsed.Command2=Mid$(Parsed.Command2,Var+1)
Parser=Var
Endif
10761
Exit Sub
10762
Resume 10761
End Sub
Sub ParseX
On Local Error Goto 10772
Var=Instr(Parsed.Command2," ")
Parser=False
If Var Then
Parsed.Command1=Mid$(Parsed.Command2,Var+1)
Parsed.Command2=Left$(Parsed.Command2,Var-1)
Parser=Var
Endif
10771
Exit Sub
10772
Resume 10771
End Sub