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