home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Beijing Paradise BBS Backup
/
PARADISE.ISO
/
software
/
BBSDOORW
/
DND29C4.ZIP
/
SOURCE.ZIP
/
DNDSUB3.BAS
< prev
next >
Wrap
BASIC Source File
|
1993-01-07
|
81KB
|
3,063 lines
Rem dndsub3.bas v2.9c
Rem $Include: 'dndbbs.inc'
Sub Attack.Monster
On Local Error Goto 10002
Prefix1=Nul
User.Temp=False
Monster.Temp=False
Call In.Room(13)
If TempA Then
Strng="This is a safe haven!"
Call IO.O
Exit Sub
Endif
Call Check.Room.Objects
If Temp7 Then
If ObjectRecord.JailTrap Then
Call Jail
Exit Sub
Endif
Strng="Nothing happens.."
Call IO.O
Exit Sub
Endif
Call Search.Mess(False)
If Temp=Room Then
User.Temp=TempB
Out3=MessWorkRecord1.UserName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Call Hit.Game.Player
Exit Sub
Endif
Call Check.User
If User.Temp Then
Out3=Lcase$(Out3)
If UserArray(User.Temp).Align1+UserArray(User.Temp).Align2<False Then
If UserRecord.Align1+UserRecord.Align2<False Then
Strng="Your alignment might change!"
Call IO.O
Endif
Endif
Call Hit.User
Exit Sub
Endif
Previous.Command=False
If Intoxicated>False Then
Strng="You are too drunk to fight!"
Call IO.O
Exit Sub
Endif
Call Check.Monster
If Monster.Temp=False Then
Strng="You can't attack that!"
Call IO.O
Exit Sub
Endif
If MonsterArray(Monster.Temp).Jail Then
Call Jail
Exit Sub
Endif
Call The.Or.An
Out3=MonsterArray(Monster.Temp).MonsterName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Select Case Last.Command.Number
Case 7
If Last.Command.Type Then
If UserRecord.ClassType=8 Then
If MonsterArray(Monster.Temp).Magic<=True Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
If Int(Rnd*10+4)>UserRecord.Stats(7) Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
MonsterArray(Monster.Temp).Magic=5
Strng="It worked!"
Call IO.O
Exit Sub
Endif
Endif
Strng="Your class does not allow that!"
Call IO.O
Exit Sub
Case 58
If Last.Command.Type Then
If UserRecord.ClassType=8 Then
If Int(Rnd*12+5)>(UserRecord.Stats(6)+UserRecord.Stats(7)) Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
Call Monster.Died
Exit Sub
Endif
Endif
Strng="Your class does not allow that!"
Call IO.O
Exit Sub
Case 60
If MonsterArray(Monster.Temp).Magic<=True Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
If Config2(63) Then
Out2=Config3(35)
Call Equate(Temp#)
Else
Temp#=(Rnd*5+UserRecord.Level)>MonsterArray(Monster.Temp).Level
Endif
If Temp# Then
Previous.Command=True
MonsterArray(Monster.Temp).Magic=4
Strng="It worked!"
Call IO.O
Exit Sub
Endif
Strng="Didn't work!"
Call IO.O
Exit Sub
Case 61
If MonsterArray(Monster.Temp).Magic<=True Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
If Config2(63) Then
Out2=Config3(34)
Call Equate(Temp#)
Else
Temp#=UserRecord.Stats(4)>(Rnd*5+MonsterArray(Monster.Temp).Level/2)
Endif
If Temp# Then
Previous.Command=Last.Command.Number
MonsterArray(Monster.Temp).Magic=3
Strng="It worked!"
Call IO.O
Exit Sub
Endif
Strng="Didn't work!"
Call IO.O
Exit Sub
Case 62
Previous.Command=Last.Command.Number
Strng="It worked!"
Call IO.O
Exit Sub
Case 65
Magic.Spell=12
Case 67
If UserRecord.ClassType=8 Then
If MonsterArray(Monster.Temp).LevelDrain Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
If Int(Rnd*8+5)>UserRecord.Stats(6) Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
MonsterArray(Monster.Temp).Level=_
MonsterArray(Monster.Temp).Level-1
Strng="You drain a level from the "+Out3+"!"
Call IO.O
If MonsterArray(Monster.Temp).Level<=False Then
Strng="You killed the "+Out3+"!"
Call IO.O
Call Monster.Died
Exit Sub
Endif
Endif
Strng="Your class does not allow that!"
Call IO.O
Exit Sub
Case 68
If MonsterArray(Monster.Temp).Magic<=True Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
If (UserRecord.Stats(3)+UserRecord.Stats(4))>_
(Rnd*10+MonsterArray(Monster.Temp).Level/2) Then
Previous.Command=True
MonsterArray(Monster.Temp).Magic=6
Strng="It worked!"
Call IO.O
Exit Sub
Endif
Strng="Didn't work!"
Call IO.O
Exit Sub
Case 70
Previous.Command=Last.Command.Number
Strng="It worked!"
Call IO.O
Exit Sub
Case 39, 40
If Weapon5 Then
Weapon3=False
Weapon5=False
Strng="You return your shield!"
Call IO.O
Endif
Case 82, 83
If Weapon6 Then
Weapon2=False
Weapon6=False
Weapon10=False
Strng="You return your weapon!"
Call IO.O
Endif
End Select
If Magic.Spell Then
Select Case Magic.Spell
Case 5
If MonsterArray(Monster.Temp).Poison Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
If Rnd>.5 Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
MonsterArray(Monster.Temp).Poison=UserRecord.Level
Strng="You poison the "+Out3+"!"
Call IO.O
Exit Sub
Case 9
If MonsterArray(Monster.Temp).LevelDrain Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
If Rnd>.5 Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
MonsterArray(Monster.Temp).Level=_
MonsterArray(Monster.Temp).Level-1
Strng="You drain a level from the "+Out3+"!"
Call IO.O
If MonsterArray(Monster.Temp).Level<=False Then
Strng="You killed the "+Out3+"!"
Call IO.O
Call Monster.Died
Endif
Exit Sub
Case 11
If MonsterArray(Monster.Temp).Magic<=True Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
If Rnd>.5 Then
Strng="Didn't work!"
Call IO.O
Endif
MonsterArray(Monster.Temp).Magic=4
Strng="It worked!"
Call IO.O
Exit Sub
Case 12
If MonsterArray(Monster.Temp).LevelDrain=False Then
Strng="That's not undead!"
Call IO.O
Exit Sub
Endif
If Config2(63) Then
Out2=Config3(33)
Call Equate(Temp#)
Else
Temp#=(Rnd*UserRecord.Level+2)>MonsterArray(Monster.Temp).Level
Endif
If Temp# Then
Strng="You damned the "+Out3+"!"
Call IO.O
MonsterArray(Monster.Temp).Level=_
MonsterArray(Monster.Temp).Level-1
Strng="You drain a level from the "+Out3+"!"
Call IO.O
If MonsterArray(Monster.Temp).Level<=False Then
Strng="You killed the "+Out3+"!"
Call IO.O
Call Monster.Died
Exit Sub
Endif
Endif
Strng="Didn't work!"
Call IO.O
Exit Sub
Case 19
If MonsterArray(Monster.Temp).Magic<=True Then
Intoxicated=UserRecord.Level
Strng="You just became very drunk!"
Call IO.O
Exit Sub
Endif
If Rnd>.5 Then
Strng="Didn't work!"
Call IO.O
Exit Sub
Endif
MonsterArray(Monster.Temp).Magic=3
Strng="It worked!"
Call IO.O
Exit Sub
End Select
Endif
If Magic.Spell=False Then
If UserRecord.Fatigue<=False Then
UserRecord.Fatigue=False
Strng="You are too exhausted to fight!"
Call IO.O
Exit Sub
Endif
If MonsterArray(Monster.Temp).Magic<=True Then
Strng="A magical force prevents your attack!"
Call IO.O
Exit Sub
Endif
Endif
If MonsterArray(Monster.Temp).Permanent<True Then
Strng="A mysterious force prevents your attack!"
Call IO.O
Exit Sub
Endif
If Last.Command.Type Then
Select Case Last.Command.Number
Case 59, 60
If Weapon3 Then
Previous.Command=True
Strng="It worked!"
Call IO.O
Exit Sub
Endif
Previous.Command=False
Strng="You are not holding a shield!"
Call IO.O
Exit Sub
End Select
Endif
If Config2(63) Then
Out2=Config3(32)
Call Equate(Temp#)
Else
Temp#=(Rnd*10+MonsterArray(Monster.Temp).Level/10)>UserRecord.Stats(4)/2
Endif
If Temp# Then
If Magic.Spell Then
Strng="You missed!"
Call IO.O
Exit Sub
Endif
If Config2(63) Then
Out2=Config3(36)
Call Equate(Temp#)
Else
Temp#=(Rnd*15)>UserRecord.Stats(1)
Endif
If Temp# Then
Call Fumble
Endif
Strng="You missed the "+Out3+"!"
Call IO.O
Exit Sub
Endif
If Magic.Spell=False Then
Strng=Nul
Index=43
Select Case Weapon2
Case False
Strng="Punch!"
Case Else
Temp!=Rnd
If Temp!>Config1(27) Then
Strng="Double damage!"
Index=Index-1
Endif
If Temp!>Config1(26) Then
Strng="Triple damage!"
Index=Index-1
Endif
If Temp!>Config1(25) Then
Strng="Deathly damage!"
Index=Index-1
Endif
End Select
Multiplier=Config2(Index)
Endif
Select Case Last.Command.Number
Case 39, 40
Multiplier=2
Previous.Command=Last.Command.Number
Case 45
Multiplier=Multiplier+1
Case 55, 56, 57, 58
If Strng<>Nul Then
Call IO.O
Endif
Case 59
If Hidden.Player Then
Multiplier=Multiplier+1
Else
Strng="The "+Out3+" sees you!"
Call IO.O
Multiplier=Multiplier-1
Endif
Case 63
Multiplier=Multiplier+1
Previous.Command=Last.Command.Number
Case 64
Strng="Argh! You charge towards the "+Out3+"!"
Call IO.O
Multiplier=Multiplier+1
Previous.Command=Last.Command.Number
Case 66
Multiplier=Multiplier+1
Case 69
Strng="Your fists fly at the monster!"
Call IO.O
Multiplier=Config2(42)
Case 76
Multiplier=Multiplier+2
Case 82, 83
Multiplier=2
Previous.Command=Last.Command.Number
End Select
If Magic.Spell=False Then
If Weapon2 Then
Treasure.Charges(Weapon6)=Treasure.Charges(Weapon6)-1
If Treasure.Charges(Weapon6)<=False Then
Treasure.Charges(Weapon6)=False
Get 8,Treasure(Weapon6),TreasureRecord
Out2=TreasureRecord.ShortName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Strng="Your "+Out2+" breaks in half!"
Call IO.O
Call Discard(Weapon6,False)
Endif
Endif
Endif
Magic.Spell=True
Call Hit.Monster
10001
Exit Sub
10002
Resume 10001
End Sub
Sub Jail
On Local Error Goto 10012
Strng="You were just thrown in jail!"
Call IO.O
Next.Room=Val(Config3(25))
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Out2=Out2+" was just thrown in jail!"
Call Send.Mess(8,False,Room,Out2)
Strng="was thrown in jail"
Call Update.DayFile(Strng,False)
Call Enter.Room
10011
Exit Sub
10012
Resume 10011
End Sub
Sub Hit.Monster
On Local Error Goto 10022
Hidden.Player=False
If Config2(63) Then
Out2=Config3(30)
If Magic.Spell=False Then
If Last.Command.Number=71 Then
Out2=Config3(43)
Endif
Else
If SpellRecord.Equation=True Then
Out2=SpellRecord.SpellEquate
Out2=Rtrim$(Out2)
Endif
Endif
Call Equate(Temp#)
Else
If Last.Command.Number=71 Then
Temp#=Int(Rnd*UserRecord.Stats(2)+UserRecord.Stats(3)*_
(Psi.Attack.Mode+Multiplier))
Else
Temp#=Int((Rnd*UserRecord.Stats(1)+UserRecord.Level/2)+_
(Multiplier+(UserRecord.Weapons(UserRecord.Proficiency)/100))+Weapon2)
Endif
Endif
Magic.Spell=False
If Temp#>MaxInt Then
Temp2=MaxInt
Else
Temp2=Int(Temp#)
Endif
Strng="You hit the "+Out3+" for"
If Temp2=1 Then
Strng=Strng+" one hit.."
Else
If Temp2>=2 And Temp2<=10 Then
Strng=Strng+" "+Rtrim$(Numeral(Temp2))+" hits!"
Else
Strng=Strng+Str$(Temp2)+" hits!"
Endif
Endif
If Temp2<=False Then
Strng="You missed!"
Call IO.O
Exit Sub
Endif
Call IO.O
If MonsterArray(Monster.Temp).Magic>=False Then
If MonsterArray(Monster.Temp).Permanent=False Then
If MonsterArray(Monster.Temp).Hits-Temp2>False Then
If Temp2>MonsterArray(Monster.Temp).Hits*Config1(14) Then
Strng="The "+Out3+" flees from your attack!"
Call IO.O
MonsterArray(Monster.Temp).Experience=_
Int(MonsterArray(Monster.Temp).Experience/2)
Call Monster.Died
Exit Sub
Endif
Endif
Endif
Endif
If MonsterArray(Monster.Temp).Magic=True Then
MonsterArray(Monster.Temp).Magic=-2
Endif
MonsterArray(Monster.Temp).Hits=MonsterArray(Monster.Temp).Hits-Temp2
If MonsterArray(Monster.Temp).Hits<=False Then
Strng="You just killed the "+Out3+"!"
Call IO.O
Call Monster.Died
Endif
10021
Exit Sub
10022
Resume 10021
End Sub
Sub Monster.Died
On Local Error Goto 10032
If MonsterArray(Monster.Temp).Permanent<True Then
Call Remove.Monster
Exit Sub
Endif
Graphics.Off=True
Last.Command.Number=False
Strng="killed "+Prefix1+Out3
Call Update.DayFile(Strng,False)
Strng="On it you find "
Carriage.Return=True
Call IO.O
Temp9=False
For Temp2=1 To 5
Temp5=MonsterArray(Monster.Temp).Treasure(Temp2)
If Temp5>False And Temp5<=Lof(8)/Len(TreasureRecord) Then
Carriage.Return=True
Call IO.O
Get 8,Temp5,TreasureRecord
Strng=Rtrim$(TreasureRecord.TreasureName)+", "
Temp9=Temp9+1
For Temp1=1 To Room.Treasure.Max
If Room.Inventory(Temp1)=False Then
Exit For
Endif
Next
If Temp1>Room.Treasure.Max Then
Call Expand.Room
Endif
Room.Inventory(Temp1)=Temp5
Room.Inventory.Charges(Temp1)=TreasureRecord.Charges
Endif
Next
If Temp9=False Then
Strng="nothing.."
Else
Strng=Left$(Strng,Len(Strng)-2)+"."
If Temp9>1 Then
Strng="and "+Strng
Endif
Endif
Call IO.O
Monsters.Killed=Monsters.Killed+1
UserRecord.MonstersKilled=UserRecord.MonstersKilled+1
Choice=MonsterIndex(Monster.Temp)
If MonsterArray(Monster.Temp).Permanent=True Then
Get 7,Choice,MonsterRecord
MonsterRecord.Permanent=False
Put 7,Choice,MonsterRecord
Endif
If Weapon2 And Weapon10 Then
Temp2=MonsterArray(Monster.Temp).Level-UserRecord.Level
If Temp2>False Then
If Weapon10=UserRecord.Proficiency Then
Temp2=Temp2*10
Else
Temp2=Temp2*5
Endif
If Temp2>100 Then
Temp2=100
Endif
If Temp2>UserRecord.Weapons(Weapon10) Then
UserRecord.Weapons(Weapon10)=Temp2
Endif
Endif
Endif
Temp1=MonsterArray(Monster.Temp).Experience
If Temp1>False Then
If UserRecord.Experience>False Then
If Temp1>10 Then
Strng="gained"+Str$(Temp1)+" experience points"
Out2="!"
Else
If Temp1=1 Then
Strng="gained one experience point"
Out2=".."
Else
Strng="gained "+Rtrim$(Numeral(Temp1))+" experience points"
Out2="."
Endif
Endif
Strng2="You "+Strng+Out2
Call Update.DayFile(Strng,False)
Strng=Strng2
Call IO.O
UserRecord.Experience=UserRecord.Experience-Temp1
If UserRecord.Experience<False Then
UserRecord.Experience=False
Strng="You now have zero experience to Train!"
Call IO.O
Call Train
Endif
Endif
Endif
Call Remove.Monster
10031
Exit Sub
10032
Resume 10031
End Sub
Sub Hit.User
On Local Error Goto 10042
Hidden.Player=False
UserArray(User.Temp).Align1=False
UserArray(User.Temp).Align2=False
If Config2(63) Then
Out2=Config3(30)
Call Equate(Temp#)
Else
Temp#=Int((Rnd*UserRecord.Stats(1)+UserRecord.Level/2)+_
(Multiplier+(UserRecord.Weapons(UserRecord.Proficiency)/100))+Weapon2)
Endif
If Temp#>MaxInt Then
Temp2=MaxInt
Else
Temp2=Int(Temp#)
Endif
Strng="You hit "+Out3+" for"
If Temp2=1 Then
Strng=Strng+" one hit.."
Else
If Temp2>=2 And Temp2<=10 Then
Strng=Strng+" "+Rtrim$(Numeral(Temp2))+" hits!"
Else
Strng=Strng+Str$(Temp2)+" hits!"
Endif
Endif
If Temp2<=False Then
Strng="You missed!"
Call IO.O
Exit Sub
Endif
Call IO.O
UserArray(User.Temp).Bank=UserArray(User.Temp).Bank-Temp2
If UserArray(User.Temp).Bank<=False Then
Strng="You just killed "+Out3+"!"
Call IO.O
Call User.Died
Endif
10041
Exit Sub
10042
Resume 10041
End Sub
Sub User.Died
On Local Error Goto 10052
Graphics.Off=True
Last.Command.Number=False
Out3=Lcase$(Out3)
Strng="killed "+Out3
Call Update.DayFile(Strng,False)
Strng=UserRecord.CodeName
Call Decrypt(Strng)
Strng=Rtrim$(Strng)
Strng=Lcase$(Strng)
Mid$(Strng,1,1)=Ucase$(Mid$(Strng,1,1))
Out2=Strng+" killed you"
Temp2=UserIndex(User.Temp)
Call Update.LogFile(Out2,Temp2)
Call Him.Her
Strng="On "+Prefix1+" you find "
Carriage.Return=True
Call IO.O
Temp9=False
For Temp2=1 To 15
Temp5=UserArray(User.Temp).Inv(Temp2)
If Temp5>False And Temp5<=Lof(8)/Len(TreasureRecord) Then
Carriage.Return=True
Call IO.O
Get 8,Temp5,TreasureRecord
Strng=Rtrim$(TreasureRecord.TreasureName)+", "
Temp9=Temp9+1
For Temp1=1 To Room.Treasure.Max
If Room.Inventory(Temp1)=False Then
Exit For
Endif
Next
If Temp1>Room.Treasure.Max Then
Call Expand.Room
Endif
Room.Inventory(Temp1)=Temp5
Room.Inventory.Charges(Temp1)=TreasureRecord.Charges
Endif
Next
If Temp9=False Then
Strng="nothing.."
Else
Strng=Left$(Strng,Len(Strng)-2)+"."
If Temp9>1 Then
Strng="and "+Strng
Endif
Endif
Call IO.O
Put 3,User.Index,UserRecord
Temp2=UserIndex(User.Temp)
Get 3,Temp2,UserRecord
Temp5=Val(Config3(24))
User.Array1(Temp2)=Temp5
UserRecord.Room=Temp5
Temp5=User.Array2(Temp2)-1
User.Array2(Temp2)=Temp5
UserRecord.Level=Temp5
Temp3#=UserRecord.Gold
UserRecord.Gold=False
For Temp6=1 To 15
UserRecord.Inv(Temp6)=False
UserRecord.Charges(Temp6)=False
Next
Aligned=UserRecord.Align1+UserRecord.Align2
Put 3,Temp2,UserRecord
Get 3,User.Index,UserRecord
If Temp3#>False Then
Strng="You found"+Str$(Temp3#)+" gold!"
Call IO.O
Strng="found"+Str$(Temp3#)+" gold"
Call Update.DayFile(Strng,False)
UserRecord.Gold=UserRecord.Gold+Temp3#
Endif
If Aligned<False Then
If UserRecord.Align1+UserRecord.Align2<False Then
Strng="Your alignment changed!"
Call IO.O
UserRecord.Align2=1
If UserRecord.Level-UserArray(User.Temp).Level<5 Then
UserRecord.Align1=False
Else
UserRecord.Align1=1
Endif
Strng="alignment changed to "+_
Rtrim$(Alignment.Name1(UserRecord.Align1+2))+" "+_
Rtrim$(Alignment.Name2(UserRecord.Align2+2))
Call Update.DayFile(Strng,False)
Endif
Endif
Players.Killed=Players.Killed+1
UserRecord.PlayersKilled=UserRecord.PlayersKilled+1
Temp1=UserArray(User.Temp).Experience
If Temp1>False Then
If UserRecord.Experience>False Then
If Temp1>10 Then
Strng="gained"+Str$(Temp1)+" experience points"
Out2="!"
Else
If Temp1=1 Then
Strng="gained one experience point"
Out2=".."
Else
Strng="gained "+Rtrim$(Numeral(Temp1))+" experience points"
Out2="."
Endif
Endif
Strng2="You "+Strng+Out2
Call Update.DayFile(Strng,False)
Strng=Strng2
Call IO.O
UserRecord.Experience=UserRecord.Experience-Temp1
If UserRecord.Experience<False Then
UserRecord.Experience=False
Strng="You now have zero experience to Train!"
Call IO.O
Call Train
Endif
Endif
Endif
Call Remove.User
10051
Exit Sub
10052
Resume 10051
End Sub
Sub Hit.Game.Player
On Local Error Goto 10062
Strng=Nul
Select Case Last.Command.Number
Case 45, 76
Multiplier=Multiplier+2
Case Else
Index=43
Select Case Weapon2
Case False
Strng="Punch!"
Case Else
Temp!=Rnd
If Temp!>Config1(27) Then
Strng="Double damage!"
Index=Index-1
Endif
If Temp!>Config1(26) Then
Strng="Triple damage!"
Index=Index-1
Endif
If Temp!>Config1(25) Then
Strng="Deathly damage!"
Index=Index-1
Endif
Multiplier=Config2(Index)
End Select
End Select
If Strng<>Nul Then
Call IO.O
Endif
If Config2(63) Then
Out2=Config3(30)
Call Equate(Temp#)
Else
Temp#=Int((Rnd*UserRecord.Stats(1)+UserRecord.Level/2)+_
(Multiplier+(UserRecord.Weapons(UserRecord.Proficiency)/100))+Weapon2)
Endif
If Temp#>MaxInt Then
Temp2=MaxInt
Else
Temp2=Int(Temp#)
Endif
Strng="You hit "+Out3+" for"
If Temp2=1 Then
Strng=Strng+" one hit.."
Else
If Temp2>=2 And Temp2<=10 Then
Strng=Strng+" "+Rtrim$(Numeral(Temp2))+" hits!"
Else
Strng=Strng+Str$(Temp2)+" hits!"
Endif
Endif
If Temp2<=False Then
Strng="You missed!"
Call IO.O
Exit Sub
Endif
Call IO.O
Out2=Str$(Temp2)
Call Send.Mess(9,User.Temp,Room,Out2)
10061
Exit Sub
10062
Resume 10061
End Sub
Sub Remove.Monster
On Local Error Goto 10072
For Temp5=Monster.Temp To Number.Monsters-1
MonsterIndex(Temp5)=MonsterIndex(Temp5+1)
MonsterArray(Temp5)=MonsterArray(Temp5+1)
Next
Number.Monsters=Number.Monsters-1
If Number.Monsters<False Then
Number.Monsters=False
Endif
10071
Exit Sub
10072
Resume 10071
End Sub
Sub Remove.User
On Local Error Goto 10082
For Temp5=User.Temp To Number.Users-1
UserIndex(Temp5)=UserIndex(Temp5+1)
UserArray(Temp5)=UserArray(Temp5+1)
Next
Number.Users=Number.Users-1
If Number.Users<False Then
Number.Users=False
Endif
10081
Exit Sub
10082
Resume 10081
End Sub
Sub User.Attack
On Local Error Goto 10092
Call In.Room(13)
If TempA Then
Exit Sub
Endif
For User.Temp=1 To Number.Users
Var=UserIndex(User.Temp)
Call Search.Mess(Var)
If Temp Then
Call Remove.User
Endif
Next
For User.Temp=1 To Number.Users
Out3=UserArray(User.Temp).CodeName
Call Decrypt(Out3)
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Mid$(Out3,1,1)=Ucase$(Mid$(Out3,1,1))
If Hidden.Player=False Then
Aligned=UserArray(User.Temp).Align1+UserArray(User.Temp).Align2
If Aligned>=False Then
If Config2(63) Then
Out2=Config3(31)
Call Equate(Temp#)
Else
Temp#=(UserRecord.Stats(4)/2)>_
(Rnd*10+UserArray(User.Temp).Level/10)
Endif
If Temp# Then
Strng=Out3+" missed!"
Call IO.O
Else
If Previous.Command=True Then
Multiplier=Multiplier-1
Previous.Command=False
Endif
If Config2(63) Then
Out2=Config3(29)
Call Equate(Temp#)
Else
Temp#=Rnd*(UserArray(User.Temp).Bank/10-_
(Weapon1+Weapon3)/2)*Multiplier
Endif
If Temp#>MaxInt Then
Temp2=MaxInt
Else
Temp2=Int(Temp#)
Endif
Prefix1=Nul
Prefix2=Nul
Temp3#=UserRecord.Gold
Call Get.Hits
If TempD Then
Graphics.Off=True
Last.Command.Number=False
Out3=UserArray(User.Temp).CodeName
Call Decrypt(Out3)
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Strng="was killed by "+Out3
Call Update.DayFile(Strng,False)
Strng=UserRecord.CodeName
Call Decrypt(Strng)
Strng=Rtrim$(Strng)
Strng=Lcase$(Strng)
Out2="You killed "+Strng
Temp2=UserIndex(User.Temp)
Call Update.Logfile(Out2,Temp2)
If Temp3#>False Then
Out2="You found"+Str$(Temp3#)+" gold on "+Strng
Call Update.LogFile(Out2,Temp2)
Endif
Put 3,User.Index.UserRecord
Get 3,Temp2,UserRecord
UserRecord.PlayersKilled=UserRecord.PlayersKilled+1
UserRecord.Gold=UserRecord.Gold+Temp3#
Put 3,Temp2,UserRecord
Get 3,User.Index,UserRecord
Exit For
Endif
Endif
Endif
Endif
Next
10091
Exit Sub
10092
Resume 10091
End Sub
Sub Monster.Attack
On Local Error Goto 10102
Call In.Room(13)
If TempA Then
Exit Sub
Endif
Monster.Cycle=Monster.Cycle+1
If Monster.Cycle>=Room.Monster.Rate Then
Monster.Cycle=False
Endif
For Monster.Temp=1 To Number.Monsters
Temp6=MonsterArray(Monster.Temp).Magic
If Temp6>=False Then
If UserRecord.Stats(6)<=1 Then
Temp6=False
Endif
If Temp6>False Then
Temp6=Temp6-1
Endif
MonsterArray(Monster.Temp).Magic=Temp6
Endif
If Temp6<True Then
Temp6=False
Endif
If MonsterArray(Monster.Temp).Magic<=True Then
If MonsterArray(Monster.Temp).Level>=Config2(37) Then
If Monster.Cycle=False Then
Temp#=MonsterArray(Monster.Temp).Hits+_
Int(MonsterArray(Monster.Temp).Hits*Config1(9))
If Temp#<Config2(62) Then
MonsterArray(Monster.Temp).Hits=Temp#
Endif
Endif
Endif
Endif
If Hidden.Player=False And Temp6=False Then
Out3=MonsterArray(Monster.Temp).MonsterName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Multiplier=MonsterArray(Monster.Temp).Level+1
If MonsterArray(Monster.Temp).LevelDrain Then
If Rnd<(MonsterArray(Monster.Temp).DrainPercent/100) Then
Strng="The "+Out3+" casts a level drain spell!"
Call IO.O
If Weapon7 And Weapon8=2 Then
Treasure.Charges(Weapon7)=Treasure.Charges(Weapon7)-_
MonsterArray(Monster.Temp).Level
Strng="Your ring absorbs the level drain!"
Call IO.O
If Treasure.Charges(Weapon7)<=False Then
Strng="Your ring disintegrated!"
Call IO.O
Call Discard(Weapon7,True)
Endif
Else
UserRecord.Level=UserRecord.Level-1
Strng="was drained a level"
Call Update.DayFile(Strng,False)
Call New.Stats
Strng="You've been drained a level!"
Call IO.O
Call Experience(Temp#)
UserRecord.Experience=Temp#
If UserRecord.Level<=False Then
UserRecord.Level=1
Call The.Or.An
Message1="You were just killed by "+Prefix1+" "+Out3+"!"
Strng="was killed by "+Prefix1+" "+Out3
Call Update.DayFile(Strng,False)
Call Player.Died
Exit For
Endif
Endif
Endif
Endif
If MonsterArray(Monster.Temp).Poison Then
If Rnd<(MonsterArray(Monster.Temp).PoisonPercent/100) Then
Strng="The "+Out3+" casts a poison spell!"
Call IO.O
If Weapon7 And Weapon8=1 Then
Treasure.Charges(Weapon7)=Treasure.Charges(Weapon7)-_
MonsterArray(Monster.Temp).Level
Strng="Your ring absorbs the poison spell!"
Call IO.O
If Treasure.Charges(Weapon7)<=False Then
Strng="Your ring disintegrated!"
Call IO.O
Call Discard(Weapon7,True)
Endif
Else
UserRecord.Poison=True
Strng="You've been poisoned!"
Call IO.O
Endif
Endif
Endif
Magic.Spell=False
Temp4=MonsterArray(Monster.Temp).Spell
If Temp4>False And Temp4<=Spells.Max Then
SpellRecord=SpellArray(Temp4)
Magic.Spell=SpellRecord.SpellType
If Magic.Spell=2 Then
If Rnd<(MonsterArray(Monster.Temp).SpellPercent/100) Then
Strng="The "+Out3+" casts a "+_
Rtrim$(SpellRecord.SpellName)+" spell!"
Call IO.O
If Weapon7 And Weapon8=3 Then
If Weapon9=True Or Weapon9=_
MonsterArray(Monster.Temp).Spell Then
Treasure.Charges(Weapon7)=_
Treasure.Charges(Weapon7)-SpellRecord.Level
Strng="Your ring absorbs the spell!"
Call IO.O
If Treasure.Charges(Weapon7)<=False Then
Strng="Your ring disintegrated!"
Call IO.O
Call Discard(Weapon7,True)
Endif
Endif
Else
Multiplier=Int((MonsterArray(Monster.Temp).Level+_
SpellRecord.Level)/2+.5)
Endif
Endif
Endif
Endif
If MonsterArray(Monster.Temp).Poison>False Then
If Monster.Cycle=False Then
MonsterArray(Monster.Temp).Poison=_
MonsterArray(Monster.Temp).Poison-1
Strng="Poison drains the "+Out3+"!"
Call IO.O
MonsterArray(Monster.Temp).Hits=_
MonsterArray(Monster.Temp).Hits-_
Int(UserRecord.Level*UserRecord.Stats(7)/_
MonsterArray(Monster.Temp).Level)
If MonsterArray(Monster.Temp).Hits<=False Then
Strng="The "+Out3+" died from poison!"
Call IO.O
Call Monster.Died
Exit For
Endif
Endif
Endif
If Config2(63) Then
Out2=Config3(31)
Call Equate(Temp#)
Else
Temp#=(UserRecord.Stats(4)/2)>_
(Rnd*10+MonsterArray(Monster.Temp).Level/10)
Endif
If Temp# Then
Strng="The "+Out3+" missed!"
Call IO.O
Else
If Previous.Command=True Then
Multiplier=Multiplier-1
Previous.Command=False
Endif
If Config2(63) Then
If MonsterArray(Monster.Temp).Psionic=False Then
Out2=Config3(29)
Else
Out2=Nul
If MonsterArray(Monster.Temp).Equation=True Then
Out2=MonsterArray(Monster.Temp).MonsterEquate
Out2=Rtrim$(Out2)
Endif
If Out2=Nul Then
Out2=Config3(44)
Endif
Endif
Call Equate(Temp#)
Endif
If Config2(63)=False Then
If MonsterArray(Monster.Temp).Psionic=False Then
Temp#=Rnd*(MonsterArray(Monster.Temp).Hits/10-_
(Weapon1+Weapon3)/2)*Multiplier
Else
Temp#=Rnd*(MonsterArray(Monster.Temp).Hits/10-_
Psi.Defense.Mode)*MonsterArray(Monster.Temp).Psionic
Endif
Endif
If Temp#>MaxInt Then
Temp2=MaxInt
Else
Temp2=Int(Temp#)
Endif
Call The.Or.An
Prefix2=Prefix1
Prefix1="The "
Call Get.Hits
If TempD Then
Exit For
Endif
Endif
Endif
Next
10101
Exit Sub
10102
Resume 10101
End Sub
Sub Player.Attack
On Local Error Goto 10112
Graphics.Off=True
Monster.Temp=False
Prefix2=Nul
Out6=Out3
Call Hit.Player(Temp2)
If UserRecord.Vitality=False Then
Out2="was just killed by "+Out6+"!"
Call Send.Mess(4,False,False,Out2)
Last.Command="<dead>"
Call Update.Mess(4)
Call Read.Mess
Endif
10111
Exit Sub
10112
Resume 10111
End Sub
Sub Get.Hits
On Local Error Goto 10122
TempD=False
Select Case Previous.Command
Case 39
Temp2=Temp2-UserRecord.Stats(4)/2-UserRecord.Stats(1)/2
Case 40
Temp2=Temp2-(UserRecord.Stats(4)+UserRecord.Stats(1))/2
Case 61
Temp2=Temp2-UserRecord.Stats(4)/2-UserRecord.Stats(1)
Case 62
Temp2=Temp2-UserRecord.Stats(4)-UserRecord.Stats(1)
Case 63
Temp2=Temp2+UserRecord.Stats(4)/2+UserRecord.Stats(1)
Case 64
Temp2=Temp2+UserRecord.Stats(4)+UserRecord.Stats(1)
Case 70
Temp2=Temp2-UserRecord.Stats(1)/2
Case 82
Temp2=Temp2+UserRecord.Stats(4)/2+UserRecord.Stats(1)/2
Case 83
Temp2=Temp2+(UserRecord.Stats(4)+UserRecord.Stats(1))/2
End Select
Temp2=Int(Temp2)
Previous.Command=False
If Temp2<=False Then
Strng=Prefix1+Out3+" missed!"
Call IO.O
Exit Sub
Endif
If Monster.Temp Then
If Magic.Spell=False Then
Strng=Prefix1+Out3+" attacks you"
If MonsterArray(Monster.Temp).Psionic Then
Strng=Strng+" with psionics"
Endif
Strng=Strng+"!"
Call IO.O
Endif
Endif
If UserRecord.Invisible Then
Strng="Your invisibility protects you!"
Call IO.O
Exit Sub
Endif
If Vehicle2 Then
If Rnd>.75 Then
Get 8,Vehicle3,TreasureRecord
Out2=TreasureRecord.ShortName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Strng=Prefix1+Out3+" hits your "+Out2+" for"+Str$(Temp2)+" hits!"
Call IO.O
Vehicle2=Vehicle2-Temp2
If Vehicle2<=False Then
RoomRecord.Treasure(Vehicle1)=Vehicle3
RoomRecord.Treasure(Vehicle1)=False
Vehicle2=False
Vehicle3=False
Strng=Prefix1+Out3+" damaged your "+Out2+"!"
Call IO.O
Endif
Endif
Endif
Strng=Prefix1+Out3+" hits you for"
Call Hit.Player(Temp2)
If UserRecord.Vitality=False Then
TempD=True
Exit Sub
Endif
If Weapon3 Then
Treasure.Charges(Weapon5)=Treasure.Charges(Weapon5)-1
If Treasure.Charges(Weapon5)<=False Then
Treasure.Charges(Weapon5)=False
Get 8,Treasure(Weapon5),TreasureRecord
Out2=TreasureRecord.ShortName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Strng="Your "+Out2+" breaks in half!"
Call IO.O
Call Discard(Weapon5,False)
Endif
Endif
If Weapon1 Then
Treasure.Charges(Weapon4)=Treasure.Charges(Weapon4)-1
If Treasure.Charges(Weapon4)<=False Then
Treasure.Charges(Weapon4)=False
Get 8,Treasure(Weapon4),TreasureRecord
Out2=TreasureRecord.ShortName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Strng="Your "+Out2+" crumbles!"
Call IO.O
Call Discard(Weapon4,False)
Endif
Endif
10121
Exit Sub
10122
Resume 10121
End Sub
Sub Hit.Player(Var)
On Local Error Goto 10132
If Var>False Then
If UserRecord.Fatigue-Var>=False Then
UserRecord.Fatigue=UserRecord.Fatigue-Var
Strng=Strng+Str$(Var)+" fatigue points!"
Call IO.O
Exit Sub
Endif
Var=Var-UserRecord.Fatigue
If UserRecord.Fatigue>False Then
Strng=Strng+Str$(UserRecord.Fatigue)+" fatigue and"
Endif
UserRecord.Fatigue=False
Endif
Var1=Abs(Var)
If Var1>False Then
Strng=Strng+Str$(Var1)+" vitality points!"
Call IO.O
If UserRecord.Vitality-Var1<=False Then
UserRecord.Vitality=False
Message1="You were just killed!"
Strng="was killed by "+Prefix2+Out3
Call Update.DayFile(Strng,False)
Call Player.Died
Exit Sub
Endif
UserRecord.Vitality=UserRecord.Vitality-Var1
Endif
10131
Exit Sub
10132
Resume 10131
End Sub
Sub Fumble
On Local Error Goto 10142
If Weapon2 Or Weapon3 Then
Strng="You fumbled! "
Out2="You dropped your "
Graphics.Off=True
Carriage.Return=True
Call IO.O
If Weapon3 Then
Get 8,Treasure(Weapon5),TreasureRecord
Out4=TreasureRecord.ShortName
Out4=Rtrim$(Out4)
Out4=Lcase$(Out4)
Call Discard(Weapon5,False)
If Weapon2 Then
Strng=" and "+Out4
Else
Strng=Out2+Out4+"!"
Endif
Else
Strng=Nul
Endif
If Weapon2 Then
Get 8,Treasure(Weapon6),TreasureRecord
Out4=TreasureRecord.ShortName
Out4=Rtrim$(Out4)
Out4=Lcase$(Out4)
Strng=Out2+Out4+Strng+"!"
Call Discard(Weapon6,False)
Endif
Call IO.O
Graphics.Off=False
Endif
10141
Exit Sub
10142
Resume 10141
End Sub
Sub Encounter.User
On Local Error Goto 10152
Call In.Room(13)
If TempA Then
Exit Sub
Endif
Put 3,User.Index,UserRecord
For TempX=1 To Users.Max
If TempX<>User.Index Then
If Room=User.Array1(TempX) Then
If User.Array2(TempX)>False Then
If User.Array3(TempX)<=7 Then
Call Search.Mess(TempX)
If Temp=False Then
Get 3,TempX,UserRecord
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Out2=Left$(Out2,9)
If Out2<>Deleted$ Then
Temp1=False
For Temp=1 To 15
If UserRecord.Inv(Temp)<False Then
Temp1=Temp1+1
UserRecord.Inv(Temp1)=Abs(UserRecord.Inv(Temp))
UserRecord.Charges(Temp1)=UserRecord.Charges(Temp)
Else
UserRecord.Inv(Temp)=False
UserRecord.Charges(Temp)=False
Endif
Next
For Temp=1 To 5
If UserRecord.Object(Temp)<False Then
UserRecord.Object(Temp)=False
UserRecord.ObjCharges(Temp)=False
Endif
Next
Put 3,TempX,UserRecord
If Number.Users=Number.UsersMax Then
Call Expand.Users
Endif
Number.Users=Number.Users+1
UserIndex(Number.Users)=TempX
Get 3,TempX,UserArray(Number.Users)
If Config2(63) Then
Out2=Config3(37)
Call Equate(Temp#)
Else
Temp#=(UserRecord.Fatigue+UserRecord.Vitality+_
UserRecord.Magic)*UserRecord.Level+UserRecord.Stats(1)
Endif
UserArray(Number.Users).Bank=Int(Temp#)
UserArray(Number.Users).Experience=UserRecord.Level*10
Endif
Endif
Endif
Endif
Endif
Endif
Next
Get 3,User.Index,UserRecord
10151
Exit Sub
10152
Resume 10151
End Sub
Sub Encounter.Permanent
On Local Error Goto 10162
If Nonplyrs.Max>False Then
For VarX=1 To Nonplyrs.Max
Var1$=","+Rtrim$(NonplyrsArray(VarX))+","
Var2$=","+Mid$(Str$(Room),2)+","
If Instr(Var1$,Var2$) Then
Number.Monsters=Number.Monsters+1
If Number.Monsters=Number.MonstersMax Then
Call Expand.Monsters
Endif
MonsterIndex(Number.Monsters)=VarX
Get 4,VarX,MonsterArray(Number.Monsters)
MonsterArray(Number.Monsters).Magic=True
MonsterArray(Number.Monsters).Permanent=-2
Endif
Next
Endif
If RoomRecord.MonsterClass Then
For Temp1=1 To 10
Choice=Monster.Class(RoomRecord.MonsterClass,Temp1)
If Choice>False And Choice<=Lof(7)/Len(MonsterRecord) Then
Get 7,Choice,MonsterRecord
If MonsterRecord.Permanent=True Then
Number.Appearing=1
Call Get.Monster.Stats
Endif
Endif
Next
Endif
10161
Exit Sub
10162
Resume 10161
End Sub
Sub Summon.Monster
On Local Error Goto 10172
Choice=Int(Val(Parsed.Command1))
Call Get.Monster
10171
Exit Sub
10172
Resume 10171
End Sub
Sub Call.Monster
On Local Error Goto 10182
If RoomRecord.MonsterClass Then
If RoomRecord.MonsterClass<=Monclass.Max Then
Choice=Monster.Class(RoomRecord.MonsterClass,Int(Rnd*10+1))
Call Get.Monster
Endif
Endif
10181
Exit Sub
10182
Resume 10181
End Sub
Sub Encounter.Monster
On Local Error Goto 10192
TempX=RoomRecord.MonsterClass
If TempX Then
If TempX<=Monclass.Max Then
If Monster.Rate1=MaxInt Then
Monster.Rate1=1
Else
Monster.Rate1=Monster.Rate1+1
Endif
For Temp1=1 To 10
If Monster.Rate(TempX,Temp1) Then
If Monster.Rate1/Monster.Rate(TempX,Temp1)=_
Int(Monster.Rate1/Monster.Rate(TempX,Temp1)) Then
If Rnd<(Monster.Percent(TempX,Temp1)/100) Then
Choice=Monster.Class(TempX,Temp1)
Call Get.Monster
Endif
Endif
Endif
Next
Monster.Rate2=Monster.Rate2+1
If Monster.Rate2>=Room.Monster.Rate Then
Monster.Rate2=False
Choice=Monster.Class(TempX,Int(Rnd*10+1))
If MonsterRecord.Rate=False Then
If Rnd<Config1(5) Then
Call Get.Monster
Endif
Endif
Endif
Endif
Endif
10191
Exit Sub
10192
Resume 10191
End Sub
Sub Get.Monster
On Local Error Goto 10202
If Choice>False And Choice<=Lof(7)/Len(MonsterRecord) Then
Get 7,Choice,MonsterRecord
If MonsterRecord.Permanent=False Then
Number.Appearing=Int(Rnd*MonsterRecord.NumberAppearing)+1
If Number.Appearing>10 Then
Strng=Str$(Number.Appearing)+" "+Rtrim$(MonsterRecord.PluralName)
Else
If Number.Appearing>1 Then
Strng=" "+Rtrim$(Numeral(Number.Appearing))+" "+_
Rtrim$(MonsterRecord.PluralName)
Else
If Instr("aeiou",Left$(MonsterRecord.MonsterName,1)) Then
Strng="an "
Else
Strng="a "
Endif
Strng=" "+Strng+Rtrim$(MonsterRecord.MonsterName)
Endif
Endif
Strng="You encounter"+Strng+"!"
Call IO.O
Call Get.Monster.Stats
Endif
Endif
10201
Exit Sub
10202
Resume 10201
End Sub
Sub Get.Monster.Stats
On Local Error Goto 10212
For Temp2=1 To Number.Appearing
Number.Monsters=Number.Monsters+1
If Number.Monsters=Number.MonstersMax Then
Call Expand.Monsters
Endif
MonsterIndex(Number.Monsters)=Choice
Get 7,Choice,MonsterArray(Number.Monsters)
If MonsterArray(Number.Monsters).Psionic Then
Temp4=MonsterArray(Number.Monsters).PsionicSpell
MonsterArray(Number.Monsters).Psionic=False
If Temp4>False And Temp4<=Spells.Max Then
SpellRecord=SpellArray(Temp4)
If SpellRecord.Psionic Then
If SpellRecord.PsionicMode=1 Then
MonsterArray(Number.Monsters).Psionic=SpellRecord.Level
Endif
Endif
Endif
Endif
If MonsterArray(Number.Monsters).Permanent=False Then
For Temp4=1 To 5
If Rnd>Config1(24) Then
MonsterArray(Number.Monsters).Treasure(Temp4)=False
Endif
Next
Endif
Next
If RoomRecord.MonsterTrigger=Choice Then
If RoomRecord.MonsterTalk=False Then
Out3="As you step forward,"
Out4="The monster hits you for"
Call Actions
Endif
Endif
10211
Exit Sub
10212
Resume 10211
End Sub
Sub Player.Died
On Local Error Goto 10222
UserRecord.Poison=False
Vehicle2=False
Vehicle3=False
Weapon1=False
Weapon2=False
Weapon3=False
Weapon4=False
Weapon5=False
Weapon6=False
Weapon7=False
Weapon8=False
Weapon9=False
Weapon10=False
If Normal.User=False Then
Strng=Message1
Call IO.O
Strng="You were resurrected!"
Call IO.O
Next.Room=Val(Config3(24))
Number.Monsters=False
Call Enter.Room
Exit Sub
Endif
Temp4=UserRecord.Stats(5)
If Temp4>1 Then
UserRecord.Stats(5)=Temp4-1
Strng="lost one "+Rtrim$(Stat(5))+" point"
Call Update.DayFile(Strng,False)
Endif
Temp4=UserRecord.Stats(6)
If Temp4>1 Then
UserRecord.Stats(6)=Temp4-1
Strng="lost one "+Rtrim$(Stat(6))+" point"
Call Update.DayFile(Strng,False)
Endif
If Rnd>.5 Then
Temp2=Int(Rnd*4+1)
Temp4=UserRecord.Stats(Temp2)
If Temp4>1 Then
UserRecord.Stats(Temp2)=Temp4-1
Strng="lost one "+Rtrim$(Stat(Temp2))+" point"
Call Update.DayFile(Strng,False)
Endif
Endif
UserRecord.Gold=Config2(32)
Number.Monsters=False
UserRecord.Poison=False
Weight=False
Temp2=False
For Temp1=1 To 10
If RoomRecord.Treasure(Temp1)=False Then
Temp2=Temp2+1
If Temp2>Number.Inventory Then
Exit For
Endif
RoomRecord.Treasure(Temp1)=Treasure(Temp2)
RoomRecord.TreCharges(Temp1)=Treasure.Charges(Temp2)
RoomRecord.Flags(Temp1)=False
Endif
Next
Put 5,Room,RoomRecord
For Temp6=1 To 15
UserRecord.Inv(Temp6)=False
UserRecord.Charges(Temp6)=False
Next
Number.Inventory=False
UserRecord.Fatigue=False
UserRecord.Vitality=False
UserRecord.Magic=False
UserRecord.Psionic=False
Room=Val(Config3(24))
Next.Room=Val(Config3(24))
Strng=Message1
Call IO.O
Out2="has just died!"
Call Send.Mess(4,False,False,Out2)
Temp#=(Int(Rnd*10+10)+UserRecord.Stats(5)/2)>20
If Config2(63) Then
Out2=Config3(45)
Call Equate(Temp#)
Endif
If Temp#=False Then
Strng="Constitution roll failed!"
Call IO.O
Temp1=Int(UserRecord.Level*.5+.5)
If Temp1>10 Then
Strng="lost"+Str$(Temp1)+" levels"
Else
Strng="lost "+Rtrim$(Numeral(Temp1))+" level"
Endif
Call Update.DayFile(Strng,False)
UserRecord.Level=Temp1
Call Zero.Stats
Strng="You were not resurrected.."
Call IO.O
If Config2(39) Then
Call Hang.Up(9)
Exit Sub
Else
Call Enter.Room
Endif
Exit Sub
Endif
UserRecord.Level=UserRecord.Level-1
Strng="lost one level"
Call Update.DayFile(Strng,False)
Strng="You were resurrected!"
Call IO.O
If UserRecord.Stats(5)<=1 Then
Strng="Except your constitution failed!"
Call IO.O
UserRecord.Level=1
Endif
Call Zero.Stats
Call Enter.Room
10221
Exit Sub
10222
Resume 10221
End Sub
Sub Zero.Stats
On Local Error Goto 10232
Call Experience(Temp#)
UserRecord.Experience=Temp#
Call New.Stats
Call Put.User.Record
UserRecord.Flags=UserRecord.Flags And Not Rerolled
UserRecord.Flags=UserRecord.Flags And Not Alignmented
Put 3,User.Index,UserRecord
10231
Exit Sub
10232
Resume 10231
End Sub
Sub Cast.Spell(Var)
On Local Error Goto 10242
If Weapon2 Then
Strng="You must return your weapon first!"
Call IO.O
Exit Sub
Endif
Temp1=False
Temp2=False
Temp3=False
If Var Then
If UserRecord.Magic=False Then
Strng="You have no more spell points!"
Call IO.O
Exit Sub
Endif
Strng="Chant? "
Call IO.I
Out2=Ucase$(Out2)
Temp5=False
For Temp2=1 To Spells.Max
SpellRecord=SpellArray(Temp2)
Out4=SpellRecord.Chant
Out4=Rtrim$(Out4)
Out4=Ucase$(Out4)
If Out4=Out2 Then
If SpellRecord.Psionic=False Then
Temp5=True
Exit For
Endif
Endif
Out4=SpellRecord.SpellName
Out4=Rtrim$(Out4)
Out4=Ucase$(Out4)
If Out4=Out2 Then
If SpellRecord.Psionic=False Then
If Learned.Spells(Temp2) Then
Temp5=True
Exit For
Endif
Endif
Endif
Next
If Temp5=False Then
Strng="Wrong spell chant!"
Call IO.O
Exit Sub
Endif
Temp1=Cast.Spell.Type
Else
Call Find.Inventory
If Temp7=False Then
Strng="You can't use that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Potion Then
Strng="You can't use that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Edible Then
Strng="You can't use that!"
Call IO.O
Exit Sub
Endif
If TreasureRecord.Scroll Then
Strng="The scroll disintegrated!"
Call IO.O
Call Discard(Temp5,True)
Temp1=Scroll.Spell.Type
Else
If TreasureRecord.Spell=False Then
Strng="That's not a magical device!"
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
Temp6=Treasure.Charges(Temp5)
Temp6=Temp6-1
If Temp6<False Then
Temp6=False
Endif
Treasure.Charges(Temp5)=Temp6
Temp1=Use.Spell.Type
Endif
Temp2=TreasureRecord.Spell
Temp3=True
Endif
Temp7=False
SpellRecord=SpellArray(Temp2)
Magic.Spell=SpellRecord.SpellType
Multiplier=SpellRecord.Level
If Parser Then
Parsed.Command1=Parsed.Command2
Call Examine.Treasure
If Temp7 Then
Temp7=-Temp7
Endif
If Temp7=False Then
Call Num
Call Check.Inventory.Objects
If Temp7=False Then
Call Num
Call Check.Room.Objects
Endif
Endif
Endif
Call Magic
10241
Exit Sub
10242
Resume 10241
End Sub
Sub Magic
On Local Error Goto 10254
If Temp7<False Then
If Magic.Spell=1 Then
If TreasureRecord.Spell=False Then
Strng="Improper spell target for chant!"
Call IO.O
Exit Sub
Endif
Else
If Magic.Spell=6 Then
If TreasureRecord.Vehicle=False Then
Strng="Improper spell target for chant!"
Call IO.O
Exit Sub
Endif
Else
If Magic.Spell<>21 Then
Strng="Improper spell target for chant!"
Call IO.O
Exit Sub
Endif
Endif
Endif
Endif
If Temp7>False Then
Strng="Improper spell target for chant!"
Call IO.O
Exit Sub
Endif
If Temp7=False Then
If Parser Then
Temp7=True
Select Case Magic.Spell
Case 2, 5, 9, 11, 12, 19, 28
Temp7=False
End Select
If Temp7 Then
Strng="Improper spell target for chant!"
Call IO.O
Exit Sub
Endif
Endif
Endif
If Temp3=False Then
If Multiplier>UserRecord.Level Then
Strng="You are not high enough level to cast the spell!"
Call IO.O
Exit Sub
Endif
If UserRecord.Magic=False Then
Strng="You have no more spell points!"
Call IO.O
Exit Sub
Endif
If (SpellRecord.ClassType And 2^UserRecord.ClassType)=False Then
If Normal.User=True Then
Strng="Your class can't cast that spell!"
Call IO.O
Exit Sub
Endif
Endif
Temp6=UserRecord.Magic
Temp6=Temp6-Multiplier
If Temp6<False Then
Temp6=False
Endif
UserRecord.Magic=Temp6
Endif
If SpellRecord.SpellFlag And Temp1 Then
For Temp=1 To 5
TempA=SpellRecord.Ingred(Temp)
If TempA>False And TempA<=Lof(8)/Len(TreasureRecord) Then
Temp9=False
For TempB=1 To Number.Inventory
If Treasure(TempB)=TempA Then
Temp9=True
Exit For
Endif
Next
Get 8,TempA,TreasureRecord
If Temp9=False Then
Strng="You don't have the correct spell ingredients!"
Call IO.O
Out2=TreasureRecord.TreasureName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Strng="You need "+Out2+"!"
Call IO.O
Exit Sub
Endif
If Treasure.Charges(TempB)<=False Then
Out2=TreasureRecord.ShortName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Strng="The "+Out2+" are used up!"
Call IO.O
Exit Sub
Endif
Treasure.Charges(TempB)=Treasure.Charges(TempB)-1
Endif
Next
Endif
Out6=SpellRecord.SpellName
Out6=Rtrim$(Out6)
Out6=Lcase$(Out6)
If Instr("aeiou",Left$(Out6,1)) Then
Out6=" an "+Out6
Else
Out6=" a "+Out6
Endif
Strng="cast"+Out6+" spell"
Call Update.DayFile(Strng,False)
Strng=SpellRecord.Desc
Strng=Rtrim$(Strng)
If Strng=Nul Then
Strng="You cast"+Out6+" spell!"
Endif
Call IO.O
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Strng=SpellRecord.SpellName
Strng=Rtrim$(Strng)
Out2=Out2+" casts a "+Strng+" spell!"
Call Send.Mess(8,False,Room,Out2)
Get 5,Room,RoomRecord
If RoomRecord.SpellTrigger=Temp2 Then
Out3="As the spell is cast,"
Out4="You are hit for"
Call Actions
Endif
For Temp=1 To 10
If RoomRecord.Flags(Temp)=Magic.Trap Then
If RoomRecord.Treasure(Temp)=True Then
If UserRecord.Stats(2)<Int(Rnd*6+10) Then
Temp2=Int(Rnd*10+UserRecord.Level)*RoomRecord.TreCharges(Temp)
RoomRecord.Treasure(Temp)=False
RoomRecord.TreCharges(Temp)=False
RoomRecord.Flags(Temp)=False
Put 5,Room,RoomRecord
Strng="You triggered a magical trap!"
Call IO.O
Prefix2=Nul
Strng="The trap hit you for"
Out3="an exploding trap"
Call Hit.Player(Temp2)
Exit For
Endif
Endif
Endif
Next
Select Case Magic.Spell
Case 2, 5, 9, 11, 12, 19
Call Attack.Monster
Exit Sub
Case 1
If Temp7<False Then
SpellRecord=SpellArray(TreasureRecord.Spell)
If SpellRecord.SpellType=4 Then
Strng="You can't recharge that!"
Call IO.O
Exit Sub
Endif
10243 Temp#=Cdbl(UserRecord.Level)
Temp#=Temp#*2#
10244 If Temp#<0 Or Temp#>MaxInt Then
Temp#=MaxInt
Endif
If Treasure.Charges(Temp5)+Temp#>MaxInt Then
Treasure.Charges(Temp5)=MaxInt
Else
Treasure.Charges(Temp5)=Treasure.Charges(Temp5)+Temp#
Endif
If Treasure.Charges(Temp5)>TreasureRecord.Charges Then
Treasure.Charges(Temp5)=TreasureRecord.Charges
Endif
Strng="You recharge it!"
Call IO.O
Exit Sub
Endif
10245
Temp#=Cdbl(UserRecord.Level+Multiplier)
Temp#=Temp#*Config2(23)
10246
If Temp#<0 Or Temp#>MaxInt Then
Temp#=MaxInt
Endif
If UserRecord.Magic+Temp#>MaxInt Then
UserRecord.Magic=MaxInt
Else
UserRecord.Magic=UserRecord.Magic+Temp#
Endif
Call New.Stats
Strng="You now have"+Str$(UserRecord.Magic)+" magic points!"
Call IO.O
Exit Sub
Case 3
If UserRecord.Stats(6)<Config2(31) Then
UserRecord.Stats(6)=UserRecord.Stats(6)+1
Strng=Rtrim$(Stat(6))
Strng="gained one "+Strng+" point"
Call Update.DayFile(Strng,False)
Strng="You feel a magical glow about you!"
Call IO.O
Exit Sub
Endif
Strng="Nothing happened.."
Call IO.O
Exit Sub
Case 4
If Temp1=Use.Spell.Type Or Temp1=Scroll.Spell.Type Then
UserRecord.Flags=UserRecord.Flags And Not Wished
Endif
Strng="The Ghods thunder.."
Call IO.O
Strng="What do you wish for?"
Call IO.I
Stored.Parsed.Command2=Out2
Parsed.Command1=Stored.Parsed.Command2
Call Numeric
Out2=Parsed.Command1
Out2=Lcase$(Out2)
Call Drop(False)
Case 6
If Temp7<False Then
Get 5,Room,RoomRecord
Temp2=RoomRecord.TreCharges(Temp5)
Temp2=Temp2+UserRecord.Level*2
If Temp2>TreasureRecord.VehicleHits Then
Temp2=TreasureRecord.VehicleHits
Endif
RoomRecord.TreCharges(Temp5)=Temp2
Out3=TreasureRecord.ShortName
Out3=Rtrim$(Out3)
Put 5,Room,RoomRecord
Strng="The "+Out3+" now has"+Str$(Temp2)+" hits!"
Call IO.O
Exit Sub
Endif
10247
Temp#=Cdbl(UserRecord.Level+Multiplier)
Temp#=Temp#*Config2(21)
10248
If Temp#<0 Or Temp#>MaxInt Then
Temp#=MaxInt
Endif
If UserRecord.Fatigue+Temp#>MaxInt Then
UserRecord.Fatigue=MaxInt
Else
UserRecord.Fatigue=UserRecord.Fatigue+Temp#
Endif
Call New.Stats
Strng="You now have"+Str$(UserRecord.Fatigue)+" fatigue points!"
Call IO.O
Exit Sub
Case 7
10249
Temp#=Cdbl(UserRecord.Level+Multiplier)
Temp#=Temp#*Config2(22)
10250
If Temp#<0 Or Temp#>MaxInt Then
Temp#=MaxInt
Endif
If UserRecord.Vitality+Temp#>MaxInt Then
UserRecord.Vitality=MaxInt
Else
UserRecord.Vitality=UserRecord.Vitality+Temp#
Endif
Call New.Stats
Strng="You now have"+Str$(UserRecord.Vitality)+" vitality points!"
Call IO.O
Exit Sub
Case 8
If UserRecord.Poison Then
UserRecord.Poison=False
Strng="The poison disappeared!"
Call IO.O
Exit Sub
Endif
Strng="Nothing happened!"
Call IO.O
Exit Sub
Case 10
Next.Room=SpellRecord.Teleport
Call Teleport
Call Enter.Room
Exit Sub
Case 13
Pass.Door=True
Strng="You hear a click!"
Call IO.O
Exit Sub
Case 14
For Temp5=1 To Monclass.Max
Choice=Monster.Class(Temp5,Int(Rnd*10+1))
If Choice Then
Get 7,Choice,MonsterRecord
If MonsterRecord.Level=UserRecord.Level Then
Call Get.Monster
Exit Sub
Endif
Endif
Next
Strng="Nothing conjures!"
Call IO.O
Exit Sub
Case 15
Strng="You can't cast a psi spell!"
Call IO.O
Exit Sub
Case 16
For Temp5=1 To 10
Temp4=RoomRecord.Object(Temp5)
If Temp4>False And Temp4<=Lof(6)/Len(ObjectRecord) Then
Get 6,Temp4,ObjectRecord
If ObjectRecord.Invisible Or ObjectRecord.Hidden Then
Strng="You detect hidden objects here!"
Call IO.O
Exit Sub
Endif
Endif
Next
Strng="You detect nothing."
Call IO.O
Exit Sub
Case 17
Temp2=False
Temp4=False
For Temp5=1 To 11
Get 5,Room,RoomRecord
Temp1=RoomRecord.Direct(Temp5)
If Temp1 Then
Get 5,Temp1,RoomRecord
If RoomRecord.MonsterClass>Temp2 Then
Temp4=Temp5
Temp2=RoomRecord.MonsterClass
Endif
Endif
Next
Get 5,Room,RoomRecord
If Temp4 Then
Strng="You detect evil going "+Rtrim$(Direction(Temp4))+"!"
Call IO.O
Exit Sub
Endif
Strng="You detect no evil presence."
Call IO.O
Exit Sub
Case 18
For Temp5=1 To 10
Temp4=RoomRecord.Object(Temp5)
If Temp4>False And Temp4<=Lof(6)/Len(ObjectRecord) Then
Get 6,Temp4,ObjectRecord
If ObjectRecord.Trap Then
Strng="You detect traps here!"
Call IO.O
Exit Sub
Endif
Endif
Next
Strng="You detect nothing."
Call IO.O
Exit Sub
Case 20
Temp9=False
For Temp5=1 To 10
If RoomRecord.Treasure(Temp5)=False Then
Temp9=True
Exit For
Endif
Next
If Temp9=False Then
Strng="You didn't set the trap!"
Call IO.O
Exit Sub
Endif
If UserRecord.Stats(2)<Int(Rnd*5+5) Then
Strng="You didn't set the trap!"
Call IO.O
Exit Sub
Endif
If UserRecord.Stats(2)+UserRecord.Stats(3)<Int(Rnd*10+5) Then
Strng="The trap explodes in your face!"
Call IO.O
Prefix2=Nul
Temp2=Int(Rnd*10+2)*UserRecord.Level
Strng="The trap hit you for"
Out3="setting a trap"
Call Hit.Player(Temp2)
Exit Sub
Endif
RoomRecord.Treasure(Temp5)=True
RoomRecord.TreCharges(Temp5)=UserRecord.Level
RoomRecord.Flags(Temp5)=Magic.Trap
Put 5,Room,RoomRecord
Strng="You set a magical trap!"
Call IO.O
Exit Sub
Case 21
Temp9=False
For Temp=1 To 10
If RoomRecord.Treasure(Temp)=False Then
Temp9=True
Exit For
Endif
Next
If Temp9=False Then
Strng="You didn't hide the object!"
Call IO.O
Exit Sub
Endif
If UserRecord.Stats(2)<Int(Rnd*5+4) Then
Strng="You didn't hide the object!"
Call IO.O
Exit Sub
Endif
Call Discard(Temp5,True)
RoomRecord.Treasure(Temp)=Abs(Temp7)
RoomRecord.TreCharges(Temp)=Temp6
RoomRecord.Flags(Temp)=Magically.Hidden
Put 5,Room,RoomRecord
Strng="You hide the object magically!"
Call IO.O
Exit Sub
Case 22
Graphics.Off=True
Strng="You find "
Carriage.Return=True
Call IO.O
Temp8=False
Temp1=False
Strng=Nul
For Temp5=1 To 10
Out2=Nul
If RoomRecord.Flags(Temp5)=Magically.Hidden Then
Temp2=RoomRecord.Treasure(Temp5)
If Temp2>False And Temp2<=Lof(8)/Len(TreasureRecord) Then
Get 8,Temp2,TreasureRecord
Out2=TreasureRecord.TreasureName
Out2=Rtrim$(Out2)+" [inv]"
Endif
Endif
If Strng<>Nul And Out2<>Nul Then
Carriage.Return=True
Call IO.O
Temp1=Temp1+1
Endif
If Out2<>Nul Then
Temp8=True
Strng=Out2+", "
Endif
Next
If Temp8=False Then
Strng="nothing special.."
Endif
If Temp8 And Strng<>Nul Then
Strng=Left$(Strng,Len(Strng)-2)+"."
If Temp1>1 Then
Strng="and "+Strng
Endif
Endif
Call IO.O
Graphics.Off=False
Exit Sub
Case 23
Invisible=Int((UserRecord.Level+2)/Room.Health.Rate)
If Invisible>False Then
UserRecord.Invisible=True
Strng="You are now invisible!"
Call IO.O
Exit Sub
Endif
UserRecord.Invisible=False
Invisible=False
Strng="Didn't work!"
Call IO.O
Exit Sub
Case 24
Parsed.Command1=Last.Monster
Call Check.Monster
If Monster.Temp=False Then
Strng="You are not fighting a monster now!"
Call IO.O
Exit Sub
Endif
Graphics.Off=True
Call The.Or.An
Out3=MonsterArray(Monster.Temp).MonsterName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Temp4=MonsterArray(Monster.Temp).Level
Strng="You are fighting "+Prefix1+Out3+_
" (level"+Str$((Temp4-1)*2+1)+" to"+Str$(Temp4*2)+")"
Call IO.O
Strng="The "+Out3+" has"+Str$(MonsterArray(Monster.Temp).Hits)+_
" hits and"+Str$(MonsterArray(Monster.Temp).Experience)+" experience."
Call IO.O
Temp4=MonsterArray(Monster.Temp).Spell
If Temp4>False And Temp4<=Spells.Max Then
SpellRecord=SpellArray(Temp4)
Strng="It can cast "+Rtrim$(SpellRecord.SpellName)+" spells."
Call IO.O
Endif
If MonsterArray(Monster.Temp).Poison Then
Strng="It can poison."
Call IO.O
Endif
If MonsterArray(Monster.Temp).LevelDrain Then
Strng="It can drain levels."
Call IO.O
Endif
If MonsterArray(Monster.Temp).Psionic Then
Strng="It can cast psi spells."
Call IO.O
Endif
If MonsterArray(Monster.Temp).Magic Then
Strng="It is magical."
Call IO.O
Endif
If MonsterArray(Monster.Temp).Block Then
Strng="It blocks exits."
Call IO.O
Endif
If MonsterArray(Monster.Temp).Prevent Then
Strng="It prevents treasure take."
Call IO.O
Endif
If MonsterArray(Monster.Temp).Follow Then
Strng="It follows users."
Call IO.O
Endif
If MonsterArray(Monster.Temp).Jail Then
Strng="It jails attacker."
Call IO.O
Endif
If MonsterArray(Monster.Temp).Teleport Then
Strng="It can teleport."
Call IO.O
Endif
Graphics.Off=False
Exit Sub
Case 25
Graphics.Off=True
Strng="You see "
Carriage.Return=True
Call IO.O
Temp1=False
Temp8=False
Strng=Nul
For Temp5=1 To 10
Out2=Nul
If RoomRecord.Flags(Temp5)=Hidden.Object Then
Temp2=RoomRecord.Treasure(Temp5)
If Temp2>False And Temp2<=Lof(8)/Len(TreasureRecord) Then
Get 8,Temp2,TreasureRecord
Out2=TreasureRecord.TreasureName
Out2=Rtrim$(Out2)+" [inv]"
Endif
Endif
If Strng<>Nul And Out2<>Nul Then
Carriage.Return=True
Call IO.O
Temp1=Temp1+1
Endif
If Out2<>Nul Then
Temp8=True
Strng=Out2+", "
Endif
Next
If Temp8=False Then
Strng="nothing special.."
Endif
If Temp8 And Strng<>Nul Then
Strng=Left$(Strng,Len(Strng)-2)+"."
If Temp1>1 Then
Strng="and "+Strng
Endif
Endif
Call IO.O
Graphics.Off=False
Exit Sub
Case 26
Graphics.Off=True
Strng="You see "
Carriage.Return=True
Call IO.O
Temp8=False
Temp1=False
Strng=Nul
For Temp5=1 To 10
Out2=Nul
If RoomRecord.Flags(Temp5)=Magic.Trap Then
If RoomRecord.Treasure(Temp5)=True Then
Out2="a magical trap "
Out2=Out2+"["+Mid$(Str$(RoomRecord.TreCharges(Temp5)),2)+" hits]"
Endif
Endif
If Strng<>Nul And Out2<>Nul Then
Carriage.Return=True
Call IO.O
Temp1=Temp1+1
Endif
If Out2<>Nul Then
Temp8=True
Strng=Out2+", "
Endif
Next
If Temp8=False Then
Strng="nothing special.."
Endif
If Strng<>Nul Then
Strng=Left$(Strng,Len(Strng)-2)+"."
If Temp1>1 Then
Strng="and "+Strng
Endif
Endif
Call IO.O
Graphics.Off=False
Exit Sub
Case 27
10251
Temp#=Cdbl(UserRecord.Level+Multiplier)
Temp#=Temp#*Config2(82)
10252
If Temp#<0 Or Temp#>MaxInt Then
Temp#=MaxInt
Endif
If UserRecord.Psionic+Temp#>MaxInt Then
UserRecord.Psionic=MaxInt
Else
UserRecord.Psionic=UserRecord.Psionic+Temp#
Endif
Call New.Stats
Strng="You now have"+Str$(UserRecord.Psionic)+" psionic points!"
Call IO.O
Exit Sub
Case 28
If UserRecord.Psionic=False Then
Strng="You have no more psionic points!"
Call IO.O
Exit Sub
Endif
Temp6=UserRecord.Psionic
Temp6=Temp6-Multiplier
If Temp6<False Then
Temp6=False
Endif
UserRecord.Psionic=Temp6
If Len(Parsed.Command1) Then
Call Search.Mess(False)
If Temp=False Then
Out2=Parsed.Command1
Out2=Lcase$(Out2)
Strng=Out2+" is not online!"
Call IO.O
Exit Sub
Endif
Strng="Message:"
Call IO.I
Call Send.Mess(10,TempB,False,Out2)
Exit Sub
Endif
Strng="Message:"
Call IO.I
Call Send.Mess(11,False,False,Out2)
Exit Sub
Case Else
Strng="You can't cast that spell!"
Call IO.O
End Select
10253
Exit Sub
10254
If Erl=10243 Then
Resume 10244
Endif
If Erl=10245 Then
Resume 10246
Endif
If Erl=10247 Then
Resume 10248
Endif
If Erl=10249 Then
Resume 10250
Endif
If Erl=10251 Then
Resume 10252
Endif
Resume 10253
End Sub
Sub Psi.Mode
On Local Error Goto 10262
Temp3=False
Out2="attack"
Out3=Lcase$(Parsed.Command1)
If Out2=Out3 Then
Temp3=1
Endif
Out2="defense"
If Out2=Out3 Then
Temp3=2
Endif
If Temp3=False Then
Strng="You can only use psi mode attack or defense!"
Call IO.O
Exit Sub
Endif
Strng="Psi spell?"
Call IO.I
Out2=Ucase$(Out2)
Out2=Rtrim$(Out2)
Temp9=False
For Temp5=1 To Spells.Max
SpellRecord=SpellArray(Temp5)
Strng=SpellRecord.Chant
Strng=Rtrim$(Strng)
If Strng=Out2 Then
If SpellRecord.Psionic Then
Temp9=True
Exit For
Endif
Endif
Next
If Temp9=False Then
Strng="Unknown psi spell!"
Call IO.O
Exit Sub
Endif
Out6=SpellRecord.SpellName
Out6=Rtrim$(Out6)
Out6=Lcase$(Out6)
If Temp3<>SpellRecord.PsionicMode Then
Strng="Incorrect spell for psi mode!"
Call IO.O
Exit Sub
Endif
Temp1=SpellRecord.Level
If UserRecord.Psionic=False Then
Strng="You have no more psi points!"
Call IO.O
Exit Sub
Endif
Temp6=UserRecord.Psionic
Temp6=Temp6-Temp1
If Temp6<False Then
Temp6=False
Endif
UserRecord.Psionic=Temp6
If Temp3=1 Then
Psi.Attack.Mode=Temp1
Else
Psi.Defense.Mode=Temp1
Endif
Strng="You cast a "+Out6+" psi spell!"
Call IO.O
Strng="cast a "+Out6+" psi spell"
Call Update.DayFile(Strng,False)
Parsed.Command1=Last.Monster
Out2=UserRecord.CodeName
Call Decrypt(Out2)
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Out2=Out2+" casts a psionic spell!"
Call Send.Mess(8,False,Room,Out2)
If Temp3=2 Then
Strng="Your psi defense mode is now active."
Call IO.O
Endif
10261
Exit Sub
10262
Resume 10261
End Sub
Sub Talk.To.Monster
On Local Error Goto 10272
Call Check.Monster
If Monster.Temp=False Then
Call Check.User
If User.Temp=False Then
Strng="You can't talk to that!"
Call IO.O
Exit Sub
Endif
Call He.She
Strng=Prefix1+" sneers wickedly at you.."
Call IO.O
Exit Sub
Endif
Temp2=MonsterArray(Monster.Temp).Talk(Int(Rnd*5+1))
Strng=Nul
If Temp2>False And Temp2<=Lof(9)/Len(MonsterTalkRecord) Then
Get 9,Temp2,MonsterTalkRecord
Strng=Rtrim$(MonsterTalkRecord.TalkMessage)
Endif
If Strng=Nul Then
Strng="The monster doesn't reply!"
Endif
Call IO.O
Get 5,Room,RoomRecord
If MonsterIndex(Monster.Temp)=RoomRecord.MonsterTalk Then
Out3="As you begin to speak,"
Out4="The monster hits you for"
Call Actions
Endif
10271
Exit Sub
10272
Resume 10271
End Sub
Sub Offer
On Local Error Goto 10282
Call Parse
If Parser=False Then
Strng="Offer to whom?"
Call IO.O
Exit Sub
Endif
Temp$=Parsed.Command1
Parsed.Command1=Parsed.Command2
Call Parse
If Parser Then
If Node<=False Then
Strng="You can't offer!"
Call IO.O
Exit Sub
Endif
Temp2$=Parsed.Command1
Temp3$=Parsed.Command2
Call Search.Mess(False)
VarX=TempC
If TempB=User.Index Or Temp<>Room Then
Strng="You can't offer to that player!"
Call IO.O
Exit Sub
Endif
Get 1,VarX,MessWorkRecord1
If MessWorkRecord1.OfferTime>False Then
Strng=MessWorkRecord1.UserName
Strng=Rtrim$(Strng)
Strng=Lcase$(Strng)
Mid$(Strng,1,1)=Ucase$(Mid$(Strng,1,1))
Strng=Strng+" already has an offer!"
Call IO.O
Exit Sub
Endif
VarA=False
Parsed.Command1=Temp3$
Call Search.User.Inventory
If Temp7=False Then
VarA=Int(Val(Parsed.Command1))
Endif
If Temp7=False And VarA=False Then
Strng="You can't offer for that!"
Call IO.O
Exit Sub
Endif
Var1=Temp5
Var2=Temp6
Var3=Temp7
VarB=False
Parsed.Command1=Temp$
Call Check.Inventory.Treasure
If Temp7=False Then
VarB=Int(Val(Parsed.Command1))
Endif
If Temp7=False And VarB=False Then
Strng="You can't offer that!"
Call IO.O
Exit Sub
Endif
If VarB>False Then
If UserRecord.Gold-VarB<False Then
Strng="You don't have that much gold!"
Call IO.O
Exit Sub
Endif
Endif
Var4=Temp5
Var5=Temp6
Var6=Temp7
TempX=VarX
Gosub Send.Node.Offer
TempX=Noden+1
Gosub Send.Node.Offer
Out2="offers you"
If VarB>False Then
Out2=Out2+Str$(VarB)+" gold"
Else
Get 8,Var6,TreasureRecord
Out3=TreasureRecord.TreasureName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Out2=Out2+" "+Out3
Endif
Out2=Out2+" for"
If VarA>False Then
Out2=Out2+Str$(VarA)+" gold"
Else
Get 8,Var3,TreasureRecord
Out3=TreasureRecord.TreasureName
Out3=Rtrim$(Out3)
Out3=Lcase$(Out3)
Out2=Out2+" "+Out3
Endif
Out2=Out2+"!"
Call Send.Mess(19,TempB,Room,Out2)
Exit Sub
Endif
Call Check.Monster
If Monster.Temp=False Then
Strng="That's not here!"
Call IO.O
Exit Sub
Endif
Temp9=False
Temp2=False
If MonsterArray(Monster.Temp).Magic=False Then
If MonsterArray(Monster.Temp).Permanent=False Then
Parsed.Command1=Temp$
Call Check.Inventory.Treasure
If Temp7 Then
If TreasureRecord.Recep Then
Temp9=True
Endif
If TreasureRecord.Spell Then
SpellRecord=SpellArray(TreasureRecord.Spell)
If SpellRecord.SpellType=4 Then
Temp9=True
Endif
Endif
If Abs(TreasureRecord.Plus)>=Config2(27) Then
Temp9=True
Endif
Else
Temp2=Int(Val(Parsed.Command1))
If Temp2>False Then
If Temp2>Config1(15)*MonsterArray(Monster.Temp).Level Then
If UserRecord.Gold-Temp2>=False Then
Temp9=True
Endif
Endif
Endif
Endif
Endif
Endif
If Temp9=False Then
Strng="The monster ignores your offer!"
Call IO.O
Exit Sub
Endif
Call Remove.Monster
If Temp2 Then
UserRecord.Gold=UserRecord.Gold-Temp2
Strng="The monster takes your offer and leaves!"
Call IO.O
Exit Sub
Endif
Call Discard(Temp5,True)
Strng="The monster trades with you and leaves!"
Call IO.O
Exit Sub
Send.Node.Offer:
Get 1,TempX,MessWorkRecord1
MessWorkRecord1.OfferTime=Timer+30!
If VarB>False Then
MessWorkRecord1.GoldOffer=VarB
MessWorkRecord1.ItemOffer=False
MessWorkRecord1.OfferCharges=False
Else
MessWorkRecord1.GoldOffer=False
MessWorkRecord1.ItemOffer=Var6
MessWorkRecord1.OfferCharges=Var5
Endif
If VarA>False Then
MessWorkRecord1.GoldFor=VarA
MessWorkRecord1.ItemFor=False
MessWorkRecord1.ForCharges=False
Else
MessWorkRecord1.GoldFor=False
MessWorkRecord1.ItemFor=Var3
MessWorkRecord1.ForCharges=Var2
Endif
MessWorkRecord1.FromNode=Noden+1
Put 1,TempX,MessWorkRecord1
Return
10281
Exit Sub
10282
Resume 10281
End Sub
Sub Accept.Offer
On Local Error Goto 10292
If Node<=False Then
Strng="There are no offers!"
Call IO.O
Exit Sub
Endif
Get 1,Noden+1,MessWorkRecord1
If MessWorkRecord1.OfferTime<=False Then
Strng="There are no offers to accept!"
Call IO.O
Exit Sub
Endif
Var1=MessWorkRecord1.GoldFor
If Var1>False Then
If UserRecord.Gold-Var1<False Then
Strng="You don't have enough gold to trade!"
Call IO.O
Exit Sub
Endif
Else
Var2=False
For Temp5=1 To Number.Inventory
If Treasure(Temp5)=MessWorkRecord1.ItemFor Then
Var2=Temp5
Exit For
Endif
Next
If Var2=False Then
Strng="You don't have the item to trade!"
Call IO.O
Endif
Endif
Strng="You accept the offer and trade!"
Call IO.O
If Var1>False Then
UserRecord.Gold=UserRecord.Gold-Var1
Else
Call Discard(Temp5,True)
Endif
Var1=MessWorkRecord1.GoldOffer
If Var1>False Then
UserRecord.Gold=UserRecord.Gold+Var1
Else
Temp7=MessWorkRecord1.ItemOffer
Temp6=MessWorkRecord1.OfferCharges
Call Add.Inventory(Temp7,Temp6)
Endif
Temp1=MessWorkRecord1.FromNode
MessWorkRecord1.OfferTime=False
Put 1,Noden+1,MessWorkRecord1
Get 1,Temp1,MessWorkRecord1
MessWorkRecord1.OfferTime=True
Put 1,Temp1,MessWorkRecord1
10291
Exit Sub
10292
Resume 10291
End Sub
Sub Rust.Weapon
On Local Error Goto 10302
If Room.Rust.Rate=False Then
Exit Sub
Endif
Rust.Rate=Rust.Rate+1
If Rust.Rate<Room.Rust.Rate Then
Exit Sub
Endif
Rust.Rate=False
Temp1=Weapon2
Temp2=Weapon6
Gosub Rust.Inventory
Temp1=Weapon3
Temp2=Weapon5
Gosub Rust.Inventory
Temp1=Weapon1
Temp2=Weapon4
Gosub Rust.Inventory
Temp1=Weapon8
Temp2=Weapon7
Gosub Rust.Inventory
Exit Sub
Rust.Inventory:
If Temp1 Then
Get 8,Treasure(Temp2),TreasureRecord
If TreasureRecord.Rustable=True Then
If Rnd<(TreasureRecord.RustPercent/100) Then
Strng=TreasureRecord.ShortName
Strng=Rtrim$(Strng)
Strng=Lcase$(Strng)
Strng="Your "+Strng+" rusts!"
Call IO.O
Call Discard(Temp2,True)
Endif
Endif
Endif
Return
10301
Exit Sub
10302
Resume 10301
End Sub
Sub Steal.Treasure
On Local Error Goto 10312
If Room.Steal.Rate=False Then
Exit Sub
Endif
Steal.Rate=Steal.Rate+1
If Steal.Rate<Room.Steal.Rate Then
Exit Sub
Endif
Steal.Rate=False
If Number.Monsters=False Then
Exit Sub
Endif
For Temp2=1 To Number.Inventory
If Treasure(Temp2) Then
Get 8,Treasure(Temp2),TreasureRecord
If TreasureRecord.Stealable=True Then
If Rnd<(TreasureRecord.StealPercent/100) Then
For Temp3=1 To Number.Monsters
If MonsterArray(Temp3).Permanent=False Then
For Temp4=1 To 5
If MonsterArray(Temp3).Treasure(Temp4)=False Then
MonsterArray(Temp3).Treasure(Temp4)=Treasure(Temp2)
Strng=MonsterArray(Temp3).MonsterName
Strng=Rtrim$(Strng)
Out2=TreasureRecord.ShortName
Out2=Rtrim$(Out2)
Out2=Lcase$(Out2)
Strng="The "+Strng+" steals your "+Out2+"!"
Call IO.O
Call Discard(Temp2,True)
Exit Sub
Endif
Next
Endif
Next
Endif
Endif
Endif
Next
10311
Exit Sub
10312
Resume 10311
End Sub