home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Beijing Paradise BBS Backup
/
PARADISE.ISO
/
software
/
BBSDOORW
/
DND29C4.ZIP
/
SOURCE.ZIP
/
DNDBBS.BAS
< prev
next >
Wrap
BASIC Source File
|
1993-01-07
|
91KB
|
3,924 lines
Rem dndbbs.bas v2.9c
Rem $Include: 'dndbbs.inc'
Randomize Timer
On Error Goto 10002
If Chained=False Then
Call Get.Command
Call Read.Config
Call Init.Driver
Else
Chained=False
Local.Mode=Remote
Call Get.Config
Call Open.Files
Call Read.Data
If Shelled Then
Get 3,User.Index,UserRecord
Call Status.Line(1)
Endif
Endif
Do
If Shelled=False Then
If Relogging=False Then
Call Clear.Screen
Call Open.Modem
Endif
Relogging=False
Call Login
If Logged.In Then
Call Get.User.Record
Call Status.Line(1)
Endif
Endif
Shelled=False
Rust.Rate=False
Steal.Rate=False
Monster.Rate1=False
Room.Rate=False
Do While Security.Guard
Call Check.Next.Room
Monster.Rate1=False
Call Encounter.Permanent
If Config2(55) Then
Call Encounter.User
Endif
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Out2=Out2+" just entered the room."
Call Send.Mess(8,False,Room,Out2)
Call Display.Room
New.Room=False
Do While Not New.Room And Security.Guard
Call Main.Loop.Update
If Wait.Mode Then
Call Wait.Loop
Endif
If Auto.Mode Then
Call Auto.Loop
Endif
If Follow.Mode Then
Call Follow.Player
Endif
If New.Room=False Then
Call Command.Loop
Endif
Loop
Loop
If Logged.In Then
Call Status.Line(-2)
If OutZ<>Nul Then
If Node>False Then
OutZ=OutZ+" (Node "+Chr$(Node)+")"
Endif
Call Send.Mess(4,False,False,OutZ)
Call Update.DayFile(OutZ,True)
Endif
Call Update.Mess(True)
Call Put.User.Record
Call Clean.Room
Call Update.LastUser
Endif
If Node<False Then
Exit Do
Endif
Strng=Nul
Call IO.O
If Config2(75) Then
Call Time.Online
Call IO.O
Call More.Prompt
Endif
If Config2(76) Then
Call Top.Ten
Call IO.O
Endif
If Config2(77) Then
Call Out.File(Logoff.FileName)
Strng=Nul
Call IO.O
Endif
If Config2(78) Then
Strng="Press "+Enter$+" to exit the adventure:"
No.Echo=True
Line.Length=1
Call IO.I
No.Echo=False
Call IO.O
Endif
If Relogging=False Then
If Config2(47) Then
Strng2="the BBS"
If Len(BBS.Name) Then
Strng2=BBS.Name
Endif
Strng="Returning you to "+Strng2+", please wait.."
Call IO.O
Exit Do
Endif
If Bypass.Screen Or Bypass.Login Then
Exit Do
Endif
Endif
Loop
10001
Call Clear.Screen
End
10002
Resume 10001
Sub Main.Loop.Update
On Local Error Goto 10012
Call Sorter
Call Health.Update
Call Rust.Weapon
Call Steal.Treasure
Call New.Stats
If Number.Monsters Then
Call Monster.Attack
Endif
If Config2(55) Then
If Number.Users Then
Call User.Attack
Endif
Endif
Call Encounter.Monster
Call Set.Clock
Call Read.Mess
If Len(Func.Buffer) Then
TempX=Asc(Func.Buffer)
Func.Buffer=Nul
Call Function.Key(TempX)
Endif
If Room.Rate=False Then
Call Status.Line(False)
Endif
10011
Exit Sub
10012
Resume 10011
End Sub
Sub Wait.Loop
On Local Error Goto 10022
Allow.Break=True
Auto.Break=False
Do While Not New.Room And Security.Guard
Call Pause.Second
If Auto.Break Then
Exit Do
Endif
Hidden.Player=True
If Room.Rate=False Then
For Count=1 To Int(Rnd*3+1)
If Number.Monsters=False Then
Exit For
Endif
If Rnd>.5 Then
Monster.Temp=1
Out3=MonsterArray(1).MonsterName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Strng="The "+Out3+" leaves the room."
Call IO.O
Call Remove.Monster
Endif
Next
Endif
Call Main.Loop.Update
Loop
Allow.Break=False
Wait.Mode=False
Auto.Mode=False
10021
Exit Sub
10022
Resume 10021
End Sub
Sub Auto.Loop
On Local Error Goto 10032
Allow.Break=True
Auto.Break=False
Do While Not New.Room And Security.Guard
Call Pause.Second
If Auto.Break Then
Exit Do
Endif
If UserRecord.Level<=False Then
Call Train.Stats
Endif
If UserRecord.Experience<=False Then
UserRecord.Experience=False
Call Gold(Temp#)
If UserRecord.Gold>=Temp# Then
Call Train.Stats
Endif
Endif
If UserRecord.Magic<UserRecord.MagicMax/4 Then
Strng="You cast an enchant spell!"
Call IO.O
UserRecord.Magic=Cint(UserRecord.Magic+Config2(23)*UserRecord.Level)
Call New.Stats
Strng=Str$(UserRecord.Magic)
Strng="You now have"+Strng+" magic points!"
Endif
If UserRecord.Fatigue<UserRecord.FatigueMax/4 Then
Strng="You cast a vigor spell!"
Call IO.O
UserRecord.Fatigue=Cint(UserRecord.Fatigue+Config2(21)*UserRecord.Level)
Call New.Stats
Strng=Str$(UserRecord.Fatigue)
Strng="You now have"+Strng+" fatigue points!"
Endif
If UserRecord.Vitality<UserRecord.VitalityMax/4 Then
Strng="You cast a heal spell!"
Call IO.O
UserRecord.Vitality=Cint(UserRecord.Vitality+_
Config2(22)*UserRecord.Level)
Call New.Stats
Strng=Str$(UserRecord.Vitality)
Strng="You now have"+Strng+" vitality points!"
Call IO.O
Endif
Temp6=False
For Temp5=1 To Room.Treasure.Max
If Room.Inventory(Temp5) Then
Get 8,Room.Inventory(Temp5),TreasureRecord
If TreasureRecord.Coin Then
UserRecord.Gold=UserRecord.Gold+TreasureRecord.Gold
Strng="You pick up"+Str$(TreasureRecord.Gold)+" Gold!"
Call IO.O
Temp6=True
Exit For
Endif
Endif
Next
If Temp6 Then
Call Discard.Inventory(Temp5)
Endif
Temp6=False
For Temp5=1 To Room.Treasure.Max
If Room.Inventory(Temp5) Then
Get 8,Room.Inventory(Temp5),TreasureRecord
Out3=TreasureRecord.TreasureName
Out3=Rtrim$(Out3)
If TreasureRecord.Type<False Then
If Abs(TreasureRecord.Plus)>Weapon3 Then
Weapon3=Abs(TreasureRecord.Plus)
Weapon5=Number.Inventory+1
Temp6=True
Exit For
Endif
Endif
If TreasureRecord.Type=False Then
If Abs(TreasureRecord.Plus)>Weapon2 Then
Weapon2=Abs(TreasureRecord.Plus)
Weapon6=Number.Inventory+1
Weapon10=TreasureRecord.Proficiency
Temp6=True
Exit For
Endif
Endif
If TreasureRecord.Type>False Then
If TreasureRecord.RingType Then
If Weapon7=False Then
Weapon7=Number.Inventory+1
Weapon8=TreasureRecord.RingType
Weapon9=TreasureRecord.RingSpell
Temp6=True
Exit For
Endif
Else
If Abs(TreasureRecord.Plus)>Weapon1 Then
Weapon1=Abs(TreasureRecord.Plus)
Weapon4=Number.Inventory+1
Temp6=True
Exit For
Endif
Endif
Endif
Endif
Next
If Temp6 Then
Temp8=Room.Inventory(Temp5)
Temp9=Room.Inventory.Charges(Temp5)
Call Add.Inventory(Temp8,Temp9)
Call Discard.Inventory(Temp5)
Strng="You pick up "+Out3+"."
Call IO.O
Strng="You use "+Out3+"."
Call IO.O
Endif
For Count=1 To Int(Rnd*3+2)
If Number.Monsters=False Then
Exit For
Endif
Monster.Temp=1
TempA=False
TempB=False
Out3=MonsterArray(1).MonsterName
Out3=Rtrim$(Out3)
Out3=Ucase$(Out3)
TempA=Instr(TempA+1,Out3," ")
While TempA
TempB=TempA
TempA=Instr(TempA+1,Out3," ")
Wend
Last.Monster=Mid$(Out3,TempB+1)
Parsed.Command1=Last.Monster
Last.Command.Type=False
Last.Command.Number=55
Call Attack.Monster
Next
Call Main.Loop.Update
Loop
Allow.Break=False
Wait.Mode=False
Auto.Mode=False
10031
Exit Sub
10032
Resume 10031
End Sub
Sub Command.Loop
On Local Error Goto 10042
Graphics.Off=False
Strng=Action.Prompt
Call IO.I
Out2=Ltrim$(Out2)
If Out2="?" Then
Graphics.Off=True
Strng="Type Hint, or Help for short help on commands, or"
Call IO.O
Strng="else type Catalog, or Commands for additional help on commands."
Call IO.O
Graphics.Off=False
Exit Sub
Endif
If Left$(Out2,Len(Config3(9)))=Config3(9) Then
Sysop.Command=True
Endif
If Sysop.Command Then
If Normal.User Then
Sysop.Command=False
Strng="That command is reserved for DMs only!"
Call IO.O
Last.Command="<illegal>"
Call Update.Mess(4)
Exit Sub
Endif
If Len(Out2)<=Len(Config3(9)) Then
Sysop.Command=False
Strng="That DM command is reserved for Sysops only!"
Call IO.O
Last.Command="<illegal>"
Call Update.Mess(4)
Exit Sub
Endif
If Disable.DM Then
Sysop.Command=False
Strng="All DM commands currently disabled."
Call IO.O
Last.Command="<illegal>"
Call Update.Mess(4)
Exit Sub
Endif
Endif
Stored.Parsed.Command1=Out2
Out2=Ucase$(Out2)
Stored.Parsed.Command2=Out2
For Var=1 To 70
Var$=" "+Rtrim$(Strip.Data(Var))+" "
Var2=Instr(Out2,Var$)
Do While Var2
Out2=Left$(Out2,Var2-1)+Mid$(Out2,Var2+Len(Var$)-1)
Var2=Instr(Out2,Var$)
Loop
Next
If Left$(Out2,Len(Config3(10)))=Config3(10) Then
User.Command=Previous.Command1
Stored.Parsed.Command1=Previous.Command2
Stored.Parsed.Command2=Previous.Command3
Else
User.Command=Out2
Previous.Command1=User.Command
Previous.Command2=Stored.Parsed.Command1
Previous.Command3=Stored.Parsed.Command2
Endif
If User.Command=Nul Then
Last.Command=Enter$
Call Update.Mess(4)
Exit Sub
Endif
Magic.Spell=False
Temp.Command=User.Command
If Instr(Temp.Command," ") Then
Temp.Command=Left$(Temp.Command,Instr(Temp.Command," ")-1)
Endif
Parser=Instr(User.Command," ")
If Parser=False Then
If Sysop.Command Then
Call DM.Command1
Else
Call User.Command1
Endif
Else
Parsed.Command1=Mid$(User.Command,Parser+1)
Parsed.Command2=Parsed.Command1
Stored.Parsed.Command1=Mid$(Stored.Parsed.Command1,_
Instr(Stored.Parsed.Command1," ")+1)
Stored.Parsed.Command2=Mid$(Stored.Parsed.Command2,_
Instr(Stored.Parsed.Command2," ")+1)
Call Numeric
If Sysop.Command Then
Call DM.Command2
Else
Call User.Command2
Endif
Endif
10041
Exit Sub
10042
Resume 10041
End Sub
Sub DM.Command1
On Local Error Goto 10052
TempQ=False
Temp.Command=Mid$(Temp.Command,Len(Config3(9))+1)
For Last.Command.Number=1 To 9
Strng=Sysop.Commands1(Last.Command.Number)
Strng=Rtrim$(Strng)
If Instr(Strng,Temp.Command)=1 Then
TempQ=Last.Command.Number
OutX$=Strng
Exit For
Endif
Next
If TempQ=False Then
Strng="Unknown command!"
Call IO.O
Last.Command="<unknown>"
Call Update.Mess(4)
Exit Sub
Endif
Last.Command=OutX$
Call Update.Mess(4)
Last.Command.Type=True
Last.Command.Number=TempQ
Select Case TempQ
Case 1
Call Abort
Case 2
Call DM.Send
Case 3
Call Call.Monster
Case 4
Call Shell.Program("edit.exe",Local.Mode,True)
Case 5
Stored.Parsed.Command1=Config3(47)
Call Read.Help(True)
Case 6
Call Invisibility
Case 7
Call Link.Room
Case 8
Call DM.Noid
Case 9
Call Display.Memory
End Select
10051
Exit Sub
10052
Resume 10051
End Sub
Sub User.Command1
On Local Error Goto 10062
If User.Command="OU" Then
User.Command="O"
Endif
If User.Command="OUT" Then
User.Command="O"
Endif
Call Get.Direction
If TempA Then
Call Go.Direction
Exit Sub
Endif
TempQ=False
For Last.Command.Number=1 To 83
Last.Command=Rtrim$(Command.Set1(Last.Command.Number,2))
If Len(Temp.Command)=2 Then
Strng=Rtrim$(Command.Set1(Last.Command.Number,1))
If Temp.Command=Left$(Strng,Len(Temp.Command)) Then
TempQ=Last.Command.Number
Exit For
Endif
Endif
TempX=1
Do
TempX=TempX+1
Strng=Rtrim$(Command.Set1(Last.Command.Number,TempX))
If Strng="<>" Or Strng="<eol>" Then
Exit Do
Endif
If Len(Temp.Command)=1 Then
If TempX=2 Then
If Left$(Strng,1)=Temp.Command Then
TempQ=Last.Command.Number
Exit Do
Endif
Endif
Else
If Temp.Command=Left$(Strng,Len(Temp.Command)) Then
TempQ=Last.Command.Number
Exit For
Endif
Endif
Loop Until TempX=5
Next
If TempQ=False Then
Graphics.Off=True
Strng="Unknown command!"
Call IO.O
If UserRecord.Brief=False Then
Strng="Type ? for Help.."
Call IO.O
Endif
Graphics.Off=False
Last.Command="<unknown>"
Call Update.Mess(4)
Exit Sub
Endif
Call Update.Mess(4)
Last.Command.Type=True
Last.Command.Number=TempQ
Select Case TempQ
Case 1, 2, 3, 4
Parsed.Command1=Last.Monster
Last.Command.Type=False
Last.Command.Number=55
Call Attack.Monster
Case 5, 6
Call Display.Room
Case 7, 8
Call Panic
Case 9
Call Search.Room
Case 10,51
Call Put.User.Record
Strng="Player file updated."
Call IO.O
Case 11
Call Display.Stats
Case 12
Call Display.Inventory
Case 13
Call Suicide
Case 14
Call Train
Case 15
Call Display.Health
Case 16
Call Appeal
Case 17, 18, 19, 20
Call Quit
Case 21
Call Display.Experience
Case 22
Stored.Parsed.Command1=Config3(48)
Call Read.Help(False)
Case 23
Call Hide.User
Case 24
Call Cast.Spell(True)
Case 25
Call Weapon.List
Case 26
Call Brief.Mode
Case 27
Call Goto.Bank
Call Status.Line(1)
Case 28, 29, 30
Call Time.Online
Case 31
Wait.Mode=True
Strng="Wait mode. Press Control-K to interrupt."
Call IO.O
Case 32
Auto.Mode=True
Strng="Auto mode. Press Control-K to interrupt."
Call IO.O
Case 33
Call Get.ANSI
Case 34
Call Get.Graphics
Case 35
Call Lose.Player
Case 36
If Normal.User Then
If UserRecord.ClassType<>6 Then
Strng="Only rangers can use this command!"
Call IO.O
Exit Sub
Endif
Endif
Follow.Mode=True
Case 37
If Normal.User Then
If UserRecord.ClassType<>5 Then
Strng="Only paladins can use this command!"
Call IO.O
Exit Sub
Endif
Endif
Follow.Mode=True
Case 38
If Normal.User Then
If UserRecord.ClassType<>5 Then
Strng="Only paladins can use this command!"
Call IO.O
Exit Sub
Endif
Endif
Follow.Mode=True
Case 39
Parsed.Command1=Last.Monster
Last.Command.Type=False
Last.Command.Number=39
Call Attack.Monster
Case 40
Parsed.Command1=Last.Monster
Last.Command.Type=False
Last.Command.Number=40
Call Attack.Monster
Case 41
Call Put.User.Record
Call Top.Ten
Case 42
Call Bless.Self
Case 43
Call Curse.Self
Case 44
Call Change.PassWord
Call Put.User.Record
Case 45
Call Mail
Call Open.Files
Call Status.Line(1)
Case 46
Call Put.User.Record
Call User.List
Case 47
Call Page.Sysop
Case 48, 49
Call Exit.Room
Case 50
Call Climb
Case 52, 53
Call Relogin
Case 54
Call Read.DayFile(True)
Case 55
Call Last.User
Case 56
Call Out.File(Catalog.FileName)
Case 57, 58, 59, 60
Call Attack.Monster
Case 61
Call Align
Case 62
Call Read.Status
Case 63
Call Toggle.Echo
Case 64 To 74
TempA=TempQ-63
Call Go.Direction
Case 75
Call Whos.On
Case 76
Call Out.File(Hint.FileName)
Case 77
Call Sort.Inventory
Case 78
Call Out.File(Summary.FileName)
Case 79
Call Read.DayFile(False)
Case 80, 81
Call Accept.Offer
Case 83
Call Reroll.Character
End Select
10061
Exit Sub
10062
Resume 10061
End Sub
Sub DM.Command2
On Local Error Goto 10072
TempQ=False
Temp.Command=Mid$(Temp.Command,Len(Config3(9))+1)
For Last.Command.Number=1 To 9
Strng=Sysop.Commands2(Last.Command.Number)
Strng=Rtrim$(Strng)
If Instr(Strng,Temp.Command)=1 Then
TempQ=Last.Command.Number
OutX$=Strng
Exit For
Endif
Next
If TempQ=False Then
Strng="Unknown command!"
Call IO.O
Last.Command="<unknown>"
Call Update.Mess(4)
Exit Sub
Endif
Last.Command=OutX$
Call Update.Mess(4)
Last.Command.Type=True
Last.Command.Number=TempQ
Select Case TempQ
Case 1
Call Abort.Node
Case 2
Call Summon.Monster
Case 3
Call Discard.Object
Case 4
VarX=Val(Parsed.Command1)
If VarX>False And VarX<=Lof(5)/Len(RoomRecord) Then
Call Edit.Room(VarX)
Call Add.Monclass(VarX)
Endif
Case 5
Call Drop.Object
Case 6
Call DM.Help
Case 7
Call Kill.Monster
Case 8
Call Reduce.Monsters
Case 9
Call Teleport.User
End Select
10071
Exit Sub
10072
Resume 10071
End Sub
Sub User.Command2
On Local Error Goto 10082
TempQ=False
For Last.Command.Number=1 To 83
Last.Command=Rtrim$(Command.Set2(Last.Command.Number,2))
If Len(Temp.Command)<=2 Then
Strng=Rtrim$(Command.Set2(Last.Command.Number,1))
If Temp.Command=Left$(Strng,Len(Temp.Command)) Then
TempQ=Last.Command.Number
Exit For
Endif
Endif
TempX=1
Do
TempX=TempX+1
Strng=Rtrim$(Command.Set2(Last.Command.Number,TempX))
If Strng="<>" Or Strng="<eol>" Then
Exit Do
Endif
If Len(Temp.Command)=1 Then
If TempX=2 Then
If Left$(Strng,1)=Temp.Command Then
TempQ=Last.Command.Number
Exit For
Endif
Endif
Else
If Temp.Command=Left$(Strng,Len(Temp.Command)) Then
TempQ=Last.Command.Number
Exit For
Endif
Endif
Loop Until TempX=5
Next
If TempQ=False Then
Graphics.Off=True
Strng="Unknown command!"
Call IO.O
If UserRecord.Brief=False Then
Strng="Type ? for Help.."
Call IO.O
Endif
Graphics.Off=False
Last.Command="<unknown>"
Call Update.Mess(4)
Exit Sub
Endif
Call Update.Mess(4)
Last.Command.Type=False
Last.Command.Number=TempQ
Select Case TempQ
Case 1, 2
Call Enter.Object
Case 3, 4, 5
Call Display.Information
Case 6
Call Cast.Spell(False)
Case 7, 8
If Instr(Parsed.Command2," ") Then
Call Take.From.Receptacle
Else
Call Take.Object
Endif
Case 9, 10
If Instr(Parsed.Command2," ") Then
Call Drop.Into.Receptacle
Else
Call Drop.Item
Endif
Case 11, 12
Call Pawn.Shop
Case 13, 14
Call Smash.Object
Case 15
Call Close.Object
Case 16
Call Open.Object
Case 17, 18, 19
Call Hold.Object
Case 20
Call Wear.Object
Case 21
Call Return.Object
Case 22
Call Cast.Spell(True)
Case 23
Call Weapons.Shoppe
Case 24
Call Lock.Object
Case 25, 26
Call Unlock.Object
Case 27
Call Fix.Object
Case 28
Call Weapons.Shop
Case 29
Call Alchemist
Case 30
Call Drink.Potion
Case 31
If Normal.User Then
If UserRecord.ClassType<>6 Then
Strng="Only rangers can use this command!"
Call IO.O
Exit Sub
Endif
Endif
Follow.Mode=True
Case 32
Call Throw.Object
Case 33
Call Steal.Object
Case 34
Call Give.Object
Case 35
Call Bless.Object
Case 36
Call Curse.Object
Case 38
Call Send.Message
Case 39
Call Send.Mess(2,False,True,Stored.Parsed.Command1)
Case 40, 41
Call Talk.To.Monster
Case 42, 43
Call Offer
Case 44
Call Load.Object
Case 45
Call Fire.Object
Case 46
Call Enter.Vehicle
Case 48, 73, 74
Call Ride.Vehicle
Case 49
If Instr(Parsed.Command2," ") Then
Call Drop.Into.Receptacle
Else
Call Drop.Item
Endif
Case 50
Call Search.Object
Case 51
Call Read.Help(False)
Case 52
Call Identify
Case 53
Call Whisper
Case 54
Call Send.Mess(3,False,Room,Stored.Parsed.Command1)
Case 55 To 70, 82, 83
Call Attack.Monster
Case 71
Call Psi.Mode
Case 72
Call Eat.Object
Case 75, 78, 79
Call Move.Object
Case 76
Call Launch.Object
Case 77
Call Learn.Spell
Case 47, 80, 81
Call Exit.Vehicle
End Select
10081
Exit Sub
10082
Resume 10081
End Sub
Sub Relogin
On Local Error Goto 10092
If UserRecord.Level<Config2(67) Or Config2(67)=False Then
Strng="You can't relogin in now!"
Call IO.O
Exit Sub
Endif
Call Update.Mess(2)
OutZ="relogged in"
10091
Relogging=True
Security.Guard=False
Exit Sub
10092
Resume 10091
End Sub
Sub Suicide
On Local Error Goto 10102
Strng="Are you sure you want to commit suicide(y/n)?"
No.Input.Out="N"
Call IO.I
If Yes Then
Graphics.Off=True
Strng="Your character falls into deep sleep.."
Call IO.O
Strng="The Ghods take your player to another world.."
Call IO.O
Graphics.Off=False
OutZ="committed suicide"
If Node>False Then
OutZ=OutZ+" (Node "+Chr$(Node)+")"
Endif
Call Send.Mess(4,False,False,OutZ)
Call Update.DayFile(OutZ,True)
OutZ=Nul
For Temp5=1 To 15
UserRecord.Inv(Temp5)=False
UserRecord.Charges(Temp5)=False
Next
For Temp5=1 To 5
UserRecord.Object(Temp5)=False
UserRecord.ObjCharges(Temp5)=False
Next
UserRecord.MaxCalls=False
UserRecord.FromHour=False
UserRecord.FromMin=False
UserRecord.ToHour=False
UserRecord.ToMin=False
UserRecord.ClassType=False
Strng=Deleted$
Call Valid(Strng,30)
Call Encrypt(Strng,True)
UserRecord.CodeName=Strng
Strng=Deleted$
Call Valid(Strng,20)
Call Encrypt(Strng,False)
UserRecord.PassWord=Strng
Strng=Deleted$
Call Valid(Strng,20)
Call Encrypt(Strng,True)
UserRecord.ClassName=Strng
UserRecord.Flags=False
Call Update.Mess(3)
Security.Guard=False
Endif
10101
Exit Sub
10102
Resume 10101
End Sub
Sub Quit
On Local Error Goto 10112
Graphics.Off=True
If Config2(74) Then
Strng="Are you sure(y/n)?"
No.Input.Out="N"
Call IO.I
Endif
If Yes Or Config2(74)=False Then
Call Update.Mess(3)
OutZ="logged off"
Security.Guard=False
Endif
10111
Exit Sub
10112
Resume 10111
End Sub
Sub Abort
On Local Error Goto 10122
If Node>False Then
Strng="Abort all nodes(y/n)?"
Else
Strng="Are you sure(y/n)?"
Endif
No.Input.Out="N"
Call IO.I
If Yes Then
Call Send.Mess(12,False,False,"Abort")
Strng="Program task abort!"
Call IO.O
Call Update.Mess(True)
OutZ="aborted program"
Node=True
Call Drop.DTR
Lost.Carrier=True
Security.Guard=False
Endif
10121
Exit Sub
10122
Resume 10121
End Sub
Sub Abort.Node
On Local Error Goto 10124
TempC=Val(Parsed.Command1)
If TempC=False Then
Call Search.Mess(False)
TempC=TempC-1
If Temp=False Then
TempC=False
Endif
Endif
If TempC>=1 And TempC<=36 Then
Strng="Abort node"+Str$(TempC)+", are you sure(y/n)?"
No.Input.Out="N"
Call IO.I
If Yes Then
Call Send.Mess(14,TempC,False,"Abort")
Endif
Endif
10123
Exit Sub
10124
Resume 10123
End Sub
Sub Traps
On Local Error Goto 10132
New.Room=False
Temp2=ObjectRecord.Trap
If Temp>=1 And Temp2<=3 Then
If Rnd<.5 Then
Strng="It's trapped! "
Select Case ObjectRecord.Trap
Case 1
Strng=Strng+"Poison needles!"
Call IO.O
UserRecord.Poison=True
Case 2
Strng=Strng+"Falling door!"
Call IO.O
Pass.Door=False
Number.Monsters=False
Next.Room=ObjectRecord.Teleport
Call Teleport
Call Enter.Room
Case 3
Strng=Strng+"Deadly spears!"
Call IO.O
Prefix2=Nul
Strng="You are hit for"
Out3="some deadly spears"
Temp2=ObjectRecord.Teleport
If Temp2 Then
Call Hit.Player(Temp2)
Endif
End Select
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Out2=Out2+" was just hit by a trap."
Call Send.Mess(8,False,Room,Out2)
Endif
Endif
10131
Exit Sub
10132
Resume 10131
End Sub
Sub Enter.Object
On Local Error Goto 10142
User.Command=Parsed.Command1
Call Get.Direction
If TempA Then
Call Verify.Room
If New.Room Then
Call Enter.Room
Endif
Exit Sub
Endif
Call Check.Room.Objects
If Temp7=False Then
Call Check.Room.Treasure
If Temp7 Then
If TreasureRecord.Vehicle Then
Call Enter.Vehicle
Exit Sub
Endif
Endif
Strng="You can't go there!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.RoomLink=False Then
Strng="You can't go there!"
Call IO.O
Exit Sub
Endif
Call Restrict(12)
If TempB Then
Strng="Your level does not permit entrance to that room!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.JailTrap Then
Strng="Trapped portal!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.Closed Then
If Pass.Door=False Then
Strng="You can't, it's closed!"
Call IO.O
Exit Sub
Endif
Endif
If ObjectRecord.Relocks Then
ObjectRecord.DoorLock=2
ObjectRecord.Closed=True
Put 6,Temp7,ObjectRecord
Endif
Strng=ObjectRecord.ShortDesc
If Strng<>String$(40,0) Then
Strng=Rtrim$(Strng)
If Strng<>Nul Then
Call IO.O
Endif
Endif
If ObjectRecord.Trap Then
Call Traps
If New.Room Then
Exit Sub
Endif
Endif
Pass.Door=False
Number.Monsters=False
Next.Room=ObjectRecord.RoomLink
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Out2=Out2+" just went to the "
Strng=ObjectRecord.ShortName
Strng=Rtrim$(Strng)
Strng=Lcase$(Strng)
Out2=Out2+Strng+"."
Call Send.Mess(8,False,Room,Out2)
Call Enter.Room
10141
Exit Sub
10142
Resume 10141
End Sub
Sub Drop.Item
On Local Error Goto 10152
If Normal.User=False Then
Call Find.Object
If Temp7 Then
Strng="You drop "+Out3+"!"
Call IO.O
Call Discard(Temp5,True)
For Temp3=1 To 10
If RoomRecord.Object(Temp3)=False Then
RoomRecord.Object(Temp3)=Temp7
RoomRecord.ObjCharges(Temp3)=Temp6
Put 5,Room,RoomRecord
Exit Sub
Endif
Next
Strng="It rolled away!"
Call IO.O
Exit Sub
Endif
Endif
Call Find.Inventory
If Temp7=False Then
Strng="You can't drop that!"
Call IO.O
Exit Sub
Endif
If Last.Command.Number=Hide.Command Then
Strng="You hide "+Out3+"!"
Else
Strng="You drop "+Out3+"!"
Endif
Call IO.O
Call Discard(Temp5,True)
If Last.Command.Number=Hide.Command Then
For Temp3=1 To 10
If RoomRecord.Treasure(Temp3)=False Then
RoomRecord.Treasure(Temp3)=Temp7
RoomRecord.TreCharges(Temp3)=Temp6
RoomRecord.Flags(Temp3)=Hidden.Object
Put 5,Room,RoomRecord
Exit Sub
Endif
Next
Strng="It rolled away!"
Call IO.O
Exit Sub
Endif
For Temp3=1 To Room.Treasure.Max
If Room.Inventory(Temp3)=False Then
Room.Inventory(Temp3)=Temp7
Room.Inventory.Charges(Temp3)=Temp6
Exit Sub
Endif
Next
Call Expand.Room
Room.Inventory(Temp3)=Temp7
Room.Inventory.Charges(Temp3)=Temp6
10151
Exit Sub
10152
Resume 10151
End Sub
Sub Drop.Into.Receptacle
On Local Error Goto 10162
Call ParseX
Call Numeric
Call Examine.Treasure
If Temp7=False Then
Strng="You can't drop that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Recep=False Then
Strng="You can't drop that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Locked>False Then
Strng="You can't, it's locked!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Closed>False Then
Strng="You can't, it's closed!"
Call IO.O
Exit Sub
Endif
Call Open.Recep.File
TempC=False
For Temp3=1 To Lof(13)/Len(RecepRec)
Get 13,Temp3,RecepRec
If RecepRec.Inv=False Then
TempC=True
Exit For
Endif
Next
If TempC=False Then
If Temp3>TreasureRecord.RecepMax Then
Strng="You can't, it's full!"
Call IO.O
Exit Sub
Endif
Endif
Out4=Rtrim$(TreasureRecord.TreasureName)
Parsed.Command1=Parsed.Command2
Call Numeric
Call Check.Inventory.Treasure
If Temp7=False Then
Strng="You can't drop that!"
Call IO.O
Exit Sub
Endif
If Last.Command.Number=Hide.Command Then
RecepRec.Invis=True
Else
RecepRec.Invis=False
Endif
RecepRec.Inv=Temp7
RecepRec.Charges=Temp6
RecepRec.TName=TreasureRecord.ShortName
Put 13,Temp3,RecepRec
Out3=Rtrim$(TreasureRecord.TreasureName)
If Last.Command.Number=Hide.Command Then
Out2=" hide "
Else
Out2=" drop "
Endif
Strng="You"+Out2+Out3+" in "+Out4+"!"
Call IO.O
Call Discard(Temp5,True)
10161
Exit Sub
10162
Resume 10161
End Sub
Sub Take.Object
On Local Error Goto 10172
If Normal.User=False Then
Call Check.Room.Objects
If Temp7 Then
For Temp2=1 To 5
Temp3=UserRecord.Object(Temp2)
If Temp3=False Then
Strng="You take "+Out3+"!"
Call IO.O
UserRecord.Object(Temp2)=Temp7
UserRecord.ObjCharges(Temp2)=Temp6
RoomRecord.Object(Temp5)=False
RoomRecord.ObjCharges(Temp5)=False
Put 5,Room,RoomRecord
Exit Sub
Endif
Next
Strng="You can't carry anymore!"
Call IO.O
Exit Sub
Endif
Endif
Temp4=True
Call Check.Room.Inventory
If Temp7=False Then
Call Num
Temp4=False
Call Check.Room.Treasure
If Temp7=False Then
Strng="You can't get that!"
Call IO.O
Exit Sub
Endif
Endif
If Weight+TreasureRecord.Weight>UserRecord.Stats(1)*10 Then
Strng="You can't carry any more!"
Call IO.O
Exit Sub
Endif
If UserRecord.ClassType<=7 Then
For Temp1=1 To Number.Monsters
If MonsterArray(Temp1).Prevent Then
If Rnd<(MonsterArray(Temp1).PreventPercent/100) Then
Out2=MonsterArray(Temp1).MonsterName
Out2=Rtrim$(Out2)
Strng="The "+Out2+" prevents you from getting it!"
Call IO.O
Exit Sub
Endif
Endif
Next
Endif
Strng="You take "+Out3+"."
Call IO.O
If TreasureRecord.Coin Then
UserRecord.Gold=UserRecord.Gold+TreasureRecord.Gold
Strng="You now have"+Str$(UserRecord.Gold)+" Gold!"
Call IO.O
Strng="found"+Str$(TreasureRecord.Gold)+" gold"
Call Update.DayFile(Strng,False)
Else
Call Add.Inventory(Temp7,Temp6)
Endif
If Temp4 Then
Call Discard.Inventory(Temp5)
Exit Sub
Endif
If Temp4=False Then
Call Discard.Treasure(Temp5)
Endif
10171
Exit Sub
10172
Resume 10171
End Sub
Sub Take.From.Receptacle
On Local Error Goto 10182
Call ParseX
Call Numeric
Call Examine.Treasure
If Temp7=False Then
Strng="You can't get that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Recep=False Then
Strng="You can't get that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Locked>False Then
Strng="You can't, it's locked!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Closed>False Then
Strng="You can't, it's closed!"
Call IO.O
Exit Sub
Endif
Parsed.Command1=Parsed.Command2
Call Numeric
Call Open.Recep.File
Temp9=False
Temp7=False
For Temp5=1 To Lof(13)/Len(RecepRec)
Get 13,Temp5,RecepRec
Out2=RecepRec.TName
Out2=Left$(Out2,Len(Parsed.Command1))
If Out2=Parsed.Command1 Then
Temp9=Temp9+1
If Parse.Temp=False Or Temp9=Parse.Temp Then
Temp6=RecepRec.Charges
Temp7=RecepRec.Inv
Exit For
Endif
Endif
Next
If Temp7=False Then
Strng="You can't get that!"
Call IO.O
Exit Sub
Endif
Get 8,Temp7,TreasureRecord
Out3=TreasureRecord.TreasureName
If Weight+TreasureRecord.Weight>UserRecord.Stats(1)*10 Then
Strng="You can't carry any more!"
Call IO.O
Exit Sub
Endif
RecepRec.Inv=False
RecepRec.Charges=False
RecepRec.Invis=False
RecepRec.TName=Nul
Put 13,Temp5,RecepRec
Call Add.Inventory(Temp7,Temp6)
Strng="You take "+Out3+"."
Call IO.O
10181
Exit Sub
10182
Resume 10181
End Sub
Sub Smash.Object
On Local Error Goto 10192
Call Examine.Treasure
If Temp7 Then
If TreasureRecord.Recep=False Then
Strng="You can't smash that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Locked=False Then
Strng="It's already unlocked!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Locked>False Then
Strng="It's already unlocked!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Keyed>False Then
Strng="You can't smash that!"
Call IO.O
Exit Sub
Endif
If Int(Rnd*UserRecord.Stats(2))+1<Config2(33) Then
Strng="You didn't smash it open!"
Call IO.O
Exit Sub
Endif
If Int(Rnd*UserRecord.Stats(1))+1<Config2(34) Then
Strng="You didn't smash it open!"
Call IO.O
Exit Sub
Endif
If Rnd<Config1(21) Then
Strng="You didn't smash it open!"
Call IO.O
Exit Sub
Endif
TreasureRecord.Locked=1
TreasureRecord.Closed=1
Put 8,Temp7,TreasureRecord
Strng="You smash it open!"
Call IO.O
If ObjectRecord.Trap Then
Call Traps
Endif
Exit Sub
Endif
Call Num
Call Check.Room.Objects
If Temp7=False Then
Call Num
Call Check.Inventory.Objects
Endif
If Temp7 Then
If ObjectRecord.Hidden Then
Strng="You can't smash that!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.RoomLink=False Then
Strng="You can't smash that!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.Keyed Then
Strng="You can't smash that!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.DoorLock=1 Then
Strng="It's already unlocked!"
Call IO.O
Exit Sub
Endif
If Int(Rnd*UserRecord.Stats(2))+1<Config2(33) Then
Strng="You didn't smash it open!"
Call IO.O
Exit Sub
Endif
If Int(Rnd*UserRecord.Stats(1))+1<Config2(34) Then
Strng="You didn't smash it open!"
Call IO.O
Exit Sub
Endif
If Rnd<Config1(21) Then
Strng="You didn't smash it open!"
Call IO.O
Exit Sub
Endif
ObjectRecord.DoorLock=1
Put 6,Temp7,ObjectRecord
Strng="You smash it open!"
Call IO.O
If ObjectRecord.Trap Then
Call Traps
Endif
Exit Sub
Endif
Strng="You can't smash that!"
Call IO.O
10191
Exit Sub
10192
Resume 10191
End Sub
Sub Close.Object
On Local Error Goto 10202
Call Examine.Treasure
If Temp7 Then
If TreasureRecord.Recep=False Then
Strng="You can't close that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Locked=False Then
Strng="You can't close that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Locked>False Then
Strng="It's already closed!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Closed=False Then
Strng="You can't close that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Closed>False Then
Strng="It's already closed!"
Call IO.O
Exit Sub
Endif
TreasureRecord.Closed=1
Put 8,Temp7,TreasureRecord
Strng="You close it!"
Call IO.O
Exit Sub
Endif
Call Num
Call Check.Room.Objects
If Temp7=False Then
Call Num
Call Check.Inventory.Objects
Endif
If Temp7 Then
If ObjectRecord.DoorLock<>1 Then
Strng="You can't close that!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.Closed Then
Strng="It's already closed!"
Call IO.O
Exit Sub
Endif
ObjectRecord.Closed=True
Put 6,Temp7,ObjectRecord
Strng="You close it!"
Call IO.O
Exit Sub
Endif
Strng="You can't close that!"
Call IO.O
10201
Exit Sub
10202
Resume 10201
End Sub
Sub Open.Object
On Local Error Goto 10212
Call Examine.Treasure
If Temp7 Then
If TreasureRecord.Locked>False Then
Strng="You can't, it's locked!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Recep=False Then
Strng="You can't open that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Locked=False Then
Strng="You can't open that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Closed=False Then
Strng="You can't open that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Closed<False Then
Strng="It's already open!"
Call IO.O
Exit Sub
Endif
TreasureRecord.Closed=True
Put 8,Temp7,TreasureRecord
Strng="You open it!"
Call IO.O
Exit Sub
Endif
Call Num
Call Check.Room.Objects
If Temp7=False Then
Call Num
Call Check.Inventory.Objects
Endif
If Temp7 Then
If ObjectRecord.DoorLock<>1 Then
Strng="You can't open that!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.Closed=False Then
Strng="It's already open!"
Call IO.O
Exit Sub
Endif
ObjectRecord.Closed=False
Put 6,Temp7,ObjectRecord
Strng="You open it!"
Call IO.O
Exit Sub
Endif
Strng="You can't open that!"
Call IO.O
10211
Exit Sub
10212
Resume 10211
End Sub
Sub Hold.Object
On Local Error Goto 10222
Call Check.Inventory.Treasure
If Temp7=False Then
Strng="You aren't carrying that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Type>False Then
Strng="You can't hold that!"
Call IO.O
Exit Sub
Endif
If Treasure.Charges(Temp5)<=False Then
Strng="You can't, it has zero charges!"
Call IO.O
Exit Sub
Endif
Temp1=Abs(TreasureRecord.Plus)
If TreasureRecord.Type<False Then
Weapon3=Temp1
Weapon5=Temp5
Endif
If TreasureRecord.Type=False Then
If UserRecord.ClassType=4 Then
If TreasureRecord.Proficiency=3 Or TreasureRecord.Proficiency=4 Then
Strng="Clerics may only use blunt or pole type weapons!"
Call IO.O
Exit Sub
Endif
Endif
Weapon2=Temp1
Weapon6=Temp5
Weapon10=TreasureRecord.Proficiency
Endif
Strng="You hold "+Out3+"(+"+Mid$(Str$(Temp1),2)+")."
Call IO.O
10221
Exit Sub
10222
Resume 10221
End Sub
Sub Wear.Object
On Local Error Goto 10232
Call Check.Inventory.Treasure
If Temp7=False Then
Strng="You aren't carrying that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Type<=False Then
If TreasureRecord.RingType=False Then
Strng="You can't wear that!"
Call IO.O
Exit Sub
Endif
Endif
If Treasure.Charges(Temp5)<=False Then
Strng="You can't, it has zero charges!"
Call IO.O
Exit Sub
Endif
Temp1=Abs(TreasureRecord.Plus)
If TreasureRecord.RingType Then
Weapon7=Temp5
Weapon8=TreasureRecord.RingType
Weapon9=TreasureRecord.RingSpell
Endif
If TreasureRecord.Type>False Then
Weapon1=Temp1
Weapon4=Temp5
Endif
Strng="You wear "+Out3+"(+"+Mid$(Str$(Temp1),2)+")."
Call IO.O
10231
Exit Sub
10232
Resume 10231
End Sub
Sub Return.Object
On Local Error Goto 10242
Call Check.Inventory.Treasure
If Temp7=False Then
Strng="You aren't carrying that!"
Call IO.O
Exit Sub
Endif
Strng="You return "+Out3+"."
If Temp5=Weapon5 Then
Weapon3=False
Weapon5=False
Call IO.O
Exit Sub
Endif
If Temp5=Weapon4 Then
Weapon1=False
Weapon4=False
Call IO.O
Exit Sub
Endif
If Temp5=Weapon7 Then
Weapon7=False
Weapon8=False
Weapon9=False
Call IO.O
Exit Sub
Endif
If Temp5=Weapon6 Then
Weapon2=False
Weapon6=False
Weapon10=False
Call IO.O
Exit Sub
Endif
Strng="Your aren't wearing that!"
Call IO.O
10241
Exit Sub
10242
Resume 10241
End Sub
Sub Lock.Object
On Local Error Goto 10252
Call Examine.Treasure
If Temp7 Then
If TreasureRecord.Recep=False Then
Strng="You can't lock that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Locked>False Then
Strng="It's already locked!"
Call IO.O
Exit Sub
Endif
TreasureRecord.Locked=1
TreasureRecord.Closed=1
Put 8,Temp7,TreasureRecord
Strng="You lock it!"
Call IO.O
Exit Sub
Endif
Call Num
Call Check.Room.Objects
If Temp7=False Then
Call Num
Call Check.Inventory.Objects
Endif
If Temp7 Then
If ObjectRecord.RoomLink=False Then
Strng="You can't lock that!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.DoorLock=2 Then
Strng="It's already locked!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.DoorLock=False Then
Strng="You can't lock that!"
Call IO.O
Exit Sub
Endif
ObjectRecord.DoorLock=2
ObjectRecord.Closed=True
Put 6,Temp7,ObjectRecord
Strng="You lock it!"
Call IO.O
Exit Sub
Endif
Strng="You can't lock that!"
Call IO.O
10251
Exit Sub
10252
Resume 10251
End Sub
Sub Unlock.Object
On Local Error Goto 10262
Call Examine.Treasure
If Temp7 Then
If TreasureRecord.Recep=False Then
Strng="You can't unlock that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Locked=False Then
Strng="You can't unlock that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Locked<False Then
Strng="It's already unlocked!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Keyed=False Then
TreasureRecord.Locked=True
TreasureRecord.Closed=1
Put 8,Temp7,TreasureRecord
Strng="You unlock it!"
Call IO.O
Exit Sub
Endif
If Last.Command.Number=Picklock.Command Then
If ObjectRecord.Hidden Then
Strng="You can't picklock hidden doors!"
Call IO.O
Exit Sub
Endif
If UserRecord.ClassType<>3 Then
If Normal.User Then
Strng="You can't picklock doors!"
Call IO.O
Exit Sub
Endif
Endif
If Int(Rnd*UserRecord.Stats(1))+1<Config2(35) Then
Strng="You didn't picklock it!"
Call IO.O
Exit Sub
Endif
If Int(Rnd*UserRecord.Stats(2))+1<Config2(36) Then
Strng="You didn't picklock it!"
Call IO.O
Exit Sub
Endif
If Rnd<Config1(22) Then
Strng="You didn't picklock it!"
Call IO.O
Exit Sub
Endif
TreasureRecord.Locked=True
TreasureRecord.Closed=1
Put 8,Temp7,TreasureRecord
Strng="You unlock it!"
Call IO.O
Exit Sub
Endif
Out2=Right$(Str$(TreasureRecord.Keyed+100000!),5)
For Temp2=1 To Number.Inventory
If Treasure(Temp2) Then
Get 8,Treasure(Temp2),TreasureRecord
If TreasureRecord.Keyed Then
If Temp2<>Temp5 Then
Temp8=True
Out3=Right$(Str$(TreasureRecord.Keyed+100000!),5)
For Temp3=1 To 5
Temp1=Val(Mid$(Out3,Temp3,1))
If Temp1<>Val(Mid$(Out2,Temp3,1)) Then
If Temp1>False Then
Temp8=False
Exit For
Endif
Endif
Next
If Temp8 Then
Get 8,Temp7,TreasureRecord
TreasureRecord.Locked=True
TreasureRecord.Closed=1
Put 8,Temp7,TreasureRecord
Strng="You unlock it!"
Call IO.O
Exit Sub
Endif
Endif
Endif
Endif
Next
Strng="You don't have the key!"
Call IO.O
Exit Sub
Endif
Call Num
Call Check.Room.Objects
If Temp7=False Then
Call Num
Call Check.Inventory.Objects
Endif
If Temp7 Then
If ObjectRecord.RoomLink=False Then
Strng="You can't unlock that!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.DoorLock=False Then
Strng="You can't unlock that!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.DoorLock=1 Then
Strng="It's already unlocked!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.Keyed=False Then
ObjectRecord.DoorLock=1
ObjectRecord.Closed=True
Put 6,Temp7,ObjectRecord
Strng="You unlock it!"
Call IO.O
Exit Sub
Endif
If Last.Command.Number=Picklock.Command Then
If ObjectRecord.Hidden Then
Strng="You can't picklock hidden doors!"
Call IO.O
Exit Sub
Endif
If UserRecord.ClassType<>3 Then
If Normal.User Then
Strng="You can't picklock doors!"
Call IO.O
Exit Sub
Endif
Endif
If Int(Rnd*UserRecord.Stats(1))+1<Config2(35) Then
Strng="You didn't picklock it!"
Call IO.O
Exit Sub
Endif
If Int(Rnd*UserRecord.Stats(2))+1<Config2(36) Then
Strng="You didn't picklock it!"
Call IO.O
Exit Sub
Endif
If Rnd<Config1(22) Then
Strng="You didn't picklock it!"
Call IO.O
Exit Sub
Endif
ObjectRecord.DoorLock=1
ObjectRecord.Closed=True
Put 6,Temp7,ObjectRecord
Strng="You unlock it!"
Call IO.O
Exit Sub
Endif
Out2=Right$(Str$(ObjectRecord.Keyed+100000!),5)
For Temp2=1 To Number.Inventory
If Treasure(Temp2) Then
Get 8,Treasure(Temp2),TreasureRecord
If TreasureRecord.Keyed Then
If Temp2<>Temp5 Then
Temp8=True
Out3=Right$(Str$(TreasureRecord.Keyed+100000!),5)
For Temp3=1 To 5
Temp1=Val(Mid$(Out3,Temp3,1))
If Temp1<>Val(Mid$(Out2,Temp3,1)) Then
If Temp1>False Then
Temp8=False
Exit For
Endif
Endif
Next
If Temp8 Then
ObjectRecord.DoorLock=1
ObjectRecord.Closed=True
Put 6,Temp7,ObjectRecord
Strng="You unlock it!"
Call IO.O
Exit Sub
Endif
Endif
Endif
Endif
Next
Strng="You don't have the key!"
Call IO.O
Exit Sub
Endif
Strng="You can't unlock that!"
Call IO.O
10261
Exit Sub
10262
Resume 10261
End Sub
Sub Fix.Object
On Local Error Goto 10272
Call Examine.Treasure
If Temp7=False Then
Strng="You can't fix that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Spell Then
Strng="You can't fix that!"
Call IO.O
Exit Sub
Endif
If Treasure.Charges(Temp5)>False Then
Strng="That's not broken!"
Call IO.O
Exit Sub
Endif
If UserRecord.Stats(3)<Config2(28) Then
Strng="You didn't fix it!"
Call IO.O
Exit Sub
Endif
If Abs(TreasureRecord.Plus)>Config2(29) Then
Strng="You didn't fix it!"
Call IO.O
Exit Sub
Endif
If Rnd<Config1(16) Then
Strng="You didn't fix it!"
Call IO.O
Exit Sub
Endif
Temp1=TreasureRecord.Charges
If Temp1>Config2(30) Then
Temp1=Config2(30)
Endif
Select Case Temp4
Case 0
Treasure.Charges(Temp5)=Temp1
Case -1
Room.Inventory.Charges(Temp5)=Temp1
Case 1
RoomRecord.TreCharges(Temp5)=Temp1
Put 5,Room,RoomRecord
End Select
Strng="You fix it!"
Call IO.O
10271
Exit Sub
10272
Resume 10271
End Sub
Sub Panic
On Local Error Goto 10282
Temp9=False
For TempA=1 To 11
If RoomRecord.Direct(TempA) Then
Call Restrict(TempA)
If TempB=False Then
Temp9=Temp9+1
Endif
Endif
Next
If Temp9=False Then
Strng="There is nowhere to run! Try Appeal.."
Call IO.O
Exit Sub
Endif
TempC=Int(Rnd*Temp9+1)
Temp9=False
For TempA=1 To 11
If RoomRecord.Direct(TempA) Then
Call Restrict(TempA)
If TempB=False Then
Temp9=Temp9+1
If Temp9=TempC Then
Strng="You run away like a screaming madman!"
Call IO.O
Call Fumble
Next.Room=RoomRecord.Direct(TempA)
Call Enter.Room
Exit For
Endif
Endif
Endif
Next
10281
Exit Sub
10282
Resume 10281
End Sub
Sub Train
On Local Error Goto 10292
If UserRecord.Level<=False Then
Call Train.Stats
Exit Sub
Endif
Call Gold(Temp#)
If UserRecord.Gold<Temp# Then
Strng="You don't have enough Gold to train!"
Call IO.O
Exit Sub
Endif
If Config2(44) Then
If UserRecord.Experience>False Then
Strng="You don't have enough experience to train!"
Call IO.O
Exit Sub
Endif
Endif
If Config2(44)=False Then
Call In.Room(UserRecord.ClassType)
If TempA=False Then
Strng="You can't train here!"
Call IO.O
Exit Sub
Endif
Endif
Call Train.Stats
10291
Exit Sub
10292
Resume 10291
End Sub
Sub Appeal
On Local Error Goto 10302
If UserRecord.Fatigue<UserRecord.FatigueMax*Config1(20) Then
Strng="You are teleported elsewhere!"
Call IO.O
Next.Room=Val(Config3(24))
Call Teleport
Call Enter.Room
Exit Sub
Endif
For Temp5=1 To 11
If RoomRecord.Direct(Temp5) Then
Strng="There are exits in the room!"
Call IO.O
Exit Sub
Endif
Next
For Temp5=1 To 10
Temp2=RoomRecord.Object(Temp5)
If Temp2>False And Temp2<=Lof(6)/Len(ObjectRecord) Then
Get 6,Temp2,ObjectRecord
If ObjectRecord.RoomLink>False Then
Strng="There are exits in the room!"
Call IO.O
Exit Sub
Endif
Endif
Next
Strng="You are teleported elsewhere!"
Call IO.O
Next.Room=Val(Config3(24))
Number.Monsters=False
Call Teleport
Call Enter.Room
10301
Exit Sub
10302
Resume 10301
End Sub
Sub Drink.Potion
On Local Error Goto 10312
Call Check.Inventory.Treasure
If Temp7=False Then
Strng="You can't drink that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Potion=False Then
Strng="That's not a potion!"
Call IO.O
Exit Sub
Endif
If Treasure.Charges(Temp5)=False Then
Strng="You can't, it's empty!"
Call IO.O
Exit Sub
Endif
Temp2=TreasureRecord.Spell
If Temp2>False And Temp2<=Spells.Max Then
SpellRecord=SpellArray(Temp2)
Treasure.Charges(Temp5)=Treasure.Charges(Temp5)-1
Magic.Spell=SpellRecord.SpellType
Multiplier=SpellRecord.Level
Monster.Temp=False
Parser=False
Temp7=False
Temp3=True
Call Magic
Endif
10311
Exit Sub
10312
Resume 10311
End Sub
Sub Eat.Object
On Local Error Goto 10322
Call Check.Inventory.Treasure
If Temp7=False Then
Strng="You can't eat that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Edible=False Then
Strng="That's not edible!"
Call IO.O
Exit Sub
Endif
If Treasure.Charges(Temp5)=False Then
Strng="You can't, it's been eaten!"
Call IO.O
Exit Sub
Endif
Temp2=TreasureRecord.Spell
If Temp2>False And Temp2<=Spells.Max Then
SpellRecord=SpellArray(Temp2)
Treasure.Charges(Temp5)=Treasure.Charges(Temp5)-1
Magic.Spell=SpellRecord.SpellType
Multiplier=SpellRecord.Level
Monster.Temp=False
Parser=False
Temp7=False
Temp3=True
Call Magic
Endif
10321
Exit Sub
10322
Resume 10321
End Sub
Sub Teleport.User
On Local Error Goto 10332
Call Parse
If Parser Then
Call Numeric
Call Search.Mess(False)
If Temp>False Then
Out3=MessWorkRecord1.UserName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Strng="You teleport "+Out3+"!"
Call IO.O
Out2=Str$(Int(Val(Parsed.Command2)))
Call Send.Mess(18,TempB,False,Out2)
Exit Sub
Endif
Strng="You can't teleport that!"
Call IO.O
Exit Sub
Endif
Next.Room=Int(Val(Parsed.Command1))
Graphics.Off=True
Strng="A Dark Cloud Passes Overhead..."
Call IO.O
Strng=" A Bolt of Lightning Strikes..."
Call IO.O
Strng="The Cloud Disappears..."
Call IO.O
Graphics.Off=False
Call Teleport
Call Enter.Room
10331
Exit Sub
10332
Resume 10331
End Sub
Sub Load.Object
On Local Error Goto 10342
Call Examine.Treasure
If Temp7=False Then
Strng="You can't load that!"
Call IO.O
Exit Sub
Endif
Temp8=False
If TreasureRecord.Loadable=True Then
Temp1=TreasureRecord.AmmoLoads
Temp8=True
Endif
If TreasureRecord.Launchable=True Then
Temp1=TreasureRecord.LaunchLoads
Temp8=1
Endif
If Temp8=False Then
Strng="You can't load that!"
Call IO.O
Exit Sub
Endif
If Temp1<False Or Temp1>Lof(8)/Len(TreasureRecord) Then
Strng="There's no ammunition!"
Call IO.O
Exit Sub
Endif
Temp6=False
Get 8,Temp1,TreasureRecord
If Temp8 Then
If TreasureRecord.Ammunition Then
Temp6=True
Endif
Endif
If Temp8=1 Then
If TreasureRecord.LaunchAmmo Then
Temp6=True
Endif
Endif
If Temp6=False Then
Strng="There's no ammunition!"
Call IO.O
Exit Sub
Endif
Temp9=False
For Temp2=1 To Number.Inventory
If Temp1=Treasure(Temp2) Then
Call Discard(Temp2,True)
Temp9=True
Exit For
Endif
Next
If Temp9=False Then
For Temp2=1 To Room.Treasure.Max
If Temp1=Room.Inventory(Temp2) Then
Call Discard.Inventory(Temp2)
Temp9=True
Exit For
Endif
Next
Endif
If Temp9=False Then
For Temp2=1 To 10
If Temp1=RoomRecord.Treasure(Temp2) Then
Call Discard.Treasure(Temp2)
Temp9=True
Exit For
Endif
Next
Endif
If Temp9=False Then
Strng="There's no ammunition!"
Call IO.O
Exit Sub
Endif
TempZ=False
Select Case Temp4
Case 0
Treasure.Charges(Temp5)=Treasure.Charges(Temp5)+1
If Treasure.Charges(Temp5)>10 Then
Treasure.Charges(Temp5)=10
TempZ=True
Endif
Case -1
Room.Inventory.Charges(Temp5)=Room.Inventory.Charges(Temp5)+1
If Room.Inventory.Charges(Temp5)>10 Then
Room.Inventory.Charges(Temp5)=10
TempZ=True
Endif
Case 1
RoomRecord.TreCharges(Temp5)=RoomRecord.TreCharges(Temp5)+1
If RoomRecord.TreCharges(Temp5)>10 Then
RoomRecord.TreCharges(Temp5)=10
TempZ=True
Endif
Put 5,Room,RoomRecord
End Select
Strng="You load the device!"
If TempZ Then
Strng="The device can't load that much!"
Endif
Call IO.O
10341
Exit Sub
10342
Resume 10341
End Sub
Sub Fire.Object
On Local Error Goto 10352
Call Find.Inventory
If Temp7=False Then
Strng="You can't fire that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Loadable=False Then
Strng="You can't fire that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.AmmoLoads=False Then
Strng="It's not loaded with ammunition!"
Call IO.O
Exit Sub
Endif
Get 8,TreasureRecord.AmmoLoads,TreasureRecord
If TreasureRecord.Ammunition=False Then
Strng="It's not loaded with ammunition!"
Call IO.O
Exit Sub
Endif
Get 8,Temp7,TreasureRecord
If Parser=False Then
Strng="Fire at what?"
Call IO.O
Exit Sub
Endif
If Treasure.Charges(Temp5)=False Then
Strng="It's not loaded!"
Call IO.O
Exit Sub
Endif
Treasure.Charges(Temp5)=Treasure.Charges(Temp5)-1
Parsed.Command1=Parsed.Command2
Call Numeric
If Rnd<Config1(12) Then
Strng="Bang! The ammunition explodes in your face!"
Call IO.O
Prefix2=Nul
Strng="The device hits you for"
Out3="loading ammunition"
Temp2=Rnd*Abs(TreasureRecord.Plus)+1
Call Hit.Player(Temp2)
Exit Sub
Endif
If Rnd<Config1(13) Then
Strng="The device fires harmlessly!"
Call IO.O
Exit Sub
Endif
Out5=TreasureRecord.ShortName
Out5=Rtrim$(Out5)
Out5=Lcase$(Out5)
Call Check.Monster
If Monster.Temp Then
Out3=MonsterArray(Monster.Temp).MonsterName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Strng="You fire the "+Out5+" at the "+Out3+"!"
Call IO.O
Multiplier=Abs(TreasureRecord.Plus)
Call Hit.Monster
Exit Sub
Endif
Call Search.Mess(False)
If Temp=Room And TempB<>User.Index Then
User.Temp=TempB
Out3=MessWorkRecord1.UserName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Strng="You fire "+Out5+" at "+Out3+"!"
Call IO.O
Out2=TreasureRecord.TreasureName
Out2=Lcase$(Out2)
Out2=Rtrim$(Out2)
Call Send.Mess(22,TempB,Room,Out2)
Call Hit.Game.Player
Exit Sub
Endif
Strng="The device fires into empty air!"
Call IO.O
10351
Exit Sub
10352
Resume 10351
End Sub
Sub Reduce.Monsters
On Local Error Goto 10362
Out2=Parsed.Command1
Out2=Rtrim$(Out2)
Temp2=Int(Val(Out2))
If Temp2>=False And Temp2<Number.Monsters Then
Number.Monsters=Temp2
Strng="Number of Monsters reduced to:"+Str$(Number.Monsters)+"!"
Call IO.O
Endif
10361
Exit Sub
10362
Resume 10361
End Sub
Sub Discard.Object
On Local Error Goto 10372
Call Check.Inventory.Treasure
If Temp7 Then
Call Discard(Temp5,True)
Strng="You discard "+Out3+"."
Call IO.O
Exit Sub
Endif
Call Num
Call Check.Inventory.Objects
If Temp7 Then
UserRecord.Object(Temp5)=False
UserRecord.ObjCharges(Temp5)=False
Strng="You discard "+Out3+"."
Call IO.O
Exit Sub
Endif
Strng="You can't discard that!"
Call IO.O
10371
Exit Sub
10372
Resume 10371
End Sub
Sub Discard.Inventory(Var1)
On Local Error Goto 10382
For TempX=Var1 To Room.Treasure.Max-1
Room.Inventory(TempX)=Room.Inventory(TempX+1)
Room.Inventory.Charges(TempX)=Room.Inventory.Charges(TempX+1)
Next
Room.Inventory(Room.Treasure.Max)=False
Room.Inventory.Charges(Room.Treasure.Max)=False
10381
Exit Sub
10382
Resume 10381
End Sub
Sub Discard.Treasure(Var1)
On Local Error Goto 10392
RoomRecord.Treasure(Var1)=False
RoomRecord.TreCharges(Var1)=False
RoomRecord.Flags(Var1)=False
Put 5,Room,RoomRecord
10391
Exit Sub
10392
Resume 10391
End Sub
Sub Drop.Object
On Local Error Goto 10402
Parsed.Command1=Stored.Parsed.Command2
Call Numeric
Out2=Parsed.Command1
Out2=Lcase$(Out2)
Call Drop(True)
10401
Exit Sub
10402
Resume 10401
End Sub
Sub Kill.Monster
On Local Error Goto 10412
Monster.Temp=False
Call Check.Monster
If Monster.Temp Then
Graphics.Off=True
Strng="Evil Laughter Sounds From Above..."
Call IO.O
Strng=" A Bolt of Lightning Strikes..."
Call IO.O
Graphics.Off=False
Strng="The "+Out3+" was just struck dead!"
Call IO.O
Call Monster.Died
Exit Sub
Endif
User.Temp=False
Call Check.User
If User.Temp Then
Graphics.Off=True
Strng="Evil Laughter Sounds From Above..."
Call IO.O
Strng=" A Bolt of Lightning Strikes..."
Call IO.O
Graphics.Off=False
Out3=Lcase$(Out3)
Strng=Out3+" was just struck dead!"
Mid$(Strng,1,1)=Ucase$(Mid$(Strng,1,1))
Call IO.O
Call User.Died
Exit Sub
Endif
Call Search.Mess(False)
If Temp>False Then
Out3=MessWorkRecord1.UserName
Out2="Evil Laughter Sounds From Above..."
Call Send.Mess(5,False,False,Out2)
Out2=" A Bolt of Lightning Strikes..."
Call Send.Mess(5,False,False,Out2)
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Mid$(Out3,1,1)=Ucase$(Mid$(Out3,1,1))
Out2=Out3+" was just struck dead!"
Call Send.Mess(5,False,False,Out2)
Call Send.Mess(17,TempB,Room,"Murdered")
Exit Sub
Endif
Strng="You can't kill that!"
Call IO.O
10411
Exit Sub
10412
Resume 10411
End Sub
Sub Enter.Vehicle
On Local Error Goto 10422
Call Check.Room.Treasure
If Temp7=False Then
Strng="That's not a vehicle!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Vehicle=False Then
Strng="That's not a vehicle!"
Call IO.O
Exit Sub
Endif
Out3=TreasureRecord.ShortName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
If Temp6=False Then
Strng="The "+Out3+" is damaged!"
Call IO.O
Exit Sub
Endif
Vehicle1=Temp5
Vehicle2=Temp6
Vehicle3=Temp7
Strng="You enter the "+Out3+"."
Call IO.O
10421
Exit Sub
10422
Resume 10421
End Sub
Sub Ride.Vehicle
On Local Error Goto 10442
If Vehicle3=False Then
Strng="That's not a vehicle!"
Call IO.O
Exit Sub
Endif
Get 8,Temp7,TreasureRecord
Out3=TreasureRecord.ShortName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
User.Command=Parsed.Command1
Call Get.Direction
If TempA Then
Next.Room=RoomRecord.Direct(TempA)
If Next.Room=False Then
Strng="You can't travel in that direction!"
Call IO.O
Exit Sub
Endif
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Strng=Direction(TempA)
Strng=Rtrim$(Strng)
Out2=Out2+" just left on a "+Out3+" "+Strng+"."
Call Send.Mess(8,False,Room,Out2)
Call Enter.Room
Exit Sub
Endif
Call Check.Room.Objects
If Temp7=False Then
Strng="You can't travel in that direction!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.RoomLink=False Then
Strng="You can't travel there!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.JailTrap Then
Strng="Trapped portal!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.Closed Then
If Pass.Door=False Then
Strng="You can't, it's closed!"
Call IO.O
Exit Sub
Endif
Endif
If ObjectRecord.Relocks Then
ObjectRecord.DoorLock=2
ObjectRecord.Closed=True
Put 6,Temp7,ObjectRecord
Endif
Strng=ObjectRecord.ShortDesc
If Strng<>String$(40,0) Then
Strng=Rtrim$(Strng)
If Strng<>Nul Then
Call IO.O
Endif
Endif
Pass.Door=False
Number.Monsters=False
Next.Room=ObjectRecord.RoomLink
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Out2=Lcase$(Out2)
Out2=Rtrim$(Out2)
Strng=ObjectRecord.ShortName
Strng=Rtrim$(Strng)
Strng=Lcase$(Strng)
Out2=Out2+" just left on a "+Out3+" to the "+Strng+"."
Call Send.Mess(8,False,Room,Out2)
Call Enter.Room
10441
Exit Sub
10442
Resume 10441
End Sub
Sub Exit.Vehicle
On Local Error Goto 10452
Call Check.Room.Treasure
Strng="You can't exit that!"
If Temp5=Vehicle1 Then
Out3=TreasureRecord.ShortName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Vehicle1=False
Vehicle2=False
Vehicle3=False
Strng="You exit the "+Out3+"!"
Endif
Call IO.O
10451
Exit Sub
10452
Resume 10451
End Sub
Sub Search.Object
On Local Error Goto 10462
Call Examine.Treasure
If Temp7 Then
If TreasureRecord.Recep=False Then
Strng="You can't search that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Locked>False Then
Strng="You can't, it's locked."
Call IO.O
Exit Sub
Endif
If TreasureRecord.Closed>False Then
Strng="You can't, it's closed."
Call IO.O
Exit Sub
Endif
Strng="You search the receptacle.."
Call IO.O
Graphics.Off=True
Strng="In it you find "
Carriage.Return=True
Call IO.O
Temp9=False
Call Open.Recep.File
For Temp5=1 To Lof(13)/Len(RecepRec)
Get 13,Temp5,RecepRec
Temp2=RecepRec.Inv
If Temp2 Then
Get 8,Temp2,TreasureRecord
Out3=TreasureRecord.TreasureName
If RecepRec.Invis Then
If Rnd<Config1(11) Then
Carriage.Return=True
Call IO.O
Strng=Rtrim$(Out3)+", "
Temp9=Temp9+1
Endif
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
Exit Sub
Endif
Strng="You can't search that!"
Call IO.O
10461
Exit Sub
10462
Resume 10461
End Sub
Sub Bless.Object
On Local Error Goto 10472
If Normal.User Then
If UserRecord.ClassType<>4 Then
Strng="Only clerics can bless!"
Call IO.O
Exit Sub
Endif
Endif
Call Examine.Treasure
If Temp7 Then
If TreasureRecord.Spell=False Then
Strng="You can't bless that!"
Call IO.O
Exit Sub
Endif
SpellRecord=SpellArray(TreasureRecord.Spell)
If SpellRecord.SpellType=4 Then
Strng="You can't bless that!"
Call IO.O
Exit Sub
Endif
TempZ=False
Select Case Temp4
Case 0
Treasure.Charges(Temp5)=Treasure.Charges(Temp5)+1
If Treasure.Charges(Temp5)>TreasureRecord.Charges Then
Treasure.Charges(Temp5)=TreasureRecord.Charges
TempZ=True
Endif
Case -1
Room.Inventory.Charges(Temp5)=Room.Inventory.Charges(Temp5)+1
If Room.Inventory.Charges(Temp5)>TreasureRecord.Charges Then
Room.Inventory.Charges(Temp5)=TreasureRecord.Charges
TempZ=True
Endif
Case 1
RoomRecord.TreCharges(Temp5)=RoomRecord.TreCharges(Temp5)+1
If RoomRecord.TreCharges(Temp5)>TreasureRecord.Charges Then
RoomRecord.TreCharges(Temp5)=TreasureRecord.Charges
TempZ=True
Endif
Put 5,Room,RoomRecord
End Select
Strng="You bless it!"
If TempZ Then
Strng="Nothing happens!"
Endif
Call IO.O
Exit Sub
Endif
Call Search.Mess(False)
If Temp=Room And TempB<>User.Index Then
User.Temp=TempB
Out3=MessWorkRecord1.UserName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Strng="You bless "+Out3+"!"
Call IO.O
Out2="blesses you!"
Call Send.Mess(23,TempB,Room,Out2)
Exit Sub
Endif
Strng="You can't bless that!"
Call IO.O
10471
Exit Sub
10472
Resume 10471
End Sub
Sub Curse.Object
On Local Error Goto 10482
If Normal.User Then
If UserRecord.ClassType<>4 Then
Strng="Only clerics can curse!"
Call IO.O
Exit Sub
Endif
Endif
Call Check.Monster
If Monster.Temp Then
Out3=MonsterArray(Monster.Temp).MonsterName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Strng="You curse the "+Out3+"!"
Call IO.O
Multiplier=Int(UserRecord.Stats(6)/2)
Call Hit.Monster
Exit Sub
Endif
Call Search.Mess(False)
If Temp=Room And TempB<>User.Index Then
User.Temp=TempB
Out3=MessWorkRecord1.UserName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Strng="You curse "+Out3+"!"
Call IO.O
Out2="curses you!"
Call Send.Mess(24,TempB,Room,Out2)
Exit Sub
Endif
Strng="You can't curse that!"
Call IO.O
10481
Exit Sub
10482
Resume 10481
End Sub
Sub Bless.Self
On Local Error Goto 10492
If Normal.User Then
If UserRecord.ClassType<>4 Then
Strng="Only clerics can bless!"
Call IO.O
Exit Sub
Endif
Endif
UserRecord.Stats(6)=UserRecord.Stats(6)+1
If UserRecord.Stats(6)>Config2(31) Then
UserRecord.Stats(6)=Config2(31)
Strng="Nothing happens!"
Call IO.O
Exit Sub
Endif
Strng="You feel a glow about you!"
Call IO.O
Strng="Your piety is now"+Str$(UserRecord.Stats(6))+"!"
Call IO.O
10491
Exit Sub
10492
Resume 10491
End Sub
Sub Curse.Self
On Local Error Goto 10502
If Normal.User Then
If UserRecord.ClassType<>4 Then
Strng="Only clerics can curse!"
Call IO.O
Exit Sub
Endif
Endif
UserRecord.Stats(6)=UserRecord.Stats(6)-1
If UserRecord.Stats(6)<False Then
UserRecord.Stats(6)=False
Endif
Strng="You feel a darkening about you!"
Call IO.O
Strng="Your piety is now"+Str$(UserRecord.Stats(6))+"!"
Call IO.O
Call New.Stats
10501
Exit Sub
10502
Resume 10501
End Sub
Sub Move.Object
On Local Error Goto 10512
Call Parse
If Parser Then
Call Numeric
Endif
Call Examine.Treasure
If Temp7=False Then
Strng="You can't move that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Movable=False Then
Strng="You can't move that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Launchable=False Then
Strng="You can't move that!"
Call IO.O
Exit Sub
Endif
If Parser=False Then
Strng="Move which direction?"
Call IO.O
Exit Sub
Endif
Out4=Out3
TempD=Temp5
TempE=Temp6
TempF=Temp7
User.Command=Parsed.Command2
Call Get.Direction
If TempA Then
Next.Room=RoomRecord.Direct(TempA)
If Next.Room=False Then
Strng="You can't move it there!"
Call IO.O
Exit Sub
Endif
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Out2=Lcase$(Out2)
Out2=Rtrim$(Out2)
Out2=Out2+" just moved something "
Strng=Direction(TempA)
Strng=Rtrim$(Strng)
Out2=Out2+Strng+"."
Else
Parsed.Command1=User.Command
Call Check.Room.Objects
If Temp7=False Then
Strng="You can't move it there!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.RoomLink=False Then
Strng="You can't move it there!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.JailTrap Then
Strng="Trapped portal!"
Call IO.O
Exit Sub
Endif
If ObjectRecord.Closed Then
If Pass.Door=False Then
Strng="You can't, it's closed!"
Call IO.O
Exit Sub
Endif
Endif
If ObjectRecord.Relocks Then
ObjectRecord.DoorLock=2
ObjectRecord.Closed=True
Put 6,Temp7,ObjectRecord
Endif
Pass.Door=False
Next.Room=ObjectRecord.RoomLink
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Out2=Lcase$(Out2)
Out2=Rtrim$(Out2)
Out2=Out2+" just moved something to "+Out3+"."
Endif
Get 5,Next.Room,RoomRecord
For Temp=1 To 10
If RoomRecord.Treasure(Temp)=False Then
RoomRecord.Treasure(Temp)=TempF
RoomRecord.TreCharges(Temp)=TempE
RoomRecord.Flags(Temp)=False
Put 5,Next.Room,RoomRecord
Get 5,Room,RoomRecord
Select Case Temp4
Case 0
Call Discard(TempD,True)
Case -1
Call Discard.Inventory(TempD)
Case 1
Call Discard.Treasure(TempD)
End Select
Strng="You move "+Out4+"."
Call IO.O
Call Send.Mess(8,False,Room,Out2)
Call Enter.Room
Exit Sub
Endif
Next
Get 5,Room,RoomRecord
Strng="You can't move it there!"
Call IO.O
10511
Exit Sub
10512
Resume 10511
End Sub
Sub Launch.Object
On Local Error Goto 10522
Call Parse
If Parser Then
Call Numeric
Endif
Call Examine.Treasure
If Temp7=False Then
Strng="You can't launch that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Launchable=False Then
Strng="That's not a launchable device!"
Call IO.O
Exit Sub
Endif
If Parser=False Then
Strng="Launch where?"
Call IO.O
Exit Sub
Endif
TempZ=False
TempI=Temp4
TempJ=Temp5
TempE=Temp6
If Temp6=False Then
Strng="You can't, it's not loaded."
Call IO.O
Exit Sub
Endif
If TempE>10 Then
TempE=10
Endif
TempK=False
Out5=TreasureRecord.ShortName
Out5=Rtrim$(Out5)
Out5=Lcase$(Out5)
User.Command=Parsed.Command2
Parsed.Command1=User.Command
Call Get.Direction
If TempA Then
Next.Room=RoomRecord.Direct(TempA)
If Next.Room=False Then
Strng="You can't launch at that!"
Call IO.O
Exit Sub
Endif
TempZ=True
Out3=Direction(TempA)
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Strng="You launch the "+Out5+" "+Out3+"!"
Call IO.O
For TempQ=1 To TempE
Graphics.Off=False
Out2=Numeral(TempQ)
Out2=Rtrim$(Out2)
Strng="For launch "+Out2+";"
Call IO.O
TempK=TempK+1
Graphics.Off=True
Strng="The device launchs: "
Carriage.Return=True
Call IO.O
Strng=Out3+", "
Carriage.Return=True
Call IO.O
TempA=False
TempB=False
Call Chain.Rooms(Next.Room,Room)
Strng="and stopped!"
Call IO.O
Next
If TempA=False Then
Strng="You didn't smash anything!"
Else
Strng="You smashed open"
If TempA<=10 Then
Strng=Strng+" "+Rtrim$(Numeral(TempA))
Else
Strng=Strng+Str$(TempA)
Endif
If TempA=1 Then
Strng=Strng+" lock.."
Else
Strng=Strng+" locks!"
Endif
Endif
Call IO.O
Graphics.Off=False
Get 5,Room,RoomRecord
Else
Call Check.Monster
If Monster.Temp Then
Multiplier=Abs(TreasureRecord.Plus)
Out3=MonsterArray(Monster.Temp).MonsterName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Strng="You launch "+Out5+" at the "+Out3+"!"
Call IO.O
TempZ=True
Graphics.Off=True
For TempQ=1 To TempE
Out2=Numeral(TempQ)
Out2=Rtrim$(Out2)
Strng="For launch "+Out2+";"
Call IO.O
TempK=TempK+1
Call Attack.Monster
Call Check.Monster
If Monster.Temp=False Then
Exit For
Endif
Next
Graphics.Off=False
Else
Call Search.Mess(False)
If Temp=Room And TempB<>User.Index Then
User.Temp=TempB
Out3=MessWorkRecord1.UserName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Strng="You launch "+Out5+" at "+Out3+"!"
Call IO.O
TempZ=True
Out2=TreasureRecord.TreasureName
Out2=Lcase$(Out2)
Out2=Rtrim$(Out2)
Call Send.Mess(21,TempB,Room,Out2)
Graphics.Off=True
For TempQ=1 To TempE
Out2=Numeral(TempQ)
Out2=Rtrim$(Out2)
Strng="For launch "+Out2+";"
Call IO.O
TempK=TempK+1
Call Hit.Game.Player
Call Search.Mess(False)
If Temp<>Room Then
Exit For
Endif
Next
Graphics.Off=False
Endif
Endif
Endif
If TempZ=False Then
Strng="You can't launch at that!"
Call IO.O
Exit Sub
Endif
Select Case TempI
Case 0
Treasure.Charges(TempJ)=Treasure.Charges(TempJ)-TempK
If Treasure.Charges(TempJ)<False Then
Treasure.Charges(TempJ)=False
Endif
Case -1
Room.Inventory.Charges(TempJ)=Room.Inventory.Charges(TempJ)-TempK
If Room.Inventory.Charges(TempJ)<False Then
Room.Inventory.Charges(TempJ)=Falsee
Endif
Case 1
RoomRecord.TreCharges(TempJ)=RoomRecord.TreCharges(TempJ)-TempK
If RoomRecord.TreCharges(TempJ)<False Then
RoomRecord.TreCharges(TempJ)=False
Endif
Put 5,Room,RoomRecord
End Select
10521
Exit Sub
10522
Resume 10521
End Sub
Sub Chain.Rooms(Chain.Room,Previous.Room)
On Local Error Goto 10532
Get 5,Chain.Room,RoomRecord
For Temp=1 To 10
If RoomRecord.Object(Temp) Then
Get 6,RoomRecord.Object(Temp),ObjectRecord
If ObjectRecord.DoorLock=2 Then
If Rnd>.66 Then
TempA=TempA+1
ObjectRecord.DoorLock=1
ObjectRecord.Closed=False
Put 6,RoomRecord.Object(Temp),ObjectRecord
Endif
Endif
Endif
Next
For Temp.Direction=1 to 11
Temp.Room=RoomRecord.Direct(Temp.Direction)
If Temp.Room Then
If Temp.Room<>Previous.Room Then
If Rnd>.66 Then
If TempB<5 Then
Carriage.Return=True
Strng=Direction(Temp.Direction)
Strng=Rtrim$(Strng)+", "
Call IO.O
TempB=TempB+1
Call Chain.Rooms(Temp.Room,Chain.Room)
Get 5,Chain.Room,RoomRecord
Exit Sub
Endif
Endif
Endif
Endif
Next
10531
Exit Sub
10532
Resume 10531
End Sub
Sub Give.Object
On Local Error Goto 10542
Call Parse
If Parser Then
Call Numeric
Endif
Temp#=False
If Val(Parsed.Command1)>False Then
Temp#=Val(Parsed.Command1)
If Temp#<=False Or UserRecord.Gold-Temp#<False Then
Strng="You don't have that much gold!"
Call IO.O
Exit Sub
Endif
UserRecord.Gold=UserRecord.Gold-Temp#
Endif
If Temp#=False Then
Call Check.Inventory.Treasure
If Temp7=False Then
Strng="You can't give that!"
Call IO.O
Exit Sub
Endif
Endif
If Parser=False Then
Strng="Give to whom?"
Call IO.O
Exit Sub
Endif
Parsed.Command1=Parsed.Command2
Call Search.Mess(False)
If Temp=Room And TempB<>User.Index Then
Out2=MessWorkRecord1.UserName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
If Temp#>False Then
Strng="You give"+Str$(Temp#)+" gold to "+Out2+"!"
Call IO.O
Out2=Str$(Temp#)
Call Send.Mess(15,TempB,Room,Out2)
Exit Sub
Endif
Strng="You give "+Out3+" to "+Out2+"!"
Call IO.O
Out2=Str$(Temp7)+Str$(Temp6)
Call Send.Mess(13,TempB,Room,Out2)
Call Discard(Temp5,True)
Exit Sub
Endif
Strng="You can't give that!"
Call IO.O
10541
Exit Sub
10542
Resume 10541
End Sub
Sub Steal.Object
On Local Error Goto 10552
If Normal.User Then
If UserRecord.ClassType<>3 Then
Strng="Only thieves can steal!"
Call IO.O
Exit Sub
Endif
Endif
Call ParseX
If Parser Then
Call Numeric
Endif
If Parser=False Then
Strng="Steal from whom?"
Call IO.O
Exit Sub
Endif
Call Check.Monster
If Monster.Temp Then
Parsed.Command1=Lcase$(Parsed.Command2)
Call Numeric
For Temp5=1 To 5
Temp4=MonsterArray(Monster.Temp).Treasure(Temp5)
If Temp4>False And Temp4<=Lof(8)/Len(TreasureRecord) Then
Get 8,Temp4,TreasureRecord
Out2=TreasureRecord.ShortName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Out2=Left$(Out2,Len(Parsed.Command1))
If Out2=Parsed.Command1 Then
If MonsterArray(Monster.Temp).Magic<=True Or_
MonsterArray(Monster.Temp).Permanent<=True Then
Strng="You can't steal from that monster!"
Call IO.O
Exit Sub
Endif
If Int(Rnd*5+5)>UserRecord.Stats(4)/2 Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
Out2=TreasureRecord.TreasureName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Out3=MonsterArray(Monster.Temp).MonsterName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Strng="You steal "+Out2+" from the "+Out3+"!"
Call IO.O
Temp9=TreasureRecord.Charges
Call Add.Inventory(Temp4,Temp9)
MonsterArray(Monster.Temp).Treasure(Temp5)=False
Exit Sub
Endif
Endif
Next
Else
Call Search.Mess(False)
If Temp=Room And TempB<>User.Index Then
Out2=MessWorkRecord1.UserName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Parsed.Command1=Parsed.Command2
Call Search.User.Inventory
If Temp7>False Then
If Int(Rnd*5+5)>UserRecord.Stats(4)/2 Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
If MessWorkRecord1.ClassType>8 Then
Strng="You can't steal from that user!"
Call IO.O
Exit Sub
Endif
Strng="You steal "+Out3+" from "+Out2+"!"
Call IO.O
Out2=Str$(Temp7)
Get 1,TempC,MessWorkRecord1
MessWorkRecord1.Treasure(Temp5)=False
MessWorkRecord1.TreasureCharges(Temp5)=False
Put 1,TempC,MessWorkRecord1
Call Send.Mess(16,TempB,Room,Out2)
Call Add.Inventory(Temp7,Temp6)
Exit Sub
Endif
Endif
Endif
Strng="You can't steal that!"
Call IO.O
10551
Exit Sub
10552
Resume 10551
End Sub
Sub Add.Inventory(Var1,Var2)
On Local Error Goto 10562
If Number.Inventory=Treasure.Max Then
Call Expand.Inventory
Endif
Number.Inventory=Number.Inventory+1
Treasure(Number.Inventory)=Var1
Treasure.Charges(Number.Inventory)=Var2
Weight=Weight+TreasureRecord.Weight
10561
Exit Sub
10562
Resume 10561
End Sub
Sub Follow.Player
On Local Error Goto 10572
If Node<=False Then
Strng="You can't follow players!"
Call IO.O
Exit Sub
Endif
If Last.Command.Number<>Follow.Command Then
Strng="Hunt mode. Press Control-K to interrupt."
Call IO.O
Allow.Break=True
Auto.Break=False
Do While Security.Guard
Call Pause.Second
If Auto.Break Then
Allow.Break=False
Follow.Mode=False
Exit Sub
Endif
For VarX=1 To 36
Get 1,VarX,MessWorkRecord1
Out2=Rtrim$(MessWorkRecord1.UserName)
Out2=Lcase$(Out2)
Call Valid.Name(Out2)
TempB=MessWorkRecord1.UserIndex
TempC=VarX
If VarX<>(Noden+1) Then
If MessWorkRecord1.RoomNumber=Room And TempA Then
Strng="Hunting found "+Out2+"!"
Call IO.O
Exit Do
Endif
Endif
Next
If Last.Command.Number>36 Then
TempA=Int(Rnd*11+1)
If RoomRecord.Direct(TempA) Then
Call Restrict(TempA)
If TempB=False Then
Out2=Direction(TempA)
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Strng="You hunt "+Out2+"."
Call IO.O
Next.Room=RoomRecord.Direct(TempA)
Call Enter.Room
Endif
Endif
Endif
Call Main.Loop.Update
Loop
Endif
Allow.Break=False
Follow.Mode=False
If Last.Command.Number=Trace.Command Then
Exit Sub
Endif
If Last.Command.Number=Follow.Command Then
Call Search.Mess(False)
If TempB=User.Index Or Temp<>Room Then
Strng="That player is not in this room!"
Call IO.O
Exit Sub
Endif
Endif
Strng="Follow mode. Press Control-K to interrupt."
Call IO.O
Allow.Break=True
Auto.Break=False
Follow.Mode=True
VarZ=TempC
Do While Security.Guard
Call Pause.Second
If Auto.Break Then
Exit Do
Endif
Get 1,VarZ,MessWorkRecord1
Strng=Rtrim$(MessWorkRecord1.UserName)
Call Valid.Name(Strng)
If TempA=False Then
Exit Do
Endif
Temp=MessWorkRecord1.RoomNumber
If Temp<>Room Then
Next.Room=Temp
Call Enter.Room
Endif
Call Main.Loop.Update
Loop
Allow.Break=False
Follow.Mode=False
10571
Exit Sub
10572
Resume 10571
End Sub
Sub Lose.Player
On Local Error Goto 10582
If Node<=False Then
Strng="You can't lose players!"
Call IO.O
Exit Sub
Endif
If Int(Rnd*5+5)>UserRecord.Stats(2)/2 Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
Call Send.Mess(20,False,False,"Lose")
Strng="You lose any following players!"
Call IO.O
10581
Exit Sub
10582
Resume 10581
End Sub
Sub Learn.Spell
On Local Error Goto 10592
Temp9=False
For Temp=1 To Spells.Max
SpellRecord=SpellArray(Temp)
If Rtrim$(SpellRecord.SpellName)=Lcase$(Parsed.Command1) Then
Temp9=True
Exit For
Endif
Next
If Temp9=False Then
Strng="You can't learn that spell!"
Call IO.O
Exit Sub
Endif
Strng="Enter chant to learn: "
Call IO.I
Out2=Ucase$(Out2)
If Rtrim$(SpellRecord.Chant)<>Out2 Then
Strng="Wrong spell chant!"
Call IO.O
Exit Sub
Endif
Learned.Spells(Temp)=True
Strng="You now memorize the spell!"
Call IO.O
10591
Exit Sub
10592
Resume 10591
End Sub
Sub Hide.User
On Local Error Goto 10602
If Hidden.Player Then
Strng="You are already hidden!"
Call IO.O
Exit Sub
Endif
Temp1=False
If Number.Monsters=False Then
Temp1=True
Else
If Rnd>.66 Then
Temp1=True
Endif
Endif
If Temp1 Then
Hidden.Player=True
Strng="You hide in the shadows.."
Else
Strng="You can't hide in front of something!"
Endif
Call IO.O
10601
Exit Sub
10602
Resume 10601
End Sub
Sub Throw.Object
On Local Error Goto 10612
If Normal.User Then
If UserRecord.ClassType<>3 Then
Strng="Only thieves can throw!"
Call IO.O
Exit Sub
Endif
Endif
Call ParseX
If Parser Then
Call Numeric
Endif
If Parser=False Then
Strng="Throw at whom?"
Call IO.O
Exit Sub
Endif
Call Check.Monster
If Monster.Temp Then
Last.Monster=Parsed.Command1
Parsed.Command1=Ucase$(Parsed.Command2)
Call Numeric
Call Check.Inventory.Treasure
If Temp7>False Then
If Weapon6=Temp5 Then
Multiplier=Weapon2
Out2=MonsterArray(Monster.Temp).MonsterName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Strng="You throw "+Out3+" at the "+Out2+"!"
Call IO.O
If Int(Rnd*5+2)>UserRecord.Stats(4)/2 Then
Strng="You missed!"
Call IO.O
Else
Parsed.Command1=Last.Monster
Last.Command.Type=False
Last.Command.Number=55
Call Attack.Monster
Endif
Call Discard(Weapon6,False)
Exit Sub
Endif
Strng="You are'nt holding the weapon!"
Call IO.O
Exit Sub
Endif
Else
Call Search.Mess(False)
If Temp=Room And TempB<>User.Index Then
User.Temp=TempB
Out2=MessWorkRecord1.UserName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Parsed.Command1=Ucase$(Parsed.Command2)
Call Check.Inventory.Treasure
If Temp7>False Then
If Weapon6=Temp5 Then
Strng="You throw "+Out3+" at "+Out2+"!"
Call IO.O
If Int(Rnd*5+2)>UserRecord.Stats(4)/2 Then
Strng="You missed!"
Call IO.O
Else
Call Hit.Game.Player
Endif
Call Discard(Weapon6,False)
Exit Sub
Endif
Strng="You are'nt holding the weapon!"
Call IO.O
Exit Sub
Endif
Endif
Endif
Strng="You can't throw that!"
Call IO.O
10611
Exit Sub
10612
Resume 10611
End Sub
Sub Exit.Room
On Local Error Goto 10622
User.Command="O"
Last.Command="OUT"
Call Update.Mess(4)
Last.Command.Number=True
TempA=5
Call Verify.Room
If New.Room Then
Call Enter.Room
Endif
10621
Exit Sub
10622
Resume 10621
End Sub
Sub Climb
On Local Error Goto 10632
User.Command="U"
Last.Command="UP"
Call Update.Mess(4)
Last.Command.Number=True
TempA=6
Call Verify.Room
If New.Room Then
Call Enter.Room
Endif
10631
Exit Sub
10632
Resume 10631
End Sub
Sub Gold(Var#)
On Local Error Goto 10642
If UserRecord.Level<=10 Then
Var#=2^(UserRecord.Level+6)
Else
Var#=2^16+(UserRecord.Level-10)*1000000!
Endif
10641
Exit Sub
10642
Resume 10641
End Sub
Sub Experience(Var#)
On Local Error Goto 10652
If UserRecord.Level<=10 Then
Var#=2^(UserRecord.Level+7)
Else
Var#=2^17+(UserRecord.Level-10)*1000000!
Endif
10651
Exit Sub
10652
Resume 10651
End Sub