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 / EDIT.BAS < prev    next >
BASIC Source File  |  1993-01-04  |  112KB  |  4,583 lines

  1.  Rem edit.bas v2.9c
  2.  Rem $Include: 'dndbbs.inc'
  3.  
  4.  On Error Goto 10002
  5.  Call Read.Config
  6.  Graphics.Off=False
  7.  Strng="Edit utility V"+Left$(Version$,4)
  8.  Call IO.O
  9.  No.Input.Out="N"
  10.  Strng="Short menus(y/n)?"
  11.  Call IO.I
  12.  TempC=False
  13.  If Yes Then
  14.     TempC=True
  15.  Endif
  16.  No.Input.Out="N"
  17.  Strng="Use hotkeys(y/n)?"
  18.  Call IO.I
  19.  TempD=False
  20.  If Yes Then
  21.     TempD=1
  22.  Endif
  23.  Do
  24.     Graphics.Off=True
  25.     If TempC=False Then
  26.        Strng="[A]ction"
  27.        Call IO.O
  28.        Strng="[E]mail"
  29.        Call IO.O
  30.        Strng="[M]onster"
  31.        Call IO.O
  32.        Strng="[N]onplayer"
  33.        Call IO.O
  34.        Strng="[O]bject"
  35.        Call IO.O
  36.        Strng="[R]oom"
  37.        Call IO.O
  38.        Strng="[S]pell"
  39.        Call IO.O
  40.        Strng="[T]reasure"
  41.        Call IO.O
  42.        Strng="[U]ser"
  43.        Call IO.O
  44.        Graphics.Off=False
  45.     Endif
  46.     Strng="Edit option(q to quit)?"
  47.     Line.Length=TempD
  48.     No.Input.Out="Q"
  49.     Call IO.I
  50.     Select Case Ucase$(Out2)
  51.     Case "A"
  52.        Call Edit.Action
  53.     Case "E"
  54.        Call Edit.Mail
  55.     Case "M"
  56.        Call Edit.Monster
  57.     Case "N"
  58.        Call Edit.Nonplayer
  59.     Case "O"
  60.        Call Edit.Object
  61.     Case "R"
  62.        Call Edit.Room
  63.     Case "S"
  64.        Call Edit.Spell
  65.     Case "T"
  66.        Call Edit.Treasure
  67.     Case "U"
  68.        Call Edit.User
  69.     Case "Q"
  70.        Exit Do
  71.     End Select
  72.  Loop
  73. 10001
  74.  Call Terminate
  75. 10002
  76.  Resume 10001
  77.  End
  78.  
  79. Sub Terminate
  80.  On Local Error Goto 10012
  81.  If Data.Error Then
  82.     Call Screen.ANSI(3,0,0)
  83.     Call Screen.ANSI(2,24,1)
  84.     Locate 24,1,1
  85.     Call Screen.ANSI(1,37,7)
  86.     Call Scrn(Strng)
  87.     End
  88.  Endif
  89.  If Chained Then
  90.     Strng=Nul
  91.     Call IO.O
  92.  Endif
  93.  If Max.Row=22 Then
  94.     Strng=Nul
  95.     Call IO.O
  96.     Locate 23,1,1
  97.  Endif
  98.  If Chained Then
  99.     Chain DND.Path$+"dndbbs.exe"
  100.  Endif
  101.  Call Screen.ANSI(1,37,7)
  102. 10011
  103.  End
  104. 10012
  105.  Resume 10011
  106. End Sub
  107.  
  108. Sub Edit.Object
  109.  On Local Error Goto 10022
  110.  If Lof(6)=False Then
  111.     Call Add.Object
  112.  Endif
  113.  Do
  114.     Graphics.Off=True
  115.     If TempC=False Then
  116.        Strng="[A]dd"
  117.        Call IO.O
  118.        Strng="[C]hange"
  119.        Call IO.O
  120.        Strng="[L]ist"
  121.        Call IO.O
  122.        Strng="[S]earch"
  123.        Call IO.O
  124.        Graphics.Off=False
  125.     Endif
  126.     Strng="Object edit option(q to quit)?"
  127.     Line.Length=TempD
  128.     No.Input.Out="Q"
  129.     Call IO.I
  130.     Select Case Ucase$(Out2)
  131.     Case "A"
  132.        Call Add.Object
  133.     Case "C"
  134.        Call Find.Object
  135.        If Temp Then
  136.           Temp4=Temp
  137.           Call Change.Object
  138.        Endif
  139.     Case "L"
  140.        Call List.Object
  141.     Case "S"
  142.        Call Search.Object
  143.     Case "Q"
  144.        Exit Do
  145.     End Select
  146.  Loop
  147. 10021
  148.  Exit Sub
  149. 10022
  150.  Resume 10021
  151. End Sub
  152.  
  153. Sub List.Object
  154.  On Local Error Goto 10032
  155.  Temp3=Lof(6)/Len(ObjectRecord)
  156.  Temp$=Mid$(Str$(Temp3),2)
  157.  Strng="From(1-"+Temp$+")?"
  158.  No.Input.Out="1"
  159.  Call IO.I
  160.  Temp=Int(Val(Out2))
  161.  If Temp<1 Or Temp>Temp3 Then
  162.     Strng=Range$
  163.     Call IO.O
  164.     Exit Sub
  165.  Endif
  166.  Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
  167.  No.Input.Out=Temp$
  168.  Call IO.I
  169.  Temp2=Int(Val(Out2))
  170.  If Temp2<Temp Then
  171.     Strng=Range$
  172.     Call IO.O
  173.     Exit Sub
  174.  Endif
  175.  If Temp2>Temp3 Then
  176.     Temp2=Temp3
  177.  Endif
  178.  For Temp5=Temp To Temp2
  179.     Get 6,Temp5,ObjectRecord
  180.     Call Display.Object(False)
  181.     Graphics.Off=False
  182.     Call More.Prompt
  183.     If No Then
  184.        Exit Sub
  185.     Endif
  186.  Next
  187. 10031
  188.  Exit Sub
  189. 10032
  190.  Resume 10031
  191. End Sub
  192.  
  193. Sub Add.Object
  194.  On Local Error Goto 10042
  195.  Temp4=Lof(6)/Len(ObjectRecord)+1
  196.  ObjectRecord.ObjectName=Nul
  197.  ObjectRecord.ShortName=Nul
  198.  ObjectRecord.LongDesc=Nul
  199.  ObjectRecord.ShortDesc=Nul
  200.  ObjectRecord.RoomLink=False
  201.  ObjectRecord.Invisible=False
  202.  ObjectRecord.JailTrap=False
  203.  ObjectRecord.DoorLock=False
  204.  ObjectRecord.Relocks=False
  205.  ObjectRecord.Hidden=False
  206.  ObjectRecord.Closed=False
  207.  ObjectRecord.Keyed=False
  208.  ObjectRecord.Permanent=True
  209.  Put 6,Temp4,ObjectRecord
  210.  Call Change.Object
  211. 10041
  212.  Exit Sub
  213. 10042
  214.  Resume 10041
  215. End Sub
  216.  
  217. Sub Change.Object
  218.  On Local Error Goto 10052
  219.  Get 6,Temp4,ObjectRecord
  220.  Do
  221.     Temp5=Temp4
  222.     Call Display.Object(True)
  223.     Graphics.Off=False
  224.     Strng="Object change option(q to quit)?"
  225.     Line.Length=TempD
  226.     No.Input.Out="Q"
  227.     Call IO.I
  228.     Select Case Ucase$(Out2)
  229.     Case "A"
  230.        Strng="Object name(30 characters):"
  231.        Call IO.O
  232.        Strng="?"
  233.        No.Input.Out=None$
  234.        Call IO.I
  235.        Out2=Lcase$(Out2)
  236.        ObjectRecord.ObjectName=Out2
  237.     Case "B"
  238.        Strng="Object identifier(30 characters):"
  239.        Call IO.O
  240.        Strng="?"
  241.        No.Input.Out=None$
  242.        Call IO.I
  243.        Out2=Ucase$(Out2)
  244.        ObjectRecord.ShortName=Out2
  245.     Case "C"
  246.        Strng="Room number link(press "+Enter$+" for new room)?"
  247.        No.Input.Out="<new room>"
  248.        Call IO.I
  249.        TempX=Temp4
  250.        Temp4=Int(Val(Out2))
  251.        If Temp4=False Then
  252.           Graphics.Off=True
  253.           Strng="Create a new room(y/n)?"
  254.           No.Input.Out="Y"
  255.           Call IO.I
  256.           If Yes Then
  257.              Call Add.Room
  258.           Endif
  259.        Endif
  260.        ObjectRecord.RoomLink=Temp4
  261.        Temp4=TempX
  262.     Case "D"
  263.        Strng="Trapped portal(y/n)?"
  264.        Line.Length=TempD
  265.        No.Input.Out="Y"
  266.        Call IO.I
  267.        ObjectRecord.Teleport=False
  268.        ObjectRecord.Trap=False
  269.        If Yes Then
  270.           Do
  271.              Graphics.Off=True
  272.              If TempC=False Then
  273.                 Strng="[P]oison needles"
  274.                 Call IO.O
  275.                 Strng="[T]eleport to room number"
  276.                 Call IO.O
  277.                 Strng="[H]its for fatigue or vitality"
  278.                 Call IO.O
  279.                 Graphics.Off=False
  280.              Endif
  281.              Strng="Object trap option(q to quit)?"
  282.              No.Input.Out="Q"
  283.              Line.Length=TempD
  284.              Call IO.I
  285.              Select Case Ucase$(Out2)
  286.              Case "P"
  287.                 ObjectRecord.Trap=1
  288.              Case "T"
  289.                 ObjectRecord.Trap=2
  290.                 Strng="Room number?"
  291.                 No.Input.Out="1"
  292.                 Call IO.I
  293.                 ObjectRecord.Teleport=Int(Val(Out2))
  294.              Case "H"
  295.                 Temp8=False
  296.                 Do
  297.                    Graphics.Off=True
  298.                    If TempC=False Then
  299.                       Strng="[F]atigue"
  300.                       Call IO.O
  301.                       Strng="[V]itality"
  302.                       Call IO.O
  303.                       Strng="[N]one"
  304.                       Call IO.O
  305.                       Graphics.Off=False
  306.                    Endif
  307.                    Strng="Object trap hits option(q to quit)?"
  308.                    Line.Length=TempD
  309.                    No.Input.Out="Q"
  310.                    Call IO.I
  311.                    Select Case Ucase$(Out2)
  312.                    Case "F"
  313.                       Temp8=1
  314.                    Case "V"
  315.                       Temp8=True
  316.                    Case "N"
  317.                       Temp8=False
  318.                    Case "Q"
  319.                       Exit Do
  320.                    End Select
  321.                 Loop
  322.                 If Temp8 Then
  323.                    ObjectRecord.Trap=3
  324.                    Strng="Number of hits(1-32767)?"
  325.                    No.Input.Out="10"
  326.                    Call IO.I
  327.                    ObjectRecord.Teleport=Int(Val(Out2))*Temp8
  328.                 Endif
  329.              Case "Q"
  330.                 Exit Do
  331.              End Select
  332.           Loop
  333.        Endif
  334.     Case "E"
  335.        Strng="Long description(128 characters):"
  336.        Call IO.O
  337.        Strng="?"
  338.        No.Input.Out=None$
  339.        Call IO.I
  340.        ObjectRecord.LongDesc=Out2
  341.     Case "F"
  342.        Strng="Entry description(40 characters):"
  343.        Call IO.O
  344.        Strng="?"
  345.        No.Input.Out=None$
  346.        Call IO.I
  347.        ObjectRecord.ShortDesc=Out2
  348.     Case "G"
  349.        Strng="Hidden object(y/n)?"
  350.        Line.Length=TempD
  351.        No.Input.Out="Y"
  352.        Call IO.I
  353.        ObjectRecord.Hidden=False
  354.        If Yes Then
  355.           ObjectRecord.Hidden=True
  356.        Endif
  357.     Case "H"
  358.        Strng="Invisible object(y/n)?"
  359.        Line.Length=TempD
  360.        No.Input.Out="Y"
  361.        Call IO.I
  362.        ObjectRecord.Invisible=False
  363.        If Yes Then
  364.           ObjectRecord.Invisible=True
  365.        Endif
  366.     Case "I"
  367.        Strng="Jail attacker trap(y/n)?"
  368.        Line.Length=TempD
  369.        No.Input.Out="Y"
  370.        Call IO.I
  371.        ObjectRecord.JailTrap=False
  372.        If Yes Then
  373.           ObjectRecord.JailTrap=True
  374.        Endif
  375.     Case "J"
  376.        Strng="Locked portal(y/n)?"
  377.        Line.Length=TempD
  378.        No.Input.Out="Y"
  379.        Call IO.I
  380.        ObjectRecord.DoorLock=False
  381.        ObjectRecord.Closed=False
  382.        If Yes Then
  383.           ObjectRecord.DoorLock=2
  384.           ObjectRecord.Closed=True
  385.        Endif
  386.     Case "K"
  387.        Strng="Relocking portal(y/n)?"
  388.        Line.Length=TempD
  389.        No.Input.Out="Y"
  390.        Call IO.I
  391.        ObjectRecord.Relocks=False
  392.        If Yes Then
  393.           ObjectRecord.Relocks=True
  394.        Endif
  395.     Case "L"
  396.        Strng="Key number(1-32767)?"
  397.        No.Input.Out="12345"
  398.        Call IO.I
  399.        ObjectRecord.Keyed=Int(Val(Out2))
  400.     Case "M"
  401.        Strng="Permanent Object(y/n)?"
  402.        Line.Length=TempD
  403.        No.Input.Out="Y"
  404.        Call IO.I
  405.        ObjectRecord.Permanent=True
  406.        If No Then
  407.           ObjectRecord.Permanent=False
  408.        Endif
  409.     Case "Q"
  410.        Exit Do
  411.     End Select
  412.  Loop
  413.  Put 6,Temp4,ObjectRecord
  414.  Strng="Object '"+Rtrim$(ObjectRecord.ObjectName)+"' changed."
  415.  Call IO.O
  416.  Strng="Add object to room(y/n)?"
  417.  Line.Length=TempD
  418.  No.Input.Out="Y"
  419.  Call IO.I
  420.  If Yes Then
  421.     Strng="Room number(press "+Enter$+" for current room)?"
  422.     No.Input.Out="<current room>"
  423.     Call IO.I
  424.     Temp=Int(Val(Out2))
  425.     If Temp=False Then
  426.        Temp=Room
  427.     Endif
  428.     If Temp<1 Or Temp>Lof(5)/Len(RoomRecord) Then
  429.        Strng=Range$
  430.        Call IO.O
  431.        Exit Sub
  432.     Endif
  433.     Get 5,Temp,RoomRecord
  434.     For Temp5=1 To 10
  435.        If RoomRecord.Object(Temp5)=False Then
  436.           RoomRecord.Object(Temp5)=Temp4
  437.           RoomRecord.ObjCharges(Temp5)=False
  438.           RoomRecord.Flags(Temp5)=False
  439.           Put 5,Temp,RoomRecord
  440.           Strng="Object added to room number"+Str$(Temp)+"."
  441.           Call IO.O
  442.           Exit Sub
  443.        Endif
  444.     Next
  445.     Strng="There are no empty objects in room"+Str$(Temp)+"."
  446.     Call IO.O
  447.  Endif
  448. 10051
  449.  Exit Sub
  450. 10052
  451.  Resume 10051
  452. End Sub
  453.  
  454. Sub Display.Object(TempX)
  455.  On Local Error Goto 10062
  456.  If TempX Then
  457.     If TempC Then
  458.        Exit Sub
  459.     Endif
  460.  Endif
  461.  Graphics.Off=True
  462.  Strng="Object number"+Str$(Temp5)+":"
  463.  Call IO.O
  464.  If TempX Then
  465.     Strng="[A]"
  466.  Endif
  467.  Strng=Strng+"Object name: "+Rtrim$(ObjectRecord.ObjectName)
  468.  Call IO.O
  469.  If TempX Then
  470.     Strng="[B]"
  471.  Endif
  472.  Strng=Strng+"Object identifier: "+Rtrim$(ObjectRecord.ShortName)
  473.  Call IO.O
  474.  If TempX Then
  475.     Strng="[C]"
  476.  Endif
  477.  Strng=Strng+"Room number link:"+Str$(ObjectRecord.RoomLink)
  478.  Call IO.O
  479.  If TempX Then
  480.     Strng="[D]"
  481.  Endif
  482.  Strng=Strng+"Trapped portal: "
  483.  If ObjectRecord.Trap=False Then
  484.     Strng=Strng+"No"
  485.  Endif
  486.  If ObjectRecord.Trap=1 Then
  487.     Strng=Strng+"poison needles"
  488.  Endif
  489.  If ObjectRecord.Trap=2 Then
  490.     Strng=Strng+"teleport to"+Str$(ObjectRecord.Teleport)
  491.  Endif
  492.  If ObjectRecord.Trap=3 Then
  493.     Strng=Strng+"hits for"+Str$(Abs(ObjectRecord.Teleport))
  494.     If ObjectRecord.Teleport<False Then
  495.        Strng=Strng+" vitality"
  496.     Else
  497.        Strng=Strng+" fatigue"
  498.     Endif
  499.  Endif
  500.  Call IO.O
  501.  If TempX Then
  502.     Strng="[E]"
  503.  Endif
  504.  Strng=Strng+"Long description: "+Rtrim$(ObjectRecord.LongDesc)
  505.  Call IO.O
  506.  If TempX Then
  507.     Strng="[F]"
  508.  Endif
  509.  Strng=Strng+"Entry description: "+Rtrim$(ObjectRecord.ShortDesc)
  510.  Call IO.O
  511.  If TempX Then
  512.     Strng="[G]"
  513.  Endif
  514.  Strng=Strng+"Hidden object: "
  515.  If ObjectRecord.Hidden Then
  516.     Strng=Strng+"Yes"
  517.  Else
  518.     Strng=Strng+"No"
  519.  Endif
  520.  Call IO.O
  521.  If TempX Then
  522.     Strng="[H]"
  523.  Endif
  524.  Strng=Strng+"Invisible object: "
  525.  If ObjectRecord.Invisible Then
  526.     Strng=Strng+"Yes"
  527.  Else
  528.     Strng=Strng+"No"
  529.  Endif
  530.  Call IO.O
  531.  If TempX Then
  532.     Strng="[I]"
  533.  Endif
  534.  Strng=Strng+"Jail attacker trap: "
  535.  If ObjectRecord.JailTrap Then
  536.     Strng=Strng+"Yes"
  537.  Else
  538.     Strng=Strng+"No"
  539.  Endif
  540.  Call IO.O
  541.  If TempX Then
  542.     Strng="[J]"
  543.  Endif
  544.  Strng=Strng+"Locked portal: "
  545.  If ObjectRecord.DoorLock=2 Then
  546.     Strng=Strng+"Yes"
  547.  Else
  548.     Strng=Strng+"No"
  549.  Endif
  550.  Call IO.O
  551.  If TempX Then
  552.     Strng="[K]"
  553.  Endif
  554.  Strng=Strng+"Relocking portal: "
  555.  If ObjectRecord.Relocks Then
  556.     Strng=Strng+"Yes"
  557.  Else
  558.     Strng=Strng+"No"
  559.  Endif
  560.  Call IO.O
  561.  If TempX Then
  562.     Strng="[L]"
  563.  Endif
  564.  Strng=Strng+"Key number:"+Str$(ObjectRecord.Keyed)
  565.  Call IO.O
  566.  If TempX Then
  567.     Strng="[M]"
  568.  Endif
  569.  Strng=Strng+"Permanent object: "
  570.  If ObjectRecord.Permanent Then
  571.     Strng=Strng+"Yes"
  572.  Else
  573.     Strng=Strng+"No"
  574.  Endif
  575.  Call IO.O
  576. 10061
  577.  Exit Sub
  578. 10062
  579.  Resume 10061
  580. End Sub
  581.  
  582. Sub Edit.Action
  583.  On Local Error Goto 10072
  584.  If Lof(5)=False Then
  585.     Call Add.Room
  586.  Endif
  587.  Temp2=1
  588.  Get 5,Temp2,RoomRecord
  589.  Do
  590.     Graphics.Off=True
  591.     If TempC=False Then
  592.        Strng="Triggers:"
  593.        Call IO.O
  594.        Graphics.Off=True
  595.        Strng="[E]ncounter monster"
  596.        Call IO.O
  597.        Strng="[S]pells"
  598.        Call IO.O
  599.        Strng="[M]onster talk"
  600.        Call IO.O
  601.        Strng="[L]evel entry"
  602.        Call IO.O
  603.        Graphics.Off=False
  604.        Strng="Results:"
  605.        Call IO.O
  606.        Graphics.Off=True
  607.        Strng="[H]ealth"
  608.        Call IO.O
  609.        Strng="[R]ate"
  610.        Call IO.O
  611.        Strng="[I]nventory"
  612.        Call IO.O
  613.        Strng="[F]umble"
  614.        Call IO.O
  615.        Strng="[T]eleport"
  616.        Call IO.O
  617.        Graphics.Off=False
  618.        Strng="Other:"
  619.        Call IO.O
  620.        Graphics.Off=True
  621.        Strng="[C]lear room"
  622.        Call IO.O
  623.        Strng="[W]eapon rusting"
  624.        Call IO.O
  625.        Strng="[O]bject stealing"
  626.        Call IO.O
  627.        Strng="[N]ew room number"
  628.        Call IO.O
  629.        Strng="[D]isplay room actions"
  630.        Call IO.O
  631.        Graphics.Off=False
  632.     Endif
  633.     Strng="Action edit option(q to quit)?"
  634.     Line.Length=TempD
  635.     No.Input.Out="Q"
  636.     Call IO.I
  637.     Select Case Ucase$(Out2)
  638.     Case "E"
  639.        Call Find.Monster
  640.        If Temp Then
  641.           RoomRecord.MonsterTrigger=Temp
  642.           Strng="Monster trigger added to room."
  643.           Call IO.O
  644.        Endif
  645.     Case "S"
  646.        Call Find.Spell
  647.        If Temp Then
  648.           RoomRecord.SpellTrigger=Temp
  649.           Strng="Spell trigger added to room."
  650.           Call IO.O
  651.        Endif
  652.     Case "M"
  653.        Call Find.Monster
  654.        If Temp Then
  655.           RoomRecord.MonsterTalk=Temp
  656.           Strng="Monster talk trigger added to room."
  657.           Call IO.O
  658.        Endif
  659.     Case "L"
  660.        Do
  661.           Graphics.Off=True
  662.           If TempC=False Then
  663.              Strng="[H]ighest level (at least) for entry to room"
  664.              Call IO.O
  665.              Strng="[L]owest level (at most) for entry to room"
  666.              Call IO.O
  667.              Strng="[E]nter room restrictions"
  668.              Call IO.O
  669.              Graphics.Off=False
  670.           Endif
  671.           Strng="Action level entry option(q to quit)?"
  672.           Line.Length=TempD
  673.           No.Input.Out="Q"
  674.           Call IO.I
  675.           Select Case Ucase$(Out2)
  676.           Case "H"
  677.              Strng="Highest level user must be (at least) to enter room?"
  678.              No.Input.Out="1"
  679.              Call IO.I
  680.              RoomRecord.Level=Int(Val(Out2))
  681.           Case "L"
  682.              Strng="Lowest level user must be (at most) to enter room?"
  683.              No.Input.Out="1"
  684.              Call IO.I
  685.              RoomRecord.Level=-Int(Val(Out2))
  686.           Case "E"
  687.              Do
  688.                 Graphics.Off=True
  689.                 If TempC=False Then
  690.                    Strng="[N]orth"
  691.                    Call IO.O
  692.                    Strng="[E]ast"
  693.                    Call IO.O
  694.                    Strng="[S]outh"
  695.                    Call IO.O
  696.                    Strng="[W]est"
  697.                    Call IO.O
  698.                    Strng="[O]ut"
  699.                    Call IO.O
  700.                    Strng="[U]p"
  701.                    Call IO.O
  702.                    Strng="[D]own"
  703.                    Call IO.O
  704.                    Strng="[NE]northeast"
  705.                    Call IO.O
  706.                    Strng="[SE]southeast"
  707.                    Call IO.O
  708.                    Strng="[SW]southwest"
  709.                    Call IO.O
  710.                    Strng="[NW]northwest"
  711.                    Call IO.O
  712.                    Strng="[G]o to portal"
  713.                    Call IO.O
  714.                    Graphics.Off=False
  715.                 Endif
  716.                 Strng="Action room restriction option(q to quit)?"
  717.                 No.Input.Out="Q"
  718.                 Call IO.I
  719.                 Temp=False
  720.                 Select Case Ucase$(Out2)
  721.                 Case "N"
  722.                    Temp=1
  723.                 Case "E"
  724.                    Temp=2
  725.                 Case "S"
  726.                    Temp=3
  727.                 Case "W"
  728.                    Temp=4
  729.                 Case "O"
  730.                    Temp=5
  731.                 Case "U"
  732.                    Temp=6
  733.                 Case "D"
  734.                    Temp=7
  735.                 Case "NE"
  736.                    Temp=8
  737.                 Case "SE"
  738.                    Temp=9
  739.                 Case "SW"
  740.                    Temp=10
  741.                 Case "NW"
  742.                    Temp=11
  743.                 Case "G"
  744.                    Temp=12
  745.                 Case "Q"
  746.                    Exit Do
  747.                 End Select
  748.                 If Temp Then
  749.                    RoomRecord.Restrictions=RoomRecord.Restrictions Or 2^Temp
  750.                    Strng="Direction restricted."
  751.                    Call IO.O
  752.                 Endif
  753.              Loop
  754.           Case "Q"
  755.              Exit Do
  756.           End Select
  757.        Loop
  758.     Case "H"
  759.        Do
  760.           Graphics.Off=True
  761.           If TempC=False Then
  762.              Strng="[F]atigue"
  763.              Call IO.O
  764.              Strng="[V]itality"
  765.              Call IO.O
  766.              Graphics.Off=False
  767.           Endif
  768.           Strng="Action health rate option(q to quit)?"
  769.           Line.Length=TempD
  770.           No.Input.Out="Q"
  771.           Call IO.I
  772.           Select Case Ucase$(Out2)
  773.           Case "F"
  774.              Strng="Number of hits of fatigue(1-32767)?"
  775.              No.Input.Out="10"
  776.              Call IO.I
  777.              RoomRecord.HitPoints=Int(Val(Out2))
  778.              Strng="Room now hits for fatigue."
  779.              Call IO.O
  780.           Case "V"
  781.              Strng="Number of hits of vitality(1-32767)?"
  782.              No.Input.Out="10"
  783.              Call IO.I
  784.              RoomRecord.HitPoints=-Int(Val(Out2))
  785.              Strng="Room now hits for vitality."
  786.              Call IO.O
  787.           Case "Q"
  788.              Exit Do
  789.           End Select
  790.        Loop
  791.     Case "R"
  792.        Do
  793.           Graphics.Off=True
  794.           If TempC=False Then
  795.              Strng="[E]ncounter"
  796.              Call IO.O
  797.              Strng="[H]ealth"
  798.              Call IO.O
  799.              Graphics.Off=False
  800.           Endif
  801.           Strng="Action room rate option(q to quit)?"
  802.           Line.Length=TempD
  803.           No.Input.Out="Q"
  804.           Call IO.I
  805.           Select Case Ucase$(Out2)
  806.           Case "E"
  807.              Strng="Encounter rate(1-32767)?"
  808.              No.Input.Out="6"
  809.              Call IO.I
  810.              RoomRecord.EncounterRate=Int(Val(Out2))
  811.              Strng="New encounter rate now in effect."
  812.              Call IO.O
  813.           Case "H"
  814.              Strng="Health rate(1-32767)?"
  815.              No.Input.Out="6"
  816.              Call IO.I
  817.              RoomRecord.HealthRate=Int(Val(Out2))
  818.              Strng="Health rate now in effect."
  819.              Call IO.O
  820.           Case "Q"
  821.              Exit Do
  822.           End Select
  823.        Loop
  824.     Case "I"
  825.        Do
  826.           Graphics.Off=True
  827.           If TempC=False Then
  828.              Strng="[W]eapons"
  829.              Call IO.O
  830.              Strng="[S]hields"
  831.              Call IO.O
  832.              Strng="[A]rmor"
  833.              Call IO.O
  834.              Strng="[M]agic items"
  835.              Call IO.O
  836.              Graphics.Off=False
  837.           Endif
  838.           Strng="Action inventory option(q to quit)?"
  839.           Line.Length=TempD
  840.           No.Input.Out="Q"
  841.           Call IO.I
  842.           Select Case Ucase$(Out2)
  843.           Case "W"
  844.              RoomRecord.Inventory=1
  845.              Strng="Room now breaks weapons."
  846.              Call IO.O
  847.           Case "S"
  848.              RoomRecord.Inventory=2
  849.              Strng="Room now smashes shields."
  850.              Call IO.O
  851.           Case "A"
  852.              RoomRecord.Inventory=3
  853.              Strng="Room now wrecks armor."
  854.              Call IO.O
  855.           Case "M"
  856.              RoomRecord.Inventory=4
  857.              Strng="Room now drains magic items."
  858.              Call IO.O
  859.           Case "Q"
  860.              Exit Do
  861.           End Select
  862.        Loop
  863.     Case "F"
  864.        RoomRecord.Fumble=True
  865.        Strng="Room now fumbles."
  866.        Call IO.O
  867.     Case "T"
  868.        Temp3=Lof(5)/Len(RoomRecord)
  869.        Strng="Room number"+"(1-"+Mid$(Str$(Temp3),2)+")?"
  870.        No.Input.Out="1"
  871.        Call IO.I
  872.        Temp=Int(Val(Out2))
  873.        Strng=Range$
  874.        If Temp>False And Temp<=Temp3 Then
  875.           RoomRecord.Teleport=Temp
  876.           Strng="Room now teleports."
  877.        Endif
  878.        Call IO.O
  879.     Case "W"
  880.        Strng="Rate for weapons to rust(# of action prompts)?"
  881.        No.Input.Out="6"
  882.        Call IO.I
  883.        Temp=Int(Val(Out2))
  884.        RoomRecord.RustRate=Temp
  885.        Strng="Room now has weapon rusting rate."
  886.        Call IO.O
  887.     Case "O"
  888.        Strng="Rate for monsters to steal treasure(# of action prompts)?"
  889.        No.Input.Out="6"
  890.        Call IO.I
  891.        Temp=Int(Val(Out2))
  892.        RoomRecord.StealRate=Temp
  893.        Strng="Room now has monster stealing rate."
  894.        Call IO.O
  895.     Case "C"
  896.        RoomRecord.SpellTrigger=False
  897.        RoomRecord.MonsterTrigger=False
  898.        RoomRecord.HealthRate=False
  899.        RoomRecord.EncounterRate=False
  900.        RoomRecord.HitPoints=False
  901.        RoomRecord.Inventory=False
  902.        RoomRecord.MonsterTalk=False
  903.        RoomRecord.Fumble=False
  904.        RoomRecord.Teleport=False
  905.        RoomRecord.Level=False
  906.        RoomRecord.Restrictions=False
  907.        RoomRecord.RustRate=False
  908.        RoomRecord.StealRate=False
  909.        Strng="Room cleared of actions."
  910.        Call IO.O
  911.     Case "N"
  912.        Temp3=Lof(5)/Len(RoomRecord)
  913.        Strng="Room number(1-"+Mid$(Str$(Temp3),2)+")?"
  914.        No.Input.Out="1"
  915.        Call IO.I
  916.        Put 5,Temp2,RoomRecord
  917.        Temp2=Int(Val(Out2))
  918.        If Temp2<1 Or Temp2>Temp3 Then
  919.           Strng=Range$
  920.           Call IO.O
  921.           Temp2=1
  922.        Endif
  923.        Get 5,Temp2,RoomRecord
  924.     Case "D"
  925.        Temp=False
  926.        Graphics.Off=True
  927.        If RoomRecord.MonsterTrigger Then
  928.           Get 7,RoomRecord.MonsterTrigger,MonsterRecord
  929.           Strng2=MonsterRecord.MonsterName
  930.           Strng2=Rtrim$(Strng2)
  931.           Strng="Monster trigger in effect for monster:"+_
  932.           Str$(RoomRecord.MonsterTrigger)+", "+Strng2+"."
  933.           Call IO.O
  934.           Temp=True
  935.        Endif
  936.        If RoomRecord.SpellTrigger Then
  937.           Get 4,RoomRecord.SpellTrigger,SpellRecord
  938.           Strng2=SpellRecord.SpellName
  939.           Strng2=Rtrim$(Strng2)
  940.           Strng="Spell trigger in effect for spell:"+_
  941.           Str$(RoomRecord.SpellTrigger)+", "+Strng2+"."
  942.           Call IO.O
  943.           Temp=True
  944.        Endif
  945.        If RoomRecord.MonsterTalk Then
  946.           Get 7,RoomRecord.MonsterTalk,MonsterRecord
  947.           Strng2=MonsterRecord.MonsterName
  948.           Strng2=Rtrim$(Strng2)
  949.           Strng="Monster talk trigger in effect for monster:"+_
  950.           Str$(RoomRecord.MonsterTalk)+", "+Strng2+"."
  951.           Call IO.O
  952.           Temp=True
  953.        Endif
  954.        If RoomRecord.Level>False Then
  955.           Strng="Highest level user must be (at least) to enter room:"+_
  956.           Str$(RoomRecord.Level)+"."
  957.           Call IO.O
  958.           Temp=True
  959.        Endif
  960.        If RoomRecord.Level<False Then
  961.           Strng="Lowest level user must be (at most) to enter room:"+_
  962.           Str$(Abs(RoomRecord.Level))+"."
  963.           Call IO.O
  964.           Temp=True
  965.        Endif
  966.        If RoomRecord.Restrictions>False Then
  967.           Strng="Restricted room directions:"
  968.           Call IO.O
  969.           Strng=Nul
  970.           If RoomRecord.Restrictions And 2^1 Then
  971.              Strng=Strng+"North, "
  972.           Endif
  973.           If RoomRecord.Restrictions And 2^2 Then
  974.              Strng=Strng+"East, "
  975.           Endif
  976.           If RoomRecord.Restrictions And 2^3 Then
  977.              Strng=Strng+"South, "
  978.           Endif
  979.           If RoomRecord.Restrictions And 2^4 Then
  980.              Strng=Strng+"West, "
  981.           Endif
  982.           If RoomRecord.Restrictions And 2^5 Then
  983.              Strng=Strng+"Out, "
  984.           Endif
  985.           If RoomRecord.Restrictions And 2^6 Then
  986.              Strng=Strng+"Up, "
  987.           Endif
  988.           If RoomRecord.Restrictions And 2^7 Then
  989.              Strng=Strng+"Down, "
  990.           Endif
  991.           If RoomRecord.Restrictions And 2^8 Then
  992.              Strng=Strng+"Northeast, "
  993.           Endif
  994.           If RoomRecord.Restrictions And 2^9 Then
  995.              Strng=Strng+"Southeast, "
  996.           Endif
  997.           If RoomRecord.Restrictions And 2^10 Then
  998.              Strng=Strng+"Southwest, "
  999.           Endif
  1000.           If RoomRecord.Restrictions And 2^11 Then
  1001.              Strng=Strng+"Northwest, "
  1002.           Endif
  1003.           If RoomRecord.Restrictions And 2^12 Then
  1004.              Strng=Strng+"Go to portal, "
  1005.           Endif
  1006.           If Len(Strng) Then
  1007.              Strng=Left$(Strng,Len(Strng)-2)
  1008.              Call IO.O
  1009.              Temp=True
  1010.           Endif
  1011.        Endif
  1012.        If RoomRecord.HitPoints>False Then
  1013.           Strng="Room hits for"+Str$(RoomRecord.HitPoints)+" fatigue."
  1014.           Call IO.O
  1015.           Temp=True
  1016.        Endif
  1017.        If RoomRecord.HitPoints<False Then
  1018.           Strng="Room hits for"+Str$(Abs(RoomRecord.HitPoints))+" vitality."
  1019.           Call IO.O
  1020.           Temp=True
  1021.        Endif
  1022.        If RoomRecord.EncounterRate Then
  1023.           Strng="Encounter rate:"+Str$(RoomRecord.EncounterRate)+"."
  1024.           Call IO.O
  1025.           Temp=True
  1026.        Endif
  1027.        If RoomRecord.HealthRate Then
  1028.           Strng="Health rate:"+Str$(RoomRecord.HealthRate)+"."
  1029.           Call IO.O
  1030.           Temp=True
  1031.        Endif
  1032.        Select Case RoomRecord.Inventory
  1033.        Case 1
  1034.           Strng="Room breaks weapons."
  1035.           Call IO.O
  1036.           Temp=True
  1037.        Case 2
  1038.           Strng="Room smashes shields."
  1039.           Call IO.O
  1040.           Temp=True
  1041.        Case 3
  1042.           Strng="Room wrecks armor."
  1043.           Call IO.O
  1044.           Temp=True
  1045.        Case 4
  1046.           Strng="Room drains magic items."
  1047.           Call IO.O
  1048.           Temp=True
  1049.        End Select
  1050.        If RoomRecord.Fumble Then
  1051.           Strng="Room fumbles."
  1052.           Call IO.O
  1053.           Temp=True
  1054.        Endif
  1055.        If RoomRecord.Teleport Then
  1056.           Strng="Room teleports to room"+Str$(RoomRecord.Teleport)+"."
  1057.           Call IO.O
  1058.           Tmp=True
  1059.        Endif
  1060.        If RoomRecord.RustRate Then
  1061.           Strng="Room has weapon rusting rate of"+_
  1062.           Str$(RoomRecord.RustRate)+" action prompts."
  1063.           Call IO.O
  1064.           Temp=True
  1065.        Endif
  1066.        If RoomRecord.StealRate Then
  1067.           Strng="Room has monster stealing rate of"+_
  1068.           Str$(RoomRecord.StealRate)+" action prompts."
  1069.           Call IO.O
  1070.           Temp=True
  1071.        Endif
  1072.        If Temp=False Then
  1073.           Strng="Room has no triggers or results."
  1074.           Call IO.O
  1075.        Endif
  1076.        Graphics.Off=False
  1077.        Call More.Prompt
  1078.     Case "Q"
  1079.        Put 5,Temp2,RoomRecord
  1080.        Exit Do
  1081.     End Select
  1082.  Loop
  1083. 10071
  1084.  Exit Sub
  1085. 10072
  1086.  Resume 10071
  1087. End Sub
  1088.  
  1089. Sub Edit.Monster
  1090.  On Local Error Goto 10082
  1091.  Do
  1092.     Graphics.Off=True
  1093.     If TempC=False Then
  1094.        Strng="[A]dd"
  1095.        Call IO.O
  1096.        Strng="[C]hange"
  1097.        Call IO.O
  1098.        Strng="[L]ist"
  1099.        Call IO.O
  1100.        Strng="[S]earch"
  1101.        Call IO.O
  1102.        Strng="[M]onsterclass"
  1103.        Call IO.O
  1104.        Strng="[T]alk responses"
  1105.        Call IO.O
  1106.        Graphics.Off=False
  1107.     Endif
  1108.     Strng="Monster edit option(q to quit)?"
  1109.     Line.Length=TempD
  1110.     No.Input.Out="Q"
  1111.     Call IO.I
  1112.     Select Case Ucase$(Out2)
  1113.     Case "A"
  1114.        Call Add.Monster
  1115.     Case "C"
  1116.        Call Find.Monster
  1117.        If Temp Then
  1118.           Temp4=Temp
  1119.           Call Change.Monster
  1120.        Endif
  1121.     Case "L"
  1122.        Call List.Monster
  1123.     Case "S"
  1124.        Call Search.Monsters
  1125.     Case "M"
  1126.        Call Edit.Monclass
  1127.     Case "T"
  1128.        Call Edit.MonsterTalk
  1129.     Case "Q"
  1130.        Exit Sub
  1131.     End Select
  1132.  Loop
  1133. 10081
  1134.  Exit Sub
  1135. 10082
  1136.  Resume 10081
  1137. End Sub
  1138.  
  1139. Sub Add.Monster
  1140.  On Local Error Goto 10092
  1141.  Temp4=Lof(7)/Len(MonsterRecord)+1
  1142.  MonsterRecord.MonsterName=Nul
  1143.  MonsterRecord.PluralName=Nul
  1144.  For Temp6=1 To 5
  1145.     MonsterRecord.Treasure(Temp6)=False
  1146.  Next
  1147.  MonsterRecord.Experience=False
  1148.  MonsterRecord.NumberAppearing=False
  1149.  MonsterRecord.Level=False
  1150.  MonsterRecord.Hits=False
  1151.  MonsterRecord.Poison=False
  1152.  MonsterRecord.LevelDrain=False
  1153.  MonsterRecord.Spell=False
  1154.  MonsterRecord.Block=False
  1155.  MonsterRecord.Prevent=False
  1156.  MonsterRecord.Follow=False
  1157.  MonsterRecord.Magic=False
  1158.  MonsterRecord.Jail=False
  1159.  MonsterRecord.Teleport=False
  1160.  MonsterRecord.FollowPercent=False
  1161.  MonsterRecord.BlockPercent=False
  1162.  MonsterRecord.PreventPercent=False
  1163.  MonsterRecord.SpellPercent=False
  1164.  MonsterRecord.PoisonPercent=False
  1165.  MonsterRecord.DrainPercent=False
  1166.  MonsterRecord.Rate=False
  1167.  MonsterRecord.RatePercent=False
  1168.  MonsterRecord.Permanent=False
  1169.  For Temp6=1 To 5
  1170.     MonsterRecord.Talk(Temp6)=False
  1171.  Next
  1172.  MonsterRecord.Psionic=False
  1173.  MonsterRecord.PsionicSpell=False
  1174.  MonsterRecord.Equation=False
  1175.  MonsterRecord.MonsterEquate=Nul
  1176.  Put 7,Temp4,MonsterRecord
  1177.  Call Change.Monster
  1178. 10091
  1179.  Exit Sub
  1180. 10092
  1181.  Resume 10091
  1182. End Sub
  1183.  
  1184. Sub List.Monster
  1185.  On Local Error Goto 10102
  1186.  Temp3=Lof(7)/Len(MonsterRecord)
  1187.  Temp$=Mid$(Str$(Temp3),2)
  1188.  Strng="From(1-"+Temp$+")?"
  1189.  No.Input.Out="1"
  1190.  Call IO.I
  1191.  Temp=Int(Val(Out2))
  1192.  If Temp<1 Or Temp>Temp3 Then
  1193.     Strng=Range$
  1194.     Call IO.O
  1195.     Exit Sub
  1196.  Endif
  1197.  Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
  1198.  No.Input.Out=Temp$
  1199.  Call IO.I
  1200.  Temp2=Int(Val(Out2))
  1201.  If Temp2<Temp Then
  1202.     Strng=Range$
  1203.     Call IO.O
  1204.     Exit Sub
  1205.  Endif
  1206.  If Temp2>Temp3 Then
  1207.     Temp2=Temp3
  1208.  Endif
  1209.  For Temp5=Temp To Temp2
  1210.     Get 7,Temp5,MonsterRecord
  1211.     Call Display.Monster(False)
  1212.     Graphics.Off=False
  1213.     Call More.Prompt
  1214.     If No Then
  1215.        Exit For
  1216.     Endif
  1217.  Next
  1218. 10101
  1219.  Exit Sub
  1220. 10102
  1221.  Resume 10101
  1222. End Sub
  1223.  
  1224. Sub Display.Monster(TempX)
  1225.  On Local Error Goto 10112
  1226.  If TempX Then
  1227.     If TempC Then
  1228.        Exit Sub
  1229.     Endif
  1230.  Endif
  1231.  Graphics.Off=True
  1232.  Strng="Monster number"+Str$(Temp5)+":"
  1233.  Call IO.O
  1234.  If TempX Then
  1235.     Strng="[A]"
  1236.  Endif
  1237.  Strng=Strng+"Monster name: "+Rtrim$(MonsterRecord.MonsterName)
  1238.  Call IO.O
  1239.  If TempX Then
  1240.     Strng="[B]"
  1241.  Endif
  1242.  Strng=Strng+"Plural of monster name: "+MonsterRecord.PluralName
  1243.  Call IO.O
  1244.  If TempX Then
  1245.     Strng="[C]"
  1246.  Endif
  1247.  Strng=Strng+"Monster level:"+Str$(MonsterRecord.Level)
  1248.  Call IO.O
  1249.  If TempX Then
  1250.     Strng="[D]"
  1251.  Endif
  1252.  Strng=Strng+"Magical monster: "
  1253.  If MonsterRecord.Magic Then
  1254.     Strng=Strng+"Yes"
  1255.  Else
  1256.     Strng=Strng+"No"
  1257.  Endif
  1258.  Call IO.O
  1259.  If TempX Then
  1260.     Strng="[E]"
  1261.  Endif
  1262.  Strng=Strng+"Hit points:"+Str$(MonsterRecord.Hits)
  1263.  Call IO.O
  1264.  If TempX Then
  1265.     Strng="[F]"
  1266.  Endif
  1267.  Strng=Strng+"Experience points:"+Str$(MonsterRecord.Experience)
  1268.  Call IO.O
  1269.  If TempX Then
  1270.     Strng="[G]"
  1271.  Endif
  1272.  Strng=Strng+"Number appearing:"+Str$(MonsterRecord.NumberAppearing)
  1273.  Call IO.O
  1274.  If TempX Then
  1275.     Strng="[H]"
  1276.  Endif
  1277.  Strng=Strng+"Poisonous monster: "
  1278.  If MonsterRecord.Poison Then
  1279.     Strng=Strng+"Yes"
  1280.  Else
  1281.     Strng=Strng+"No"
  1282.  Endif
  1283.  Strng=Strng+"("+Mid$(Str$(MonsterRecord.PoisonPercent),2)+" percent)"
  1284.  Call IO.O
  1285.  If TempX Then
  1286.     Strng="[I]"
  1287.  Endif
  1288.  Strng=Strng+"Level draining monster: "
  1289.  If MonsterRecord.LevelDrain Then
  1290.     Strng=Strng+"Yes"
  1291.  Else
  1292.     Strng=Strng+"No"
  1293.  Endif
  1294.  Strng=Strng+"("+Mid$(Str$(MonsterRecord.DrainPercent),2)+" percent)"
  1295.  Call IO.O
  1296.  If TempX Then
  1297.     Strng="[J]"
  1298.  Endif
  1299.  Strng=Strng+"Monster blocks exits: "
  1300.  If MonsterRecord.Block Then
  1301.     Strng=Strng+"Yes"
  1302.  Else
  1303.     Strng=Strng+"No"
  1304.  Endif
  1305.  Strng=Strng+"("+Mid$(Str$(MonsterRecord.BlockPercent),2)+" percent)"
  1306.  Call IO.O
  1307.  If TempX Then
  1308.     Strng="[K]"
  1309.  Endif
  1310.  Strng=Strng+"Monster prevents treasure take: "
  1311.  If MonsterRecord.Prevent Then
  1312.     Strng=Strng+"Yes"
  1313.  Else
  1314.     Strng=Strng+"No"
  1315.  Endif
  1316.  Strng=Strng+"("+Mid$(Str$(MonsterRecord.PreventPercent),2)+" percent)"
  1317.  Call IO.O
  1318.  If TempX Then
  1319.     Strng="[L]"
  1320.  Endif
  1321.  Strng=Strng+"Monster follows user: "
  1322.  If MonsterRecord.Follow Then
  1323.     Strng=Strng+"Yes"
  1324.  Else
  1325.     Strng=Strng+"No"
  1326.  Endif
  1327.  Strng=Strng+"("+Mid$(Str$(MonsterRecord.FollowPercent),2)+" percent) "+_
  1328.  "("+Mid$(Str$(MonsterRecord.Teleport),2)+"% teleport)"
  1329.  Call IO.O
  1330.  If TempX Then
  1331.     Strng="[M]"
  1332.  Endif
  1333.  Strng=Strng+"Monster casts spells: "
  1334.  If MonsterRecord.Spell=False Then
  1335.     Strng=Strng+"No"
  1336.  Else
  1337.     Get 4,MonsterRecord.Spell,SpellRecord
  1338.     Strng=Strng+"Yes, "+Rtrim$(SpellRecord.SpellName)
  1339.  Endif
  1340.  Strng=Strng+"("+Mid$(Str$(MonsterRecord.SpellPercent),2)+" percent)"
  1341.  Call IO.O
  1342.  If TempX Then
  1343.     Strng="[N]"
  1344.  Endif
  1345.  Strng=Strng+"Monster jails attacker: "
  1346.  If MonsterRecord.Jail Then
  1347.     Strng=Strng+"Yes"
  1348.  Else
  1349.     Strng=Strng+"No"
  1350.  Endif
  1351.  Call IO.O
  1352.  If TempX Then
  1353.     Strng="[O]"
  1354.  Endif
  1355.  Strng=Strng+"Encounter rate:"+Str$(MonsterRecord.Rate)+_
  1356.  " ("+Mid$(Str$(MonsterRecord.RatePercent),2)+" percent)"
  1357.  Call IO.O
  1358.  If TempX Then
  1359.     Strng="[P]"
  1360.  Endif
  1361.  Strng=Strng+"Permanent monster: "
  1362.  If MonsterRecord.Permanent Then
  1363.     Strng=Strng+"Yes"
  1364.  Else
  1365.     Strng=Strng+"No"
  1366.  Endif
  1367.  Call IO.O
  1368.  If TempX Then
  1369.     Strng="[R]"
  1370.  Endif
  1371.  Strng=Strng+"Monster uses psionics: "
  1372.  If MonsterRecord.Psionic=False Then
  1373.     Strng=Strng+"No"
  1374.  Else
  1375.     Get 4,MonsterRecord.PsionicSpell
  1376.     Strng=Strng+"Yes, "+SpellRecord.SpellName
  1377.  Endif
  1378.  Call IO.O
  1379.  If TempX Then
  1380.     Strng="[S]"
  1381.  Endif
  1382.  Strng=Strng+"Carries treasure:"
  1383.  Call IO.O
  1384.  For Temp6=1 To 5
  1385.     Temp8=MonsterRecord.Treasure(Temp6)
  1386.     If Temp8>False Then
  1387.        Get 8,Temp8,TreasureRecord
  1388.        Strng=TreasureRecord.TreasureName
  1389.        Call IO.O
  1390.     Endif
  1391.  Next
  1392.  If TempX Then
  1393.     Strng="[T]"
  1394.  Endif
  1395.  Strng=Strng+"Monster has attack equation: "
  1396.  If MonsterRecord.Equation Then
  1397.     Strng=Strng+"Yes: "
  1398.     Out2=MonsterRecord.MonsterEquate
  1399.     Out2=Rtrim$(Out2)
  1400.     Strng=Strng+Out2
  1401.  Else
  1402.     Strng=Strng+"No"
  1403.  Endif
  1404.  Call IO.O
  1405. 10111
  1406.  Exit Sub
  1407. 10112
  1408.  Resume 10111
  1409. End Sub
  1410.  
  1411. Sub Change.Monster
  1412.  On Local Error Goto 10122
  1413.  Get 7,Temp4,MonsterRecord
  1414.  Do
  1415.     Temp5=Temp4
  1416.     Call Display.Monster(True)
  1417.     Graphics.Off=False
  1418.     Strng="Monster change option(q to quit)?"
  1419.     Line.Length=TempD
  1420.     No.Input.Out="Q"
  1421.     Call IO.I
  1422.     Select Case Ucase$(Out2)
  1423.     Case "A"
  1424.        Strng="Monster name(30 characters):"
  1425.        Call IO.O
  1426.        Strng="?"
  1427.        No.Input.Out=None$
  1428.        Call IO.I
  1429.        Out2=Lcase$(Out2)
  1430.        MonsterRecord.MonsterName=Out2
  1431.     Case "B"
  1432.        Strng="Plural of name(30 characters):"
  1433.        Call IO.O
  1434.        Strng="?"
  1435.        No.Input.Out=None$
  1436.        Call IO.I
  1437.        Out2=Lcase$(Out2)
  1438.        MonsterRecord.PluralName=Out2
  1439.     Case "C"
  1440.        Strng="Monster level(1-32767)?"
  1441.        No.Input.Out="1"
  1442.        Call IO.I
  1443.        MonsterRecord.Level=Int(Val(Out2))
  1444.     Case "D"
  1445.        Strng="Magical monster(y/n)?"
  1446.        Line.Length=TempD
  1447.        No.Input.Out="Y"
  1448.        Call IO.I
  1449.        MonsterRecord.Magic=False
  1450.        If Yes Then
  1451.           MonsterRecord.Magic=True
  1452.        Endif
  1453.     Case "E"
  1454.        Strng="Hit points(1-32767)?"
  1455.        No.Input.Out="1"
  1456.        Call IO.I
  1457.        MonsterRecord.Hits=Int(Val(Out2))
  1458.     Case "F"
  1459.        Strng="Experience points(1-32767)?"
  1460.        No.Input.Out="1"
  1461.        Call IO.I
  1462.        MonsterRecord.Experience=Int(Val(Out2))
  1463.     Case "G"
  1464.        Strng="Number appearing(1-32767)?"
  1465.        No.Input.Out="1"
  1466.        Call IO.I
  1467.        MonsterRecord.NumberAppearing=Int(Val(Out2))
  1468.     Case "H"
  1469.        Strng="Poisonous monster(y/n)?"
  1470.        Line.Length=TempD
  1471.        No.Input.Out="Y"
  1472.        Call IO.I
  1473.        MonsterRecord.Poison=False
  1474.        MonsterRecord.PoisonPercent=False
  1475.        If Yes Then
  1476.           MonsterRecord.Poison=True
  1477.           Strng="Percent chance monster will poison(1-100)?"
  1478.           No.Input.Out="50"
  1479.           Call IO.I
  1480.           MonsterRecord.PoisonPercent=Int(Val(Out2))
  1481.        Endif
  1482.     Case "I"
  1483.        Strng="Level draining monster(y/n)?"
  1484.        Line.Length=TempD
  1485.        No.Input.Out="Y"
  1486.        Call IO.I
  1487.        MonsterRecord.LevelDrain=False
  1488.        MonsterRecord.DrainPercent=False
  1489.        If Yes Then
  1490.           MonsterRecord.LevelDrain=True
  1491.           Strng="Percent chance monster will level drain(1-100)?"
  1492.           No.Input.Out="50"
  1493.           Call IO.I
  1494.           MonsterRecord.DrainPercent=Int(Val(Out2))
  1495.        Endif
  1496.     Case "J"
  1497.        Strng="Monster blocks exits(y/n)?"
  1498.        Line.Length=TempD
  1499.        No.Input.Out="Y"
  1500.        Call IO.I
  1501.        MonsterRecord.Block=False
  1502.        MonsterRecord.BlockPercent=False
  1503.        If Yes Then
  1504.           MonsterRecord.Block=True
  1505.           Strng="Percent chance monster will block exits(1-100)?"
  1506.           No.Input.Out="50"
  1507.           Call IO.I
  1508.           MonsterRecord.BlockPercent=Int(Val(Out2))
  1509.        Endif
  1510.     Case "K"
  1511.        Strng="Monster prevents user from taking treasure(y/n)?"
  1512.        Line.Length=TempD
  1513.        No.Input.Out="Y"
  1514.        Call IO.I
  1515.        MonsterRecord.Prevent=False
  1516.        MonsterRecord.PreventPercent=False
  1517.        If Yes Then
  1518.           MonsterRecord.Prevent=True
  1519.           Strng="Percent chance monster prevents user taking treasure(1-100)?"
  1520.           No.Input.Out="50"
  1521.           Call IO.I
  1522.           MonsterRecord.PreventPercent=Int(Val(Out2))
  1523.        Endif
  1524.     Case "L"
  1525.        Strng="Monster follows user(y/n)?"
  1526.        Line.Length=TempD
  1527.        No.Input.Out="Y"
  1528.        Call IO.I
  1529.        MonsterRecord.Follow=False
  1530.        MonsterRecord.FollowPercent=False
  1531.        MonsterRecord.Teleport=False
  1532.        If Yes Then
  1533.           MonsterRecord.Follow=True
  1534.           Strng="Percent chance monster will follow user(1-100)?"
  1535.           No.Input.Out="50"
  1536.           Call IO.I
  1537.           MonsterRecord.FollowPercent=Int(Val(Out2))
  1538.           Strng="Percent chance monster will teleport with user(1-100)?"
  1539.           No.Input.Out="50"
  1540.           Call IO.I
  1541.           MonsterRecord.Teleport=Int(Val(Out2))
  1542.        Endif
  1543.     Case "M"
  1544.        Strng="Monster casts spells(y/n)?"
  1545.        Line.Length=TempD
  1546.        No.Input.Out="Y"
  1547.        Call IO.I
  1548.        MonsterRecord.Spell=False
  1549.        MonsterRecord.SpellPercent=False
  1550.        If Yes Then
  1551.           Call Find.Spell
  1552.           If Temp Then
  1553.              MonsterRecord.Spell=Temp
  1554.              Strng="Percent chance monster casts spell(1-100)?"
  1555.              No.Input.Out="50"
  1556.              Call IO.I
  1557.              MonsterRecord.SpellPercent=Int(Val(Out2))
  1558.           Endif
  1559.        Endif
  1560.     Case "N"
  1561.        Strng="Monster jails attacker(y/n)?"
  1562.        Line.Length=TempD
  1563.        No.Input.Out="Y"
  1564.        Call IO.I
  1565.        MonsterRecord.Jail=False
  1566.        If Yes Then
  1567.           MonsterRecord.Jail=True
  1568.        Endif
  1569.     Case "O"
  1570.        Strng="Monster encounter rate(# of action prompts)?"
  1571.        No.Input.Out="6"
  1572.        Call IO.I
  1573.        MonsterRecord.Rate=Int(Val(Out2))
  1574.        Strng="Monster encounter percent(1-100)?"
  1575.        No.Input.Out="50"
  1576.        Call IO.I
  1577.        MonsterRecord.RatePercent=Int(Val(Out2))
  1578.     Case "P"
  1579.        Strng="Monster is a permanent monster(y/n)?"
  1580.        Line.Length=TempD
  1581.        No.Input.Out="N"
  1582.        Call IO.I
  1583.        MonsterRecord.Permanent=False
  1584.        If Yes Then
  1585.           MonsterRecord.Permanent=True
  1586.        Endif
  1587.     Case "R"
  1588.        Strng="Monster uses psionics(y/n)?"
  1589.        Line.Length=TempD
  1590.        No.Input.Out="Y"
  1591.        Call IO.I
  1592.        MonsterRecord.Psionic=False
  1593.        MonsterRecord.PsionicSpell=False
  1594.        If Yes Then
  1595.           Strng="Psionic spell?"
  1596.           Call Find.Spell
  1597.           If Temp Then
  1598.              If SpellRecord.Psionic=False Then
  1599.                 Strng="That spell is not a psionic spell!"
  1600.                 Call IO.O
  1601.                 MonsterRecord.Psionic=False
  1602.                 MonsterRecord.PsionicSpell=False
  1603.              Else
  1604.                 MonsterRecord.Psionic=True
  1605.                 MonsterRecord.PsionicSpell=Temp
  1606.              Endif
  1607.           Endif
  1608.        Endif
  1609.     Case "S"
  1610.        Strng="Enter five treasure names:"
  1611.        Call IO.O
  1612.        Strng="Press "+Enter$+" for none."
  1613.        Call IO.O
  1614.        Graphics.Off=True
  1615.        For Temp2=1 To 5
  1616.           Call Find.Treasure
  1617.           MonsterRecord.Treasure(Temp2)=Temp5
  1618.        Next
  1619.     Case "T"
  1620.        Line.Length=TempD
  1621.        No.Input.Out="Y"
  1622.        Strng="Monster has attack equation(y/n)?"
  1623.        Call IO.I
  1624.        MonsterRecord.Equation=False
  1625.        MonsterRecord.MonsterEquate=Nul
  1626.        If Yes Then
  1627.           Strng="Enter monster attack equation:"
  1628.           Call IO.I
  1629.           MonsterRecord.Equation=True
  1630.           MonsterRecord.MonsterEquate=Ucase$(Out2)
  1631.        Endif
  1632.     Case "Q"
  1633.        Exit Do
  1634.     End Select
  1635.  Loop
  1636.  Put 7,Temp4,MonsterRecord
  1637.  Strng="Monster '"+Rtrim$(MonsterRecord.MonsterName)+"' changed."
  1638.  Call IO.O
  1639. 10121
  1640.  Exit Sub
  1641. 10122
  1642.  Resume 10121
  1643. End Sub
  1644.  
  1645. Sub Edit.Monclass
  1646.  On Local Error Goto 10132
  1647.  If Lof(10)=False Then
  1648.     Call Add.Monclass
  1649.  Endif
  1650.  Do
  1651.     Graphics.Off=True
  1652.     If TempC=False Then
  1653.        Strng="[A]dd class"
  1654.        Call IO.O
  1655.        Strng="[C]hange class"
  1656.        Call IO.O
  1657.        Strng="[L]ist class"
  1658.        Call IO.O
  1659.        Graphics.Off=False
  1660.     Endif
  1661.     Strng="Monster class edit option(q to quit)?"
  1662.     Line.Length=TempD
  1663.     No.Input.Out="Q"
  1664.     Call IO.I
  1665.     Select Case Ucase$(Out2)
  1666.     Case "A"
  1667.        Call Add.Monclass
  1668.     Case "C"
  1669.        Call Find.Monclass
  1670.        If Temp3 Then
  1671.           Call Change.Monclass
  1672.        Endif
  1673.     Case "L"
  1674.        Call List.Monclass
  1675.     Case "Q"
  1676.        Exit Do
  1677.     End Select
  1678.  Loop
  1679. 10131
  1680.  Exit Sub
  1681. 10132
  1682.  Resume 10131
  1683. End Sub
  1684.  
  1685. Sub Add.Monclass
  1686.  On Local Error Goto 10142
  1687.  Temp3=Lof(10)/Len(MonclassRecord)+1
  1688.  For Temp6=1 To 10
  1689.     MonclassRecord.Monsters(Temp6)=False
  1690.  Next
  1691.  Put 10,Temp3,MonclassRecord
  1692.  Call Change.Monclass
  1693. 10141
  1694.  Exit Sub
  1695. 10142
  1696.  Resume 10141
  1697. End Sub
  1698.  
  1699. Sub Find.Monclass
  1700.  On Local Error Goto 10152
  1701.  Temp3=Lof(10)/Len(MonclassRecord)
  1702.  Strng="Monster class(0-"+Mid$(Str$(Temp3),2)+")?"
  1703.  No.Input.Out="1"
  1704.  Call IO.I
  1705.  Temp3=Int(Val(Out2))
  1706.  If Temp3<1 Or Temp3>Temp3 Then
  1707.     Strng=Range$
  1708.     Call IO.O
  1709.     Temp3=False
  1710.  Endif
  1711. 10151
  1712.  Exit Sub
  1713. 10152
  1714.  Resume 10151
  1715. End Sub
  1716.  
  1717. Sub Change.Monclass
  1718.  On Local Error Goto 10162
  1719.  Strng="Enter ten monster names:"
  1720.  Call IO.O
  1721.  Strng="Press "+Enter$+" for none."
  1722.  Call IO.O
  1723.  Graphics.Off=True
  1724.  For Temp2=1 To 10
  1725.     Call Find.Monster
  1726.     MonclassRecord.Monsters(Temp2)=Temp
  1727.  Next
  1728.  Put 10,Temp3,MonclassRecord
  1729.  Strng="Monclass number"+Str$(Temp3)+" created."
  1730.  Call IO.O
  1731. 10161
  1732.  Exit Sub
  1733. 10162
  1734.  Resume 10161
  1735. End Sub
  1736.  
  1737. Sub List.Monclass
  1738.  On Local Error Goto 10172
  1739.  Temp3=Lof(10)/Len(MonclassRecord)
  1740.  Temp$=Mid$(Str$(Temp3),2)
  1741.  Strng="From(1-"+Temp$+")?"
  1742.  No.Input.Out="1"
  1743.  Call IO.I
  1744.  Temp=Int(Val(Out2))
  1745.  If Temp<1 Or Temp>Temp3 Then
  1746.     Strng=Range$
  1747.     Call IO.O
  1748.     Exit Sub
  1749.  Endif
  1750.  Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
  1751.  No.Input.Out=Temp$
  1752.  Call IO.I
  1753.  Temp2=Int(Val(Out2))
  1754.  If Temp2<Temp Then
  1755.     Strng=Range$
  1756.     Call IO.O
  1757.     Exit Sub
  1758.  Endif
  1759.  If Temp2>Temp3 Then
  1760.     Temp2=Temp3
  1761.  Endif
  1762.  For Temp6=Temp To Temp2
  1763.     Get 10,Temp6,MonclassRecord
  1764.     Graphics.Off=True
  1765.     Strng="Monster class number"+Str$(Temp6)+":"
  1766.     Call IO.O
  1767.     For Temp3=1 To 10
  1768.        Temp5=MonclassRecord.Monsters(Temp3)
  1769.        If Temp5 Then
  1770.           Get 7,Temp5,MonsterRecord
  1771.           Strng="Monster number"+Str$(Temp3)+":"+MonsterRecord.MonsterName
  1772.           Call IO.O
  1773.        Endif
  1774.     Next
  1775.     Call More.Prompt
  1776.     If No Then
  1777.        Exit For
  1778.     Endif
  1779.  Next
  1780. 10171
  1781.  Exit Sub
  1782. 10172
  1783.  Resume 10171
  1784. End Sub
  1785.  
  1786. Sub Edit.MonsterTalk
  1787.  On Local Error Goto 10182
  1788.  If Lof(11)=False Then
  1789.     MonsterTalkRecord.TalkMessage=Nul
  1790.     Put 11,1,MonsterTalkRecord
  1791.  Endif
  1792.  Do
  1793.     Graphics.Off=True
  1794.     If TempC=False Then
  1795.        Strng="[A]dd response"
  1796.        Call IO.O
  1797.        Strng="[C]hange response"
  1798.        Call IO.O
  1799.        Strng="[L]ist response"
  1800.        Call IO.O
  1801.        Strng="[M]onster response"
  1802.        Call IO.O
  1803.        Graphics.Off=False
  1804.     Endif
  1805.     Strng="Monster talk edit option(q to quit)?"
  1806.     Line.Length=TempD
  1807.     No.Input.Out="Q"
  1808.     Call IO.I
  1809.     Select Case Ucase$(Out2)
  1810.     Case "A"
  1811.        Strng="Enter response(80 characters):"
  1812.        Call IO.O
  1813.        Strng="Press "+Enter$+" for none."
  1814.        Call IO.O
  1815.        Strng="?"
  1816.        Call IO.I
  1817.        Temp=Lof(11)/Len(MonsterTalkRecord)+1
  1818.        MonsterTalkRecord.TalkMessage=Out2
  1819.        Put 11,Temp,MonsterTalkRecord
  1820.     Case "C"
  1821.        Temp3=Lof(11)/Len(MonsterTalkRecord)
  1822.        Temp$=Mid$(Str$(Temp3),2)
  1823.        Strng="Response number to change(1-"+Temp$+")?"
  1824.        No.Input.Out="1"
  1825.        Call IO.I
  1826.        Temp=Val(Out2)
  1827.        Strng=Range$
  1828.        If Temp>False And Temp<=Temp3 Then
  1829.           Temp$=Mid$(Str$(Temp),2)
  1830.           Strng="Enter response number"+Temp$+":"
  1831.           Call IO.O
  1832.           Strng="?"
  1833.           Call IO.I
  1834.           MonsterTalkRecord.TalkMessage=Out2
  1835.           Put 11,Temp,MonsterTalkRecord
  1836.           Strng="Response number "+Temp$+" changed."
  1837.        Endif
  1838.        Call IO.O
  1839.     Case "L"
  1840.        Temp5=False
  1841.        For Temp=1 To Lof(11)/Len(MonsterTalkRecord)
  1842.           Get 11,Temp,MonsterTalkRecord
  1843.           Graphics.Off=True
  1844.           Strng="Response number"+Str$(Temp)+":"
  1845.           Call IO.O
  1846.           Strng=Rtrim$(MonsterTalkRecord.TalkMessage)
  1847.           Call IO.O
  1848.           Temp5=Temp5+2
  1849.           If Temp5>=22 Then
  1850.              Temp5=False
  1851.              Call More.Prompt
  1852.              If No Then
  1853.                 Exit For
  1854.              Endif
  1855.           Endif
  1856.        Next
  1857.        If Temp5>False Then
  1858.           Call More.Prompt
  1859.        Endif
  1860.     Case "M"
  1861.        Call Find.Monster
  1862.        If Temp Then
  1863.           Get 7,Temp,MonsterRecord
  1864.           Strng="Enter five response numbers:"
  1865.           Call IO.O
  1866.           Strng="Press "+Enter$+" for none."
  1867.           Call IO.O
  1868.           For Temp5=1 To 5
  1869.              Temp$=Mid$(Str$(Temp5),2)
  1870.              Strng="Enter response number "+Temp$+":"
  1871.              Call IO.O
  1872.              Strng="?"
  1873.              Call IO.I
  1874.              Temp2=Int(Val(Out2))
  1875.              Strng=Range$
  1876.              If Temp2>False And Temp2<=Lof(11)/Len(MonsterTalkRecord) Then
  1877.                 MonsterRecord.Talk(Temp5)=Temp2
  1878.                 Strng="Response number "+Temp$+" added."
  1879.              Endif
  1880.              Call IO.O
  1881.           Next
  1882.           Put 7,Temp,MonsterRecord
  1883.        Endif
  1884.     Case "Q"
  1885.        Exit Do
  1886.     End Select
  1887.  Loop
  1888. 10181
  1889.  Exit Sub
  1890. 10182
  1891.  Resume 10181
  1892. End Sub
  1893.  
  1894. Sub Edit.Spell
  1895.  On Local Error Goto 10192
  1896.  If Lof(4)=False Then
  1897.     Call Add.Spell
  1898.  Endif
  1899.  Do
  1900.     Graphics.Off=True
  1901.     If TempC=False Then
  1902.        Strng="[A]dd"
  1903.        Call IO.O
  1904.        Strng="[C]hange"
  1905.        Call IO.O
  1906.        Strng="[L]ist"
  1907.        Call IO.O
  1908.        Strng="[S]earch"
  1909.        Call IO.O
  1910.        Graphics.Off=False
  1911.     Endif
  1912.     Strng="Spell edit option(q to quit)?"
  1913.     Line.Length=TempD
  1914.     No.Input.Out="Q"
  1915.     Call IO.I
  1916.     Select Case Ucase$(Out2)
  1917.     Case "A"
  1918.        Call Add.Spell
  1919.     Case "C"
  1920.        Call Find.Spell
  1921.        If Temp Then
  1922.           Temp4=Temp
  1923.           Call Change.Spell
  1924.        Endif
  1925.     Case "L"
  1926.        Call List.Spell
  1927.     Case "S"
  1928.        Call Search.Spells
  1929.     Case "Q"
  1930.        Exit Sub
  1931.     End Select
  1932.  Loop
  1933. 10191
  1934.  Exit Sub
  1935. 10192
  1936.  Resume 10191
  1937. End Sub
  1938.  
  1939. Sub Add.Spell
  1940.  On Local Error Goto 10202
  1941.  Temp4=Lof(4)/Len(SpellRecord)+1
  1942.  SpellRecord.SpellName=Nul
  1943.  SpellRecord.Chant=Nul
  1944.  SpellRecord.Desc=Nul
  1945.  SpellRecord.Level=False
  1946.  SpellRecord.SpellType=False
  1947.  SpellRecord.Teleport=False
  1948.  SpellRecord.ClassType=False
  1949.  SpellRecord.Psionic=False
  1950.  SpellRecord.PsionicMode=False
  1951.  For Temp6=1 To 5
  1952.     SpellRecord.Ingred(Temp6)=False
  1953.  Next
  1954.  SpellRecord.SpellFlag=False
  1955.  SpellRecord.Equation=False
  1956.  SpellRecord.SpellEquate=Nul
  1957.  Put 4,Temp4,SpellRecord
  1958.  Call Change.Spell
  1959. 10201
  1960.  Exit Sub
  1961. 10202
  1962.  Resume 10201
  1963. End Sub
  1964.  
  1965. Sub List.Spell
  1966.  On Local Error Goto 10212
  1967.  Temp3=Lof(4)/Len(SpellRecord)
  1968.  Temp$=Mid$(Str$(Temp3),2)
  1969.  Strng="From(1-"+Temp$+")?"
  1970.  No.Input.Out="1"
  1971.  Call IO.I
  1972.  Temp=Int(Val(Out2))
  1973.  If Temp<1 Or Temp>Temp3 Then
  1974.     Strng=Range$
  1975.     Call IO.O
  1976.     Exit Sub
  1977.  Endif
  1978.  Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
  1979.  No.Input.Out=Temp$
  1980.  Call IO.I
  1981.  Temp2=Int(Val(Out2))
  1982.  If Temp2<Temp Then
  1983.     Strng=Range$
  1984.     Call IO.O
  1985.     Exit Sub
  1986.  Endif
  1987.  If Temp2>Temp3 Then
  1988.     Temp2=Temp3
  1989.  Endif
  1990.  For Temp5=Temp To Temp2
  1991.     Get 4,Temp5,SpellRecord
  1992.     Call Display.Spell(False)
  1993.     Graphics.Off=False
  1994.     Call More.Prompt
  1995.     If No Then
  1996.        Exit For
  1997.     Endif
  1998.  Next
  1999. 10211
  2000.  Exit Sub
  2001. 10212
  2002.  Resume 10211
  2003. End Sub
  2004.  
  2005. Sub Display.Spell(TempX)
  2006.  On Local Error Goto 10222
  2007.  If TempX Then
  2008.     If TempC Then
  2009.        Exit Sub
  2010.     Endif
  2011.  Endif
  2012.  Graphics.Off=True
  2013.  Strng="Spell number"+Str$(Temp5)+":"
  2014.  Call IO.O
  2015.  If TempX Then
  2016.     Strng="[A]"
  2017.  Endif
  2018.  Strng=Strng+"Spell name: "+Rtrim$(SpellRecord.SpellName)
  2019.  Call IO.O
  2020.  If TempX Then
  2021.     Strng="[B]"
  2022.  Endif
  2023.  Strng=Strng+"Spell chant: "+Rtrim$(SpellRecord.Chant)
  2024.  Call IO.O
  2025.  If TempX Then
  2026.     Strng="[C]"
  2027.  Endif
  2028.  Strng=Strng+"Spell cast description: "
  2029.  Call IO.O
  2030.  Strng=Rtrim$(SpellRecord.Desc)
  2031.  Call IO.O
  2032.  If TempX Then
  2033.     Strng="[D]"
  2034.  Endif
  2035.  Strng=Strng+"Spell level:"+Str$(SpellRecord.Level)
  2036.  Call IO.O
  2037.  If TempX Then
  2038.     Strng="[E]"
  2039.  Endif
  2040.  Strng=Strng+"Spell type: "
  2041.  Select Case SpellRecord.SpellType
  2042.  Case 1
  2043.     Out2="Enchant"
  2044.  Case 2
  2045.     Out2="Offense"
  2046.  Case 3
  2047.     Out2="Bless"
  2048.  Case 4
  2049.     Out2="Wish"
  2050.  Case 5
  2051.     Out2="Poison"
  2052.  Case 6
  2053.     Out2="Vigor"
  2054.  Case 7
  2055.     Out2="Heal"
  2056.  Case 8
  2057.     Out2="Curepoison"
  2058.  Case 9
  2059.     Out2="Level Drain"
  2060.  Case 10
  2061.     Out2="Teleport to Room"+Str$(SpellRecord.Teleport)
  2062.  Case 11
  2063.     Out2="Befuddle"
  2064.  Case 12
  2065.     Out2="Turn Undead"
  2066.  Case 13
  2067.     Out2="Pass Door"
  2068.  Case 14
  2069.     Out2="Conjure"
  2070.  Case 15
  2071.     Out2="Psionic"
  2072.  Case 16
  2073.     Out2="Detect Lock"
  2074.  Case 17
  2075.     Out2="Detect Evil"
  2076.  Case 18
  2077.     Out2="Detect Trap"
  2078.  Case 19
  2079.     Out2="Intoxicate"
  2080.  Case 20
  2081.     Out2="Set Trap"
  2082.  Case 21
  2083.     Out2="Hide"
  2084.  Case 22
  2085.     Out2="Search"
  2086.  Case 23
  2087.     Out2="Invisibility"
  2088.  Case 24
  2089.     Out2="Identify"
  2090.  Case 25
  2091.     Out2="Enlighten"
  2092.  Case 26
  2093.     Out2="Illuminate"
  2094.  Case 27
  2095.     Out2="Psyche"
  2096.  Case 28
  2097.     Out2="Telepathy"
  2098.  Case Else
  2099.     Out2="<none>"
  2100.  End Select
  2101.  Strng=Strng+Out2
  2102.  Call IO.O
  2103.  If TempX Then
  2104.     Strng="[F]"
  2105.  Endif
  2106.  Strng=Strng+"Spell is psionic spell: "
  2107.  If SpellRecord.Psionic=False Then
  2108.     Strng=Strng+"No"
  2109.  Else
  2110.     Strng=Strng+"Yes, "
  2111.     Select Case SpellRecord.PsionicMode
  2112.     Case 1
  2113.        Strng=Strng+"Attack"
  2114.     Case 2
  2115.        Strng=Strng+"Defense"
  2116.     Case Else
  2117.        Strng=Strng+"<none>"
  2118.     End Select
  2119.  Endif
  2120.  Call IO.O
  2121.  If TempX Then
  2122.     Strng="[G]"
  2123.  Endif
  2124.  Strng=Strng+"Character classes which can cast this spell:"
  2125.  Call IO.O
  2126.  TempA=False
  2127.  For Temp9=1 To 8
  2128.     If SpellRecord.ClassType And 2^Temp9 Then
  2129.        Strng2=Class.Name(Temp9)
  2130.        Strng2=Rtrim$(Strng2)
  2131.        Mid$(Strng2,1,1)=Ucase$(Mid$(Strng2,1,1))
  2132.        Strng=Strng+Strng2+", "
  2133.        TempA=True
  2134.     Endif
  2135.  Next
  2136.  If TempA Then
  2137.     Strng=Left$(Strng,Len(Strng)-2)+"."
  2138.  Else
  2139.     Strng="<none>"
  2140.  Endif
  2141.  Call IO.O
  2142.  If TempX Then
  2143.     Strng="[H]"
  2144.  Endif
  2145.  Strng=Strng+"Spell ingredients:"
  2146.  Call IO.O
  2147.  TempA=False
  2148.  For Temp9=1 To 5
  2149.     TempB=SpellRecord.Ingred(Temp9)
  2150.     If TempB>=1 And TempB<=Lof(8)/Len(TreasureRecord) Then
  2151.        Get 8,TempB,TreasureRecord
  2152.        Strng2=TreasureRecord.TreasureName
  2153.        Strng2=Rtrim$(Strng2)
  2154.        Strng2=Lcase$(Strng2)
  2155.        Mid$(Strng2,1,1)=Ucase$(Mid$(Strng2,1,1))
  2156.        Strng=Strng+Strng2+", "
  2157.        TempA=True
  2158.     Endif
  2159.  Next
  2160.  If TempA Then
  2161.     Strng=Left$(Strng,Len(Strng)-2)+"."
  2162.  Else
  2163.     Strng="<none>"
  2164.  Endif
  2165.  Call IO.O
  2166.  If TempX Then
  2167.     Strng="[I]"
  2168.  Endif
  2169.  Strng=Strng+"Spell casting type which requires ingredients:"
  2170.  Call IO.O
  2171.  TempA=False
  2172.  If SpellRecord.SpellFlag And Use.Spell.Type Then
  2173.     Strng="use command, "
  2174.     TempA=True
  2175.  Endif
  2176.  If SpellRecord.SpellFlag And Scroll.Spell.Type Then
  2177.     Strng=Strng+"read scroll, "
  2178.     TempA=True
  2179.  Endif
  2180.  If SpellRecord.SpellFlag And Cast.Spell.Type Then
  2181.     Strng=Strng+"cast spell, "
  2182.     TempA=True
  2183.  Endif
  2184.  If TempA Then
  2185.     Strng=Left$(Strng,Len(Strng)-2)+"."
  2186.  Else
  2187.     Strng="<none>"
  2188.  Endif
  2189.  Call IO.O
  2190.  If TempX Then
  2191.     Strng="[J]"
  2192.  Endif
  2193.  Strng=Strng+"Spell has offense equation: "
  2194.  If SpellRecord.Equation Then
  2195.     Strng=Strng+"Yes"
  2196.     Call IO.O
  2197.     Strng=SpellRecord.SpellEquate
  2198.     Strng=Rtrim$(Strng)
  2199.     Strng="Equation: "+Strng
  2200.     Call IO.O
  2201.  Else
  2202.     Strng=Strng+"No"
  2203.     Call IO.O
  2204.  Endif
  2205. 10221
  2206.  Exit Sub
  2207. 10222
  2208.  Resume 10221
  2209. End Sub
  2210.  
  2211. Sub Change.Spell
  2212.  On Local Error Goto 10232
  2213.  Get 4,Temp4,SpellRecord
  2214.  Do
  2215.     Temp5=Temp4
  2216.     Call Display.Spell(True)
  2217.     Graphics.Off=False
  2218.     Strng="Spell change option(q to quit)?"
  2219.     Line.Length=TempD
  2220.     No.Input.Out="Q"
  2221.     Call IO.I
  2222.     Select Case Ucase$(Out2)
  2223.     Case "A"
  2224.        Strng="Spell name(30 characters):"
  2225.        Call IO.O
  2226.        Strng="?"
  2227.        No.Input.Out=None$
  2228.        Call IO.I
  2229.        Out2=Lcase$(Out2)
  2230.        SpellRecord.SpellName=Out2
  2231.     Case "B"
  2232.        Strng="Spell chant(80 characters):"
  2233.        Call IO.O
  2234.        Strng="?"
  2235.        No.Input.Out=None$
  2236.        Call IO.I
  2237.        Out2=Ucase$(Out2)
  2238.        SpellRecord.Chant=Out2
  2239.     Case "C"
  2240.        Strng="Spell cast description(80 characters):"
  2241.        Call IO.O
  2242.        Strng="?"
  2243.        No.Input.Out=None$
  2244.        Call IO.I
  2245.        SpellRecord.Desc=Out2
  2246.     Case "D"
  2247.        Strng="Spell level(1-32767)?"
  2248.        No.Input.Out="1"
  2249.        Call IO.I
  2250.        SpellRecord.Level=Int(Val(Out2))
  2251.     Case "E"
  2252.        Call Spell.Types
  2253.        Strng="Spell type option(q to quit)?"
  2254.        Line.Length=TempD
  2255.        No.Input.Out="Q"
  2256.        Call IO.I
  2257.        Out2=Ucase$(Out2)
  2258.        Temp5=Instr("ABCDEFGHIJKLMNOPRSTUVWXYZ123Q",Out2)
  2259.        If Temp5 Then
  2260.           If Temp5<=28 Then
  2261.              SpellRecord.SpellType=Temp5
  2262.              If Temp5=10 Then
  2263.                 Strng="Room it teleports to(1-"+_
  2264.                 Mid$(Str$(Lof(5)/Len(RoomRecord)),2)+")?"
  2265.                 No.Input.Out="1"
  2266.                 Call IO.I
  2267.                 SpellRecord.Teleport=Int(Val(Out2))
  2268.              Endif
  2269.           Endif
  2270.        Endif
  2271.     Case "F"
  2272.        Strng="Spell is psionic spell(y/n)?"
  2273.        Line.Length=TempD
  2274.        No.Input.Out="Y"
  2275.        Call IO.I
  2276.        SpellRecord.Psionic=False
  2277.        SpellRecord.PsionicMode=False
  2278.        If Yes Then
  2279.           Do
  2280.              SpellRecord.Psionic=True
  2281.              Graphics.Off=True
  2282.              If TempC=False Then
  2283.                 Strng="[A]ttack mode"
  2284.                 Call IO.O
  2285.                 Strng="[D]efense mode"
  2286.                 Call IO.O
  2287.                 Graphics.Off=False
  2288.              Endif
  2289.              Strng="Spell psionic option(q to quit)?"
  2290.              Line.Length=TempD
  2291.              No.Input.Out="Q"
  2292.              Call IO.I
  2293.              SpellRecord.PsionicMode=False
  2294.              Select Case Ucase$(Out2)
  2295.              Case "A"
  2296.                 SpellRecord.PsionicMode=1
  2297.              Case "D"
  2298.                 SpellRecord.PsionicMode=2
  2299.              Case "Q"
  2300.                 Exit Do
  2301.              End Select
  2302.           Loop
  2303.        Endif
  2304.     Case "G"
  2305.        Do
  2306.           Graphics.Off=True
  2307.           If TempC=False Then
  2308.              For Temp5=1 To 8
  2309.                 Strng="["+Chr$(64+Temp5)+"]"+Rtrim$(Class.Name(Temp5))
  2310.                Call IO.O
  2311.              Next
  2312.              Strng="[N]one"
  2313.              Call IO.O
  2314.              Strng="[X]All"
  2315.              Call IO.O
  2316.              Graphics.Off=False
  2317.           Endif
  2318.           Strng="Spell class option(q to quit)?"
  2319.           Line.Length=TempD
  2320.           No.Input.Out="Q"
  2321.           Call IO.I
  2322.           Out2=Ucase$(Out2)
  2323.           Select Case Out2
  2324.           Case "A" To "H"
  2325.              Temp5=Instr("ABCDEFGH",Out2)
  2326.              SpellRecord.ClassType=SpellRecord.ClassType Or 2^Temp5
  2327.           Case "N"
  2328.              SpellRecord.ClassType=False
  2329.           Case "X"
  2330.              For Temp5=1 To 8
  2331.                 SpellRecord.ClassType=SpellRecord.ClassType Or 2^Temp5
  2332.              Next
  2333.           Case "Q"
  2334.              Exit Do
  2335.           End Select
  2336.        Loop
  2337.     Case "H"
  2338.        Strng="Enter five treasure items for spell ingredients:"
  2339.        Call IO.O
  2340.        Strng="Press "+Enter$+" for none."
  2341.        Call IO.O
  2342.        Graphics.Off=True
  2343.        For Temp9=1 To 5
  2344.           Call Find.Treasure
  2345.           SpellRecord.Ingred(Temp9)=Temp5
  2346.        Next
  2347.        Graphics.Off=False
  2348.     Case "I"
  2349.        Do
  2350.           Graphics.Off=True
  2351.           If TempC=False Then
  2352.              Strng="[A]use command"
  2353.              Call IO.O
  2354.              Strng="[B]read scroll"
  2355.              Call IO.O
  2356.              Strng="[C]cast spell"
  2357.              Call IO.O
  2358.              Strng="[N]one"
  2359.              Call IO.O
  2360.              Strng="[X]All"
  2361.              Call IO.O
  2362.              Graphics.Off=False
  2363.           Endif
  2364.           Strng="Spell ingredient option(q to quit)?"
  2365.           Line.Length=TempD
  2366.           No.Input.Out="Q"
  2367.           Call IO.I
  2368.           Select Case Ucase$(Out2)
  2369.           Case "A"
  2370.              SpellRecord.SpellFlag=SpellRecord.SpellFlag Or Use.Spell.Type
  2371.           Case "B"
  2372.              SpellRecord.SpellFlag=SpellRecord.SpellFlag Or Scroll.Spell.Type
  2373.           Case "C"
  2374.              SpellRecord.SpellFlag=SpellRecord.SpellFlag Or Cast.Spell.Type
  2375.           Case "N"
  2376.              SpellRecord.SpellFlag=False
  2377.           Case "X"
  2378.              SpellRecord.SpellFlag=SpellRecord.SpellFlag Or Use.Spell.Type
  2379.              SpellRecord.SpellFlag=SpellRecord.SpellFlag Or Scroll.Spell.Type
  2380.              SpellRecord.SpellFlag=SpellRecord.SpellFlag Or Cast.Spell.Type
  2381.           Case "Q"
  2382.              Exit Do
  2383.           End Select
  2384.        Loop
  2385.     Case "J"
  2386.        Line.Length=TempD
  2387.        No.Input.Out="Y"
  2388.        Strng="Spell has offense equation(y/n)?"
  2389.        Call IO.I
  2390.        SpellRecord.Equation=False
  2391.        SpellRecord.SpellEquate=Nul
  2392.        If Yes Then
  2393.           Strng="Enter spell equation:"
  2394.           Call IO.I
  2395.           SpellRecord.Equation=True
  2396.           SpellRecord.SpellEquate=Ucase$(Out2)
  2397.        Endif
  2398.     Case "Q"
  2399.        Exit Do
  2400.     End Select
  2401.  Loop
  2402.  Put 4,Temp4,SpellRecord
  2403.  Strng="Spell '"+Rtrim$(SpellRecord.SpellName)+"' changed."
  2404.  Call IO.O
  2405. 10231
  2406.  Exit Sub
  2407. 10232
  2408.  Resume 10231
  2409. End Sub
  2410.  
  2411. Sub Spell.Types
  2412.  On Local Error Goto 10242
  2413.  If TempC Then
  2414.     Exit Sub
  2415.  Endif
  2416.  Graphics.Off=True
  2417.  Strng="[A]enchant      [O]psionic"
  2418.  Call IO.O
  2419.  Strng="[B]offense      [P]detect lock"
  2420.  Call IO.O
  2421.  Strng="[C]bless        [R]detect evil"
  2422.  Call IO.O
  2423.  Strng="[D]wish         [S]detect trap"
  2424.  Call IO.O
  2425.  Strng="[E]poison       [T]intoxicate"
  2426.  Call IO.O
  2427.  Strng="[F]vigor        [U]set trap"
  2428.  Call IO.O
  2429.  Strng="[G]heal         [V]hide"
  2430.  Call IO.O
  2431.  Strng="[H]curepoison   [W]search"
  2432.  Call IO.O
  2433.  Strng="[I]level drain  [X]invisibility"
  2434.  Call IO.O
  2435.  Strng="[J]teleport     [Y]identify"
  2436.  Call IO.O
  2437.  Strng="[K]befuddle     [Z]enlighten"
  2438.  Call IO.O
  2439.  Strng="[L]turn undead  [1]illuminate"
  2440.  Call IO.O
  2441.  Strng="[M]pass door    [2]psyche"
  2442.  Call IO.O
  2443.  Strng="[N]conjure      [3]telepathy"
  2444.  Call IO.O
  2445.  Graphics.Off=False
  2446. 10241
  2447.  Exit Sub
  2448. 10242
  2449.  Resume 10241
  2450. End Sub
  2451.  
  2452. Sub Edit.Treasure
  2453.  On Local Error Goto 10252
  2454.  If Lof(8)=False Then
  2455.     Call Add.Treasure
  2456.  Endif
  2457.  Do
  2458.     Graphics.Off=True
  2459.     If TempC=False Then
  2460.        Strng="[A]dd"
  2461.        Call IO.O
  2462.        Strng="[C]hange"
  2463.        Call IO.O
  2464.        Strng="[L]ist"
  2465.        Call IO.O
  2466.        Strng="[S]earch"
  2467.        Call IO.O
  2468.        Graphics.Off=False
  2469.     Endif
  2470.     Strng="Treasure edit option(q to quit)?"
  2471.     Line.Length=TempD
  2472.     No.Input.Out="Q"
  2473.     Call IO.I
  2474.     Select Case Ucase$(Out2)
  2475.     Case "A"
  2476.        Call Add.Treasure
  2477.     Case "C"
  2478.        Call Find.Treasure
  2479.        If Temp5 Then
  2480.           Temp4=Temp5
  2481.           Call Change.Treasure
  2482.        Endif
  2483.     Case "L"
  2484.        Call List.Treasure
  2485.     Case "S"
  2486.        Call Search.Treasure
  2487.     Case "Q"
  2488.        Exit Sub
  2489.     End Select
  2490.  Loop
  2491. 10251
  2492.  Exit Sub
  2493. 10252
  2494.  Resume 10251
  2495. End Sub
  2496.  
  2497. Sub Add.Treasure
  2498.  On Local Error Goto 10262
  2499.  Temp4=Lof(8)/Len(TreasureRecord)+1
  2500.  TreasureRecord.Keyed=False
  2501.  TreasureRecord.Weight=False
  2502.  TreasureRecord.Gold=False
  2503.  TreasureRecord.Plus=False
  2504.  TreasureRecord.Charges=False
  2505.  TreasureRecord.Type=False
  2506.  TreasureRecord.Loadable=False
  2507.  TreasureRecord.Ammunition=False
  2508.  TreasureRecord.AmmoLoads=False
  2509.  TreasureRecord.Recep=False
  2510.  TreasureRecord.Potion=False
  2511.  TreasureRecord.Locked=False
  2512.  TreasureRecord.Closed=False
  2513.  TreasureRecord.Invisible=False
  2514.  TreasureRecord.Proficiency=False
  2515.  TreasureRecord.TreasureName=Nul
  2516.  TreasureRecord.ShortName=Nul
  2517.  TreasureRecord.RecepFileName=Nul
  2518.  TreasureRecord.RecepMax=False
  2519.  TreasureRecord.Spell=False
  2520.  TreasureRecord.Scroll=False
  2521.  TreasureRecord.RingType=False
  2522.  TreasureRecord.RingSpell=False
  2523.  TreasureRecord.Edible=False
  2524.  TreasureRecord.Rustable=False
  2525.  TreasureRecord.RustPercent=False
  2526.  TreasureRecord.Stealable=False
  2527.  TreasureRecord.StealPercent=False
  2528.  TreasureRecord.Launchable=False
  2529.  TreasureRecord.LaunchLoads=False
  2530.  TreasureRecord.LaunchAmmo=False
  2531.  TreasureRecord.Movable=False
  2532.  Put 8,Temp4,TreasureRecord
  2533.  Call Change.Treasure
  2534. 10261
  2535.  Exit Sub
  2536. 10262
  2537.  Resume 10261
  2538. End Sub
  2539.  
  2540. Sub List.Treasure
  2541.  On Local Error Goto 10272
  2542.  Temp3=Lof(8)/Len(TreasureRecord)
  2543.  Temp$=Mid$(Str$(Temp3),2)
  2544.  Strng="From(1-"+Temp$+")?"
  2545.  No.Input.Out="1"
  2546.  Call IO.I
  2547.  Temp=Int(Val(Out2))
  2548.  If Temp<1 Or Temp>Temp3 Then
  2549.     Strng=Range$
  2550.     Call IO.O
  2551.     Exit Sub
  2552.  Endif
  2553.  Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
  2554.  No.Input.Out=Temp$
  2555.  Call IO.I
  2556.  Temp2=Int(Val(Out2))
  2557.  If Temp2<Temp Then
  2558.     Strng=Range$
  2559.     Call IO.O
  2560.     Exit Sub
  2561.  Endif
  2562.  If Temp2>Temp3 Then
  2563.     Temp2=Temp3
  2564.  Endif
  2565.  For Temp5=Temp To Temp2
  2566.     Get 8,Temp5,TreasureRecord
  2567.     Call Display.Treasure(False)
  2568.     Graphics.Off=False
  2569.     Call More.Prompt
  2570.     If No Then
  2571.        Exit For
  2572.     Endif
  2573.  Next
  2574. 10271
  2575.  Exit Sub
  2576. 10272
  2577.  Resume 10271
  2578. End Sub
  2579.  
  2580. Sub Change.Treasure
  2581.  On Local Error Goto 10282
  2582.  Get 8,Temp4,TreasureRecord
  2583.  Do
  2584.     Temp5=Temp4
  2585.     Call Display.Treasure(True)
  2586.     Graphics.Off=False
  2587.     Strng="Treasure change option(q to quit)?"
  2588.     Line.Length=TempD
  2589.     No.Input.Out="Q"
  2590.     Call IO.I
  2591.     Select Case Ucase$(Out2)
  2592.     Case "A"
  2593.        Strng="Treasure name(30 characters):"
  2594.        Call IO.O
  2595.        Strng="?"
  2596.        No.Input.Out=None$
  2597.        Call IO.I
  2598.        Out2=Lcase$(Out2)
  2599.        TreasureRecord.TreasureName=Out2
  2600.     Case "B"
  2601.        Strng="Treasure identifier(30 characters):"
  2602.        Call IO.O
  2603.        Strng="?"
  2604.        No.Input.Out=None$
  2605.        Call IO.I
  2606.        Out2=Ucase$(Out2)
  2607.        TreasureRecord.ShortName=Out2
  2608.     Case "C"
  2609.        Strng="Weight(1-32767)?"
  2610.        No.Input.Out="1"
  2611.        Call IO.I
  2612.        TreasureRecord.Weight=Int(Val(Out2))
  2613.     Case "D"
  2614.        Do
  2615.           Graphics.Off=True
  2616.           If TempC=False Then
  2617.              Strng="[W]eapon"
  2618.              Call IO.O
  2619.              Strng="[S]hield"
  2620.              Call IO.O
  2621.              Strng="[A]rmor"
  2622.              Call IO.O
  2623.              Strng="[T]reasure"
  2624.              Call IO.O
  2625.              Graphics.Off=False
  2626.           Endif
  2627.           Strng="Treasure type option(q to quit)?"
  2628.           Line.Length=TempD
  2629.           No.Input.Out="Q"
  2630.           Call IO.I
  2631.           Select Case Ucase$(Out2)
  2632.           Case "W"
  2633.              TreasureRecord.Type=False
  2634.              If TreasureRecord.Plus=False Then
  2635.                 TreasureRecord.Plus=1
  2636.              Endif
  2637.           Case "S"
  2638.              TreasureRecord.Type=True
  2639.           Case "A"
  2640.              TreasureRecord.Type=1
  2641.           Case "T"
  2642.              TreasureRecord.Plus=False
  2643.              TreasureRecord.Charges=False
  2644.              TreasureRecord.Type=False
  2645.           Case "Q"
  2646.              Exit Do
  2647.           End Select
  2648.        Loop
  2649.     Case "E"
  2650.        Strng="Charges(1-32767)?"
  2651.        No.Input.Out="1"
  2652.        Call IO.I
  2653.        TreasureRecord.Charges=Int(Val(Out2))
  2654.     Case "F"
  2655.        Strng="Treasure is coins(y/n)?"
  2656.        Line.Length=TempD
  2657.        No.Input.Out="Y"
  2658.        Call IO.I
  2659.        TreasureRecord.Coin=False
  2660.        If Yes Then
  2661.           TreasureRecord.Coin=True
  2662.        Endif
  2663.     Case "G"
  2664.        Strng="Treasure is scroll(y/n)?"
  2665.        Line.Length=TempD
  2666.        No.Input.Out="Y"
  2667.        Call IO.I
  2668.        TreasureRecord.Scroll=False
  2669.        If Yes Then
  2670.           TreasureRecord.Scroll=True
  2671.        Endif
  2672.     Case "H"
  2673.        Strng="Ammunition(y/n)?"
  2674.        Line.Length=TempD
  2675.        No.Input.Out="Y"
  2676.        Call IO.I
  2677.        TreasureRecord.Ammunition=False
  2678.        If Yes Then
  2679.           TreasureRecord.Ammunition=True
  2680.        Endif
  2681.     Case "I"
  2682.        Strng="Receptacle is locked(y/n)?"
  2683.        Line.Length=TempD
  2684.        No.Input.Out="Y"
  2685.        Call IO.I
  2686.        TreasureRecord.Locked=False
  2687.        TreasureRecord.Closed=False
  2688.        If Yes Then
  2689.           TreasureRecord.Locked=1
  2690.           TreasureRecord.Closed=1
  2691.        Endif
  2692.     Case "J"
  2693.        Strng="Treasure is edible(y/n)?"
  2694.        Line.Length=TempD
  2695.        No.Input.Out="Y"
  2696.        Call IO.I
  2697.        TreasureRecord.Edible=False
  2698.        If Yes Then
  2699.           TreasureRecord.Edible=True
  2700.        Endif
  2701.     Case "K"
  2702.        Strng="Treasure can rust(y/n)?"
  2703.        Line.Length=TempD
  2704.        No.Input.Out="Y"
  2705.        Call IO.I
  2706.        TreasureRecord.Rustable=False
  2707.        TreasureRecord.RustPercent=False
  2708.        If Yes Then
  2709.           Strng="Percent chance weapon will rust during room rust rate(1-100)?"
  2710.           No.Input.Out="50"
  2711.           Call IO.I
  2712.           Temp=Int(Val(Out2))
  2713.           If Temp>=1 And Temp<=100 Then
  2714.              TreasureRecord.Rustable=True
  2715.              TreasureRecord.RustPercent=Temp
  2716.           Else
  2717.              TreasureRecord.Rustable=False
  2718.              TreasureRecord.RustPercent=False
  2719.           Endif
  2720.        Endif
  2721.     Case "L"
  2722.        Strng="Treasure key number(1-32767)?"
  2723.        No.Input.Out="1"
  2724.        Call IO.I
  2725.        TreasureRecord.Keyed=Int(Val(Out2))
  2726.     Case "O"
  2727.        Strng="Treasure launchs from devices(y/n)?"
  2728.        Line.Length=TempD
  2729.        No.Input.Out="Y"
  2730.        Call IO.I
  2731.        TreasureRecord.LaunchAmmo=False
  2732.        If Yes Then
  2733.           TreasureRecord.LaunchAmmo=True
  2734.        Endif
  2735.     Case "R"
  2736.        Strng="Treasure is magical(y/n)?"
  2737.        Line.Length=TempD
  2738.        No.Input.Out="Y"
  2739.        Call IO.I
  2740.        TreasureRecord.Spell=False
  2741.        If Yes Then
  2742.           Call Find.Spell
  2743.           If Temp Then
  2744.              TreasureRecord.Spell=Temp
  2745.           Endif
  2746.        Endif
  2747.     Case "S"
  2748.        Strng="Treasure is ring(y/n)?"
  2749.        Line.Length=TempD
  2750.        No.Input.Out="Y"
  2751.        Call IO.I
  2752.        TreasureRecord.RingType=False
  2753.        TreasureRecord.RingSpell=False
  2754.        If Yes Then
  2755.           Do
  2756.              Graphics.Off=True
  2757.              If TempC=False Then
  2758.                 Strng="[P]oison"
  2759.                 Call IO.O
  2760.                 Strng="[L]evel Drain"
  2761.                 Call IO.O
  2762.                 Strng="[S]pell"
  2763.                 Call IO.O
  2764.                 Strng="[G]eneric spell"
  2765.                 Call IO.O
  2766.                 Graphics.Off=False
  2767.              Endif
  2768.              Strng="Treasure ring option(q to quit)?"
  2769.              Line.Length=TempD
  2770.              No.Input.Out="Q"
  2771.              Call IO.I
  2772.              Select Case Ucase$(Out2)
  2773.              Case "P"
  2774.                 TreasureRecord.RingSpell=False
  2775.                 TreasureRecord.RingType=1
  2776.              Case "L"
  2777.                 TreasureRecord.RingSpell=False
  2778.                 TreasureRecord.RingType=2
  2779.              Case "S"
  2780.                 Call Find.Spell
  2781.                 If Temp Then
  2782.                    TreasureRecord.RingSpell=Temp
  2783.                    TreasureRecord.RingType=3
  2784.                 Endif
  2785.              Case "G"
  2786.                 TreasureRecord.RingSpell=True
  2787.                 TreasureRecord.RingType=3
  2788.              Case "Q"
  2789.                 Exit Do
  2790.              End Select
  2791.           Loop
  2792.        Endif
  2793.     Case "T"
  2794.        Strng="Value(1-32767)?"
  2795.        No.Input.Out="1"
  2796.        Call IO.I
  2797.        TreasureRecord.Gold=Int(Val(Out2))
  2798.     Case "U"
  2799.        Strng="Hit plus(1-32767)?"
  2800.        No.Input.Out="1"
  2801.        Call IO.I
  2802.        TreasureRecord.Plus=Int(Val(Out2))
  2803.     Case "V"
  2804.        Do
  2805.           Graphics.Off=True
  2806.           If TempC=False Then
  2807.              Strng="[B]lunt"
  2808.              Call IO.O
  2809.              Strng="[P]ole"
  2810.              Call IO.O
  2811.              Strng="[S]harp"
  2812.              Call IO.O
  2813.              Strng="[T]hrusting"
  2814.              Call IO.O
  2815.              Strng="[N]one"
  2816.              Call IO.O
  2817.              Graphics.Off=False
  2818.           Endif
  2819.           Strng="Treasure weapon class option(q to quit)?"
  2820.           Line.Length=TempD
  2821.           No.Input.Out="Q"
  2822.           Call IO.I
  2823.           Select Case Ucase$(Out2)
  2824.           Case "B"
  2825.              TreasureRecord.Proficiency=1
  2826.           Case "P"
  2827.              TreasureRecord.Proficiency=2
  2828.           Case "S"
  2829.              TreasureRecord.Proficiency=3
  2830.           Case "T"
  2831.              TreasureRecord.Proficiency=4
  2832.           Case "N"
  2833.              TreasureRecord.Proficiency=False
  2834.           Case "Q"
  2835.              Exit Do
  2836.           End Select
  2837.        Loop
  2838.     Case "W"
  2839.        Strng="Treasure is potion(y/n)?"
  2840.        Line.Length=TempD
  2841.        No.Input.Out="Y"
  2842.        Call IO.I
  2843.        TreasureRecord.Potion=False
  2844.        If Yes Then
  2845.           TreasureRecord.Potion=True
  2846.        Endif
  2847.     Case "X"
  2848.        Strng="Treasure is invisible(y/n)?"
  2849.        Line.Length=TempD
  2850.        No.Input.Out="Y"
  2851.        Call IO.I
  2852.        TreasureRecord.Invisible=False
  2853.        If Yes Then
  2854.           TreasureRecord.Invisible=True
  2855.        Endif
  2856.     Case "Y"
  2857.        Strng="Treasure is a receptacle(y/n)?"
  2858.        Line.Length=TempD
  2859.        No.Input.Out="Y"
  2860.        Call IO.I
  2861.        TreasureRecord.Recep=False
  2862.        If Yes Then
  2863.           TreasureRecord.Recep=True
  2864.        Endif
  2865.     Case "Z"
  2866.        Strng="Maximum objects in receptacle(1-32767)?"
  2867.        No.Input.Out="10"
  2868.        Call IO.I
  2869.        TreasureRecord.RecepMax=Int(Val(Out2))
  2870.     Case "1"
  2871.        Strng="Receptacle filename(8 letter DOS)?"
  2872.        No.Input.Out="CONTAIN"
  2873.        Call IO.I
  2874.        Out2=Ucase$(Out2)
  2875.        TreasureRecord.RecepFileName=Out2
  2876.     Case "2"
  2877.        Strng="Treasure can be stolen(y/n)?"
  2878.        Line.Length=TempD
  2879.        No.Input.Out="Y"
  2880.        Call IO.I
  2881.        TreasureRecord.Stealable=False
  2882.        TreasureRecord.StealPercent=False
  2883.        If Yes Then
  2884.           Strng="Percent chance treasure stolen during room steal rate(1-100)?"
  2885.           No.Input.Out="50"
  2886.           Call IO.I
  2887.           Temp=Int(Val(Out2))
  2888.           If Temp>=1 And Temp<=100 Then
  2889.              TreasureRecord.Stealable=True
  2890.              TreasureRecord.StealPercent=Temp
  2891.           Else
  2892.              TreasureRecord.Stealable=False
  2893.              TreasureRecord.StealPercent=False
  2894.           Endif
  2895.        Endif
  2896.     Case "3"
  2897.        Strng="Launchable device can be moved(y/n)?"
  2898.        Line.Length=TempD
  2899.        No.Input.Out="Y"
  2900.        Call IO.I
  2901.        TreasureRecord.Movable=False
  2902.        If Yes Then
  2903.           TreasureRecord.Movable=True
  2904.        Endif
  2905.     Case "M", "N"
  2906.        Strng="Treasure is a loadable device(y/n)?"
  2907.        Line.Length=TempD
  2908.        No.Input.Out="Y"
  2909.        Call IO.I
  2910.        TreasureRecord.Loadable=False
  2911.        TreasureRecord.AmmoLoads=False
  2912.        If Yes Then
  2913.           Put 8,Temp4,TreasureRecord
  2914.           Strng="Treasure which loads this device?"
  2915.           Call IO.O
  2916.           Call Find.Treasure
  2917.           If Temp5=False Then
  2918.              Get 8,Temp4,TreasureRecord
  2919.              TreasureRecord.Loadable=False
  2920.              TreasureRecord.AmmoLoads=False
  2921.           Else
  2922.              Get 8,Temp5,TreasureRecord
  2923.              If TreasureRecord.Ammunition=False Then
  2924.                 Get 8,Temp4,TreasureRecord
  2925.                 Strng="That treasure is not ammunition."
  2926.                 Call IO.O
  2927.                 TreasureRecord.Loadable=False
  2928.                 TreasureRecord.AmmoLoads=False
  2929.              Else
  2930.                 Get 8,Temp4,TreasureRecord
  2931.                 TreasureRecord.Loadable=True
  2932.                 TreasureRecord.AmmoLoads=Temp5
  2933.              Endif
  2934.           Endif
  2935.           Put 8,Temp4,TreasureRecord
  2936.           Temp5=Temp4
  2937.        Endif
  2938.     Case "P", "4"
  2939.        Strng="Treasure is a launchable device(y/n)?"
  2940.        Line.Length=TempD
  2941.        No.Input.Out="Y"
  2942.        Call IO.I
  2943.        TreasureRecord.Launchable=False
  2944.        TreasureRecord.LaunchLoads=False
  2945.        If Yes Then
  2946.           Put 8,Temp4,TreasureRecord
  2947.           Strng="Treasure which launchs from this device?"
  2948.           Call IO.O
  2949.           Call Find.Treasure
  2950.           If Temp5=False Then
  2951.              Get 8,Temp4,TreasureRecord
  2952.              TreasureRecord.Launchable=False
  2953.              TreasureRecord.LaunchLoads=False
  2954.           Else
  2955.              Get 8,Temp5,TreasureRecord
  2956.              If TreasureRecord.LaunchAmmo=False Then
  2957.                 Get 8,Temp4,TreasureRecord
  2958.                 Strng="That treasure does not launch from devices."
  2959.                 Call IO.O
  2960.                 TreasureRecord.Launchable=False
  2961.                 TreasureRecord.LaunchLoads=False
  2962.              Else
  2963.                 Get 8,Temp4,TreasureRecord
  2964.                 TreasureRecord.Launchable=True
  2965.                 TreasureRecord.LaunchLoads=Temp5
  2966.              Endif
  2967.           Endif
  2968.           Put 8,Temp4,TreasureRecord
  2969.           Temp5=Temp4
  2970.        Endif
  2971.     Case "Q"
  2972.        Exit Do
  2973.     End Select
  2974.  Loop
  2975.  Put 8,Temp4,TreasureRecord
  2976.  Strng="Treasure '"+Rtrim$(TreasureRecord.TreasureName)+"' changed."
  2977.  Call IO.O
  2978. 10281
  2979.  Exit Sub
  2980. 10282
  2981.  Resume 10281
  2982. End Sub
  2983.  
  2984. Sub Display.Treasure(TempX)
  2985.  On Local Error Goto 10292
  2986.  If TempX Then
  2987.     If TempC Then
  2988.        Exit Sub
  2989.     Endif
  2990.  ENdif
  2991.  Graphics.Off=True
  2992.  Strng="Treasure number"+Str$(Temp5)+":"
  2993.  Call IO.O
  2994.  Graphics.Off=True
  2995.  If TempX Then
  2996.     Strng="[A]"
  2997.  Endif
  2998.  Strng=Strng+"Treasure name: "+Rtrim$(TreasureRecord.TreasureName)
  2999.  Call IO.O
  3000.  If TempX Then
  3001.     Strng="[B]"
  3002.  Endif
  3003.  Strng=Strng+"Treasure identifier: "+Rtrim$(TreasureRecord.ShortName)
  3004.  Call IO.O
  3005.  If TempX Then
  3006.     Strng="[C]"
  3007.  Endif
  3008.  Strng=Strng+"Weight:"+Str$(TreasureRecord.Weight)
  3009.  Strng=Strng+Space$(37-Len(Strng))
  3010.  If TempX Then
  3011.     Strng=Strng+"[T]"
  3012.  Endif
  3013.  Strng=Strng+"Gold coin value:"+Str$(TreasureRecord.Gold)
  3014.  Call IO.O
  3015.  If TempX Then
  3016.     Strng="[D]"
  3017.  Endif
  3018.  Strng=Strng+"Treasure type: "
  3019.  If TreasureRecord.Type=False Then
  3020.     If TreasureRecord.Plus=False Then
  3021.        Strng=Strng+"Treasure"
  3022.     Else
  3023.        Strng=Strng+"Weapon"
  3024.     Endif
  3025.  Endif
  3026.  If TreasureRecord.Type<False Then
  3027.     Strng=Strng+"Shield"
  3028.  Endif
  3029.  If TreasureRecord.Type>False Then
  3030.     Strng=Strng+"Armor"
  3031.  Endif
  3032.  Strng=Strng+Space$(37-Len(Strng))
  3033.  If TempX Then
  3034.     Strng=Strng+"[U]"
  3035.  Endif
  3036.  Strng=Strng+"Hit plus:"+Str$(Abs(TreasureRecord.Plus))
  3037.  Call IO.O
  3038.  If TempX Then
  3039.     Strng="[E]"
  3040.  Endif
  3041.  Strng=Strng+"Charges:"+Str$(TreasureRecord.Charges)
  3042.  Strng=Strng+Space$(37-Len(Strng))
  3043.  If TempX Then
  3044.     Strng=Strng+"[V]"
  3045.  Endif
  3046.  Strng=Strng+"Weapon class: "
  3047.  Select Case TreasureRecord.Proficiency
  3048.  Case 1
  3049.     Strng=Strng+"Blunt"
  3050.  Case 2
  3051.     Strng=Strng+"Pole"
  3052.  Case 3
  3053.     Strng=Strng+"Sharp"
  3054.  Case 4
  3055.     Strng=Strng+"Thrusting"
  3056.  Case Else
  3057.     Strng=Strng+"None"
  3058.  End Select
  3059.  Call IO.O
  3060.  If TempX Then
  3061.     Strng="[F]"
  3062.  Endif
  3063.  Strng=Strng+"Treasure is coins: "
  3064.  If TreasureRecord.Coin Then
  3065.     Strng=Strng+"Yes"
  3066.  Else
  3067.     Strng=Strng+"No"
  3068.  Endif
  3069.  Strng=Strng+Space$(37-Len(Strng))
  3070.  If TempX Then
  3071.     Strng=Strng+"[W]"
  3072.  Endif
  3073.  Strng=Strng+"Treasure is a potion: "
  3074.  If TreasureRecord.Potion Then
  3075.     Strng=Strng+"Yes"
  3076.  Else
  3077.     Strng=Strng+"No"
  3078.  Endif
  3079.  Call IO.O
  3080.  If TempX Then
  3081.     Strng="[G]"
  3082.  Endif
  3083.  Strng=Strng+"Treasure is a scroll: "
  3084.  If TreasureRecord.Scroll Then
  3085.     Strng=Strng+"Yes"
  3086.  Else
  3087.     Strng=Strng+"No"
  3088.  Endif
  3089.  Strng=Strng+Space$(37-Len(Strng))
  3090.  If TempX Then
  3091.     Strng=Strng+"[X]"
  3092.  Endif
  3093.  Strng=Strng+"Treasure is invisible: "
  3094.  If TreasureRecord.Invisible Then
  3095.     Strng=Strng+"Yes"
  3096.  Else
  3097.     Strng=Strng+"No"
  3098.  Endif
  3099.  Call IO.O
  3100.  If TempX Then
  3101.     Strng="[H]"
  3102.  Endif
  3103.  Strng=Strng+"Treasure is ammunition: "
  3104.  If TreasureRecord.Ammunition Then
  3105.     Strng=Strng+"Yes"
  3106.  Else
  3107.     Strng=Strng+"No"
  3108.  Endif
  3109.  Strng=Strng+Space$(37-Len(Strng))
  3110.  If TempX Then
  3111.     Strng=Strng+"[Y]"
  3112.  Endif
  3113.  Strng=Strng+"Treasure is a receptacle: "
  3114.  If TreasureRecord.Recep Then
  3115.     Strng=Strng+"Yes"
  3116.  Else
  3117.     Strng=Strng+"No"
  3118.  Endif
  3119.  Call IO.O
  3120.  If TempX Then
  3121.     Strng="[I]"
  3122.  Endif
  3123.  Strng=Strng+"Receptacle is locked: "
  3124.  If TreasureRecord.Locked=1 And TreasureRecord.Closed=1 Then
  3125.     Strng=Strng+"Yes"
  3126.  Else
  3127.     Strng=Strng+"No"
  3128.  Endif
  3129.  Strng=Strng+Space$(37-Len(Strng))
  3130.  If TempX Then
  3131.     Strng=Strng+"[Z]"
  3132.  Endif
  3133.  Strng=Strng+"Maximum objects in receptacle:"
  3134.  Strng=Strng+Str$(TreasureRecord.RecepMax)
  3135.  Call IO.O
  3136.  If TempX Then
  3137.     Strng="[J]"
  3138.  Endif
  3139.  Strng=Strng+"Treasure is edible: "
  3140.  If TreasureRecord.Edible Then
  3141.     Strng=Strng+"Yes"
  3142.  Else
  3143.     Strng=Strng+"No"
  3144.  Endif
  3145.  Strng=Strng+Space$(37-Len(Strng))
  3146.  If TempX Then
  3147.     Strng=Strng+"[1]"
  3148.  Endif
  3149.  Strng=Strng+"Receptacle filename: "
  3150.  Strng2=Rtrim$(TreasureRecord.RecepFileName)
  3151.  If Strng2=Nul Then
  3152.     Strng=Strng+"None"
  3153.  Else
  3154.     Strng=Strng+Strng2
  3155.  Endif
  3156.  Call IO.O
  3157.  If TempX Then
  3158.     Strng="[K]"
  3159.  Endif
  3160.  Strng=Strng+"Weapon rusts: "
  3161.  If TreasureRecord.Rustable Then
  3162.     Var=TreasureRecord.RustPercent
  3163.     If Var<False Or Var>100 Then
  3164.        TreasureRecord.Rustable=False
  3165.        Var=False
  3166.     Endif
  3167.     If Var Then
  3168.        Strng=Strng+"Yes ("+Mid$(Str$(Var),2)+" percent)"
  3169.     Else
  3170.        Strng=Strng+"No"
  3171.     Endif
  3172.  Else
  3173.     Strng=Strng+"No"
  3174.  Endif
  3175.  Strng=Strng+Space$(37-Len(Strng))
  3176.  If TempX Then
  3177.     Strng=Strng+"[2]"
  3178.  Endif
  3179.  Strng=Strng+"Weapon is stealable: "
  3180.  If TreasureRecord.Stealable Then
  3181.     Var=TreasureRecord.StealPercent
  3182.     If Var<False Or Var>100 Then
  3183.        TreasureRecord.Stealable=False
  3184.        Var=False
  3185.     Endif
  3186.     If Var Then
  3187.        Strng=Strng+"Yes ("+Mid$(Str$(Var),2)+" percent)"
  3188.     Else
  3189.        Strng=Strng+"No"
  3190.     Endif
  3191.  Else
  3192.     Strng=Strng+"No"
  3193.  Endif
  3194.  Call IO.O
  3195.  If TempX Then
  3196.     Strng="[L]"
  3197.  Endif
  3198.  Strng=Strng+"Treasure key number:"+Str$(TreasureRecord.Keyed)
  3199.  Strng=Strng+Space$(37-Len(Strng))
  3200.  If TempX Then
  3201.     Strng=Strng+"[3]"
  3202.  Endif
  3203.  Strng=Strng+"Launchable device can be moved: "
  3204.  If TreasureRecord.Movable Then
  3205.     Strng=Strng+"Yes"
  3206.  Else
  3207.     Strng=Strng+"No"
  3208.  Endif
  3209.  Call IO.O
  3210.  If TempX Then
  3211.     Strng=Strng+"[M]"
  3212.  Endif
  3213.  Strng=Strng+"Treasure is loadable: "
  3214.  If TreasureRecord.Loadable Then
  3215.     Strng=Strng+"Yes"
  3216.  Else
  3217.     Strng=Strng+"No"
  3218.  Endif
  3219.  Strng=Strng+Space$(37-Len(Strng))
  3220.  If TempX Then
  3221.     Strng=Strng+"[4]"
  3222.  Endif
  3223.  Strng=Strng+"Treasure is launchable: "
  3224.  If TreasureRecord.Launchable Then
  3225.     Strng=Strng+"Yes"
  3226.  Else
  3227.     Strng=Strng+"No"
  3228.  Endif
  3229.  Call IO.O
  3230.  If TempX Then
  3231.     Strng="[N]"
  3232.  Endif
  3233.  Strng=Strng+"Treasure that loads device: "
  3234.  If TreasureRecord.Loadable Then
  3235.     Get 8,TreasureRecord.AmmoLoads,TreasureRecord
  3236.     Strng=Strng+Rtrim$(TreasureRecord.TreasureName)
  3237.     Get 8,Temp5,TreasureRecord
  3238.  Else
  3239.     Strng=Strng+"None"
  3240.  Endif
  3241.  Call IO.O
  3242.  If TempX Then
  3243.     Strng="[O]"
  3244.  Endif
  3245.  Strng=Strng+"Treasure loads launchable devices: "
  3246.  If TreasureRecord.LaunchAmmo Then
  3247.     Strng=Strng+"Yes"
  3248.  Else
  3249.     Strng=Strng+"No"
  3250.  Endif
  3251.  Call IO.O
  3252.  If TempX Then
  3253.     Strng="[P]"
  3254.  Endif
  3255.  Strng=Strng+"Treasure which launchs from this device: "
  3256.  If TreasureRecord.Launchable Then
  3257.     Get 8,TreasureRecord.LaunchLoads,TreasureRecord
  3258.     Strng=Strng+Rtrim$(TreasureRecord.TreasureName)
  3259.     Get 8,Temp5,TreasureRecord
  3260.  Else
  3261.     Strng=Strng+"None"
  3262.  Endif
  3263.  Call IO.O
  3264.  If TempX Then
  3265.     Strng="[R]"
  3266.  Endif
  3267.  Strng=Strng+"Treasure is magical: "
  3268.  If TreasureRecord.Spell=False Then
  3269.     Strng=Strng+"No"
  3270.  Else
  3271.     Get 4,TreasureRecord.Spell,SpellRecord
  3272.     Strng=Strng+"Yes, "+Rtrim$(SpellRecord.SpellName)+" spell"
  3273.  Endif
  3274.  Call IO.O
  3275.  If TempX Then
  3276.     Strng="[S]"
  3277.  Endif
  3278.  Strng=Strng+"Treasure is a ring: "
  3279.  Select Case TreasureRecord.RingType
  3280.  Case 1
  3281.     Strng=Strng+"protection from poison"
  3282.  Case 2
  3283.     Strng=Strng+"protection from level drain"
  3284.  Case 3
  3285.     Strng=Strng+"protection from spell: "
  3286.     If TreasureRecord.RingSpell=True Then
  3287.        Strng=Strng+"generic spell"
  3288.     Else
  3289.        Get 4,TreasureRecord.RingSpell,SpellRecord
  3290.        Strng=Strng+Rtrim$(Lcase$(SpellRecord.SpellName))+" spell"
  3291.     Endif
  3292.  Case Else
  3293.     Strng=Strng+"No"
  3294.  End Select
  3295.  Call IO.O
  3296. 10291
  3297.  Exit Sub
  3298. 10292
  3299.  Resume 10291
  3300. End Sub
  3301.  
  3302. Sub Edit.Nonplayer
  3303.  On Local Error Goto 10302
  3304.  If Lof(9)=False Then
  3305.     Call Add.Nonplayer
  3306.  Endif
  3307.  Do
  3308.     Graphics.Off=True
  3309.     If TempC=False Then
  3310.        Strng="[A]dd"
  3311.        Call IO.O
  3312.        Strng="[C]hange"
  3313.        Call IO.O
  3314.        Strng="[L]ist"
  3315.        Call IO.O
  3316.        Strng="[S]earch"
  3317.        Call IO.O
  3318.        Graphics.Off=False
  3319.     Endif
  3320.     Strng="Nonplayer edit option(q to quit)?"
  3321.     Line.Length=TempD
  3322.     No.Input.Out="Q"
  3323.     Call IO.I
  3324.     Select Case Ucase$(Out2)
  3325.     Case "A"
  3326.        Call Add.Nonplayer
  3327.     Case "C"
  3328.        Call Find.Nonplayer
  3329.        If Temp Then
  3330.           Temp4=Temp
  3331.           Call Change.Nonplayer
  3332.        Endif
  3333.     Case "L"
  3334.        Call List.Nonplayer
  3335.     Case "S"
  3336.        Call Search.Nonplayers
  3337.     Case "Q"
  3338.        Exit Sub
  3339.     End Select
  3340.  Loop
  3341. 10301
  3342.  Exit Sub
  3343. 10302
  3344.  Resume 10301
  3345. End Sub
  3346.  
  3347. Sub Add.Nonplayer
  3348.  On Local Error Goto 10312
  3349.  Temp4=Lof(9)/Len(MonsterRecord)+1
  3350.  MonsterRecord.MonsterName=Nul
  3351.  MonsterRecord.PluralName=Nul
  3352.  For Temp6=1 To 5
  3353.     MonsterRecord.Treasure(Temp6)=False
  3354.  Next
  3355.  MonsterRecord.Experience=False
  3356.  MonsterRecord.NumberAppearing=1
  3357.  MonsterRecord.Level=False
  3358.  MonsterRecord.Hits=False
  3359.  MonsterRecord.Poison=False
  3360.  MonsterRecord.LevelDrain=False
  3361.  MonsterRecord.Spell=False
  3362.  MonsterRecord.Block=False
  3363.  MonsterRecord.Prevent=False
  3364.  MonsterRecord.Follow=False
  3365.  MonsterRecord.Magic=True
  3366.  MonsterRecord.Jail=False
  3367.  MonsterRecord.Teleport=False
  3368.  MonsterRecord.FollowPercent=False
  3369.  MonsterRecord.BlockPercent=False
  3370.  MonsterRecord.PreventPercent=False
  3371.  MonsterRecord.SpellPercent=False
  3372.  MonsterRecord.PoisonPercent=False
  3373.  MonsterRecord.DrainPercent=False
  3374.  MonsterRecord.Rate=False
  3375.  MonsterRecord.RatePercent=False
  3376.  MonsterRecord.Permanent=-2
  3377.  For Temp6=1 To 5
  3378.     MonsterRecord.Talk(Temp6)=False
  3379.  Next
  3380.  MonsterRecord.Psionic=False
  3381.  MonsterRecord.PsionicSpell=False
  3382.  MonsterRecord.Equation=False
  3383.  MonsterRecord.MonsterEquate=Nul
  3384.  Put 9,Temp4,MonsterRecord
  3385.  Call Change.Nonplayer
  3386. 10311
  3387.  Exit Sub
  3388. 10312
  3389.  Resume 10311
  3390. End Sub
  3391.  
  3392. Sub List.Nonplayer
  3393.  On Local Error Goto 10322
  3394.  Temp3=Lof(9)/Len(MonsterRecord)
  3395.  Temp$=Mid$(Str$(Temp3),2)
  3396.  Strng="From(1-"+Temp$+")?"
  3397.  No.Input.Out="1"
  3398.  Call IO.I
  3399.  Temp=Int(Val(Out2))
  3400.  If Temp<1 Or Temp>Temp3 Then
  3401.     Strng=Range$
  3402.     Call IO.O
  3403.     Exit Sub
  3404.  Endif
  3405.  Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
  3406.  No.Input.Out=Temp$
  3407.  Call IO.I
  3408.  Temp2=Int(Val(Out2))
  3409.  If Temp2<Temp Then
  3410.     Strng=Range$
  3411.     Call IO.O
  3412.     Exit Sub
  3413.  Endif
  3414.  If Temp2>Temp3 Then
  3415.     Temp2=Temp3
  3416.  Endif
  3417.  For Temp5=Temp To Temp2
  3418.     Get 9,Temp5,MonsterRecord
  3419.     Call Display.Nonplayer(False)
  3420.     Graphics.Off=False
  3421.     Call More.Prompt
  3422.     If No Then
  3423.        Exit For
  3424.     Endif
  3425.  Next
  3426. 10321
  3427.  Exit Sub
  3428. 10322
  3429.  Resume 10321
  3430. End Sub
  3431.  
  3432. Sub Display.Nonplayer(TempX)
  3433.  On Local Error Goto 10332
  3434.  If TempX Then
  3435.     If TempC Then
  3436.        Exit Sub
  3437.     Endif
  3438.  ENdif
  3439.  Graphics.Off=True
  3440.  Strng="Nonplayer number"+Str$(Temp5)+":"
  3441.  Call IO.O
  3442.  If TempX Then
  3443.     Strng="[A]"
  3444.  Endif
  3445.  Strng=Strng+"Nonplayer name: "+Rtrim$(MonsterRecord.MonsterName)
  3446.  Call IO.O
  3447.  If TempX Then
  3448.     Strng="[B]"
  3449.  Endif
  3450.  Strng=Strng+"Nonplayer rooms: "+MonsterRecord.PluralName
  3451.  Call IO.O
  3452.  If TempX Then
  3453.     Strng="[C]"
  3454.  Endif
  3455.  Strng=Strng+"Nonplayer level:"+Str$(MonsterRecord.Level)
  3456.  Call IO.O
  3457.  If TempX Then
  3458.     Strng="[D]"
  3459.  Endif
  3460.  Strng=Strng+"Hit points:"+Str$(MonsterRecord.Hits)
  3461.  Call IO.O
  3462.  If TempX Then
  3463.     Strng="[E]"
  3464.  Endif
  3465.  Strng=Strng+"Experience points:"+Str$(MonsterRecord.Experience)
  3466.  Call IO.O
  3467.  If TempX Then
  3468.     Strng="[F]"
  3469.  Endif
  3470.  Strng=Strng+"Poisonous nonplayer: "
  3471.  If MonsterRecord.Poison Then
  3472.     Strng=Strng+"Yes"
  3473.  Else
  3474.     Strng=Strng+"No"
  3475.  Endif
  3476.  Strng=Strng+"("+Mid$(Str$(MonsterRecord.PoisonPercent),2)+" percent)"
  3477.  Call IO.O
  3478.  If TempX Then
  3479.     Strng="[G]"
  3480.  Endif
  3481.  Strng=Strng+"Level draining nonplayer: "
  3482.  If MonsterRecord.LevelDrain Then
  3483.     Strng=Strng+"Yes"
  3484.  Else
  3485.     Strng=Strng+"No"
  3486.  Endif
  3487.  Strng=Strng+"("+Mid$(Str$(MonsterRecord.DrainPercent),2)+" percent)"
  3488.  Call IO.O
  3489.  If TempX Then
  3490.     Strng="[H]"
  3491.  Endif
  3492.  Strng=Strng+"Nonplayer blocks exits: "
  3493.  If MonsterRecord.Block Then
  3494.     Strng=Strng+"Yes"
  3495.  Else
  3496.     Strng=Strng+"No"
  3497.  Endif
  3498.  Strng=Strng+"("+Mid$(Str$(MonsterRecord.BlockPercent),2)+" percent)"
  3499.  Call IO.O
  3500.  If TempX Then
  3501.     Strng="[I]"
  3502.  Endif
  3503.  Strng=Strng+"Nonplayer prevents treasure take: "
  3504.  If MonsterRecord.Prevent Then
  3505.     Strng=Strng+"Yes"
  3506.  Else
  3507.     Strng=Strng+"No"
  3508.  Endif
  3509.  Strng=Strng+"("+Mid$(Str$(MonsterRecord.PreventPercent),2)+" percent)"
  3510.  Call IO.O
  3511.  If TempX Then
  3512.     Strng="[J]"
  3513.  Endif
  3514.  Strng=Strng+"Nonplayer follows user: "
  3515.  If MonsterRecord.Follow Then
  3516.     Strng=Strng+"Yes"
  3517.  Else
  3518.     Strng=Strng+"No"
  3519.  Endif
  3520.  Strng=Strng+"("+Mid$(Str$(MonsterRecord.FollowPercent),2)+" percent) "+_
  3521.  "("+Mid$(Str$(MonsterRecord.Teleport),2)+"% teleport)"
  3522.  Call IO.O
  3523.  If TempX Then
  3524.     Strng="[K]"
  3525.  Endif
  3526.  Strng=Strng+"Nonplayer casts spells: "
  3527.  If MonsterRecord.Spell=False Then
  3528.     Strng=Strng+"No"
  3529.  Else
  3530.     Get 4,MonsterRecord.Spell,SpellRecord
  3531.     Strng=Strng+"Yes, "+Rtrim$(SpellRecord.SpellName)
  3532.  Endif
  3533.  Strng=Strng+"("+Mid$(Str$(MonsterRecord.SpellPercent),2)+" percent)"
  3534.  Call IO.O
  3535.  If TempX Then
  3536.     Strng="[L]"
  3537.  Endif
  3538.  Strng=Strng+"Nonplayer jails attacker: "
  3539.  If MonsterRecord.Jail Then
  3540.     Strng=Strng+"Yes"
  3541.  Else
  3542.     Strng=Strng+"No"
  3543.  Endif
  3544.  Call IO.O
  3545.  If TempX Then
  3546.     Strng="[M]"
  3547.  Endif
  3548.  Strng=Strng+"Encounter rate:"+Str$(MonsterRecord.Rate)+_
  3549.  " ("+Mid$(Str$(MonsterRecord.RatePercent),2)+" percent)"
  3550.  Call IO.O
  3551.  If TempX Then
  3552.     Strng="[N]"
  3553.  Endif
  3554.  Strng=Strng+"Nonplayer uses psionics: "
  3555.  If MonsterRecord.Psionic=False Then
  3556.     Strng=Strng+"No"
  3557.  Else
  3558.     Get 4,MonsterRecord.PsionicSpell
  3559.     Strng=Strng+"Yes, "+SpellRecord.SpellName
  3560.  Endif
  3561.  Call IO.O
  3562.  If TempX Then
  3563.     Strng="[O]"
  3564.  Endif
  3565.  Strng=Strng+"Carries treasure:"
  3566.  Call IO.O
  3567.  For Temp6=1 To 5
  3568.     Temp8=MonsterRecord.Treasure(Temp6)
  3569.     If Temp8>False Then
  3570.        Get 8,Temp8,TreasureRecord
  3571.        Strng=TreasureRecord.TreasureName
  3572.        Call IO.O
  3573.     Endif
  3574.  Next
  3575.  If TempX Then
  3576.     Strng="[P]"
  3577.  Endif
  3578.  Strng=Strng+"Nonplayer has attack equation: "
  3579.  If MonsterRecord.Equation Then
  3580.     Strng=Strng+"Yes: "
  3581.     Out2=MonsterRecord.MonsterEquate
  3582.     Out2=Rtrim$(Out2)
  3583.     Strng=Strng+Out2
  3584.  Else
  3585.     Strng=Strng+"No"
  3586.  Endif
  3587.  Call IO.O
  3588. 10331
  3589.  Exit Sub
  3590. 10332
  3591.  Resume 10331
  3592. End Sub
  3593.  
  3594. Sub Change.Nonplayer
  3595.  On Local Error Goto 10342
  3596.  Get 9,Temp4,MonsterRecord
  3597.  Do
  3598.     Temp5=Temp4
  3599.     Call Display.Nonplayer(True)
  3600.     Graphics.Off=False
  3601.     Strng="Nonplayer change option(q to quit)?"
  3602.     Line.Length=TempD
  3603.     No.Input.Out="Q"
  3604.     Call IO.I
  3605.     Select Case Ucase$(Out2)
  3606.     Case "A"
  3607.        Strng="Nonplayer name(30 characters):"
  3608.        Call IO.O
  3609.        Strng="?"
  3610.        No.Input.Out=None$
  3611.        Call IO.I
  3612.        Out2=Lcase$(Out2)
  3613.        MonsterRecord.MonsterName=Out2
  3614.     Case "B"
  3615.        Strng="Rooms(separated by commas):"
  3616.        Call IO.O
  3617.        Strng="?"
  3618.        No.Input.Out=None$
  3619.        Call IO.I
  3620.        Out2=Lcase$(Out2)
  3621.        MonsterRecord.PluralName=Out2
  3622.     Case "C"
  3623.        Strng="Nonplayer level(1-32767)?"
  3624.        No.Input.Out="1"
  3625.        Call IO.I
  3626.        MonsterRecord.Level=Int(Val(Out2))
  3627.     Case "D"
  3628.        Strng="Hit points(1-32767)?"
  3629.        No.Input.Out="1"
  3630.        Call IO.I
  3631.        MonsterRecord.Hits=Int(Val(Out2))
  3632.     Case "E"
  3633.        Strng="Experience points(1-32767)?"
  3634.        No.Input.Out="1"
  3635.        Call IO.I
  3636.        MonsterRecord.Experience=Int(Val(Out2))
  3637.     Case "F"
  3638.        Strng="Poisonous nonplayer(y/n)?"
  3639.        Line.Length=TempD
  3640.        No.Input.Out="Y"
  3641.        Call IO.I
  3642.        MonsterRecord.Poison=False
  3643.        MonsterRecord.PoisonPercent=False
  3644.        If Yes Then
  3645.           MonsterRecord.Poison=True
  3646.           Strng="Percent chance nonplayer will poison(1-100)?"
  3647.           No.Input.Out="50"
  3648.           Call IO.I
  3649.           MonsterRecord.PoisonPercent=Int(Val(Out2))
  3650.        Endif
  3651.     Case "G"
  3652.        Strng="Level draining nonplayer(y/n)?"
  3653.        Line.Length=TempD
  3654.        No.Input.Out="Y"
  3655.        Call IO.I
  3656.        MonsterRecord.LevelDrain=False
  3657.        MonsterRecord.DrainPercent=False
  3658.        If Yes Then
  3659.           MonsterRecord.LevelDrain=True
  3660.           Strng="Percent chance nonplayer will level drain(1-100)?"
  3661.           No.Input.Out="50"
  3662.           Call IO.I
  3663.           MonsterRecord.DrainPercent=Int(Val(Out2))
  3664.        Endif
  3665.     Case "H"
  3666.        Strng="Nonplayer blocks exits(y/n)?"
  3667.        Line.Length=TempD
  3668.        No.Input.Out="Y"
  3669.        Call IO.I
  3670.        MonsterRecord.Block=False
  3671.        MonsterRecord.BlockPercent=False
  3672.        If Yes Then
  3673.           MonsterRecord.Block=True
  3674.           Strng="Percent chance nonplayer will block exits(1-100)?"
  3675.           No.Input.Out="50"
  3676.           Call IO.I
  3677.           MonsterRecord.BlockPercent=Int(Val(Out2))
  3678.        Endif
  3679.     Case "I"
  3680.        Strng="Nonplayer prevents taking treasure(y/n)?"
  3681.        Line.Length=TempD
  3682.        No.Input.Out="Y"
  3683.        Call IO.I
  3684.        MonsterRecord.Prevent=False
  3685.        MonsterRecord.PreventPercent=False
  3686.        If Yes Then
  3687.           MonsterRecord.Prevent=True
  3688.           Strng="Percent chance nonplayer prevents taking treasure(1-100)?"
  3689.           No.Input.Out="50"
  3690.           Call IO.I
  3691.           MonsterRecord.PreventPercent=Int(Val(Out2))
  3692.        Endif
  3693.     Case "J"
  3694.        Strng="Nonplayer follows user(y/n)?"
  3695.        Line.Length=TempD
  3696.        No.Input.Out="Y"
  3697.        Call IO.I
  3698.        MonsterRecord.Follow=False
  3699.        MonsterRecord.FollowPercent=False
  3700.        MonsterRecord.Teleport=False
  3701.        If Yes Then
  3702.           MonsterRecord.Follow=True
  3703.           Strng="Percent chance nonplayer will follow user(1-100)?"
  3704.           No.Input.Out="50"
  3705.           Call IO.I
  3706.           MonsterRecord.FollowPercent=Int(Val(Out2))
  3707.           Strng="Percent chance nonplayer will teleport with user(1-100)?"
  3708.           No.Input.Out="50"
  3709.           Call IO.I
  3710.           MonsterRecord.Teleport=Int(Val(Out2))
  3711.        Endif
  3712.     Case "K"
  3713.        Strng="Nonplayer casts spells(y/n)?"
  3714.        Line.Length=TempD
  3715.        No.Input.Out="Y"
  3716.        Call IO.I
  3717.        MonsterRecord.Spell=False
  3718.        MonsterRecord.SpellPercent=False
  3719.        If Yes Then
  3720.           Call Find.Spell
  3721.           If Temp Then
  3722.              MonsterRecord.Spell=Temp
  3723.              Strng="Percent chance nonplayer casts spell(1-100)?"
  3724.              No.Input.Out="50"
  3725.              Call IO.I
  3726.              MonsterRecord.SpellPercent=Int(Val(Out2))
  3727.           Endif
  3728.        Endif
  3729.     Case "L"
  3730.        Strng="Nonplayer jails attacker(y/n)?"
  3731.        Line.Length=TempD
  3732.        No.Input.Out="Y"
  3733.        Call IO.I
  3734.        MonsterRecord.Jail=False
  3735.        If Yes Then
  3736.           MonsterRecord.Jail=True
  3737.        Endif
  3738.     Case "M"
  3739.        Strng="Nonplayer encounter rate(# of action prompts)?"
  3740.        No.Input.Out="6"
  3741.        Call IO.I
  3742.        MonsterRecord.Rate=Int(Val(Out2))
  3743.        Strng="Nonplayer encounter percent(1-100)?"
  3744.        No.Input.Out="50"
  3745.        Call IO.I
  3746.        MonsterRecord.RatePercent=Int(Val(Out2))
  3747.     Case "N"
  3748.        Strng="Nonplayer uses psionics(y/n)?"
  3749.        Line.Length=TempD
  3750.        No.Input.Out="Y"
  3751.        Call IO.I
  3752.        MonsterRecord.Psionic=False
  3753.        MonsterRecord.PsionicSpell=False
  3754.        If Yes Then
  3755.           Strng="Psionic spell?"
  3756.           Call Find.Spell
  3757.           If Temp Then
  3758.              If SpellRecord.Psionic=False Then
  3759.                 Strng="That spell is not a psionic spell!"
  3760.                 Call IO.O
  3761.                 MonsterRecord.Psionic=False
  3762.                 MonsterRecord.PsionicSpell=False
  3763.              Else
  3764.                 MonsterRecord.Psionic=True
  3765.                 MonsterRecord.PsionicSpell=Temp
  3766.              Endif
  3767.           Endif
  3768.        Endif
  3769.     Case "O"
  3770.        Strng="Enter five treasure names:"
  3771.        Call IO.O
  3772.        Strng="Press "+Enter$+" for none."
  3773.        Call IO.O
  3774.        Graphics.Off=True
  3775.        For Temp2=1 To 5
  3776.           Call Find.Treasure
  3777.           MonsterRecord.Treasure(Temp2)=Temp5
  3778.        Next
  3779.     Case "P"
  3780.        Line.Length=TempD
  3781.        No.Input.Out="Y"
  3782.        Strng="Nonplayer has attack equation(y/n)?"
  3783.        Call IO.I
  3784.        MonsterRecord.Equation=False
  3785.        MonsterRecord.MonsterEquate=Nul
  3786.        If Yes Then
  3787.           Strng="Enter nonplayer attack equation:"
  3788.           Call IO.I
  3789.           MonsterRecord.Equation=True
  3790.           MonsterRecord.MonsterEquate=Ucase$(Out2)
  3791.        Endif
  3792.     Case "Q"
  3793.        Exit Do
  3794.     End Select
  3795.  Loop
  3796.  Put 9,Temp4,MonsterRecord
  3797.  Strng="Nonplayer '"+Rtrim$(MonsterRecord.MonsterName)+"' changed."
  3798.  Call IO.O
  3799. 10341
  3800.  Exit Sub
  3801. 10342
  3802.  Resume 10341
  3803. End Sub
  3804.  
  3805. Sub Find.Monster
  3806.  On Local Error Goto 10352
  3807.  Temp=False
  3808.  Strng="Monster name, or number?"
  3809.  No.Input.Out="1"
  3810.  Call IO.I
  3811.  If Out2=Nul Then
  3812.     Exit Sub
  3813.  Endif
  3814.  Temp7=False
  3815.  Out2=Lcase$(Out2)
  3816.  If Instr(Out2,"#") Then
  3817.     Temp7=Val(Mid$(Out2,Instr(Out2,"#")+1))
  3818.     Out2=Left$(Out2,Instr(Out2,"#")-1)
  3819.  Endif
  3820.  TempQ=False
  3821.  For Temp=1 To Lof(7)/Len(MonsterRecord)
  3822.     Get 7,Temp,MonsterRecord
  3823.     If Left$(MonsterRecord.MonsterName,Len(Out2))=Out2 Then
  3824.        TempQ=TempQ+1
  3825.        If Temp7=False Or TempQ=Temp7 Then
  3826.           Exit Sub
  3827.        Endif
  3828.     Endif
  3829.  Next
  3830.  Temp=Int(Val(Out2))
  3831.  If Temp<1 Or Temp>Lof(7)/Len(MonsterRecord) Then
  3832.     Temp=False
  3833.     Strng="Monster name not found."
  3834.     Call IO.O
  3835.     Temp=False
  3836.  Endif
  3837. 10351
  3838.  Exit Sub
  3839. 10352
  3840.  Resume 10351
  3841. End Sub
  3842.  
  3843. Sub Find.Treasure
  3844.  On Local Error Goto 10362
  3845.  Temp5=False
  3846.  Strng="Treasure name, or number?"
  3847.  No.Input.Out="1"
  3848.  Call IO.I
  3849.  If Out2=Nul Then
  3850.     Exit Sub
  3851.  Endif
  3852.  Temp7=False
  3853.  Out2=Lcase$(Out2)
  3854.  If Instr(Out2,"#") Then
  3855.     Temp7=Val(Mid$(Out2,Instr(Out2,"#")+1))
  3856.     Out2=Left$(Out2,Instr(Out2,"#")-1)
  3857.  Endif
  3858.  TempQ=False
  3859.  For Temp5=1 To Lof(8)/Len(TreasureRecord)
  3860.     Get 8,Temp5,TreasureRecord
  3861.     If Left$(TreasureRecord.TreasureName,Len(Out2))=Out2 Then
  3862.        TempQ=TempQ+1
  3863.        If Temp7=False Or TempQ=Temp7 Then
  3864.           Exit Sub
  3865.        Endif
  3866.     Endif
  3867.  Next
  3868.  Temp5=Int(Val(Out2))
  3869.  If Temp5<1 Or Temp5>Lof(8)/Len(TreasureRecord) Then
  3870.     Temp5=False
  3871.     Strng="Treasure name not found."
  3872.     Call IO.O
  3873.  Endif
  3874. 10361
  3875.  Exit Sub
  3876. 10362
  3877.  Resume 10361
  3878. End Sub
  3879.  
  3880. Sub Find.Spell
  3881.  On Local Error Goto 10372
  3882.  Temp=False
  3883.  Strng="Spell name, or number?"
  3884.  No.Input.Out="1"
  3885.  Call IO.I
  3886.  If Out2=Nul Then
  3887.     Exit Sub
  3888.  Endif
  3889.  Temp7=False
  3890.  Out2=Lcase$(Out2)
  3891.  If Instr(Out2,"#") Then
  3892.     Temp7=Val(Mid$(Out2,Instr(Out2,"#")+1))
  3893.     Out2=Left$(Out2,Instr(Out2,"#")-1)
  3894.  Endif
  3895.  TempQ=False
  3896.  For Temp=1 To Lof(4)/Len(SpellRecord)
  3897.     Get 4,Temp,SpellRecord
  3898.     If Left$(SpellRecord.SpellName,Len(Out2))=Out2 Then
  3899.        TempQ=TempQ+1
  3900.        If Temp7=False Or TempQ=Temp7 Then
  3901.           Exit Sub
  3902.        Endif
  3903.     Endif
  3904.  Next
  3905.  Temp=Int(Val(Out2))
  3906.  If Temp<1 Or Temp>Lof(4)/Len(SpellRecord) Then
  3907.     Temp=False
  3908.     Strng="Spell name not found."
  3909.     Call IO.O
  3910.  Endif
  3911. 10371
  3912.  Exit Sub
  3913. 10372
  3914.  Resume 10371
  3915. End Sub
  3916.  
  3917. Sub Find.Object
  3918.  On Local Error Goto 10382
  3919.  Temp=False
  3920.  Strng="Object name, or number?"
  3921.  No.Input.Out="1"
  3922.  Call IO.I
  3923.  If Out2=Nul Then
  3924.     Exit Sub
  3925.  Endif
  3926.  Out2=Lcase$(Out2)
  3927.  Temp7=False
  3928.  If Instr(Out2,"#") Then
  3929.     Temp7=Val(Mid$(Out2,Instr(Out2,"#")+1))
  3930.     Out2=Left$(Out2,Instr(Out2,"#")-1)
  3931.  Endif
  3932.  TempQ=False
  3933.  For Temp=1 To Lof(6)/Len(ObjectRecord)
  3934.     Get 6,Temp,ObjectRecord
  3935.     If Left$(ObjectRecord.ObjectName,Len(Out2))=Out2 Then
  3936.        TempQ=TempQ+1
  3937.        If Temp7=False Or TempQ=Temp7 Then
  3938.           Exit Sub
  3939.        Endif
  3940.     Endif
  3941.  Next
  3942.  Temp=Int(Val(Out2))
  3943.  If Temp<1 Or Temp>Lof(6)/Len(ObjectRecord) Then
  3944.     Temp=False
  3945.     Strng="Object name not found."
  3946.     Call IO.O
  3947.  Endif
  3948. 10381
  3949.  Exit Sub
  3950. 10382
  3951.  Resume 10381
  3952. End Sub
  3953.  
  3954. Sub Find.Nonplayer
  3955.  On Local Error Goto 10392
  3956.  Temp=False
  3957.  Strng="Nonplayer name, or number?"
  3958.  No.Input.Out="1"
  3959.  Call IO.I
  3960.  If Out2=Nul Then
  3961.     Exit Sub
  3962.  Endif
  3963.  Temp7=False
  3964.  Out2=Lcase$(Out2)
  3965.  If Instr(Out2,"#") Then
  3966.     Temp7=Val(Mid$(Out2,Instr(Out2,"#")+1))
  3967.     Out2=Left$(Out2,Instr(Out2,"#")-1)
  3968.  Endif
  3969.  TempQ=False
  3970.  For Temp=1 To Lof(9)/Len(MonsterRecord)
  3971.     Get 9,Temp,MonsterRecord
  3972.     If Left$(MonsterRecord.MonsterName,Len(Out2))=Out2 Then
  3973.        TempQ=TempQ+1
  3974.        If Temp7=False Or TempQ=Temp7 Then
  3975.           Exit Sub
  3976.        Endif
  3977.     Endif
  3978.  Next
  3979.  Temp=Int(Val(Out2))
  3980.  If Temp<1 Or Temp>Lof(9)/Len(MonsterRecord) Then
  3981.     Temp=False
  3982.     Strng="Nonplayer name not found."
  3983.     Call IO.O
  3984.     Temp=False
  3985.  Endif
  3986. 10391
  3987.  Exit Sub
  3988. 10392
  3989.  Resume 10391
  3990. End Sub
  3991.  
  3992. Sub Read.Config
  3993.  On Local Error Goto 10412
  3994.  Call Get.Command
  3995.  Call Get.Config
  3996.  Call Get.Environ
  3997.  Call Free.Files
  3998.  Call Open.Files
  3999.  If Local.Mode Then
  4000.     Color.Graphics=True
  4001.     If Config2(84) And Config2(85) Then
  4002.        Local.Avatar=True
  4003.     Endif
  4004.  Endif
  4005.  If Port.Override Then
  4006.     Port=Port.Override-1
  4007.  Else
  4008.     Port=Config2(46)-1
  4009.  Endif
  4010.  Temp.FileName=Config3(53)+Config3(75)
  4011.  If Node Then
  4012.     Temp.FileName=Temp.FileName+Chr$(Node)
  4013.  Endif
  4014.  Temp.FileName=Temp.FileName+Config3(15)
  4015.  Close #13
  4016.  Temp=False
  4017.  Open Temp.FileName For Input Shared As #13
  4018.  If Not Eof(13) Then
  4019.     Input #13,Temp
  4020.     Color.Code=Temp
  4021.     Avatar.Code=Temp
  4022.  Endif
  4023. 10411
  4024.  Exit Sub
  4025. 10412
  4026.  Resume 10411
  4027. End Sub
  4028.  
  4029. Sub Get.Command
  4030.  On Local Error Goto 10422
  4031.  If Chained=False Then
  4032.     If Command$=Nul Then
  4033.        Local.Mode=True
  4034.     Else
  4035.        Node=False
  4036.        Local.Mode=False
  4037.        If Left$(Command$,2)="-1" Then
  4038.           Local.Mode=True
  4039.        Endif
  4040.     Endif
  4041.     If Right$(Command$,2)<>"-1" Then
  4042.        Node=Asc(Right$(Command$,1))
  4043.     Endif
  4044.  Endif
  4045. 10421
  4046.  Exit Sub
  4047. 10422
  4048.  Resume 10421
  4049. End Sub
  4050.  
  4051. Sub Get.Config
  4052.  On Local Error Goto 10432
  4053.  DND.Path$=Environ$("DNDBBS")
  4054.  If DND.Path$<>Nul Then
  4055.     If Right$(DND.Path$,1)<>"\" Then
  4056.        DND.Path$=DND.Path$+"\"
  4057.     Endif
  4058.  Endif
  4059.  Data.Error=False
  4060.  FileName=DND.Path$+"DNDBBS"
  4061.  If Node Then
  4062.     FileName=FileName+Chr$(Node)
  4063.  Endif
  4064.  FileName=FileName+".CFG"
  4065.  Close
  4066.  Open FileName For Input Shared As #13
  4067.  For Temp=1 To 10
  4068.     For Temp5=1 To 4
  4069.        Input #13,Training.Room(Temp,Temp5)
  4070.     Next
  4071.  Next
  4072.  For Temp5=1 To 10
  4073.     Line Input #13,Room.Array(Temp5)
  4074.  Next
  4075.  For Temp5=1 To 30
  4076.     Input #13,Config1(Temp5)
  4077.  Next
  4078.  For Temp5=1 To 85
  4079.     Input #13,Config2(Temp5)
  4080.  Next
  4081.  For Temp5=1 To 77
  4082.     Line Input #13,Config3(Temp5)
  4083.  Next
  4084.  For Temp5=1 To 10
  4085.     Line Input #13,High.Class.Name(Temp5)
  4086.  Next
  4087.  For Temp2=1 To 8
  4088.     Line Input #13,Race(Temp2)
  4089.  Next
  4090.  For Temp2=1 To 10
  4091.     Line Input #13,Class.Name(Temp2)
  4092.  Next
  4093.  For Temp2=1 To 7
  4094.     Line Input #13,Stat(Temp2)
  4095.  Next
  4096.  For Temp2=1 To 11
  4097.     Line Input #13,Direction(Temp2)
  4098.  Next
  4099.  For Temp2=1 To 10
  4100.     Line Input #13,Numeral(Temp2)
  4101.  Next
  4102.  For Temp2=1 To 4
  4103.     Line Input #13,Weapon.Type.Name(Temp2)
  4104.  Next
  4105.  For Temp2=1 To 3
  4106.     Line Input #13,Alignment.Name1(Temp2)
  4107.  Next
  4108.  For Temp2=1 To 3
  4109.     Line Input #13,Alignment.Name2(Temp2)
  4110.  Next
  4111. 10431
  4112.  If Data.Error Then
  4113.     Strng=FileName+" not found. Run DNDCNFG."
  4114.     Call Terminate
  4115.  Endif
  4116.  Exit Sub
  4117. 10432
  4118.  Data.Error=True
  4119.  Resume 10431
  4120. End Sub
  4121.  
  4122. Sub Get.Environ
  4123.  On Local Error Goto 10442
  4124.  Out2=Environ$("DNDDAT")
  4125.  If Out2<>Nul Then
  4126.     Config3(11)=Out2
  4127.     If Right$(Config3(11),1)<>"\" Then
  4128.        Config3(11)=Config3(11)+"\"
  4129.     Endif
  4130.  Endif
  4131.  Out2=Environ$("DNDDOC")
  4132.  If Out2<>Nul Then
  4133.     Config3(52)=Out2
  4134.     If Right$(Config3(52),1)<>"\" Then
  4135.        Config3(52)=Config3(52)+"\"
  4136.     Endif
  4137.  Endif
  4138.  Out2=Environ$("DNDTEMP")
  4139.  If Out2<>Nul Then
  4140.     Config3(53)=Out2
  4141.     If Right$(Config3(53),1)<>"\" Then
  4142.        Config3(53)=Config3(53)+"\"
  4143.     Endif
  4144.  Endif
  4145.  Out2=Environ$("DNDDOOR")
  4146.  If Out2<>Nul Then
  4147.     Config3(38)=Out2
  4148.     If Right$(Config3(38),1)<>"\" Then
  4149.        Config3(38)=Config3(38)+"\"
  4150.     Endif
  4151.  Endif
  4152. 10441
  4153.  Exit Sub
  4154. 10442
  4155.  Resume 10441
  4156. End Sub
  4157.  
  4158. Sub Free.Files
  4159.  On Local Error Goto 10454
  4160.  Temp.FileName=Config3(53)+Config3(75)+Config3(15)
  4161. 10451
  4162.  Close
  4163.  Temp=False
  4164.  Do
  4165.     Temp=Temp+1
  4166.     Open Temp.FileName For Random Shared As Temp
  4167.  Loop
  4168. 10452
  4169.  Close
  4170.  Kill Temp.FileName
  4171. 10453
  4172.  If Temp<16 Then
  4173.     Strng="Increase FILES= statement in CONFIG.SYS then reboot."
  4174.     Call Terminate
  4175.  Endif
  4176.  Exit Sub
  4177. 10454
  4178.  If Erl=10451 Then
  4179.     Resume 10452
  4180.  Endif
  4181.  Resume 10453
  4182. End Sub
  4183.  
  4184. Sub Open.Files
  4185.  On Local Error Goto 10462
  4186.  Close
  4187.  Day.File.FileName=Config3(11)+Config3(72)
  4188.  FileName=Config3(11)+Config3(21)+Config3(15)
  4189.  Open FileName For Random Shared As #3 Len=Len(UserRecord)
  4190.  FileName=Config3(11)+Config3(20)+Config3(15)
  4191.  Open FileName For Random Shared As #4 Len=Len(SpellRecord)
  4192.  FileName=Config3(11)+Config3(16)+Config3(15)
  4193.  Open FileName For Random Shared As #5 Len=Len(RoomRecord)
  4194.  FileName=Config3(11)+Config3(17)+Config3(15)
  4195.  Open FileName For Random Shared As #6 Len=Len(ObjectRecord)
  4196.  FileName=Config3(11)+Config3(18)+Config3(15)
  4197.  Open FileName For Random Shared As #7 Len=Len(MonsterRecord)
  4198.  FileName=Config3(11)+Config3(19)+Config3(15)
  4199.  Open FileName For Random Shared As #8 Len=Len(TreasureRecord)
  4200.  FileName=Config3(11)+Config3(22)+Config3(15)
  4201.  Open FileName For Random Shared As #9 Len=Len(MonsterRecord)
  4202.  FileName=Config3(11)+Config3(12)+Config3(15)
  4203.  Open FileName For Random Shared As #10 Len=Len(MonclassRecord)
  4204.  FileName=Config3(11)+Config3(13)+Config3(15)
  4205.  Open FileName For Random Shared As #11 Len=Len(MonsterTalkRecord)
  4206.  FileName=Config3(54)+Config3(59)+Config3(15)
  4207.  Open FileName For Random Shared As #12 Len=Len(MessageBaseRecord)
  4208. 10461
  4209.  Exit Sub
  4210. 10462
  4211.  Resume 10461
  4212. End Sub
  4213.  
  4214. Sub IO.O
  4215.  On Local Error Goto 10472
  4216.  If Color.Graphics Then
  4217.     Gosub Out.ANSI
  4218.  Endif
  4219.  If Carriage.Return=False Then
  4220.     Strng=Rtrim$(Strng)
  4221.  Endif
  4222.  Break=False
  4223.  For Count=1 To Len(Strng)
  4224.     Call Keyboard
  4225.     VarX$=Mid$(Strng,Count,1)
  4226.     Call Scrn(VarX$)
  4227.     Call Put.Modem(VarX$)
  4228.     If Break Then
  4229.        Exit For
  4230.     Endif
  4231.  Next
  4232.  If Carriage.Return=False Then
  4233.     Call Line.Return
  4234.  Endif
  4235.  Strng=Nul
  4236.  Carriage.Return=False
  4237.  Exit Sub
  4238.  
  4239. Out.ANSI:
  4240.  If Graphics.Off=False Then
  4241.     Color.Code=Color.Code+1
  4242.     Avatar.Code=Avatar.Code+1
  4243.     If Color.Code<31 Then
  4244.        Color.Code=31
  4245.     Endif
  4246.     If Avatar.Code<10 Then
  4247.        Avatar.Code=10
  4248.     Endif
  4249.     If Color.Code>35 Then
  4250.        Color.Code=31
  4251.     Endif
  4252.     If Avatar.Code>14 Then
  4253.        Avatar.Code=10
  4254.     Endif
  4255.     Call Screen.ANSI(4,Color.Code,Avatar.Code)
  4256.     Call Modem.ANSI(4,Color.Code,Avatar.Code)
  4257.  Endif
  4258.  If Graphics.Off Then
  4259.     Call Screen.ANSI(4,37,15)
  4260.     Call Modem.ANSI(4,37,15)
  4261.  Endif
  4262.  Return
  4263. 10471
  4264.  Exit Sub
  4265. 10472
  4266.  Resume 10471
  4267. End Sub
  4268.  
  4269. Sub IO.I
  4270.  On Local Error Goto 10482
  4271.  Static Var$
  4272.  Carriage.Return=True
  4273.  Line.Limit=Len(Strng)
  4274.  Strng=Strng+Var$
  4275.  Call IO.O
  4276.  Out2=Var$
  4277.  Var$=Nul
  4278.  Do
  4279.     Char$=Nul
  4280.     Do While Char$=Nul
  4281.        Call Keyboard
  4282.        Call Get.Modem
  4283.        If Len(Buffer$) Then
  4284.           Char$=Left$(Buffer$,1)
  4285.           Buffer$=Mid$(Buffer$,2)
  4286.        Endif
  4287.     Loop
  4288.     Char=Asc(Char$)
  4289.     Select Case Char
  4290.     Case 8
  4291.        If Len(Out2) Then
  4292.           Out2=Left$(Out2,Len(Out2)-1)
  4293.           Call Back.Space
  4294.        Endif
  4295.     Case 13
  4296.        If Out2=Nul Then
  4297.           If Len(No.Input.Out) Then
  4298.              Out2=No.Input.Out
  4299.              OutY$=Lcase$(No.Input.Out)
  4300.              Call Scrn(OutY$)
  4301.              Call Put.Modem(OutY$)
  4302.           Endif
  4303.        Endif
  4304.        Call Scrn(Chr$(13))
  4305.        Call Put.Modem(Chr$(13))
  4306.        Exit Do
  4307.     Case 32 To 127
  4308.        VarX$=Char$
  4309.        If No.Echo=False Then
  4310.           If Hide Then
  4311.              VarX$=Mask$
  4312.           Endif
  4313.           Call Put.Modem(VarX$)
  4314.           If Word.Wrap=False Then
  4315.              Call Scrn(VarX$)
  4316.           Endif
  4317.        Endif
  4318.        Out2=Out2+Char$
  4319.        Select Case Word.Wrap
  4320.        Case True
  4321.           Select Case Len(Out2)+Line.Limit
  4322.           Case 0 To 78
  4323.              Call Scrn(VarX$)
  4324.           Case Else
  4325.              TempX=False
  4326.              Word=False
  4327.              For TempY=Len(Out2) To 1 Step -1
  4328.                 If Mid$(Out2,TempY,1)=" " Then
  4329.                    For Var=1 To TempX
  4330.                       Call Back.Space
  4331.                    Next
  4332.                    Var$=Mid$(Out2,TempY+1)
  4333.                    Out2=Left$(Out2,TempY)
  4334.                    Call Scrn(Chr$(13))
  4335.                    Word=True
  4336.                    Exit For
  4337.                 Endif
  4338.                 TempX=TempX+1
  4339.              Next
  4340.              If Word=False Then
  4341.                 Call Scrn(Chr$(13))
  4342.              Endif
  4343.              Call Put.Modem(Chr$(13))
  4344.              Exit Do
  4345.           End Select
  4346.        Case False
  4347.           If Line.Length>False Then
  4348.              If Len(Out2)>=Line.Length Then
  4349.                 Call Scrn(Chr$(13))
  4350.                 Call Put.Modem(Chr$(13))
  4351.                 Exit Do
  4352.              Endif
  4353.           Endif
  4354.        End Select
  4355.     End Select
  4356.  Loop
  4357.  Call Scrn(Chr$(10))
  4358.  Call Put.Modem(Chr$(10))
  4359.  No.Input.Out=Nul
  4360.  Strng=Nul
  4361.  No.Echo=False
  4362.  No.Input=False
  4363.  Line.Length=False
  4364.  If Out2=Nul Then
  4365.     No.Input=True
  4366.     Exit Sub
  4367.  Endif
  4368.  Var1$=Left$(Out2,1)
  4369.  Yes=Ucase$(Var1$)="Y"
  4370.  No=Ucase$(Var1$)="N"
  4371. 10481
  4372.  Exit Sub
  4373. 10482
  4374.  Resume 10481
  4375. End Sub
  4376.  
  4377. Sub Put.Modem(Var$)
  4378.  On Local Error Goto 10492
  4379.  If Local.Mode Then
  4380.     Exit Sub
  4381.  Endif
  4382.  For Count=1 To Len(Var$)
  4383.     Call Check.Carrier
  4384.     If Allow.Break Then
  4385.        Call Driver(11)
  4386.        If (Outregs.AX And &H0001)=1 Then
  4387.           Break=True
  4388.           Exit For
  4389.        Endif
  4390.     Endif
  4391.     Call Get.Modem
  4392.     Inregs.AX=Asc(Mid$(Var$,Count,1))
  4393.     Call Driver(7)
  4394.  Next
  4395. 10491
  4396.  Exit Sub
  4397. 10492
  4398.  Resume 10491
  4399. End Sub
  4400.  
  4401. Sub Get.Modem
  4402.  On Local Error Goto 10502
  4403.  If Local.Mode Then
  4404.     Exit Sub
  4405.  Endif
  4406.  Call Check.Carrier
  4407.  Call Driver(6)
  4408.  Char=Outregs.AX And 255
  4409.  If Char<>255 Then
  4410.     Buffer$=Buffer$+Chr$(Char)
  4411.  Endif
  4412. 10501
  4413.  Exit Sub
  4414. 10502
  4415.  Resume 10501
  4416. End Sub
  4417.  
  4418. Sub Check.Carrier
  4419.  On Local Error Goto 10512
  4420.  Call Driver(5)
  4421.  If (Outregs.AX And &H80)=False Then
  4422.     Strng="Lost carrier!"
  4423.     Call Terminate
  4424.  Endif
  4425. 10511
  4426.  Exit Sub
  4427. 10512
  4428.  Resume 10511
  4429. End Sub
  4430.  
  4431. Sub Keyboard
  4432.  On Local Error Goto 10522
  4433.  VarX$=Inkey$
  4434.  Select Case Len(VarX$)
  4435.  Case 0
  4436.     Exit Sub
  4437.  Case 1
  4438.     Var=Asc(VarX$)
  4439.     Select Case Var
  4440.     Case 8, 13, 32 To 127
  4441.        Buffer$=Buffer$+VarX$
  4442.     Case 11
  4443.        If Allow.Break Then
  4444.           Break=True
  4445.        Endif
  4446.     End Select
  4447.  End Select
  4448. 10521
  4449.  Exit Sub
  4450. 10522
  4451.  Resume 10521
  4452. End Sub
  4453.  
  4454. Sub Line.Return
  4455.  On Local Error Goto 10532
  4456.  Var$=Chr$(13)
  4457.  Call Scrn(Var$)
  4458.  Call Put.Modem(Var$)
  4459.  Var$=Chr$(10)
  4460.  Call Scrn(Var$)
  4461.  Call Put.Modem(Var$)
  4462. 10531
  4463.  Exit Sub
  4464. 10532
  4465.  Resume 10531
  4466. End Sub
  4467.  
  4468. Sub Back.Space
  4469.  On Local Error Goto 10542
  4470.  Strng3=Chr$(27)+"[D"+" "+Chr$(27)+"[D"
  4471.  Call Scrn(Strng3)
  4472.  Strng3=Chr$(8)+" "+Chr$(8)
  4473.  Call Put.Modem(Strng3)
  4474. 10541
  4475.  Exit Sub
  4476. 10542
  4477.  Resume 10541
  4478. End Sub
  4479.  
  4480. Sub Driver(Var)
  4481.  On Local Error Goto 10552
  4482.  Select Case Var
  4483.  Case 5
  4484.     Inregs.AX=&H0300
  4485.  Case 6
  4486.     Inregs.AX=&H2000
  4487.  Case 7
  4488.     Inregs.AX=Inregs.AX Or &H0B00
  4489.  Case 11
  4490.     Inregs.AX=&H1001
  4491.  End Select
  4492.  Inregs.DX=Port
  4493.  Call Interrupt(&H14,Inregs,Outregs)
  4494. 10551
  4495.  Exit Sub
  4496. 10552
  4497.  Resume 10551
  4498. End Sub
  4499.  
  4500. Sub Scrn(Var$)
  4501.  On Local Error Goto 10562
  4502.  Var$=Var$+"$"
  4503.  InregsX.AX=&H0900
  4504.  InregsX.DS=Sseg(Var$)
  4505.  InregsX.DX=Sadd(Var$)
  4506.  Call InterruptX(&H21,InregsX,OutregsX)
  4507. 10561
  4508.  Exit Sub
  4509. 10562
  4510.  Resume 10561
  4511. End Sub
  4512.  
  4513. Sub Screen.ANSI(Var1,Var2,Var3)
  4514.  On Local Error Goto 10572
  4515.  If Local.Avatar Then
  4516.     Call Avatar(Var1,Var2,Var3)
  4517.     For VarX=1 To Len(TempD$)
  4518.        Inregs.AX=&H0600
  4519.        Inregs.DX=Asc(Mid$(TempD$,VarX,1))
  4520.        Call Interrupt(&H21,Inregs,Outregs)
  4521.     Next
  4522.     Exit Sub
  4523.  Endif
  4524.  Call ANSI(Var1,Var2,Var3)
  4525.  Call Scrn(TempD$)
  4526. 10571
  4527.  Exit Sub
  4528. 10572
  4529.  Resume 10571
  4530. End Sub
  4531.  
  4532. Sub Modem.ANSI(Var1,Var2,Var3)
  4533.  On Local Error Goto 10582
  4534.  If Color.Graphics Then
  4535.     If Extended.ANSI Then
  4536.        Call Avatar(Var1,Var2,Var3)
  4537.     Else
  4538.        Call ANSI(Var1,Var2,Var3)
  4539.     Endif
  4540.     Call Put.Modem(TempD$)
  4541.  Endif
  4542. 10581
  4543.  Exit Sub
  4544. 10582
  4545.  Resume 10581
  4546. End Sub
  4547.  
  4548. Sub ANSI(VarX,VarY,VarZ)
  4549.  On Local Error Goto 10592
  4550.  TempD$=Nul
  4551.  Select Case VarX
  4552.  Case 1
  4553.     TempD$=Chr$(27)+"[0;"+Mid$(Str$(VarY),2)+"m"
  4554.  Case 2
  4555.     TempD$=Chr$(27)+"["+Mid$(Str$(VarY),2)+";"+Mid$(Str$(VarZ),2)+"H"
  4556.  Case 3
  4557.     TempD$=Chr$(27)+"[2J"
  4558.  Case 4
  4559.     TempD$=Chr$(27)+"[1;"+Mid$(Str$(VarY),2)+"m"
  4560.  End Select
  4561. 10591
  4562.  Exit Sub
  4563. 10592
  4564.  Resume 10591
  4565. End Sub
  4566.  
  4567. Sub Avatar(VarX,VarY,VarZ)
  4568.  On Local Error Goto 10602
  4569.  TempD$=Nul
  4570.  Select Case VarX
  4571.  Case 1, 4
  4572.     TempD$=Chr$(22)+Chr$(1)+Chr$(VarZ)
  4573.  Case 2
  4574.     TempD$=Chr$(22)+Chr$(8)+Chr$(VarY)+Chr$(VarZ)
  4575.  Case 3
  4576.     TempD$=Chr$(12)
  4577.  End Select
  4578. 10601
  4579.  Exit Sub
  4580. 10602
  4581.  Resume 10601
  4582. End Sub
  4583.