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 / DNDEDIT.BAS < prev    next >
BASIC Source File  |  1993-01-07  |  97KB  |  3,821 lines

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