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 / DNDEDIT2.BAS < prev    next >
BASIC Source File  |  1993-01-07  |  94KB  |  3,754 lines

  1.  Rem dndedit2.bas v2.9c
  2.  Rem $Include: 'dndbbs.inc'
  3.  
  4. Sub RoomEdit
  5.  On Local Error Goto 10002
  6.  Restore RoomEditData
  7.  For TempX=1 To Selection
  8.     Read Xcoor, Ycoor, Column, Line.Length, Max.Lines, Row, Line.Number
  9.  Next
  10.  Select Case Selection
  11.  Case 1
  12.     Edit.Data(1)=RoomRecord.ShortDesc
  13.  Case 2
  14.     For Temp2=1 To 4
  15.        Edit.Data(Temp2)=Rtrim$(RoomRecord.LongDesc(Temp2))
  16.     Next
  17.  Case 3
  18.     Edit.Data(1)=Mid$(Str$(RoomRecord.Direct(1)),2)
  19.  Case 4
  20.     Edit.Data(1)=Mid$(Str$(RoomRecord.Direct(2)),2)
  21.  Case 5
  22.     Edit.Data(1)=Mid$(Str$(RoomRecord.Direct(3)),2)
  23.  Case 6
  24.     Edit.Data(1)=Mid$(Str$(RoomRecord.Direct(4)),2)
  25.  Case 7
  26.     Edit.Data(1)=Mid$(Str$(RoomRecord.Direct(5)),2)
  27.  Case 8
  28.     Edit.Data(1)=Mid$(Str$(RoomRecord.Direct(6)),2)
  29.  Case 9
  30.     Edit.Data(1)=Mid$(Str$(RoomRecord.Direct(7)),2)
  31.  Case 10
  32.     Edit.Data(1)=Mid$(Str$(RoomRecord.Direct(8)),2)
  33.  Case 11
  34.     Edit.Data(1)=Mid$(Str$(RoomRecord.Direct(9)),2)
  35.  Case 12
  36.     Edit.Data(1)=Mid$(Str$(RoomRecord.Direct(10)),2)
  37.  Case 13
  38.     Edit.Data(1)=Mid$(Str$(RoomRecord.Direct(11)),2)
  39.  Case 14
  40.     Edit.Data(1)=Mid$(Str$(RoomRecord.MonsterClass),2)
  41.  Case 15
  42.     Edit.Data(1)=Mid$(Str$(RoomRecord.RustRate),2)
  43.  Case 16
  44.     Edit.Data(1)=Mid$(Str$(RoomRecord.StealRate),2)
  45.  End Select
  46.  Call ScreenEdit
  47.  Select Case Selection
  48.  Case 1
  49.     RoomRecord.ShortDesc=Edit.Data(1)
  50.  Case 2
  51.     For Temp2=1 To 4
  52.        RoomRecord.LongDesc(Temp2)=Edit.Data(Temp2)
  53.     Next
  54.  Case 3 To 13
  55.     RoomRecord.Direct(Selection-2)=Val(Edit.Data(1))
  56.  Case 14
  57.     RoomRecord.MonsterClass=Int(Val(Edit.Data(1)))
  58.  Case 15
  59.     RoomRecord.RustRate=Int(Val(Edit.Data(1)))
  60.  Case 16
  61.     RoomRecord.StealRate=Int(Val(Edit.Data(1)))
  62.  End Select
  63. 10001
  64.  Exit Sub
  65. 10002
  66.  Resume 10001
  67. End Sub
  68.  
  69. Sub ObjectEdit
  70.  On Local Error Goto 10012
  71.  Static TempE
  72.  Restore ObjectEditData
  73.  For TempX=1 To Selection
  74.     Read Xcoor, Ycoor, Column, Line.Length, Max.Lines, Row, Line.Number
  75.  Next
  76.  Select Case Selection
  77.  Case 1
  78.     Edit.Data(1)=ObjectRecord.ObjectName
  79.  Case 2
  80.     Edit.Data(1)=Lcase$(ObjectRecord.ShortName)
  81.  Case 3
  82.     Edit.Data(1)=Mid$(Str$(ObjectRecordRoom.Link),2)
  83.  Case 4
  84.     If ObjectRecord.LightRoom Then
  85.        Edit.Data(1)="Y"
  86.     Else
  87.        Edit.Data(1)="N"
  88.     Endif
  89.  Case 5
  90.     Edit.Data(1)=Mid$(Str$(ObjectRecord.LightTime),2)
  91.  Case 6
  92.     Edit.Data(1)=Mid$(Str$(ObjectRecord.Keyed),2)
  93.  Case 7
  94.     Edit.Data(1)=Left$(ObjectRecord.LongDesc,79)
  95.  Case 8
  96.     Edit.Data(1)=ObjectRecord.ShortDesc
  97.  Case 9
  98.     If ObjectRecord.Hidden Then
  99.        Edit.Data(1)="Y"
  100.     Else
  101.        Edit.Data(1)="N"
  102.     Endif
  103.  Case 10
  104.     If ObjectRecord.Invisible Then
  105.        Edit.Data(1)="Y"
  106.     Else
  107.        Edit.Data(1)="N"
  108.     Endif
  109.  Case 11
  110.     If ObjectRecord.JailTrap Then
  111.        Edit.Data(1)="Y"
  112.     Else
  113.        Edit.Data(1)="N"
  114.     Endif
  115.  Case 12
  116.     If ObjectRecord.DoorLock>1 Then
  117.        Edit.Data(1)="Y"
  118.     Else
  119.        Edit.Data(1)="N"
  120.     Endif
  121.  Case 13
  122.     If ObjectRecord.Relocks Then
  123.        Edit.Data(1)="Y"
  124.     Else
  125.        Edit.Data(1)="N"
  126.     Endif
  127.  Case 14
  128.     If ObjectRecord.Permanent Then
  129.        Edit.Data(1)="Y"
  130.     Else
  131.        Edit.Data(1)="N"
  132.     Endif
  133.  Case 15
  134.     Edit.Data(1)="?"
  135.     If ObjectRecord.Trap=1 Then
  136.        Edit.Data(1)="P"
  137.     Endif
  138.     If ObjectRecord.Trap=2 Then
  139.        Edit.Data(1)="F"
  140.     Endif
  141.     If ObjectRecord.Trap=3 Then
  142.        Edit.Data(1)="D"
  143.     Endif
  144.  Case 16
  145.     Edit.Data(1)="?"
  146.     If ObjectRecord.Trap=2 Then
  147.        If ObjectRecord.Teleport=False Then
  148.           Edit.Data(1)="N"
  149.        Else
  150.           Edit.Data(1)="Y"
  151.        Endif
  152.        Strng=Chr$(27)+"[17;61H"
  153.        Call Scrn(Strng)
  154.        Strng=Chr$(27)+"[1;33;44m"
  155.        Call Scrn(Strng)
  156.        Strng="(Y/N)"
  157.        Call Scrn(Strng)
  158.     Endif
  159.     If ObjectRecord.Trap=3 Then
  160.        Edit.Data(1)="?"
  161.        If ObjectRecord.Teleport>False Then
  162.           Edit.Data(1)="F"
  163.        Endif
  164.        If ObjectRecord.Teleport<False Then
  165.           Edit.Data(1)="V"
  166.        Endif
  167.        Strng=Chr$(27)+"[17;61H"
  168.        Call Scrn(Strng)
  169.        Strng=Chr$(27)+"[1;33;44m"
  170.        Call Scrn(Strng)
  171.        Strng="(F/V)"
  172.        Call Scrn(Strng)
  173.     Endif
  174.  Case 17
  175.     Edit.Data(1)=Mid$(Str$(Abs(ObjectRecord.Teleport)),2)
  176.  End Select
  177.  Strng=Chr$(29)+Chr$(18)+" Cursor Edit   "
  178.  Out2=Chr$(60)+Chr$(217)+" Exit Field"
  179.  Call StatusLine
  180.  Edit.Data(1)=Rtrim$(Edit.Data(1))
  181.  Call ScreenEdit
  182.  Select Case Selection
  183.  Case 1
  184.     ObjectRecord.ObjectName=Lcase$(Edit.Data(1))
  185.  Case 2
  186.     ObjectRecord.ShortName=Ucase$(Edit.Data(1))
  187.  Case 3
  188.     ObjectRecord.RoomLink=Val(Edit.Data(1))
  189.  Case 4
  190.     If Ucase$(Edit.Data(1))="Y" Then
  191.        ObjectRecord.LightRoom=True
  192.     Endif
  193.     If Ucase$(Edit.Data(1))="N" Then
  194.        ObjectRecord.LightRoom=False
  195.     Endif
  196.  Case 5
  197.     ObjectRecord.LightTime=Val(Edit.Data(1))
  198.  Case 6
  199.     ObjectRecord.Keyed=Val(Edit.Data(1))
  200.  Case 7
  201.     ObjectRecord.LongDesc=Edit.Data(1)
  202.  Case 8
  203.     ObjectRecord.ShortDesc=Edit.Data(1)
  204.  Case 9
  205.     If Ucase$(Edit.Data(1))="Y" Then
  206.        ObjectRecord.Hidden=True
  207.     Endif
  208.     If Ucase$(Edit.Data(1))="N" Then
  209.        ObjectRecord.Hidden=False
  210.     Endif
  211.  Case 10
  212.     If Ucase$(Edit.Data(1))="Y" Then
  213.        ObjectRecord.Invisible=True
  214.     Endif
  215.     If Ucase$(Edit.Data(1))="N" Then
  216.        ObjectRecord.Invisible=False
  217.     Endif
  218.  Case 11
  219.     If Ucase$(Edit.Data(1))="Y" Then
  220.        ObjectRecord.JailTrap=True
  221.     Endif
  222.     If Ucase$(Edit.Data(1))="N" Then
  223.        ObjectRecord.JailTrap=False
  224.     Endif
  225.  Case 12
  226.     If Ucase$(Edit.Data(1))="Y" Then
  227.        ObjectRecord.DoorLock=2
  228.        ObjectRecord.Closed=True
  229.     Endif
  230.     If Ucase$(Edit.Data(1))="N" Then
  231.        ObjectRecord.DoorLock=False
  232.        ObjectRecord.Closed=False
  233.     Endif
  234.  Case 13
  235.     If Ucase$(Edit.Data(1))="Y" Then
  236.        ObjectRecord.Relocks=True
  237.     Endif
  238.     If Ucase$(Edit.Data(1))="N" Then
  239.        ObjectRecord.Relocks=False
  240.     Endif
  241.  Case 14
  242.     If Ucase$(Edit.Data(1))="Y" Then
  243.        ObjectRecord.Permanent=True
  244.     Endif
  245.     If Ucase$(Edit.Data(1))="N" Then
  246.        ObjectRecord.Permanent=False
  247.     Endif
  248.  Case 15
  249.     ObjectRecord.Trap=False
  250.     If Ucase$(Edit.Data(1))="P" Then
  251.        ObjectRecord.Trap=1
  252.        ObjectRecord.Teleport=False
  253.     Endif
  254.     If Ucase$(Edit.Data(1))="F" Then
  255.        ObjectRecord.Trap=2
  256.        ObjectRecord.Teleport=1
  257.     Endif
  258.     If Ucase$(Edit.Data(1))="D" Then
  259.        ObjectRecord.Trap=3
  260.        ObjectRecord.Teleport=1
  261.     Endif
  262.     Call DisplayObject
  263.  Case 16
  264.     Select Case ObjectRecord.Trap
  265.     Case 2
  266.        Select Case Ucase$(Edit.Data(1))
  267.        Case "Y"
  268.           TempE=1
  269.           ObjectRecord.Teleport=1
  270.           Call DisplayObject
  271.           Next.Field=17
  272.           Call ShowField
  273.           Call ObjectEdit
  274.        Case Else
  275.           TempE=False
  276.           ObjectRecord.Teleport=False
  277.           Strng=Chr$(27)+"[1;37;40m"
  278.           Call Scrn(Strng)
  279.           Strng=Chr$(27)+"[17;59H"
  280.           Call Scrn(Strng)
  281.           Strng="N"
  282.           Call Scrn(Strng)
  283.           Strng=Chr$(27)+"[19;50H"
  284.           Call Scrn(Strng)
  285.           Strng="0"
  286.           Call Scrn(Strng)
  287.           Strng=Space$(4)
  288.           Call Scrn(Strng)
  289.        End Select
  290.     Case 3
  291.        Select Case Ucase$(Edit.Data(1))
  292.        Case "F"
  293.           TempE=1
  294.           ObjectRecord.Teleport=1
  295.           Call DisplayObject
  296.           Next.Field=17
  297.           Call ShowField
  298.           Call ObjectEdit
  299.        Case "V"
  300.           TempE=True
  301.           ObjectRecord.Teleport=True
  302.           Call DisplayObject
  303.           Next.Field=17
  304.           Call ShowField
  305.           Call ObjectEdit
  306.        Case Else
  307.           ObjectRecord.Teleport=False
  308.           Strng=Chr$(27)+"[1;37;40m"
  309.           Call Scrn(Strng)
  310.           Strng=Chr$(27)+"[17;59H"
  311.           Call Scrn(Strng)
  312.           Strng="?"
  313.           Call Scrn(Strng)
  314.           Strng=Chr$(27)+"[19;50H"
  315.           Call Scrn(Strng)
  316.           Strng="0"
  317.           Call Scrn(Strng)
  318.           Strng=Space$(4)
  319.           Call Scrn(Strng)
  320.        End Select
  321.     End Select
  322.  Case 17
  323.     ObjectRecord.Teleport=Val(Edit.Data(1))*TempE
  324.     Next.Field=16
  325.     Call ShowField
  326.     Strng=Chr$(27)+"[1;33;44m"
  327.     Call Scrn(Strng)
  328.     Strng=Chr$(27)+"[17;61H"
  329.     Call Scrn(Strng)
  330.     Strng=Space$(5)
  331.     Call Scrn(Strng)
  332.  End Select
  333. 10011
  334.  Exit Sub
  335. 10012
  336.  Resume 10011
  337. End Sub
  338.  
  339. Sub TreasureEdit
  340.  On Local Error Goto 10022
  341.  Static TempE
  342.  Restore TreasureEditData
  343.  For TempX=1 To Selection
  344.     Read Xcoor, Ycoor, Column, Line.Length, Max.Lines, Row, Line.Number
  345.  Next
  346.  TempE=False
  347.  Select Case Selection
  348.  Case 1
  349.     Edit.Data(1)=TreasureRecord.TreasureName
  350.  Case 2
  351.     Edit.Data(1)=Lcase$(TreasureRecord.ShortName)
  352.  Case 3
  353.     Edit.Data(1)=Mid$(Str$(TreasureRecord.Weight),2)
  354.  Case 4
  355.     Edit.Data(1)=Mid$(Str$(TreasureRecord.Gold),2)
  356.  Case 5
  357.     Edit.Data(1)=Mid$(Str$(Abs(TreasureRecord.Plus)),2)
  358.  Case 6
  359.     Edit.Data(1)=Mid$(Str$(TreasureRecord.Charges),2)
  360.  Case 7
  361.     Select Case TreasureRecord.Proficiency
  362.     Case 1
  363.        Edit.Data(1)="B"
  364.     Case 2
  365.        Edit.Data(1)="P"
  366.     Case 3
  367.        Edit.Data(1)="S"
  368.     Case 4
  369.        Edit.Data(1)="T"
  370.     Case Else
  371.        Edit.Data(1)="?"
  372.     End Select       
  373.  Case 8
  374.     If TreasureRecord.Type=False Then
  375.        If TreasureRecord.Plus=False Then
  376.           Edit.Data(1)="T"
  377.        Else
  378.           Edit.Data(1)="W"
  379.        Endif
  380.     Endif
  381.     If TreasureRecord.Type<False Then
  382.        Edit.Data(1)="S"
  383.     Endif
  384.     If TreasureRecord.Type>False Then
  385.        Edit.Data(1)="A"
  386.     Endif
  387.  Case 9
  388.     If TreasureRecord.Coin Then
  389.        Edit.Data(1)="Y"
  390.     Else
  391.        Edit.Data(1)="N"
  392.     Endif
  393.  Case 10
  394.     If TreasureRecord.Potion Then
  395.        Edit.Data(1)="Y"
  396.     Else
  397.        Edit.Data(1)="N"
  398.     Endif
  399.  Case 11
  400.     If TreasureRecord.Scroll Then
  401.        Edit.Data(1)="Y"
  402.     Else
  403.        Edit.Data(1)="N"
  404.     Endif
  405.  Case 12
  406.     If TreasureRecord.Invisible Then
  407.        Edit.Data(1)="Y"
  408.     Else
  409.        Edit.Data(1)="N"
  410.     Endif
  411.  Case 13
  412.     If TreasureRecord.Loadable Then
  413.        Edit.Data(1)="Y"
  414.     Else
  415.        Edit.Data(1)="N"
  416.     Endif
  417.  Case 14
  418.     Edit.Data(1)=Mid$(Str$(TreasureRecord.AmmoLoads),2)
  419.  Case 15
  420.     If TreasureRecord.Ammunition Then
  421.        Edit.Data(1)="Y"
  422.     Else
  423.        Edit.Data(1)="N"
  424.     Endif
  425.  Case 16
  426.     Edit.Data(1)=Mid$(Str$(TreasureRecord.Keyed),2)
  427.  Case 17
  428.     If TreasureRecord.Spell Then
  429.        Edit.Data(1)="Y"
  430.     Else
  431.        Edit.Data(1)="N"
  432.     Endif
  433.  Case 18
  434.     If TreasureRecord.Spell>False And_
  435.     TreasureRecord.Spell<=Lof(4)/Len(SpellRecord) Then
  436.        Get 4,TreasureRecord.Spell,SpellRecord
  437.        Edit.Data(1)=Left$(SpellRecord.SpellName,20)
  438.     Else
  439.        Edit.Data(1)=Nul
  440.        Strng=Chr$(27)+"[1;37;40m"
  441.        Call Scrn(Strng)
  442.        Strng=Chr$(27)+"[4;40H"
  443.        Call Scrn(Strng)
  444.        Strng=Space$(20)
  445.        Call Scrn(Strng)
  446.     Endif
  447.  Case 19
  448.     If TreasureRecord.RingType Then
  449.        Edit.Data(1)="Y"
  450.     Else
  451.        Edit.Data(1)="N"
  452.     Endif
  453.  Case 20
  454.     Edit.Data(1)="?"
  455.     If TreasureRecord.RingType=1 Then
  456.        Edit.Data(1)="P"
  457.     Endif
  458.     If TreasureRecord.RingType=2 Then
  459.        Edit.Data(2)="L"
  460.     Endif
  461.     If TreasureRecord.RingType=3 Then
  462.        Edit.Data(1)="S"
  463.     Endif
  464.  Case 21
  465.     If TreasureRecord.RingType<>3 Then
  466.        Exit Sub
  467.     Endif
  468.     If TreasureRecord.RingSpell<=False Then
  469.        Edit.Data(1)=Nul
  470.        Strng=Chr$(27)+"[1;37;40m"
  471.        Call Scrn(Strng)
  472.        Strng=Chr$(27)+"[10;40H"
  473.        Call Scrn(Strng)
  474.        Strng=Space$(20)
  475.        Call Scrn(Strng)
  476.     Endif
  477.     If TreasureRecord.RingSpell>False Then
  478.        Get 4,TreasureRecord.RingSpell,SpellRecord
  479.        Edit.Data(1)=Left$(SpellRecord.SpellName,20)
  480.     Endif
  481.  Case 22
  482.     If TreasureRecord.Recep Then
  483.        Edit.Data(1)="Y"
  484.     Else
  485.        Edit.Data(1)="N"
  486.     Endif
  487.  Case 23
  488.     Edit.Data(1)=Mid$(Str$(TreasureRecord.RecepMax),2)
  489.  Case 24
  490.     Edit.Data(1)=Left$(TreasureRecord.RecepFileName,8)
  491.  Case 25
  492.     If TreasureRecord.Locked Then
  493.        Edit.Data(1)="Y"
  494.     Else
  495.        Edit.Data(1)="N"
  496.     Endif
  497.  Case 26
  498.     If TreasureRecord.Edible Then
  499.        Edit.Data(1)="Y"
  500.     Else
  501.        Edit.Data(1)="N"
  502.     Endif
  503.  Case 27
  504.     If TreasureRecord.Rustable Then
  505.        Edit.Data(1)="Y"
  506.     Else
  507.        Edit.Data(1)="N"
  508.     Endif
  509.  Case 28
  510.     Edit.Data(1)=Mid$(Str$(TreasureRecord.RustPercent),2)
  511.  Case 29
  512.     If TreasureRecord.Stealable Then
  513.        Edit.Data(1)="Y"
  514.     Else
  515.        Edit.Data(1)="N"
  516.     Endif
  517.  Case 30
  518.     Edit.Data(1)=Mid$(Str$(TreasureRecord.StealPercent),2)
  519.  Case 31
  520.     If TreasureRecord.Launchable Then
  521.        Edit.Data(1)="Y"
  522.     Else
  523.        Edit.Data(1)="N"
  524.     Endif
  525.  Case 32
  526.     Edit.Data(1)=Mid$(Str$(TreasureRecord.LaunchLoads),2)
  527.  Case 33
  528.     If TreasureRecord.LaunchAmmo Then
  529.        Edit.Data(1)="Y"
  530.     Else
  531.        Edit.Data(1)="N"
  532.     Endif
  533.  Case 34
  534.     If TreasureRecord.Movable Then
  535.        Edit.Data(1)="Y"
  536.     Else
  537.        Edit.Data(1)="N"
  538.     Endif
  539.  End Select
  540.  Strng=Chr$(29)+Chr$(18)+" Cursor Edit   "
  541.  Out2=Chr$(60)+Chr$(217)+" Exit Field"
  542.  Call StatusLine
  543.  Edit.Data(1)=Rtrim$(Edit.Data(1))
  544.  Call ScreenEdit
  545.  Select Case Selection
  546.  Case 1
  547.     TreasureRecord.TreasureName=Lcase$(Edit.Data(1))
  548.  Case 2
  549.     TreasureRecord.ShortName=Ucase$(Edit.Data(1))
  550.  Case 3
  551.     TreasureRecord.Weight=Val(Edit.Data(1))
  552.  Case 4
  553.     TreasureRecord.Gold=Val(Edit.Data(1))
  554.  Case 5
  555.     TreasureRecord.Plus=Val(Edit.Data(1))
  556.  Case 6
  557.     TreasureRecord.Charges=Val(Edit.Data(1))
  558.  Case 7
  559.     TreasureRecord.Proficiency=False
  560.     If Ucase$(Edit.Data(1))="B" Then
  561.        TreasureRecord.Proficiency=1
  562.     Endif
  563.     If Ucase$(Edit.Data(1))="P" Then
  564.        TreasureRecord.Proficiency=2
  565.     Endif
  566.     If Ucase$(Edit.Data(1))="S" Then
  567.        TreasureRecord.Proficiency=3
  568.     Endif
  569.     If Ucase$(Edit.Data(1))="T" Then
  570.        TreasureRecord.Proficiency=4
  571.     Endif
  572.  Case 8
  573.     If Ucase$(Edit.Data(1))="S" Then
  574.        TreasureRecord.Type=True
  575.     Endif
  576.     If Ucase$(Edit.Data(1))="A" Then
  577.        TreasureRecord.Type=1
  578.     Endif
  579.     If Ucase$(Edit.Data(1))="W" Then
  580.        TreasureRecord.Type=False
  581.        If TreasureRecord.Plus=False Then
  582.           TreasureRecord.Plus=1
  583.           TempX=5
  584.           Call ShowTreasure
  585.        Endif
  586.     Endif
  587.     If Ucase$(Edit.Data(1))="T" Then
  588.        TreasureRecord.Plus=False
  589.        TempX=5
  590.        Call ShowTreasure
  591.        TreasureRecord.Charges=False
  592.        TempX=6
  593.        Call ShowTreasure
  594.        TreasureRecord.Type=False
  595.     Endif
  596.  Case 9
  597.     If Ucase$(Edit.Data(1))="Y" Then
  598.        TreasureRecord.Coin=True
  599.     Endif
  600.     If Ucase$(Edit.Data(1))="N" Then
  601.        TreasureRecord.Coin=False
  602.     Endif
  603.  Case 10
  604.     If Ucase$(Edit.Data(1))="Y" Then
  605.        TreasureRecord.Potion=True
  606.     Endif
  607.     If Ucase$(Edit.Data(1))="N" Then
  608.        TreasureRecord.Potion=False
  609.     Endif
  610.  Case 11
  611.     If Ucase$(Edit.Data(1))="Y" Then
  612.        TreasureRecord.Scroll=True
  613.     Endif
  614.     If Ucase$(Edit.Data(1))="N" Then
  615.        TreasureRecord.Scroll=False
  616.     Endif
  617.  Case 12
  618.     If Ucase$(Edit.Data(1))="Y" Then
  619.        TreasureRecord.Invisible=True
  620.     Endif
  621.     If Ucase$(Edit.Data(1))="N" Then
  622.        TreasureRecord.Invisible=False
  623.     Endif
  624.  Case 13
  625.     If Ucase$(Edit.Data(1))="Y" Then
  626.        TreasureRecord.Loadable=True
  627.     Endif
  628.     If Ucase$(Edit.Data(1))="N" Then
  629.        TreasureRecord.Loadable=False
  630.     Endif
  631.  Case 14
  632.     TreasureRecord.AmmoLoads=Val(Edit.Data(1))
  633.  Case 15
  634.     If Ucase$(Edit.Data(1))="Y" Then
  635.        TreasureRecord.Ammunition=True
  636.     Endif
  637.     If Ucase$(Edit.Data(1))="N" Then
  638.        TreasureRecord.Ammunition=False
  639.     Endif
  640.  Case 16
  641.     TreasureRecord.Keyed=Val(Edit.Data(1))
  642.  Case 17
  643.     If Ucase$(Edit.Data(1))="Y" Then
  644.        TreasureRecord.Spell=True
  645.        TempX=Selection
  646.        Call ShowTreasure
  647.        Next.Field=18
  648.        Call ShowField
  649.        TempE=True
  650.        Call TreasureEdit
  651.        Exit Sub
  652.     Endif
  653.     If Ucase$(Edit.Data(1))="N" Then
  654.        TreasureRecord.Spell=False
  655.        Call ShowTreasure(Selection+1)
  656.     Endif
  657.  Case 18
  658.     Edit.Data(1)=Rtrim$(Edit.Data(1))
  659.     Edit.Data(1)=Lcase$(Edit.Data(1))
  660.     If Edit.Data(1)=Nul Then
  661.        TreasureRecord.Spell=False
  662.        Call ShowTreasure(Selection-1)
  663.     Else
  664.        For Temp2=1 To Lof(4)/Len(SpellRecord)
  665.           Get 4,Temp2,SpellRecord
  666.           If Left$(SpellRecord.SpellName,Len(Edit.Data(1)))=Edit.Data(1) Then
  667.              TreasureRecord.Spell=Temp2
  668.              If TempE=False Then
  669.                 Call ShowTreasure(Selection-1)
  670.              Endif
  671.              Exit Sub
  672.           Endif
  673.        Next
  674.        TreasureRecord.Spell=False
  675.        Call ShowTreasure(Selection-1)
  676.        Strng="The spell was not found in the spell file."
  677.        Call ErrorMessage
  678.     Endif
  679.  Case 19
  680.     Strng=Chr$(27)+"[1;37;40m"
  681.     Call Scrn(Strng)
  682.     If Ucase$(Edit.Data(1))="Y" Then
  683.        TreasureRecord.RingType=1
  684.        TreasureRecord.RingSpell=False
  685.        Strng=Chr$(27)+"[8;40H"
  686.        Call Scrn(Strng)
  687.        Call Scrn("P")
  688.     Endif
  689.     If Ucase$(Edit.Data(1))="N" Then
  690.        TreasureRecord.RingType=False
  691.        TreasureRecord.RingSpell=False
  692.        Strng=Chr$(27)+"[8;40H"
  693.        Call Scrn(Strng)
  694.        Call Scrn("?")
  695.     Endif
  696.     Strng=Chr$(27)+"[10;40H"
  697.     Call Scrn(Strng)
  698.     Strng="<none>"
  699.     Call Scrn(Strng)
  700.     Strng=Space$(14)
  701.     Call Scrn(Strng)
  702.  Case 20
  703.     If Ucase$(Edit.Data(1))="P" Then
  704.        TreasureRecord.RingType=1
  705.        TreasureRecord.RingSpell=False
  706.        Strng=Chr$(27)+"[1;37;40m"
  707.        Call Scrn(Strng)
  708.        Strng=Chr$(27)+"[5;45H"
  709.        Call Scrn(Strng)
  710.        Call Scrn("Y")
  711.        Strng=Chr$(27)+"[10;40H"
  712.        Call Scrn(Strng)
  713.        Strng="<none>"
  714.        Call Scrn(Strng)
  715.        Strng=Space$(14)
  716.        Call Scrn(Strng)
  717.     Endif
  718.     If Ucase$(Edit.Data(1))="L" Then
  719.        TreasureRecord.RingType=2
  720.        TreasureRecord.RingSpell=False
  721.        Strng=Chr$(27)+"[1;37;40m"
  722.        Call Scrn(Strng)
  723.        Strng=Chr$(27)+"[5;45H"
  724.        Call Scrn(Strng)
  725.        Call Scrn("Y")
  726.        Strng=Chr$(27)+"[10;40H"
  727.        Call Scrn(Strng)
  728.        Strng="<none>"
  729.        Call Scrn(Strng)
  730.        Strng=Space$(14)
  731.        Call Scrn(Strng)
  732.     Endif
  733.     If Ucase$(Edit.Data(1))="S" Then
  734.        TreasureRecord.RingType=3
  735.        TreasureRecord.RingSpell=True
  736.        Strng=Chr$(27)+"[1;37;40m"
  737.        Call Scrn(Strng)
  738.        Strng=Chr$(27)+"[10;40H"
  739.        Call Scrn(Strng)
  740.        Strng="<generic spell>"
  741.        Call Scrn(Strng)
  742.        Strng=Space$(5)
  743.        Call Scrn(Strng)
  744.     Endif
  745.  Case 21
  746.     Edit.Data(1)=Rtrim$(Edit.Data(1))
  747.     Edit.Data(1)=Lcase$(Edit.Data(1))
  748.     If Edit.Data(1)=Nul Then
  749.        TreasureRecord.RingSpell=True
  750.     Else
  751.        For Temp2=1 To Lof(4)/Len(SpellRecord)
  752.           Get 4,Temp2,SpellRecord
  753.           If Left$(SpellRecord.SpellName,Len(Edit.Data(1)))=Edit.Data(1) Then
  754.              TreasureRecord.RingSpell=Temp2
  755.              Exit Sub
  756.           Endif
  757.        Next
  758.        Strng="The spell was not found in the spell file."
  759.        Call ErrorMessage
  760.     Endif
  761.  Case 22
  762.     If Ucase$(Edit.Data(1))="Y" Then
  763.        TreasureRecord.Recep=True
  764.     Endif
  765.     If Ucase$(Edit.Data(1))="N" Then
  766.        TreasureRecord.Recep=False
  767.     Endif
  768.  Case 23
  769.     TreasureRecord.RecepMax=Val(Edit.Data(1))
  770.  Case 24
  771.     TreasureRecord.RecepFileName=Edit.Data(1)
  772.  Case 25
  773.     If Ucase$(Edit.Data(1))="Y" Then
  774.        TreasureRecord.Locked=1
  775.        TreasureRecord.Closed=1
  776.     Endif
  777.     If Ucase$(Edit.Data(1))="N" Then
  778.        TreasureRecord.Locked=False
  779.        TreasureRecord.Closed=False
  780.     Endif
  781.  Case 26
  782.     If Ucase$(Edit.Data(1))="Y" Then
  783.        TreasureRecord.Edible=True
  784.     Endif
  785.     If Ucase$(Edit.Data(1))="N" Then
  786.        TreasureRecord.Edible=False
  787.     Endif
  788.  Case 27
  789.     If Ucase$(Edit.Data(1))="Y" Then
  790.        TreasureRecord.Rustable=True
  791.     Endif
  792.     If Ucase$(Edit.Data(1))="N" Then
  793.        TreasureRecord.Rustable=False
  794.     Endif
  795.  Case 28
  796.     TreasureRecord.RustPercent=Int(Val(Edit.Data(1)))
  797.  Case 29
  798.     If Ucase$(Edit.Data(1))="Y" Then
  799.        TreasureRecord.Stealable=True
  800.     Endif
  801.     If Ucase$(Edit.Data(1))="N" Then
  802.        TreasureRecord.Stealable=False
  803.     Endif
  804.  Case 30
  805.     TreasureRecord.StealPercent=Int(Val(Edit.Data(1)))
  806.  Case 31
  807.     If Ucase$(Edit.Data(1))="Y" Then
  808.        TreasureRecord.Launchable=True
  809.     Endif
  810.     If Ucase$(Edit.Data(1))="N" Then
  811.        TreasureRecord.Launchable=False
  812.     Endif
  813.  Case 32
  814.     TreasureRecord.LaunchLoads=Int(Val(Edit.Data(1)))
  815.  Case 33
  816.     If Ucase$(Edit.Data(1))="Y" Then
  817.        TreasureRecord.LaunchAmmo=True
  818.     Endif
  819.     If Ucase$(Edit.Data(1))="N" Then
  820.        TreasureRecord.LaunchAmmo=False
  821.     Endif
  822.  Case 34
  823.     If Ucase$(Edit.Data(1))="Y" Then
  824.        TreasureRecord.Movable=True
  825.     Endif
  826.     If Ucase$(Edit.Data(1))="N" Then
  827.        TreasureRecord.Movable=False
  828.     Endif
  829.  End Select
  830. 10021
  831.  Exit Sub
  832. 10022
  833.  Resume 10021
  834. End Sub
  835.  
  836. Sub MonsterEdit
  837.  On Local Error Goto 10032
  838.  Restore MonsterEditData
  839.  For TempX=1 To Selection
  840.     Read Xcoor, Ycoor, Column, Line.Length, Max.Lines, Row, Line.Number
  841.  Next
  842.  Static TempE
  843.  TempE=False
  844.  Select Case Selection
  845.  Case 1
  846.     Edit.Data(1)=MonsterRecord.MonsterName
  847.  Case 2
  848.     Edit.Data(1)=MonsterRecord.PluralName
  849.  Case 3
  850.     Edit.Data(1)=Mid$(Str$(MonsterRecord.Level),2)
  851.  Case 4
  852.     Edit.Data(1)=Mid$(Str$(MonsterRecord.Hits),2)
  853.  Case 5
  854.     Edit.Data(1)=Mid$(Str$(MonsterRecord.Experience),2)
  855.  Case 6
  856.     For Temp2=1 To 5
  857.        Temp4=MonsterRecord.Treasure(Temp2)
  858.        Edit.Data(Temp2)=Nul
  859.        If Temp4>False Then
  860.           Get 8,Temp4,TreasureRecord
  861.           Edit.Data(Temp2)=TreasureRecord.TreasureName
  862.        Endif
  863.     Next
  864.  Case 7
  865.     If MonsterRecord.Psionic Then
  866.        Edit.Data(1)="Y"
  867.     Else
  868.        Edit.Data(1)="N"
  869.     Endif
  870.  Case 8
  871.     If MonsterRecord.Psionic=False Or MonsterRecord.PsionicSpell=False Then
  872.        Edit.Data(1)=Nul
  873.        Strng=Chr$(27)+"[1;37;40m"
  874.        Call Scrn(Strng)
  875.        Strng=Chr$(27)+"[21;22H"
  876.        Call Scrn(Strng)
  877.        Strng=Space$(20)
  878.        Call Scrn(Strng)
  879.     Else
  880.        Get 4,MonsterRecord.PsionicSpell,SpellRecord
  881.        Edit.Data(1)=SpellRecord.SpellName
  882.     Endif
  883.  Case 9
  884.     Edit.Data(1)=Mid$(Str$(MonsterRecord.NumberAppearing),2)
  885.  Case 10
  886.     If MonsterRecord.Poison Then
  887.        Edit.Data(1)="Y"
  888.     Else
  889.        Edit.Data(1)="N"
  890.     ENdif
  891.  Case 11
  892.     Edit.Data(1)=Mid$(Str$(MonsterRecord.PoisonPercent),2)
  893.  Case 12
  894.     If MonsterRecord.LevelDrain Then
  895.        Edit.Data(1)="Y"
  896.     Else
  897.        Edit.Data(1)="N"
  898.     Endif
  899.  Case 13
  900.     Edit.Data(1)=Mid$(Str$(MonsterRecord.DrainPercent),2)
  901.  Case 14
  902.     If MonsterRecord.Block Then
  903.        Edit.Data(1)="Y"
  904.     Else
  905.        Edit.Data(1)="N"
  906.     Endif
  907.  Case 15
  908.     Edit.Data(1)=Mid$(Str$(MonsterRecord.BlockPercent),2)
  909.  Case 16
  910.     If MonsterRecord.Prevent Then
  911.        Edit.Data(1)="Y"
  912.     Else
  913.        Edit.Data(1)="N"
  914.     Endif
  915.  Case 17
  916.     Edit.Data(1)=Mid$(Str$(MonsterRecord.PreventPercent),2)
  917.  Case 18
  918.     If MonsterRecord.Follow Then
  919.        Edit.Data(1)="Y"
  920.     Else
  921.        Edit.Data(1)="N"
  922.     Endif
  923.  Case 19
  924.     Edit.Data(1)=Mid$(Str$(MonsterRecord.FollowPercent),2)
  925.  Case 20
  926.     Edit.Data(1)=Mid$(Str$(MonsterRecord.Teleport),2)
  927.  Case 21
  928.     If MonsterRecord.Spell Then
  929.        Edit.Data(1)="Y"
  930.     Else
  931.        Edit.Data(1)="N"
  932.     Endif
  933.  Case 22
  934.     Edit.Data(1)=Mid$(Str$(MonsterRecord.SpellPercent),2)
  935.  Case 23
  936.     If MonsterRecord.Spell>False And_
  937.     MonsterRecord.Spell<=Lof(4)/Len(SpellRecord) Then
  938.        Get 4,MonsterRecord.Spell,SpellRecord
  939.        Edit.Data(1)=Left$(SpellRecord.SpellName,20)
  940.     Else
  941.        Strng=Chr$(27)+"[1;37;40m"
  942.        Call Scrn(Strng)
  943.        Strng=Chr$(27)+"[17;51H"
  944.        Call Scrn(Strng)
  945.        Edit.Data(1)=Nul
  946.        Strng=Space$(20)
  947.        Call Scrn(Strng)
  948.     Endif
  949.  Case 24
  950.     If MonsterRecord.Magic Then
  951.        Edit.Data(1)="Y"
  952.     Else
  953.        Edit.Data(1)="N"
  954.     Endif
  955.  Case 25
  956.     If MonsterRecord.Permanent Then
  957.        Edit.Data(1)="Y"
  958.     Else
  959.        Edit.Data(1)="N"
  960.     Endif
  961.  Case 26
  962.     If MonsterRecord.Equation Then
  963.        Edit.Data(1)="Y"
  964.     Else
  965.        Edit.Data(1)="N"
  966.     Endif
  967.  End Select
  968.  Strng=Chr$(29)+Chr$(18)+" Cursor Edit   "
  969.  If Selection=6 Then
  970.     Out2="<esc> Exit Field"
  971.  Else
  972.     Out2=Chr$(60)+Chr$(217)+" Exit Field"
  973.  Endif
  974.  Call StatusLine
  975.  Edit.Data(1)=Rtrim$(Edit.Data(1))
  976.  Call ScreenEdit
  977.  Select Case Selection
  978.  Case 1
  979.     MonsterRecord.MonsterName=Lcase$(Edit.Data(1))
  980.  Case 2
  981.     MonsterRecord.PluralName=Lcase$(Edit.Data(1))
  982.  Case 3
  983.     MonsterRecord.Level=Val(Edit.Data(1))
  984.  Case 4
  985.     MonsterRecord.Hits=Val(Edit.Data(1))
  986.  Case 5
  987.     MonsterRecord.Experience=Val(Edit.Data(1))
  988.  Case 6
  989.     For Temp2=1 To 5
  990.        Temp1=False
  991.        Edit.Data(Temp2)=Rtrim$(Edit.Data(Temp2))
  992.        If Edit.Data(Temp2)<>Nul Then
  993.           Edit.Data(Temp2)=Lcase$(Edit.Data(Temp2))
  994.           For Temp3=1 To Lof(8)/Len(TreasureRecord)
  995.              Get 8,Temp3,TreasureRecord
  996.              If Left$(TreasureRecord.TreasureName,_
  997.              Len(Edit.Data(Temp2)))=Edit.Data(Temp2) Then
  998.                 Temp1=Temp3
  999.                 Exit For
  1000.              Endif
  1001.           Next
  1002.        Endif
  1003.        MonsterRecord.Treasure(Temp2)=Temp1
  1004.     Next
  1005.  Case 7
  1006.     If Ucase$(Edit.Data(1))="Y" Then
  1007.        MonsterRecord.Psionic=True
  1008.        TempX=Selection
  1009.        Call ShowMonster
  1010.        Next.Field=8
  1011.        Call ShowField
  1012.        TempE=True
  1013.        Call MonsterEdit
  1014.        Exit Sub
  1015.     Endif
  1016.     If Ucase$(Edit.Data(1))="N" Then
  1017.        MonsterRecord.Psionic=False
  1018.        MonsterRecord.PsionicSpell=False
  1019.        Call ShowMonster(Selection+1)
  1020.     Endif
  1021.  Case 8
  1022.     Edit.Data(1)=Rtrim$(Edit.Data(1))
  1023.     Edit.Data(1)=Lcase$(Edit.Data(1))
  1024.     If Edit.Data(1)=Nul Then
  1025.        MonsterRecord.Psionic=False
  1026.        MonsterRecord.PsionicSpell=False
  1027.        Call ShowMonster(Selection-1)
  1028.     Else
  1029.        For Temp2=1 To Lof(4)/Len(SpellRecord)
  1030.           Get 4,Temp2,SpellRecord
  1031.           If Left$(SpellRecord.SpellName,Len(Edit.Data(1)))=Edit.Data(1) Then
  1032.              If SpellRecord.Psionic Then
  1033.                 MonsterRecord.Psionic=True
  1034.                 MonsterRecord.PsionicSpell=Temp2
  1035.                 If TempE=False Then
  1036.                    Call ShowMonster(Selection-1)
  1037.                 Endif
  1038.                 Exit Sub
  1039.              Endif
  1040.           Endif
  1041.        Next
  1042.        MonsterRecord.Psionic=False
  1043.        MonsterRecord.PsionicSpell=False
  1044.        Call ShowMonster(Selection-1)
  1045.        Strng="The psi spell was not found in the spell file."
  1046.        Call ErrorMessage
  1047.     Endif
  1048.  Case 9
  1049.     MonsterRecord.NumberAppearing=Val(Edit.Data(1))
  1050.  Case 10
  1051.     MonsterRecord.Poison=False
  1052.     MonsterRecord.PoisonPercent=False
  1053.     If Ucase$(Edit.Data(1))="Y" Then
  1054.        MonsterRecord.Poison=True
  1055.        Next.Field=11
  1056.        Call ShowField
  1057.        TempX=Selection
  1058.        Call ShowMonster
  1059.        Call MonsterEdit
  1060.        Exit Sub
  1061.     Endif
  1062.  Case 11
  1063.     MonsterRecord.PoisonPercent=Int(Val(Edit.Data(1)))
  1064.  Case 12
  1065.     MonsterRecord.LevelDrain=False
  1066.     MonsterRecord.DrainPercent=False
  1067.     If Ucase$(Edit.Data(1))="Y" Then
  1068.        MonsterRecord.LevelDrain=True
  1069.        Next.Field=13
  1070.        Call ShowField
  1071.        TempX=Selection
  1072.        Call ShowMonster
  1073.        Call MonsterEdit
  1074.        Exit Sub
  1075.     Endif
  1076.  Case 13
  1077.     MonsterRecord.DrainPercent=Int(Val(Edit.Data(1)))
  1078.  Case 14
  1079.     MonsterRecord.Block=False
  1080.     MonsterRecord.BlockPercent=False
  1081.     If Ucase$(Edit.Data(1))="Y" Then
  1082.        MonsterRecord.Block=True
  1083.        Next.Field=15
  1084.        Call ShowField
  1085.        TempX=Selection
  1086.        Call ShowMonster
  1087.        Call MonsterEdit
  1088.        Exit Sub
  1089.     Endif
  1090.  Case 15
  1091.     MonsterRecord.BlockPercent=Int(Val(Edit.Data(1)))
  1092.  Case 16
  1093.     MonsterRecord.Prevent=False
  1094.     MonsterRecord.PreventPercent=False
  1095.     If Ucase$(Edit.Data(1))="Y" Then
  1096.        MonsterRecord.Prevent=True
  1097.        Next.Field=17
  1098.        Call ShowField
  1099.        TempX=Selection
  1100.        Call ShowMonster
  1101.        Call MonsterEdit
  1102.        Exit Sub
  1103.     Endif
  1104.  Case 17
  1105.     MonsterRecord.PreventPercent=Int(Val(Edit.Data(1)))
  1106.  Case 18
  1107.     MonsterRecord.Follow=False
  1108.     MonsterRecord.FollowPercent=False
  1109.     MonsterRecord.Teleport=False
  1110.     If Ucase$(Edit.Data(1))="Y" Then
  1111.        MonsterRecord.Follow=True
  1112.        Next.Field=19
  1113.        Call ShowField
  1114.        TempX=Selection
  1115.        Call ShowMonster
  1116.        Call MonsterEdit
  1117.        Exit Sub
  1118.     Endif
  1119.  Case 19
  1120.     MonsterRecord.FollowPercent=Int(Val(Edit.Data(1)))
  1121.  Case 20
  1122.     MonsterRecord.Teleport=Int(Val(Edit.Data(1)))
  1123.  Case 21
  1124.     MonsterRecord.Spell=False
  1125.     MonsterRecord.SpellPercent=False
  1126.     Call ShowMonster(Selection+1)
  1127.     If Ucase$(Edit.Data(1))="Y" Then
  1128.        MonsterRecord.Spell=True
  1129.        TempX=Selection
  1130.        Call ShowMonster
  1131.        Next.Field=22
  1132.        Call ShowField
  1133.        Call MonsterEdit
  1134.        Exit Sub
  1135.     Endif
  1136.  Case 22
  1137.     MonsterRecord.SpellPercent=Int(Val(Edit.Data(1)))
  1138.  Case 23
  1139.     Edit.Data(1)=Lcase$(Edit.Data(1))
  1140.     Edit.Data(1)=Rtrim$(Edit.Data(1))
  1141.     If Edit.Data(1)=Nul Then
  1142.        MonsterRecord.Spell=False
  1143.        MonsterRecord.SpellPercent=False
  1144.     Else
  1145.        TempA=False
  1146.        For Temp2=1 To Lof(4)/Len(SpellRecord)
  1147.           Get 4,Temp2,SpellRecord
  1148.           If Left$(SpellRecord.SpellName,Len(Edit.Data(1)))=Edit.Data(1) Then
  1149.              TempA=True
  1150.              MonsterRecord.Spell=Temp2
  1151.           Endif
  1152.        Next
  1153.        If TempA=False Then
  1154.           MonsterRecord.Spell=False
  1155.           MonsterRecord.SpellPercent=False
  1156.           Strng="The spell was not found in the spell file."
  1157.           Call ErrorMessage
  1158.        Endif
  1159.     Endif
  1160.     Call ShowMonster(21)
  1161.     Call ShowMonster(22)
  1162.  Case 24
  1163.     If Ucase$(Edit.Data(1))="Y" Then
  1164.        MonsterRecord.Magic=True
  1165.     Endif
  1166.     If Ucase$(Edit.Data(1))="N" Then
  1167.        MonsterRecord.Magic=False
  1168.     Endif
  1169.  Case 25
  1170.     If Ucase$(Edit.Data(1))="Y" Then
  1171.        MonsterRecord.Permanent=True
  1172.     Endif
  1173.     If Ucase$(Edit.Data(1))="N" Then
  1174.        MonsterRecord.Permanent=False
  1175.     Endif
  1176.  Case 26
  1177.     If Ucase$(Edit.Data(1))="Y" Then
  1178.        Restore MonsterEditData2
  1179.        Read Xcoor, Ycoor, Column, Line.Length, Max.Lines, Row, Line.Number
  1180.        Edit.Data(1)=Rtrim$(MonsterRecord.MonsterEquate)
  1181.        Strng=Chr$(29)+Chr$(18)+" Cursor Edit   "
  1182.        Out2=Chr$(60)+Chr$(217)+" Exit Field"
  1183.        Call StatusLine
  1184.        Call ScreenEdit
  1185.        MonsterRecord.Equation=True
  1186.        MonsterRecord.MonsterEquate=Ucase$(Edit.Data$(1))
  1187.     Else
  1188.        MonsterRecord.Equation=False
  1189.        MonsterRecord.MonsterEquate=Nul
  1190.     Endif
  1191.  End Select
  1192. 10031
  1193.  Exit Sub
  1194. 10032
  1195.  Resume 10031
  1196. End Sub
  1197.  
  1198. Sub NonplayerEdit
  1199.  On Local Error Goto 10042
  1200.  Restore NonplayerEditData
  1201.  For TempX=1 To Selection
  1202.     Read Xcoor, Ycoor, Column, Line.Length, Max.Lines, Row, Line.Number
  1203.  Next
  1204.  Static TempE
  1205.  TempE=False
  1206.  MonsterRecord.Magic=True
  1207.  MonsterRecord.Permanent=-2
  1208.  MonsterRecord.Equation=False
  1209.  Select Case Selection
  1210.  Case 1
  1211.     Edit.Data(1)=MonsterRecord.MonsterName
  1212.  Case 2
  1213.     Edit.Data(1)=MonsterRecord.PluralName
  1214.  Case 3
  1215.     Edit.Data(1)=Mid$(Str$(MonsterRecord.Level),2)
  1216.  Case 4
  1217.     Edit.Data(1)=Mid$(Str$(MonsterRecord.Hits),2)
  1218.  Case 5
  1219.     Edit.Data(1)=Mid$(Str$(MonsterRecord.Experience),2)
  1220.  Case 6
  1221.     For Temp2=1 To 5
  1222.        Temp4=MonsterRecord.Treasure(Temp2)
  1223.        Edit.Data(Temp2)=Nul
  1224.        If Temp4>False Then
  1225.           Get 8,Temp4,TreasureRecord
  1226.           Edit.Data(Temp2)=TreasureRecord.TreasureName
  1227.        Endif
  1228.     Next
  1229.  Case 7
  1230.     If MonsterRecord.Psionic Then
  1231.        Edit.Data(1)="Y"
  1232.     Else
  1233.        Edit.Data(1)="N"
  1234.     Endif
  1235.  Case 8
  1236.     If MonsterRecord.Psionic=False Or MonsterRecord.PsionicSpell=False Then
  1237.        Edit.Data(1)=Nul
  1238.        Strng=Chr$(27)+"[1;37;40m"
  1239.        Call Scrn(Strng)
  1240.        Strng=Chr$(27)+"[21;21H"
  1241.        Call Scrn(Strng)
  1242.        Strng=Space$(20)
  1243.        Call Scrn(Strng)
  1244.     Else
  1245.        Get 4,MonsterRecord.PsionicSpell,SpellRecord
  1246.        Edit.Data(1)=SpellRecord.SpellName
  1247.     Endif
  1248.  Case 9
  1249.     Edit.Data(1)=Mid$(Str$(MonsterRecord.NumberAppearing),2)
  1250.  Case 10
  1251.     If MonsterRecord.Poison Then
  1252.        Edit.Data(1)="Y"
  1253.     Else
  1254.        Edit.Data(1)="N"
  1255.     Endif
  1256.  Case 11
  1257.     Edit.Data(1)=Mid$(Str$(MonsterRecord.PoisonPercent),2)
  1258.  Case 12
  1259.     If MonsterRecord.LevelDrain Then
  1260.        Edit.Data(1)="Y"
  1261.     Else
  1262.        Edit.Data(1)="N"
  1263.     Endif
  1264.  Case 13
  1265.     Edit.Data(1)=Mid$(Str$(MonsterRecord.DrainPercent),2)
  1266.  Case 14
  1267.     If MonsterRecord.Block Then
  1268.        Edit.Data(1)="Y"
  1269.     Else
  1270.        Edit.Data(1)="N"
  1271.     Endif
  1272.  Case 15
  1273.     Edit.Data(1)=Mid$(Str$(MonsterRecord.BlockPercent),2)
  1274.  Case 16
  1275.     If MonsterRecord.Prevent Then
  1276.        Edit.Data(1)="Y"
  1277.     Else
  1278.        Edit.Data(1)="N"
  1279.     Endif
  1280.  Case 17
  1281.     Edit.Data(1)=Mid$(Str$(MonsterRecord.PreventPercent),2)
  1282.  Case 18
  1283.     If MonsterRecord.Follow Then
  1284.        Edit.Data(1)="Y"
  1285.     Else
  1286.        Edit.Data(1)="N"
  1287.     Endif
  1288.  Case 19
  1289.     Edit.Data(1)=Mid$(Str$(MonsterRecord.FollowPercent),2)
  1290.  Case 20
  1291.     Edit.Data(1)=Mid$(Str$(MonsterRecord.Teleport),2)
  1292.  Case 21
  1293.     If MonsterRecord.Spell Then
  1294.        Edit.Data(1)="Y"
  1295.     Else
  1296.        Edit.Data(1)="N"
  1297.     Endif
  1298.  Case 22
  1299.     Edit.Data(1)=Mid$(Str$(MonsterRecord.SpellPercent),2)
  1300.  Case 23
  1301.     If MonsterRecord.Spell>False And_
  1302.     MonsterRecord.Spell<=Lof(4)/Len(SpellRecord) Then
  1303.        Get 4,MonsterRecord.Spell,SpellRecord
  1304.        Edit.Data(1)=Left$(SpellRecord.SpellName,20)
  1305.     Else
  1306.        Strng=Chr$(27)+"[1;37;40m"
  1307.        Call Scrn(Strng)
  1308.        Strng=Chr$(27)+"[17;51H"
  1309.        Call Scrn(Strng)
  1310.        Edit.Data(1)=Nul
  1311.        Strng=Space$(20)
  1312.        Call Scrn(Strng)
  1313.     Endif
  1314.  End Select
  1315.  Strng=Chr$(29)+Chr$(18)+" Cursor Edit   "
  1316.  If Selection=6 Then
  1317.     Out2="<esc> Exit Field"
  1318.  Else
  1319.     Out2=Chr$(60)+Chr$(217)+" Exit Field"
  1320.  Endif
  1321.  Call StatusLine
  1322.  Edit.Data(1)=Rtrim$(Edit.Data(1))
  1323.  Call ScreenEdit
  1324.  Select Case Selection
  1325.  Case 1
  1326.     MonsterRecord.MonsterName=Lcase$(Edit.Data(1))
  1327.  Case 2
  1328.     MonsterRecord.PluralName=Lcase$(Edit.Data(1))
  1329.  Case 3
  1330.     MonsterRecord.Level=Val(Edit.Data(1))
  1331.  Case 4
  1332.     MonsterRecord.Hits=Val(Edit.Data(1))
  1333.  Case 5
  1334.     MonsterRecord.Experience=Val(Edit.Data(1))
  1335.  Case 6
  1336.     For Temp2=1 To 5
  1337.        Temp1=False
  1338.        Edit.Data(Temp2)=Rtrim$(Edit.Data(Temp2))
  1339.        If Edit.Data(Temp2)<>Nul Then
  1340.           Edit.Data(Temp2)=Lcase$(Edit.Data(Temp2))
  1341.           For Temp3=1 To Lof(8)/Len(TreasureRecord)
  1342.              Get 8,Temp3,TreasureRecord
  1343.              If Left$(TreasureRecord.TreasureName,_
  1344.              Len(Edit.Data(Temp2)))=Edit.Data(Temp2) Then
  1345.                 Temp1=Temp3
  1346.                 Exit For
  1347.              Endif
  1348.           Next
  1349.        Endif
  1350.        MonsterRecord.Treasure(Temp2)=Temp1
  1351.     Next
  1352.  Case 7
  1353.     If Ucase$(Edit.Data(1))="Y" Then
  1354.        MonsterRecord.Psionic=True
  1355.        TempX=Selection
  1356.        Call ShowNonplayer
  1357.        Next.Field=8
  1358.        Call ShowField
  1359.        TempE=True
  1360.        Call NonplayerEdit
  1361.        Exit Sub
  1362.     Endif
  1363.     If Ucase$(Edit.Data(1))="N" Then
  1364.        MonsterRecord.Psionic=False
  1365.        MonsterRecord.PsionicSpell=False
  1366.        Call ShowNonplayer(Selection+1)
  1367.     Endif
  1368.  Case 8
  1369.     Edit.Data(1)=Rtrim$(Edit.Data(1))
  1370.     Edit.Data(1)=Lcase$(Edit.Data(1))
  1371.     If Edit.Data(1)=Nul Then
  1372.        MonsterRecord.Psionic=False
  1373.        MonsterRecord.PsionicSpell=False
  1374.        Call ShowNonplayer(Selection-1)
  1375.     Else
  1376.        For Temp2=1 To Lof(4)/Len(SpellRecord)
  1377.           Get 4,Temp2,SpellRecord
  1378.           If Left$(SpellRecord.SpellName,Len(Edit.Data(1)))=Edit.Data(1) Then
  1379.              If SpellRecord.Psionic Then
  1380.                 MonsterRecord.Psionic=True
  1381.                 MonsterRecord.PsionicSpell=Temp2
  1382.                 If TempE=False Then
  1383.                    Call ShowNonplayer(Selection-1)
  1384.                 Endif
  1385.                 Exit Sub
  1386.              Endif
  1387.           Endif
  1388.        Next
  1389.        MonsterRecord.Psionic=False
  1390.        MonsterRecord.PsionicSpell=False
  1391.        Call ShowNonplayer(Selection-1)
  1392.        Strng="The psi spell was not found in the spell file."
  1393.        Call ErrorMessage
  1394.     Endif
  1395.  Case 9
  1396.     MonsterRecord.NumberAppearing=1
  1397.  Case 10
  1398.     MonsterRecord.Poison=False
  1399.     MonsterRecord.PoisonPercent=False
  1400.     If Ucase$(Edit.Data(1))="Y" Then
  1401.        MonsterRecord.Poison=True
  1402.        Next.Field=11
  1403.        Call ShowField
  1404.        TempX=Selection
  1405.        Call ShowNonplayer
  1406.        Call NonplayerEdit
  1407.        Exit Sub
  1408.     Endif
  1409.  Case 11
  1410.     MonsterRecord.PoisonPercent=Int(Val(Edit.Data(1)))
  1411.  Case 12
  1412.     MonsterRecord.LevelDrain=False
  1413.     MonsterRecord.DrainPercent=False
  1414.     If Ucase$(Edit.Data(1))="Y" Then
  1415.        MonsterRecord.LevelDrain=True
  1416.        Next.Field=13
  1417.        Call ShowField
  1418.        TempX=Selection
  1419.        Call ShowNonplayer
  1420.        Call NonplayerEdit
  1421.        Exit Sub
  1422.     Endif
  1423.  Case 13
  1424.     MonsterRecord.DrainPercent=Int(Val(Edit.Data(1)))
  1425.  Case 14
  1426.     MonsterRecord.Block=False
  1427.     MonsterRecord.BlockPercent=False
  1428.     If Ucase$(Edit.Data(1))="Y" Then
  1429.        MonsterRecord.Block=True
  1430.        Next.Field=15
  1431.        Call ShowField
  1432.        TempX=Selection
  1433.        Call ShowNonplayer
  1434.        Call NonplayerEdit
  1435.        Exit Sub
  1436.     Endif
  1437.  Case 15
  1438.     MonsterRecord.BlockPercent=Int(Val(Edit.Data(1)))
  1439.  Case 16
  1440.     MonsterRecord.Prevent=False
  1441.     MonsterRecord.PreventPercent=False
  1442.     If Ucase$(Edit.Data(1))="Y" Then
  1443.        MonsterRecord.Prevent=True
  1444.        Next.Field=17
  1445.        Call ShowField
  1446.        TempX=Selection
  1447.        Call ShowNonplayer
  1448.        Call NonplayerEdit
  1449.        Exit Sub
  1450.     Endif
  1451.  Case 17
  1452.     MonsterRecord.PreventPercent=Int(Val(Edit.Data(1)))
  1453.  Case 18
  1454.     MonsterRecord.Follow=False
  1455.     MonsterRecord.FollowPercent=False
  1456.     MonsterRecord.Teleport=False
  1457.     If Ucase$(Edit.Data(1))="Y" Then
  1458.        MonsterRecord.Follow=True
  1459.        Next.Field=19
  1460.        Call ShowField
  1461.        TempX=Selection
  1462.        Call ShowNonplayer
  1463.        Call NonplayerEdit
  1464.        Exit Sub
  1465.     Endif
  1466.  Case 19
  1467.     MonsterRecord.FollowPercent=Int(Val(Edit.Data(1)))
  1468.  Case 20
  1469.     MonsterRecord.Teleport=Int(Val(Edit.Data(1)))
  1470.  Case 21
  1471.     MonsterRecord.Spell=False
  1472.     MonsterRecord.SpellPercent=False
  1473.     Call ShowNonplayer(Selection+1)
  1474.     If Ucase$(Edit.Data(1))="Y" Then
  1475.        MonsterRecord.Spell=True
  1476.        TempX=Selection
  1477.        Call ShowNonplayer
  1478.        Next.Field=22
  1479.        Call ShowField
  1480.        Call NonplayerEdit
  1481.        Exit Sub
  1482.     Endif
  1483.  Case 22
  1484.     MonsterRecord.SpellPercent=Int(Val(Edit.Data(1)))
  1485.  Case 23
  1486.     Edit.Data(1)=Lcase$(Edit.Data(1))
  1487.     Edit.Data(1)=Rtrim$(Edit.Data(1))
  1488.     If Edit.Data(1)=Nul Then
  1489.        MonsterRecord.Spell=False
  1490.        MonsterRecord.SpellPercent=False
  1491.     Else
  1492.        TempA=False
  1493.        For Temp2=1 To Lof(4)/Len(SpellRecord)
  1494.           Get 4,Temp2,SpellRecord
  1495.           If Left$(SpellRecord.SpellName,Len(Edit.Data(1)))=Edit.Data(1) Then
  1496.              TempA=True
  1497.              MonsterRecord.Spell=Temp2
  1498.           Endif
  1499.        Next
  1500.        If TempA=False Then
  1501.           MonsterRecord.Spell=False
  1502.           MonsterRecord.SpellPercent=False
  1503.           Strng="The spell was not found in the spell file."
  1504.           Call ErrorMessage
  1505.        Endif
  1506.     Endif
  1507.     Call ShowNonplayer(21)
  1508.     Call ShowNonplayer(22)
  1509.  End Select
  1510. 10041
  1511.  Exit Sub
  1512. 10042
  1513.  Resume 10041
  1514. End Sub
  1515.  
  1516. Sub SpellEdit
  1517.  On Local Error Goto 10052
  1518.  Restore SpellEditData
  1519.  For TempX=1 To Selection
  1520.     Read Xcoor, Ycoor, Column, Line.Length, Max.Lines, Row, Line.Number
  1521.  Next
  1522.  Select Case Selection
  1523.  Case 1
  1524.     Edit.Data(1)=SpellRecord.SpellName
  1525.  Case 2
  1526.     Edit.Data(1)=Mid$(Str$(SpellRecord.Teleport),2)
  1527.  Case 3
  1528.     Edit.Data(1)=Mid$(Str$(SpellRecord.Level),2)
  1529.  Case 4
  1530.     Call DisplaySpellTypes
  1531.     Edit.Data(1)=Mid$(Str$(SpellRecord.SpellType),2)
  1532.  Case 5
  1533.     If SpellRecord.Psionic Then
  1534.        Edit.Data(1)="Y"
  1535.     Else
  1536.        Edit.Data(1)="N"
  1537.     Endif
  1538.  Case 6
  1539.     Select Case SpellRecord.PsionicMode
  1540.     Case 1
  1541.        Edit.Data(1)="A"
  1542.     Case 2
  1543.        Edit.Data(1)="D"
  1544.     Case Else
  1545.        Edit.Data(1)="?"
  1546.     End Select
  1547.  Case 7
  1548.     If SpellRecord.Equation Then
  1549.        Edit.Data(1)="Y"
  1550.     Else
  1551.        Edit.Data(1)="N"
  1552.     Endif
  1553.  Case 8
  1554.     Edit.Data(1)=Lcase$(SpellRecord.Chant)
  1555.  Case 9
  1556.     Edit.Data(1)=SpellRecord.Desc
  1557.  Case 10
  1558.     If SpellRecord.ClassType And Class1 Then
  1559.        Edit.Data(1)="Y"
  1560.     Else
  1561.        Edit.Data(1)="N"
  1562.     Endif
  1563.  Case 11
  1564.     If SpellRecord.ClassType And Class2 Then
  1565.        Edit.Data(1)="Y"
  1566.     Else
  1567.        Edit.Data(1)="N"
  1568.     Endif
  1569.  Case 12
  1570.     If SpellRecord.ClassType And Class3 Then
  1571.        Edit.Data(1)="Y"
  1572.     Else
  1573.        Edit.Data(1)="N"
  1574.     Endif
  1575.  Case 13
  1576.     If SpellRecord.ClassType And Class4 Then
  1577.        Edit.Data(1)="Y"
  1578.     Else
  1579.        Edit.Data(1)="N"
  1580.     Endif
  1581.  Case 14
  1582.     If SpellRecord.ClassType And Class5 Then
  1583.        Edit.Data(1)="Y"
  1584.     Else
  1585.        Edit.Data(1)="N"
  1586.     Endif
  1587.  Case 15
  1588.     If SpellRecord.ClassType And Class6 Then
  1589.        Edit.Data(1)="Y"
  1590.     Else
  1591.        Edit.Data(1)="N"
  1592.     Endif
  1593.  Case 16
  1594.     If SpellRecord.ClassType And Class7 Then
  1595.        Edit.Data(1)="Y"
  1596.     Else
  1597.        Edit.Data(1)="N"
  1598.     Endif
  1599.  Case 17
  1600.     If SpellRecord.ClassType And Class8 Then
  1601.        Edit.Data(1)="Y"
  1602.     Else
  1603.        Edit.Data(1)="N"
  1604.     Endif
  1605.  Case 18
  1606.     For Temp2=1 To 5
  1607.        Temp4=SpellRecord.Ingred(Temp2)
  1608.        Edit.Data(Temp2)=Nul
  1609.        If Temp4>False Then
  1610.           Get 8,Temp4,TreasureRecord
  1611.           Edit.Data(Temp2)=TreasureRecord.TreasureName
  1612.        Endif
  1613.     Next
  1614.  Case 19
  1615.     If SpellRecord.SpellFlag And Use.Spell.Type Then
  1616.        Edit.Data(1)="Y"
  1617.     Else
  1618.        Edit.Data(1)="N"
  1619.     Endif
  1620.  Case 20
  1621.     If SpellRecord.SpellFlag And Scroll.Spell.Type Then
  1622.        Edit.Data(1)="Y"
  1623.     Else
  1624.        Edit.Data(1)="N"
  1625.     Endif
  1626.  Case 21
  1627.     If SpellRecord.SpellFlag And Cast.Spell.Type Then
  1628.        Edit.Data(1)="Y"
  1629.     Else
  1630.        Edit.Data(1)="N"
  1631.     Endif
  1632.  End Select
  1633.  Strng=Chr$(29)+Chr$(18)+" Cursor Edit   "
  1634.  Out2=Chr$(60)+Chr$(217)+" Exit Field"
  1635.  Call StatusLine
  1636.  Edit.Data(1)=Rtrim$(Edit.Data(1))
  1637.  Call ScreenEdit
  1638.  Select Case Selection
  1639.  Case 1
  1640.     SpellRecord.SpellName=Lcase$(Edit.Data(1))
  1641.  Case 2
  1642.     SpellRecord.Teleport=Int(Val(Edit.Data(1)))
  1643.  Case 3
  1644.     SpellRecord.Level=Int(Val(Edit.Data(1)))
  1645.  Case 4
  1646.     SpellRecord.SpellType=Int(Val(Edit.Data(1)))
  1647.     Strng=Chr$(27)+"[1;37;44m"
  1648.     Call Scrn(Strng)
  1649.     For TempX=3 To 12
  1650.        Strng=Chr$(27)+"["+Mid$(Str$(TempX),2)+";32H"
  1651.        Call Scrn(Strng)
  1652.        Strng=Space$(48)
  1653.        Call Scrn(Strng)
  1654.     Next
  1655.     For TempX=13 To 14
  1656.        Strng=Chr$(27)+"["+Mid$(Str$(TempX),2)+";47H"
  1657.        Call Scrn(Strng)
  1658.        Strng=Space$(33)
  1659.        Call Scrn(Strng)
  1660.     Next
  1661.     Strng=Chr$(27)+"[1;33;44m"
  1662.     Call Scrn(Strng)
  1663.     For Temp2=18 To 21
  1664.        Strng=Chr$(27)+"["+Mid$(Str$(Array.Data(Temp2,1)),2)+";"+_
  1665.        Mid$(Str$(Array.Data(Temp2,2)),2)+"H"
  1666.        Call Scrn(Strng)
  1667.        Strng=Title.Data(Temp2)
  1668.        Call Scrn(Strng)
  1669.     Next
  1670.     TempX=False
  1671.     Call ShowSpell
  1672.     For TempX=17 To 21
  1673.        Call ShowSpell
  1674.     Next
  1675.  Case 5
  1676.     SpellRecord.PsionicMode=False
  1677.     SpellRecord.Psionic=False
  1678.     SpellRecord.SpellType=False
  1679.     If Ucase$(Edit.Data(1))="Y" Then
  1680.        SpellRecord.SpellType=15
  1681.        SpellRecord.Psionic=True
  1682.     Endif
  1683.  Case 6
  1684.     If Ucase$(Edit.Data(1))="A" Then
  1685.        SpellRecord.PsionicMode=1
  1686.     Endif
  1687.     If Ucase$(Edit.Data(1))="D" Then
  1688.        SpellRecord.PsionicMode=2
  1689.     Endif
  1690.  Case 7
  1691.     If Ucase$(Edit.Data(1))="Y" Then
  1692.        Restore SpellEditData2
  1693.        Read Xcoor, Ycoor, Column, Line.Length, Max.Lines, Row, Line.Number
  1694.        Edit.Data(1)=Rtrim$(SpellRecord.SpellEquate)
  1695.        Strng=Chr$(29)+Chr$(18)+" Cursor Edit   "
  1696.        Out2=Chr$(60)+Chr$(217)+" Exit Field"
  1697.        Call StatusLine
  1698.        Call ScreenEdit
  1699.        SpellRecord.Equation=True
  1700.        SpellRecord.SpellEquate=Ucase$(Edit.Data$(1))
  1701.     Else
  1702.        SpellRecord.Equation=False
  1703.        SpellRecord.SpellEquate=Nul
  1704.     Endif
  1705.  Case 8
  1706.     SpellRecord.Chant=Ucase$(Edit.Data(1))
  1707.  Case 9
  1708.     SpellRecord.Desc=Edit.Data(1)
  1709.  Case 10 To 17
  1710.     If Ucase$(Edit.Data(1))="N" Then
  1711.        SpellRecord.ClassType=SpellRecord.ClassType And Not 2^(Selection-8)
  1712.     Endif
  1713.     If Ucase$(Edit.Data(1))="Y" Then
  1714.        SpellRecord.ClassType=SpellRecord.ClassType Or 2^(Selection-8)
  1715.     Endif
  1716.  Case 18
  1717.     For Temp2=1 To 5
  1718.        Temp1=False
  1719.        Edit.Data(Temp2)=Rtrim$(Edit.Data(Temp2))
  1720.        If Edit.Data(Temp2)<>Nul Then
  1721.           Edit.Data(Temp2)=Lcase$(Edit.Data(Temp2))
  1722.           For Temp3=1 To Lof(8)/Len(TreasureRecord)
  1723.              Get 8,Temp3,TreasureRecord
  1724.              If Left$(TreasureRecord.TreasureName,_
  1725.              Len(Edit.Data(Temp2)))=Edit.Data(Temp2) Then
  1726.                 Temp1=Temp3
  1727.                 Exit For
  1728.              Endif
  1729.           Next
  1730.        Endif
  1731.        SpellRecord.Ingred(Temp2)=Temp1
  1732.     Next
  1733.  Case 19
  1734.     If Ucase$(Edit.Data(1))="Y" Then
  1735.        SpellRecord.SpellFlag=SpellRecord.SpellFlag Or Use.Spell.Type
  1736.     Else
  1737.        SpellRecord.SpellFlag=SpellRecord.SpellFlag And Not Use.Spell.Type
  1738.     Endif
  1739.  Case 20
  1740.     If Ucase$(Edit.Data(1))="Y" Then
  1741.        SpellRecord.SpellFlag=SpellRecord.SpellFlag Or Scroll.Spell.Type
  1742.     Else
  1743.        SpellRecord.SpellFlag=SpellRecord.SpellFlag And Not Scroll.Spell.Type
  1744.     Endif
  1745.  Case 21
  1746.     If Ucase$(Edit.Data(1))="Y" Then
  1747.        SpellRecord.SpellFlag=SpellRecord.SpellFlag Or Cast.Spell.Type
  1748.     Else
  1749.        SpellRecord.SpellFlag=SpellRecord.SpellFlag And Not Cast.Spell.Type
  1750.     Endif
  1751.  End Select
  1752. 10051
  1753.  Exit Sub
  1754. 10052
  1755.  Resume 10051
  1756. End Sub
  1757.  
  1758. Sub DisplaySpellTypes
  1759.  On Local Error Goto 10062
  1760.  Strng=Chr$(27)+"[1;37;44m"
  1761.  Call Scrn(Strng)
  1762.  Strng=Chr$(27)+"[3;32H"
  1763.  Call Scrn(Strng)
  1764.  Strng=Space$(48)
  1765.  Call Scrn(Strng)
  1766.  Strng=Chr$(27)+"[3;47H"
  1767.  Call Scrn(Strng)
  1768.  Strng="Spell Type Numbers"
  1769.  Call Scrn(Strng)
  1770.  Strng=Chr$(27)+"[4;32H"
  1771.  Call Scrn(Strng)
  1772.  Strng=Space$(48)
  1773.  Call Scrn(Strng)
  1774.  Strng=Chr$(27)+"[5;32H"
  1775.  Call Scrn(Strng)
  1776.  Strng=Space$(48)
  1777.  Call Scrn(Strng)
  1778.  Strng=Chr$(27)+"[5;32H"
  1779.  Call Scrn(Strng)
  1780.  Strng="1)Enchant       9)Level Drain   19)Intoxicate"
  1781.  Call Scrn(Strng)
  1782.  Strng=Chr$(27)+"[6;32H"
  1783.  Call Scrn(Strng)
  1784.  Strng=Space$(48)
  1785.  Call Scrn(Strng)
  1786.  Strng=Chr$(27)+"[6;32H"
  1787.  Call Scrn(Strng)
  1788.  Strng="2)Offense      10)Teleport      20)Set Trap"
  1789.  Call Scrn(Strng)
  1790.  Strng=Chr$(27)+"[7;32H"
  1791.  Call Scrn(Strng)
  1792.  Strng=Space$(48)
  1793.  Call Scrn(Strng)
  1794.  Strng=Chr$(27)+"[7;32H"
  1795.  Call Scrn(Strng)
  1796.  Strng="3)Bless        11)Befuddle      21)Hide"
  1797.  Call Scrn(Strng)
  1798.  Strng=Chr$(27)+"[8;32H"
  1799.  Call Scrn(Strng)
  1800.  Strng=Space$(48)
  1801.  Call Scrn(Strng)
  1802.  Strng=Chr$(27)+"[8;32H"
  1803.  Call Scrn(Strng)
  1804.  Strng="4)Wish         12)Turn Undead   22)Search"
  1805.  Call Scrn(Strng)
  1806.  Strng=Chr$(27)+"[9;32H"
  1807.  Call Scrn(Strng)
  1808.  Strng=Space$(48)
  1809.  Call Scrn(Strng)
  1810.  Strng=Chr$(27)+"[9;32H"
  1811.  Call Scrn(Strng)
  1812.  Strng="5)Poison       13)Pass Door     23)Invisibility"
  1813.  Call Scrn(Strng)
  1814.  Strng=Chr$(27)+"[10;32H"
  1815.  Call Scrn(Strng)
  1816.  Strng=Space$(48)
  1817.  Call Scrn(Strng)
  1818.  Strng=Chr$(27)+"[10;32H"
  1819.  Call Scrn(Strng)
  1820.  Strng="6)Vigor        14)Conjure       24)Identify"
  1821.  Call Scrn(Strng)
  1822.  Strng=Chr$(27)+"[11;32H"
  1823.  Call Scrn(Strng)
  1824.  Strng=Space$(48)
  1825.  Call Scrn(Strng)
  1826.  Strng=Chr$(27)+"[11;32H"
  1827.  Call Scrn(Strng)
  1828.  Strng="7)Heal         15)Psionic       25)Enlighten"
  1829.  Call Scrn(Strng)
  1830.  Strng=Chr$(27)+"[12;32H"
  1831.  Call Scrn(Strng)
  1832.  Strng=Space$(48)
  1833.  Call Scrn(Strng)
  1834.  Strng=Chr$(27)+"[12;32H"
  1835.  Call Scrn(Strng)
  1836.  Strng="8)Curepoison   16)Detect Lock   26)Illuminate"
  1837.  Call Scrn(Strng)
  1838.  Strng=Chr$(27)+"[13;47H"
  1839.  Call Scrn(Strng)
  1840.  Strng=Space$(33)
  1841.  Call Scrn(Strng)
  1842.  Strng=Chr$(27)+"[13;47H"
  1843.  Call Scrn(Strng)
  1844.  Strng="17)Detect Evil   27)Psyche"
  1845.  Call Scrn(Strng)
  1846.  Strng=Chr$(27)+"[14;47H"
  1847.  Call Scrn(Strng)
  1848.  Strng=Space$(33)
  1849.  Call Scrn(Strng)
  1850.  Strng=Chr$(27)+"[14;47H"
  1851.  Call Scrn(Strng)
  1852.  Strng="18)Detect Trap   28)Telepathy"
  1853.  Call Scrn(Strng)
  1854. 10061
  1855.  Exit Sub
  1856. 10062
  1857.  Resume 10061
  1858. End Sub
  1859.  
  1860. Sub ActionEdit
  1861.  On Local Error Goto 10072
  1862.  Static Hits.Temp
  1863.  Restore ActionEditData
  1864.  For TempX=1 To Selection
  1865.     Read Xcoor, Ycoor, Column, Line.Length, Max.Lines, Row, Line.Number
  1866.  Next
  1867.  Select Case Selection
  1868.  Case 1
  1869.     Edit.Data(1)=Mid$(Str$(RoomRecord.MonsterTrigger),2)
  1870.  Case 2
  1871.     Edit.Data(1)=Mid$(Str$(RoomRecord.MonsterTalk),2)
  1872.  Case 3
  1873.     Edit.Data(1)=Mid$(Str$(RoomRecord.Teleport),2)
  1874.  Case 4
  1875.     If RoomRecord.SpellTrigger>False And_
  1876.     RoomRecord.SpellTrigger<=Lof(4)/Len(SpellRecord) Then
  1877.        Get 4,RoomRecord.SpellTrigger,SpellRecord
  1878.        Edit.Data(1)=Left$(SpellRecord.SpellName,30)
  1879.     Else
  1880.        Strng=Chr$(27)+"[1;37;40m"
  1881.        Call Scrn(Strng)
  1882.        Strng=Chr$(27)+"[11;2H"
  1883.        Call Scrn(Strng)
  1884.        Strng=Space$(30)
  1885.        Call Scrn(Strng)
  1886.        Edit.Data(1)=Space$(30)
  1887.     Endif
  1888.  Case 5
  1889.     Edit.Data(1)=Mid$(Str$(Abs(RoomRecord.Level)),2)
  1890.  Case 6
  1891.     Edit.Data(1)="n/a"
  1892.     If RoomRecord.Level<False Then
  1893.        Edit.Data(1)="min"
  1894.     Endif
  1895.     If RoomRecord.Level>False Then
  1896.        Edit.Data(1)="max"
  1897.     Endif
  1898.  Case 7
  1899.     If RoomRecord.Restrictions And Direction1 Then
  1900.        Edit.Data(1)="Y"
  1901.     Else
  1902.        Edit.Data(1)="N"
  1903.     Endif
  1904.  Case 8
  1905.     If RoomRecord.Restrictions And Direction2 Then
  1906.        Edit.Data(1)="Y"
  1907.     Else
  1908.        Edit.Data(1)="N"
  1909.     Endif
  1910.  Case 9
  1911.     If RoomRecord.Restrictions And Direction3 Then
  1912.        Edit.Data(1)="Y"
  1913.     Else
  1914.        Edit.Data(1)="N"
  1915.     Endif
  1916.  Case 10
  1917.     If RoomRecord.Restrictions And Direction4 Then
  1918.        Edit.Data(1)="Y"
  1919.     Else
  1920.        Edit.Data(1)="N"
  1921.     Endif
  1922.  Case 11
  1923.     If RoomRecord.Restrictions And Direction5 Then
  1924.        Edit.Data(1)="Y"
  1925.     Else
  1926.        Edit.Data(1)="N"
  1927.     Endif
  1928.  Case 12
  1929.     If RoomRecord.Restrictions And Direction6 Then
  1930.        Edit.Data(1)="Y"
  1931.     Else
  1932.        Edit.Data(1)="N"
  1933.     Endif
  1934.  Case 13
  1935.     If RoomRecord.Restrictions And Direction7 Then
  1936.        Edit.Data(1)="Y"
  1937.     Else
  1938.        Edit.Data(1)="N"
  1939.     Endif
  1940.  Case 14
  1941.     If RoomRecord.Restrictions And Direction8 Then
  1942.        Edit.Data(1)="Y"
  1943.     Else
  1944.        Edit.Data(1)="N"
  1945.     Endif
  1946.  Case 15
  1947.     If RoomRecord.Restrictions And Direction9 Then
  1948.        Edit.Data(1)="Y"
  1949.     Else
  1950.        Edit.Data(1)="N"
  1951.     Endif
  1952.  Case 16
  1953.     If RoomRecord.Restrictions And Direction10 Then
  1954.        Edit.Data(1)="Y"
  1955.     Else
  1956.        Edit.Data(1)="N"
  1957.     Endif
  1958.  Case 17
  1959.     If RoomRecord.Restrictions And Direction11 Then
  1960.        Edit.Data(1)="Y"
  1961.     Else
  1962.        Edit.Data(1)="N"
  1963.     Endif
  1964.  Case 18
  1965.     If RoomRecord.Restrictions And Direction12 Then
  1966.        Edit.Data(1)="Y"
  1967.     Else
  1968.        Edit.Data(1)="N"
  1969.     Endif
  1970.  Case 19
  1971.     Edit.Data(1)=Mid$(Str$(RoomRecord.HealthRate),2)
  1972.  Case 20
  1973.     Edit.Data(1)=Mid$(Str$(RoomRecord.EncounterRate),2)
  1974.  Case 21
  1975.     If RoomRecord.Fumble Then
  1976.        Edit.Data(1)="Y"
  1977.     Else
  1978.        Edit.Data(1)="N"
  1979.     Endif
  1980.  Case 22
  1981.     Select Case RoomRecord.Inventory
  1982.     Case 1
  1983.        Edit.Data(1)="W"
  1984.     Case 2
  1985.        Edit.Data(1)="S"
  1986.     Case 3
  1987.        Edit.Data(1)="A"
  1988.     Case 4
  1989.        Edit.Data(1)="M"
  1990.     Case Else
  1991.        Edit.Data(1)="?"
  1992.     End Select
  1993.  Case 23
  1994.     Edit.Data(1)="?"
  1995.     If RoomRecord.HitPoints>False Then
  1996.        Edit.Data(1)="F"
  1997.     Endif
  1998.     If RoomRecord.HitPoints<False Then
  1999.        Edit.Data(1)="V"
  2000.     Endif
  2001.  Case 24
  2002.     Edit.Data(1)=Mid$(Str$(Abs(RoomRecord.HitPoints)),2)
  2003.  Case 25
  2004.     Edit.Data(1)=Mid$(Str$(RoomRecord.RustRate),2,4)
  2005.  Case 26
  2006.     Edit.Data(1)=Mid$(Str$(RoomRecord.StealRate),2,4)
  2007.  End Select
  2008.  Strng=Chr$(29)+Chr$(18)+" Cursor Edit   "
  2009.  Out2=Chr$(60)+Chr$(217)+" Exit Field"
  2010.  Call StatusLine
  2011.  Call ScreenEdit
  2012.  Edit.Data(1)=Rtrim$(Edit.Data(1))
  2013.  Edit.Data(1)=Lcase$(Edit.Data(1))
  2014.  Select Case Selection
  2015.  Case 1
  2016.     RoomRecord.MonsterTrigger=Int(Val(Edit.Data(1)))
  2017.  Case 2
  2018.     RoomRecord.MonsterTalk=Int(Val(Edit.Data(1)))
  2019.  Case 3
  2020.     RoomRecord.Teleport=Int(Val(Edit.Data(1)))
  2021.  Case 3
  2022.     If Edit.Data(1)<>Nul Then
  2023.        For Temp2=1 To Lof(4)/Len(SpellRecord)
  2024.           Get 4,Temp2,SpellRecord
  2025.           If Left$(SpellRecord.SpellName,Len(Edit.Data(1)))=Edit.Data(1) Then
  2026.              RoomRecord.SpellTrigger=Temp2
  2027.              Exit Sub
  2028.           Endif
  2029.        Next
  2030.        Strng="The spell was not found in the spell file."
  2031.        Call ErrorMessage
  2032.        Strng=Chr$(27)+"[21;2H"
  2033.        Call Scrn(Strng)
  2034.        Strng=Space$(60)
  2035.        Call Scrn(Strng)
  2036.     Endif
  2037.     RoomRecord.SpellTrigger=False
  2038.  Case 5
  2039.     RoomRecord.Level=Int(Val(Edit.Data(1)))
  2040.     TempX=6
  2041.     Call ShowAction
  2042.  Case 6
  2043.     RoomRecord.Level=False
  2044.     If Edit.Data(1)="min" Then
  2045.        RoomRecord.Level=-Abs(RoomRecord.Level)
  2046.     Endif
  2047.     If Edit.Data(1)="max" Then
  2048.        RoomRecord.Level=Abs(RoomRecord.Level)
  2049.     Endif
  2050.     TempX=5
  2051.     Call ShowAction
  2052.  Case 7 To 18
  2053.     If Ucase$(Edit.Data(1))="Y" Then
  2054.        RoomRecord.Restrictions=RoomRecord.Restrictions Or 2^(Selection-6)
  2055.     Endif
  2056.     If Ucase$(Edit.Data(1))="N" Then
  2057.        RoomRecord.Restrictions=RoomRecord.Restrictions And Not 2^(Selection-6)
  2058.     Endif
  2059.  Case 19
  2060.     RoomRecord.HealthRate=Int(Val(Edit.Data(1)))
  2061.  Case 20
  2062.     RoomRecord.EncounterRate=Int(Val(Edit.Data(1)))
  2063.  Case 21
  2064.     If Ucase$(Edit.Data(1))="Y" Then
  2065.        RoomRecord.Fumble=True
  2066.     Endif
  2067.     If Ucase$(Edit.Data(1))="N" Then
  2068.        RoomRecord.Fumble=False
  2069.     Endif
  2070.  Case 22
  2071.     Select Case Ucase$(Edit.Data(1))
  2072.     Case "W"
  2073.        RoomRecord.Inventory=1
  2074.     Case "S"
  2075.        RoomRecord.Inventory=2
  2076.     Case "A"
  2077.        RoomRecord.Inventory=3
  2078.     Case "M"
  2079.        RoomRecord.Inventory=4
  2080.     Case Else
  2081.        RoomRecord.Inventory=False
  2082.     End Select
  2083.  Case 23
  2084.     Select Case Ucase$(Edit.Data(1))
  2085.     Case "F"
  2086.        Hits.Temp=1
  2087.        TempZ=Abs(RoomRecord.HitPoints)
  2088.        RoomRecord.HitPoints=1
  2089.        TempX=23
  2090.        Call ShowAction
  2091.        RoomRecord.HitPoints=TempZ
  2092.        Next.Field=24
  2093.        Call ShowField
  2094.        Call ActionEdit
  2095.        Exit Sub
  2096.     Case "V"
  2097.        Hits.Temp=True
  2098.        TempZ=-Abs(RoomRecord.HitPoints)
  2099.        RoomRecord.HitPoints=True
  2100.        TempX=23
  2101.        Call ShowAction
  2102.        RoomRecord.HitPoints=TempZ
  2103.        Next.Field=24
  2104.        Call ShowField
  2105.        Call ActionEdit
  2106.        Exit Sub
  2107.     Case Else
  2108.        Hits.Temp=False
  2109.        RoomRecord.HitPoints=False
  2110.        TempX=23
  2111.        Call ShowAction
  2112.        TempX=24
  2113.        Call ShowAction
  2114.     End Select
  2115.  Case 24
  2116.     If Hits.Temp=False Then
  2117.        Hits.Temp=1
  2118.     Endif
  2119.     RoomRecord.HitPoints=Val(Edit.Data(1))*Hits.Temp
  2120.     TempX=24
  2121.     Call ShowAction
  2122.     Next.Field=23
  2123.     Call ShowField
  2124.  Case 25
  2125.     RoomRecord.RustRate=Int(Val(Edit.Data(1)))
  2126.  Case 26
  2127.     RoomRecord.StealRate=Int(Val(Edit.Data(1)))
  2128.  End Select
  2129. 10071
  2130.  Exit Sub
  2131. 10072
  2132.  Resume 10071
  2133. End Sub
  2134.  
  2135. Sub UserEdit
  2136.  On Local Error Goto 10082
  2137.  Restore UserEditData
  2138.  For TempX=1 To Selection
  2139.     Read Xcoor, Ycoor, Column, Line.Length, Max.Lines, Row, Line.Number
  2140.  Next
  2141.  Select Case Selection
  2142.  Case 1
  2143.     Strng=UserRecord.CodeName
  2144.     Call Decrypt(Strng)
  2145.     Strng=Lcase$(Strng)
  2146.     Mid$(Strng,1,1)=Ucase$(Mid$(Strng,1,1))
  2147.     Edit.Data(1)=Strng
  2148.  Case 2
  2149.     Strng=UserRecord.PassWord
  2150.     Call Decrypt(Strng)
  2151.     Edit.Data(1)=Lcase$(Strng)
  2152.  Case 3
  2153.     Edit.Data(1)=Mid$(Str$(UserRecord.Level),2)
  2154.  Case 4
  2155.     Edit.Data(1)=Mid$(Str$(UserRecord.Room),2)
  2156.  Case 5
  2157.     If UserRecord.Race<1 Then
  2158.        UserRecord.Race=1
  2159.     Endif
  2160.     Edit.Data(1)=Rtrim$(Race(UserRecord.Race))
  2161.  Case 6
  2162.     Select Case UserRecord.ClassType
  2163.     Case 1
  2164.        Edit.Data(1)="F"
  2165.     Case 2
  2166.        Edit.Data(1)="M"
  2167.     Case 3
  2168.        Edit.Data(1)="T"
  2169.     Case 4
  2170.        Edit.Data(1)="C"
  2171.     Case 5
  2172.        Edit.Data(1)="P"
  2173.     Case 6
  2174.        Edit.Data(1)="R"
  2175.     Case 7
  2176.        Edit.Data(1)="D"
  2177.     Case 8
  2178.        Edit.Data(1)="L"
  2179.     Case 9
  2180.        Edit.Data(1)="A"
  2181.     Case 10
  2182.        Edit.Data(1)="*"
  2183.     Case Else
  2184.        Edit.Data(1)="?"
  2185.     End Select
  2186.  Case 7
  2187.     Select Case UserRecord.Align1
  2188.     Case Is<False
  2189.        Edit.Data(1)="Good"
  2190.     Case Is>False
  2191.        Edit.Data(1)="Evil"
  2192.     Case False
  2193.        Edit.Data(1)="Neutral"
  2194.     End Select
  2195.  Case 8
  2196.     Strng=UserRecord.ClassName
  2197.     Call Decrypt(Strng)
  2198.     Edit.Data(1)=Strng
  2199.  Case 9
  2200.     Select Case UserRecord.Proficiency
  2201.     Case 1
  2202.        Edit.Data(1)="B"
  2203.     Case 2
  2204.        Edit.Data(1)="P"
  2205.     Case 3
  2206.        Edit.Data(1)="S"
  2207.     Case 4
  2208.        Edit.Data(1)="T"
  2209.     Case Else
  2210.        Edit.Data(1)="?"
  2211.     End Select
  2212.  Case 10
  2213.     Edit.Data(1)=Mid$(Str$(UserRecord.Weapons(1)),2)
  2214.  Case 11
  2215.     Edit.Data(1)=Mid$(Str$(UserRecord.Weapons(2)),2)
  2216.  Case 12
  2217.     Edit.Data(1)=Mid$(Str$(UserRecord.Weapons(3)),2)
  2218.  Case 13
  2219.     Edit.Data(1)=Mid$(Str$(UserRecord.Weapons(4)),2)
  2220.  Case 14
  2221.     Edit.Data(1)=Mid$(Str$(UserRecord.FatigueMax),2)
  2222.  Case 15
  2223.     Edit.Data(1)=Mid$(Str$(UserRecord.VitalityMax),2)
  2224.  Case 16
  2225.     Edit.Data(1)=Mid$(Str$(UserRecord.MagicMax),2)
  2226.  Case 17
  2227.     Edit.Data(1)=Mid$(Str$(UserRecord.PsionicMax),2)
  2228.  Case 18
  2229.     Edit.Data(1)=Mid$(Str$(UserRecord.Experience),2)
  2230.  Case 19
  2231.     Edit.Data(1)=Mid$(Str$(UserRecord.Gold),2)
  2232.  Case 20
  2233.     Edit.Data(1)=Mid$(Str$(UserRecord.NumCalls),2)
  2234.  Case 21
  2235.     Edit.Data(1)=Mid$(Str$(UserRecord.Stats(1)),2)
  2236.  Case 22
  2237.     Edit.Data(1)=Mid$(Str$(UserRecord.Stats(2)),2)
  2238.  Case 23
  2239.     Edit.Data(1)=Mid$(Str$(UserRecord.Stats(3)),2)
  2240.  Case 24
  2241.     Edit.Data(1)=Mid$(Str$(UserRecord.Stats(4)),2)
  2242.  Case 25
  2243.     Edit.Data(1)=Mid$(Str$(UserRecord.Stats(5)),2)
  2244.  Case 26
  2245.     Edit.Data(1)=Mid$(Str$(UserRecord.Stats(6)),2)
  2246.  Case 27
  2247.     Edit.Data(1)=Mid$(Str$(UserRecord.Stats(7)),2)
  2248.  End Select
  2249.  Strng=Chr$(29)+Chr$(18)+" Cursor Edit   "
  2250.  Out2=Chr$(60)+Chr$(217)+" Exit Field"
  2251.  Call StatusLine
  2252.  Call ScreenEdit
  2253.  Select Case Selection
  2254.  Case 1
  2255.     Edit.Data(1)=Rtrim$(Edit.Data(1))
  2256.     If Lcase$(Edit.Data(1))=Deleted$ Then
  2257.        Strng=Lcase$(Edit.Data(1))
  2258.     Else
  2259.        Strng=Ucase$(Edit.Data(1))
  2260.     Endif
  2261.     Call Valid(Strng,30)
  2262.     If Strng<>Nul Then
  2263.        Call Encrypt(Strng,True)
  2264.        UserRecord.CodeName=Strng
  2265.     Endif
  2266.  Case 2
  2267.     Edit.Data(1)=Rtrim$(Edit.Data(1))
  2268.     If Lcase$(Edit.Data(1))=Deleted$ Then
  2269.        Strng=Lcase$(Edit.Data(1))
  2270.     Else
  2271.        Strng=Ucase$(Edit.Data(1))
  2272.     Endif
  2273.     Call Valid(Strng,20)
  2274.     If Strng<>Nul Then
  2275.        Call Encrypt(Strng,False)
  2276.        UserRecord.PassWord=Strng
  2277.     Endif
  2278.  Case 3
  2279.     UserRecord.Level=Val(Edit.Data(1))
  2280.  Case 4
  2281.     UserRecord.Room=Val(Edit.Data(1))
  2282.  Case 5
  2283.     Edit.Data(1)=Ucase$(Edit.Data(1))
  2284.     For Temp2=1 To 8
  2285.        Strng=Ucase$(Rtrim$(Race(Temp2)))
  2286.        If Left$(Strng,Len(Edit.Data(1)))=Edit.Data(1) Then
  2287.           UserRecord.Race=Temp2
  2288.           Exit For
  2289.        Endif
  2290.     Next
  2291.  Case 6
  2292.     Select Case Ucase$(Edit.Data(1))
  2293.     Case "F"
  2294.        UserRecord.ClassType=1
  2295.     Case "M"
  2296.        UserRecord.ClassType=2
  2297.     Case "T"
  2298.        UserRecord.ClassType=3
  2299.     Case "C"
  2300.        UserRecord.ClassType=4
  2301.     Case "P"
  2302.        UserRecord.ClassType=5
  2303.     Case "R"
  2304.        UserRecord.ClassType=6
  2305.     Case "D"
  2306.        UserRecord.ClassType=7
  2307.     Case "L"
  2308.        UserRecord.ClassType=8
  2309.     Case "A"
  2310.        UserRecord.ClassType=9
  2311.     Case "*"
  2312.        UserRecord.ClassType=10
  2313.     Case Else
  2314.        UserRecord.ClassType=False
  2315.     End Select
  2316.     UserRecord.ClassType=1
  2317.  Case 7
  2318.     Strng=Chr$(27)+"[13;12H"
  2319.     Call Scrn(Strng)
  2320.     Strng=Space$(7)
  2321.     Call Scrn(Strng)
  2322.     Strng=Chr$(27)+"[13;12H"
  2323.     Call Scrn(Strng)
  2324.     Select Case Ucase$(Edit.Data(1))
  2325.     Case "GOOD"
  2326.        UserRecord.Align1=True
  2327.        Call Scrn("Good")
  2328.     Case "EVIL"
  2329.        UserRecord.Align1=1
  2330.        Call Scrn("Evil")
  2331.     Case Else
  2332.        UserRecord.Align1=False
  2333.        Call Scrn("Neutral")
  2334.     End Select
  2335.     Restore UserEditData2
  2336.     Read Xcoor, Ycoor, Column, Line.Length, Max.Lines, Row, Line.Number
  2337.     Select Case UserRecord.Align2
  2338.     Case Is<False
  2339.        Edit.Data(1)="Lawful"
  2340.     Case Is>False
  2341.        Edit.Data(1)="Chaotic"
  2342.     Case False
  2343.        Edit.Data(1)="Neutral"
  2344.     End Select
  2345.     Call ScreenEdit
  2346.     Select Case Ucase$(Edit.Data(1))
  2347.     Case "LAWFUL"
  2348.        UserRecord.Align2=True
  2349.     Case "CHAOTIC"
  2350.        UserRecord.Align2=1
  2351.     Case Else
  2352.        UserRecord.Align2=False
  2353.     End Select
  2354.  Case 8
  2355.     Strng=Edit.Data(1)
  2356.     Call Valid(Strng,20)
  2357.     If Strng<>Nul Then
  2358.        Call Encrypt(Strng,True)
  2359.        UserRecord.ClassName=Strng
  2360.     Endif
  2361.  Case 9
  2362.     Select Case Ucase$(Edit.Data(1))
  2363.     Case "B"
  2364.        UserRecord.Proficiency=1
  2365.     Case "P"
  2366.        UserRecord.Proficiency=2
  2367.     Case "S"
  2368.        UserRecord.Proficiency=3
  2369.     Case "T"
  2370.        UserRecord.Proficiency=4
  2371.     Case Else
  2372.        UserRecord.Proficiency=False
  2373.     End Select
  2374.  Case 10
  2375.     UserRecord.Weapons(1)=Val(Edit.Data(1))
  2376.  Case 11
  2377.     UserRecord.Weapons(2)=Val(Edit.Data(1))
  2378.  Case 12
  2379.     UserRecord.Weapons(3)=Val(Edit.Data(1))
  2380.  Case 13
  2381.     UserRecord.Weapons(4)=Val(Edit.Data(1))
  2382.  Case 14
  2383.     UserRecord.FatigueMax=Val(Edit.Data(1))
  2384.  Case 15
  2385.     UserRecord.VitalityMax=Val(Edit.Data(1))
  2386.  Case 16
  2387.     UserRecord.MagicMax=Val(Edit.Data(1))
  2388.  Case 17
  2389.     UserRecord.PsionicMax=Val(Edit.Data(1))
  2390.  Case 18
  2391.     UserRecord.Experience=Val(Edit.Data(1))
  2392.  Case 19
  2393.     UserRecord.Gold=Val(Edit.Data(1))
  2394.  Case 20
  2395.     UserRecord.NumCalls=Val(Edit.Data(1))
  2396.  Case 21
  2397.     UserRecord.Stats(1)=Val(Edit.Data(1))
  2398.  Case 22
  2399.     UserRecord.Stats(2)=Val(Edit.Data(1))
  2400.  Case 23
  2401.     UserRecord.Stats(3)=Val(Edit.Data(1))
  2402.  Case 24
  2403.     UserRecord.Stats(4)=Val(Edit.Data(1))
  2404.  Case 25
  2405.     UserRecord.Stats(5)=Val(Edit.Data(1))
  2406.  Case 26
  2407.     UserRecord.Stats(6)=Val(Edit.Data(1))
  2408.  Case 27
  2409.     UserRecord.Stats(7)=Val(Edit.Data(1))
  2410.  End Select
  2411. 10081
  2412.  Exit Sub
  2413. 10082
  2414.  Resume 10081
  2415. End Sub
  2416.  
  2417. Sub ShowMonclass
  2418.  On Local Error Goto 10092
  2419.  If TempX=False Then
  2420.     Strng=Chr$(27)+"[1;33;44m"
  2421.     Call Scrn(Strng)
  2422.     Strng=Chr$(27)+"[2;11H"
  2423.     Call Scrn(Strng)
  2424.     Strng=Space$(5)
  2425.     Call Scrn(Strng)
  2426.     Strng=Chr$(27)+"[2;2H"
  2427.     Call Scrn(Strng)
  2428.     Strng="Monclass"+Str$(Monclass)
  2429.     Call Scrn(Strng)
  2430.  Endif
  2431.  If TempX>False Then
  2432.     Temp3=MonclassRecord.Monsters(TempX)
  2433.     If Temp3<1 Or Temp3>Lof(7)/Len(MonsterRecord) Then
  2434.        MonclassRecord.Monsters(TempX)=False
  2435.        If Temp3>False Then
  2436.           Strng="The monster number is not within the monster file range."
  2437.           Call MonclassErrorMessage
  2438.        Endif
  2439.        Strng=Chr$(27)+"[1;37;40m"
  2440.        Call Scrn(Strng)
  2441.        Strng=Chr$(27)+"["+Mid$(Str$(TempX*2+1),2)+";13H
  2442.        Call Scrn(Strng)
  2443.        Strng="0"+Space$(4)
  2444.        Call Scrn(Strng)
  2445.        Strng=Chr$(27)+"[1;33;44m"
  2446.        Call Scrn(Strng)
  2447.        Strng=Chr$(27)+"["+Mid$(Str$(TempX*2+2),2)+";2H"
  2448.        Call Scrn(Strng)
  2449.        Strng=Space$(60)
  2450.        Call Scrn(Strng)
  2451.     Else
  2452.        Strng=Chr$(27)+"[1;37;40m"
  2453.        Call Scrn(Strng)
  2454.        Strng=Chr$(27)+"["+Mid$(Str$(TempX*2+1),2)+";13H"
  2455.        Call Scrn(Strng)
  2456.        Strng=Space$(5)
  2457.        Call Scrn(Strng)
  2458.        Strng=Chr$(27)+"["+Mid$(Str$(TempX*2+1),2)+";13H"
  2459.        Call Scrn(Strng)
  2460.        Strng=Mid$(Str$(Temp3),2)
  2461.        Call Scrn(Strng)
  2462.        Strng=Chr$(27)+"[1;33;44m"
  2463.        Call Scrn(Strng)
  2464.        Get 7,Temp3,MonsterRecord
  2465.        Temp1=TempX*2+2
  2466.        Strng=Chr$(27)+"["+Mid$(Str$(Temp1),2)+";2H"
  2467.        Call Scrn(Strng)
  2468.        Strng=MonsterRecord.MonsterName
  2469.        Call Scrn(Strng)
  2470.        Strng=Chr$(27)+"["+Mid$(Str$(Temp1),2)+";20H"
  2471.        Call Scrn(Strng)
  2472.        Strng=Space$(5)
  2473.        Call Scrn(Strng)
  2474.        Strng=Chr$(27)+"["+Mid$(Str$(Temp1),2)+";20H"
  2475.        Call Scrn(Strng)
  2476.        Strng=Mid$(Str$(MonsterRecord.Hits),2)
  2477.        Call Scrn(Strng)
  2478.        Strng=Chr$(27)+"["+Mid$(Str$(Temp1),2)+";30H"
  2479.        Call Scrn(Strng)
  2480.        Strng=Space$(5)
  2481.        Call Scrn(Strng)
  2482.        Strng=Chr$(27)+"["+Mid$(Str$(Temp1),2)+";30H"
  2483.        Call Scrn(Strng)
  2484.        Strng=Mid$(Str$(MonsterRecord.Experience),2)
  2485.        Call Scrn(Strng)
  2486.        Strng=Chr$(27)+"["+Mid$(Str$(Temp1),2)+";40H"
  2487.        Call Scrn(Strng)
  2488.        Strng=Space$(5)
  2489.        Call Scrn(Strng)
  2490.        Strng=Chr$(27)+"["+Mid$(Str$(Temp1),2)+";40H"
  2491.        Call Scrn(Strng)
  2492.        Strng=Mid$(Str$(MonsterRecord.Level),2)
  2493.        Call Scrn(Strng)
  2494.        Strng=Chr$(27)+"["+Mid$(Str$(Temp1),2)+";50H"
  2495.        Call Scrn(Strng)
  2496.        If MonsterRecord.Poison Then
  2497.           Call Scrn("Y")
  2498.        Else
  2499.           Call Scrn("N")
  2500.        Endif
  2501.        Strng=Chr$(27)+"["+Mid$(Str$(Temp1),2)+";52H"
  2502.        Call Scrn(Strng)
  2503.        If MonsterRecord.LevelDrain Then
  2504.           Call Scrn("Y")
  2505.        Else
  2506.           Call Scrn("N")
  2507.        Endif
  2508.        Strng=Chr$(27)+"["+Mid$(Str$(Temp1),2)+";54H"
  2509.        Call Scrn(Strng)
  2510.        If MonsterRecord.Block Then
  2511.           Call Scrn("Y")
  2512.        Else
  2513.           Call Scrn("N")
  2514.        Endif
  2515.        Strng=Chr$(27)+"["+Mid$(Str$(Temp1),2)+";56H"
  2516.        Call Scrn(Strng)
  2517.        If MonsterRecord.Prevent Then
  2518.           Call Scrn("Y")
  2519.        Else
  2520.           Call Scrn("N")
  2521.        Endif
  2522.        Strng=Chr$(27)+"["+Mid$(Str$(Temp1),2)+";58H"
  2523.        Call Scrn(Strng)
  2524.        If MonsterRecord.Follow Then
  2525.           Call Scrn("Y")
  2526.        Else
  2527.           Call Scrn("N")
  2528.        Endif
  2529.     Endif
  2530.  Endif
  2531. 10091
  2532.  Exit Sub
  2533. 10092
  2534.  Resume 10091
  2535. End Sub
  2536.  
  2537. Sub MonclassScreen
  2538.  On Local Error Goto 10102
  2539.  Out3="Sysop Monclass Edit"
  2540.  Call DisplayBorder(Out3)
  2541.  Strng=Chr$(27)+"[1;37;40m"
  2542.  Call Scrn(Strng)
  2543.  Strng=Chr$(27)+"[3;2H"
  2544.  Call Scrn(Strng)
  2545.  Strng="Monster 1"
  2546.  Call Scrn(Strng)
  2547.  Strng=Chr$(27)+"[1;37;44m"
  2548.  Call Scrn(Strng)
  2549.  For Temp2=2 To 10
  2550.     Strng=Chr$(27)+"["+Mid$(Str$(Temp2*2+1),2)+";2H"
  2551.     Call Scrn(Strng)
  2552.     Strng="Monster "+Mid$(Str$(Temp2),2)
  2553.     Call Scrn(Strng)
  2554.  Next
  2555.  Selection=1
  2556.  Strng=Chr$(27)+"[1;33;44m"
  2557.  Call Scrn(Strng)
  2558.  Strng=Chr$(27)+"[2;20H"
  2559.  Call Scrn(Strng)
  2560.  Strng="Hits"
  2561.  Call Scrn(Strng)
  2562.  Strng=Chr$(27)+"[2;30H"
  2563.  Call Scrn(Strng)
  2564.  Strng="Exp"
  2565.  Call Scrn(Strng)
  2566.  Strng=Chr$(27)+"[2;40H"
  2567.  Call Scrn(Strng)
  2568.  Strng="Lvl"
  2569.  Call Scrn(Strng)
  2570.  Strng=Chr$(27)+"[2;50H"
  2571.  Call Scrn(Strng)
  2572.  Strng="P D B P F"
  2573.  Call Scrn(Strng)
  2574.  Strng=Chr$(27)+"[2;61H"
  2575.  Call Scrn(Strng)
  2576.  Strng="P)oison"
  2577.  Call Scrn(Strng)
  2578.  Strng=Chr$(27)+"[3;61H"
  2579.  Call Scrn(Strng)
  2580.  Strng="D)rain"
  2581.  Call Scrn(Strng)
  2582.  Strng=Chr$(27)+"[4;61H"
  2583.  Call Scrn(Strng)
  2584.  Strng="B)lock"
  2585.  Call Scrn(Strng)
  2586.  Strng=Chr$(27)+"[5;61H"
  2587.  Call Scrn(Strng)
  2588.  Strng="P)revent"
  2589.  Call Scrn(Strng)
  2590.  Strng=Chr$(27)+"[6;61H"
  2591.  Call Scrn(Strng)
  2592.  Strng="F)ollow"
  2593.  Call Scrn(Strng)
  2594. 10101
  2595.  Exit Sub
  2596. 10102
  2597.  Resume 10101
  2598. End Sub
  2599.  
  2600. Sub ShowRoomLink
  2601.  On Local Error Goto 10112
  2602.  If TempX=False Then
  2603.     Strng=Chr$(27)+"[1;33;44m"
  2604.     Call Scrn(Strng)
  2605.     Strng=Chr$(27)+"[2;2H"
  2606.     Call Scrn(Strng)
  2607.     Strng="Room Number"
  2608.     Call Scrn(Strng)
  2609.     Strng=Chr$(27)+"[2;14H"
  2610.     Call Scrn(Strng)
  2611.     Strng=Space$(5)
  2612.     Call Scrn(Strng)
  2613.     Strng=Chr$(27)+"[2;14H"
  2614.     Call Scrn(Strng)
  2615.     Strng=Mid$(Str$(Room.Link),2)
  2616.     Call Scrn(Strng)
  2617.     Strng=Chr$(27)+"[11;38H"
  2618.     Call Scrn(Strng)
  2619.     Strng=Space$(5)
  2620.     Call Scrn(Strng)
  2621.     Temp2=40-Int(Len(Mid$(Str$(Room.Link),2))/2-.5)
  2622.     Strng=Chr$(27)+"[11;"+Mid$(Str$(Temp2),2)+"H"
  2623.     Call Scrn(Strng)
  2624.     Strng=Mid$(Str$(Room.Link),2)
  2625.     Call Scrn(Strng)
  2626.  Endif
  2627.  If TempX>False Then
  2628.     Strng=Chr$(27)+"[1;37;40m"
  2629.     Call Scrn(Strng)
  2630.     Strng=Chr$(27)+"["+Mid$(Str$(Link.Data(TempX,1)),2)+";"+_
  2631.     Mid$(Str$(Link.Data(TempX,2)),2)+"H"
  2632.     Call Scrn(Strng)
  2633.     Strng=Space$(5)
  2634.     Call Scrn(Strng)
  2635.     Strng=Chr$(27)+"["+Mid$(Str$(Link.Data(TempX,1)),2)+";"+_
  2636.     Mid$(Str$(Link.Data(TempX,2)),2)+"H"
  2637.     Call Scrn(Strng)
  2638.     Strng=Mid$(Str$(RoomRecord.Direct(TempX)),2)
  2639.     Call Scrn(Strng)
  2640.  Endif
  2641. 10111
  2642.  Exit Sub
  2643. 10112
  2644.  Resume 10111
  2645. End Sub
  2646.  
  2647. Sub DisplayRoomLink
  2648.  On Local Error Goto 10122
  2649.  Out3="Sysop Room Link Edit"
  2650.  Call DisplayBorder(Out3)
  2651.  Strng=Chr$(27)+"[1;33;44m"
  2652.  Call Scrn(Strng)
  2653.  Strng=Chr$(27)+"[2;2H"
  2654.  Call Scrn(Strng)
  2655.  Strng="Room Number"
  2656.  Call Scrn(Strng)
  2657.  Room.Link=1
  2658.  Strng=Chr$(27)+"[1;37;44m"
  2659.  Call Scrn(Strng)
  2660.  Strng=Chr$(27)+"[9;36H"
  2661.  Call Scrn(Strng)
  2662.  Strng="\   |   /"
  2663.  Call Scrn(Strng)
  2664.  Strng=Chr$(27)+"[10;37H"
  2665.  Call Scrn(Strng)
  2666.  Strng="\  |  /"
  2667.  Call Scrn(Strng)
  2668.  Strng=Chr$(27)+"[11;35H"
  2669.  Call Scrn(Strng)
  2670.  Strng="---"
  2671.  Call Scrn(Strng)
  2672.  Strng=Chr$(27)+"[11;43H"
  2673.  Call Scrn(Strng)
  2674.  Strng="---"
  2675.  Call Scrn(Strng)
  2676.  Strng=Chr$(27)+"[12;37H"
  2677.  Call Scrn(Strng)
  2678.  Strng="/  |  \"
  2679.  Call Scrn(Strng)
  2680.  Strng=Chr$(27)+"[13;36H"
  2681.  Call Scrn(Strng)
  2682.  Strng="/   |   \"
  2683.  Call Scrn(Strng)
  2684.  Strng=Chr$(27)+"[1;37;40m"
  2685.  Call Scrn(Strng)
  2686.  Strng=Chr$(27)+"["+Mid$(Str$(Array.Data(1,1)),2)+";"+_
  2687.  Mid$(Str$(Array.Data(1,2)),2)+"H"
  2688.  Call Scrn(Strng)
  2689.  Strng=Title.Data(1)
  2690.  Call Scrn(Strng)
  2691.  Strng=Chr$(27)+"[1;33;44m"
  2692.  Call Scrn(Strng)
  2693.  For Temp2=2 To 11
  2694.     Strng=Chr$(27)+"["+Mid$(Str$(Array.Data(Temp2,1)),2)+";"+_
  2695.     Mid$(Str$(Array.Data(Temp2,2)),2)+"H"
  2696.     Call Scrn(Strng)
  2697.     Strng=Title.Data(Temp2)
  2698.     Call Scrn(Strng)
  2699.  Next
  2700.  Selection=1
  2701. 10121
  2702.  Exit Sub
  2703. 10122
  2704.  Resume 10121
  2705. End Sub
  2706.  
  2707. Sub DisplayMonclass
  2708.  On Local Error Goto 10132
  2709.  If Monclass>False And Monclass<=Lof(10)/Len(MonclassRecord) Then
  2710.     Get 10,Monclass,MonclassRecord
  2711.     For TempX=0 To 10
  2712.        Call ShowMonclass
  2713.     Next
  2714.  Endif
  2715.  Call MonclassField
  2716. 10131
  2717.  Exit Sub
  2718. 10132
  2719.  Resume 10131
  2720. End Sub
  2721.  
  2722. Sub EditMonclass
  2723.  On Local Error Goto 10142
  2724.  Monclass=1
  2725.  If Lof(10)=False Then
  2726.     Call AddMonclass
  2727.  Endif
  2728.  Call MonclassScreen
  2729.  Call MonclassStatusLine
  2730.  Call DisplayMonclass
  2731.  Do
  2732.     TempX$=Inkey$
  2733.     While TempX$=Nul
  2734.        TempX$=Inkey$
  2735.     Wend
  2736.     TempX=False
  2737.     Select Case Len(TempX$)
  2738.     Case 2
  2739.        TempX=Asc(Mid$(TempX$,2,1))
  2740.        Call MonclassSelect
  2741.     Case 1
  2742.        TempX=Asc(TempX$)
  2743.        Select Case TempX
  2744.        Case 1
  2745.           Call AddMonclass
  2746.        Case 8
  2747.           Call Help(8)
  2748.           Call MonclassScreen
  2749.           Call MonclassStatusLine
  2750.           Call DisplayMonclass
  2751.        Case 13
  2752.           Call EditSelectedMonclass
  2753.        Case 14
  2754.           Call NextMonclass
  2755.        Case 17
  2756.           Call PreviousMonclass
  2757.        Case 18
  2758.           Call SelectNextMonclass
  2759.           Call MonclassStatusLine
  2760.        Case 19
  2761.           Call SearchMonclass
  2762.        Case 27
  2763.           Put 10,Monclass,MonclassRecord
  2764.           Exit Sub
  2765.        End Select
  2766.     End Select
  2767.  Loop
  2768. 10141
  2769.  Exit Sub
  2770. 10142
  2771.  Resume 10141
  2772. End Sub
  2773.  
  2774. Sub EditSelectedMonclass
  2775.  On Local Error Goto 10152
  2776.  Strng=Nul
  2777.  Out2=Chr$(60)+Chr$(217)+" Exit Field "+Chr$(29)+" Cursor Edit"
  2778.  Call StatusLine
  2779.  Xcoor=Selection*2+1
  2780.  Row=Xcoor
  2781.  Restore MonclassData1
  2782.  Read Ycoor, Column, Line.Length, Max.Lines, Line.Number
  2783.  Edit.Data(1)=Mid$(Str$(MonclassRecord.Monsters(Selection)),2)
  2784.  Call ScreenEdit
  2785.  MonclassRecord.Monsters(Selection)=Val(Edit.Data(1))
  2786.  Put 10,Monclass,MonclassRecord
  2787.  TempX=Selection
  2788.  Call ShowMonclass
  2789.  Call MonclassStatusLine
  2790.  Call MonclassField
  2791. 10151
  2792.  Exit Sub
  2793. 10152
  2794.  Resume 10151
  2795. End Sub
  2796.  
  2797. Sub NextMonclass
  2798.  On Local Error Goto 10162
  2799.  If Monclass>Lof(10)/Len(MonclassRecord) Then
  2800.     Strng="This is the last monclass in the monclass file."
  2801.     Call MonclassErrorMessage
  2802.     Exit Sub
  2803.  Endif
  2804.  Put 10,Monclass,MonclassRecord
  2805.  Monclass=Monclass+1
  2806.  Call DisplayMonclass
  2807. 10161
  2808.  Exit Sub
  2809. 10162
  2810.  Resume 10161
  2811. End Sub
  2812.  
  2813. Sub PreviousMonclass
  2814.  On Local Error Goto 10172
  2815.  If Monclass<=1 Then
  2816.     Strng="This is the first monclass in the monclass file."
  2817.     Call MonclassErrorMessage
  2818.     Exit Sub
  2819.  Endif
  2820.  Put 10,Monclass,MonclassRecord
  2821.  Monclass=Monclass-1
  2822.  Call DisplayMonclass
  2823. 10171
  2824.  Exit Sub
  2825. 10172
  2826.  Resume 10171
  2827. End Sub
  2828.  
  2829. Sub SelectNextMonclass
  2830.  On Local Error Goto 10182
  2831.  Strng=Nul
  2832.  Out2=Chr$(60)+Chr$(217)+" Exit Field "+Chr$(29)+" Cursor Edit"
  2833.  Call StatusLine
  2834.  Strng=Chr$(27)+"[1;33;44m"
  2835.  Call Scrn(Strng)
  2836.  Strng=Chr$(27)+"[23;2H"
  2837.  Call Scrn(Strng)
  2838.  Strng="Enter Monclass: "
  2839.  Call Scrn(Strng)
  2840.  Strng=Chr$(27)+"[1;37;40m"
  2841.  Call Scrn(Strng)
  2842.  Strng=Chr$(27)+"[23;18H"
  2843.  Call Scrn(Strng)
  2844.  Strng=Space$(5)
  2845.  Call Scrn(Strng)
  2846.  Strng=Chr$(27)+"[1;37;44m"
  2847.  Call Scrn(Strng)
  2848.  Strng=Chr$(27)+"[23;24H"
  2849.  Call Scrn(Strng)
  2850.  Strng="(1-"+Mid$(Str$(Lof(10)/Len(MonclassRecord)),2)+")"
  2851.  Call Scrn(Strng)
  2852.  Restore MonclassData2
  2853.  Read Xcoor, Ycoor, Column, Line.Length, Max.Lines, Row, Line.Number
  2854.  Edit.Data(1)=Nul
  2855.  Call ScreenEdit
  2856.  Temp2=Val(Edit.Data(1))
  2857.  If Temp2<1 Or Temp2>Lof(10)/Len(MonclassRecord) Then
  2858.     Strng="The monclass number is not within the monclass file range."
  2859.     Call MonclassErrorMessage
  2860.     Exit Sub
  2861.  Endif
  2862.  Put 10,Monclass,MonclassRecord
  2863.  Monclass=Temp2
  2864.  Call DisplayMonclass
  2865. 10181
  2866.  Exit Sub
  2867. 10182
  2868.  Resume 10181
  2869. End Sub
  2870.  
  2871. Sub SearchMonclass
  2872.  On Local Error Goto 10192
  2873.  Put 10,Monclass,MonclassRecord
  2874.  Strng=Nul
  2875.  Out2=Chr$(29)+" Cursor Edit "+Chr$(60)+Chr$(217)+" Exit Field  "
  2876.  Out2=Out2+"Append # sign and number for duplicate monsters"
  2877.  Call StatusLine
  2878.  Strng=Chr$(27)+"[1;33;44m"
  2879.  Call Scrn(Strng)
  2880.  Strng=Chr$(27)+"[23;2H"
  2881.  Call Scrn(Strng)
  2882.  Strng="Enter Monster Name or Number: "
  2883.  Call Scrn(Strng)
  2884.  Strng=Chr$(27)+"[1;37;40m"
  2885.  Call Scrn(Strng)
  2886.  Strng=Chr$(27)+"[23;32H"
  2887.  Call Scrn(Strng)
  2888.  Strng=Space$(30)
  2889.  Call Scrn(Strng)
  2890.  Restore MonclassData3
  2891.  Read Xcoor, Ycoor, Column, Line.Length, Max.Lines, Row, Line.Number
  2892.  Edit.Data(1)=Nul
  2893.  Call ScreenEdit
  2894.  Call MonclassStatusLine
  2895.  Temp2=Val(Edit.Data(1))
  2896.  If Temp2 Then
  2897.     For Temp4=1 To Lof(10)/Len(MonclassRecord)
  2898.        Get 10,Temp4,MonclassRecord
  2899.        For Temp3=1 To 10
  2900.           Temp5=MonclassRecord.Monsters(Temp3)
  2901.           If Temp5>False And Temp5<=Lof(7)/Len(MonsterRecord) Then
  2902.              If Temp5=Temp2 Then
  2903.                 Monclass=Temp4
  2904.                 Call DisplayMonclass
  2905.                 Exit Sub
  2906.              Endif
  2907.           Endif
  2908.        Next
  2909.     Next
  2910.  Endif
  2911.  Temp$=Lcase$(Edit.Data(1))
  2912.  Temp.Index=False
  2913.  Temp1=Instr(Temp$,"#")
  2914.  If Temp1 Then
  2915.     Temp.Index=Val(Mid$(Temp$,Temp1+1))
  2916.     Temp$=Left$(Temp$,Temp1-1)
  2917.  Endif
  2918.  Temp6=Len(Temp$)
  2919.  Temp5=False
  2920.  For Temp2=1 To Lof(10)/Len(MonclassRecord)
  2921.     Get 10,Temp2,MonclassRecord
  2922.     For Temp3=1 To 10
  2923.        Temp4=MonclassRecord.Monsters(Temp3)
  2924.        If Temp4>False And Temp4<=Lof(7)/Len(MonsterRecord) Then
  2925.           Get 7,Temp4,MonsterRecord
  2926.           If Left$(MonsterRecord.MonsterName,Temp6)=Temp$ Then
  2927.              Temp5=Temp5+1
  2928.              If Temp5=Temp.Index Or Temp.Index=False Then
  2929.                 Monclass=Temp2
  2930.                 Call DisplayMonclass
  2931.                 Exit Sub
  2932.              Endif
  2933.           Endif
  2934.        Endif
  2935.     Next
  2936.  Next
  2937.  Strng="The monster name was not found in the monclass file."
  2938.  Call MonclassErrorMessage
  2939.  Get 10,Monclass,MonclassRecord
  2940. 10191
  2941.  Exit Sub
  2942. 10192
  2943.  Resume 10191
  2944. End Sub
  2945.  
  2946. Sub MonclassStatusLine
  2947.  On Local Error Goto 10202
  2948.  Strng=Chr$(29)+Chr$(18)+" Cursor Select "+Chr$(60)+Chr$(217)
  2949.  Strng=Strng+" Enter Choice <esc> Exit and Save ^h Help ^a Add Record"
  2950.  Out2="^r Select Monclass ^n Next Monclass "
  2951.  Out2=Out2+"^q Previous Monclass ^s Search Monclass"
  2952.  Call StatusLine
  2953. 10201
  2954.  Exit Sub
  2955. 10202
  2956.  Resume 10201
  2957. End Sub
  2958.  
  2959. Sub AddMonclass
  2960.  On Local Error Goto 10212
  2961.  Monclass=Lof(10)/Len(MonclassRecord)+1
  2962.  For Temp2=1 To 10
  2963.     MonclassRecord.Monsters(Temp2)=False
  2964.  Next
  2965.  Put 10,Monclass,MonclassRecord
  2966.  Call DisplayMonclass
  2967. 10211
  2968.  Exit Sub
  2969. 10212
  2970.  Resume 10211
  2971. End Sub
  2972.  
  2973. Sub MonclassErrorMessage
  2974.  On Local Error Goto 10222
  2975.  TempX$=Strng+" Press <esc>."
  2976.  Strng=Chr$(27)+"[1;37;44m"
  2977.  Call Scrn(Strng)
  2978.  Strng=Chr$(27)+"[23;2H"
  2979.  Call Scrn(Strng)
  2980.  Strng=Space$(78)
  2981.  Call Scrn(Strng)
  2982.  Strng=Chr$(27)+"[24;2H"
  2983.  Call Scrn(Strng)
  2984.  Strng=Space$(78)
  2985.  Call Scrn(Strng)
  2986.  Strng=Chr$(27)+"[24;2H"
  2987.  Call Scrn(Strng)
  2988.  Call Scrn(TempX$)
  2989.  While Inkey$<>Chr$(27)
  2990.  Wend
  2991.  Call MonclassStatusLine
  2992.  Call MonclassField
  2993. 10221
  2994.  Exit Sub
  2995. 10222
  2996.  Resume 10221
  2997. End Sub
  2998.  
  2999. Sub DisplayRoomLinkScreen
  3000.  On Local Error Goto 10232
  3001.  If Room.Link>False And Room.Link<=Lof(5)/Len(RoomRecord) Then
  3002.     Get 5,Room.Link,RoomRecord
  3003.     For TempX=0 To 11
  3004.        Call ShowRoomLink
  3005.     Next
  3006.     Call RedisplayField
  3007.  Endif
  3008. 10231
  3009.  Exit Sub
  3010. 10232
  3011.  Resume 10231
  3012. End Sub
  3013.  
  3014. Sub EditLink
  3015.  On Local Error Goto 10242
  3016.  Restore LinkData
  3017.  For Temp2=1 To 11
  3018.     Read Title.Data(Temp2)
  3019.  Next
  3020.  For Temp2=1 To 11
  3021.     Read Array.Data(Temp2,1),Array.Data(Temp2,2)
  3022.  Next
  3023.  For Temp2=1 To 11
  3024.     Read Link.Data(Temp2,1),Link.Data(Temp2,2)
  3025.  Next
  3026.  If Lof(5)=False Then
  3027.     Call AddRoom
  3028.  Endif
  3029.  Call DisplayRoomLink
  3030.  Call RoomLinkStatusLine
  3031.  Call DisplayRoomLinkScreen
  3032.  Do
  3033.     TempX$=Inkey$
  3034.     While TempX$=Nul
  3035.        TempX$=Inkey$
  3036.     Wend
  3037.     TempX=False
  3038.     Select Case Len(TempX$)
  3039.     Case 2
  3040.        TempX=Asc(Mid$(TempX$,2,1))
  3041.        Call RoomLinkSelect
  3042.     Case 1
  3043.        TempX=Asc(TempX$)
  3044.        Select Case TempX
  3045.        Case 4
  3046.           Call DeleteLinks
  3047.        Case 8
  3048.           Call Help(9)
  3049.           Call DisplayRoomLink
  3050.           Call RoomLinkStatusLine
  3051.           Call DisplayRoomLinkScreen
  3052.        Case 9
  3053.           Call RoomLinkSelect
  3054.        Case 10
  3055.           Call JumpLink
  3056.        Case 13
  3057.           Call EditSelectedRoomLink
  3058.        Case 14
  3059.           Call NextRoomLink
  3060.        Case 17
  3061.           Call PreviousRoomLink
  3062.        Case 18
  3063.           Call SelectNextRoomLink
  3064.           Call RoomLinkStatusLine
  3065.        Case 27
  3066.           Put 5,Room.Link,RoomRecord
  3067.           Exit Sub
  3068.        End Select
  3069.     End Select
  3070.  Loop
  3071. 10241
  3072.  Exit Sub
  3073. 10242
  3074.  Resume 10241
  3075. End Sub
  3076.  
  3077. Sub DeleteLinks
  3078.  On Local Error Goto 10252
  3079.  For Temp6=1 To 11
  3080.     RoomRecord.Direct(Temp6)=False
  3081.  Next
  3082.  Put 5,Room.Link,RoomRecord
  3083.  Call DisplayRoomLinkScreen
  3084. 10251
  3085.  Exit Sub
  3086. 10252
  3087.  Resume 10251
  3088. End Sub
  3089.  
  3090. Sub JumpLink
  3091.  On Local Error Goto 10262
  3092.  If RoomRecord.Direct(Selection)>False Then
  3093.     If RoomRecord.Direct(Selection)<=Lof(5)/Len(RoomRecord) Then
  3094.        Put 5,Room.Link,RoomRecord
  3095.        Room.Link=RoomRecord.Direct(Selection)
  3096.        Call DisplayRoomLinkScreen
  3097.        Exit Sub
  3098.     Endif
  3099.  Endif
  3100.  Strng="The room number is not within the room file range."
  3101.  Call ErrorMessage
  3102. 10261
  3103.  Exit Sub
  3104. 10262
  3105.  Resume 10261
  3106. End Sub
  3107.  
  3108. Sub EditSelectedRoomLink
  3109.  On Local Error Goto 10272
  3110.  Strng=Nul
  3111.  Out2=Chr$(60)+Chr$(217)+" Exit Field "+Chr$(29)+" Cursor Edit"
  3112.  Call StatusLine
  3113.  Xcoor=Link.Data(Selection,1)
  3114.  Ycoor=Link.Data(Selection,2)
  3115.  Row=Xcoor
  3116.  Column=Ycoor
  3117.  Restore RoomLinkData1
  3118.  Read Line.Length, Max.Lines, Line.Number
  3119.  Edit.Data(1)=Mid$(Str$(RoomRecord.Direct(Selection)),2)
  3120.  Call ScreenEdit
  3121.  RoomRecord.Direct(Selection)=Val(Edit.Data(1))
  3122.  Put 5,Room.Link,RoomRecord
  3123.  TempX=Selection
  3124.  Call ShowRoomLink
  3125.  Call RoomLinkStatusLine
  3126.  Call RedisplayField
  3127. 10271
  3128.  Exit Sub
  3129. 10272
  3130.  Resume 10271
  3131. End Sub
  3132.  
  3133. Sub NextRoomLink
  3134.  On Local Error Goto 10282
  3135.  If Room.Link<Lof(5)/Len(RoomRecord) Then
  3136.     Put 5,Room.Link,RoomRecord
  3137.     Room.Link=Room.Link+1
  3138.     Call DisplayRoomLinkScreen
  3139.     Exit Sub
  3140.  Endif
  3141.  Strng="That is the last room number in the room file."
  3142.  Call ErrorMessage
  3143. 10281
  3144.  Exit Sub
  3145. 10282
  3146.  Resume 10281
  3147. End Sub
  3148.  
  3149. Sub PreviousRoomLink
  3150.  On Local Error Goto 10292
  3151.  If Room.Link>1 Then
  3152.     Put 5,Room.Link,RoomRecord
  3153.     Room.Link=Room.Link-1
  3154.     Call DisplayRoomLinkScreen
  3155.     Exit Sub
  3156.  Endif
  3157.  Strng="That is the first room number in the room file."
  3158.  Call ErrorMessage
  3159. 10291
  3160.  Exit Sub
  3161. 10292
  3162.  Resume 10291
  3163. End Sub
  3164.  
  3165. Sub SelectNextRoomLink
  3166.  On Local Error Goto 10302
  3167.  Strng=Nul
  3168.  Out2=Chr$(29)+" Cursor Edit "+Chr$(60)+Chr$(217)+" Exit Field"
  3169.  Call StatusLine
  3170.  Strng=Chr$(27)+"[1;33;44m"
  3171.  Call Scrn(Strng)
  3172.  Strng=Chr$(27)+"[23;2H"
  3173.  Call Scrn(Strng)
  3174.  Strng="Enter Room: "
  3175.  Call Scrn(Strng)
  3176.  Strng=Chr$(27)+"[1;37;40m"
  3177.  Call Scrn(Strng)
  3178.  Strng=Chr$(27)+"[23;14H"
  3179.  Call Scrn(Strng)
  3180.  Strng=Space$(5)
  3181.  Call Scrn(Strng)
  3182.  Strng=Chr$(27)+"[1;37;44m"
  3183.  Call Scrn(Strng)
  3184.  Strng=Chr$(27)+"[23;20H"
  3185.  Call Scrn(Strng)
  3186.  Strng="(1-"+Mid$(Str$(Lof(5)/Len(RoomRecord)),2)+")"
  3187.  Call Scrn(Strng)
  3188.  Restore RoomLinkData2
  3189.  Read Xcoor, Ycoor, Column, Line.Length, Max.Lines, Row, Line.Number
  3190.  Edit.Data(1)=Nul
  3191.  Call ScreenEdit
  3192.  Temp2=Val(Edit.Data(1))
  3193.  If Temp2<1 Or Temp2>Lof(5)/Len(RoomRecord) Then
  3194.     Strng="The room number is not within the room file range."
  3195.     Call ErrorMessage
  3196.     Exit Sub
  3197.  Endif
  3198.  Put 5,Room.Link,RoomRecord
  3199.  Room.Link=Temp2
  3200.  Call DisplayRoomLinkScreen
  3201. 10301
  3202.  Exit Sub
  3203. 10302
  3204.  Resume 10301
  3205. End Sub
  3206.  
  3207. Sub RoomLinkStatusLine
  3208.  On Local Error Goto 10312
  3209.  Strng=Chr$(29)+Chr$(18)+" Cursor Select "+Chr$(60)+Chr$(217)
  3210.  Strng=Strng+" Enter Choice <esc> Exit and Save ^h Help"
  3211.  Out2="^n Next Room ^q Prev Room ^r Select Room "
  3212.  Out2=Out2+"^j Jump Room Link ^d Delete Links"
  3213.  Call StatusLine
  3214. 10311
  3215.  Exit Sub
  3216. 10312
  3217.  Resume 10311
  3218. End Sub
  3219.  
  3220. Sub ShowRoom
  3221.  On Local Error Goto 10322
  3222.  Select Case TempX
  3223.  Case 0
  3224.     Strng=Chr$(27)+"[1;33;44m"
  3225.     Call Scrn(Strng)
  3226.     Strng=Chr$(27)+"[2;2H"
  3227.     Call Scrn(Strng)
  3228.     Strng="Room"
  3229.     Call Scrn(Strng)
  3230.     Strng=Chr$(27)+"[1;37;40m"
  3231.     Call Scrn(Strng)
  3232.     Strng=Chr$(27)+"[2;7H"
  3233.     Call Scrn(Strng)
  3234.     Strng=Space$(5)
  3235.     Call Scrn(Strng)
  3236.     Strng=Chr$(27)+"[2;7H"
  3237.     Call Scrn(Strng)
  3238.     Strng=Mid$(Str$(Room.Number),2)
  3239.     Call Scrn(Strng)
  3240.     Strng=Chr$(27)+"[1;33;44m"
  3241.     Call Scrn(Strng)
  3242.     Strng=Chr$(27)+"[12;2H"
  3243.     Call Scrn(Strng)
  3244.     Strng="Room Links"
  3245.     Call Scrn(Strng)
  3246.     Room.Treasure=False
  3247.     Room.Objects=False
  3248.     For Temp2=1 To 10
  3249.        If RoomRecord.Treasure(Temp2)>False Then
  3250.           Room.Treasure=Room.Treasure+1
  3251.        Endif
  3252.        If RoomRecord.Object(Temp2)>False Then
  3253.           Room.Objects=Room.Objects+1
  3254.        Endif
  3255.     Next
  3256.     Strng=Chr$(27)+"[1;33;44m"
  3257.     Call Scrn(Strng)
  3258.     Strng=Chr$(27)+"[2;13H"
  3259.     Call Scrn(Strng)
  3260.     Strng="Treasure"
  3261.     Call Scrn(Strng)
  3262.     Strng=Chr$(27)+"[1;37;40m"
  3263.     Call Scrn(Strng)
  3264.     Strng=Chr$(27)+"[2;22H"
  3265.     Call Scrn(Strng)
  3266.     Strng="  "
  3267.     Call Scrn(Strng)
  3268.     Strng=Chr$(27)+"[2;22H"
  3269.     Call Scrn(Strng)
  3270.     Strng=Mid$(Str$(Room.Treasure),2)
  3271.     Call Scrn(Strng)
  3272.     Strng=Chr$(27)+"[1;33;44m"
  3273.     Call Scrn(Strng)
  3274.     Strng=Chr$(27)+"[2;25H"
  3275.     Call Scrn(Strng)
  3276.     Strng="Objects"
  3277.     Call Scrn(Strng)
  3278.     Strng=Chr$(27)+"[1;37;40m"
  3279.     Call Scrn(Strng)
  3280.     Strng=Chr$(27)+"[2;33H"
  3281.     Call Scrn(Strng)
  3282.     Strng="  "
  3283.     Call Scrn(Strng)
  3284.     Strng=Chr$(27)+"[2;33H"
  3285.     Call Scrn(Strng)
  3286.     Strng=Mid$(Str$(Room.Objects),2)
  3287.     Call Scrn(Strng)
  3288.  Case Else
  3289.     Strng=Chr$(27)+"[1;37;40m"
  3290.     Call Scrn(Strng)
  3291.     Select Case TempX
  3292.     Case 1
  3293.        Strng=Chr$(27)+"[4;2H"
  3294.        Call Scrn(Strng)
  3295.        Strng=RoomRecord.ShortDesc
  3296.        Call Scrn(Strng)
  3297.     Case 2
  3298.        For Temp2=1 To 4
  3299.           Strng=Chr$(27)+"["+Mid$(Str$(Temp2+6),2)+";2H"
  3300.           Call Scrn(Strng)
  3301.           Strng=RoomRecord.LongDesc(Temp2)
  3302.           Call Scrn(Strng)
  3303.        Next
  3304.     Case 3
  3305.        Strng=Chr$(27)+"[13;8H"
  3306.        Call Scrn(Strng)
  3307.        Strng=Space$(5)
  3308.        Call Scrn(Strng)
  3309.        Strng=Chr$(27)+"[13;8H"
  3310.        Call Scrn(Strng)
  3311.        Strng=Mid$(Str$(RoomRecord.Direct(1)),2)
  3312.        Call Scrn(Strng)
  3313.     Case 4
  3314.        Strng=Chr$(27)+"[13;19H"
  3315.        Call Scrn(Strng)
  3316.        Strng=Space$(5)
  3317.        Call Scrn(Strng)
  3318.        Strng=Chr$(27)+"[13;19H"
  3319.        Call Scrn(Strng)
  3320.        Strng=Mid$(Str$(RoomRecord.Direct(2)),2)
  3321.        Call Scrn(Strng)
  3322.     Case 5
  3323.        Strng=Chr$(27)+"[13;31H"
  3324.        Call Scrn(Strng)
  3325.        Strng=Space$(5)
  3326.        Call Scrn(Strng)
  3327.        Strng=Chr$(27)+"[13;31H"
  3328.        Call Scrn(Strng)
  3329.        Strng=Mid$(Str$(RoomRecord.Direct(3)),2)
  3330.        Call Scrn(Strng)
  3331.     Case 6
  3332.        Strng=Chr$(27)+"[13;42H"
  3333.        Call Scrn(Strng)
  3334.        Strng=Space$(5)
  3335.        Call Scrn(Strng)
  3336.        Strng=Chr$(27)+"[13;42H"
  3337.        Call Scrn(Strng)
  3338.        Strng=Mid$(Str$(RoomRecord.Direct(4)),2)
  3339.        Call Scrn(Strng)
  3340.     Case 7
  3341.        Strng=Chr$(27)+"[13;52H"
  3342.        Call Scrn(Strng)
  3343.        Strng=Space$(5)
  3344.        Call Scrn(Strng)
  3345.        Strng=Chr$(27)+"[13;52H"
  3346.        Call Scrn(Strng)
  3347.        Strng=Mid$(Str$(RoomRecord.Direct(5)),2)
  3348.        Call Scrn(Strng)
  3349.     Case 8
  3350.        Strng=Chr$(27)+"[13;61H"
  3351.        Call Scrn(Strng)
  3352.        Strng=Space$(5)
  3353.        Call Scrn(Strng)
  3354.        Strng=Chr$(27)+"[13;61H"
  3355.        Call Scrn(Strng)
  3356.        Strng=Mid$(Str$(RoomRecord.Direct(6)),2)
  3357.        Call Scrn(Strng)
  3358.     Case 9
  3359.        Strng=Chr$(27)+"[13;72H"
  3360.        Call Scrn(Strng)
  3361.        Strng=Space$(5)
  3362.        Call Scrn(Strng)
  3363.        Strng=Chr$(27)+"[13;72H"
  3364.        Call Scrn(Strng)
  3365.        Strng=Mid$(Str$(RoomRecord.Direct(7)),2)
  3366.        Call Scrn(Strng)
  3367.     Case 10
  3368.        Strng=Chr$(27)+"[15;12H"
  3369.        Call Scrn(Strng)
  3370.        Strng=Space$(5)
  3371.        Call Scrn(Strng)
  3372.        Strng=Chr$(27)+"[15;12H"
  3373.        Call Scrn(Strng)
  3374.        Strng=Mid$(Str$(RoomRecord.Direct(8)),2)
  3375.        Call Scrn(Strng)
  3376.     Case 11
  3377.        Strng=Chr$(27)+"[15;28H"
  3378.        Call Scrn(Strng)
  3379.        Strng=Space$(5)
  3380.        Call Scrn(Strng)
  3381.        Strng=Chr$(27)+"[15;28H"
  3382.        Call Scrn(Strng)
  3383.        Strng=Mid$(Str$(RoomRecord.Direct(9)),2)
  3384.        Call Scrn(Strng)
  3385.     Case 12
  3386.        Strng=Chr$(27)+"[15;44H"
  3387.        Call Scrn(Strng)
  3388.        Strng=Space$(5)
  3389.        Call Scrn(Strng)
  3390.        Strng=Chr$(27)+"[15;44H"
  3391.        Call Scrn(Strng)
  3392.        Strng=Mid$(Str$(RoomRecord.Direct(10)),2)
  3393.        Call Scrn(Strng)
  3394.     Case 13
  3395.        Strng=Chr$(27)+"[15;60H"
  3396.        Call Scrn(Strng)
  3397.        Strng=Space$(5)
  3398.        Call Scrn(Strng)
  3399.        Strng=Chr$(27)+"[15;60H"
  3400.        Call Scrn(Strng)
  3401.        Strng=Mid$(Str$(RoomRecord.Direct(11)),2)
  3402.        Call Scrn(Strng)
  3403.     Case 14
  3404.        Strng=Chr$(27)+"[17;11H"
  3405.        Call Scrn(Strng)
  3406.        Strng=Space$(4)
  3407.        Call Scrn(Strng)
  3408.        Strng=Chr$(27)+"[17;11H"
  3409.        Call Scrn(Strng)
  3410.        Strng=Mid$(Str$(RoomRecord.MonsterClass),2)
  3411.        Call Scrn(Strng)
  3412.     Case 15
  3413.        Strng=Chr$(27)+"[17;26H"
  3414.        Call Scrn(Strng)
  3415.        Strng=Space$(4)
  3416.        Call Scrn(Strng)
  3417.        Strng=Chr$(27)+"[17;26H"
  3418.        Call Scrn(Strng)
  3419.        Strng=Mid$(Str$(RoomRecord.RustRate),2)
  3420.        Call Scrn(Strng)
  3421.     Case 16
  3422.        Strng=Chr$(27)+"[19;13H"
  3423.        Call Scrn(Strng)
  3424.        Strng=Space$(4)
  3425.        Call Scrn(Strng)
  3426.        Strng=Chr$(27)+"[19;13H"
  3427.        Call Scrn(Strng)
  3428.        Strng=Mid$(Str$(RoomRecord.StealRate),2)
  3429.        Call Scrn(Strng)
  3430.     End Select
  3431.  End Select
  3432. 10321
  3433.  Exit Sub
  3434. 10322
  3435.  Resume 10321
  3436. End Sub
  3437.  
  3438. Sub Valid(Var$,Var)
  3439.  On Local Error Goto 10332
  3440.  If Len(Var$)/2<>Len(Var$)\2 Then
  3441.     Var$=Var$+" "
  3442.  Endif
  3443.  If Var/2<>Var\2 Then
  3444.     Var=Var+1
  3445.  Endif
  3446.  Var$=Left$(Var$,Var)
  3447.  Var$=Var$+Space$(Var-Len(Var$))
  3448.  For Var1=1 To Var
  3449.     Var2=Asc(Mid$(Var$,Var1,1))
  3450.     If Var2<32 Or Var2>127 Then
  3451.        Var$=Nul
  3452.        Exit Sub
  3453.     Endif
  3454.  Next
  3455. 10331
  3456.  Exit Sub
  3457. 10332
  3458.  Resume 10331
  3459. End Sub
  3460.  
  3461. Sub Encrypt(Var$,Var)
  3462.  On Local Error Goto 10342
  3463.  Var1$=Nul
  3464.  For Var2=1 To Len(Var$) Step 2
  3465.     Var1=0
  3466.     VarA=Asc(Mid$(Var$,Var2,1))
  3467.     VarB=Asc(Mid$(Var$,Var2+1,1))
  3468.     If Var Then
  3469.        Var1=20000
  3470.     Else
  3471.        If (VarA+VarB)/2=(VarA+VarB)\2 Then
  3472.           Var1=10000
  3473.        Endif
  3474.     Endif
  3475.     Var1=Var1+(VarA-32)*100+(VarB-32)
  3476.     Var1$=Var1$+Mki$(Var1)
  3477.  Next
  3478.  Var$=Var1$
  3479. 10341
  3480.  Exit Sub
  3481. 10342
  3482.  Resume 10341
  3483. End Sub
  3484.  
  3485. Sub Decrypt(Var$)
  3486.  On Local Error Goto 10352
  3487.  Var1$=Nul
  3488.  For Var=1 To Len(Var$) Step 2
  3489.     Var1=Cvi(Mid$(Var$,Var,2))
  3490.     Var2=Var1\100
  3491.     VarA=Var1-Var2*100
  3492.     Var1=Var2
  3493.     VarA=VarA+32
  3494.     Var2=Var1\100
  3495.     VarB=Var1-Var2*100
  3496.     VarB=VarB+32
  3497.     If Var2=0 Then
  3498.        If ((VarA+VarB)/2)=((VarA+VarB)\2) Then
  3499.           Var$=Nul
  3500.           Exit Sub
  3501.        Endif
  3502.     Endif
  3503.     If Var2=1 Then
  3504.        If ((VarA+VarB)/2)<>((VarA+VarB)\2) Then
  3505.           Var$=Nul
  3506.           Exit Sub
  3507.        Endif
  3508.     Endif
  3509.     Var1$=Var1$+Chr$(VarB)+Chr$(VarA)
  3510.  Next
  3511.  Var$=Var1$
  3512. 10351
  3513.  Exit Sub
  3514. 10352
  3515.  Resume 10351
  3516. End Sub
  3517.  
  3518. LinkData:
  3519.  Data "North","East","South","West","Out","Up","Down"
  3520.  Data "Northeast","Southeast","Southwest","Northwest"
  3521.  
  3522.  Data 7,38,11,52,15,38,11,25,7,58,10,58,13,58,7,45,15,45,15,27,7,27,8,38,11,46
  3523.  Data 14,38,11,30,8,58,11,58,14,58,8,45,14,45,14,31,8,31
  3524.  
  3525. RoomEditData:
  3526.  Data 4,2,2,78,1,4,1
  3527.  Data 7,2,2,78,4,7,1
  3528.  Data 13,8,8,5,1,13,1
  3529.  Data 13,19,19,5,1,13,1
  3530.  Data 13,31,31,5,1,13,1
  3531.  Data 13,42,42,5,1,13,1
  3532.  Data 13,52,52,5,1,13,1
  3533.  Data 13,61,61,5,1,13,1
  3534.  Data 13,72,72,5,1,13,1
  3535.  Data 15,12,12,5,1,15,1
  3536.  Data 15,28,28,5,1,15,1
  3537.  Data 15,44,44,5,1,15,1
  3538.  Data 15,60,60,5,1,15,1
  3539.  Data 17,10,10,4,1,17,1
  3540.  Data 17,26,26,4,1,17,1
  3541.  Data 19,13,13,4,1,19,1
  3542.  
  3543. ObjectEditData:
  3544.  Data 4,2,2,30,1,4,1
  3545.  Data 7,2,2,30,1,7,1
  3546.  Data 9,12,12,5,1,9,1
  3547.  Data 11,10,10,1,1,11,1
  3548.  Data 11,25,25,5,1,11,1
  3549.  Data 13,13,13,5,1,13,1
  3550.  Data 16,2,2,78,1,16,1
  3551.  Data 19,2,2,40,1,19,1
  3552.  Data 3,57,57,1,1,3,1
  3553.  Data 5,60,60,1,1,5,1
  3554.  Data 7,60,60,1,1,7,1
  3555.  Data 9,57,57,1,1,9,1
  3556.  Data 11,58,58,1,1,11,1
  3557.  Data 13,60,60,1,1,13,1
  3558.  Data 15,65,65,1,1,15,1
  3559.  Data 17,59,59,1,1,17,1
  3560.  Data 19,50,50,5,1,19,1
  3561.  
  3562. TreasureEditData:
  3563.  Data 4,2,2,30,1,4,1
  3564.  Data 6,2,2,30,1,6,1
  3565.  Data 8,9,9,5,1,8,1
  3566.  Data 10,8,8,5,1,10,1
  3567.  Data 12,7,7,5,1,12,1
  3568.  Data 14,10,10,5,1,14,1
  3569.  Data 16,17,17,1,1,16,1
  3570.  Data 18,16,16,1,1,18,1
  3571.  Data 3,26,26,1,1,3,1
  3572.  Data 5,27,27,1,1,5,1
  3573.  Data 7,27,27,1,1,7,1
  3574.  Data 9,30,30,1,1,9,1
  3575.  Data 11,29,29,1,1,11,1
  3576.  Data 13,31,31,5,1,13,1
  3577.  Data 15,31,31,1,1,15,1
  3578.  Data 17,31,31,5,1,17,1
  3579.  Data 19,28,28,1,1,19,1
  3580.  Data 4,40,40,20,1,4,1
  3581.  Data 5,45,45,1,1,5,1
  3582.  Data 8,40,40,1,1,8,1
  3583.  Data 10,40,40,20,1,20,1
  3584.  Data 11,51,51,1,1,9,1
  3585.  Data 13,55,55,5,1,11,1
  3586.  Data 14,49,49,8,1,13,1
  3587.  Data 17,47,47,1,1,15,1
  3588.  Data 19,47,47,1,1,19,1
  3589.  Data 3,71,71,1,1,3,1
  3590.  Data 5,75,75,3,1,5,1
  3591.  Data 7,72,72,1,1,7,1
  3592.  Data 9,76,76,3,1,9,1
  3593.  Data 11,73,73,1,1,11,1
  3594.  Data 13,75,75,3,1,13,1
  3595.  Data 15,74,74,1,1,15,1
  3596.  Data 17,70,70,1,1,17,1
  3597.  
  3598. MonsterEditData:
  3599.  Data 4,2,2,30,1,4,1
  3600.  Data 7,2,2,30,1,7,1
  3601.  Data 9,8,8,5,1,9,1
  3602.  Data 11,7,7,5,1,11,1
  3603.  Data 13,13,13,5,1,13,1
  3604.  Data 15,2,2,30,5,15,1
  3605.  Data 21,10,10,1,1,21,1
  3606.  Data 21,22,22,20,1,21,1
  3607.  Data 3,58,58,5,1,3,1
  3608.  Data 5,52,52,1,1,5,1
  3609.  Data 5,68,68,3,1,5,1
  3610.  Data 7,57,57,1,1,7,1
  3611.  Data 7,68,68,3,1,7,1
  3612.  Data 9,51,51,1,1,9,1
  3613.  Data 9,68,68,3,1,9,1
  3614.  Data 11,53,53,1,1,11,1
  3615.  Data 11,68,68,3,1,11,1
  3616.  Data 13,52,52,1,1,13,1
  3617.  Data 13,68,68,3,1,13,1
  3618.  Data 13,72,72,3,1,13,1
  3619.  Data 15,56,56,1,1,15,1
  3620.  Data 15,68,68,3,1,15,1
  3621.  Data 17,51,51,20,1,17,1
  3622.  Data 19,53,53,1,1,19,1
  3623.  Data 19,65,65,1,1,21,1
  3624.  Data 20,54,54,1,1,20,1
  3625.  
  3626. MonsterEditData2:
  3627.  Data 21,45,45,35,1,21,1
  3628.  
  3629. SpellEditData:
  3630.  Data 4,2,2,30,1,4,1
  3631.  Data 6,16,16,5,1,6,1
  3632.  Data 8,8,8,2,1,8,1
  3633.  Data 8,22,22,2,1,8,1
  3634.  Data 10,16,16,1,1,10,1
  3635.  Data 12,20,20,1,1,12,1
  3636.  Data 13,11,11,1,1,13,1
  3637.  Data 16,2,2,78,1,16,1
  3638.  Data 18,2,2,78,1,18,1
  3639.  Data 20,10,10,1,1,20,1
  3640.  Data 20,23,23,1,1,20,1
  3641.  Data 20,31,31,1,1,20,1
  3642.  Data 20,40,40,1,1,20,1
  3643.  Data 20,50,50,1,1,20,1
  3644.  Data 20,59,59,1,1,20,1
  3645.  Data 20,67,67,1,1,20,1
  3646.  Data 20,75,75,1,1,20,1
  3647.  Data 4,49,49,30,5,4,1
  3648.  Data 10,61,61,1,1,10,1
  3649.  Data 12,56,56,1,1,12,1
  3650.  Data 14,62,62,1,1,14,1
  3651.  
  3652. SpellEditData2:
  3653.  Data 14,2,2,40,1,14,1
  3654.  
  3655. ActionEditData:
  3656.  Data 4,17,17,5,1,4,1
  3657.  Data 6,18,18,5,1,6,1
  3658.  Data 8,14,14,5,1,8,1
  3659.  Data 11,2,2,30,1,11,1
  3660.  Data 13,14,14,5,1,13,1
  3661.  Data 15,16,16,3,1,15,1
  3662.  Data 18,8,8,1,1,18,1
  3663.  Data 18,15,15,1,1,18,1
  3664.  Data 18,23,23,1,1,18,1
  3665.  Data 18,30,30,1,1,18,1
  3666.  Data 18,36,36,1,1,18,1
  3667.  Data 18,41,41,1,1,18,1
  3668.  Data 18,48,48,1,1,18,1
  3669.  Data 18,53,53,1,1,18,1
  3670.  Data 18,58,58,1,1,18,1
  3671.  Data 18,63,63,1,1,18,1
  3672.  Data 18,68,68,1,1,18,1
  3673.  Data 18,76,76,1,1,18,1
  3674.  Data 4,62,62,5,1,4,1
  3675.  Data 6,65,65,5,1,6,1
  3676.  Data 8,57,57,1,1,8,1
  3677.  Data 10,77,77,1,1,10,1
  3678.  Data 12,64,64,1,1,12,1
  3679.  Data 13,67,67,5,1,13,1
  3680.  Data 15,60,60,4,1,15,1
  3681.  Data 15,76,76,4,1,15,1
  3682.  
  3683. UserEditData:
  3684.  Data 4,2,2,30,1,4,1
  3685.  Data 6,2,2,30,1,6,1
  3686.  Data 8,2,2,5,1,8,1
  3687.  Data 10,2,2,5,1,10,1
  3688.  Data 11,7,7,10,1,11,1
  3689.  Data 12,29,29,1,1,12,1
  3690.  Data 13,12,12,7,1,13,1
  3691.  Data 15,2,2,20,1,15,1
  3692.  Data 16,30,30,1,1,16,1
  3693.  Data 17,7,7,3,1,17,1
  3694.  Data 17,17,17,3,1,17,1
  3695.  Data 17,27,27,3,1,17,1
  3696.  Data 17,41,41,3,1,17,1
  3697.  Data 19,10,10,5,1,19,1
  3698.  Data 19,25,25,5,1,19,1
  3699.  Data 19,37,37,5,1,19,1
  3700.  Data 21,17,17,5,1,21,1
  3701.  Data 3,54,54,22,1,3,1
  3702.  Data 5,55,55,22,1,5,1
  3703.  Data 7,62,62,3,1,7,1
  3704.  Data 9,59,59,5,1,9,1
  3705.  Data 11,63,63,5,1,11,1
  3706.  Data 13,57,57,5,1,13,1
  3707.  Data 15,60,60,5,1,15,1
  3708.  Data 17,63,63,5,1,17,1
  3709.  Data 19,56,56,5,1,19,1
  3710.  Data 21,59,59,5,1,21,1
  3711.  
  3712. UserEditData2:
  3713.  Data 13,20,20,7,1,13,1
  3714.  
  3715. NonplayerEditData:
  3716.  Data 4,2,2,30,1,4,1
  3717.  Data 7,2,2,30,1,7,1
  3718.  Data 9,8,8,5,1,9,1
  3719.  Data 11,7,7,5,1,11,1
  3720.  Data 13,13,13,5,1,13,1
  3721.  Data 15,2,2,30,5,15,1
  3722.  Data 21,10,10,1,1,21,1
  3723.  Data 21,22,22,20,1,21,1
  3724.  Data 3,58,58,5,1,3,1
  3725.  Data 5,52,52,1,1,5,1
  3726.  Data 5,68,68,3,1,5,1
  3727.  Data 7,57,57,1,1,7,1
  3728.  Data 7,68,68,3,1,7,1
  3729.  Data 9,51,51,1,1,9,1
  3730.  Data 9,68,68,3,1,9,1
  3731.  Data 11,53,53,1,1,11,1
  3732.  Data 11,68,68,3,1,11,1
  3733.  Data 13,52,52,1,1,13,1
  3734.  Data 13,68,68,3,1,13,1
  3735.  Data 13,72,72,3,1,13,1
  3736.  Data 15,56,56,1,1,15,1
  3737.  Data 15,68,68,3,1,15,1
  3738.  Data 17,51,51,20,1,17,1
  3739.  
  3740. MonclassData1:
  3741.  Data 13,13,5,1,1
  3742.  
  3743. MonclassData2:
  3744.  Data 23,18,18,5,1,23,1
  3745.  
  3746. MonclassData3:
  3747.  Data 23,32,32,30,1,23,1
  3748.  
  3749. RoomLinkData1:
  3750.  Data 5,1,1
  3751.  
  3752. RoomLinkData2:
  3753.  Data 23,14,14,5,1,23,1
  3754.