home *** CD-ROM | disk | FTP | other *** search
- 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
-