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 / DNDSUB4.BAS < prev    next >
BASIC Source File  |  1993-01-07  |  67KB  |  2,955 lines

  1.  Rem dndsub4.bas v2.9c
  2.  Rem $Include: 'dndbbs.inc'
  3.  
  4. Sub Examine.Treasure
  5.  On Local Error Goto 10002
  6.  Temp4=False
  7.  Call Check.Inventory.Treasure
  8.  If Temp7=False Then
  9.     Call Num
  10.     Temp4=True
  11.     Call Check.Room.Inventory
  12.     If Temp7=False Then
  13.        Call Num
  14.        Temp4=1
  15.        Call Check.Room.Treasure
  16.     Endif
  17.  Endif
  18. 10001
  19.  Exit Sub
  20. 10002
  21.  Resume 10001
  22. End Sub
  23.  
  24. Sub Find.Inventory
  25.  On Local Error Goto 10012
  26.  Call Parse
  27.  If Parser Then
  28.     Call Numeric
  29.  Endif
  30.  Call Check.Inventory.Treasure
  31. 10011
  32.  Exit Sub
  33. 10012
  34.  Resume 10011
  35. End Sub
  36.  
  37. Sub Find.Object
  38.  On Local Error Goto 10022
  39.  Call Parse
  40.  If Parser Then
  41.     Call Numeric
  42.  Endif
  43.  Call Check.Inventory.Objects
  44. 10021
  45.  Exit Sub
  46. 10022
  47.  Resume 10021
  48. End Sub
  49.  
  50. Sub Check.Room.Treasure
  51.  On Local Error Goto 10032
  52.  Temp6=False
  53.  Temp7=False
  54.  TempC=False
  55.  If Parsed.Command1<>Nul Then
  56.     For Temp5=1 To 10
  57.        TempA=RoomRecord.Treasure(Temp5)
  58.        If TempA>False And TempA<=Lof(8)/Len(TreasureRecord) Then
  59.           Get 8,TempA,TreasureRecord
  60.           Out3=TreasureRecord.ShortName
  61.           Out3=Left$(Out3,Len(Parsed.Command1))
  62.           If Out3=Parsed.Command1 Then
  63.              TempC=TempC+1
  64.              If Parse.Temp=False Or TempC=Parse.Temp Then
  65.                 Out3=TreasureRecord.TreasureName
  66.                 Out3=Rtrim$(Out3)
  67.                 Temp7=RoomRecord.Treasure(Temp5)
  68.                 Temp6=RoomRecord.TreCharges(Temp5)
  69.                 Exit For
  70.              Endif
  71.           Endif
  72.        Endif
  73.     Next
  74.  Endif
  75. 10031
  76.  Exit Sub
  77. 10032
  78.  Resume 10031
  79. End Sub
  80.  
  81. Sub Check.Room.Objects
  82.  On Local Error Goto 10042
  83.  Temp6=False
  84.  Temp7=False
  85.  TempC=False
  86.  If Parsed.Command1<>Nul Then
  87.     For Temp5=1 To 10
  88.        If RoomRecord.Object(Temp5) Then
  89.           Get 6,RoomRecord.Object(Temp5),ObjectRecord
  90.           Out3=ObjectRecord.ShortName
  91.           Out3=Left$(Out3,Len(Parsed.Command1))
  92.           If Out3=Parsed.Command1 Then
  93.              TempC=TempC+1
  94.              If Parse.Temp=False Or TempC=Parse.Temp Then
  95.                 Out3=ObjectRecord.ObjectName
  96.                 Out3=Rtrim$(Out3)
  97.                 Temp7=RoomRecord.Object(Temp5)
  98.                 Temp6=RoomRecord.ObjCharges(Temp5)
  99.                 Exit For
  100.              Endif
  101.           Endif
  102.        Endif
  103.     Next
  104.  Endif
  105. 10041
  106.  Exit Sub
  107. 10042
  108.  Resume 10041
  109. End Sub
  110.  
  111. Sub Check.Room.Inventory
  112.  On Local Error Goto 10052
  113.  Temp6=False
  114.  Temp7=False
  115.  TempC=False
  116.  If Parsed.Command1<>Nul Then
  117.     For Temp5=1 To Room.Treasure.Max
  118.        If Room.Inventory(Temp5) Then
  119.           Get 8,Room.Inventory(Temp5),TreasureRecord
  120.           Out3=TreasureRecord.ShortName
  121.           Out3=Rtrim$(Out3)
  122.           Out3=Left$(Out3,Len(Parsed.Command1))
  123.           If Out3=Parsed.Command1 Then
  124.              TempC=TempC+1
  125.              If Parse.Temp=False Or TempC=Parse.Temp Then
  126.                 Out3=TreasureRecord.TreasureName
  127.                 Out3=Rtrim$(Out3)
  128.                 Temp7=Room.Inventory(Temp5)
  129.                 Temp6=Room.Inventory.Charges(Temp5)
  130.                 Exit For
  131.              Endif
  132.           Endif
  133.        Endif
  134.     Next
  135.  Endif
  136. 10051
  137.  Exit Sub
  138. 10052
  139.  Resume 10051
  140. End Sub
  141.  
  142. Sub Check.Inventory.Treasure
  143.  On Local Error Goto 10062
  144.  Temp6=False
  145.  Temp7=False
  146.  TempC=False
  147.  If Parsed.Command1<>Nul Then
  148.     For Temp5=1 To Number.Inventory
  149.        If Treasure(Temp5) Then
  150.           Get 8,Treasure(Temp5),TreasureRecord
  151.           Out3=TreasureRecord.ShortName
  152.           Out3=Left$(Out3,Len(Parsed.Command1))
  153.           If Out3=Parsed.Command1 Then
  154.              TempC=TempC+1
  155.              If Parse.Temp=False Or TempC=Parse.Temp Then
  156.                 Out3=TreasureRecord.TreasureName
  157.                 Out3=Rtrim$(Out3)
  158.                 Temp7=Treasure(Temp5)
  159.                 Temp6=Treasure.Charges(Temp5)
  160.                 Exit For
  161.              Endif
  162.           Endif
  163.        Endif
  164.     Next
  165.  Endif
  166. 10061
  167.  Exit Sub
  168. 10062
  169.  Resume 10061
  170. End Sub
  171.  
  172. Sub Check.Inventory.Objects
  173.  On Local Error Goto 10072
  174.  Temp6=False
  175.  Temp7=False
  176.  TempC=False
  177.  If Parsed.Command1<>Nul Then
  178.     For Temp5=1 To 5
  179.        If UserRecord.Object(Temp5) Then
  180.           Get 6,UserRecord.Object(Temp5),ObjectRecord
  181.           Out3=ObjectRecord.ShortName
  182.           Out3=Left$(Out3,Len(Parsed.Command1))
  183.           If Out3=Parsed.Command1 Then
  184.              TempC=TempC+1
  185.              If Parse.Temp=False Or TempC=Parse.Temp Then
  186.                 Out3=ObjectRecord.ObjectName
  187.                 Out3=Rtrim$(Out3)
  188.                 Temp7=UserRecord.Object(Temp5)
  189.                 Temp6=UserRecord.ObjCharges(Temp5)
  190.                 Exit For
  191.              Endif
  192.           Endif
  193.        Endif
  194.     Next
  195.  Endif
  196. 10071
  197.  Exit Sub
  198. 10072
  199.  Resume 10071
  200. End Sub
  201.  
  202. Sub Search.User.Inventory
  203.  On Local Error Goto 10082
  204.  Temp6=False
  205.  Temp7=False
  206.  Get 1,TempC,MessWorkRecord1
  207.  If Parsed.Command1<>Nul Then
  208.     Do
  209.        For Temp5=1 To 20
  210.           Temp2=MessWorkRecord1.Treasure(Temp5)
  211.           If Temp2 Then
  212.              Get 8,Temp2,TreasureRecord
  213.              Out3=TreasureRecord.ShortName
  214.              Out3=Left$(Out3,Len(Parsed.Command1))
  215.              If Out3=Parsed.Command1 Then
  216.                 Out3=TreasureRecord.TreasureName
  217.                 Out3=Rtrim$(Out3)
  218.                 Temp7=MessWorkRecord1.Treasure(Temp5)
  219.                 Temp6=MessWorkRecord1.TreasureCharges(Temp5)
  220.                 Exit Do
  221.              Endif
  222.           Endif
  223.        Next
  224.        Var=MessWorkRecord1.NextRecord
  225.        If Var>False Then
  226.           TempC=Var
  227.           Get 1,Var,MessWorkRecord1
  228.        Else
  229.           Exit Do
  230.        Endif
  231.     Loop
  232.  Endif
  233. 10081
  234.  Exit Sub
  235. 10082
  236.  Resume 10081
  237. End Sub
  238.  
  239. Sub Check.Monster
  240.  On Local Error Goto 10092
  241.  Temp5=False
  242.  TempC=False
  243.  Monster.Temp=False
  244.  If Parsed.Command1<>Nul Then
  245.     For Temp5=1 To Number.Monsters
  246.        TempA=False
  247.        TempB=False
  248.        Out3=MonsterArray(Temp5).MonsterName
  249.        Out3=Rtrim$(Out3)
  250.        Out3=Ucase$(Out3)
  251.        TempA=Instr(TempA+1,Out3," ")
  252.        While TempA
  253.           TempB=TempA
  254.           TempA=Instr(TempA+1,Out3," ")
  255.        Wend
  256.        Out2=Mid$(Out3,TempB+1)
  257.        Out2=Left$(Out2,Len(Parsed.Command1))
  258.        If Out2=Parsed.Command1 Then
  259.           TempC=TempC+1
  260.           If Parse.Temp=False Or TempC=Parse.Temp Then
  261.              Out3=MonsterArray(Temp5).MonsterName
  262.              Out3=Rtrim$(Out3)
  263.              Monster.Temp=Temp5
  264.              Last.Monster=Parsed.Command1
  265.              Exit For
  266.           Endif
  267.        Endif
  268.     Next
  269.  Endif
  270. 10091
  271.  Exit Sub
  272. 10092
  273.  Resume 10091
  274. End Sub
  275.  
  276. Sub Check.User
  277.  On Local Error Goto 10102
  278.  Temp5=False
  279.  TempC=False
  280.  User.Temp=False
  281.  If Parsed.Command1<>Nul Then
  282.     For Temp5=1 To Number.Users
  283.        TempA=False
  284.        TempB=False
  285.        Out3=UserArray(Temp5).CodeName
  286.        Call Decrypt(Out3)
  287.        Out3=Rtrim$(Out3)
  288.        Out3=Ucase$(Out3)
  289.        TempA=Instr(TempA+1,Out3," ")
  290.        While TempA
  291.           TempB=TempA
  292.           TempA=Instr(TempA+1,Out3," ")
  293.        Wend
  294.        Out2=Mid$(Out3,TempB+1)
  295.        Out2=Left$(Out2,Len(Parsed.Command1))
  296.        If Out2=Parsed.Command1 Then
  297.           TempC=TempC+1
  298.           If Parse.Temp=False Or TempC=Parse.Temp Then
  299.              Out3=UserArray(Temp5).CodeName
  300.              Call Decrypt(Out3)
  301.              Out3=Rtrim$(Out3)
  302.              User.Temp=Temp5
  303.              Last.Monster=Parsed.Command1
  304.              Exit For
  305.           Endif
  306.        Endif
  307.     Next
  308.  Endif
  309. 10101
  310.  Exit Sub
  311. 10102
  312.  Resume 10101
  313. End Sub
  314.  
  315. Sub Equate(Temp#) ' My famous recursive descent parser.
  316.  On Local Error Goto 10112
  317.  Temp#=False
  318.  If Out2<>Nul Then
  319.     Out2=Ucase$(Out2)
  320.     Token.Index=1
  321.     Call Get.Token
  322.     Call Parse1(Temp#)
  323.  Endif
  324. 10111
  325.  Exit Sub
  326. 10112
  327.  Resume 10111
  328. End Sub
  329.  
  330. Sub Parse1(Temp#)
  331.  On Local Error Goto 10122
  332.  Call Parse2(Temp#)
  333.  Token.Parsed$=Strng
  334.  While Token.Parsed$="<" Or Token.Parsed$=">" Or_
  335.  Token.Parsed$="=" Or Token.Parsed$="#"
  336.     Call Get.Token
  337.     Call Parse2(Temp2#)
  338.     Call Arith(Token.Parsed$,Temp#,Temp2#)
  339.     Token.Parsed$=Strng
  340.  Wend
  341. 10121
  342.  Exit Sub
  343. 10122
  344.  Resume 10121
  345. End Sub
  346.  
  347. Sub Parse2(Temp#)
  348.  On Local Error Goto 10132
  349.  Call Parse3(Temp#)
  350.  Token.Parsed$=Strng
  351.  While Token.Parsed$="+" Or Token.Parsed$="-"
  352.     Call Get.Token
  353.     Call Parse3(Temp2#)
  354.     Call Arith(Token.Parsed$,Temp#,Temp2#)
  355.     Token.Parsed$=Strng
  356.  Wend
  357. 10131
  358.  Exit Sub
  359. 10132
  360.  Resume 10131
  361. End Sub
  362.  
  363. Sub Parse3(Temp#)
  364.  On Local Error Goto 10142
  365.  Call Parse4(Temp#)
  366.  Token.Parsed$=Strng
  367.  While Token.Parsed$="*" Or Token.Parsed$="/"
  368.     Call Get.Token
  369.     Call Parse4(Temp2#)
  370.     Call Arith(Token.Parsed$,Temp#,Temp2#)
  371.     Token.Parsed$=Strng
  372.  Wend
  373. 10141
  374.  Exit Sub
  375. 10142
  376.  Resume 10141
  377. End Sub
  378.  
  379. Sub Parse4(Temp#)
  380.  On Local Error Goto 10152
  381.  Call Parse5(Temp#)
  382.  If Strng="^" Then
  383.     Call Get.Token
  384.     Call Parse4(Temp2#)
  385.     Call Arith(Token.Parsed$,Temp#,Temp2#)
  386.  Endif
  387. 10151
  388.  Exit Sub
  389. 10152
  390.  Resume 10151
  391. End Sub
  392.  
  393. Sub Parse5(Temp#)
  394.  On Local Error Goto 10162
  395.  Token.Parsed$=Nul
  396.  If Token=1 And (Strng="+" Or Strng="-") Then
  397.     Token.Parsed$=Strng
  398.     Call Get.Token
  399.  Endif
  400.  Call Parse6(Temp#)
  401.  If Token.Parsed$<>Nul Then
  402.     Call Arith(Token.Parsed$,Temp#,Temp2#)
  403.  Endif
  404. 10161
  405.  Exit Sub
  406. 10162
  407.  Resume 10161
  408. End Sub
  409.  
  410. Sub Parse6(Temp#)
  411.  On Local Error Goto 10172
  412.  If Strng="(" And Token=1 Then
  413.     Call Get.Token
  414.     Call Parse1(Temp#)
  415.     Call Get.Token
  416.  Else
  417.     Call Primitive(Temp#)
  418.  Endif
  419. 10171
  420.  Exit Sub
  421. 10172
  422.  Resume 10171
  423. End Sub
  424.  
  425. Sub Primitive(Temp#)
  426.  On Local Error Goto 10182
  427.  If Token=2 Then
  428.     Temp#=Val(Strng)
  429.     Call Get.Token
  430.  Else
  431.     If Token=3 Then
  432.        Select Case Strng
  433.        Case "STR", "ST"
  434.           Temp#=UserRecord.Stats(1)
  435.        Case "INT", "IN"
  436.           Temp#=UserRecord.Stats(2)
  437.        Case "WIS", "WI"
  438.           Temp#=UserRecord.Stats(3)
  439.        Case "DEX", "DX"
  440.           Temp#=UserRecord.Stats(4)
  441.        Case "CON", "CO"
  442.           Temp#=UserRecord.Stats(5)
  443.        Case "PIE", "PI"
  444.           Temp#=UserRecord.Stats(6)
  445.        Case "CHA", "CH"
  446.           Temp#=UserRecord.Stats(7)
  447.        Case "FAT", "FT"
  448.           Temp#=UserRecord.Fatigue
  449.        Case "VIT", "VT"
  450.           Temp#=UserRecord.Vitality
  451.        Case "MAG", "MG"
  452.           Temp#=UserRecord.Magic
  453.        Case "EXP", "XP"
  454.           Temp#=UserRecord.Experience
  455.        Case "LVL", "LF"
  456.           Temp#=UserRecord.Level
  457.        Case "AR"
  458.           Temp#=Weapon1
  459.        Case "WE"
  460.           Temp#=Weapon2
  461.        Case "SH"
  462.           Temp#=Weapon3
  463.        Case "WP1"
  464.           Temp#=UserRecord.Weapons(1)
  465.        Case "WP2"
  466.           Temp#=UserRecord.Weapons(2)
  467.        Case "WP3"
  468.           Temp#=UserRecord.Weapons(3)
  469.        Case "WP4"
  470.           Temp#=UserRecord.Weapons(4)
  471.        Case "MHP"
  472.           Temp#=MonsterArray(Monster.Temp).Hits
  473.        Case "MEXP"
  474.           Temp#=MonsterArray(Monster.Temp).Experience
  475.        Case "MLVL"
  476.           Temp#=MonsterArray(Monster.Temp).Level
  477.        Case "XX"
  478.           Temp#=Multiplier
  479.        Case "RND"
  480.           Temp#=Rnd
  481.        Case "RG"
  482.           Temp#=Treasure.Charges(Weapon7)
  483.        Case "WT"
  484.           Temp#=Weight
  485.        Case "GD"
  486.           Temp#=UserRecord.Gold
  487.        Case "BR"
  488.           Temp#=UserRecord.Brief
  489.        Case "PSIA"
  490.           Temp#=Psi.Attack.Mode
  491.        Case "PSID"
  492.           Temp#=Psi.Defense.Mode
  493.        Case "MPSI"
  494.           Temp#=MonsterArray(Monster.Temp).Psionic
  495.        End Select
  496.        Call Get.Token
  497.     Endif
  498.  Endif
  499. 10181
  500.  Exit Sub
  501. 10182
  502.  Resume 10181
  503. End Sub
  504.  
  505. Sub Arith(Token.Parsed$,Temp#,Temp2#)
  506.  On Local Error Goto 10192
  507.  If Token.Parsed$="+" Then
  508.     Temp#=(Temp#+Temp2#)
  509.  Endif
  510.  If Token.Parsed$="-" Then
  511.     Temp#=(Temp#-Temp2#)
  512.  Endif
  513.  If Token.Parsed$="/" Then
  514.     Temp#=(Temp#/Temp2#)
  515.  Endif
  516.  If Token.Parsed$="*" Then
  517.     Temp#=(Temp#*Temp2#)
  518.  Endif
  519.  If Token.Parsed$="^" Then
  520.     Temp#=(Temp#^Temp2#)
  521.  Endif
  522.  If Token.Parsed$="<" Then
  523.     Temp#=(Temp#<Temp2#)
  524.  Endif
  525.  If Token.Parsed$=">" Then
  526.     Temp#=(Temp#>Temp2#)
  527.  Endif
  528.  If Token.Parsed$="=" Then
  529.     Temp#=(Temp#=Temp2#)
  530.  Endif
  531.  If Token.Parsed$="#" Then
  532.     Temp#=(Temp#<>Temp2#)
  533.  Endif
  534. 10191
  535.  Exit Sub
  536. 10192
  537.  Resume 10191
  538. End Sub
  539.  
  540. Sub Get.Token
  541.  On Local Error Goto 10202
  542.  Strng=Nul
  543.  If Instr("-+*/^()<>=#",Mid$(Out2,Token.Index,1)) Then
  544.     Token=1
  545.     Strng=Mid$(Out2,Token.Index,1)
  546.     Token.Index=Token.Index+1
  547.     Exit Sub
  548.  Endif
  549.  If Mid$(Out2,Token.Index,1)>="A" And Mid$(Out2,Token.Index,1)<="Z" Then
  550.     While Instr(" -+*/^()<>=#",Mid$(Out2,Token.Index,1))=False
  551.        Strng=Strng+Mid$(Out2,Token.Index,1)
  552.        Token.Index=Token.Index+1
  553.     Wend
  554.     Token=3
  555.     Exit Sub
  556.  Endif
  557.  If Mid$(Out2,Token.Index,1)>="0" And Mid$(Out2,Token.Index,1)<="9" Then
  558.     While Instr(" -+*/^()<>=#",Mid$(Out2,Token.Index,1))=False
  559.        Strng=Strng+Mid$(Out2,Token.Index,1)
  560.        Token.Index=Token.Index+1
  561.     Wend
  562.     Token=2
  563.  Endif
  564. 10201
  565.  Exit Sub
  566. 10202
  567.  Resume 10201
  568. End Sub
  569.  
  570. Sub Sort.Inventory
  571.  On Local Error Goto 10212
  572.  If Sorting=False Then
  573.     Sorting=True
  574.     Strng="Inventory sorting on."
  575.  Else
  576.     Sorting=False
  577.     Strng="Inventory sorting off."
  578.  Endif
  579.  Call IO.O
  580. 10211
  581.  Exit Sub
  582. 10212
  583.  Resume 10211
  584. End Sub
  585.  
  586. Sub Sorter
  587.  On Local Error Goto 10222
  588.  If Sorting Then
  589.     Call Sort.Array(Number.Inventory,1)
  590.  Endif
  591. 10221
  592.  Exit Sub
  593. 10222
  594.  Resume 10221
  595. End Sub
  596.  
  597. Sub Sort.Array(VarZ,VarQ)
  598.  On Local Error Goto 10224
  599.  TempQ=4
  600.  While TempQ<=VarZ
  601.     TempQ=TempQ*2
  602.  Wend
  603.  TempQ=Int((TempQ-1)/2)
  604.  While TempQ>False
  605.     For Var=1 To VarZ-TempQ
  606.        VarX=Var
  607.        While VarX>False
  608.           VarN=VarX+TempQ
  609.           Select Case VarQ
  610.           Case 1
  611.              If Treasure.Charges(VarX)<Treasure.Charges(VarN) Then
  612.                 Swap Treasure(VarX),Treasure(VarN)
  613.                 Swap Treasure.Charges(VarX),Treasure.Charges(VarN)
  614.                 Gosub Swap.Weapons
  615.                 VarX=VarX-TempQ
  616.              Else
  617.                 VarX=False
  618.              Endif
  619.           Case 2
  620.              If Temp.ArrayZ(VarX)<Temp.ArrayZ(VarN) Then
  621.                 Swap Temp.Array1(VarX),Temp.Array1(VarN)
  622.                 Swap Temp.ArrayZ(VarX),Temp.ArrayZ(VarN)
  623.                 VarX=VarX-TempQ
  624.              Else
  625.                 VarX=False
  626.              Endif
  627.           Case 3
  628.              If Temp.ArrayX(VarX)>Temp.ArrayX(VarN) Then
  629.                 Swap Node.Work.Array1(VarX),Node.Work.Array1(VarN)
  630.                 Swap Temp.Array1(VarX),Temp.Array1(VarN)
  631.                 Swap Temp.Array2(VarX),Temp.Array2(VarN)
  632.                 Swap Temp.ArrayS(VarX),Temp.ArrayS(VarN)
  633.                 Swap Temp.ArrayX(VarX),Temp.ArrayX(VarN)
  634.                 VarX=VarX-TempQ
  635.              Else
  636.                 VarX=False
  637.              Endif
  638.           End Select
  639.        Wend
  640.     Next
  641.     TempQ=Int(TempQ/2)
  642.  Wend
  643.  Exit Sub
  644.  
  645. Swap.Weapons:
  646.  Select Case Weapon4
  647.  Case VarX
  648.     Weapon4=VarN
  649.  Case VarN
  650.     Weapon4=VarX
  651.  End Select
  652.  Select Case Weapon5
  653.  Case VarX
  654.     Weapon5=VarN
  655.  Case VarN
  656.     Weapon5=VarX
  657.  End Select
  658.  Select Case Weapon6
  659.  Case VarX
  660.     Weapon6=VarN
  661.  Case VarN
  662.     Weapon6=VarX
  663.  End Select
  664.  Select Case Weapon7
  665.  Case VarX
  666.     Weapon7=VarN
  667.  Case VarN
  668.     Weapon7=VarX
  669.  End Select
  670.  Return
  671. 10223
  672.  Exit Sub
  673. 10224
  674.  Resume 10223
  675. End Sub
  676.  
  677. Sub Toggle.Echo
  678.  On Local Error Goto 10232
  679.  Echo=Not Echo
  680.  Strng="Echo now on."
  681.  If Echo Then
  682.     Strng="Echo now off."
  683.  Endif
  684.  Call IO.O
  685. 10231
  686.  Exit Sub
  687. 10232
  688.  Resume 10231
  689. End Sub
  690.  
  691. Sub Page.Sysop
  692.  On Local Error Goto 10242
  693.  If Chat.Annoy Then
  694.     Strng="The Sysop does not want to be disturbed now.."
  695.     Call IO.O
  696.     Exit Sub
  697.  Endif
  698.  If Config2(69)>False Then
  699.     If UserRecord.Level<Config2(69) Then
  700.        Strng="The Sysop is not answering pages now."
  701.        Call IO.O
  702.        Exit Sub
  703.     Endif
  704.  Endif
  705.  Temp5=False
  706.  Graphics.Off=True
  707.  Strng="Paging Sysop."
  708.  Call IO.O
  709.  Strng="Hit <control-k> to return to prompt."
  710.  Call IO.O
  711.  Strng="Sysop hit <escape> to enter chat."+Chr$(13)+Chr$(10)
  712.  Call Scrn(Strng)
  713.  Strng="Paging Sysop:"
  714.  Carriage.Return=True
  715.  Call IO.O
  716.  Chat=True
  717.  Allow.Break=True
  718.  Do While Chat
  719.     Strng=Chr$(7)+Mask$
  720.     Carriage.Return=True
  721.     Call IO.O
  722.     Call Pause.Second
  723.     Temp5=Temp5+1
  724.     If Temp5>=10 Or Break Then
  725.        Chat=True
  726.        Allow.Break=False
  727.        Call IO.O
  728.        Exit Do
  729.     Endif
  730.  Loop
  731.  If Chat=False Then
  732.     Chat=True
  733.     Allow.Break=False
  734.     Strng=Nul
  735.     Call IO.O
  736.     Call Enter.Chat
  737.  Endif
  738. 10241
  739.  Chat=False
  740.  Exit Sub
  741. 10242
  742.  Resume 10241
  743. End Sub
  744.  
  745. Sub Enter.Chat
  746.  On Local Error Goto 10252
  747.  Graphics.Off=True
  748.  Temp1!=Timeon
  749.  Temp2!=Timer
  750.  Temp3!=Time.Left
  751.  Timeon=Timer
  752.  Time.Left=60
  753.  Allow.Break=False
  754.  Strng=Nul
  755.  Call IO.O
  756.  Strng="Chat Mode.."
  757.  Call IO.O
  758.  Word.Wrap=True
  759.  Do While Chat
  760.     Timeon=Timer
  761.     Time.Left=600
  762.     Call IO.I
  763.  Loop
  764.  Timeon=Temp1!+Fix(Timer-Temp2!)
  765.  Time.Left=Temp3!
  766.  Word.Wrap=False
  767.  Allow.Break=False
  768.  Strng=Nul
  769.  Call IO.O
  770. 10251
  771.  Exit Sub
  772. 10252
  773.  Resume 10251
  774. End Sub
  775.  
  776. Sub Set.Clock ' Watch for the hanging at midnight.
  777.  On Local Error Goto 10262
  778.  If Time$>"23:59:59" Then
  779.     Sleep 2
  780.     If Time$="24:00:00" Then
  781.        Time$="00:00:01"
  782.     Endif
  783.  Endif
  784. 10261
  785.  Exit Sub
  786. 10262
  787.  Resume 10261
  788. End Sub
  789.  
  790. Sub DM.Help
  791.  On Local Error Goto 10272
  792.  Temp$=Stored.Parsed.Command1
  793.  If Left$(Temp$,Len(Config3(9)))<>Config3(9) Then
  794.     Strng="Enter DM command, form: "+Config3(9)+"Help "+Config3(9)+"<command>"
  795.     Call IO.O
  796.     Exit Sub
  797.  Endif
  798.  Temp$=Mid$(Temp$,Len(Config3(9))+1)
  799.  Stored.Parsed.Command1=Temp$
  800.  Call Read.Help(True)
  801. 10271
  802.  Exit Sub
  803. 10272
  804.  Resume 10271
  805. End Sub
  806.  
  807. Sub Read.Help(Var)
  808.  On Local Error Goto 10282
  809.  Graphics.Off=True
  810.  Temp$=Stored.Parsed.Command1
  811.  Temp$=Rtrim$(Temp$)
  812.  Temp$=Ucase$(Temp$)
  813.  Temp$=Left$(Temp$,8)
  814.  If Var Then
  815.     FileName=DMhelp.Filename
  816.  Else
  817.     FileName=Help.Filename
  818.  Endif
  819.  Close #13
  820.  Open FileName For Random Shared As #13 Len=Len(HelpRecord2)
  821.  Temp=2
  822.  Temp5=False
  823.  Allow.Break=True
  824.  Do
  825.     Get 13,Temp,HelpRecord2
  826.     Temp2$=HelpRecord2.CommandName
  827.     Temp2$=Rtrim$(Temp2$)
  828.     If Left$(Temp2$,Len(Temp$))=Temp$ Then
  829.        Temp1=Temp
  830.        Do
  831.           Strng=HelpRecord2.Text
  832.           Strng=Rtrim$(Strng)
  833.           Call IO.O
  834.           If Break Then
  835.              Exit Do
  836.           Endif
  837.           Temp5=Temp5+1
  838.           If Temp5=23 Then
  839.              Temp5=False
  840.              Call More.Prompt
  841.              If No Then
  842.                 Exit Do
  843.              Endif
  844.           Endif
  845.           Temp=Temp+1
  846.           Get 13,Temp,HelpRecord2
  847.           If HelpRecord2.NextRecNum<>Temp1 Then
  848.              Exit Do
  849.           Endif
  850.           If Temp>Lof(13)/Len(HelpRecord2) Then
  851.              Exit Do
  852.           Endif
  853.        Loop
  854.        Allow.Break=False
  855.        Graphics.Off=False
  856.        Exit Sub
  857.     Endif
  858.     Temp=HelpRecord2.NextRecNum
  859.     If Temp>=Lof(13)/Len(HelpRecord2) Then
  860.        Exit Do
  861.     Endif
  862.  Loop
  863.  Graphics.Off=False
  864.  Strng="Help text not found."
  865.  Call IO.O
  866.  Exit Sub
  867. 10281
  868.  Exit Sub
  869. 10282
  870.  Resume 10281
  871. End Sub
  872.  
  873. Sub Train.Stats
  874.  On Local Error Goto 10292
  875.  If UserRecord.Level<False Then
  876.     UserRecord.Level=False
  877.  Endif
  878.  If UserRecord.Level>=MaxInt Then
  879.     Strng="Nothing happens.."
  880.     Call IO.O
  881.     Exit Sub
  882.  Endif
  883.  If UserRecord.Level>False Then
  884.     Call Gold(Temp#)
  885.     UserRecord.Gold=UserRecord.Gold-Temp#
  886.  Endif
  887.  Temp1=Int(Rnd*7+1)
  888.  If UserRecord.Stats(Temp1)<Config2(31) Or Normal.User=False Then
  889.     UserRecord.Stats(Temp1)=UserRecord.Stats(Temp1)+1
  890.     Strng="gained one "+Rtrim$(Stat(Temp1))+" point"
  891.     Call Update.DayFile(Strng,False)
  892.  Endif
  893.  If UserRecord.Level<6 Then
  894.     If UserRecord.Stats(6)<Config2(31) Then
  895.        UserRecord.Stats(6)=UserRecord.Stats(6)+1
  896.        Strng="gained one "+Rtrim$(Stat(6))+" point"
  897.        Call Update.DayFile(Strng,False)
  898.     Endif
  899.  Endif
  900.  UserRecord.Level=UserRecord.Level+1
  901.  Call New.Stats
  902.  Call Experience(Temp#)
  903.  UserRecord.Experience=Temp#
  904.  Strng="trained for level"
  905.  If UserRecord.Level>10 Then
  906.     Strng=Strng+Str$(UserRecord.Level)
  907.  Else
  908.     Strng=Strng+" "+Rtrim$(Numeral(UserRecord.Level))
  909.  Endif
  910.  Call Update.DayFile(Strng,False)
  911.  Strng="After many hours of training and meditation..."
  912.  Call IO.O
  913.  Call Display.Stats
  914. 10291
  915.  Exit Sub
  916. 10292
  917.  Resume 10291
  918. End Sub
  919.  
  920. Sub New.Stats
  921.  On Local Error Goto 10310
  922.  If UserRecord.Level<False Then
  923.     UserRecord.Level=False
  924.  Endif
  925. 10301
  926.  Temp#=Cdbl(Training.Room(UserRecord.ClassType,1))*Cdbl(UserRecord.Level)
  927. 10302
  928.  If Temp#>MaxInt Then
  929.     Temp#=MaxInt
  930.  Endif
  931.  UserRecord.FatigueMax=Cint(Temp#)
  932. 10303
  933.  Temp#=Cdbl(Training.Room(UserRecord.ClassType,2))*Cdbl(UserRecord.Level)
  934. 10304
  935.  If Temp#>MaxInt Then
  936.     Temp#=MaxInt
  937.  Endif
  938.  UserRecord.VitalityMax=Cint(Temp#)
  939. 10305
  940.  Temp#=Cdbl(Training.Room(UserRecord.ClassType,3))*Cdbl(UserRecord.Level)
  941. 10306
  942.  If Temp#>MaxInt Then
  943.     Temp#=MaxInt
  944.  Endif
  945.  UserRecord.MagicMax=Cint(Temp#)
  946. 10307
  947.  Temp#=Cdbl(Training.Room(UserRecord.ClassType,4))*Cdbl(UserRecord.Level)
  948. 10308
  949.  If Temp#>MaxInt Then
  950.     Temp#=MaxInt
  951.  Endif
  952.  UserRecord.PsionicMax=Cint(Temp#)
  953.  If UserRecord.Fatigue<False Or_
  954.  UserRecord.Fatigue>UserRecord.FatigueMax Then
  955.     UserRecord.Fatigue=UserRecord.FatigueMax
  956.  Endif
  957.  If UserRecord.Vitality<False Or_
  958.  UserRecord.Vitality>UserRecord.VitalityMax Then
  959.     UserRecord.Vitality=UserRecord.VitalityMax
  960.  Endif
  961.  If UserRecord.Magic<False Or_
  962.  UserRecord.Magic>UserRecord.MagicMax Then
  963.     UserRecord.Magic=UserRecord.MagicMax
  964.  Endif
  965.  If UserRecord.Psionic<False Or_
  966.  UserRecord.Psionic>UserRecord.PsionicMax Then
  967.     UserRecord.Psionic=UserRecord.PsionicMax
  968.  Endif
  969.  If Normal.User Then
  970.     For Temp=1 To 7
  971.        If UserRecord.Stats(Temp)>Config2(31) Then
  972.           UserRecord.Stats(Temp)=Config2(31)
  973.        Endif
  974.     Next
  975.  Endif
  976.  Call Status.Line(False)
  977.  If Normal.User Then
  978.     For Temp=1 To 7
  979.        If UserRecord.Stats(Temp)<=False Then
  980.           Message1="Your "+Stat(Temp)+" is zero!"
  981.           Strng="died from low stats!"
  982.           Call Update.DayFile(Strng,False)
  983.           Call Player.Died
  984.           Exit Sub
  985.        Endif
  986.     Next
  987.  Endif
  988.  If Config2(48) Then
  989.     If UserRecord.Level>=10 Then
  990.        If UserRecord.ClassType>=1 And UserRecord.ClassType<=10 Then
  991.           Out2=High.Class.Name(UserRecord.ClassType)
  992.           Call Valid(Out2,20)
  993.           If Len(Out2) Then
  994.              Call Encrypt(Out2,True)
  995.              UserRecord.ClassName=Out2
  996.           Endif
  997.        Endif
  998.     Endif
  999.  Endif
  1000. 10309
  1001.  Exit Sub
  1002. 10310
  1003.  If Erl=10301 Then
  1004.     Resume 10302
  1005.  Endif
  1006.  If Erl=10303 Then
  1007.     Resume 10304
  1008.  Endif
  1009.  If Erl=10305 Then
  1010.     Resume 10306
  1011.  Endif
  1012.  If Erl=10307 Then
  1013.     Resume 10308
  1014.  Endif
  1015.  Resume 10309
  1016. End Sub
  1017.  
  1018. Sub Bank.Interest
  1019.  On Local Error Goto 10316
  1020.  Strng=UserRecord.DateOn
  1021.  Call Decrypt(Strng)
  1022.  If Date$<>Strng Then
  1023.     UserRecord.NumCalls=False
  1024.     TempX=DateValue#(Date$)-DateValue#(Strng)
  1025.     If TempX>False Then
  1026.        If UserRecord.Bank>False Then
  1027.           TempG#=False
  1028. 10311     For Temp3=1 To TempX
  1029.              Temp3#=Int(UserRecord.Bank*Config1(30))
  1030.              UserRecord.Bank=UserRecord.Bank+Temp3#
  1031.              TempG#=TempG#+Temp3#
  1032.           Next
  1033. 10312     If TempG#>False Then
  1034.              Strng="The bank reports interest posting of"+_
  1035.              Str$(TempG#)+" gold to your account!"
  1036.              Call IO.O
  1037.           Endif
  1038.        Endif
  1039.        If UserRecord.Borrow>False Then
  1040. 10313     For Temp3=1 To TempX
  1041.              Temp=Int(UserRecord.Borrow*Config1(10))
  1042.              UserRecord.Borrow=UserRecord.Borrow+Temp
  1043.           Next
  1044. 10314     If UserRecord.Borrow>False Then
  1045.              Strng="The lending interest rate of"+Str$(Config1(10)*100)+_
  1046.              "% increased your borrowed amount to"+Str$(UserRecord.Borrow)+"!"
  1047.              Call IO.O
  1048.           Endif
  1049.        Endif
  1050.     Endif
  1051.  Endif
  1052. 10315
  1053.  Strng=Date$
  1054.  Call Valid(Strng,10)
  1055.  Call Encrypt(Strng,True)
  1056.  UserRecord.DateOn=Strng
  1057.  Exit Sub
  1058. 10316
  1059.  If Erl=10311 Then
  1060.     Resume 10312
  1061.  Endif
  1062.  If Erl=10313 Then
  1063.     Resume 10314
  1064.  Endif
  1065.  Resume 10315
  1066. End Sub
  1067.  
  1068. Sub Open.Recep.File
  1069.  On Local Error Goto 10322
  1070.  Close 13
  1071.  FileName=Config3(51)+Rtrim$(TreasureRecord.RecepFileName)+Config3(57)
  1072.  Open FileName For Random Shared As #13 Len=Len(RecepRec)
  1073. 10321
  1074.  Exit Sub
  1075. 10322
  1076.  Resume 10321
  1077. End Sub
  1078.  
  1079. Sub Edit.Room(Var1)
  1080.  On Local Error Goto 10342
  1081.  Graphics.Off=True
  1082.  Get 5,Var1,RoomRecord
  1083.  Strng="Current short description:"
  1084.  Call IO.O
  1085.  Strng=RoomRecord.ShortDesc
  1086.  Call IO.O
  1087.  Strng="Enter short description(78 characters):"
  1088.  Call IO.O
  1089.  Strng="Press "+Enter$+" to leave unchanged."
  1090.  Call IO.O
  1091.  Line.Length=78
  1092.  Strng="?"
  1093.  Call IO.I
  1094.  If No.Input=False Then
  1095.     RoomRecord.ShortDesc=Out2
  1096.  Endif
  1097.  Put 5,Var1,RoomRecord
  1098.  Strng="Edit long description(y/n)?"
  1099.  Call IO.I
  1100.  If Yes Then
  1101.     Strng="Enter four lines for long description:"
  1102.     Call IO.O
  1103.     Strng="Press "+Enter$+" when done."
  1104.     Call IO.O
  1105.     For Var2=1 To 4
  1106.        RoomRecord.LongDesc(Var2)=Nul
  1107.     Next
  1108.     Word.Wrap=True
  1109.     For Var2=1 To 4
  1110.        Strng="?"
  1111.        If Var2=4 Then
  1112.           Word.Wrap=False
  1113.        Endif
  1114.        Call IO.I
  1115.        If No.Input Then
  1116.           Exit For
  1117.        Endif
  1118.        RoomRecord.LongDesc(Var2)=Out2
  1119.     Next
  1120.     Word.Wrap=False
  1121.     Put 5,Var1,RoomRecord
  1122.  Endif
  1123. 10341
  1124.  Exit Sub
  1125. 10342
  1126.  Resume 10341
  1127. End Sub
  1128.  
  1129. Sub Add.Monclass(Var1)
  1130.  On Local Error Goto 10344
  1131.  Strng="Add monster class(y/n)?"
  1132.  Call IO.I
  1133.  If Yes Then
  1134.     Strng="Enter monster class(1-"+Mid$(Str$(Monclass.Max),2)+")?"
  1135.     Call IO.I
  1136.     Temp2=Int(Val(Out2))
  1137.     If Temp2>False And Temp2<=Monclass.Max Then
  1138.        Get 5,Var1,RoomRecord
  1139.        RoomRecord.MonsterClass=Temp2
  1140.        Put 5,Var1,RoomRecord
  1141.        Strng="Monster class"+Str$(Temp2)+" added to room"+Str$(Var1)+"."
  1142.        Call IO.O
  1143.     Endif
  1144.  Endif
  1145. 10343
  1146.  Exit Sub
  1147. 10344
  1148.  Resume 10343
  1149. End SUb
  1150.  
  1151. Sub Add.Room
  1152.  On Local Error Goto 10352
  1153.  Graphics.Off=True
  1154.  Strng="Add new room(y/n)?"
  1155.  Call IO.I
  1156.  If No Then
  1157.     TempC=False
  1158.     Exit Sub
  1159.  Endif
  1160.  TempC=True
  1161.  TempD=Room
  1162.  Room=Lof(5)/Len(RoomRecord)+1
  1163.  Call Clear.Room(Room)
  1164.  Call Edit.Room(Room)
  1165.  Strng="Add room link(y/n)?"
  1166.  Call IO.I
  1167.  If Yes Then
  1168.     Strng="(Press "+Enter$+" for entry link)"
  1169.     Call IO.O
  1170.     Temp3=TempA
  1171.     Call Add.Link(TempD,Room)
  1172.  Endif
  1173.  Call Add.Monclass(Room)
  1174. 10351
  1175.  Exit Sub
  1176. 10352
  1177.  Resume 10351
  1178. End Sub
  1179.  
  1180. Sub Clear.Room(Var)
  1181.  On Local Error Goto 10354
  1182.  RoomRecord.ShortDesc=Nul
  1183.  For Var1=1 To 4
  1184.     RoomRecord.LongDesc(Var1)=Nul
  1185.  Next
  1186.  RoomRecord.MonsterClass=False
  1187.  RoomRecord.SpellTrigger=False
  1188.  RoomRecord.MonsterTrigger=False
  1189.  RoomRecord.HealthRate=False
  1190.  RoomRecord.EncounterRate=False
  1191.  RoomRecord.HitPoints=False
  1192.  RoomRecord.Inventory=False
  1193.  RoomRecord.MonsterTalk=False
  1194.  RoomRecord.Fumble=False
  1195.  RoomRecord.Level=False
  1196.  RoomRecord.Teleport=False
  1197.  RoomRecord.Restrictions=False
  1198.  RoomRecord.RustRate=False
  1199.  RoomRecord.StealRate=False
  1200.  For Var1=1 To 11
  1201.     RoomRecord.Direct(Var1)=False
  1202.  Next
  1203.  For Var1=1 To 10
  1204.     RoomRecord.Object(Var1)=False
  1205.     RoomRecord.ObjCharges(Var1)=False
  1206.     RoomRecord.Treasure(Var1)=False
  1207.     RoomRecord.TreCharges(Var1)=False
  1208.     RoomRecord.Flags(Var1)=False
  1209.  Next
  1210.  Put 5,Var,RoomRecord
  1211. 10353
  1212.  Exit Sub
  1213. 10354
  1214.  Resume 10353
  1215. End Sub
  1216.  
  1217. Sub Link.Room
  1218.  On Local Error Goto 10362
  1219.  Graphics.Off=True
  1220.  Strng="Enter room(1-"+Mid$(Str$(Lof(5)/Len(RoomRecord)),2)+")?"
  1221.  Call IO.I
  1222.  Temp1=Int(Val(Out2))
  1223.  If Temp1>False And Temp1<=Lof(5)/Len(RoomRecord) Then
  1224.     Strng="Enter link command(A to add, D to delete)?"
  1225.     Call IO.I
  1226.     Select Case Ucase$(Out2)
  1227.     Case "A"
  1228.        Strng="Enter link room(1-"+Mid$(Str$(Lof(5)/Len(RoomRecord)),2)+")?"
  1229.        Call IO.I
  1230.        Temp2=Int(Val(Out2))
  1231.        If Temp2>False And Temp2<=Lof(5)/Len(RoomRecord) Then
  1232.           Temp3=False
  1233.           Call Add.Link(Temp1,Temp2)
  1234.        Endif
  1235.     Case "D"
  1236.        Call Delete.Link(Temp1)
  1237.     End Select
  1238.  Endif
  1239.  Get 5,Room,RoomRecord
  1240. 10361
  1241.  Exit Sub
  1242. 10362
  1243.  Resume 10361
  1244. End Sub
  1245.  
  1246. Sub Add.Link(Var1,Var2)
  1247.  On Local Error Goto 10364
  1248.  Strng="Enter direction(N/E/S/W/O/U/D/NE/SE/SW/NW)?"
  1249.  Call IO.I
  1250.  Call Find.Link(Out2)
  1251.  If Temp3=False Then
  1252.     Exit Sub
  1253.  Endif
  1254.  Get 5,Var1,RoomRecord
  1255.  RoomRecord.Direct(Temp3)=Var2
  1256.  Put 5,Var1,RoomRecord
  1257.  Strng="Room"+Str$(Var1)+" link added to room"+Str$(Var2)+"."
  1258.  Call IO.O
  1259.  If Temp3=5 Then
  1260.     Exit Sub
  1261.  Endif
  1262.  Strng="Link room"+Str$(Var2)+" back to room"+Str$(Var1)+"(y/n)?"
  1263.  Call IO.I
  1264.  If Yes Then
  1265.     Call Find.Back.Link(Temp3)
  1266.     If Temp4 Then
  1267.        Get 5,Var2,RoomRecord
  1268.        RoomRecord.Direct(Temp4)=Var1
  1269.        Put 5,Var2,RoomRecord
  1270.        Strng="Room"+Str$(Var2)+" link added back to room"+Str$(Var1)+"."
  1271.        Call IO.O
  1272.     Endif
  1273.  Endif
  1274. 10363
  1275.  Exit Sub
  1276. 10364
  1277.  Resume 10363
  1278. End Sub
  1279.  
  1280. Sub Delete.Link(Var1)
  1281.  On Local Error Goto 10366
  1282.  Strng="Enter direction(N/E/S/W/O/U/D/NE/SE/SW/NW)?"
  1283.  Call IO.I
  1284.  Call Find.Link(Out2)
  1285.  If Temp3 Then
  1286.     Get 5,Var1,RoomRecord
  1287.     RoomRecord.Direct(Temp3)=False
  1288.     Put 5,Var1,RoomRecord
  1289.     Strng="Room"+Str$(Var1)+" link removed."
  1290.     Call IO.O
  1291.  Endif
  1292. 10365
  1293.  Exit Sub
  1294. 10366
  1295.  Resume 10365
  1296. End Sub
  1297.  
  1298. Sub Find.Link(Var1$)
  1299.  On Local Error Goto 10372
  1300.  Select Case Ucase$(Var1$)
  1301.  Case "N"
  1302.     Temp3=1
  1303.  Case "E"
  1304.     Temp3=2
  1305.  Case "S"
  1306.     Temp3=3
  1307.  Case "W"
  1308.     Temp3=4
  1309.  Case "O"
  1310.     Temp3=5
  1311.  Case "U"
  1312.     Temp3=6
  1313.  Case "D"
  1314.     Temp3=7
  1315.  Case "NE"
  1316.     Temp3=8
  1317.  Case "SE"
  1318.     Temp3=9
  1319.  Case "SW"
  1320.     Temp3=10
  1321.  Case "NW"
  1322.     Temp3=11
  1323.  End Select
  1324. 10371
  1325.  Exit Sub
  1326. 10372
  1327.  Resume 10371
  1328. End Sub
  1329.  
  1330. Sub Find.Back.Link(Var2)
  1331.  On Local Error Goto 10382
  1332.  Select Case Var2
  1333.  Case 1
  1334.     Temp4=3
  1335.  Case 2
  1336.     Temp4=4
  1337.  Case 3
  1338.     Temp4=1
  1339.  Case 4
  1340.     Temp4=2
  1341.  Case 5
  1342.     Temp4=0
  1343.  Case 6
  1344.     Temp4=7
  1345.  Case 7
  1346.     Temp4=6
  1347.  Case 8
  1348.     Temp4=10
  1349.  Case 9
  1350.     Temp4=11
  1351.  Case 10
  1352.     Temp4=8
  1353.  Case 11
  1354.     Temp4=9
  1355.  Case Else
  1356.     Temp4=0
  1357.  End Select
  1358. 10381
  1359.  Exit Sub
  1360. 10382
  1361.  Resume 10381
  1362. End Sub
  1363.  
  1364. Sub Drop(Var1)
  1365.  On Local Error Goto 10392
  1366.  Temp1=1
  1367.  If Right$(Out2,7)=" points" Then
  1368.     Out2=Left$(Out2,Len(Out2)-7)
  1369.     Temp1=2
  1370.  Endif
  1371.  For Temp5=1 To 7
  1372.     If Out2=Rtrim$(Stat(Temp5)) Then
  1373.        If (UserRecord.Flags And 2^Temp5) Then
  1374.           If Normal.User Then
  1375.              Graphics.Off=True
  1376.              Strng="The Ghods Thunder..."
  1377.              Call IO.O
  1378.              Strng="   Your Wish Is Denied!"
  1379.              Call IO.O
  1380.              Graphics.Off=False
  1381.              Exit Sub
  1382.           Endif
  1383.        Endif
  1384.        UserRecord.Flags=(UserRecord.Flags Or 2^Temp5)
  1385.        If UserRecord.Stats(Temp5)<Config2(31) Or Normal.User=False Then
  1386.           UserRecord.Stats(Temp5)=UserRecord.Stats(Temp5)+Temp1
  1387.           Strng="gained "
  1388.           Strng=Strng+Rtrim$(Numeral(Temp1))+" "
  1389.           Strng=Strng+Rtrim$(Stat(Temp5))+" point"
  1390.           If Temp1>1 Then
  1391.              Strng=Strng+"s"
  1392.           Endif
  1393.           Call Update.DayFile(Strng,False)
  1394.        Endif
  1395.        Graphics.Off=True
  1396.        Strng="The Ghods Thunder..."
  1397.        Call IO.O
  1398.        Strng="   Your "+Rtrim$(Stat(Temp5))+" Has Been Raised!"
  1399.        Call IO.O
  1400.        Graphics.Off=False
  1401.        Exit Sub
  1402.     Endif
  1403.  Next
  1404.  If Var1=False Then
  1405.     If (UserRecord.Flags And Wished) And Normal.User Then
  1406.        Graphics.Off=True
  1407.        Strng="The Ghods Thunder..."
  1408.        Call IO.O
  1409.        Strng="   Your Wish Is Denied!"
  1410.        Call IO.O
  1411.        Graphics.Off=False
  1412.        Exit Sub
  1413.     Endif
  1414.  Endif
  1415.  UserRecord.Flags=UserRecord.Flags Or Wished
  1416.  Temp2=False
  1417.  Temp6=False
  1418.  Temp7=False
  1419.  For Temp5=1 To Lof(8)/Len(TreasureRecord)
  1420.     Get 8,Temp5,TreasureRecord
  1421.     Out3=TreasureRecord.TreasureName
  1422.     Out3=Left$(Out3,Len(Out2))
  1423.     If Out2=Out3 Then
  1424.        Temp2=Temp2+1
  1425.        If Parse.Temp=False Or Temp2=Parse.Temp Then
  1426.           Temp7=Temp5
  1427.           If TreasureRecord.Vehicle Then
  1428.              Temp6=TreasureRecord.VehicleHits
  1429.           Else
  1430.              Temp6=TreasureRecord.Charges
  1431.           Endif
  1432.           Exit For
  1433.        Endif
  1434.     Endif
  1435.  Next
  1436.  If Temp7=False Then
  1437.     If Normal.User=False Or Var1 Then
  1438.        For Temp5=1 To Lof(6)/Len(ObjectRecord)
  1439.           Get 6,Temp5,ObjectRecord
  1440.           Out3=ObjectRecord.ObjectName
  1441.           Out3=Left$(Out3,Len(Out2))
  1442.           If Out2=Out3 Then
  1443.              Temp2=Temp2+1
  1444.              If Parse.Temp=False Or Temp2=Parse.Temp Then
  1445.                 Temp7=-Temp5
  1446.                 Temp6=False
  1447.                 Exit For
  1448.              Endif
  1449.           Endif
  1450.        Next
  1451.     Endif
  1452.  Endif
  1453.  If Var1=False Then
  1454.     If Temp7>False And Normal.User Then
  1455.        If TreasureRecord.Recep Then
  1456.           Temp7=False
  1457.        Endif
  1458.        If TreasureRecord.Vehicle Then
  1459.           Temp7=False
  1460.        Endif
  1461.        Temp4=TreasureRecord.Spell
  1462.        If Temp4>False And Temp4<=Spells.Max Then
  1463.           If SpellArray(Temp4).SpellType=4 Then
  1464.              Temp7=False
  1465.           Endif
  1466.        Endif
  1467.     Endif
  1468.  Endif
  1469.  If Temp7=False Then
  1470.     Graphics.Off=True
  1471.     Strng="The Ghods Thunder..."
  1472.     Call IO.O
  1473.     Strng="   Your Wish Is Denied!"
  1474.     Call IO.O
  1475.     Graphics.Off=False
  1476.     Exit Sub
  1477.  Endif
  1478.  Temp8=False
  1479.  If Temp7>False Then
  1480.     For Temp5=1 To 10
  1481.        If RoomRecord.Treasure(Temp5)=False Then
  1482.           RoomRecord.Treasure(Temp5)=Temp7
  1483.           RoomRecord.TreCharges(Temp5)=Temp6
  1484.           RoomRecord.Flags(Temp5)=False
  1485.           Put 5,Room,RoomRecord
  1486.           Temp8=True
  1487.           Exit For
  1488.        Endif
  1489.     Next
  1490.  Endif
  1491.  If Temp7<False Then
  1492.     For Temp5=1 To 10
  1493.        If RoomRecord.Object(Temp5)=False Then
  1494.           RoomRecord.Object(Temp5)=Abs(Temp7)
  1495.           RoomRecord.ObjCharges(Temp5)=Temp6
  1496.           RoomRecord.Flags(Temp5)=False
  1497.           Put 5,Room,RoomRecord
  1498.           Temp8=True
  1499.           Exit For
  1500.        Endif
  1501.     Next
  1502.  Endif
  1503.  Graphics.Off=True
  1504.  Strng="A Dark Cloud Passes Overhead..."
  1505.  Call IO.O
  1506.  Strng="   Some Treasure Falls From The Sky..."
  1507.  Call IO.O
  1508.  Strng="The Cloud Disappears..."
  1509.  Call IO.O
  1510.  Graphics.Off=False
  1511.  If Temp8=False Then
  1512.     Strng="It fell, then rolled away.."
  1513.     Call IO.O
  1514.  Endif
  1515. 10391
  1516.  Exit Sub
  1517. 10392
  1518.  Resume 10391
  1519. End Sub
  1520.  
  1521. Sub Goto.Bank
  1522.  On Local Error Goto 10402
  1523.  If Config2(50)=False Then
  1524.     Call In.Room(16)
  1525.     If TempA=False Then
  1526.        Strng="Find the Pawn Shop.."
  1527.        Call IO.O
  1528.        Exit Sub
  1529.     Endif
  1530.  Endif
  1531.  Call Bank
  1532. 10401
  1533.  Exit Sub
  1534. 10402
  1535.  Resume 10401
  1536. End Sub
  1537.  
  1538. Sub DM.Send
  1539.  On Local Error Goto 10412
  1540.  Strng="Enter text: "
  1541.  Line.Length=80
  1542.  Call IO.I
  1543.  Out2=Mask$+Mask$+Mask$+" "+Out2
  1544.  If No.Input=False Then
  1545.     Call Send.Mess(5,False,False,Out2)
  1546.  Endif
  1547. 10411
  1548.  Exit Sub
  1549. 10412
  1550.  Resume 10411
  1551. End Sub
  1552.  
  1553. Sub DM.Noid
  1554.  On Local Error Goto 10422
  1555.  Strng="Enter no-id text: "
  1556.  Line.Length=80
  1557.  Call IO.I
  1558.  If No.Input=False Then
  1559.     Call Send.Mess(5,False,False,Out2)
  1560.  Endif
  1561. 10421
  1562.  Exit Sub
  1563. 10422
  1564.  Resume 10421
  1565. End Sub
  1566.  
  1567. Sub Discard(Var1,Var2)
  1568.  On Local Error Goto 10432
  1569.  TempA=Treasure(Var1)
  1570.  TempB=Treasure.Charges(Var1)
  1571.  Get 8,Abs(TempA),TreasureRecord
  1572.  Weight=Weight-TreasureRecord.Weight
  1573.  If Weight<False Then
  1574.     Weight=False
  1575.  Endif
  1576.  For TempC=Var1 To Number.Inventory-1
  1577.     Treasure(TempC)=Treasure(TempC+1)
  1578.     Treasure.Charges(TempC)=Treasure.Charges(TempC+1)
  1579.  Next
  1580.  Treasure(Number.Inventory)=False
  1581.  Treasure.Charges(Number.Inventory)=False
  1582.  Number.Inventory=Number.Inventory-1
  1583.  If Number.Inventory=<False Then
  1584.     Number.Inventory=False
  1585.     Weight=False
  1586.  Endif
  1587.  If Var1=Weapon6 Then
  1588.     Weapon2=False
  1589.     Weapon6=False
  1590.     Weapon10=False
  1591.  Endif
  1592.  If Var1=Weapon5 Then
  1593.     Weapon3=False
  1594.     Weapon5=False
  1595.  Endif
  1596.  If Var1=Weapon4 Then
  1597.     Weapon1=False
  1598.     Weapon4=False
  1599.  Endif
  1600.  If Var1=Weapon7 Then
  1601.     Weapon7=False
  1602.     Weapon8=False
  1603.     Weapon9=False
  1604.  Endif
  1605.  If Var1<Weapon6 Then
  1606.     Weapon6=Weapon6-1
  1607.  Endif
  1608.  If Var1<Weapon5 Then
  1609.     Weapon5=Weapon5-1
  1610.  Endif
  1611.  If Var1<Weapon4 Then
  1612.     Weapon4=Weapon4-1
  1613.  Endif
  1614.  If Var1<Weapon7 Then
  1615.     Weapon7=Weapon7-1
  1616.  Endif
  1617.  If Var2=False Then
  1618.     Get 5,Room,RoomRecord
  1619.     For TempC=1 To 10
  1620.        If RoomRecord.Treasure(TempC)=False Then
  1621.           RoomRecord.Treasure(TempC)=TempA
  1622.           RoomRecord.TreCharges(TempC)=TempB
  1623.           RoomRecord.Flags(TempC)=False
  1624.           Put 5,Room,RoomRecord
  1625.           Exit For
  1626.        Endif
  1627.     Next
  1628.  Endif
  1629. 10431
  1630.  Exit Sub
  1631. 10432
  1632.  Resume 10431
  1633. End Sub
  1634.  
  1635. Sub Clean.Room
  1636.  On Local Error Goto 10442
  1637.  If Config2(58)=False Then
  1638.     If Room>False And Room<=Lof(5)/Len(RoomRecord) Then
  1639.        Get 5,Room,RoomRecord
  1640.        For Temp5=1 To 10
  1641.           Temp2=RoomRecord.Treasure(Temp5)
  1642.           If Temp2>False And Temp2<=Lof(8)/Len(TreasureRecord) Then
  1643.              Get 8,Temp2,TreasureRecord
  1644.              If TreasureRecord.Invisible=False Then
  1645.                 If RoomRecord.Flags(Temp5)=False Then
  1646.                    RoomRecord.Treasure(Temp5)=False
  1647.                    RoomRecord.TreCharges(Temp5)=False
  1648.                 Endif
  1649.              Endif
  1650.           Endif
  1651.        Next
  1652.        Put 5,Room,RoomRecord
  1653.     Endif
  1654.  Endif
  1655. 10441
  1656.  Exit Sub
  1657. 10442
  1658.  Resume 10441
  1659. End Sub
  1660.  
  1661. Sub User.List
  1662.  On Local Error Goto 10452
  1663.  Put 3,User.Index,UserRecord
  1664.  Strng="(hit <control-k> to interrupt).."
  1665.  Call IO.O
  1666.  Graphics.Off=True
  1667.  Strng="DNDBBS V"+Version$+" User List For "+Left$(FNclock$,13)+"."
  1668.  Call IO.O
  1669.  Strng=Nul
  1670.  Call IO.O
  1671.  Strng="Number User Name                      Class Name"
  1672.  Strng=Strng+"           Race     Level"
  1673.  Call IO.O
  1674.  Strng=String$(73,"-")
  1675.  Call IO.O
  1676.  Temp5=3
  1677.  Allow.Break=True
  1678.  For Temp.User.Index=1 To Lof(3)/Len(UserRecord)
  1679.     Get 3,Temp.User.Index,UserRecord
  1680.     Strng=UserRecord.CodeName
  1681.     Call Decrypt(Strng)
  1682.     If Left$(Strng,9)<>Deleted$ Then
  1683.        Temp9=False
  1684.        If UserRecord.Flags And Locked.User Then
  1685.           If Normal.User Then
  1686.              Temp9=True
  1687.           Endif
  1688.        Endif
  1689.        If Temp9=False Then
  1690.           Strng=Mid$(Str$(Temp.User.Index),2)+"."
  1691.           Strng=Strng+Space$(7-Len(Strng))
  1692.           Out2=UserRecord.CodeName
  1693.           Call Decrypt(Out2)
  1694.           Strng=Strng+Out2+" "
  1695.           Out2=UserRecord.ClassName
  1696.           Call Decrypt(Out2)
  1697.           Strng=Strng+Out2+" "
  1698.           If UserRecord.Race<1 Then
  1699.              UserRecord.Race=1
  1700.           Endif
  1701.           Out2=Race(UserRecord.Race)
  1702.           Out2=Rtrim$(Out2)
  1703.           Out2=Out2+Space$(8-Len(Out2))
  1704.           Strng=Strng+Out2
  1705.           If UserRecord.Level<=False Then
  1706.              Out2=" -dead-"
  1707.           Else
  1708.              Out2=Str$(UserRecord.Level)
  1709.           Endif
  1710.           Out2=Out2+Space$(7-Len(Out2))
  1711.           If UserRecord.Flags And Locked.User Then
  1712.              Out2=Out2+Mask$
  1713.           Endif
  1714.           If UserRecord.ClassType>8 Then
  1715.              Out2=Out2+"*"
  1716.           Endif
  1717.           Strng=Strng+Out2
  1718.           Call IO.O
  1719.           If Break Then
  1720.              Exit For
  1721.           Endif
  1722.           Temp5=Temp5+1
  1723.           If Temp5=21 Then
  1724.              Temp5=False
  1725.              Call More.Prompt
  1726.              If No Then
  1727.                 Exit For
  1728.              Endif
  1729.           Endif
  1730.        Endif
  1731.     Endif
  1732.  Next
  1733.  Get 3,User.Index,UserRecord
  1734. 10451
  1735.  Allow.Break=False
  1736.  If Temp5>False Then
  1737.     Call More.Prompt
  1738.  Endif
  1739.  Exit Sub
  1740. 10452
  1741.  Resume 10451
  1742. End Sub
  1743.  
  1744. Sub Get.User.Record
  1745.  On Local Error Goto 10462
  1746.  Get 3,User.Index,UserRecord
  1747.  Number.Inventory=False
  1748.  Temp1=False
  1749.  For Temp=1 To 15
  1750.     Temp1=Temp1+1
  1751.     Treasure(Temp1)=Abs(UserRecord.Inv(Temp))
  1752.     Treasure.Charges(Temp1)=UserRecord.Charges(Temp)
  1753.  Next
  1754.  For Temp=1 To 5
  1755.     If Normal.User Or UserRecord.Object(Temp)<False Then
  1756.        UserRecord.Object(Temp)=False
  1757.        UserRecord.ObjCharges(Temp)=False
  1758.     Endif
  1759.  Next
  1760.  Weight=False
  1761.  For Temp2=1 To 15
  1762.     Temp3=Treasure(Temp2)
  1763.     If Temp3=False Then
  1764.        Exit For
  1765.     Endif
  1766.     Number.Inventory=Number.Inventory+1
  1767.     Get 8,Temp3,TreasureRecord
  1768.     Weight=Weight+TreasureRecord.Weight
  1769.  Next
  1770.  Call Get.User.Stats(Temp)
  1771.  If Normal.User Then
  1772.     For Temp=1 To 5
  1773.        UserRecord.Object(Temp)=False
  1774.        UserRecord.ObjCharges(Temp)=False
  1775.     Next
  1776.  Endif
  1777.  Room=UserRecord.Room
  1778.  Hidden.Player=Config2(13)
  1779.  If UserRecord.Brief Then
  1780.     Action.Prompt=Config3(8)
  1781.  Else
  1782.     Action.Prompt=Config3(7)
  1783.  Endif
  1784.  If UserRecord.Level<Config2(12) Then
  1785.     UserRecord.Brief=False
  1786.     Action.Prompt=Config3(7)
  1787.  Endif
  1788. 10461
  1789.  Exit Sub
  1790. 10462
  1791.  Resume 10461
  1792. End Sub
  1793.  
  1794. Sub Get.User.Stats(Var)
  1795.  On Local Error Goto 10472
  1796.  Var=True
  1797.  Town.Mayor=False
  1798.  If UserRecord.Flags And Special.Char1 Then
  1799.     Town.Mayor=True
  1800.  Endif
  1801.  Governor=False
  1802.  If UserRecord.Flags And Special.Char2 Then
  1803.     Governor=True
  1804.  Endif
  1805.  Guild.Master=False
  1806.  If UserRecord.Flags And Special.Char3 Then
  1807.     Guild.Master=True
  1808.  Endif
  1809.  Dungeon.Master.Assistant=False
  1810.  If UserRecord.ClassType=9 Or UserRecord.Level>999 Then
  1811.     Dungeon.Master.Assistant=True
  1812.  Endif
  1813.  Dungeon.Master=False
  1814.  If UserRecord.ClassType=10 Or UserRecord.Level>9999 Then
  1815.     Dungeon.Master=True
  1816.  Endif
  1817.  Normal.User=True
  1818.  Sysop=False
  1819.  If UserRecord.Flags And Special.Char4 Then
  1820.     Dungeon.Master=True
  1821.     Sysop=True
  1822.  Endif
  1823.  If Dungeon.Master Or Dungeon.Master.Assistant Or Sysop Then
  1824.     Normal.User=False
  1825.  Endif
  1826.  If Disable.DM Then
  1827.     If Normal.User=False Or Town.Mayor Or Governor Or Guild.Master Then
  1828.        Var=False
  1829.     Endif
  1830.  Endif
  1831. 10471
  1832.  Exit Sub
  1833. 10472
  1834.  Resume 10471
  1835. End Sub
  1836.  
  1837. Sub Put.User.Record
  1838.  On Local Error Goto 10482
  1839.  Call Bank.Interest
  1840.  Temp1=False
  1841.  For Temp7=1 To 15
  1842.     UserRecord.Inv(Temp7)=False
  1843.     UserRecord.Charges(Temp7)=False
  1844.  Next
  1845.  For Temp7=1 To Number.Inventory
  1846.     If Temp1=15 Then
  1847.        Exit For
  1848.     Endif
  1849.     If Treasure(Temp7)>False Then
  1850.        Temp1=Temp1+1
  1851.        UserRecord.Inv(Temp1)=Treasure(Temp7)
  1852.        UserRecord.Charges(Temp1)=Treasure.Charges(Temp7)
  1853.     Endif
  1854.  Next
  1855.  If Normal.User Then
  1856.     For Temp=1 To 5
  1857.        UserRecord.Object(Temp)=False
  1858.        UserRecord.ObjCharges(Temp)=False
  1859.     Next
  1860.  Endif
  1861.  UserRecord.Room=Room
  1862.  Put 3,User.Index,UserRecord
  1863. 10481
  1864.  Exit Sub
  1865. 10482
  1866.  Resume 10481
  1867. End Sub
  1868.  
  1869. Sub Health.Update
  1870.  On Local Error Goto 10492
  1871.  Graphics.Off=False
  1872.  Room.Rate=Room.Rate+1
  1873.  If Room.Rate<Room.Health.Rate Then
  1874.     Exit Sub
  1875.  Endif
  1876.  Room.Rate=False
  1877.  If Intoxicated>False Then
  1878.     Intoxicated=Intoxicated-1
  1879.     If Intoxicated<=False Then
  1880.        Intoxicated=False
  1881.        Strng="Your drunk is over.."
  1882.     Else    
  1883.        UserRecord.Fatigue=UserRecord.Fatigue-Config2(21)
  1884.        If UserRecord.Fatigue<=False Then
  1885.           UserRecord.Fatigue=False
  1886.           Intoxicated=False
  1887.           Strng="Your drunk is over.."
  1888.        Else
  1889.           Strng="You feel drunk!"
  1890.        Endif
  1891.     Endif
  1892.     Call IO.O
  1893.  Endif
  1894.  UserRecord.Fatigue=UserRecord.Fatigue+Config2(21)
  1895.  UserRecord.Magic=UserRecord.Magic+Config2(23)
  1896.  UserRecord.Psionic=UserRecord.Psionic+Config2(82)
  1897.  If UserRecord.Poison=False Then
  1898.     UserRecord.Vitality=UserRecord.Vitality+Config2(22)
  1899.  Endif
  1900.  Call New.Stats
  1901.  If Invisible>False Then
  1902.     Invisible=Invisible-1
  1903.     If Invisible<=False Then
  1904.        UserRecord.Invisible=False
  1905.        Invisible=False
  1906.        Strng="You are no longer invisible!"
  1907.        Call IO.O
  1908.     Endif
  1909.  Endif
  1910.  If UserRecord.Poison Then
  1911.     Message1="You finally died from your poisonous wounds!"
  1912.     UserRecord.Vitality=UserRecord.Vitality-Config2(24)
  1913.     Strng="You feel poison running through your veins!"
  1914.     Call IO.O
  1915.     If UserRecord.Vitality<=False Then
  1916.        UserRecord.Vitality=False
  1917.        Strng="died from poisonous wounds"
  1918.        Call Update.DayFile(Strng,False)
  1919.        Call User.Died
  1920.     Endif
  1921.  Endif
  1922. 10491
  1923.  Exit Sub
  1924. 10492
  1925.  Resume 10491
  1926. End Sub
  1927.  
  1928. Sub Search.Room
  1929.  On Local Error Goto 10502
  1930.  Strng="You search the room.."
  1931.  Call IO.O
  1932.  Graphics.Off=True
  1933.  Strng="You find "
  1934.  Carriage.Return=True
  1935.  Call IO.O
  1936.  Temp9=False
  1937.  If Node>False Then
  1938.     Call Search.Mess(True)
  1939.     Strng=Nul
  1940.     For Temp5=1 To 36
  1941.        Temp6=False
  1942.        If Temp5<>(Noden+1) Then
  1943.           If Node.Work.Array1(Temp5)<>Nul Then
  1944.              Get 1,Temp5,MessWorkRecord1
  1945.              If MessWorkRecord1.Invisible Then
  1946.                 If Rnd<Config1(11) Then
  1947.                    Temp6=True
  1948.                 Endif
  1949.              Endif
  1950.           Endif
  1951.        Endif
  1952.        If Temp6 Then
  1953.           Carriage.Return=True
  1954.           Call IO.O
  1955.           Strng=Node.Work.Array1(Temp5)+", "
  1956.           Temp9=Temp9+1
  1957.        Endif
  1958.     Next
  1959.  Endif
  1960.  For Temp5=1 To 10
  1961.     Temp4=RoomRecord.Object(Temp5)
  1962.     If Temp4>False And Temp4<=Lof(6)/Len(ObjectRecord) Then
  1963.        Get 6,Temp4,ObjectRecord
  1964.        Temp6=False
  1965.        If ObjectRecord.Invisible Then
  1966.           If Rnd<Config1(11) Then
  1967.              Temp6=True
  1968.           Endif
  1969.        Endif
  1970.        If ObjectRecord.Hidden Then
  1971.           If Normal.User Then
  1972.              Temp6=False
  1973.           Endif
  1974.        Endif
  1975.        If Temp6 Then
  1976.           Carriage.Return=True
  1977.           Call IO.O
  1978.           Strng=Rtrim$(ObjectRecord.ObjectName)+", "
  1979.           Temp9=Temp9+1
  1980.        Endif
  1981.     Endif
  1982.  Next
  1983.  For Temp5=1 To 10
  1984.     Temp4=RoomRecord.Treasure(Temp5)
  1985.     If Temp4>False And Temp4<=Lof(8)/Len(TreasureRecord) Then
  1986.        Get 8,Temp4,TreasureRecord
  1987.        Temp6=False
  1988.        If TreasureRecord.Invisible Then
  1989.           If Rnd<Config1(11) Then
  1990.              Temp6=True
  1991.           Endif
  1992.        Endif
  1993.        If RoomRecord.Flags(Temp5)=Hidden.Object Then
  1994.           If Rnd<Config1(11) Then
  1995.              Temp6=True
  1996.           Endif
  1997.        Endif
  1998.        If Temp6 Then
  1999.           Carriage.Return=True
  2000.           Call IO.O
  2001.           Strng=Rtrim$(TreasureRecord.TreasureName)+", "
  2002.           Temp9=Temp9+1
  2003.        Endif
  2004.     Endif
  2005.  Next
  2006.  If Temp9=False Then
  2007.     Strng="nothing.."
  2008.     Call IO.O
  2009.     Exit Sub
  2010.  Endif
  2011.  Strng=Left$(Strng,Len(Strng)-2)+"."
  2012.  If Temp9>1 Then
  2013.     Strng="and "+Strng
  2014.  Endif
  2015.  Call IO.O
  2016. 10501
  2017.  Exit Sub
  2018. 10502
  2019.  Resume 10501
  2020. End Sub
  2021.  
  2022. Sub Get.Direction
  2023.  On Local Error Goto 10512
  2024.  For TempA=1 To 11
  2025.     Out3=Direction(TempA)
  2026.     Out3=Rtrim$(Out3)
  2027.     Out3=Ucase$(Out3)
  2028.     If User.Command=Out3 Then
  2029.        Exit Sub
  2030.     Endif
  2031.  Next
  2032.  Select Case User.Command
  2033.  Case "N"
  2034.     TempA=1
  2035.  Case "E"
  2036.     TempA=2
  2037.  Case "S"
  2038.     TempA=3
  2039.  Case "W"
  2040.     TempA=4
  2041.  Case "O"
  2042.     TempA=5
  2043.  Case "U"
  2044.     TempA=6
  2045.  Case "D"
  2046.     TempA=7
  2047.  Case "NE"
  2048.     TempA=8
  2049.  Case "SE"
  2050.     TempA=9
  2051.  Case "SW"
  2052.     TempA=10
  2053.  Case "NW"
  2054.     TempA=11
  2055.  Case Else
  2056.     TempA=False
  2057.  End Select
  2058. 10511
  2059.  Exit Sub
  2060. 10512
  2061.  Resume 10511
  2062. End Sub
  2063.  
  2064. Sub Go.Direction
  2065.  On Local Error Goto 10522
  2066.  Last.Command=Ucase$(Direction(TempA))
  2067.  Last.Command.Number=True
  2068.  Call Update.Mess(4)
  2069.  Call Verify.Room
  2070.  If New.Room Then
  2071.     Call Enter.Room
  2072.  Endif
  2073. 10521
  2074.  Exit Sub
  2075. 10522
  2076.  Resume 10521
  2077. End Sub
  2078.  
  2079. Sub Actions
  2080.  On Local Error Goto 10532
  2081.  Graphics.Off=False
  2082.  Out2=Nul
  2083.  Select Case RoomRecord.Inventory
  2084.  Case 1
  2085.     Temp4=False
  2086.     Weapon2=False
  2087.     Weapon6=False
  2088.     Weapon10=False
  2089.     For Temp2=1 To Number.Inventory
  2090.        Temp1=Treasure(Temp2)
  2091.        If Temp1 Then
  2092.           Get 8,Temp1,TreasureRecord
  2093.           If TreasureRecord.Plus Then
  2094.              If TreasureRecord.Type=False Then
  2095.                 If Treasure.Charges(Temp2) Then
  2096.                    Treasure.Charges(Temp2)=False
  2097.                    Temp4=True
  2098.                 Endif
  2099.              Endif
  2100.           Endif
  2101.        Endif
  2102.     Next
  2103.     If Temp4 Then
  2104.        Strng=Out3
  2105.        Call IO.O
  2106.        Strng="All your weapons break!"
  2107.        Call IO.O
  2108.     Endif
  2109.  Case 2
  2110.     Temp4=False
  2111.     Weapon3=False
  2112.     Weapon5=False
  2113.     For Temp2=1 To Number.Inventory
  2114.        Temp1=Treasure(Temp2)
  2115.        If Temp1 Then
  2116.           Get 8,Temp1,TreasureRecord
  2117.           If TreasureRecord.Type<False Then
  2118.              If Treasure.Charges(Temp2) Then
  2119.                 Treasure.Charges(Temp2)=False
  2120.                 Temp4=True
  2121.              Endif
  2122.           Endif
  2123.        Endif
  2124.     Next
  2125.     If Temp4 Then
  2126.        Strng=Out3
  2127.        Call IO.O
  2128.        Strng="All your shields break in half!"
  2129.        Call IO.O
  2130.     Endif
  2131.  Case 3
  2132.     Temp4=False
  2133.     Weapon1=False
  2134.     Weapon4=False
  2135.     For Temp2=1 To Number.Inventory
  2136.        Temp1=Treasure(Temp2)
  2137.        If Temp1 Then
  2138.           Get 8,Temp1,TreasureRecord
  2139.           If TreasureRecord.Type>False Then
  2140.              If Treasure.Charges(Temp2) Then
  2141.                 Treasure.Charges(Temp2)=False
  2142.                 Temp4=True
  2143.              Endif
  2144.           Endif
  2145.        Endif
  2146.     Next
  2147.     If Temp4 Then
  2148.        Strng=Out3
  2149.        Call IO.O
  2150.        Strng="All your armor crumbles!"
  2151.        Call IO.O
  2152.     Endif
  2153.  Case 4
  2154.     Temp4=False
  2155.     Weapon7=False
  2156.     Weapon8=False
  2157.     For Temp2=1 To Number.Inventory
  2158.        Temp1=Treasure(Temp2)
  2159.        If Temp1 Then
  2160.           Get 8,Temp1,TreasureRecord
  2161.           If TreasureRecord.Spell Then
  2162.              If Treasure.Charges(Temp2) Then
  2163.                 Treasure.Charges(Temp2)=False
  2164.                 Temp4=True
  2165.              Endif
  2166.           Endif
  2167.        Endif
  2168.     Next
  2169.     If Temp4 Then
  2170.        Strng=Out3
  2171.        Call IO.O
  2172.        Strng="All your magic items discharge!"
  2173.        Call IO.O
  2174.     Endif
  2175.  End Select
  2176.  If RoomRecord.Fumble Then
  2177.     Call Fumble
  2178.  Endif
  2179.  If RoomRecord.Teleport Then
  2180.     Strng=Out3
  2181.     Call IO.O
  2182.     Strng="You are teleported elsewhere!"
  2183.     Call IO.O
  2184.     Next.Room=RoomRecord.Teleport
  2185.     Call Teleport
  2186.     Call Enter.Room
  2187.  Endif
  2188.  Temp2=RoomRecord.HitPoints
  2189.  If Temp2 Then
  2190.     Strng=Out3
  2191.     Call IO.O
  2192.     Strng=Out4
  2193.     Prefix2=Nul
  2194.     Out3="entering a room"
  2195.     Call Hit.Player(Temp2)
  2196.  Endif
  2197. 10531
  2198.  Exit Sub
  2199. 10532
  2200.  Resume 10531
  2201. End Sub
  2202.  
  2203. Sub Teleport
  2204.  On Local Error Goto 10542
  2205.  Out2=UserRecord.CodeName
  2206.  Call Decrypt(Out2)
  2207.  Out2=Lcase$(Out2)
  2208.  Out2=Rtrim$(Out2)
  2209.  Out2=Out2+" was just teleported away!"
  2210.  Call Send.Mess(8,False,Room,Out2)
  2211.  Teleported=True
  2212. 10541
  2213.  Exit Sub
  2214. 10542
  2215.  Resume 10541
  2216. End Sub
  2217.  
  2218. Sub Verify.Room
  2219.  On Local Error Goto 10552
  2220.  New.Room=False
  2221.  If UserRecord.ClassType<8 Then
  2222.     For Temp5=1 To Number.Monsters
  2223.        If MonsterArray(Temp5).Block Then
  2224.           If Rnd<(MonsterArray(Temp5).BlockPercent/100) Then
  2225.              Out2=MonsterArray(Temp5).MonsterName
  2226.              Out2=Rtrim$(Out2)
  2227.              Strng="The "+Out2+" blocks your way!"
  2228.              Call IO.O
  2229.              Exit Sub
  2230.           Endif
  2231.        Endif
  2232.     Next
  2233.  Endif
  2234.  Next.Room=RoomRecord.Direct(TempA)
  2235.  If Next.Room=False Then
  2236.     If Normal.User=False Then
  2237.        Call Add.Room
  2238.        If Temp=False Then
  2239.           Exit Sub
  2240.        Endif
  2241.        New.Room=True
  2242.     Else
  2243.        Strng="You can't go in that direction!"
  2244.        Call IO.O
  2245.        Exit Sub
  2246.     Endif
  2247.  Else
  2248.     Call Restrict(TempA)
  2249.     If TempB Then
  2250.        Strng="Your level does not permit entrance to that room!"
  2251.        Call IO.O
  2252.        Exit Sub
  2253.     Endif
  2254.  Endif
  2255.  Out2=UserRecord.CodeName
  2256.  Call Decrypt(Out2)
  2257.  Out2=Lcase$(Out2)
  2258.  Out2=Rtrim$(Out2)
  2259.  Out2=Out2+" just went "
  2260.  Strng=Rtrim$(Direction(TempA))
  2261.  Strng=Rtrim$(Strng)
  2262.  Out2=Out2+Strng+"."
  2263.  Call Send.Mess(8,False,Room,Out2)
  2264.  New.Room=True
  2265. 10551
  2266.  Exit Sub
  2267. 10552
  2268.  Resume 10551
  2269. End Sub
  2270.  
  2271. Sub Enter.Room
  2272.  On Local Error Goto 10562
  2273.  New.Room=True
  2274.  Call Clean.Room
  2275.  If Next.Room>False And Next.Room<=Lof(5)/Len(RoomRecord) Then
  2276.     Swap Room,Next.Room
  2277.  Endif
  2278.  Call Status.Line(False)
  2279.  Redim Room.Inventory(1 To 20) As Integer,_
  2280.        Room.Inventory.Charges(1 To 20) As Integer
  2281.  Number.Users=False
  2282.  Room.Treasure.Max=20
  2283.  Rust.Rate=False
  2284.  Steal.Rate=False
  2285.  Monster.Rate1=False
  2286.  Room.Rate=False
  2287.  Get 5,Room,RoomRecord
  2288.  If RoomRecord.SpellTrigger=False Then
  2289.     If RoomRecord.MonsterTrigger=False Then
  2290.        If RoomRecord.MonsterTalk=False Then
  2291.           Out3="As you enter the room,"
  2292.           Out4="You are hit for"
  2293.           Call Actions
  2294.        Endif
  2295.     Endif
  2296.  Endif
  2297.  Select Case Last.Command.Number
  2298.  Case 48,73,74
  2299.     If Vehicle1 Then
  2300.        TempA=False
  2301.        For Temp2=1 To 10
  2302.           If RoomRecord.Treasure(Temp2)=False Then
  2303.              TempA=True
  2304.              Get 5,Next.Room,RoomRecord
  2305.              RoomRecord.Treasure(Vehicle1)=False
  2306.              RoomRecord.TreCharges(Vehicle1)=False
  2307.              Put 5,Next.Room,RoomRecord
  2308.              Vehicle1=Temp2
  2309.              Get 5,Room,RoomRecord
  2310.              RoomRecord.Treasure(Vehicle1)=Vehicle3
  2311.              RoomRecord.TreCharges(Vehicle1)=Vehicle2
  2312.              Put 5,Room,RoomRecord
  2313.              Exit For
  2314.           Endif
  2315.        Next
  2316.        If TempA=False Then
  2317.           Out3=TreasureRecord.ShortName
  2318.           Out3=Rtrim$(Out3)
  2319.           Out3=Lcase$(Out3)
  2320.           Strng="The "+Out3+" stays behind!"
  2321.           Call IO.O
  2322.        Endif
  2323.     Endif
  2324.  Case Else
  2325.     If Vehicle1 Then
  2326.        Out3=TreasureRecord.ShortName
  2327.        Out3=Rtrim$(Out3)
  2328.        Out3=Lcase$(Out3)
  2329.        Strng="You exit the "+Out3+"."
  2330.        Call IO.O
  2331.        Vehicle1=False
  2332.        Vehicle2=False
  2333.        Vehicle3=False
  2334.     Endif
  2335.  End Select
  2336.  For Temp5=1 To Number.Monsters
  2337.     If MonsterArray(Temp5).Permanent=True Then
  2338.        Temp2=MonsterIndex(Temp5)
  2339.        Get 7,Temp2,MonsterRecord
  2340.        MonsterRecord.Level=MonsterArray(Temp5).Level
  2341.        MonsterRecord.Hits=MonsterArray(Temp5).Hits
  2342.        Put 7,Temp2,MonsterRecord
  2343.     Endif
  2344.  Next
  2345.  Call In.Room(13)
  2346.  If UserRecord.ClassType<=7 Then
  2347.     Number.Monsters=False
  2348.  Endif
  2349.  If TempA Then
  2350.     Number.Monsters=False
  2351.  Endif
  2352.  If Teleported Then
  2353.     Out3=" teleports with you!"
  2354.  Else
  2355.     Out3=" follows you!"
  2356.  Endif
  2357.  Teleported=False
  2358.  Temp2=False
  2359.  For Temp5=1 To Number.Monsters
  2360.     TempA=False
  2361.     If MonsterArray(Temp5).Follow Then
  2362.        If Temp Then
  2363.           If Rnd<(MonsterArray(Temp5).Teleport/100) Then
  2364.              TempA=True
  2365.           Endif
  2366.        Else
  2367.        If Rnd<(MonsterArray(Temp5).FollowPercent/100) Then
  2368.              TempA=True
  2369.           Endif
  2370.        Endif
  2371.        If TempA Then
  2372.           If MonsterArray(Temp5).Permanent=False Then
  2373.              Temp2=Temp2+1
  2374.              MonsterArray(Temp2)=MonsterArray(Temp5)
  2375.              MonsterIndex(Temp2)=MonsterIndex(Temp5)
  2376.              Out2=MonsterArray(Temp2).MonsterName
  2377.              Out2=Rtrim$(Out2)
  2378.              Strng="The "+Out2+Out3
  2379.              Call IO.O
  2380.           Endif
  2381.        Endif
  2382.     Endif
  2383.  Next
  2384.  Number.Monsters=Temp2
  2385. 10561
  2386.  Exit Sub
  2387. 10562
  2388.  Resume 10561
  2389. End Sub
  2390.  
  2391. Sub Invisibility
  2392.  On Local Error Goto 10572
  2393.  UserRecord.Invisible=Not UserRecord.Invisible
  2394.  Strng="You are no longer invisible!"
  2395.  If UserRecord.Invisible Then
  2396.     Strng="You are invisible!"
  2397.  Endif
  2398.  Call IO.O
  2399. 10571
  2400.  Exit Sub
  2401. 10572
  2402.  Resume 10571
  2403. End Sub
  2404.  
  2405. Sub Brief.Mode
  2406.  On Local Error Goto 10582
  2407.  If UserRecord.Level<Config2(12) Then
  2408.     Strng="Brief mode not allowed until level"+Str$(Config2(12))+"."
  2409.     Call IO.O
  2410.     Exit Sub
  2411.  Endif
  2412.  If UserRecord.Brief=False Then
  2413.     UserRecord.Brief=True
  2414.     Action.Prompt=Config3(8)
  2415.     Strng="Brief mode on."
  2416.  Else
  2417.     UserRecord.Brief=False
  2418.     Action.Prompt=Config3(7)
  2419.     Strng="Brief mode off."
  2420.  Endif
  2421.  Call IO.O
  2422. 10581
  2423.  Exit Sub
  2424. 10582
  2425.  Resume 10581
  2426. End Sub
  2427.  
  2428. Sub Weapons.Shop
  2429.  On Local Error Goto 10592
  2430.  If Config2(50)=False Then
  2431.     Call In.Room(11)
  2432.     If TempA=False Then
  2433.        Strng="Find the weapons shoppe."
  2434.        Call IO.O
  2435.        Exit Sub
  2436.     Endif
  2437.  Endif
  2438.  Call Check.Inventory.Treasure
  2439.  If Temp7=False Then
  2440.     Strng="The Blacksmith says: You can't repair that!"
  2441.     Call IO.O
  2442.     Exit Sub
  2443.  Endif
  2444.  If Treasure.Charges(Temp5)>False Then
  2445.     Strng="The Blacksmith says: That isn't broken!"
  2446.     Call IO.O
  2447.     Exit Sub
  2448.  Endif
  2449.  If TreasureRecord.Spell Then
  2450.     Strng="The Blacksmith says: Cant fix that here!"
  2451.     Call IO.O
  2452.     Exit Sub
  2453.  Endif
  2454.  Temp!=Int(TreasureRecord.Gold*Config1(17))
  2455.  If Temp!>UserRecord.Gold Then
  2456.     Strng="The Blacksmith says: You don't have enough gold!"
  2457.     Call IO.O
  2458.     Exit Sub
  2459.  Endif
  2460.  Strng="The Blacksmith asks: How about"+Str$(Temp!)+" gold?"
  2461.  No.Input.Out="Y"
  2462.  Call IO.I
  2463.  If Yes Then
  2464.     UserRecord.Gold=UserRecord.Gold-Temp!
  2465.     Treasure.Charges(Temp5)=TreasureRecord.Charges
  2466.     Strng="The Blacksmith says: There, it's repaired."
  2467.     Call IO.O
  2468.     Exit Sub
  2469.  Endif
  2470.  Strng="The Blacksmith says: Later then!"
  2471.  Call IO.O
  2472. 10591
  2473.  Exit Sub
  2474. 10592
  2475.  Resume 10591
  2476. End Sub
  2477.  
  2478. Sub Alchemist
  2479.  On Local Error Goto 10602
  2480.  If Config2(50)=False Then
  2481.     Call In.Room(15)
  2482.     If TempA=False Then
  2483.        Strng="Find the mages guild."
  2484.        Call IO.O
  2485.        Exit Sub
  2486.     Endif
  2487.  Endif
  2488.  Call Check.Inventory.Treasure
  2489.  If Temp7=False Then
  2490.     Strng="The Alchemist says: That can't be recharged here!"
  2491.     Call IO.O
  2492.     Exit Sub
  2493.  Endif
  2494.  Temp1=TreasureRecord.Spell
  2495.  If Temp1<=False Or Temp1>Spells.Max Then
  2496.     Strng="The Alchemist says: You can't recharge that here!"
  2497.     Call IO.O
  2498.     Exit Sub
  2499.  Endif
  2500.  If Treasure.Charges(Temp5)>False Then
  2501.     Strng="The Alchemist says: That's not discharged!"
  2502.     Call IO.O
  2503.     Exit Sub
  2504.  Endif
  2505.  SpellRecord=SpellArray(Temp1)
  2506.  If SpellRecord.SpellType=4 Then
  2507.     Strng="The Alchemist says: I won't recharge that item!"
  2508.     Call IO.O
  2509.     Exit Sub
  2510.  Endif
  2511.  Temp!=Int(TreasureRecord.Gold*Config1(18))
  2512.  If Temp!>UserRecord.Gold Then
  2513.     Strng="The Alchemist says: You don't have enough gold!"
  2514.     Call IO.O
  2515.     Exit Sub
  2516.  Endif
  2517.  Strng="The Alchemist says: How about"+Str$(Temp!)+" gold?"
  2518.  No.Input.Out="y"
  2519.  Call IO.I
  2520.  If Yes Then
  2521.     UserRecord.Gold=UserRecord.Gold-Temp!
  2522.     Treasure.Charges(Temp5)=TreasureRecord.Charges
  2523.     Strng="The Alchemist chants an invocation."
  2524.     Call IO.O
  2525.     Exit Sub
  2526.  Endif
  2527.  Strng="The Alchemist says: Too bad!"
  2528.  Call IO.O
  2529. 10601
  2530.  Exit Sub
  2531. 10602
  2532.  Resume 10601
  2533. End Sub
  2534.  
  2535. Sub Pawn.Shop
  2536.  On Local Error Goto 10612
  2537.  If Config2(50)=False Then
  2538.     Call In.Room(16)
  2539.     If TempA=False Then
  2540.        Strng="Find the pawn shoppe."
  2541.        Call IO.O
  2542.        Exit Sub
  2543.     Endif
  2544.  Endif
  2545.  Temp9=False
  2546.  Call Check.Inventory.Treasure
  2547.  If Temp7=False Then
  2548.     Strng="The Broker says: You can't sell that!"
  2549.     Call IO.O
  2550.     Exit Sub
  2551.  Endif
  2552.  If TreasureRecord.Recep Then
  2553.     Temp!=False
  2554.     If TreasureRecord.Locked>False Then
  2555.        Strng="The Broker tries the lock and says: Arrghh!! Can't open it!"
  2556.        Call IO.O
  2557.        Exit Sub
  2558.     Endif
  2559.     Temp9=True
  2560.     Call Open.Recep.File
  2561.     For Temp5=1 To Lof(13)/Len(RecepRec)
  2562.        Get 13,Temp5,RecepRec
  2563.        If RecepRec.Invis=False Then
  2564.           Temp2=RecepRec.Inv
  2565.           If Temp2>False And Temp2<Lof(8)/Len(TreasureRecord) Then
  2566.              Get 8,Temp2,TreasureRecord
  2567.              If TreasureRecord.Recep=False Then
  2568.                 Temp!=Temp!+Int(TreasureRecord.Gold*Config1(19))
  2569.              Endif
  2570.           Endif
  2571.        Endif
  2572.     Next
  2573.     If Temp!=False Then
  2574.        Strng="The Broker says: There's nothin' in it!"
  2575.        Call IO.O
  2576.        Exit Sub
  2577.     Endif
  2578.     Out3="contents of the "+Out3
  2579.  Else
  2580.     Temp!=Int(TreasureRecord.Gold*Config1(19))
  2581.     If TreasureRecord.Plus Or TreasureRecord.Spell Then
  2582.        If Treasure.Charges(Temp5)=False Then
  2583.           Temp!=1
  2584.           Out3="broken "+Out3
  2585.        Endif
  2586.     Endif
  2587.  Endif
  2588.  Strng="The Broker says: Well, Ill give you"+Str$(Temp!)+_
  2589.  " gold for the "+Rtrim$(Lcase$(Out3))+"."
  2590.  Call IO.O
  2591.  Strng="The Broker asks: Good nuff?"
  2592.  No.Input.Out="y"
  2593.  Call IO.I
  2594.  If No Then
  2595.     Strng="The Broker says: Oh well!"
  2596.     Call IO.O
  2597.     Exit Sub
  2598.  Endif
  2599.  UserRecord.Gold=UserRecord.Gold+Temp!
  2600.  Strng="The Broker says: Great!"
  2601.  Call IO.O
  2602.  If Temp9 Then
  2603.     For Temp5=1 To Lof(13)/Len(RecepRec)
  2604.        Get 13,Temp5,RecepRec
  2605.        If RecepRec.Invis=False Then
  2606.           Temp2=RecepRec.Inv
  2607.           If Temp2>False And Temp2<=Lof(8)/Len(TreasureRecord) Then
  2608.              Get 8,Temp2,TreasureRecord
  2609.              If TreasureRecord.Recep=False Then
  2610.                 RecepRec.Inv=False
  2611.                 RecepRec.Charges=False
  2612.                 RecepRec.Invis=False
  2613.                 RecepRec.TName=Nul
  2614.                 Put 13,Temp5,RecepRec
  2615.              Endif
  2616.           Endif
  2617.        Endif
  2618.     Next
  2619.     Exit Sub
  2620.  Endif
  2621.  Call Discard(Temp5,True)
  2622. 10611
  2623.  Exit Sub
  2624. 10612
  2625.  Resume 10611
  2626. End Sub
  2627.  
  2628. Sub Weapons.Shoppe
  2629.  On Local Error Goto 10622
  2630.  If Config2(50)=False Then
  2631.     Call In.Room(11)
  2632.     If TempA=False Then
  2633.        Strng="Find the weapons shoppe."
  2634.        Call IO.O
  2635.        Exit Sub
  2636.     Endif
  2637.  Endif
  2638.  Temp2=Int(Val(Parsed.Command1))
  2639.  Temp5=False
  2640.  Temp8=False
  2641.  Var$=Config3(74)+","
  2642.  Do While Instr(Var$,",")
  2643.     Temp5=Temp5+1
  2644.     If Temp2=Temp5 Then
  2645.        Temp8=Val(Left$(Var$,Instr(Var$,",")-1))
  2646.        Exit Do
  2647.     Endif
  2648.     Var$=Mid$(Var$,Instr(Var$,",")+1)
  2649.  Loop
  2650.  If Temp8=False Then
  2651.     Strng="The Blacksmith says: You can't buy that!"
  2652.     Call IO.O
  2653.     Exit Sub
  2654.  Endif
  2655.  If Temp8<=False Or Temp8>Lof(8)/Len(TreasureRecord) Then
  2656.     Strng="The Blacksmith says: You can't buy that!"
  2657.     Call IO.O
  2658.     Exit Sub
  2659.  Endif
  2660.  Get 8,Temp8,TreasureRecord
  2661.  If UserRecord.Gold-TreasureRecord.Gold<False Then
  2662.     Strng="The Blacksmith says: You don't have enough gold!"
  2663.     Call IO.O
  2664.     Exit Sub
  2665.  Endif
  2666.  If Weight+TreasureRecord.Weight>UserRecord.Stats(1)*10 Then
  2667.     Strng="The Blacksmith says: You can't carry any more!"
  2668.     Call IO.O
  2669.     Exit Sub
  2670.  Endif
  2671.  Temp9=TreasureRecord.Charges
  2672.  Call Add.Inventory(Temp8,Temp9)
  2673.  UserRecord.Gold=UserRecord.Gold-TreasureRecord.Gold
  2674.  Strng="The Blacksmith says: Ok, there ya go!"
  2675.  Call IO.O
  2676. 10621
  2677.  Exit Sub
  2678. 10622
  2679.  Resume 10621
  2680. End Sub
  2681.  
  2682. Sub Cursor(Var)
  2683.  On Local Error Goto 10632
  2684.  Static Cursor.Position
  2685.  Select Case Var
  2686.  Case False
  2687.     Inregs.AX=&H0300
  2688.     Inregs.BX=Video.Page
  2689.     Call Interrupt(&H10,Inregs,Outregs)
  2690.     Cursor.Position=Outregs.DX
  2691.  Case True
  2692.     Inregs.AX=&H0200
  2693.     Inregs.BX=Video.Page
  2694.     Inregs.DX=Cursor.Position
  2695.     Call Interrupt(&H10,Inregs,Outregs)
  2696.  End Select
  2697. 10631
  2698.  Exit Sub
  2699. 10632
  2700.  Resume 10631
  2701. End Sub
  2702.  
  2703. Sub Scrn(Var$)
  2704.  On Local Error Goto 10642
  2705.  Inregs.AX=&H0300
  2706.  Inregs.BX=Video.Page
  2707.  Call Interrupt(&H10,Inregs,Outregs)
  2708.  Row=Outregs.DX\256
  2709.  Column=Outregs.DX And &HFF
  2710.  If Row>Max.Row Then
  2711.     Gosub Scroll.Screen
  2712.  Endif
  2713.  If Row=Max.Row Then
  2714.     If Var$=Chr$(13) Or Column=79 Then
  2715.        Gosub Scroll.Screen
  2716.     Endif
  2717.  Endif
  2718.  Call Put.Screen(Var$)
  2719.  Exit Sub
  2720.  
  2721. Scroll.Screen:
  2722.  Inregs.AX=&H0601
  2723.  Inregs.BX=&H0700
  2724.  Inregs.CX=&H0000
  2725.  Inregs.DX=Max.Row*256+&H4F
  2726.  Call Interrupt(&H10,Inregs,Outregs)
  2727.  Inregs.AX=&H0200
  2728.  Inregs.BX=Video.Page
  2729.  Inregs.DX=Max.Row*256
  2730.  Call Interrupt(&H10,Inregs,Outregs)
  2731.  Return
  2732. 10641
  2733.  Exit Sub
  2734. 10642
  2735.  Resume 10641
  2736. End Sub
  2737.  
  2738. Sub Local.ANSI(Var1,Var2,Var3)
  2739.  On Local Error Goto 10652
  2740.  If Local.Avatar Then
  2741.     Call Avatar(Var1,Var2,Var3)
  2742.  Else
  2743.     Call ANSI(Var1,Var2,Var3)
  2744.  Endif
  2745. 10651
  2746.  Exit Sub
  2747. 10652
  2748.  Resume 10651
  2749. End Sub
  2750.  
  2751. Sub Screen.ANSI(Var1,Var2,Var3)
  2752.  On Local Error Goto 10662
  2753.  Call Local.ANSI(Var1,Var2,Var3)
  2754.  If Local.Avatar=False Then
  2755.     Call Put.Screen(TempD$)
  2756.  Else
  2757.     For VarX=1 To Len(TempD$)
  2758.        Inregs.AX=&H0600
  2759.        Inregs.DX=Asc(Mid$(TempD$,VarX,1))
  2760.        Call Interrupt(&H21,Inregs,Outregs)
  2761.     Next
  2762.  Endif
  2763. 10661
  2764.  Exit Sub
  2765. 10662
  2766.  Resume 10661
  2767. End Sub
  2768.  
  2769. Sub Modem.ANSI(Var1,Var2,Var3)
  2770.  On Local Error Goto 10672
  2771.  If Color.Graphics Then
  2772.     If Extended.ANSI Then
  2773.        Call Avatar(Var1,Var2,Var3)
  2774.     Else
  2775.        Call ANSI(Var1,Var2,Var3)
  2776.     Endif
  2777.     Call Put.Modem(TempD$)
  2778.  Endif
  2779. 10671
  2780.  Exit Sub
  2781. 10672
  2782.  Resume 10671
  2783. End Sub
  2784.  
  2785. Sub ANSI(VarX,VarY,VarZ)
  2786.  On Local Error Goto 10682
  2787.  TempD$=Nul
  2788.  Select Case VarX
  2789.  Case 1
  2790.     TempD$=Chr$(27)+"[0;"+Mid$(Str$(VarY),2)+"m"
  2791.  Case 2
  2792.     TempD$=Chr$(27)+"["+Mid$(Str$(VarY),2)+";"+Mid$(Str$(VarZ),2)+"H"
  2793.  Case 3
  2794.     TempD$=Chr$(27)+"[2J"
  2795.  Case 4
  2796.     TempD$=Chr$(27)+"[1;"+Mid$(Str$(VarY),2)+"m"
  2797.  End Select
  2798. 10681
  2799.  Exit Sub
  2800. 10682
  2801.  Resume 10681
  2802. End Sub
  2803.  
  2804. Sub Avatar(VarX,VarY,VarZ)
  2805.  On Local Error Goto 10692
  2806.  TempD$=Nul
  2807.  Select Case VarX
  2808.  Case 1, 4
  2809.     If VarZ Then
  2810.        TempD$=Chr$(22)+Chr$(1)+Chr$(VarZ)
  2811.     Endif
  2812.  Case 2
  2813.     TempD$=Chr$(22)+Chr$(8)+Chr$(VarY)+Chr$(VarZ)
  2814.  Case 3
  2815.     TempD$=Chr$(27)+"[2J"
  2816.  End Select
  2817. 10691
  2818.  Exit Sub
  2819. 10692
  2820.  Resume 10691
  2821. End Sub
  2822.  
  2823. Sub Put.Screen(Var1$)
  2824.  On Local Error Goto 10694
  2825.  Var1$=Var1$+"$"
  2826.  InregsX.AX=&H0900
  2827.  InregsX.DS=Sseg(Var1$)
  2828.  InregsX.DX=Sadd(Var1$)
  2829.  Call InterruptX(&H21,InregsX,OutregsX)
  2830. 10693
  2831.  Exit Sub
  2832. 10694
  2833.  Resume 10693
  2834. End Sub
  2835.  
  2836. Sub In.Room(Var)
  2837.  On Local Error Goto 10702
  2838.  TempA=False
  2839.  Var1$=","+Room.Array(Var)+","
  2840.  Var2$=","+Mid$(Str$(Room),2)+","
  2841.  If Instr(Var1$,Var2$) Then
  2842.     TempA=True
  2843.  Endif
  2844. 10701
  2845.  Exit Sub
  2846. 10702
  2847.  Resume 10701
  2848. End Sub
  2849.  
  2850. Sub He.She
  2851.  On Local Error Goto 10712
  2852.  If UserArray(User.Temp).ClassType=8 Then
  2853.     Prefix1="She"
  2854.  Else
  2855.     Prefix1="He"
  2856.  Endif
  2857. 10711
  2858.  Exit Sub
  2859. 10712
  2860.  Resume 10711
  2861. End Sub
  2862.  
  2863. Sub Him.Her
  2864.  On Local Error Goto 10722
  2865.  If UserArray(User.Temp).ClassType=8 Then
  2866.     Prefix1="her"
  2867.  Else
  2868.     Prefix1="him"
  2869.  Endif
  2870. 10721
  2871.  Exit Sub
  2872. 10722
  2873.  Resume 10721
  2874. End Sub
  2875.  
  2876. Sub The.Or.An
  2877.  On Local Error Goto 10732
  2878.  If MonsterArray(Monster.Temp).Permanent<True Then
  2879.     Prefix1="the "
  2880.  Else
  2881.     Var2$=MonsterArray(Monster.Temp).MonsterName
  2882.     Var2$=Left$(Var2$,1)
  2883.     If Instr("aeiou",Var2$) Then
  2884.        Prefix1="an "
  2885.     Else
  2886.        Prefix1="a "
  2887.     Endif
  2888.  Endif
  2889. 10731
  2890.  Exit Sub
  2891. 10732
  2892.  Resume 10731
  2893. End Sub
  2894.  
  2895. Sub Numeric
  2896.  On Local Error Goto 10742
  2897.  Var=False
  2898.  Var1=Instr(Parsed.Command1,"#")
  2899.  If Var1 Then
  2900.     Var=Int(Val(Mid$(Parsed.Command1,Var1+1)))
  2901.     Parsed.Command1=Left$(Parsed.Command1,Var1-1)
  2902.  Endif
  2903.  Parse.Temp=Var
  2904. 10741
  2905.  Exit Sub
  2906. 10742
  2907.  Resume 10741
  2908. End Sub
  2909.  
  2910. Sub Num
  2911.  On Local Error Goto 10752
  2912.  Var=Parse.Temp
  2913.  If Var>False Then
  2914.     Var=Var-TempC
  2915.     If Var<False Then
  2916.        Var=False
  2917.     Endif
  2918.  Endif
  2919.  Parse.Temp=Var
  2920. 10751
  2921.  Exit Sub
  2922. 10752
  2923.  Resume 10751
  2924. End Sub
  2925.  
  2926. Sub Parse
  2927.  On Local Error Goto 10762
  2928.  Var=Instr(Parsed.Command2," ")
  2929.  Parser=False
  2930.  If Var Then
  2931.     Parsed.Command1=Left$(Parsed.Command2,Var-1)
  2932.     Parsed.Command2=Mid$(Parsed.Command2,Var+1)
  2933.     Parser=Var
  2934.  Endif
  2935. 10761
  2936.  Exit Sub
  2937. 10762
  2938.  Resume 10761
  2939. End Sub
  2940.  
  2941. Sub ParseX
  2942.  On Local Error Goto 10772
  2943.  Var=Instr(Parsed.Command2," ")
  2944.  Parser=False
  2945.  If Var Then
  2946.     Parsed.Command1=Mid$(Parsed.Command2,Var+1)
  2947.     Parsed.Command2=Left$(Parsed.Command2,Var-1)
  2948.     Parser=Var
  2949.  Endif
  2950. 10771
  2951.  Exit Sub
  2952. 10772
  2953.  Resume 10771
  2954. End Sub
  2955.