home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / d / dnd29c4.zip / SOURCE.ZIP / DNDBBS.BAS < prev    next >
BASIC Source File  |  1993-01-07  |  91KB  |  3,924 lines

  1.  Rem dndbbs.bas v2.9c
  2.  Rem $Include: 'dndbbs.inc'
  3.  
  4.  Randomize Timer
  5.  On Error Goto 10002
  6.  If Chained=False Then
  7.     Call Get.Command
  8.     Call Read.Config
  9.     Call Init.Driver
  10.  Else
  11.     Chained=False
  12.     Local.Mode=Remote
  13.     Call Get.Config
  14.     Call Open.Files
  15.     Call Read.Data
  16.     If Shelled Then
  17.        Get 3,User.Index,UserRecord
  18.        Call Status.Line(1)
  19.     Endif
  20.  Endif
  21.  Do
  22.     If Shelled=False Then
  23.        If Relogging=False Then
  24.           Call Clear.Screen
  25.           Call Open.Modem
  26.        Endif
  27.        Relogging=False
  28.        Call Login
  29.        If Logged.In Then
  30.           Call Get.User.Record
  31.           Call Status.Line(1)
  32.        Endif
  33.     Endif
  34.     Shelled=False
  35.     Rust.Rate=False
  36.     Steal.Rate=False
  37.     Monster.Rate1=False
  38.     Room.Rate=False
  39.     Do While Security.Guard
  40.        Call Check.Next.Room
  41.        Monster.Rate1=False
  42.        Call Encounter.Permanent
  43.        If Config2(55) Then
  44.           Call Encounter.User
  45.        Endif
  46.        Out2=UserRecord.CodeName
  47.        Call Decrypt(Out2)
  48.        Out2=Rtrim$(Out2)
  49.        Out2=Lcase$(Out2)
  50.        Out2=Out2+" just entered the room."
  51.        Call Send.Mess(8,False,Room,Out2)
  52.        Call Display.Room
  53.        New.Room=False
  54.        Do While Not New.Room And Security.Guard
  55.           Call Main.Loop.Update
  56.           If Wait.Mode Then
  57.              Call Wait.Loop
  58.           Endif
  59.           If Auto.Mode Then
  60.              Call Auto.Loop
  61.           Endif
  62.           If Follow.Mode Then
  63.              Call Follow.Player
  64.           Endif
  65.           If New.Room=False Then
  66.              Call Command.Loop
  67.           Endif
  68.        Loop
  69.     Loop
  70.     If Logged.In Then
  71.        Call Status.Line(-2)
  72.        If OutZ<>Nul Then
  73.           If Node>False Then
  74.              OutZ=OutZ+" (Node "+Chr$(Node)+")"
  75.           Endif
  76.           Call Send.Mess(4,False,False,OutZ)
  77.           Call Update.DayFile(OutZ,True)
  78.        Endif
  79.        Call Update.Mess(True)
  80.        Call Put.User.Record
  81.        Call Clean.Room
  82.        Call Update.LastUser
  83.     Endif
  84.     If Node<False Then
  85.        Exit Do
  86.     Endif
  87.     Strng=Nul
  88.     Call IO.O
  89.     If Config2(75) Then
  90.        Call Time.Online
  91.        Call IO.O
  92.        Call More.Prompt
  93.     Endif
  94.     If Config2(76) Then
  95.        Call Top.Ten
  96.        Call IO.O
  97.     Endif
  98.     If Config2(77) Then
  99.        Call Out.File(Logoff.FileName)
  100.        Strng=Nul
  101.        Call IO.O
  102.     Endif
  103.     If Config2(78) Then
  104.        Strng="Press "+Enter$+" to exit the adventure:"
  105.        No.Echo=True
  106.        Line.Length=1
  107.        Call IO.I
  108.        No.Echo=False
  109.        Call IO.O
  110.     Endif
  111.     If Relogging=False Then
  112.        If Config2(47) Then
  113.           Strng2="the BBS"
  114.           If Len(BBS.Name) Then
  115.              Strng2=BBS.Name
  116.           Endif
  117.           Strng="Returning you to "+Strng2+", please wait.."
  118.           Call IO.O
  119.           Exit Do
  120.        Endif
  121.        If Bypass.Screen Or Bypass.Login Then
  122.           Exit Do
  123.        Endif
  124.     Endif
  125.  Loop
  126. 10001
  127.  Call Clear.Screen
  128.  End
  129. 10002
  130.  Resume 10001
  131.  
  132. Sub Main.Loop.Update
  133.  On Local Error Goto 10012
  134.  Call Sorter
  135.  Call Health.Update
  136.  Call Rust.Weapon
  137.  Call Steal.Treasure
  138.  Call New.Stats
  139.  If Number.Monsters Then
  140.     Call Monster.Attack
  141.  Endif
  142.  If Config2(55) Then
  143.     If Number.Users Then
  144.        Call User.Attack
  145.     Endif
  146.  Endif
  147.  Call Encounter.Monster
  148.  Call Set.Clock
  149.  Call Read.Mess
  150.  If Len(Func.Buffer) Then
  151.     TempX=Asc(Func.Buffer)
  152.     Func.Buffer=Nul
  153.     Call Function.Key(TempX)
  154.  Endif
  155.  If Room.Rate=False Then
  156.     Call Status.Line(False)
  157.  Endif
  158. 10011
  159.  Exit Sub
  160. 10012
  161.  Resume 10011
  162. End Sub
  163.  
  164. Sub Wait.Loop
  165.  On Local Error Goto 10022
  166.  Allow.Break=True
  167.  Auto.Break=False
  168.  Do While Not New.Room And Security.Guard
  169.     Call Pause.Second
  170.     If Auto.Break Then
  171.        Exit Do
  172.     Endif
  173.     Hidden.Player=True
  174.     If Room.Rate=False Then
  175.        For Count=1 To Int(Rnd*3+1)
  176.           If Number.Monsters=False Then
  177.              Exit For
  178.           Endif
  179.           If Rnd>.5 Then
  180.              Monster.Temp=1
  181.              Out3=MonsterArray(1).MonsterName
  182.              Out3=Rtrim$(Out3)
  183.              Out3=Lcase$(Out3)
  184.              Strng="The "+Out3+" leaves the room."
  185.              Call IO.O
  186.              Call Remove.Monster
  187.           Endif
  188.        Next
  189.     Endif
  190.     Call Main.Loop.Update
  191.  Loop
  192.  Allow.Break=False
  193.  Wait.Mode=False
  194.  Auto.Mode=False
  195. 10021
  196.  Exit Sub
  197. 10022
  198.  Resume 10021
  199. End Sub
  200.  
  201. Sub Auto.Loop
  202.  On Local Error Goto 10032
  203.  Allow.Break=True
  204.  Auto.Break=False
  205.  Do While Not New.Room And Security.Guard
  206.     Call Pause.Second
  207.     If Auto.Break Then
  208.        Exit Do
  209.     Endif
  210.     If UserRecord.Level<=False Then
  211.        Call Train.Stats
  212.     Endif
  213.     If UserRecord.Experience<=False Then
  214.        UserRecord.Experience=False
  215.        Call Gold(Temp#)
  216.        If UserRecord.Gold>=Temp# Then
  217.           Call Train.Stats
  218.        Endif
  219.     Endif
  220.     If UserRecord.Magic<UserRecord.MagicMax/4 Then
  221.        Strng="You cast an enchant spell!"
  222.        Call IO.O
  223.        UserRecord.Magic=Cint(UserRecord.Magic+Config2(23)*UserRecord.Level)
  224.        Call New.Stats
  225.        Strng=Str$(UserRecord.Magic)
  226.        Strng="You now have"+Strng+" magic points!"
  227.     Endif
  228.     If UserRecord.Fatigue<UserRecord.FatigueMax/4 Then
  229.        Strng="You cast a vigor spell!"
  230.        Call IO.O
  231.        UserRecord.Fatigue=Cint(UserRecord.Fatigue+Config2(21)*UserRecord.Level)
  232.        Call New.Stats
  233.        Strng=Str$(UserRecord.Fatigue)
  234.        Strng="You now have"+Strng+" fatigue points!"
  235.     Endif
  236.     If UserRecord.Vitality<UserRecord.VitalityMax/4 Then
  237.        Strng="You cast a heal spell!"
  238.        Call IO.O
  239.        UserRecord.Vitality=Cint(UserRecord.Vitality+_
  240.        Config2(22)*UserRecord.Level)
  241.        Call New.Stats
  242.        Strng=Str$(UserRecord.Vitality)
  243.        Strng="You now have"+Strng+" vitality points!"
  244.        Call IO.O
  245.     Endif
  246.     Temp6=False
  247.     For Temp5=1 To Room.Treasure.Max
  248.        If Room.Inventory(Temp5) Then
  249.           Get 8,Room.Inventory(Temp5),TreasureRecord
  250.           If TreasureRecord.Coin Then
  251.              UserRecord.Gold=UserRecord.Gold+TreasureRecord.Gold
  252.              Strng="You pick up"+Str$(TreasureRecord.Gold)+" Gold!"
  253.              Call IO.O
  254.              Temp6=True
  255.              Exit For
  256.           Endif
  257.        Endif
  258.     Next
  259.     If Temp6 Then
  260.        Call Discard.Inventory(Temp5)
  261.     Endif
  262.     Temp6=False
  263.     For Temp5=1 To Room.Treasure.Max
  264.        If Room.Inventory(Temp5) Then
  265.           Get 8,Room.Inventory(Temp5),TreasureRecord
  266.           Out3=TreasureRecord.TreasureName
  267.           Out3=Rtrim$(Out3)
  268.           If TreasureRecord.Type<False Then
  269.              If Abs(TreasureRecord.Plus)>Weapon3 Then
  270.                 Weapon3=Abs(TreasureRecord.Plus)
  271.                 Weapon5=Number.Inventory+1
  272.                 Temp6=True
  273.                 Exit For
  274.              Endif
  275.           Endif
  276.           If TreasureRecord.Type=False Then
  277.              If Abs(TreasureRecord.Plus)>Weapon2 Then
  278.                 Weapon2=Abs(TreasureRecord.Plus)
  279.                 Weapon6=Number.Inventory+1
  280.                 Weapon10=TreasureRecord.Proficiency
  281.                 Temp6=True
  282.                 Exit For
  283.              Endif
  284.           Endif
  285.           If TreasureRecord.Type>False Then
  286.              If TreasureRecord.RingType Then
  287.                 If Weapon7=False Then
  288.                    Weapon7=Number.Inventory+1
  289.                    Weapon8=TreasureRecord.RingType
  290.                    Weapon9=TreasureRecord.RingSpell
  291.                    Temp6=True
  292.                    Exit For
  293.                 Endif
  294.              Else
  295.                 If Abs(TreasureRecord.Plus)>Weapon1 Then
  296.                    Weapon1=Abs(TreasureRecord.Plus)
  297.                    Weapon4=Number.Inventory+1
  298.                    Temp6=True
  299.                    Exit For
  300.                 Endif
  301.              Endif
  302.           Endif
  303.        Endif
  304.     Next
  305.     If Temp6 Then
  306.        Temp8=Room.Inventory(Temp5)
  307.        Temp9=Room.Inventory.Charges(Temp5)
  308.        Call Add.Inventory(Temp8,Temp9)
  309.        Call Discard.Inventory(Temp5)
  310.        Strng="You pick up "+Out3+"."
  311.        Call IO.O
  312.        Strng="You use "+Out3+"."
  313.        Call IO.O
  314.     Endif
  315.     For Count=1 To Int(Rnd*3+2)
  316.        If Number.Monsters=False Then
  317.           Exit For
  318.        Endif
  319.        Monster.Temp=1
  320.        TempA=False
  321.        TempB=False
  322.        Out3=MonsterArray(1).MonsterName
  323.        Out3=Rtrim$(Out3)
  324.        Out3=Ucase$(Out3)
  325.        TempA=Instr(TempA+1,Out3," ")
  326.        While TempA
  327.           TempB=TempA
  328.           TempA=Instr(TempA+1,Out3," ")
  329.        Wend
  330.        Last.Monster=Mid$(Out3,TempB+1)
  331.        Parsed.Command1=Last.Monster
  332.        Last.Command.Type=False
  333.        Last.Command.Number=55
  334.        Call Attack.Monster
  335.     Next
  336.     Call Main.Loop.Update
  337.  Loop
  338.  Allow.Break=False
  339.  Wait.Mode=False
  340.  Auto.Mode=False
  341. 10031
  342.  Exit Sub
  343. 10032
  344.  Resume 10031
  345. End Sub
  346.  
  347. Sub Command.Loop
  348.  On Local Error Goto 10042
  349.  Graphics.Off=False
  350.  Strng=Action.Prompt
  351.  Call IO.I
  352.  Out2=Ltrim$(Out2)
  353.  If Out2="?" Then
  354.     Graphics.Off=True
  355.     Strng="Type Hint, or Help for short help on commands, or"
  356.     Call IO.O
  357.     Strng="else type Catalog, or Commands for additional help on commands."
  358.     Call IO.O
  359.     Graphics.Off=False
  360.     Exit Sub
  361.  Endif
  362.  If Left$(Out2,Len(Config3(9)))=Config3(9) Then
  363.     Sysop.Command=True
  364.  Endif
  365.  If Sysop.Command Then
  366.     If Normal.User Then
  367.        Sysop.Command=False
  368.        Strng="That command is reserved for DMs only!"
  369.        Call IO.O
  370.        Last.Command="<illegal>"
  371.        Call Update.Mess(4)
  372.        Exit Sub
  373.     Endif
  374.     If Len(Out2)<=Len(Config3(9)) Then
  375.        Sysop.Command=False
  376.        Strng="That DM command is reserved for Sysops only!"
  377.        Call IO.O
  378.        Last.Command="<illegal>"
  379.        Call Update.Mess(4)
  380.        Exit Sub
  381.     Endif
  382.     If Disable.DM Then
  383.        Sysop.Command=False
  384.        Strng="All DM commands currently disabled."
  385.        Call IO.O
  386.        Last.Command="<illegal>"
  387.        Call Update.Mess(4)
  388.        Exit Sub
  389.     Endif
  390.  Endif
  391.  Stored.Parsed.Command1=Out2
  392.  Out2=Ucase$(Out2)
  393.  Stored.Parsed.Command2=Out2
  394.  For Var=1 To 70
  395.     Var$=" "+Rtrim$(Strip.Data(Var))+" "
  396.     Var2=Instr(Out2,Var$)
  397.     Do While Var2
  398.        Out2=Left$(Out2,Var2-1)+Mid$(Out2,Var2+Len(Var$)-1)
  399.        Var2=Instr(Out2,Var$)
  400.     Loop
  401.  Next
  402.  If Left$(Out2,Len(Config3(10)))=Config3(10) Then
  403.     User.Command=Previous.Command1
  404.     Stored.Parsed.Command1=Previous.Command2
  405.     Stored.Parsed.Command2=Previous.Command3
  406.  Else
  407.     User.Command=Out2
  408.     Previous.Command1=User.Command
  409.     Previous.Command2=Stored.Parsed.Command1
  410.     Previous.Command3=Stored.Parsed.Command2
  411.  Endif
  412.  If User.Command=Nul Then
  413.     Last.Command=Enter$
  414.     Call Update.Mess(4)
  415.     Exit Sub
  416.  Endif
  417.  Magic.Spell=False
  418.  Temp.Command=User.Command
  419.  If Instr(Temp.Command," ") Then
  420.     Temp.Command=Left$(Temp.Command,Instr(Temp.Command," ")-1)
  421.  Endif
  422.  Parser=Instr(User.Command," ")
  423.  If Parser=False Then
  424.     If Sysop.Command Then
  425.        Call DM.Command1
  426.     Else
  427.        Call User.Command1
  428.     Endif
  429.  Else
  430.     Parsed.Command1=Mid$(User.Command,Parser+1)
  431.     Parsed.Command2=Parsed.Command1
  432.     Stored.Parsed.Command1=Mid$(Stored.Parsed.Command1,_
  433.     Instr(Stored.Parsed.Command1," ")+1)
  434.     Stored.Parsed.Command2=Mid$(Stored.Parsed.Command2,_
  435.     Instr(Stored.Parsed.Command2," ")+1)
  436.     Call Numeric
  437.     If Sysop.Command Then
  438.        Call DM.Command2
  439.     Else
  440.        Call User.Command2
  441.     Endif
  442.  Endif
  443. 10041
  444.  Exit Sub
  445. 10042
  446.  Resume 10041
  447. End Sub
  448.  
  449. Sub DM.Command1
  450.  On Local Error Goto 10052
  451.  TempQ=False
  452.  Temp.Command=Mid$(Temp.Command,Len(Config3(9))+1)
  453.  For Last.Command.Number=1 To 9
  454.     Strng=Sysop.Commands1(Last.Command.Number)
  455.     Strng=Rtrim$(Strng)
  456.     If Instr(Strng,Temp.Command)=1 Then
  457.        TempQ=Last.Command.Number
  458.        OutX$=Strng
  459.        Exit For
  460.     Endif
  461.  Next
  462.  If TempQ=False Then
  463.     Strng="Unknown command!"
  464.     Call IO.O
  465.     Last.Command="<unknown>"
  466.     Call Update.Mess(4)
  467.     Exit Sub
  468.  Endif
  469.  Last.Command=OutX$
  470.  Call Update.Mess(4)
  471.  Last.Command.Type=True
  472.  Last.Command.Number=TempQ
  473.  Select Case TempQ
  474.  Case 1
  475.     Call Abort
  476.  Case 2
  477.     Call DM.Send
  478.  Case 3
  479.     Call Call.Monster
  480.  Case 4
  481.     Call Shell.Program("edit.exe",Local.Mode,True)
  482.  Case 5
  483.     Stored.Parsed.Command1=Config3(47)
  484.     Call Read.Help(True)
  485.  Case 6
  486.     Call Invisibility
  487.  Case 7
  488.     Call Link.Room
  489.  Case 8
  490.     Call DM.Noid
  491.  Case 9
  492.     Call Display.Memory
  493.  End Select
  494. 10051
  495.  Exit Sub
  496. 10052
  497.  Resume 10051
  498. End Sub
  499.  
  500. Sub User.Command1
  501.  On Local Error Goto 10062
  502.  If User.Command="OU" Then
  503.     User.Command="O"
  504.  Endif
  505.  If User.Command="OUT" Then
  506.     User.Command="O"
  507.  Endif
  508.  Call Get.Direction
  509.  If TempA Then
  510.     Call Go.Direction
  511.     Exit Sub
  512.  Endif
  513.  TempQ=False
  514.  For Last.Command.Number=1 To 83
  515.     Last.Command=Rtrim$(Command.Set1(Last.Command.Number,2))
  516.     If Len(Temp.Command)=2 Then
  517.        Strng=Rtrim$(Command.Set1(Last.Command.Number,1))
  518.        If Temp.Command=Left$(Strng,Len(Temp.Command)) Then
  519.           TempQ=Last.Command.Number
  520.           Exit For
  521.        Endif
  522.     Endif
  523.     TempX=1
  524.     Do
  525.        TempX=TempX+1
  526.        Strng=Rtrim$(Command.Set1(Last.Command.Number,TempX))
  527.        If Strng="<>" Or Strng="<eol>" Then
  528.           Exit Do
  529.        Endif
  530.        If Len(Temp.Command)=1 Then
  531.           If TempX=2 Then
  532.              If Left$(Strng,1)=Temp.Command Then
  533.                 TempQ=Last.Command.Number
  534.                 Exit Do
  535.              Endif
  536.           Endif
  537.        Else
  538.           If Temp.Command=Left$(Strng,Len(Temp.Command)) Then
  539.              TempQ=Last.Command.Number
  540.              Exit For
  541.           Endif
  542.        Endif
  543.     Loop Until TempX=5
  544.  Next
  545.  If TempQ=False Then
  546.     Graphics.Off=True
  547.     Strng="Unknown command!"
  548.     Call IO.O
  549.     If UserRecord.Brief=False Then
  550.        Strng="Type ? for Help.."
  551.        Call IO.O
  552.     Endif
  553.     Graphics.Off=False
  554.     Last.Command="<unknown>"
  555.     Call Update.Mess(4)
  556.     Exit Sub
  557.  Endif
  558.  Call Update.Mess(4)
  559.  Last.Command.Type=True
  560.  Last.Command.Number=TempQ
  561.  Select Case TempQ
  562.  Case 1, 2, 3, 4
  563.     Parsed.Command1=Last.Monster
  564.     Last.Command.Type=False
  565.     Last.Command.Number=55
  566.     Call Attack.Monster
  567.  Case 5, 6
  568.     Call Display.Room
  569.  Case 7, 8
  570.     Call Panic
  571.  Case 9
  572.     Call Search.Room
  573.  Case 10,51
  574.     Call Put.User.Record
  575.     Strng="Player file updated."
  576.     Call IO.O
  577.  Case 11
  578.     Call Display.Stats
  579.  Case 12
  580.     Call Display.Inventory
  581.  Case 13
  582.     Call Suicide
  583.  Case 14
  584.     Call Train
  585.  Case 15
  586.     Call Display.Health
  587.  Case 16
  588.     Call Appeal
  589.  Case 17, 18, 19, 20
  590.     Call Quit
  591.  Case 21
  592.     Call Display.Experience
  593.  Case 22
  594.     Stored.Parsed.Command1=Config3(48)
  595.     Call Read.Help(False)
  596.  Case 23
  597.     Call Hide.User
  598.  Case 24
  599.     Call Cast.Spell(True)
  600.  Case 25
  601.     Call Weapon.List
  602.  Case 26
  603.     Call Brief.Mode
  604.  Case 27
  605.     Call Goto.Bank
  606.     Call Status.Line(1)
  607.  Case 28, 29, 30
  608.     Call Time.Online
  609.  Case 31
  610.     Wait.Mode=True
  611.     Strng="Wait mode. Press Control-K to interrupt."
  612.     Call IO.O
  613.  Case 32
  614.     Auto.Mode=True
  615.     Strng="Auto mode. Press Control-K to interrupt."
  616.     Call IO.O
  617.  Case 33
  618.     Call Get.ANSI
  619.  Case 34
  620.     Call Get.Graphics
  621.  Case 35
  622.     Call Lose.Player
  623.  Case 36
  624.     If Normal.User Then
  625.        If UserRecord.ClassType<>6 Then
  626.           Strng="Only rangers can use this command!"
  627.           Call IO.O
  628.           Exit Sub
  629.        Endif
  630.     Endif
  631.     Follow.Mode=True
  632.  Case 37
  633.     If Normal.User Then
  634.        If UserRecord.ClassType<>5 Then
  635.           Strng="Only paladins can use this command!"
  636.           Call IO.O
  637.           Exit Sub
  638.        Endif
  639.     Endif
  640.     Follow.Mode=True
  641.  Case 38
  642.     If Normal.User Then
  643.        If UserRecord.ClassType<>5 Then
  644.           Strng="Only paladins can use this command!"
  645.           Call IO.O
  646.           Exit Sub
  647.        Endif
  648.     Endif
  649.     Follow.Mode=True
  650.  Case 39
  651.     Parsed.Command1=Last.Monster
  652.     Last.Command.Type=False
  653.     Last.Command.Number=39
  654.     Call Attack.Monster
  655.  Case 40
  656.     Parsed.Command1=Last.Monster
  657.     Last.Command.Type=False
  658.     Last.Command.Number=40
  659.     Call Attack.Monster
  660.  Case 41
  661.     Call Put.User.Record
  662.     Call Top.Ten
  663.  Case 42
  664.     Call Bless.Self
  665.  Case 43
  666.     Call Curse.Self
  667.  Case 44
  668.     Call Change.PassWord
  669.     Call Put.User.Record
  670.  Case 45
  671.     Call Mail
  672.     Call Open.Files
  673.     Call Status.Line(1)
  674.  Case 46
  675.     Call Put.User.Record
  676.     Call User.List
  677.  Case 47
  678.     Call Page.Sysop
  679.  Case 48, 49
  680.     Call Exit.Room
  681.  Case 50
  682.     Call Climb
  683.  Case 52, 53
  684.     Call Relogin
  685.  Case 54
  686.     Call Read.DayFile(True)
  687.  Case 55
  688.     Call Last.User
  689.  Case 56
  690.     Call Out.File(Catalog.FileName)
  691.  Case 57, 58, 59, 60
  692.     Call Attack.Monster
  693.  Case 61
  694.     Call Align
  695.  Case 62
  696.     Call Read.Status
  697.  Case 63
  698.     Call Toggle.Echo
  699.  Case 64 To 74
  700.     TempA=TempQ-63
  701.     Call Go.Direction
  702.  Case 75
  703.     Call Whos.On
  704.  Case 76
  705.     Call Out.File(Hint.FileName)
  706.  Case 77 
  707.     Call Sort.Inventory
  708.  Case 78
  709.     Call Out.File(Summary.FileName)
  710.  Case 79
  711.     Call Read.DayFile(False)
  712.  Case 80, 81
  713.     Call Accept.Offer
  714.  Case 83
  715.     Call Reroll.Character
  716.  End Select
  717. 10061
  718.  Exit Sub
  719. 10062
  720.  Resume 10061
  721. End Sub
  722.  
  723. Sub DM.Command2
  724.  On Local Error Goto 10072
  725.  TempQ=False
  726.  Temp.Command=Mid$(Temp.Command,Len(Config3(9))+1)
  727.  For Last.Command.Number=1 To 9
  728.     Strng=Sysop.Commands2(Last.Command.Number)
  729.     Strng=Rtrim$(Strng)
  730.     If Instr(Strng,Temp.Command)=1 Then
  731.        TempQ=Last.Command.Number
  732.        OutX$=Strng
  733.        Exit For
  734.     Endif
  735.  Next
  736.  If TempQ=False Then
  737.     Strng="Unknown command!"
  738.     Call IO.O
  739.     Last.Command="<unknown>"
  740.     Call Update.Mess(4)
  741.     Exit Sub
  742.  Endif
  743.  Last.Command=OutX$
  744.  Call Update.Mess(4)
  745.  Last.Command.Type=True
  746.  Last.Command.Number=TempQ
  747.  Select Case TempQ
  748.  Case 1
  749.     Call Abort.Node
  750.  Case 2
  751.     Call Summon.Monster
  752.  Case 3
  753.     Call Discard.Object
  754.  Case 4
  755.     VarX=Val(Parsed.Command1)
  756.     If VarX>False And VarX<=Lof(5)/Len(RoomRecord) Then
  757.        Call Edit.Room(VarX)
  758.        Call Add.Monclass(VarX)
  759.     Endif
  760.  Case 5
  761.     Call Drop.Object
  762.  Case 6
  763.     Call DM.Help
  764.  Case 7
  765.     Call Kill.Monster
  766.  Case 8
  767.     Call Reduce.Monsters
  768.  Case 9
  769.     Call Teleport.User
  770.  End Select
  771. 10071
  772.  Exit Sub
  773. 10072
  774.  Resume 10071
  775. End Sub
  776.  
  777. Sub User.Command2
  778.  On Local Error Goto 10082
  779.  TempQ=False
  780.  For Last.Command.Number=1 To 83
  781.     Last.Command=Rtrim$(Command.Set2(Last.Command.Number,2))
  782.     If Len(Temp.Command)<=2 Then
  783.        Strng=Rtrim$(Command.Set2(Last.Command.Number,1))
  784.        If Temp.Command=Left$(Strng,Len(Temp.Command)) Then
  785.           TempQ=Last.Command.Number
  786.           Exit For
  787.        Endif
  788.     Endif
  789.     TempX=1
  790.     Do
  791.        TempX=TempX+1
  792.        Strng=Rtrim$(Command.Set2(Last.Command.Number,TempX))
  793.        If Strng="<>" Or Strng="<eol>" Then
  794.           Exit Do
  795.        Endif
  796.        If Len(Temp.Command)=1 Then
  797.           If TempX=2 Then
  798.              If Left$(Strng,1)=Temp.Command Then
  799.                 TempQ=Last.Command.Number
  800.                 Exit For
  801.              Endif
  802.           Endif
  803.        Else
  804.           If Temp.Command=Left$(Strng,Len(Temp.Command)) Then
  805.              TempQ=Last.Command.Number
  806.              Exit For
  807.           Endif
  808.        Endif
  809.     Loop Until TempX=5
  810.  Next
  811.  If TempQ=False Then
  812.     Graphics.Off=True
  813.     Strng="Unknown command!"
  814.     Call IO.O
  815.     If UserRecord.Brief=False Then
  816.        Strng="Type ? for Help.."
  817.        Call IO.O
  818.     Endif
  819.     Graphics.Off=False
  820.     Last.Command="<unknown>"
  821.     Call Update.Mess(4)
  822.     Exit Sub
  823.  Endif
  824.  Call Update.Mess(4)
  825.  Last.Command.Type=False
  826.  Last.Command.Number=TempQ
  827.  Select Case TempQ
  828.  Case 1, 2
  829.     Call Enter.Object
  830.  Case 3, 4, 5
  831.     Call Display.Information
  832.  Case 6
  833.     Call Cast.Spell(False)
  834.  Case 7, 8
  835.     If Instr(Parsed.Command2," ") Then
  836.        Call Take.From.Receptacle
  837.     Else
  838.        Call Take.Object
  839.     Endif
  840.  Case 9, 10
  841.     If Instr(Parsed.Command2," ") Then
  842.        Call Drop.Into.Receptacle
  843.     Else
  844.        Call Drop.Item
  845.     Endif
  846.  Case 11, 12
  847.     Call Pawn.Shop
  848.  Case 13, 14
  849.     Call Smash.Object
  850.  Case 15
  851.     Call Close.Object
  852.  Case 16
  853.     Call Open.Object
  854.  Case 17, 18, 19
  855.     Call Hold.Object
  856.  Case 20
  857.     Call Wear.Object
  858.  Case 21
  859.     Call Return.Object
  860.  Case 22
  861.     Call Cast.Spell(True)
  862.  Case 23
  863.     Call Weapons.Shoppe
  864.  Case 24
  865.     Call Lock.Object
  866.  Case 25, 26
  867.     Call Unlock.Object
  868.  Case 27
  869.     Call Fix.Object
  870.  Case 28
  871.     Call Weapons.Shop
  872.  Case 29
  873.     Call Alchemist
  874.  Case 30
  875.     Call Drink.Potion
  876.  Case 31
  877.     If Normal.User Then
  878.        If UserRecord.ClassType<>6 Then
  879.           Strng="Only rangers can use this command!"
  880.           Call IO.O
  881.           Exit Sub
  882.        Endif
  883.     Endif
  884.     Follow.Mode=True
  885.  Case 32
  886.     Call Throw.Object
  887.  Case 33
  888.     Call Steal.Object
  889.  Case 34
  890.     Call Give.Object
  891.  Case 35
  892.     Call Bless.Object
  893.  Case 36
  894.     Call Curse.Object
  895.  Case 38
  896.     Call Send.Message
  897.  Case 39
  898.     Call Send.Mess(2,False,True,Stored.Parsed.Command1)
  899.  Case 40, 41
  900.     Call Talk.To.Monster
  901.  Case 42, 43
  902.     Call Offer
  903.  Case 44
  904.     Call Load.Object
  905.  Case 45
  906.     Call Fire.Object
  907.  Case 46
  908.     Call Enter.Vehicle
  909.  Case 48, 73, 74
  910.     Call Ride.Vehicle
  911.  Case 49
  912.     If Instr(Parsed.Command2," ") Then
  913.        Call Drop.Into.Receptacle
  914.     Else
  915.        Call Drop.Item
  916.     Endif
  917.  Case 50
  918.     Call Search.Object
  919.  Case 51
  920.     Call Read.Help(False)
  921.  Case 52
  922.     Call Identify
  923.  Case 53
  924.     Call Whisper
  925.  Case 54
  926.     Call Send.Mess(3,False,Room,Stored.Parsed.Command1)
  927.  Case 55 To 70, 82, 83
  928.     Call Attack.Monster
  929.  Case 71
  930.     Call Psi.Mode
  931.  Case 72
  932.     Call Eat.Object
  933.  Case 75, 78, 79
  934.     Call Move.Object
  935.  Case 76
  936.     Call Launch.Object
  937.  Case 77
  938.     Call Learn.Spell
  939.  Case 47, 80, 81
  940.     Call Exit.Vehicle
  941.  End Select
  942. 10081
  943.  Exit Sub
  944. 10082
  945.  Resume 10081
  946. End Sub
  947.  
  948. Sub Relogin
  949.  On Local Error Goto 10092
  950.  If UserRecord.Level<Config2(67) Or Config2(67)=False Then
  951.     Strng="You can't relogin in now!"
  952.     Call IO.O
  953.     Exit Sub
  954.  Endif
  955.  Call Update.Mess(2)
  956.  OutZ="relogged in"
  957. 10091
  958.  Relogging=True
  959.  Security.Guard=False
  960.  Exit Sub
  961. 10092
  962.  Resume 10091
  963. End Sub
  964.  
  965. Sub Suicide
  966.  On Local Error Goto 10102
  967.  Strng="Are you sure you want to commit suicide(y/n)?"
  968.  No.Input.Out="N"
  969.  Call IO.I
  970.  If Yes Then
  971.     Graphics.Off=True
  972.     Strng="Your character falls into deep sleep.."
  973.     Call IO.O
  974.     Strng="The Ghods take your player to another world.."
  975.     Call IO.O
  976.     Graphics.Off=False
  977.     OutZ="committed suicide"
  978.     If Node>False Then
  979.        OutZ=OutZ+" (Node "+Chr$(Node)+")"
  980.     Endif
  981.     Call Send.Mess(4,False,False,OutZ)
  982.     Call Update.DayFile(OutZ,True)
  983.     OutZ=Nul
  984.     For Temp5=1 To 15
  985.        UserRecord.Inv(Temp5)=False
  986.        UserRecord.Charges(Temp5)=False
  987.     Next
  988.     For Temp5=1 To 5
  989.        UserRecord.Object(Temp5)=False
  990.        UserRecord.ObjCharges(Temp5)=False
  991.     Next
  992.     UserRecord.MaxCalls=False
  993.     UserRecord.FromHour=False
  994.     UserRecord.FromMin=False
  995.     UserRecord.ToHour=False
  996.     UserRecord.ToMin=False
  997.     UserRecord.ClassType=False
  998.     Strng=Deleted$
  999.     Call Valid(Strng,30)
  1000.     Call Encrypt(Strng,True)
  1001.     UserRecord.CodeName=Strng
  1002.     Strng=Deleted$
  1003.     Call Valid(Strng,20)
  1004.     Call Encrypt(Strng,False)
  1005.     UserRecord.PassWord=Strng
  1006.     Strng=Deleted$
  1007.     Call Valid(Strng,20)
  1008.     Call Encrypt(Strng,True)
  1009.     UserRecord.ClassName=Strng
  1010.     UserRecord.Flags=False
  1011.     Call Update.Mess(3)
  1012.     Security.Guard=False
  1013.  Endif
  1014. 10101
  1015.  Exit Sub
  1016. 10102
  1017.  Resume 10101
  1018. End Sub
  1019.  
  1020. Sub Quit
  1021.  On Local Error Goto 10112
  1022.  Graphics.Off=True
  1023.  If Config2(74) Then
  1024.     Strng="Are you sure(y/n)?"
  1025.     No.Input.Out="N"
  1026.     Call IO.I
  1027.  Endif
  1028.  If Yes Or Config2(74)=False Then
  1029.     Call Update.Mess(3)
  1030.     OutZ="logged off"
  1031.     Security.Guard=False
  1032.  Endif
  1033. 10111
  1034.  Exit Sub
  1035. 10112
  1036.  Resume 10111
  1037. End Sub
  1038.  
  1039. Sub Abort
  1040.  On Local Error Goto 10122
  1041.  If Node>False Then
  1042.     Strng="Abort all nodes(y/n)?"
  1043.  Else
  1044.     Strng="Are you sure(y/n)?"
  1045.  Endif
  1046.  No.Input.Out="N"
  1047.  Call IO.I
  1048.  If Yes Then
  1049.     Call Send.Mess(12,False,False,"Abort")
  1050.     Strng="Program task abort!"
  1051.     Call IO.O
  1052.     Call Update.Mess(True)
  1053.     OutZ="aborted program"
  1054.     Node=True
  1055.     Call Drop.DTR
  1056.     Lost.Carrier=True
  1057.     Security.Guard=False
  1058.  Endif
  1059. 10121
  1060.  Exit Sub
  1061. 10122
  1062.  Resume 10121
  1063. End Sub
  1064.  
  1065. Sub Abort.Node
  1066.  On Local Error Goto 10124
  1067.  TempC=Val(Parsed.Command1)
  1068.  If TempC=False Then
  1069.     Call Search.Mess(False)
  1070.     TempC=TempC-1
  1071.     If Temp=False Then
  1072.        TempC=False
  1073.     Endif
  1074.  Endif
  1075.  If TempC>=1 And TempC<=36 Then
  1076.     Strng="Abort node"+Str$(TempC)+", are you sure(y/n)?"
  1077.     No.Input.Out="N"
  1078.     Call IO.I
  1079.     If Yes Then
  1080.        Call Send.Mess(14,TempC,False,"Abort")
  1081.     Endif
  1082.  Endif
  1083. 10123
  1084.  Exit Sub
  1085. 10124
  1086.  Resume 10123
  1087. End Sub
  1088.  
  1089. Sub Traps
  1090.  On Local Error Goto 10132
  1091.  New.Room=False
  1092.  Temp2=ObjectRecord.Trap
  1093.  If Temp>=1 And Temp2<=3 Then
  1094.     If Rnd<.5 Then
  1095.        Strng="It's trapped! "
  1096.        Select Case ObjectRecord.Trap
  1097.        Case 1
  1098.           Strng=Strng+"Poison needles!"
  1099.           Call IO.O
  1100.           UserRecord.Poison=True
  1101.        Case 2
  1102.           Strng=Strng+"Falling door!"
  1103.           Call IO.O
  1104.           Pass.Door=False
  1105.           Number.Monsters=False
  1106.           Next.Room=ObjectRecord.Teleport
  1107.           Call Teleport
  1108.           Call Enter.Room
  1109.        Case 3
  1110.           Strng=Strng+"Deadly spears!"
  1111.           Call IO.O
  1112.           Prefix2=Nul
  1113.           Strng="You are hit for"
  1114.           Out3="some deadly spears"
  1115.           Temp2=ObjectRecord.Teleport
  1116.           If Temp2 Then
  1117.              Call Hit.Player(Temp2)
  1118.           Endif
  1119.        End Select
  1120.        Out2=UserRecord.CodeName
  1121.        Call Decrypt(Out2)
  1122.        Out2=Rtrim$(Out2)
  1123.        Out2=Lcase$(Out2)
  1124.        Out2=Out2+" was just hit by a trap."
  1125.        Call Send.Mess(8,False,Room,Out2)
  1126.     Endif
  1127.  Endif
  1128. 10131
  1129.  Exit Sub
  1130. 10132
  1131.  Resume 10131
  1132. End Sub
  1133.  
  1134. Sub Enter.Object
  1135.  On Local Error Goto 10142
  1136.  User.Command=Parsed.Command1
  1137.  Call Get.Direction
  1138.  If TempA Then
  1139.     Call Verify.Room
  1140.     If New.Room Then
  1141.        Call Enter.Room
  1142.     Endif
  1143.     Exit Sub
  1144.  Endif
  1145.  Call Check.Room.Objects
  1146.  If Temp7=False Then
  1147.     Call Check.Room.Treasure
  1148.     If Temp7 Then
  1149.        If TreasureRecord.Vehicle Then
  1150.           Call Enter.Vehicle
  1151.           Exit Sub
  1152.        Endif
  1153.     Endif
  1154.     Strng="You can't go there!"
  1155.     Call IO.O
  1156.     Exit Sub
  1157.  Endif
  1158.  If ObjectRecord.RoomLink=False Then
  1159.     Strng="You can't go there!"
  1160.     Call IO.O
  1161.     Exit Sub
  1162.  Endif
  1163.  Call Restrict(12)
  1164.  If TempB Then
  1165.     Strng="Your level does not permit entrance to that room!"
  1166.     Call IO.O
  1167.     Exit Sub
  1168.  Endif
  1169.  If ObjectRecord.JailTrap Then
  1170.     Strng="Trapped portal!"
  1171.     Call IO.O
  1172.     Exit Sub
  1173.  Endif
  1174.  If ObjectRecord.Closed Then
  1175.     If Pass.Door=False Then
  1176.        Strng="You can't, it's closed!"
  1177.        Call IO.O
  1178.        Exit Sub
  1179.     Endif
  1180.  Endif
  1181.  If ObjectRecord.Relocks Then
  1182.     ObjectRecord.DoorLock=2
  1183.     ObjectRecord.Closed=True
  1184.     Put 6,Temp7,ObjectRecord
  1185.  Endif
  1186.  Strng=ObjectRecord.ShortDesc
  1187.  If Strng<>String$(40,0) Then
  1188.     Strng=Rtrim$(Strng)
  1189.     If Strng<>Nul Then
  1190.        Call IO.O
  1191.     Endif
  1192.  Endif
  1193.  If ObjectRecord.Trap Then
  1194.     Call Traps
  1195.     If New.Room Then
  1196.        Exit Sub
  1197.     Endif
  1198.  Endif
  1199.  Pass.Door=False
  1200.  Number.Monsters=False
  1201.  Next.Room=ObjectRecord.RoomLink
  1202.  Out2=UserRecord.CodeName
  1203.  Call Decrypt(Out2)
  1204.  Out2=Rtrim$(Out2)
  1205.  Out2=Lcase$(Out2)
  1206.  Out2=Out2+" just went to the "
  1207.  Strng=ObjectRecord.ShortName
  1208.  Strng=Rtrim$(Strng)
  1209.  Strng=Lcase$(Strng)
  1210.  Out2=Out2+Strng+"."
  1211.  Call Send.Mess(8,False,Room,Out2)
  1212.  Call Enter.Room
  1213. 10141
  1214.  Exit Sub
  1215. 10142
  1216.  Resume 10141
  1217. End Sub
  1218.  
  1219. Sub Drop.Item
  1220.  On Local Error Goto 10152
  1221.  If Normal.User=False Then
  1222.     Call Find.Object
  1223.     If Temp7 Then
  1224.        Strng="You drop "+Out3+"!"
  1225.        Call IO.O
  1226.        Call Discard(Temp5,True)
  1227.        For Temp3=1 To 10
  1228.           If RoomRecord.Object(Temp3)=False Then
  1229.              RoomRecord.Object(Temp3)=Temp7
  1230.              RoomRecord.ObjCharges(Temp3)=Temp6
  1231.              Put 5,Room,RoomRecord
  1232.              Exit Sub
  1233.           Endif
  1234.        Next
  1235.        Strng="It rolled away!"
  1236.        Call IO.O
  1237.        Exit Sub
  1238.     Endif
  1239.  Endif
  1240.  Call Find.Inventory
  1241.  If Temp7=False Then
  1242.     Strng="You can't drop that!"
  1243.     Call IO.O
  1244.     Exit Sub
  1245.  Endif
  1246.  If Last.Command.Number=Hide.Command Then
  1247.     Strng="You hide "+Out3+"!"
  1248.  Else
  1249.     Strng="You drop "+Out3+"!"
  1250.  Endif
  1251.  Call IO.O
  1252.  Call Discard(Temp5,True)
  1253.  If Last.Command.Number=Hide.Command Then
  1254.     For Temp3=1 To 10
  1255.        If RoomRecord.Treasure(Temp3)=False Then
  1256.           RoomRecord.Treasure(Temp3)=Temp7
  1257.           RoomRecord.TreCharges(Temp3)=Temp6
  1258.           RoomRecord.Flags(Temp3)=Hidden.Object
  1259.           Put 5,Room,RoomRecord
  1260.           Exit Sub
  1261.        Endif
  1262.     Next
  1263.     Strng="It rolled away!"
  1264.     Call IO.O
  1265.     Exit Sub
  1266.  Endif
  1267.  For Temp3=1 To Room.Treasure.Max
  1268.     If Room.Inventory(Temp3)=False Then
  1269.        Room.Inventory(Temp3)=Temp7
  1270.        Room.Inventory.Charges(Temp3)=Temp6
  1271.        Exit Sub
  1272.     Endif
  1273.  Next
  1274.  Call Expand.Room
  1275.  Room.Inventory(Temp3)=Temp7
  1276.  Room.Inventory.Charges(Temp3)=Temp6
  1277. 10151
  1278.  Exit Sub
  1279. 10152
  1280.  Resume 10151
  1281. End Sub
  1282.  
  1283. Sub Drop.Into.Receptacle
  1284.  On Local Error Goto 10162
  1285.  Call ParseX
  1286.  Call Numeric
  1287.  Call Examine.Treasure
  1288.  If Temp7=False Then
  1289.     Strng="You can't drop that!"
  1290.     Call IO.O
  1291.     Exit Sub
  1292.  Endif
  1293.  If TreasureRecord.Recep=False Then
  1294.     Strng="You can't drop that!"
  1295.     Call IO.O
  1296.     Exit Sub
  1297.  Endif
  1298.  If TreasureRecord.Locked>False Then
  1299.     Strng="You can't, it's locked!"
  1300.     Call IO.O
  1301.     Exit Sub
  1302.  Endif
  1303.  If TreasureRecord.Closed>False Then
  1304.     Strng="You can't, it's closed!"
  1305.     Call IO.O
  1306.     Exit Sub
  1307.  Endif
  1308.  Call Open.Recep.File
  1309.  TempC=False
  1310.  For Temp3=1 To Lof(13)/Len(RecepRec)
  1311.     Get 13,Temp3,RecepRec
  1312.     If RecepRec.Inv=False Then
  1313.        TempC=True
  1314.        Exit For
  1315.     Endif
  1316.  Next
  1317.  If TempC=False Then
  1318.     If Temp3>TreasureRecord.RecepMax Then
  1319.        Strng="You can't, it's full!"
  1320.        Call IO.O
  1321.        Exit Sub
  1322.     Endif
  1323.  Endif
  1324.  Out4=Rtrim$(TreasureRecord.TreasureName)
  1325.  Parsed.Command1=Parsed.Command2
  1326.  Call Numeric
  1327.  Call Check.Inventory.Treasure
  1328.  If Temp7=False Then
  1329.     Strng="You can't drop that!"
  1330.     Call IO.O
  1331.     Exit Sub
  1332.  Endif
  1333.  If Last.Command.Number=Hide.Command Then
  1334.     RecepRec.Invis=True
  1335.  Else
  1336.     RecepRec.Invis=False
  1337.  Endif
  1338.  RecepRec.Inv=Temp7
  1339.  RecepRec.Charges=Temp6
  1340.  RecepRec.TName=TreasureRecord.ShortName
  1341.  Put 13,Temp3,RecepRec
  1342.  Out3=Rtrim$(TreasureRecord.TreasureName)
  1343.  If Last.Command.Number=Hide.Command Then
  1344.     Out2=" hide "
  1345.  Else
  1346.     Out2=" drop "
  1347.  Endif
  1348.  Strng="You"+Out2+Out3+" in "+Out4+"!"
  1349.  Call IO.O
  1350.  Call Discard(Temp5,True)
  1351. 10161
  1352.  Exit Sub
  1353. 10162
  1354.  Resume 10161
  1355. End Sub
  1356.  
  1357. Sub Take.Object
  1358.  On Local Error Goto 10172
  1359.  If Normal.User=False Then
  1360.     Call Check.Room.Objects
  1361.     If Temp7 Then
  1362.        For Temp2=1 To 5
  1363.           Temp3=UserRecord.Object(Temp2)
  1364.           If Temp3=False Then
  1365.              Strng="You take "+Out3+"!"
  1366.              Call IO.O
  1367.              UserRecord.Object(Temp2)=Temp7
  1368.              UserRecord.ObjCharges(Temp2)=Temp6
  1369.              RoomRecord.Object(Temp5)=False
  1370.              RoomRecord.ObjCharges(Temp5)=False
  1371.              Put 5,Room,RoomRecord
  1372.              Exit Sub
  1373.           Endif
  1374.        Next
  1375.        Strng="You can't carry anymore!"
  1376.        Call IO.O
  1377.        Exit Sub
  1378.     Endif
  1379.  Endif
  1380.  Temp4=True
  1381.  Call Check.Room.Inventory
  1382.  If Temp7=False Then
  1383.     Call Num
  1384.     Temp4=False
  1385.     Call Check.Room.Treasure
  1386.     If Temp7=False Then
  1387.        Strng="You can't get that!"
  1388.        Call IO.O
  1389.        Exit Sub
  1390.     Endif
  1391.  Endif
  1392.  If Weight+TreasureRecord.Weight>UserRecord.Stats(1)*10 Then
  1393.     Strng="You can't carry any more!"
  1394.     Call IO.O
  1395.     Exit Sub
  1396.  Endif
  1397.  If UserRecord.ClassType<=7 Then
  1398.     For Temp1=1 To Number.Monsters
  1399.        If MonsterArray(Temp1).Prevent Then
  1400.           If Rnd<(MonsterArray(Temp1).PreventPercent/100) Then
  1401.              Out2=MonsterArray(Temp1).MonsterName
  1402.              Out2=Rtrim$(Out2)
  1403.              Strng="The "+Out2+" prevents you from getting it!"
  1404.              Call IO.O
  1405.              Exit Sub
  1406.           Endif
  1407.        Endif
  1408.     Next
  1409.  Endif
  1410.  Strng="You take "+Out3+"."
  1411.  Call IO.O
  1412.  If TreasureRecord.Coin Then
  1413.     UserRecord.Gold=UserRecord.Gold+TreasureRecord.Gold
  1414.     Strng="You now have"+Str$(UserRecord.Gold)+" Gold!"
  1415.     Call IO.O
  1416.     Strng="found"+Str$(TreasureRecord.Gold)+" gold"
  1417.     Call Update.DayFile(Strng,False)
  1418.  Else
  1419.     Call Add.Inventory(Temp7,Temp6)
  1420.  Endif
  1421.  If Temp4 Then
  1422.     Call Discard.Inventory(Temp5)
  1423.     Exit Sub
  1424.  Endif
  1425.  If Temp4=False Then
  1426.     Call Discard.Treasure(Temp5)
  1427.  Endif
  1428. 10171
  1429.  Exit Sub
  1430. 10172
  1431.  Resume 10171
  1432. End Sub
  1433.  
  1434. Sub Take.From.Receptacle
  1435.  On Local Error Goto 10182
  1436.  Call ParseX
  1437.  Call Numeric
  1438.  Call Examine.Treasure
  1439.  If Temp7=False Then
  1440.     Strng="You can't get that!"
  1441.     Call IO.O
  1442.     Exit Sub
  1443.  Endif
  1444.  If TreasureRecord.Recep=False Then
  1445.     Strng="You can't get that!"
  1446.     Call IO.O
  1447.     Exit Sub
  1448.  Endif
  1449.  If TreasureRecord.Locked>False Then
  1450.     Strng="You can't, it's locked!"
  1451.     Call IO.O
  1452.     Exit Sub
  1453.  Endif
  1454.  If TreasureRecord.Closed>False Then
  1455.     Strng="You can't, it's closed!"
  1456.     Call IO.O
  1457.     Exit Sub
  1458.  Endif
  1459.  Parsed.Command1=Parsed.Command2
  1460.  Call Numeric
  1461.  Call Open.Recep.File
  1462.  Temp9=False
  1463.  Temp7=False
  1464.  For Temp5=1 To Lof(13)/Len(RecepRec)
  1465.     Get 13,Temp5,RecepRec
  1466.     Out2=RecepRec.TName
  1467.     Out2=Left$(Out2,Len(Parsed.Command1))
  1468.     If Out2=Parsed.Command1 Then
  1469.        Temp9=Temp9+1
  1470.        If Parse.Temp=False Or Temp9=Parse.Temp Then
  1471.           Temp6=RecepRec.Charges
  1472.           Temp7=RecepRec.Inv
  1473.           Exit For
  1474.        Endif
  1475.     Endif
  1476.  Next
  1477.  If Temp7=False Then
  1478.     Strng="You can't get that!"
  1479.     Call IO.O
  1480.     Exit Sub
  1481.  Endif
  1482.  Get 8,Temp7,TreasureRecord
  1483.  Out3=TreasureRecord.TreasureName
  1484.  If Weight+TreasureRecord.Weight>UserRecord.Stats(1)*10 Then
  1485.     Strng="You can't carry any more!"
  1486.     Call IO.O
  1487.     Exit Sub
  1488.  Endif
  1489.  RecepRec.Inv=False
  1490.  RecepRec.Charges=False
  1491.  RecepRec.Invis=False
  1492.  RecepRec.TName=Nul
  1493.  Put 13,Temp5,RecepRec
  1494.  Call Add.Inventory(Temp7,Temp6)
  1495.  Strng="You take "+Out3+"."
  1496.  Call IO.O
  1497. 10181
  1498.  Exit Sub
  1499. 10182
  1500.  Resume 10181
  1501. End Sub
  1502.  
  1503. Sub Smash.Object
  1504.  On Local Error Goto 10192
  1505.  Call Examine.Treasure
  1506.  If Temp7 Then
  1507.     If TreasureRecord.Recep=False Then
  1508.        Strng="You can't smash that!"
  1509.        Call IO.O
  1510.        Exit Sub
  1511.     Endif
  1512.     If TreasureRecord.Locked=False Then
  1513.        Strng="It's already unlocked!"
  1514.        Call IO.O
  1515.        Exit Sub
  1516.     Endif
  1517.     If TreasureRecord.Locked>False Then
  1518.        Strng="It's already unlocked!"
  1519.        Call IO.O
  1520.        Exit Sub
  1521.     Endif
  1522.     If TreasureRecord.Keyed>False Then
  1523.        Strng="You can't smash that!"
  1524.        Call IO.O
  1525.        Exit Sub
  1526.     Endif
  1527.     If Int(Rnd*UserRecord.Stats(2))+1<Config2(33) Then
  1528.        Strng="You didn't smash it open!"
  1529.        Call IO.O
  1530.        Exit Sub
  1531.     Endif
  1532.     If Int(Rnd*UserRecord.Stats(1))+1<Config2(34) Then
  1533.        Strng="You didn't smash it open!"
  1534.        Call IO.O
  1535.        Exit Sub
  1536.     Endif
  1537.     If Rnd<Config1(21) Then
  1538.        Strng="You didn't smash it open!"
  1539.        Call IO.O
  1540.        Exit Sub
  1541.     Endif
  1542.     TreasureRecord.Locked=1
  1543.     TreasureRecord.Closed=1
  1544.     Put 8,Temp7,TreasureRecord
  1545.     Strng="You smash it open!"
  1546.     Call IO.O
  1547.     If ObjectRecord.Trap Then
  1548.        Call Traps
  1549.     Endif
  1550.     Exit Sub
  1551.  Endif
  1552.  Call Num
  1553.  Call Check.Room.Objects
  1554.  If Temp7=False Then
  1555.     Call Num
  1556.     Call Check.Inventory.Objects
  1557.  Endif
  1558.  If Temp7 Then
  1559.     If ObjectRecord.Hidden Then
  1560.        Strng="You can't smash that!"
  1561.        Call IO.O
  1562.        Exit Sub
  1563.     Endif
  1564.     If ObjectRecord.RoomLink=False Then
  1565.        Strng="You can't smash that!"
  1566.        Call IO.O
  1567.        Exit Sub
  1568.     Endif
  1569.     If ObjectRecord.Keyed Then
  1570.        Strng="You can't smash that!"
  1571.        Call IO.O
  1572.        Exit Sub
  1573.     Endif
  1574.     If ObjectRecord.DoorLock=1 Then
  1575.        Strng="It's already unlocked!"
  1576.        Call IO.O
  1577.        Exit Sub
  1578.     Endif
  1579.     If Int(Rnd*UserRecord.Stats(2))+1<Config2(33) Then
  1580.        Strng="You didn't smash it open!"
  1581.        Call IO.O
  1582.        Exit Sub
  1583.     Endif
  1584.     If Int(Rnd*UserRecord.Stats(1))+1<Config2(34) Then
  1585.        Strng="You didn't smash it open!"
  1586.        Call IO.O
  1587.        Exit Sub
  1588.     Endif
  1589.     If Rnd<Config1(21) Then
  1590.        Strng="You didn't smash it open!"
  1591.        Call IO.O
  1592.        Exit Sub
  1593.     Endif
  1594.     ObjectRecord.DoorLock=1
  1595.     Put 6,Temp7,ObjectRecord
  1596.     Strng="You smash it open!"
  1597.     Call IO.O
  1598.     If ObjectRecord.Trap Then
  1599.        Call Traps
  1600.     Endif
  1601.     Exit Sub
  1602.  Endif
  1603.  Strng="You can't smash that!"
  1604.  Call IO.O
  1605. 10191
  1606.  Exit Sub
  1607. 10192
  1608.  Resume 10191
  1609. End Sub
  1610.  
  1611. Sub Close.Object
  1612.  On Local Error Goto 10202
  1613.  Call Examine.Treasure
  1614.  If Temp7 Then
  1615.     If TreasureRecord.Recep=False Then
  1616.        Strng="You can't close that!"
  1617.        Call IO.O
  1618.        Exit Sub
  1619.     Endif
  1620.     If TreasureRecord.Locked=False Then
  1621.        Strng="You can't close that!"
  1622.        Call IO.O
  1623.        Exit Sub
  1624.     Endif
  1625.     If TreasureRecord.Locked>False Then
  1626.        Strng="It's already closed!"
  1627.        Call IO.O
  1628.        Exit Sub
  1629.     Endif
  1630.     If TreasureRecord.Closed=False Then
  1631.        Strng="You can't close that!"
  1632.        Call IO.O
  1633.        Exit Sub
  1634.     Endif
  1635.     If TreasureRecord.Closed>False Then
  1636.        Strng="It's already closed!"
  1637.        Call IO.O
  1638.        Exit Sub
  1639.     Endif
  1640.     TreasureRecord.Closed=1
  1641.     Put 8,Temp7,TreasureRecord
  1642.     Strng="You close it!"
  1643.     Call IO.O
  1644.     Exit Sub
  1645.  Endif
  1646.  Call Num
  1647.  Call Check.Room.Objects
  1648.  If Temp7=False Then
  1649.     Call Num
  1650.     Call Check.Inventory.Objects
  1651.  Endif
  1652.  If Temp7 Then
  1653.     If ObjectRecord.DoorLock<>1 Then
  1654.        Strng="You can't close that!"
  1655.        Call IO.O
  1656.        Exit Sub
  1657.     Endif
  1658.     If ObjectRecord.Closed Then
  1659.        Strng="It's already closed!"
  1660.        Call IO.O
  1661.        Exit Sub
  1662.     Endif
  1663.     ObjectRecord.Closed=True
  1664.     Put 6,Temp7,ObjectRecord
  1665.     Strng="You close it!"
  1666.     Call IO.O
  1667.     Exit Sub
  1668.  Endif
  1669.  Strng="You can't close that!"
  1670.  Call IO.O
  1671. 10201
  1672.  Exit Sub
  1673. 10202
  1674.  Resume 10201
  1675. End Sub
  1676.  
  1677. Sub Open.Object
  1678.  On Local Error Goto 10212
  1679.  Call Examine.Treasure
  1680.  If Temp7 Then
  1681.     If TreasureRecord.Locked>False Then
  1682.        Strng="You can't, it's locked!"
  1683.        Call IO.O
  1684.        Exit Sub
  1685.     Endif
  1686.     If TreasureRecord.Recep=False Then
  1687.        Strng="You can't open that!"
  1688.        Call IO.O
  1689.        Exit Sub
  1690.     Endif
  1691.     If TreasureRecord.Locked=False Then
  1692.        Strng="You can't open that!"
  1693.        Call IO.O
  1694.        Exit Sub
  1695.     Endif
  1696.     If TreasureRecord.Closed=False Then
  1697.        Strng="You can't open that!"
  1698.        Call IO.O
  1699.        Exit Sub
  1700.     Endif
  1701.     If TreasureRecord.Closed<False Then
  1702.        Strng="It's already open!"
  1703.        Call IO.O
  1704.        Exit Sub
  1705.     Endif
  1706.     TreasureRecord.Closed=True
  1707.     Put 8,Temp7,TreasureRecord
  1708.     Strng="You open it!"
  1709.     Call IO.O
  1710.     Exit Sub
  1711.  Endif
  1712.  Call Num
  1713.  Call Check.Room.Objects
  1714.  If Temp7=False Then
  1715.     Call Num
  1716.     Call Check.Inventory.Objects
  1717.  Endif
  1718.  If Temp7 Then
  1719.     If ObjectRecord.DoorLock<>1 Then
  1720.        Strng="You can't open that!"
  1721.        Call IO.O
  1722.        Exit Sub
  1723.     Endif
  1724.     If ObjectRecord.Closed=False Then
  1725.        Strng="It's already open!"
  1726.        Call IO.O
  1727.        Exit Sub
  1728.     Endif
  1729.     ObjectRecord.Closed=False
  1730.     Put 6,Temp7,ObjectRecord
  1731.     Strng="You open it!"
  1732.     Call IO.O
  1733.     Exit Sub
  1734.  Endif
  1735.  Strng="You can't open that!"
  1736.  Call IO.O
  1737. 10211
  1738.  Exit Sub
  1739. 10212
  1740.  Resume 10211
  1741. End Sub
  1742.  
  1743. Sub Hold.Object
  1744.  On Local Error Goto 10222
  1745.  Call Check.Inventory.Treasure
  1746.  If Temp7=False Then
  1747.     Strng="You aren't carrying that!"
  1748.     Call IO.O
  1749.     Exit Sub
  1750.  Endif
  1751.  If TreasureRecord.Type>False Then
  1752.     Strng="You can't hold that!"
  1753.     Call IO.O
  1754.     Exit Sub
  1755.  Endif
  1756.  If Treasure.Charges(Temp5)<=False Then
  1757.     Strng="You can't, it has zero charges!"
  1758.     Call IO.O
  1759.     Exit Sub
  1760.  Endif
  1761.  Temp1=Abs(TreasureRecord.Plus)
  1762.  If TreasureRecord.Type<False Then
  1763.     Weapon3=Temp1
  1764.     Weapon5=Temp5
  1765.  Endif
  1766.  If TreasureRecord.Type=False Then
  1767.     If UserRecord.ClassType=4 Then
  1768.        If TreasureRecord.Proficiency=3 Or TreasureRecord.Proficiency=4 Then
  1769.           Strng="Clerics may only use blunt or pole type weapons!"
  1770.           Call IO.O
  1771.           Exit Sub
  1772.        Endif
  1773.     Endif
  1774.     Weapon2=Temp1
  1775.     Weapon6=Temp5
  1776.     Weapon10=TreasureRecord.Proficiency
  1777.  Endif
  1778.  Strng="You hold "+Out3+"(+"+Mid$(Str$(Temp1),2)+")."
  1779.  Call IO.O
  1780. 10221
  1781.  Exit Sub
  1782. 10222
  1783.  Resume 10221
  1784. End Sub
  1785.  
  1786. Sub Wear.Object
  1787.  On Local Error Goto 10232
  1788.  Call Check.Inventory.Treasure
  1789.  If Temp7=False Then
  1790.     Strng="You aren't carrying that!"
  1791.     Call IO.O
  1792.     Exit Sub
  1793.  Endif
  1794.  If TreasureRecord.Type<=False Then
  1795.     If TreasureRecord.RingType=False Then
  1796.        Strng="You can't wear that!"
  1797.        Call IO.O
  1798.        Exit Sub
  1799.     Endif
  1800.  Endif
  1801.  If Treasure.Charges(Temp5)<=False Then
  1802.     Strng="You can't, it has zero charges!"
  1803.     Call IO.O
  1804.     Exit Sub
  1805.  Endif
  1806.  Temp1=Abs(TreasureRecord.Plus)
  1807.  If TreasureRecord.RingType Then
  1808.     Weapon7=Temp5
  1809.     Weapon8=TreasureRecord.RingType
  1810.     Weapon9=TreasureRecord.RingSpell
  1811.  Endif
  1812.  If TreasureRecord.Type>False Then
  1813.     Weapon1=Temp1
  1814.     Weapon4=Temp5
  1815.  Endif
  1816.  Strng="You wear "+Out3+"(+"+Mid$(Str$(Temp1),2)+")."
  1817.  Call IO.O
  1818. 10231
  1819.  Exit Sub
  1820. 10232
  1821.  Resume 10231
  1822. End Sub
  1823.  
  1824. Sub Return.Object
  1825.  On Local Error Goto 10242
  1826.  Call Check.Inventory.Treasure
  1827.  If Temp7=False Then
  1828.     Strng="You aren't carrying that!"
  1829.     Call IO.O
  1830.     Exit Sub
  1831.  Endif
  1832.  Strng="You return "+Out3+"."
  1833.  If Temp5=Weapon5 Then
  1834.     Weapon3=False
  1835.     Weapon5=False
  1836.     Call IO.O
  1837.     Exit Sub
  1838.  Endif
  1839.  If Temp5=Weapon4 Then
  1840.     Weapon1=False
  1841.     Weapon4=False
  1842.     Call IO.O
  1843.     Exit Sub
  1844.  Endif
  1845.  If Temp5=Weapon7 Then
  1846.     Weapon7=False
  1847.     Weapon8=False
  1848.     Weapon9=False
  1849.     Call IO.O
  1850.     Exit Sub
  1851.  Endif
  1852.  If Temp5=Weapon6 Then
  1853.     Weapon2=False
  1854.     Weapon6=False
  1855.     Weapon10=False
  1856.     Call IO.O
  1857.     Exit Sub
  1858.  Endif
  1859.  Strng="Your aren't wearing that!"
  1860.  Call IO.O
  1861. 10241
  1862.  Exit Sub
  1863. 10242
  1864.  Resume 10241
  1865. End Sub
  1866.  
  1867. Sub Lock.Object
  1868.  On Local Error Goto 10252
  1869.  Call Examine.Treasure
  1870.  If Temp7 Then
  1871.     If TreasureRecord.Recep=False Then
  1872.        Strng="You can't lock that!"
  1873.        Call IO.O
  1874.        Exit Sub
  1875.     Endif
  1876.     If TreasureRecord.Locked>False Then
  1877.        Strng="It's already locked!"
  1878.        Call IO.O
  1879.        Exit Sub
  1880.     Endif
  1881.     TreasureRecord.Locked=1
  1882.     TreasureRecord.Closed=1
  1883.     Put 8,Temp7,TreasureRecord
  1884.     Strng="You lock it!"
  1885.     Call IO.O
  1886.     Exit Sub
  1887.  Endif
  1888.  Call Num
  1889.  Call Check.Room.Objects
  1890.  If Temp7=False Then
  1891.     Call Num
  1892.     Call Check.Inventory.Objects
  1893.  Endif
  1894.  If Temp7 Then
  1895.     If ObjectRecord.RoomLink=False Then
  1896.        Strng="You can't lock that!"
  1897.        Call IO.O
  1898.        Exit Sub
  1899.     Endif
  1900.     If ObjectRecord.DoorLock=2 Then
  1901.        Strng="It's already locked!"
  1902.        Call IO.O
  1903.        Exit Sub
  1904.     Endif
  1905.     If ObjectRecord.DoorLock=False Then
  1906.        Strng="You can't lock that!"
  1907.        Call IO.O
  1908.        Exit Sub
  1909.     Endif
  1910.     ObjectRecord.DoorLock=2
  1911.     ObjectRecord.Closed=True
  1912.     Put 6,Temp7,ObjectRecord
  1913.     Strng="You lock it!"
  1914.     Call IO.O
  1915.     Exit Sub
  1916.  Endif
  1917.  Strng="You can't lock that!"
  1918.  Call IO.O
  1919. 10251
  1920.  Exit Sub
  1921. 10252
  1922.  Resume 10251
  1923. End Sub
  1924.  
  1925. Sub Unlock.Object
  1926.  On Local Error Goto 10262
  1927.  Call Examine.Treasure
  1928.  If Temp7 Then
  1929.     If TreasureRecord.Recep=False Then
  1930.        Strng="You can't unlock that!"
  1931.        Call IO.O
  1932.        Exit Sub
  1933.     Endif
  1934.     If TreasureRecord.Locked=False Then
  1935.        Strng="You can't unlock that!"
  1936.        Call IO.O
  1937.        Exit Sub
  1938.     Endif
  1939.     If TreasureRecord.Locked<False Then
  1940.        Strng="It's already unlocked!"
  1941.        Call IO.O
  1942.        Exit Sub
  1943.     Endif
  1944.     If TreasureRecord.Keyed=False Then
  1945.        TreasureRecord.Locked=True
  1946.        TreasureRecord.Closed=1
  1947.        Put 8,Temp7,TreasureRecord
  1948.        Strng="You unlock it!"
  1949.        Call IO.O
  1950.        Exit Sub
  1951.     Endif
  1952.     If Last.Command.Number=Picklock.Command Then
  1953.        If ObjectRecord.Hidden Then
  1954.           Strng="You can't picklock hidden doors!"
  1955.           Call IO.O
  1956.           Exit Sub
  1957.        Endif
  1958.        If UserRecord.ClassType<>3 Then
  1959.           If Normal.User Then
  1960.              Strng="You can't picklock doors!"
  1961.              Call IO.O
  1962.              Exit Sub
  1963.           Endif
  1964.        Endif
  1965.        If Int(Rnd*UserRecord.Stats(1))+1<Config2(35) Then
  1966.           Strng="You didn't picklock it!"
  1967.           Call IO.O
  1968.           Exit Sub
  1969.        Endif
  1970.        If Int(Rnd*UserRecord.Stats(2))+1<Config2(36) Then
  1971.           Strng="You didn't picklock it!"
  1972.           Call IO.O
  1973.           Exit Sub
  1974.        Endif
  1975.        If Rnd<Config1(22) Then
  1976.           Strng="You didn't picklock it!"
  1977.           Call IO.O
  1978.           Exit Sub
  1979.        Endif
  1980.        TreasureRecord.Locked=True
  1981.        TreasureRecord.Closed=1
  1982.        Put 8,Temp7,TreasureRecord
  1983.        Strng="You unlock it!"
  1984.        Call IO.O
  1985.        Exit Sub
  1986.     Endif
  1987.     Out2=Right$(Str$(TreasureRecord.Keyed+100000!),5)
  1988.     For Temp2=1 To Number.Inventory
  1989.        If Treasure(Temp2) Then
  1990.           Get 8,Treasure(Temp2),TreasureRecord
  1991.           If TreasureRecord.Keyed Then
  1992.              If Temp2<>Temp5 Then
  1993.                 Temp8=True
  1994.                 Out3=Right$(Str$(TreasureRecord.Keyed+100000!),5)
  1995.                 For Temp3=1 To 5
  1996.                    Temp1=Val(Mid$(Out3,Temp3,1))
  1997.                    If Temp1<>Val(Mid$(Out2,Temp3,1)) Then
  1998.                       If Temp1>False Then
  1999.                          Temp8=False
  2000.                          Exit For
  2001.                       Endif
  2002.                    Endif
  2003.                 Next
  2004.                 If Temp8 Then
  2005.                    Get 8,Temp7,TreasureRecord
  2006.                    TreasureRecord.Locked=True
  2007.                    TreasureRecord.Closed=1
  2008.                    Put 8,Temp7,TreasureRecord
  2009.                    Strng="You unlock it!"
  2010.                    Call IO.O
  2011.                    Exit Sub
  2012.                 Endif
  2013.              Endif
  2014.           Endif
  2015.        Endif
  2016.     Next
  2017.     Strng="You don't have the key!"
  2018.     Call IO.O
  2019.     Exit Sub
  2020.  Endif
  2021.  Call Num
  2022.  Call Check.Room.Objects
  2023.  If Temp7=False Then
  2024.     Call Num
  2025.     Call Check.Inventory.Objects
  2026.  Endif
  2027.  If Temp7 Then
  2028.     If ObjectRecord.RoomLink=False Then
  2029.        Strng="You can't unlock that!"
  2030.        Call IO.O
  2031.        Exit Sub
  2032.     Endif
  2033.     If ObjectRecord.DoorLock=False Then
  2034.        Strng="You can't unlock that!"
  2035.        Call IO.O
  2036.        Exit Sub
  2037.     Endif
  2038.     If ObjectRecord.DoorLock=1 Then
  2039.        Strng="It's already unlocked!"
  2040.        Call IO.O
  2041.        Exit Sub
  2042.     Endif
  2043.     If ObjectRecord.Keyed=False Then
  2044.        ObjectRecord.DoorLock=1
  2045.        ObjectRecord.Closed=True
  2046.        Put 6,Temp7,ObjectRecord
  2047.        Strng="You unlock it!"
  2048.        Call IO.O
  2049.        Exit Sub
  2050.     Endif
  2051.     If Last.Command.Number=Picklock.Command Then
  2052.        If ObjectRecord.Hidden Then
  2053.           Strng="You can't picklock hidden doors!"
  2054.           Call IO.O
  2055.           Exit Sub
  2056.        Endif
  2057.        If UserRecord.ClassType<>3 Then
  2058.           If Normal.User Then
  2059.              Strng="You can't picklock doors!"
  2060.              Call IO.O
  2061.              Exit Sub
  2062.           Endif
  2063.        Endif
  2064.        If Int(Rnd*UserRecord.Stats(1))+1<Config2(35) Then
  2065.           Strng="You didn't picklock it!"
  2066.           Call IO.O
  2067.           Exit Sub
  2068.        Endif
  2069.        If Int(Rnd*UserRecord.Stats(2))+1<Config2(36) Then
  2070.           Strng="You didn't picklock it!"
  2071.           Call IO.O
  2072.           Exit Sub
  2073.        Endif
  2074.        If Rnd<Config1(22) Then
  2075.           Strng="You didn't picklock it!"
  2076.           Call IO.O
  2077.           Exit Sub
  2078.        Endif
  2079.        ObjectRecord.DoorLock=1
  2080.        ObjectRecord.Closed=True
  2081.        Put 6,Temp7,ObjectRecord
  2082.        Strng="You unlock it!"
  2083.        Call IO.O
  2084.        Exit Sub
  2085.     Endif
  2086.     Out2=Right$(Str$(ObjectRecord.Keyed+100000!),5)
  2087.     For Temp2=1 To Number.Inventory
  2088.        If Treasure(Temp2) Then
  2089.           Get 8,Treasure(Temp2),TreasureRecord
  2090.           If TreasureRecord.Keyed Then
  2091.              If Temp2<>Temp5 Then
  2092.                 Temp8=True
  2093.                 Out3=Right$(Str$(TreasureRecord.Keyed+100000!),5)
  2094.                 For Temp3=1 To 5
  2095.                    Temp1=Val(Mid$(Out3,Temp3,1))
  2096.                    If Temp1<>Val(Mid$(Out2,Temp3,1)) Then
  2097.                       If Temp1>False Then
  2098.                          Temp8=False
  2099.                          Exit For
  2100.                       Endif
  2101.                    Endif
  2102.                 Next
  2103.                 If Temp8 Then
  2104.                    ObjectRecord.DoorLock=1
  2105.                    ObjectRecord.Closed=True
  2106.                    Put 6,Temp7,ObjectRecord
  2107.                    Strng="You unlock it!"
  2108.                    Call IO.O
  2109.                    Exit Sub
  2110.                 Endif
  2111.              Endif
  2112.           Endif
  2113.        Endif
  2114.     Next
  2115.     Strng="You don't have the key!"
  2116.     Call IO.O
  2117.     Exit Sub
  2118.  Endif
  2119.  Strng="You can't unlock that!"
  2120.  Call IO.O
  2121. 10261
  2122.  Exit Sub
  2123. 10262
  2124.  Resume 10261
  2125. End Sub
  2126.  
  2127. Sub Fix.Object
  2128.  On Local Error Goto 10272
  2129.  Call Examine.Treasure
  2130.  If Temp7=False Then
  2131.     Strng="You can't fix that!"
  2132.     Call IO.O
  2133.     Exit Sub
  2134.  Endif
  2135.  If TreasureRecord.Spell Then
  2136.     Strng="You can't fix that!"
  2137.     Call IO.O
  2138.     Exit Sub
  2139.  Endif
  2140.  If Treasure.Charges(Temp5)>False Then
  2141.     Strng="That's not broken!"
  2142.     Call IO.O
  2143.     Exit Sub
  2144.  Endif
  2145.  If UserRecord.Stats(3)<Config2(28) Then
  2146.     Strng="You didn't fix it!"
  2147.     Call IO.O
  2148.     Exit Sub
  2149.  Endif
  2150.  If Abs(TreasureRecord.Plus)>Config2(29) Then
  2151.     Strng="You didn't fix it!"
  2152.     Call IO.O
  2153.     Exit Sub
  2154.  Endif
  2155.  If Rnd<Config1(16) Then
  2156.     Strng="You didn't fix it!"
  2157.     Call IO.O
  2158.     Exit Sub
  2159.  Endif
  2160.  Temp1=TreasureRecord.Charges
  2161.  If Temp1>Config2(30) Then
  2162.     Temp1=Config2(30)
  2163.  Endif
  2164.  Select Case Temp4
  2165.  Case 0
  2166.     Treasure.Charges(Temp5)=Temp1
  2167.  Case -1
  2168.     Room.Inventory.Charges(Temp5)=Temp1
  2169.  Case 1
  2170.     RoomRecord.TreCharges(Temp5)=Temp1
  2171.     Put 5,Room,RoomRecord
  2172.  End Select
  2173.  Strng="You fix it!"
  2174.  Call IO.O
  2175. 10271
  2176.  Exit Sub
  2177. 10272
  2178.  Resume 10271
  2179. End Sub
  2180.  
  2181. Sub Panic
  2182.  On Local Error Goto 10282
  2183.  Temp9=False
  2184.  For TempA=1 To 11
  2185.     If RoomRecord.Direct(TempA) Then
  2186.        Call Restrict(TempA)
  2187.        If TempB=False Then
  2188.           Temp9=Temp9+1
  2189.        Endif
  2190.     Endif
  2191.  Next
  2192.  If Temp9=False Then
  2193.     Strng="There is nowhere to run! Try Appeal.."
  2194.     Call IO.O
  2195.     Exit Sub
  2196.  Endif
  2197.  TempC=Int(Rnd*Temp9+1)
  2198.  Temp9=False
  2199.  For TempA=1 To 11
  2200.     If RoomRecord.Direct(TempA) Then
  2201.        Call Restrict(TempA)
  2202.        If TempB=False Then
  2203.           Temp9=Temp9+1
  2204.           If Temp9=TempC Then
  2205.              Strng="You run away like a screaming madman!"
  2206.              Call IO.O
  2207.              Call Fumble
  2208.              Next.Room=RoomRecord.Direct(TempA)
  2209.              Call Enter.Room
  2210.              Exit For
  2211.           Endif
  2212.        Endif
  2213.     Endif
  2214.  Next
  2215. 10281
  2216.  Exit Sub
  2217. 10282
  2218.  Resume 10281
  2219. End Sub
  2220.  
  2221. Sub Train
  2222.  On Local Error Goto 10292
  2223.  If UserRecord.Level<=False Then
  2224.     Call Train.Stats
  2225.     Exit Sub
  2226.  Endif
  2227.  Call Gold(Temp#)
  2228.  If UserRecord.Gold<Temp# Then
  2229.     Strng="You don't have enough Gold to train!"
  2230.     Call IO.O
  2231.     Exit Sub
  2232.  Endif
  2233.  If Config2(44) Then
  2234.     If UserRecord.Experience>False Then
  2235.        Strng="You don't have enough experience to train!"
  2236.        Call IO.O
  2237.        Exit Sub
  2238.     Endif
  2239.  Endif
  2240.  If Config2(44)=False Then
  2241.     Call In.Room(UserRecord.ClassType)
  2242.     If TempA=False Then
  2243.        Strng="You can't train here!"
  2244.        Call IO.O
  2245.        Exit Sub
  2246.     Endif
  2247.  Endif
  2248.  Call Train.Stats
  2249. 10291
  2250.  Exit Sub
  2251. 10292
  2252.  Resume 10291
  2253. End Sub
  2254.  
  2255. Sub Appeal
  2256.  On Local Error Goto 10302
  2257.  If UserRecord.Fatigue<UserRecord.FatigueMax*Config1(20) Then
  2258.     Strng="You are teleported elsewhere!"
  2259.     Call IO.O
  2260.     Next.Room=Val(Config3(24))
  2261.     Call Teleport
  2262.     Call Enter.Room
  2263.     Exit Sub
  2264.  Endif
  2265.  For Temp5=1 To 11
  2266.     If RoomRecord.Direct(Temp5) Then
  2267.        Strng="There are exits in the room!"
  2268.        Call IO.O
  2269.        Exit Sub
  2270.     Endif
  2271.  Next
  2272.  For Temp5=1 To 10
  2273.     Temp2=RoomRecord.Object(Temp5)
  2274.     If Temp2>False And Temp2<=Lof(6)/Len(ObjectRecord) Then
  2275.        Get 6,Temp2,ObjectRecord
  2276.        If ObjectRecord.RoomLink>False Then
  2277.           Strng="There are exits in the room!"
  2278.           Call IO.O
  2279.           Exit Sub
  2280.        Endif
  2281.     Endif
  2282.  Next
  2283.  Strng="You are teleported elsewhere!"
  2284.  Call IO.O
  2285.  Next.Room=Val(Config3(24))
  2286.  Number.Monsters=False
  2287.  Call Teleport
  2288.  Call Enter.Room
  2289. 10301
  2290.  Exit Sub
  2291. 10302
  2292.  Resume 10301
  2293. End Sub
  2294.  
  2295. Sub Drink.Potion
  2296.  On Local Error Goto 10312
  2297.  Call Check.Inventory.Treasure
  2298.  If Temp7=False Then
  2299.     Strng="You can't drink that!"
  2300.     Call IO.O
  2301.     Exit Sub
  2302.  Endif
  2303.  If TreasureRecord.Potion=False Then
  2304.     Strng="That's not a potion!"
  2305.     Call IO.O
  2306.     Exit Sub
  2307.  Endif
  2308.  If Treasure.Charges(Temp5)=False Then
  2309.     Strng="You can't, it's empty!"
  2310.     Call IO.O
  2311.     Exit Sub
  2312.  Endif
  2313.  Temp2=TreasureRecord.Spell
  2314.  If Temp2>False And Temp2<=Spells.Max Then
  2315.     SpellRecord=SpellArray(Temp2)
  2316.     Treasure.Charges(Temp5)=Treasure.Charges(Temp5)-1
  2317.     Magic.Spell=SpellRecord.SpellType
  2318.     Multiplier=SpellRecord.Level
  2319.     Monster.Temp=False
  2320.     Parser=False
  2321.     Temp7=False
  2322.     Temp3=True
  2323.     Call Magic
  2324.  Endif
  2325. 10311
  2326.  Exit Sub
  2327. 10312
  2328.  Resume 10311
  2329. End Sub
  2330.  
  2331. Sub Eat.Object
  2332.  On Local Error Goto 10322
  2333.  Call Check.Inventory.Treasure
  2334.  If Temp7=False Then
  2335.     Strng="You can't eat that!"
  2336.     Call IO.O
  2337.     Exit Sub
  2338.  Endif
  2339.  If TreasureRecord.Edible=False Then
  2340.     Strng="That's not edible!"
  2341.     Call IO.O
  2342.     Exit Sub
  2343.  Endif
  2344.  If Treasure.Charges(Temp5)=False Then
  2345.     Strng="You can't, it's been eaten!"
  2346.     Call IO.O
  2347.     Exit Sub
  2348.  Endif
  2349.  Temp2=TreasureRecord.Spell
  2350.  If Temp2>False And Temp2<=Spells.Max Then
  2351.     SpellRecord=SpellArray(Temp2)
  2352.     Treasure.Charges(Temp5)=Treasure.Charges(Temp5)-1
  2353.     Magic.Spell=SpellRecord.SpellType
  2354.     Multiplier=SpellRecord.Level
  2355.     Monster.Temp=False
  2356.     Parser=False
  2357.     Temp7=False
  2358.     Temp3=True
  2359.     Call Magic
  2360.  Endif
  2361. 10321
  2362.  Exit Sub
  2363. 10322
  2364.  Resume 10321
  2365. End Sub
  2366.  
  2367. Sub Teleport.User
  2368.  On Local Error Goto 10332
  2369.  Call Parse
  2370.  If Parser Then
  2371.     Call Numeric
  2372.     Call Search.Mess(False)
  2373.     If Temp>False Then
  2374.        Out3=MessWorkRecord1.UserName
  2375.        Out3=Rtrim$(Out3)
  2376.        Out3=Lcase$(Out3)
  2377.        Strng="You teleport "+Out3+"!"
  2378.        Call IO.O
  2379.        Out2=Str$(Int(Val(Parsed.Command2)))
  2380.        Call Send.Mess(18,TempB,False,Out2)
  2381.        Exit Sub
  2382.     Endif
  2383.     Strng="You can't teleport that!"
  2384.     Call IO.O
  2385.     Exit Sub
  2386.  Endif
  2387.  Next.Room=Int(Val(Parsed.Command1))
  2388.  Graphics.Off=True
  2389.  Strng="A Dark Cloud Passes Overhead..."
  2390.  Call IO.O
  2391.  Strng="  A Bolt of Lightning Strikes..."
  2392.  Call IO.O
  2393.  Strng="The Cloud Disappears..."
  2394.  Call IO.O
  2395.  Graphics.Off=False
  2396.  Call Teleport
  2397.  Call Enter.Room
  2398. 10331
  2399.  Exit Sub
  2400. 10332
  2401.  Resume 10331
  2402. End Sub
  2403.  
  2404. Sub Load.Object
  2405.  On Local Error Goto 10342
  2406.  Call Examine.Treasure
  2407.  If Temp7=False Then
  2408.     Strng="You can't load that!"
  2409.     Call IO.O
  2410.     Exit Sub
  2411.  Endif
  2412.  Temp8=False
  2413.  If TreasureRecord.Loadable=True Then
  2414.     Temp1=TreasureRecord.AmmoLoads
  2415.     Temp8=True
  2416.  Endif
  2417.  If TreasureRecord.Launchable=True Then
  2418.     Temp1=TreasureRecord.LaunchLoads
  2419.     Temp8=1
  2420.  Endif
  2421.  If Temp8=False Then
  2422.     Strng="You can't load that!"
  2423.     Call IO.O
  2424.     Exit Sub
  2425.  Endif
  2426.  If Temp1<False Or Temp1>Lof(8)/Len(TreasureRecord) Then
  2427.     Strng="There's no ammunition!"
  2428.     Call IO.O
  2429.     Exit Sub
  2430.  Endif
  2431.  Temp6=False
  2432.  Get 8,Temp1,TreasureRecord
  2433.  If Temp8 Then
  2434.     If TreasureRecord.Ammunition Then
  2435.        Temp6=True
  2436.     Endif
  2437.  Endif
  2438.  If Temp8=1 Then
  2439.     If TreasureRecord.LaunchAmmo Then
  2440.        Temp6=True
  2441.     Endif
  2442.  Endif
  2443.  If Temp6=False Then
  2444.     Strng="There's no ammunition!"
  2445.     Call IO.O
  2446.     Exit Sub
  2447.  Endif
  2448.  Temp9=False
  2449.  For Temp2=1 To Number.Inventory
  2450.     If Temp1=Treasure(Temp2) Then
  2451.        Call Discard(Temp2,True)
  2452.        Temp9=True
  2453.        Exit For
  2454.     Endif
  2455.  Next
  2456.  If Temp9=False Then
  2457.     For Temp2=1 To Room.Treasure.Max
  2458.        If Temp1=Room.Inventory(Temp2) Then
  2459.           Call Discard.Inventory(Temp2)
  2460.           Temp9=True
  2461.           Exit For
  2462.        Endif
  2463.     Next
  2464.  Endif
  2465.  If Temp9=False Then
  2466.     For Temp2=1 To 10
  2467.        If Temp1=RoomRecord.Treasure(Temp2) Then
  2468.           Call Discard.Treasure(Temp2)
  2469.           Temp9=True
  2470.           Exit For
  2471.        Endif
  2472.     Next
  2473.  Endif
  2474.  If Temp9=False Then
  2475.     Strng="There's no ammunition!"
  2476.     Call IO.O
  2477.     Exit Sub
  2478.  Endif
  2479.  TempZ=False
  2480.  Select Case Temp4
  2481.  Case 0
  2482.     Treasure.Charges(Temp5)=Treasure.Charges(Temp5)+1
  2483.     If Treasure.Charges(Temp5)>10 Then
  2484.        Treasure.Charges(Temp5)=10
  2485.        TempZ=True
  2486.     Endif
  2487.  Case -1
  2488.     Room.Inventory.Charges(Temp5)=Room.Inventory.Charges(Temp5)+1
  2489.     If Room.Inventory.Charges(Temp5)>10 Then
  2490.        Room.Inventory.Charges(Temp5)=10
  2491.        TempZ=True
  2492.     Endif
  2493.  Case 1
  2494.     RoomRecord.TreCharges(Temp5)=RoomRecord.TreCharges(Temp5)+1
  2495.     If RoomRecord.TreCharges(Temp5)>10 Then
  2496.        RoomRecord.TreCharges(Temp5)=10
  2497.        TempZ=True
  2498.     Endif
  2499.     Put 5,Room,RoomRecord
  2500.  End Select
  2501.  Strng="You load the device!"
  2502.  If TempZ Then
  2503.     Strng="The device can't load that much!"
  2504.  Endif
  2505.  Call IO.O
  2506. 10341
  2507.  Exit Sub
  2508. 10342
  2509.  Resume 10341
  2510. End Sub
  2511.  
  2512. Sub Fire.Object
  2513.  On Local Error Goto 10352
  2514.  Call Find.Inventory
  2515.  If Temp7=False Then
  2516.     Strng="You can't fire that!"
  2517.     Call IO.O
  2518.     Exit Sub
  2519.  Endif
  2520.  If TreasureRecord.Loadable=False Then
  2521.     Strng="You can't fire that!"
  2522.     Call IO.O
  2523.     Exit Sub
  2524.  Endif
  2525.  If TreasureRecord.AmmoLoads=False Then
  2526.     Strng="It's not loaded with ammunition!"
  2527.     Call IO.O
  2528.     Exit Sub
  2529.  Endif
  2530.  Get 8,TreasureRecord.AmmoLoads,TreasureRecord
  2531.  If TreasureRecord.Ammunition=False Then
  2532.     Strng="It's not loaded with ammunition!"
  2533.     Call IO.O
  2534.     Exit Sub
  2535.  Endif
  2536.  Get 8,Temp7,TreasureRecord
  2537.  If Parser=False Then
  2538.     Strng="Fire at what?"
  2539.     Call IO.O
  2540.     Exit Sub
  2541.  Endif
  2542.  If Treasure.Charges(Temp5)=False Then
  2543.     Strng="It's not loaded!"
  2544.     Call IO.O
  2545.     Exit Sub
  2546.  Endif
  2547.  Treasure.Charges(Temp5)=Treasure.Charges(Temp5)-1
  2548.  Parsed.Command1=Parsed.Command2
  2549.  Call Numeric
  2550.  If Rnd<Config1(12) Then
  2551.     Strng="Bang! The ammunition explodes in your face!"
  2552.     Call IO.O
  2553.     Prefix2=Nul
  2554.     Strng="The device hits you for"
  2555.     Out3="loading ammunition"
  2556.     Temp2=Rnd*Abs(TreasureRecord.Plus)+1
  2557.     Call Hit.Player(Temp2)
  2558.     Exit Sub
  2559.  Endif
  2560.  If Rnd<Config1(13) Then
  2561.     Strng="The device fires harmlessly!"
  2562.     Call IO.O
  2563.     Exit Sub
  2564.  Endif
  2565.  Out5=TreasureRecord.ShortName
  2566.  Out5=Rtrim$(Out5)
  2567.  Out5=Lcase$(Out5)
  2568.  Call Check.Monster
  2569.  If Monster.Temp Then
  2570.     Out3=MonsterArray(Monster.Temp).MonsterName
  2571.     Out3=Rtrim$(Out3)
  2572.     Out3=Lcase$(Out3)
  2573.     Strng="You fire the "+Out5+" at the "+Out3+"!"
  2574.     Call IO.O
  2575.     Multiplier=Abs(TreasureRecord.Plus)
  2576.     Call Hit.Monster
  2577.     Exit Sub
  2578.  Endif
  2579.  Call Search.Mess(False)
  2580.  If Temp=Room And TempB<>User.Index Then
  2581.     User.Temp=TempB
  2582.     Out3=MessWorkRecord1.UserName
  2583.     Out3=Rtrim$(Out3)
  2584.     Out3=Lcase$(Out3)
  2585.     Strng="You fire "+Out5+" at "+Out3+"!"
  2586.     Call IO.O
  2587.     Out2=TreasureRecord.TreasureName
  2588.     Out2=Lcase$(Out2)
  2589.     Out2=Rtrim$(Out2)
  2590.     Call Send.Mess(22,TempB,Room,Out2)
  2591.     Call Hit.Game.Player
  2592.     Exit Sub
  2593.  Endif
  2594.  Strng="The device fires into empty air!"
  2595.  Call IO.O
  2596. 10351
  2597.  Exit Sub
  2598. 10352
  2599.  Resume 10351
  2600. End Sub
  2601.  
  2602. Sub Reduce.Monsters
  2603.  On Local Error Goto 10362
  2604.  Out2=Parsed.Command1
  2605.  Out2=Rtrim$(Out2)
  2606.  Temp2=Int(Val(Out2))
  2607.  If Temp2>=False And Temp2<Number.Monsters Then
  2608.     Number.Monsters=Temp2
  2609.     Strng="Number of Monsters reduced to:"+Str$(Number.Monsters)+"!"
  2610.     Call IO.O
  2611.  Endif
  2612. 10361
  2613.  Exit Sub
  2614. 10362
  2615.  Resume 10361
  2616. End Sub
  2617.  
  2618. Sub Discard.Object
  2619.  On Local Error Goto 10372
  2620.  Call Check.Inventory.Treasure
  2621.  If Temp7 Then
  2622.     Call Discard(Temp5,True)
  2623.     Strng="You discard "+Out3+"."
  2624.     Call IO.O
  2625.     Exit Sub
  2626.  Endif
  2627.  Call Num
  2628.  Call Check.Inventory.Objects
  2629.  If Temp7 Then
  2630.     UserRecord.Object(Temp5)=False
  2631.     UserRecord.ObjCharges(Temp5)=False
  2632.     Strng="You discard "+Out3+"."
  2633.     Call IO.O
  2634.     Exit Sub
  2635.  Endif
  2636.  Strng="You can't discard that!"
  2637.  Call IO.O
  2638. 10371
  2639.  Exit Sub
  2640. 10372
  2641.  Resume 10371
  2642. End Sub
  2643.  
  2644. Sub Discard.Inventory(Var1)
  2645.  On Local Error Goto 10382
  2646.  For TempX=Var1 To Room.Treasure.Max-1
  2647.     Room.Inventory(TempX)=Room.Inventory(TempX+1)
  2648.     Room.Inventory.Charges(TempX)=Room.Inventory.Charges(TempX+1)
  2649.  Next
  2650.  Room.Inventory(Room.Treasure.Max)=False
  2651.  Room.Inventory.Charges(Room.Treasure.Max)=False
  2652. 10381
  2653.  Exit Sub
  2654. 10382
  2655.  Resume 10381
  2656. End Sub
  2657.  
  2658. Sub Discard.Treasure(Var1)
  2659.  On Local Error Goto 10392
  2660.  RoomRecord.Treasure(Var1)=False
  2661.  RoomRecord.TreCharges(Var1)=False
  2662.  RoomRecord.Flags(Var1)=False
  2663.  Put 5,Room,RoomRecord
  2664. 10391
  2665.  Exit Sub
  2666. 10392
  2667.  Resume 10391
  2668. End Sub
  2669.  
  2670. Sub Drop.Object
  2671.  On Local Error Goto 10402
  2672.  Parsed.Command1=Stored.Parsed.Command2
  2673.  Call Numeric
  2674.  Out2=Parsed.Command1
  2675.  Out2=Lcase$(Out2)
  2676.  Call Drop(True)
  2677. 10401
  2678.  Exit Sub
  2679. 10402
  2680.  Resume 10401
  2681. End Sub
  2682.  
  2683. Sub Kill.Monster
  2684.  On Local Error Goto 10412
  2685.  Monster.Temp=False
  2686.  Call Check.Monster
  2687.  If Monster.Temp Then
  2688.     Graphics.Off=True
  2689.     Strng="Evil Laughter Sounds From Above..."
  2690.     Call IO.O
  2691.     Strng="   A Bolt of Lightning Strikes..."
  2692.     Call IO.O
  2693.     Graphics.Off=False
  2694.     Strng="The "+Out3+" was just struck dead!"
  2695.     Call IO.O
  2696.     Call Monster.Died
  2697.     Exit Sub
  2698.  Endif
  2699.  User.Temp=False
  2700.  Call Check.User
  2701.  If User.Temp Then
  2702.     Graphics.Off=True
  2703.     Strng="Evil Laughter Sounds From Above..."
  2704.     Call IO.O
  2705.     Strng="   A Bolt of Lightning Strikes..."
  2706.     Call IO.O
  2707.     Graphics.Off=False
  2708.     Out3=Lcase$(Out3)
  2709.     Strng=Out3+" was just struck dead!"
  2710.     Mid$(Strng,1,1)=Ucase$(Mid$(Strng,1,1))
  2711.     Call IO.O
  2712.     Call User.Died
  2713.     Exit Sub
  2714.  Endif
  2715.  Call Search.Mess(False)
  2716.  If Temp>False Then
  2717.     Out3=MessWorkRecord1.UserName
  2718.     Out2="Evil Laughter Sounds From Above..."
  2719.     Call Send.Mess(5,False,False,Out2)
  2720.     Out2="   A Bolt of Lightning Strikes..."
  2721.     Call Send.Mess(5,False,False,Out2)
  2722.     Out3=Rtrim$(Out3)
  2723.     Out3=Lcase$(Out3)
  2724.     Mid$(Out3,1,1)=Ucase$(Mid$(Out3,1,1))
  2725.     Out2=Out3+" was just struck dead!"
  2726.     Call Send.Mess(5,False,False,Out2)
  2727.     Call Send.Mess(17,TempB,Room,"Murdered")
  2728.     Exit Sub
  2729.  Endif
  2730.  Strng="You can't kill that!"
  2731.  Call IO.O
  2732. 10411
  2733.  Exit Sub
  2734. 10412
  2735.  Resume 10411
  2736. End Sub
  2737.  
  2738. Sub Enter.Vehicle
  2739.  On Local Error Goto 10422
  2740.  Call Check.Room.Treasure
  2741.  If Temp7=False Then
  2742.     Strng="That's not a vehicle!"
  2743.     Call IO.O
  2744.     Exit Sub
  2745.  Endif
  2746.  If TreasureRecord.Vehicle=False Then
  2747.     Strng="That's not a vehicle!"
  2748.     Call IO.O
  2749.     Exit Sub
  2750.  Endif
  2751.  Out3=TreasureRecord.ShortName
  2752.  Out3=Rtrim$(Out3)
  2753.  Out3=Lcase$(Out3)
  2754.  If Temp6=False Then
  2755.     Strng="The "+Out3+" is damaged!"
  2756.     Call IO.O
  2757.     Exit Sub
  2758.  Endif
  2759.  Vehicle1=Temp5
  2760.  Vehicle2=Temp6
  2761.  Vehicle3=Temp7
  2762.  Strng="You enter the "+Out3+"."
  2763.  Call IO.O
  2764. 10421
  2765.  Exit Sub
  2766. 10422
  2767.  Resume 10421
  2768. End Sub
  2769.  
  2770. Sub Ride.Vehicle
  2771.  On Local Error Goto 10442
  2772.  If Vehicle3=False Then
  2773.     Strng="That's not a vehicle!"
  2774.     Call IO.O
  2775.     Exit Sub
  2776.  Endif
  2777.  Get 8,Temp7,TreasureRecord
  2778.  Out3=TreasureRecord.ShortName
  2779.  Out3=Rtrim$(Out3)
  2780.  Out3=Lcase$(Out3)
  2781.  User.Command=Parsed.Command1
  2782.  Call Get.Direction
  2783.  If TempA Then
  2784.     Next.Room=RoomRecord.Direct(TempA)
  2785.     If Next.Room=False Then
  2786.        Strng="You can't travel in that direction!"
  2787.        Call IO.O
  2788.        Exit Sub
  2789.     Endif
  2790.     Out2=UserRecord.CodeName
  2791.     Call Decrypt(Out2)
  2792.     Out2=Rtrim$(Out2)
  2793.     Out2=Lcase$(Out2)
  2794.     Strng=Direction(TempA)
  2795.     Strng=Rtrim$(Strng)
  2796.     Out2=Out2+" just left on a "+Out3+" "+Strng+"."
  2797.     Call Send.Mess(8,False,Room,Out2)
  2798.     Call Enter.Room
  2799.     Exit Sub
  2800.  Endif
  2801.  Call Check.Room.Objects
  2802.  If Temp7=False Then
  2803.     Strng="You can't travel in that direction!"
  2804.     Call IO.O
  2805.     Exit Sub
  2806.  Endif
  2807.  If ObjectRecord.RoomLink=False Then
  2808.     Strng="You can't travel there!"
  2809.     Call IO.O
  2810.     Exit Sub
  2811.  Endif
  2812.  If ObjectRecord.JailTrap Then
  2813.     Strng="Trapped portal!"
  2814.     Call IO.O
  2815.     Exit Sub
  2816.  Endif
  2817.  If ObjectRecord.Closed Then
  2818.     If Pass.Door=False Then
  2819.        Strng="You can't, it's closed!"
  2820.        Call IO.O
  2821.        Exit Sub
  2822.     Endif
  2823.  Endif
  2824.  If ObjectRecord.Relocks Then
  2825.     ObjectRecord.DoorLock=2
  2826.     ObjectRecord.Closed=True
  2827.     Put 6,Temp7,ObjectRecord
  2828.  Endif
  2829.  Strng=ObjectRecord.ShortDesc
  2830.  If Strng<>String$(40,0) Then
  2831.     Strng=Rtrim$(Strng)
  2832.     If Strng<>Nul Then
  2833.        Call IO.O
  2834.     Endif
  2835.  Endif
  2836.  Pass.Door=False
  2837.  Number.Monsters=False
  2838.  Next.Room=ObjectRecord.RoomLink
  2839.  Out2=UserRecord.CodeName
  2840.  Call Decrypt(Out2)
  2841.  Out2=Lcase$(Out2)
  2842.  Out2=Rtrim$(Out2)
  2843.  Strng=ObjectRecord.ShortName
  2844.  Strng=Rtrim$(Strng)
  2845.  Strng=Lcase$(Strng)
  2846.  Out2=Out2+" just left on a "+Out3+" to the "+Strng+"."
  2847.  Call Send.Mess(8,False,Room,Out2)
  2848.  Call Enter.Room
  2849. 10441
  2850.  Exit Sub
  2851. 10442
  2852.  Resume 10441
  2853. End Sub
  2854.  
  2855. Sub Exit.Vehicle
  2856.  On Local Error Goto 10452
  2857.  Call Check.Room.Treasure
  2858.  Strng="You can't exit that!"
  2859.  If Temp5=Vehicle1 Then
  2860.     Out3=TreasureRecord.ShortName
  2861.     Out3=Rtrim$(Out3)
  2862.     Out3=Lcase$(Out3)
  2863.     Vehicle1=False
  2864.     Vehicle2=False
  2865.     Vehicle3=False
  2866.     Strng="You exit the "+Out3+"!"
  2867.  Endif
  2868.  Call IO.O
  2869. 10451
  2870.  Exit Sub
  2871. 10452
  2872.  Resume 10451
  2873. End Sub
  2874.  
  2875. Sub Search.Object
  2876.  On Local Error Goto 10462
  2877.  Call Examine.Treasure
  2878.  If Temp7 Then
  2879.     If TreasureRecord.Recep=False Then
  2880.        Strng="You can't search that!"
  2881.        Call IO.O
  2882.        Exit Sub
  2883.     Endif
  2884.     If TreasureRecord.Locked>False Then
  2885.        Strng="You can't, it's locked."
  2886.        Call IO.O
  2887.        Exit Sub
  2888.     Endif
  2889.     If TreasureRecord.Closed>False Then
  2890.        Strng="You can't, it's closed."
  2891.        Call IO.O
  2892.        Exit Sub
  2893.     Endif
  2894.     Strng="You search the receptacle.."
  2895.     Call IO.O
  2896.     Graphics.Off=True
  2897.     Strng="In it you find "
  2898.     Carriage.Return=True
  2899.     Call IO.O
  2900.     Temp9=False
  2901.     Call Open.Recep.File
  2902.     For Temp5=1 To Lof(13)/Len(RecepRec)
  2903.        Get 13,Temp5,RecepRec
  2904.        Temp2=RecepRec.Inv
  2905.        If Temp2 Then
  2906.           Get 8,Temp2,TreasureRecord
  2907.           Out3=TreasureRecord.TreasureName
  2908.           If RecepRec.Invis Then
  2909.              If Rnd<Config1(11) Then
  2910.                 Carriage.Return=True
  2911.                 Call IO.O
  2912.                 Strng=Rtrim$(Out3)+", "
  2913.                 Temp9=Temp9+1
  2914.              Endif
  2915.           Endif
  2916.        Endif
  2917.     Next
  2918.     If Temp9=False Then
  2919.        Strng="nothing.."
  2920.        Call IO.O
  2921.        Exit Sub
  2922.     Endif
  2923.     Strng=Left$(Strng,Len(Strng)-2)+"."
  2924.     If Temp9>1 Then
  2925.        Strng="and "+Strng
  2926.     Endif
  2927.     Call IO.O
  2928.     Exit Sub
  2929.  Endif
  2930.  Strng="You can't search that!"
  2931.  Call IO.O
  2932. 10461
  2933.  Exit Sub
  2934. 10462
  2935.  Resume 10461
  2936. End Sub
  2937.  
  2938. Sub Bless.Object
  2939.  On Local Error Goto 10472
  2940.  If Normal.User Then
  2941.     If UserRecord.ClassType<>4 Then
  2942.        Strng="Only clerics can bless!"
  2943.        Call IO.O
  2944.        Exit Sub
  2945.     Endif
  2946.  Endif
  2947.  Call Examine.Treasure
  2948.  If Temp7 Then
  2949.     If TreasureRecord.Spell=False Then
  2950.        Strng="You can't bless that!"
  2951.        Call IO.O
  2952.        Exit Sub
  2953.     Endif
  2954.     SpellRecord=SpellArray(TreasureRecord.Spell)
  2955.     If SpellRecord.SpellType=4 Then
  2956.        Strng="You can't bless that!"
  2957.        Call IO.O
  2958.        Exit Sub
  2959.     Endif
  2960.     TempZ=False
  2961.     Select Case Temp4
  2962.     Case 0
  2963.        Treasure.Charges(Temp5)=Treasure.Charges(Temp5)+1
  2964.        If Treasure.Charges(Temp5)>TreasureRecord.Charges Then
  2965.           Treasure.Charges(Temp5)=TreasureRecord.Charges
  2966.           TempZ=True
  2967.        Endif
  2968.     Case -1
  2969.        Room.Inventory.Charges(Temp5)=Room.Inventory.Charges(Temp5)+1
  2970.        If Room.Inventory.Charges(Temp5)>TreasureRecord.Charges Then
  2971.           Room.Inventory.Charges(Temp5)=TreasureRecord.Charges
  2972.           TempZ=True
  2973.        Endif
  2974.     Case 1
  2975.        RoomRecord.TreCharges(Temp5)=RoomRecord.TreCharges(Temp5)+1
  2976.        If RoomRecord.TreCharges(Temp5)>TreasureRecord.Charges Then
  2977.           RoomRecord.TreCharges(Temp5)=TreasureRecord.Charges
  2978.           TempZ=True
  2979.        Endif
  2980.        Put 5,Room,RoomRecord
  2981.     End Select
  2982.     Strng="You bless it!"
  2983.     If TempZ Then
  2984.        Strng="Nothing happens!"
  2985.     Endif
  2986.     Call IO.O
  2987.     Exit Sub
  2988.  Endif
  2989.  Call Search.Mess(False)
  2990.  If Temp=Room And TempB<>User.Index Then
  2991.     User.Temp=TempB
  2992.     Out3=MessWorkRecord1.UserName
  2993.     Out3=Rtrim$(Out3)
  2994.     Out3=Lcase$(Out3)
  2995.     Strng="You bless "+Out3+"!"
  2996.     Call IO.O
  2997.     Out2="blesses you!"
  2998.     Call Send.Mess(23,TempB,Room,Out2)
  2999.     Exit Sub
  3000.  Endif
  3001.  Strng="You can't bless that!"
  3002.  Call IO.O
  3003. 10471
  3004.  Exit Sub
  3005. 10472
  3006.  Resume 10471
  3007. End Sub
  3008.  
  3009. Sub Curse.Object
  3010.  On Local Error Goto 10482
  3011.  If Normal.User Then
  3012.     If UserRecord.ClassType<>4 Then
  3013.        Strng="Only clerics can curse!"
  3014.        Call IO.O
  3015.        Exit Sub
  3016.     Endif
  3017.  Endif
  3018.  Call Check.Monster
  3019.  If Monster.Temp Then
  3020.     Out3=MonsterArray(Monster.Temp).MonsterName
  3021.     Out3=Rtrim$(Out3)
  3022.     Out3=Lcase$(Out3)
  3023.     Strng="You curse the "+Out3+"!"
  3024.     Call IO.O
  3025.     Multiplier=Int(UserRecord.Stats(6)/2)
  3026.     Call Hit.Monster
  3027.     Exit Sub
  3028.  Endif
  3029.  Call Search.Mess(False)
  3030.  If Temp=Room And TempB<>User.Index Then
  3031.     User.Temp=TempB
  3032.     Out3=MessWorkRecord1.UserName
  3033.     Out3=Rtrim$(Out3)
  3034.     Out3=Lcase$(Out3)
  3035.     Strng="You curse "+Out3+"!"
  3036.     Call IO.O
  3037.     Out2="curses you!"
  3038.     Call Send.Mess(24,TempB,Room,Out2)
  3039.     Exit Sub
  3040.  Endif
  3041.  Strng="You can't curse that!"
  3042.  Call IO.O
  3043. 10481
  3044.  Exit Sub
  3045. 10482
  3046.  Resume 10481
  3047. End Sub
  3048.  
  3049. Sub Bless.Self
  3050.  On Local Error Goto 10492
  3051.  If Normal.User Then
  3052.     If UserRecord.ClassType<>4 Then
  3053.        Strng="Only clerics can bless!"
  3054.        Call IO.O
  3055.        Exit Sub
  3056.     Endif
  3057.  Endif
  3058.  UserRecord.Stats(6)=UserRecord.Stats(6)+1
  3059.  If UserRecord.Stats(6)>Config2(31) Then
  3060.     UserRecord.Stats(6)=Config2(31)
  3061.     Strng="Nothing happens!"
  3062.     Call IO.O
  3063.     Exit Sub
  3064.  Endif
  3065.  Strng="You feel a glow about you!"
  3066.  Call IO.O
  3067.  Strng="Your piety is now"+Str$(UserRecord.Stats(6))+"!"
  3068.  Call IO.O
  3069. 10491
  3070.  Exit Sub
  3071. 10492
  3072.  Resume 10491
  3073. End Sub
  3074.  
  3075. Sub Curse.Self
  3076.  On Local Error Goto 10502
  3077.  If Normal.User Then
  3078.     If UserRecord.ClassType<>4 Then
  3079.        Strng="Only clerics can curse!"
  3080.        Call IO.O
  3081.        Exit Sub
  3082.     Endif
  3083.  Endif
  3084.  UserRecord.Stats(6)=UserRecord.Stats(6)-1
  3085.  If UserRecord.Stats(6)<False Then
  3086.     UserRecord.Stats(6)=False
  3087.  Endif
  3088.  Strng="You feel a darkening about you!"
  3089.  Call IO.O
  3090.  Strng="Your piety is now"+Str$(UserRecord.Stats(6))+"!"
  3091.  Call IO.O
  3092.  Call New.Stats
  3093. 10501
  3094.  Exit Sub
  3095. 10502
  3096.  Resume 10501
  3097. End Sub
  3098.  
  3099. Sub Move.Object
  3100.  On Local Error Goto 10512
  3101.  Call Parse
  3102.  If Parser Then
  3103.     Call Numeric
  3104.  Endif
  3105.  Call Examine.Treasure
  3106.  If Temp7=False Then
  3107.     Strng="You can't move that!"
  3108.     Call IO.O
  3109.     Exit Sub
  3110.  Endif
  3111.  If TreasureRecord.Movable=False Then
  3112.     Strng="You can't move that!"
  3113.     Call IO.O
  3114.     Exit Sub
  3115.  Endif
  3116.  If TreasureRecord.Launchable=False Then
  3117.     Strng="You can't move that!"
  3118.     Call IO.O
  3119.     Exit Sub
  3120.  Endif
  3121.  If Parser=False Then
  3122.     Strng="Move which direction?"
  3123.     Call IO.O
  3124.     Exit Sub
  3125.  Endif
  3126.  Out4=Out3
  3127.  TempD=Temp5
  3128.  TempE=Temp6
  3129.  TempF=Temp7
  3130.  User.Command=Parsed.Command2
  3131.  Call Get.Direction
  3132.  If TempA Then
  3133.     Next.Room=RoomRecord.Direct(TempA)
  3134.     If Next.Room=False Then
  3135.        Strng="You can't move it there!"
  3136.        Call IO.O
  3137.        Exit Sub
  3138.     Endif
  3139.     Out2=UserRecord.CodeName
  3140.     Call Decrypt(Out2)
  3141.     Out2=Lcase$(Out2)
  3142.     Out2=Rtrim$(Out2)
  3143.     Out2=Out2+" just moved something "
  3144.     Strng=Direction(TempA)
  3145.     Strng=Rtrim$(Strng)
  3146.     Out2=Out2+Strng+"."
  3147.  Else
  3148.     Parsed.Command1=User.Command
  3149.     Call Check.Room.Objects
  3150.     If Temp7=False Then
  3151.        Strng="You can't move it there!"
  3152.        Call IO.O
  3153.        Exit Sub
  3154.     Endif
  3155.     If ObjectRecord.RoomLink=False Then
  3156.        Strng="You can't move it there!"
  3157.        Call IO.O
  3158.        Exit Sub
  3159.     Endif
  3160.     If ObjectRecord.JailTrap Then
  3161.        Strng="Trapped portal!"
  3162.        Call IO.O
  3163.        Exit Sub
  3164.     Endif
  3165.     If ObjectRecord.Closed Then
  3166.        If Pass.Door=False Then
  3167.           Strng="You can't, it's closed!"
  3168.           Call IO.O
  3169.           Exit Sub
  3170.        Endif
  3171.     Endif
  3172.     If ObjectRecord.Relocks Then
  3173.        ObjectRecord.DoorLock=2
  3174.        ObjectRecord.Closed=True
  3175.        Put 6,Temp7,ObjectRecord
  3176.     Endif
  3177.     Pass.Door=False
  3178.     Next.Room=ObjectRecord.RoomLink
  3179.     Out2=UserRecord.CodeName
  3180.     Call Decrypt(Out2)
  3181.     Out2=Lcase$(Out2)
  3182.     Out2=Rtrim$(Out2)
  3183.     Out2=Out2+" just moved something to "+Out3+"."
  3184.  Endif
  3185.  Get 5,Next.Room,RoomRecord
  3186.  For Temp=1 To 10
  3187.     If RoomRecord.Treasure(Temp)=False Then
  3188.        RoomRecord.Treasure(Temp)=TempF
  3189.        RoomRecord.TreCharges(Temp)=TempE
  3190.        RoomRecord.Flags(Temp)=False
  3191.        Put 5,Next.Room,RoomRecord
  3192.        Get 5,Room,RoomRecord
  3193.        Select Case Temp4
  3194.        Case 0
  3195.           Call Discard(TempD,True)
  3196.        Case -1
  3197.           Call Discard.Inventory(TempD)
  3198.        Case 1
  3199.           Call Discard.Treasure(TempD)
  3200.        End Select
  3201.        Strng="You move "+Out4+"."
  3202.        Call IO.O
  3203.        Call Send.Mess(8,False,Room,Out2)
  3204.        Call Enter.Room
  3205.        Exit Sub
  3206.     Endif
  3207.  Next
  3208.  Get 5,Room,RoomRecord
  3209.  Strng="You can't move it there!"
  3210.  Call IO.O
  3211. 10511
  3212.  Exit Sub
  3213. 10512
  3214.  Resume 10511
  3215. End Sub
  3216.  
  3217. Sub Launch.Object
  3218.  On Local Error Goto 10522
  3219.  Call Parse
  3220.  If Parser Then
  3221.     Call Numeric
  3222.  Endif
  3223.  Call Examine.Treasure
  3224.  If Temp7=False Then
  3225.     Strng="You can't launch that!"
  3226.     Call IO.O
  3227.     Exit Sub
  3228.  Endif
  3229.  If TreasureRecord.Launchable=False Then
  3230.     Strng="That's not a launchable device!"
  3231.     Call IO.O
  3232.     Exit Sub
  3233.  Endif
  3234.  If Parser=False Then
  3235.     Strng="Launch where?"
  3236.     Call IO.O
  3237.     Exit Sub
  3238.  Endif
  3239.  TempZ=False
  3240.  TempI=Temp4
  3241.  TempJ=Temp5
  3242.  TempE=Temp6
  3243.  If Temp6=False Then
  3244.     Strng="You can't, it's not loaded."
  3245.     Call IO.O
  3246.     Exit Sub
  3247.  Endif
  3248.  If TempE>10 Then
  3249.     TempE=10
  3250.  Endif
  3251.  TempK=False
  3252.  Out5=TreasureRecord.ShortName
  3253.  Out5=Rtrim$(Out5)
  3254.  Out5=Lcase$(Out5)
  3255.  User.Command=Parsed.Command2
  3256.  Parsed.Command1=User.Command
  3257.  Call Get.Direction
  3258.  If TempA Then
  3259.     Next.Room=RoomRecord.Direct(TempA)
  3260.     If Next.Room=False Then
  3261.        Strng="You can't launch at that!"
  3262.        Call IO.O
  3263.        Exit Sub
  3264.     Endif
  3265.     TempZ=True
  3266.     Out3=Direction(TempA)
  3267.     Out3=Rtrim$(Out3)
  3268.     Out3=Lcase$(Out3)
  3269.     Strng="You launch the "+Out5+" "+Out3+"!"
  3270.     Call IO.O
  3271.     For TempQ=1 To TempE
  3272.        Graphics.Off=False
  3273.        Out2=Numeral(TempQ)
  3274.        Out2=Rtrim$(Out2)
  3275.        Strng="For launch "+Out2+";"
  3276.        Call IO.O
  3277.        TempK=TempK+1
  3278.        Graphics.Off=True
  3279.        Strng="The device launchs: "
  3280.        Carriage.Return=True
  3281.        Call IO.O
  3282.        Strng=Out3+", "
  3283.        Carriage.Return=True
  3284.        Call IO.O
  3285.        TempA=False
  3286.        TempB=False
  3287.        Call Chain.Rooms(Next.Room,Room)
  3288.        Strng="and stopped!"
  3289.        Call IO.O
  3290.     Next
  3291.     If TempA=False Then
  3292.        Strng="You didn't smash anything!"
  3293.     Else
  3294.        Strng="You smashed open"
  3295.        If TempA<=10 Then
  3296.           Strng=Strng+" "+Rtrim$(Numeral(TempA))
  3297.        Else
  3298.           Strng=Strng+Str$(TempA)
  3299.        Endif
  3300.        If TempA=1 Then
  3301.           Strng=Strng+" lock.."
  3302.        Else
  3303.           Strng=Strng+" locks!"
  3304.        Endif
  3305.     Endif
  3306.     Call IO.O
  3307.     Graphics.Off=False
  3308.     Get 5,Room,RoomRecord
  3309.  Else
  3310.     Call Check.Monster
  3311.     If Monster.Temp Then
  3312.        Multiplier=Abs(TreasureRecord.Plus)
  3313.        Out3=MonsterArray(Monster.Temp).MonsterName
  3314.        Out3=Rtrim$(Out3)
  3315.        Out3=Lcase$(Out3)
  3316.        Strng="You launch "+Out5+" at the "+Out3+"!"
  3317.        Call IO.O
  3318.        TempZ=True
  3319.        Graphics.Off=True
  3320.        For TempQ=1 To TempE
  3321.           Out2=Numeral(TempQ)
  3322.           Out2=Rtrim$(Out2)
  3323.           Strng="For launch "+Out2+";"
  3324.           Call IO.O
  3325.           TempK=TempK+1
  3326.           Call Attack.Monster
  3327.           Call Check.Monster
  3328.           If Monster.Temp=False Then
  3329.              Exit For
  3330.           Endif
  3331.        Next
  3332.        Graphics.Off=False
  3333.     Else
  3334.        Call Search.Mess(False)
  3335.        If Temp=Room And TempB<>User.Index Then
  3336.           User.Temp=TempB
  3337.           Out3=MessWorkRecord1.UserName
  3338.           Out3=Rtrim$(Out3)
  3339.           Out3=Lcase$(Out3)
  3340.           Strng="You launch "+Out5+" at "+Out3+"!"
  3341.           Call IO.O
  3342.           TempZ=True
  3343.           Out2=TreasureRecord.TreasureName
  3344.           Out2=Lcase$(Out2)
  3345.           Out2=Rtrim$(Out2)
  3346.           Call Send.Mess(21,TempB,Room,Out2)
  3347.           Graphics.Off=True
  3348.           For TempQ=1 To TempE
  3349.              Out2=Numeral(TempQ)
  3350.              Out2=Rtrim$(Out2)
  3351.              Strng="For launch "+Out2+";"
  3352.              Call IO.O
  3353.              TempK=TempK+1
  3354.              Call Hit.Game.Player
  3355.              Call Search.Mess(False)
  3356.              If Temp<>Room Then
  3357.                 Exit For
  3358.              Endif
  3359.           Next
  3360.           Graphics.Off=False
  3361.        Endif
  3362.     Endif
  3363.  Endif
  3364.  If TempZ=False Then
  3365.     Strng="You can't launch at that!"
  3366.     Call IO.O
  3367.     Exit Sub
  3368.  Endif
  3369.  Select Case TempI
  3370.  Case 0
  3371.     Treasure.Charges(TempJ)=Treasure.Charges(TempJ)-TempK
  3372.     If Treasure.Charges(TempJ)<False Then
  3373.        Treasure.Charges(TempJ)=False
  3374.     Endif
  3375.  Case -1
  3376.     Room.Inventory.Charges(TempJ)=Room.Inventory.Charges(TempJ)-TempK
  3377.     If Room.Inventory.Charges(TempJ)<False Then
  3378.        Room.Inventory.Charges(TempJ)=Falsee
  3379.     Endif
  3380.  Case 1
  3381.     RoomRecord.TreCharges(TempJ)=RoomRecord.TreCharges(TempJ)-TempK
  3382.     If RoomRecord.TreCharges(TempJ)<False Then
  3383.        RoomRecord.TreCharges(TempJ)=False
  3384.     Endif
  3385.     Put 5,Room,RoomRecord
  3386.  End Select
  3387. 10521
  3388.  Exit Sub
  3389. 10522
  3390.  Resume 10521
  3391. End Sub
  3392.  
  3393. Sub Chain.Rooms(Chain.Room,Previous.Room)
  3394.  On Local Error Goto 10532
  3395.  Get 5,Chain.Room,RoomRecord
  3396.  For Temp=1 To 10
  3397.     If RoomRecord.Object(Temp) Then
  3398.        Get 6,RoomRecord.Object(Temp),ObjectRecord
  3399.        If ObjectRecord.DoorLock=2 Then
  3400.           If Rnd>.66 Then
  3401.              TempA=TempA+1
  3402.              ObjectRecord.DoorLock=1
  3403.              ObjectRecord.Closed=False
  3404.              Put 6,RoomRecord.Object(Temp),ObjectRecord
  3405.           Endif
  3406.        Endif
  3407.     Endif
  3408.  Next
  3409.  For Temp.Direction=1 to 11
  3410.     Temp.Room=RoomRecord.Direct(Temp.Direction)
  3411.     If Temp.Room Then
  3412.        If Temp.Room<>Previous.Room Then
  3413.           If Rnd>.66 Then
  3414.              If TempB<5 Then
  3415.                 Carriage.Return=True
  3416.                 Strng=Direction(Temp.Direction)
  3417.                 Strng=Rtrim$(Strng)+", "
  3418.                 Call IO.O
  3419.                 TempB=TempB+1
  3420.                 Call Chain.Rooms(Temp.Room,Chain.Room)
  3421.                 Get 5,Chain.Room,RoomRecord
  3422.                 Exit Sub
  3423.              Endif
  3424.           Endif
  3425.        Endif
  3426.     Endif
  3427.  Next
  3428. 10531
  3429.  Exit Sub
  3430. 10532
  3431.  Resume 10531
  3432. End Sub
  3433.  
  3434. Sub Give.Object
  3435.  On Local Error Goto 10542
  3436.  Call Parse
  3437.  If Parser Then
  3438.     Call Numeric
  3439.  Endif
  3440.  Temp#=False
  3441.  If Val(Parsed.Command1)>False Then
  3442.     Temp#=Val(Parsed.Command1)
  3443.     If Temp#<=False Or UserRecord.Gold-Temp#<False Then
  3444.        Strng="You don't have that much gold!"
  3445.        Call IO.O
  3446.        Exit Sub
  3447.     Endif
  3448.     UserRecord.Gold=UserRecord.Gold-Temp#
  3449.  Endif
  3450.  If Temp#=False Then
  3451.     Call Check.Inventory.Treasure
  3452.     If Temp7=False Then
  3453.        Strng="You can't give that!"
  3454.        Call IO.O
  3455.        Exit Sub
  3456.     Endif
  3457.  Endif
  3458.  If Parser=False Then
  3459.     Strng="Give to whom?"
  3460.     Call IO.O
  3461.     Exit Sub
  3462.  Endif
  3463.  Parsed.Command1=Parsed.Command2
  3464.  Call Search.Mess(False)
  3465.  If Temp=Room And TempB<>User.Index Then
  3466.     Out2=MessWorkRecord1.UserName
  3467.     Out2=Rtrim$(Out2)
  3468.     Out2=Lcase$(Out2)
  3469.     If Temp#>False Then
  3470.        Strng="You give"+Str$(Temp#)+" gold to "+Out2+"!"
  3471.        Call IO.O
  3472.        Out2=Str$(Temp#)
  3473.        Call Send.Mess(15,TempB,Room,Out2)
  3474.        Exit Sub
  3475.     Endif
  3476.     Strng="You give "+Out3+" to "+Out2+"!"
  3477.     Call IO.O
  3478.     Out2=Str$(Temp7)+Str$(Temp6)
  3479.     Call Send.Mess(13,TempB,Room,Out2)
  3480.     Call Discard(Temp5,True)
  3481.     Exit Sub
  3482.  Endif
  3483.  Strng="You can't give that!"
  3484.  Call IO.O
  3485. 10541
  3486.  Exit Sub
  3487. 10542
  3488.  Resume 10541
  3489. End Sub
  3490.  
  3491. Sub Steal.Object
  3492.  On Local Error Goto 10552
  3493.  If Normal.User Then
  3494.     If UserRecord.ClassType<>3 Then
  3495.        Strng="Only thieves can steal!"
  3496.        Call IO.O
  3497.        Exit Sub
  3498.     Endif
  3499.  Endif
  3500.  Call ParseX
  3501.  If Parser Then
  3502.     Call Numeric
  3503.  Endif
  3504.  If Parser=False Then
  3505.     Strng="Steal from whom?"
  3506.     Call IO.O
  3507.     Exit Sub
  3508.  Endif
  3509.  Call Check.Monster
  3510.  If Monster.Temp Then
  3511.     Parsed.Command1=Lcase$(Parsed.Command2)
  3512.     Call Numeric
  3513.     For Temp5=1 To 5
  3514.        Temp4=MonsterArray(Monster.Temp).Treasure(Temp5)
  3515.        If Temp4>False And Temp4<=Lof(8)/Len(TreasureRecord) Then
  3516.           Get 8,Temp4,TreasureRecord
  3517.           Out2=TreasureRecord.ShortName
  3518.           Out2=Rtrim$(Out2)
  3519.           Out2=Lcase$(Out2)
  3520.           Out2=Left$(Out2,Len(Parsed.Command1))
  3521.           If Out2=Parsed.Command1 Then
  3522.              If MonsterArray(Monster.Temp).Magic<=True Or_
  3523.              MonsterArray(Monster.Temp).Permanent<=True Then
  3524.                 Strng="You can't steal from that monster!"
  3525.                 Call IO.O
  3526.                 Exit Sub
  3527.              Endif
  3528.              If Int(Rnd*5+5)>UserRecord.Stats(4)/2 Then
  3529.                 Strng="Didn't work!"
  3530.                 Call IO.O
  3531.                 Exit Sub
  3532.              Endif
  3533.              Out2=TreasureRecord.TreasureName
  3534.              Out2=Rtrim$(Out2)
  3535.              Out2=Lcase$(Out2)
  3536.              Out3=MonsterArray(Monster.Temp).MonsterName
  3537.              Out3=Rtrim$(Out3)
  3538.              Out3=Lcase$(Out3)
  3539.              Strng="You steal "+Out2+" from the "+Out3+"!"
  3540.              Call IO.O
  3541.              Temp9=TreasureRecord.Charges
  3542.              Call Add.Inventory(Temp4,Temp9)
  3543.              MonsterArray(Monster.Temp).Treasure(Temp5)=False
  3544.              Exit Sub
  3545.           Endif
  3546.        Endif
  3547.     Next
  3548.  Else
  3549.     Call Search.Mess(False)
  3550.     If Temp=Room And TempB<>User.Index Then
  3551.        Out2=MessWorkRecord1.UserName
  3552.        Out2=Rtrim$(Out2)
  3553.        Out2=Lcase$(Out2)
  3554.        Parsed.Command1=Parsed.Command2
  3555.        Call Search.User.Inventory
  3556.        If Temp7>False Then
  3557.           If Int(Rnd*5+5)>UserRecord.Stats(4)/2 Then
  3558.              Strng="Didn't work!"
  3559.              Call IO.O
  3560.              Exit Sub
  3561.           Endif
  3562.           If MessWorkRecord1.ClassType>8 Then
  3563.              Strng="You can't steal from that user!"
  3564.              Call IO.O
  3565.              Exit Sub
  3566.           Endif
  3567.           Strng="You steal "+Out3+" from "+Out2+"!"
  3568.           Call IO.O
  3569.           Out2=Str$(Temp7)
  3570.           Get 1,TempC,MessWorkRecord1
  3571.           MessWorkRecord1.Treasure(Temp5)=False
  3572.           MessWorkRecord1.TreasureCharges(Temp5)=False
  3573.           Put 1,TempC,MessWorkRecord1
  3574.           Call Send.Mess(16,TempB,Room,Out2)
  3575.           Call Add.Inventory(Temp7,Temp6)
  3576.           Exit Sub
  3577.        Endif
  3578.     Endif
  3579.  Endif
  3580.  Strng="You can't steal that!"
  3581.  Call IO.O
  3582. 10551
  3583.  Exit Sub
  3584. 10552
  3585.  Resume 10551
  3586. End Sub
  3587.  
  3588. Sub Add.Inventory(Var1,Var2)
  3589.  On Local Error Goto 10562
  3590.  If Number.Inventory=Treasure.Max Then
  3591.     Call Expand.Inventory
  3592.  Endif
  3593.  Number.Inventory=Number.Inventory+1
  3594.  Treasure(Number.Inventory)=Var1
  3595.  Treasure.Charges(Number.Inventory)=Var2
  3596.  Weight=Weight+TreasureRecord.Weight
  3597. 10561
  3598.  Exit Sub
  3599. 10562
  3600.  Resume 10561
  3601. End Sub
  3602.  
  3603. Sub Follow.Player
  3604.  On Local Error Goto 10572
  3605.  If Node<=False Then
  3606.     Strng="You can't follow players!"
  3607.     Call IO.O
  3608.     Exit Sub
  3609.  Endif
  3610.  If Last.Command.Number<>Follow.Command Then
  3611.     Strng="Hunt mode. Press Control-K to interrupt."
  3612.     Call IO.O
  3613.     Allow.Break=True
  3614.     Auto.Break=False
  3615.     Do While Security.Guard
  3616.        Call Pause.Second
  3617.        If Auto.Break Then
  3618.           Allow.Break=False
  3619.           Follow.Mode=False
  3620.           Exit Sub
  3621.        Endif
  3622.        For VarX=1 To 36
  3623.           Get 1,VarX,MessWorkRecord1
  3624.           Out2=Rtrim$(MessWorkRecord1.UserName)
  3625.           Out2=Lcase$(Out2)
  3626.           Call Valid.Name(Out2)
  3627.           TempB=MessWorkRecord1.UserIndex
  3628.           TempC=VarX
  3629.           If VarX<>(Noden+1) Then
  3630.              If MessWorkRecord1.RoomNumber=Room And TempA Then
  3631.                 Strng="Hunting found "+Out2+"!"
  3632.                 Call IO.O
  3633.                 Exit Do
  3634.              Endif
  3635.           Endif
  3636.        Next
  3637.        If Last.Command.Number>36 Then
  3638.           TempA=Int(Rnd*11+1)
  3639.           If RoomRecord.Direct(TempA) Then
  3640.              Call Restrict(TempA)
  3641.              If TempB=False Then
  3642.                 Out2=Direction(TempA)
  3643.                 Out2=Rtrim$(Out2)
  3644.                 Out2=Lcase$(Out2)
  3645.                 Strng="You hunt "+Out2+"."
  3646.                 Call IO.O
  3647.                 Next.Room=RoomRecord.Direct(TempA)
  3648.                 Call Enter.Room
  3649.              Endif
  3650.           Endif
  3651.        Endif
  3652.        Call Main.Loop.Update
  3653.     Loop    
  3654.  Endif
  3655.  Allow.Break=False
  3656.  Follow.Mode=False
  3657.  If Last.Command.Number=Trace.Command Then
  3658.     Exit Sub
  3659.  Endif
  3660.  If Last.Command.Number=Follow.Command Then
  3661.     Call Search.Mess(False)
  3662.     If TempB=User.Index Or Temp<>Room Then
  3663.        Strng="That player is not in this room!"
  3664.        Call IO.O
  3665.        Exit Sub
  3666.     Endif
  3667.  Endif
  3668.  Strng="Follow mode. Press Control-K to interrupt."
  3669.  Call IO.O
  3670.  Allow.Break=True
  3671.  Auto.Break=False
  3672.  Follow.Mode=True
  3673.  VarZ=TempC
  3674.  Do While Security.Guard
  3675.     Call Pause.Second
  3676.     If Auto.Break Then
  3677.        Exit Do
  3678.     Endif
  3679.     Get 1,VarZ,MessWorkRecord1
  3680.     Strng=Rtrim$(MessWorkRecord1.UserName)
  3681.     Call Valid.Name(Strng)
  3682.     If TempA=False Then
  3683.        Exit Do
  3684.     Endif
  3685.     Temp=MessWorkRecord1.RoomNumber
  3686.     If Temp<>Room Then
  3687.        Next.Room=Temp
  3688.        Call Enter.Room
  3689.     Endif
  3690.     Call Main.Loop.Update
  3691.  Loop
  3692.  Allow.Break=False
  3693.  Follow.Mode=False
  3694. 10571
  3695.  Exit Sub
  3696. 10572
  3697.  Resume 10571
  3698. End Sub
  3699.  
  3700. Sub Lose.Player
  3701.  On Local Error Goto 10582
  3702.  If Node<=False Then
  3703.     Strng="You can't lose players!"
  3704.     Call IO.O
  3705.     Exit Sub
  3706.  Endif
  3707.  If Int(Rnd*5+5)>UserRecord.Stats(2)/2 Then
  3708.     Strng="Didn't work!"
  3709.     Call IO.O
  3710.     Exit Sub
  3711.  Endif
  3712.  Call Send.Mess(20,False,False,"Lose")
  3713.  Strng="You lose any following players!"
  3714.  Call IO.O
  3715. 10581
  3716.  Exit Sub
  3717. 10582
  3718.  Resume 10581
  3719. End Sub
  3720.  
  3721. Sub Learn.Spell
  3722.  On Local Error Goto 10592
  3723.  Temp9=False
  3724.  For Temp=1 To Spells.Max
  3725.     SpellRecord=SpellArray(Temp)
  3726.     If Rtrim$(SpellRecord.SpellName)=Lcase$(Parsed.Command1) Then
  3727.        Temp9=True
  3728.        Exit For
  3729.     Endif
  3730.  Next
  3731.  If Temp9=False Then
  3732.     Strng="You can't learn that spell!"
  3733.     Call IO.O
  3734.     Exit Sub
  3735.  Endif
  3736.  Strng="Enter chant to learn: "
  3737.  Call IO.I
  3738.  Out2=Ucase$(Out2)
  3739.  If Rtrim$(SpellRecord.Chant)<>Out2 Then
  3740.     Strng="Wrong spell chant!"
  3741.     Call IO.O
  3742.     Exit Sub
  3743.  Endif
  3744.  Learned.Spells(Temp)=True
  3745.  Strng="You now memorize the spell!"
  3746.  Call IO.O
  3747. 10591
  3748.  Exit Sub
  3749. 10592
  3750.  Resume 10591
  3751. End Sub
  3752.  
  3753. Sub Hide.User
  3754.  On Local Error Goto 10602
  3755.  If Hidden.Player Then
  3756.     Strng="You are already hidden!"
  3757.     Call IO.O
  3758.     Exit Sub
  3759.  Endif
  3760.  Temp1=False
  3761.  If Number.Monsters=False Then
  3762.     Temp1=True
  3763.  Else
  3764.     If Rnd>.66 Then
  3765.        Temp1=True
  3766.     Endif
  3767.  Endif
  3768.  If Temp1 Then
  3769.     Hidden.Player=True
  3770.     Strng="You hide in the shadows.."
  3771.  Else
  3772.     Strng="You can't hide in front of something!"
  3773.  Endif
  3774.  Call IO.O
  3775. 10601
  3776.  Exit Sub
  3777. 10602
  3778.  Resume 10601
  3779. End Sub
  3780.  
  3781. Sub Throw.Object
  3782.  On Local Error Goto 10612
  3783.  If Normal.User Then
  3784.     If UserRecord.ClassType<>3 Then
  3785.        Strng="Only thieves can throw!"
  3786.        Call IO.O
  3787.        Exit Sub
  3788.     Endif
  3789.  Endif
  3790.  Call ParseX
  3791.  If Parser Then
  3792.     Call Numeric
  3793.  Endif
  3794.  If Parser=False Then
  3795.     Strng="Throw at whom?"
  3796.     Call IO.O
  3797.     Exit Sub
  3798.  Endif
  3799.  Call Check.Monster
  3800.  If Monster.Temp Then
  3801.     Last.Monster=Parsed.Command1
  3802.     Parsed.Command1=Ucase$(Parsed.Command2)
  3803.     Call Numeric
  3804.     Call Check.Inventory.Treasure
  3805.     If Temp7>False Then
  3806.        If Weapon6=Temp5 Then
  3807.           Multiplier=Weapon2
  3808.           Out2=MonsterArray(Monster.Temp).MonsterName
  3809.           Out2=Rtrim$(Out2)
  3810.           Out2=Lcase$(Out2)
  3811.           Strng="You throw "+Out3+" at the "+Out2+"!"
  3812.           Call IO.O
  3813.           If Int(Rnd*5+2)>UserRecord.Stats(4)/2 Then
  3814.              Strng="You missed!"
  3815.              Call IO.O
  3816.           Else
  3817.              Parsed.Command1=Last.Monster
  3818.              Last.Command.Type=False
  3819.              Last.Command.Number=55
  3820.              Call Attack.Monster
  3821.           Endif
  3822.           Call Discard(Weapon6,False)
  3823.           Exit Sub
  3824.        Endif
  3825.        Strng="You are'nt holding the weapon!"
  3826.        Call IO.O
  3827.        Exit Sub
  3828.     Endif
  3829.  Else
  3830.     Call Search.Mess(False)
  3831.     If Temp=Room And TempB<>User.Index Then
  3832.        User.Temp=TempB
  3833.        Out2=MessWorkRecord1.UserName
  3834.        Out2=Rtrim$(Out2)
  3835.        Out2=Lcase$(Out2)
  3836.        Parsed.Command1=Ucase$(Parsed.Command2)
  3837.        Call Check.Inventory.Treasure
  3838.        If Temp7>False Then
  3839.           If Weapon6=Temp5 Then
  3840.              Strng="You throw "+Out3+" at "+Out2+"!"
  3841.              Call IO.O
  3842.              If Int(Rnd*5+2)>UserRecord.Stats(4)/2 Then
  3843.                 Strng="You missed!"
  3844.                 Call IO.O
  3845.              Else
  3846.                 Call Hit.Game.Player
  3847.              Endif
  3848.              Call Discard(Weapon6,False)
  3849.              Exit Sub
  3850.           Endif
  3851.           Strng="You are'nt holding the weapon!"
  3852.           Call IO.O
  3853.           Exit Sub
  3854.        Endif
  3855.     Endif
  3856.  Endif
  3857.  Strng="You can't throw that!"
  3858.  Call IO.O
  3859. 10611
  3860.  Exit Sub
  3861. 10612
  3862.  Resume 10611
  3863. End Sub
  3864.  
  3865. Sub Exit.Room
  3866.  On Local Error Goto 10622
  3867.  User.Command="O"
  3868.  Last.Command="OUT"
  3869.  Call Update.Mess(4)
  3870.  Last.Command.Number=True
  3871.  TempA=5
  3872.  Call Verify.Room
  3873.  If New.Room Then
  3874.     Call Enter.Room
  3875.  Endif
  3876. 10621
  3877.  Exit Sub
  3878. 10622
  3879.  Resume 10621
  3880. End Sub
  3881.  
  3882. Sub Climb
  3883.  On Local Error Goto 10632
  3884.  User.Command="U"
  3885.  Last.Command="UP"
  3886.  Call Update.Mess(4)
  3887.  Last.Command.Number=True
  3888.  TempA=6
  3889.  Call Verify.Room
  3890.  If New.Room Then
  3891.     Call Enter.Room
  3892.  Endif
  3893. 10631
  3894.  Exit Sub
  3895. 10632
  3896.  Resume 10631
  3897. End Sub
  3898.  
  3899. Sub Gold(Var#)
  3900.  On Local Error Goto 10642
  3901.  If UserRecord.Level<=10 Then
  3902.     Var#=2^(UserRecord.Level+6)
  3903.  Else
  3904.     Var#=2^16+(UserRecord.Level-10)*1000000!
  3905.  Endif
  3906. 10641
  3907.  Exit Sub
  3908. 10642
  3909.  Resume 10641
  3910. End Sub
  3911.  
  3912. Sub Experience(Var#)
  3913.  On Local Error Goto 10652
  3914.  If UserRecord.Level<=10 Then
  3915.     Var#=2^(UserRecord.Level+7)
  3916.  Else
  3917.     Var#=2^17+(UserRecord.Level-10)*1000000!
  3918.  Endif
  3919. 10651
  3920.  Exit Sub
  3921. 10652
  3922.  Resume 10651
  3923. End Sub
  3924.