VERSION 5.00 Begin VB.Form frmThingEdit Caption = "Thing Edit" ClientHeight = 5745 ClientLeft = 60 ClientTop = 345 ClientWidth = 11880 Icon = "Things.frx":0000 LinkTopic = "Form1" MaxButton = 0 'False ScaleHeight = 5745 ScaleWidth = 11880 StartUpPosition = 3 'Windows Default Begin VB.CommandButton cmdCopy Caption = "&Copy Thing" Height = 615 Left = 6600 TabIndex = 77 Top = 4920 Width = 975 End Begin VB.CommandButton cmdLoadDefault Caption = "&Load Code Default" Height = 615 Left = 4440 Style = 1 'Graphical TabIndex = 76 Top = 4920 Width = 975 End Begin VB.CommandButton cmdDelete Caption = "&Delete Thing from SOC" Height = 615 Left = 3240 Style = 1 'Graphical TabIndex = 74 Top = 4920 Width = 1095 End Begin VB.CommandButton cmdSave Caption = "&Save" Height = 615 Left = 5520 TabIndex = 73 Top = 4920 Width = 975 End Begin VB.Frame frmFlags Caption = "Flags" Height = 3735 Left = 7680 TabIndex = 45 Top = 1920 Width = 4095 Begin VB.CheckBox chkFlags Caption = "MF_FIRE" Height = 255 Index = 26 Left = 2040 TabIndex = 72 Tag = "4194304" ToolTipText = "Fire object. Doesn't harm if you have red shield." Top = 2160 Width = 1695 End Begin VB.CheckBox chkFlags Caption = "MF_NOCLIPTHING" Height = 255 Index = 25 Left = 2040 TabIndex = 71 Tag = "1073741824" ToolTipText = "Don't be blocked by things (partial clipping)" Top = 3120 Width = 1815 End Begin VB.CheckBox chkFlags Caption = "MF_SCENERY" Height = 255 Index = 24 Left = 2040 TabIndex = 70 Tag = "33554432" ToolTipText = "Scenery (uses scenery thinker). Uses less CPU than a standard object, but generally can't move, etc." Top = 2880 Width = 1455 End Begin VB.CheckBox chkFlags Caption = "MF_ENEMY" Height = 255 Index = 23 Left = 2040 TabIndex = 69 Tag = "16777216" ToolTipText = "This mobj is an enemy!" Top = 2640 Width = 1335 End Begin VB.CheckBox chkFlags Caption = "MF_COUNTITEM" Height = 255 Index = 22 Left = 2040 TabIndex = 68 Tag = "8388608" ToolTipText = "On picking up, count this item object towards intermission item total." Top = 2400 Width = 1695 End Begin VB.CheckBox chkFlags Caption = "MF_NOTHINK" Height = 255 Index = 21 Left = 2040 TabIndex = 67 Tag = "2097152" ToolTipText = "Don't run this thing's thinker." Top = 1920 Width = 1695 End Begin VB.CheckBox chkFlags Caption = "MF_MONITOR" Height = 255 Index = 20 Left = 2040 TabIndex = 66 Tag = "1048576" ToolTipText = "Item box" Top = 1680 Width = 1575 End Begin VB.CheckBox chkFlags Caption = "MF_HIRES" Height = 255 Index = 19 Left = 2040 TabIndex = 65 Tag = "524288" ToolTipText = "Object uses a high-resolution sprite" Top = 1440 Width = 1215 End Begin VB.CheckBox chkFlags Caption = "MF_BOUNCE" Height = 255 Index = 18 Left = 2040 TabIndex = 64 Tag = "262144" ToolTipText = "Bounce off walls and things." Top = 1200 Width = 1335 End Begin VB.CheckBox chkFlags Caption = "MF_SPRING" Height = 255 Index = 17 Left = 2040 TabIndex = 63 Tag = "131072" ToolTipText = "Item is a spring." Top = 960 Width = 1575 End Begin VB.CheckBox chkFlags Caption = "MF_MISSILE" Height = 255 Index = 16 Left = 2040 TabIndex = 62 Tag = "65536" ToolTipText = "Any kind of projectile currently flying through the air, waiting to hit something" Top = 720 Width = 1335 End Begin VB.CheckBox chkFlags Caption = "MF_BOXICON" Height = 255 Index = 15 Left = 2040 TabIndex = 61 Tag = "32768" ToolTipText = "Monitor powerup icon. These rise a bit." Top = 480 Width = 1815 End Begin VB.CheckBox chkFlags Caption = "MF_FLOAT" Height = 255 Index = 14 Left = 2040 TabIndex = 60 Tag = "16384" ToolTipText = "Allow moves to any height, no gravity. For active floaters." Top = 240 Width = 1215 End Begin VB.CheckBox chkFlags Caption = "MF_SPECIALFLAGS" Height = 255 Index = 13 Left = 120 TabIndex = 59 Tag = "8192" ToolTipText = "This object does not adhere to regular flag/z properties for object placing." Top = 3360 Width = 1815 End Begin VB.CheckBox chkFlags Caption = "MF_NOCLIP" Height = 255 Index = 12 Left = 120 TabIndex = 58 Tag = "4096" ToolTipText = "Don't clip against objects, walls, etc." Top = 3120 Width = 1335 End Begin VB.CheckBox chkFlags Caption = "MF_SLIDEME" Height = 255 Index = 11 Left = 120 TabIndex = 57 Tag = "2048" ToolTipText = "Slide this object when it hits a wall." Top = 2880 Width = 1335 End Begin VB.CheckBox chkFlags Caption = "MF_AMBIENT" Height = 255 Index = 10 Left = 120 TabIndex = 56 Tag = "1024" ToolTipText = "This object is an ambient sound." Top = 2640 Width = 1695 End Begin VB.CheckBox chkFlags Caption = "MF_NOGRAVITY" Height = 255 Index = 9 Left = 120 TabIndex = 55 Tag = "512" ToolTipText = "Don't apply gravity" Top = 2400 Width = 1695 End Begin VB.CheckBox chkFlags Caption = "MF_SPAWNCEILING" Height = 255 Index = 8 Left = 120 TabIndex = 54 Tag = "256" ToolTipText = "On level spawning (initial position), hang from ceiling instead of stand on floor." Top = 2160 Width = 1935 End Begin VB.CheckBox chkFlags Caption = "MF_BOSS" Height = 255 Index = 7 Left = 120 TabIndex = 53 Tag = "128" ToolTipText = "Object is a boss." Top = 1920 Width = 1575 End Begin VB.CheckBox chkFlags Caption = "MF_PUSHABLE" Height = 255 Index = 6 Left = 120 TabIndex = 52 Tag = "64" ToolTipText = "You can push this object. It can activate switches and things by pushing it on top." Top = 1680 Width = 1575 End Begin VB.CheckBox chkFlags Caption = "MF_AMBUSH" Height = 255 Index = 5 Left = 120 TabIndex = 51 Tag = "32" ToolTipText = "Special attributes" Top = 1440 Width = 1455 End Begin VB.CheckBox chkFlags Caption = "MF_NOBLOCKMAP" Height = 255 Index = 4 Left = 120 TabIndex = 50 Tag = "16" ToolTipText = "Don't use the blocklinks (inert but displayable)" Top = 1200 Width = 1815 End Begin VB.CheckBox chkFlags Caption = "MF_NOSECTOR" Height = 255 Index = 3 Left = 120 TabIndex = 49 Tag = "8" ToolTipText = "Don't use the sector links (invisible but touchable)." Top = 960 Width = 1575 End Begin VB.CheckBox chkFlags Caption = "MF_SHOOTABLE" Height = 255 Index = 2 Left = 120 TabIndex = 48 Tag = "4" ToolTipText = "Can be hit." Top = 720 Width = 1695 End Begin VB.CheckBox chkFlags Caption = "MF_SOLID" Height = 255 Index = 1 Left = 120 TabIndex = 47 Tag = "2" ToolTipText = "Blocks." Top = 480 Width = 1335 End Begin VB.CheckBox chkFlags Caption = "MF_SPECIAL" Height = 255 Index = 0 Left = 120 TabIndex = 46 Tag = "1" ToolTipText = "Call P_TouchSpecialThing when touched." Top = 240 Width = 1455 End End Begin VB.ComboBox cmbRaisestate Height = 315 Left = 4320 TabIndex = 43 Text = "cmbRaisestate" Top = 4440 Width = 3300 End Begin VB.ComboBox cmbActivesound Height = 315 Left = 4320 TabIndex = 41 Text = "cmbActivesound" Top = 4080 Width = 3300 End Begin VB.TextBox txtDamage Height = 285 Left = 10680 TabIndex = 39 Text = "0" Top = 1200 Width = 1095 End Begin VB.TextBox txtMass Height = 285 Left = 10680 TabIndex = 37 Text = "0" Top = 840 Width = 1095 End Begin VB.TextBox txtHeight Height = 285 Left = 10680 TabIndex = 35 Text = "0" Top = 480 Width = 1095 End Begin VB.TextBox txtRadius Height = 285 Left = 10680 TabIndex = 33 Text = "0" Top = 120 Width = 1095 End Begin VB.TextBox txtSpeed Height = 285 Left = 8760 TabIndex = 31 Text = "0" Top = 1560 Width = 1095 End Begin VB.ComboBox cmbDeathsound Height = 315 Left = 4320 TabIndex = 29 Text = "cmbDeathsound" Top = 3720 Width = 3300 End Begin VB.ComboBox cmbXdeathstate Height = 315 Left = 4320 TabIndex = 27 Text = "cmbXdeathstate" Top = 3360 Width = 3300 End Begin VB.ComboBox cmbDeathstate Height = 315 Left = 4320 TabIndex = 25 Text = "cmbDeathstate" Top = 3000 Width = 3300 End Begin VB.ComboBox cmbMissilestate Height = 315 Left = 4320 TabIndex = 23 Text = "cmbMissilestate" Top = 2640 Width = 3300 End Begin VB.ComboBox cmbMeleestate Height = 315 Left = 4320 TabIndex = 21 Text = "cmbMeleestate" Top = 2280 Width = 3300 End Begin VB.ComboBox cmbPainsound Height = 315 Left = 4320 TabIndex = 19 Text = "cmbPainsound" Top = 1920 Width = 3300 End Begin VB.TextBox txtPainchance Height = 285 Left = 8760 TabIndex = 17 Text = "0" Top = 1200 Width = 1095 End Begin VB.ComboBox cmbPainstate Height = 315 Left = 4320 TabIndex = 15 Text = "cmbPainstate" Top = 1560 Width = 3300 End Begin VB.ComboBox cmbAttacksound Height = 315 Left = 4320 TabIndex = 13 Text = "cmbAttacksound" Top = 1200 Width = 3300 End Begin VB.TextBox txtReactiontime Height = 285 Left = 8760 TabIndex = 11 Text = "0" Top = 840 Width = 1095 End Begin VB.ComboBox cmbSeesound Height = 315 Left = 4320 TabIndex = 9 Text = "cmbSeesound" Top = 840 Width = 3300 End Begin VB.ComboBox cmbSeestate Height = 315 Left = 4320 TabIndex = 7 Text = "cmbSeestate" Top = 480 Width = 3300 End Begin VB.TextBox txtSpawnhealth Height = 285 Left = 8760 TabIndex = 6 Text = "0" Top = 480 Width = 1095 End Begin VB.ComboBox cmbSpawnstate Height = 315 Left = 4320 TabIndex = 3 Text = "cmbSpawnstate" Top = 120 Width = 3300 End Begin VB.TextBox txtDoomednum Height = 285 Left = 8760 TabIndex = 1 Text = "0" Top = 120 Width = 1095 End Begin VB.ListBox lstThings Height = 5520 ItemData = "Things.frx":0442 Left = 120 List = "Things.frx":0444 TabIndex = 0 Top = 120 Width = 3015 End Begin VB.Label lblStatusInfo Alignment = 2 'Center Caption = "Idle" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 375 Left = 9960 TabIndex = 75 Top = 1560 Width = 1815 End Begin VB.Label lblRaisestate Alignment = 1 'Right Justify Caption = "Raisestate:" Height = 255 Left = 3360 TabIndex = 44 Top = 4440 Width = 855 End Begin VB.Label lblActivesound Alignment = 1 'Right Justify Caption = "Activesound:" Height = 255 Left = 3240 TabIndex = 42 Top = 4080 Width = 975 End Begin VB.Label lblDamage Alignment = 1 'Right Justify Caption = "Damage:" Height = 255 Left = 9840 TabIndex = 40 Top = 1200 Width = 735 End Begin VB.Label lblMass Alignment = 1 'Right Justify Caption = "Mass:" Height = 255 Left = 9960 TabIndex = 38 Top = 840 Width = 615 End Begin VB.Label lblHeight Alignment = 1 'Right Justify Caption = "Height:" Height = 255 Left = 9960 TabIndex = 36 Top = 480 Width = 615 End Begin VB.Label lblRadius Alignment = 1 'Right Justify Caption = "Radius:" Height = 255 Left = 9960 TabIndex = 34 Top = 120 Width = 615 End Begin VB.Label lblSpeed Alignment = 1 'Right Justify Caption = "Speed:" Height = 255 Left = 7680 TabIndex = 32 Top = 1560 Width = 975 End Begin VB.Label lblDeathsound Alignment = 1 'Right Justify Caption = "Deathsound:" Height = 255 Left = 3240 TabIndex = 30 Top = 3720 Width = 975 End Begin VB.Label lblXdeathstate Alignment = 1 'Right Justify Caption = "Xdeathstate:" Height = 255 Left = 3240 TabIndex = 28 Top = 3360 Width = 975 End Begin VB.Label lblDeathstate Alignment = 1 'Right Justify Caption = "Deathstate:" Height = 255 Left = 3240 TabIndex = 26 Top = 3000 Width = 975 End Begin VB.Label lblMissilestate Alignment = 1 'Right Justify Caption = "Missilestate:" Height = 255 Left = 3240 TabIndex = 24 Top = 2640 Width = 975 End Begin VB.Label lblMeleestate Alignment = 1 'Right Justify Caption = "Meleestate:" Height = 255 Left = 3240 TabIndex = 22 Top = 2280 Width = 975 End Begin VB.Label lblPainsound Alignment = 1 'Right Justify Caption = "Painsound:" Height = 255 Left = 3240 TabIndex = 20 Top = 1920 Width = 975 End Begin VB.Label lblPainchance Alignment = 1 'Right Justify Caption = "Painchance:" Height = 255 Left = 7680 TabIndex = 18 Top = 1200 Width = 975 End Begin VB.Label lblPainstate Alignment = 1 'Right Justify Caption = "Painstate:" Height = 255 Left = 3240 TabIndex = 16 Top = 1560 Width = 975 End Begin VB.Label lblAttacksound Alignment = 1 'Right Justify Caption = "Attacksound:" Height = 255 Left = 3240 TabIndex = 14 Top = 1200 Width = 975 End Begin VB.Label lblReactiontime Alignment = 1 'Right Justify Caption = "Reactiontime:" Height = 255 Left = 7680 TabIndex = 12 Top = 840 Width = 975 End Begin VB.Label lblSeesound Alignment = 1 'Right Justify Caption = "Seesound:" Height = 255 Left = 3240 TabIndex = 10 Top = 840 Width = 975 End Begin VB.Label lblSeestate Alignment = 1 'Right Justify Caption = "Seestate:" Height = 255 Left = 3240 TabIndex = 8 Top = 480 Width = 975 End Begin VB.Label lblSpawnhealth Alignment = 1 'Right Justify Caption = "Spawnhealth:" Height = 255 Left = 7680 TabIndex = 5 Top = 480 Width = 975 End Begin VB.Label lblSpawnstate Alignment = 1 'Right Justify Caption = "Spawnstate:" Height = 255 Left = 3240 TabIndex = 4 Top = 120 Width = 975 End Begin VB.Label lblDoomednum Alignment = 1 'Right Justify Caption = "Thing Map #:" Height = 255 Left = 7680 TabIndex = 2 Top = 120 Width = 975 End End Attribute VB_Name = "frmThingEdit" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit Private Sub cmdCopy_Click() Dim Response As String Response$ = InputBox("Copy state to #:", "Copy State") If Response = "" Then Exit Sub Response = TrimComplete(Response) Call WriteThing(False, Val(Response)) MsgBox "Thing copied to #" & Val(Response) End Sub Private Sub cmdDelete_Click() Call WriteThing(True, lstThings.ListIndex) End Sub Private Sub cmdLoadDefault_Click() Call ClearForm If InStr(lstThings.List(lstThings.ListIndex), "MT_FREESLOT") = 0 Then LoadObjectInfo (lstThings.ListIndex) Else MsgBox "Free slots do not have a code default." End If End Sub Private Sub cmdSave_Click() Call WriteThing(False, lstThings.ListIndex) End Sub Private Sub Form_Load() Call Reload End Sub Private Sub ClearForm() Dim i As Integer cmbSpawnstate.Text = "" cmbSeestate.Text = "" cmbSeesound.Text = "" cmbAttacksound.Text = "" cmbPainstate.Text = "" cmbPainsound.Text = "" cmbMeleestate.Text = "" cmbMissilestate.Text = "" cmbDeathstate.Text = "" cmbXdeathstate.Text = "" cmbDeathsound.Text = "" cmbActivesound.Text = "" cmbRaisestate.Text = "" txtDoomednum.Text = "" txtSpawnhealth.Text = "" txtReactiontime.Text = "" txtPainchance.Text = "" txtSpeed.Text = "" txtRadius.Text = "" txtHeight.Text = "" txtMass.Text = "" txtDamage.Text = "" For i = 0 To 26 chkFlags(i).Value = 0 Next End Sub Private Sub Reload() lblStatusInfo.Caption = "Loading Sounds Info..." DoEvents LoadSounds lblStatusInfo.Caption = "Loading Things Info..." DoEvents LoadThings lblStatusInfo.Caption = "Loading States Info..." DoEvents LoadStates lblStatusInfo.Caption = "Idle" lstThings.ListIndex = 0 End Sub Private Sub LoadSounds() Dim myFSO As New Scripting.FileSystemObject Dim ts As TextStream Dim line As String Dim number As Integer Dim startclip As Integer, endclip As Integer Dim addstring As String Dim i As Integer, numfreeslots As Integer ChDir SourcePath Set ts = myFSO.OpenTextFile("sounds.h", ForReading, False) Do While InStr(ts.ReadLine, "List of sounds (don't modify this comment!)") = 0 Loop ts.SkipLine ' typedef enum ts.SkipLine ' { line = ts.ReadLine number = 0 cmbSeesound.Clear cmbAttacksound.Clear cmbPainsound.Clear cmbDeathsound.Clear cmbActivesound.Clear Do While InStr(line, "sfx_freeslot0") = 0 startclip = InStr(line, "sfx_") If InStr(line, "sfx_") <> 0 Then endclip = InStr(line, ",") line = Mid(line, startclip, endclip - startclip) addstring = number & " - " & line cmbSeesound.AddItem addstring cmbAttacksound.AddItem addstring cmbPainsound.AddItem addstring cmbDeathsound.AddItem addstring cmbActivesound.AddItem addstring number = number + 1 End If line = ts.ReadLine Loop ts.Close Set myFSO = Nothing 'Populate the free slots! numfreeslots = 800 For i = 1 To numfreeslots If i < 10 Then addstring = number & " - " & "sfx_fre00" & i & " (free slot)" ElseIf i < 100 Then addstring = number & " - " & "sfx_fre0" & i & " (free slot)" Else addstring = number & " - " & "sfx_fre" & i & " (free slot)" End If cmbSeesound.AddItem addstring cmbAttacksound.AddItem addstring cmbPainsound.AddItem addstring cmbDeathsound.AddItem addstring cmbActivesound.AddItem addstring number = number + 1 Next End Sub Private Sub LoadStates() Dim myFSO As New Scripting.FileSystemObject Dim ts As TextStream Dim line As String Dim number As Integer Dim startclip As Integer, endclip As Integer Dim addstring As String Dim i As Integer Dim numfreeslots As Integer ChDir SourcePath Set ts = myFSO.OpenTextFile("info.h", ForReading, False) Do While InStr(ts.ReadLine, "Object states (don't modify this comment!)") = 0 Loop ts.SkipLine ' typedef enum ts.SkipLine ' { line = ts.ReadLine number = 0 cmbSpawnstate.Clear cmbSeestate.Clear cmbPainstate.Clear cmbMeleestate.Clear cmbMissilestate.Clear cmbDeathstate.Clear cmbXdeathstate.Clear cmbRaisestate.Clear Do While InStr(line, "S_FIRSTFREESLOT") = 0 startclip = InStr(line, "S_") If InStr(line, "S_") <> 0 Then endclip = InStr(line, ",") line = Mid(line, startclip, endclip - startclip) addstring = number & " - " & line cmbSpawnstate.AddItem addstring cmbSeestate.AddItem addstring cmbPainstate.AddItem addstring cmbMeleestate.AddItem addstring cmbMissilestate.AddItem addstring cmbDeathstate.AddItem addstring cmbXdeathstate.AddItem addstring cmbRaisestate.AddItem addstring number = number + 1 End If line = ts.ReadLine Loop ts.Close 'Populate the free slots! Set ts = myFSO.OpenTextFile("info.h", ForReading, False) line = ts.ReadLine Do While InStr(line, "#define NUMMOBJFREESLOTS") = 0 line = ts.ReadLine Loop startclip = InStr(line, "SLOTS ") + 6 numfreeslots = Val(Mid(line, startclip, Len(line) - startclip + 1)) * 6 For i = 1 To numfreeslots addstring = number & " - " & "S_FREESLOT" & i cmbSpawnstate.AddItem addstring cmbSeestate.AddItem addstring cmbPainstate.AddItem addstring cmbMeleestate.AddItem addstring cmbMissilestate.AddItem addstring cmbDeathstate.AddItem addstring cmbXdeathstate.AddItem addstring cmbRaisestate.AddItem addstring number = number + 1 Next ts.Close Set myFSO = Nothing End Sub Private Sub LoadThings() Dim myFSO As New Scripting.FileSystemObject Dim ts As TextStream Dim line As String Dim number As Integer Dim startclip As Integer, endclip As Integer Dim numfreeslots As Integer, i As Integer ChDir SourcePath Set ts = myFSO.OpenTextFile("info.h", ForReading, False) Do While InStr(ts.ReadLine, "Little flag for SOC editor (don't change this comment!)") = 0 Loop ts.SkipLine ' typedef enum ts.SkipLine ' { line = ts.ReadLine number = 0 lstThings.Clear Do While InStr(line, "MT_FIRSTFREESLOT") = 0 startclip = InStr(line, "MT_") If InStr(line, "MT_") <> 0 Then endclip = InStr(line, ",") line = Mid(line, startclip, endclip - startclip) lstThings.AddItem number & " - " & line number = number + 1 End If line = ts.ReadLine Loop ts.Close 'Populate the free slots! Set ts = myFSO.OpenTextFile("info.h", ForReading, False) line = ts.ReadLine Do While InStr(line, "#define NUMMOBJFREESLOTS") = 0 line = ts.ReadLine Loop startclip = InStr(line, "SLOTS ") + 6 numfreeslots = Val(Mid(line, startclip, Len(line) - startclip + 1)) For i = 1 To numfreeslots lstThings.AddItem number & " - " & "MT_FREESLOT" & i number = number + 1 Next ts.Close Set myFSO = Nothing End Sub Private Sub LoadObjectInfo(ThingNum As Integer) Dim myFSO As New Scripting.FileSystemObject Dim ts As TextStream Dim line As String Dim number As Integer Dim startclip As Integer, endclip As Integer ChDir SourcePath Set ts = myFSO.OpenTextFile("info.c", ForReading, False) Do While InStr(ts.ReadLine, "mobjinfo[NUMMOBJTYPES] =") = 0 Loop number = 0 Do While number <> ThingNum Do While InStr(ts.ReadLine, "}") = 0 Loop number = number + 1 Loop Do While InStr(line, "doomednum") = 0 line = ts.ReadLine Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) 'Check for *FRACUNIT values endclip = InStr(line, "*FRACUNIT") If endclip <> 0 Then line = Left(line, endclip - 1) line = Val(line) * 65536 End If 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then line = FindThingNum(line) & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then line = FindPowerNum(line) & " - " & line End If txtDoomednum.Text = line line = ts.ReadLine Do While InStr(line, "spawnstate") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) Call FindComboIndex(cmbSpawnstate, line) 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then number = FindThingNum(line) cmbSpawnstate.Text = number & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then number = FindPowerNum(line) cmbSpawnstate.Text = number & " - " & line End If line = ts.ReadLine Do While InStr(line, "spawnhealth") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) 'Check for *FRACUNIT values endclip = InStr(line, "*FRACUNIT") If endclip <> 0 Then line = Left(line, endclip - 1) line = Val(line) * 65536 End If 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then line = FindThingNum(line) & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then line = FindPowerNum(line) & " - " & line End If txtSpawnhealth.Text = line line = ts.ReadLine Do While InStr(line, "seestate") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) Call FindComboIndex(cmbSeestate, line) 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then number = FindThingNum(line) cmbSeestate.Text = number & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then number = FindPowerNum(line) cmbSeestate.Text = number & " - " & line End If line = ts.ReadLine Do While InStr(line, "seesound") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) Call FindComboIndex(cmbSeesound, line) 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then number = FindThingNum(line) cmbSeesound.Text = number & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then number = FindPowerNum(line) cmbSeesound.Text = number & " - " & line End If line = ts.ReadLine Do While InStr(line, "reactiontime") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) 'Check for *FRACUNIT values endclip = InStr(line, "*FRACUNIT") If endclip <> 0 Then line = Left(line, endclip - 1) line = Val(line) * 65536 End If 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then line = FindThingNum(line) & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then line = FindPowerNum(line) & " - " & line End If txtReactiontime.Text = line line = ts.ReadLine Do While InStr(line, "attacksound") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) Call FindComboIndex(cmbAttacksound, line) 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then number = FindThingNum(line) cmbAttacksound.Text = number & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then number = FindPowerNum(line) cmbAttacksound.Text = number & " - " & line End If line = ts.ReadLine Do While InStr(line, "painstate") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) Call FindComboIndex(cmbPainstate, line) 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then number = FindThingNum(line) cmbPainstate.Text = number & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then number = FindPowerNum(line) cmbPainstate.Text = number & " - " & line End If line = ts.ReadLine Do While InStr(line, "painchance") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) 'Check for *FRACUNIT values endclip = InStr(line, "*FRACUNIT") If endclip <> 0 Then line = Left(line, endclip - 1) line = Val(line) * 65536 End If 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then line = FindThingNum(line) & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then line = FindPowerNum(line) & " - " & line End If txtPainchance.Text = line line = ts.ReadLine Do While InStr(line, "painsound") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) Call FindComboIndex(cmbPainsound, line) 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then number = FindThingNum(line) cmbPainsound.Text = number & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then number = FindPowerNum(line) cmbPainsound.Text = number & " - " & line End If line = ts.ReadLine Do While InStr(line, "meleestate") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) Call FindComboIndex(cmbMeleestate, line) 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then number = FindThingNum(line) cmbMeleestate.Text = number & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then number = FindPowerNum(line) cmbMeleestate.Text = number & " - " & line End If line = ts.ReadLine Do While InStr(line, "missilestate") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) Call FindComboIndex(cmbMissilestate, line) 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then number = FindThingNum(line) cmbMissilestate.Text = number & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then number = FindPowerNum(line) cmbMissilestate.Text = number & " - " & line End If line = ts.ReadLine Do While InStr(line, "deathstate") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) Call FindComboIndex(cmbDeathstate, line) 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then number = FindThingNum(line) cmbDeathstate.Text = number & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then number = FindPowerNum(line) cmbDeathstate.Text = number & " - " & line End If line = ts.ReadLine Do While InStr(line, "xdeathstate") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) Call FindComboIndex(cmbXdeathstate, line) 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then number = FindThingNum(line) cmbXdeathstate.Text = number & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then number = FindPowerNum(line) cmbXdeathstate.Text = number & " - " & line End If line = ts.ReadLine Do While InStr(line, "deathsound") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) Call FindComboIndex(cmbDeathsound, line) 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then number = FindThingNum(line) cmbDeathsound.Text = number & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then number = FindPowerNum(line) cmbDeathsound.Text = number & " - " & line End If line = ts.ReadLine Do While InStr(line, "speed") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) 'Check for *FRACUNIT values endclip = InStr(line, "*FRACUNIT") If endclip <> 0 Then line = Left(line, endclip - 1) line = Val(line) * 65536 End If 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then line = FindThingNum(line) & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then line = FindPowerNum(line) & " - " & line End If txtSpeed.Text = line line = ts.ReadLine Do While InStr(line, "radius") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) 'Check for *FRACUNIT values endclip = InStr(line, "*FRACUNIT") If endclip <> 0 Then line = Left(line, endclip - 1) line = Val(line) * 65536 End If 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then line = FindThingNum(line) & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then line = FindPowerNum(line) & " - " & line End If txtRadius.Text = line line = ts.ReadLine Do While InStr(line, "height") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) 'Check for *FRACUNIT values endclip = InStr(line, "*FRACUNIT") If endclip <> 0 Then line = Left(line, endclip - 1) line = Val(line) * 65536 End If 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then line = FindThingNum(line) & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then line = FindPowerNum(line) & " - " & line End If txtHeight.Text = line line = ts.ReadLine 'Display order offset (add support, please!) line = ts.ReadLine Do While InStr(line, "mass") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) 'Check for *FRACUNIT values endclip = InStr(line, "*FRACUNIT") If endclip <> 0 Then line = Left(line, endclip - 1) line = Val(line) * 65536 End If 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then line = FindThingNum(line) & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then line = FindPowerNum(line) & " - " & line End If txtMass.Text = line line = ts.ReadLine Do While InStr(line, "damage") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) 'Check for *FRACUNIT values endclip = InStr(line, "*FRACUNIT") If endclip <> 0 Then line = Left(line, endclip - 1) line = Val(line) * 65536 End If 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then line = FindThingNum(line) & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then line = FindPowerNum(line) & " - " & line End If txtDamage.Text = line line = ts.ReadLine Do While InStr(line, "activesound") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) Call FindComboIndex(cmbActivesound, line) 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then number = FindThingNum(line) cmbActivesound.Text = number & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then number = FindPowerNum(line) cmbActivesound.Text = number & " - " & line End If line = ts.ReadLine Do While InStr(line, "flags") = 0 Loop endclip = InStr(line, ",") line = Left(line, endclip - 1) line = TrimComplete(line) ProcessFlags (line) line = ts.ReadLine Do While InStr(line, "raisestate") = 0 Loop endclip = InStr(line, "//") line = Left(line, endclip - 1) line = TrimComplete(line) Call FindComboIndex(cmbRaisestate, line) 'Check for crazy-odd MT_ usage endclip = InStr(line, "MT_") If endclip <> 0 Then number = FindThingNum(line) cmbRaisestate.Text = number & " - " & line End If 'Check for crazy-odd pw_ usage endclip = InStr(line, "pw_") If endclip <> 0 Then number = FindPowerNum(line) cmbRaisestate.Text = number & " - " & line End If ts.Close Set myFSO = Nothing End Sub Private Sub ProcessFlags(flags As String) Dim FlagList(32) As String Dim endpoint As Integer Dim ListCount As Integer Dim FlagString As String Dim myFSO As New Scripting.FileSystemObject Dim ts As TextStream Dim line As String Dim j As Integer, i As Integer Dim number As Long Dim startclip As Integer, endclip As Integer For j = 0 To 26 chkFlags(j).Value = 0 Next j FlagString = flags flags = flags & "||" ListCount = 0 Do While Len(flags) > 3 endpoint = InStr(flags, "|") FlagString = Left(flags, endpoint - 1) flags = Right(flags, Len(flags) - endpoint) FlagList(ListCount) = FlagString ListCount = ListCount + 1 Loop ChDir SourcePath For i = 0 To ListCount - 1 Set ts = myFSO.OpenTextFile("p_mobj.h", ForReading, False) line = ts.ReadLine Do While Not ts.AtEndOfStream line = ts.ReadLine If InStr(line, FlagList(i)) Then If InStr(line, "//") = 0 Or (InStr(line, "//") > InStr(line, FlagList(i))) Then Exit Do End If End If Loop If InStr(line, FlagList(i)) Then startclip = InStr(line, "0x") endclip = InStr(line, ",") line = Mid(line, startclip + 2, endclip - 1) line = "&H" & line TrimComplete (line) line = Left(line, Len(line) - 1) number = CLng(line) For j = 0 To 26 If chkFlags(j).Tag = number Then chkFlags(j).Value = 1 End If Next j End If ts.Close Next i Set myFSO = Nothing End Sub Private Sub FindComboIndex(ByRef Box As ComboBox, line As String) Dim i As Integer For i = 0 To Box.ListCount If InStr(Box.List(i), line) Then Box.ListIndex = i Exit For End If Next End Sub Private Sub lstThings_Click() lblStatusInfo.Caption = "Loading thing info..." DoEvents Call ClearForm If InStr(lstThings.List(lstThings.ListIndex), "MT_FREESLOT") = 0 Then LoadObjectInfo (lstThings.ListIndex) End If LoadSOCObjectInfo (lstThings.ListIndex) lblStatusInfo.Caption = "Idle" End Sub Private Sub LoadSOCObjectInfo(ThingNum As Integer) Dim myFSO As New Scripting.FileSystemObject Dim ts As TextStream Dim line As String Dim word As String Dim word2 As String Dim j As Integer Dim temp As Long Set ts = myFSO.OpenTextFile(SOCFile, ForReading, False) SOCLoad: Do While Not ts.AtEndOfStream line = ts.ReadLine If Left(line, 1) = "#" Then GoTo SOCLoad If Left(line, 1) = vbCrLf Then GoTo SOCLoad If Len(line) < 1 Then GoTo SOCLoad word = FirstToken(line) word2 = SecondToken(line) If UCase(word) = "THING" And Val(word2) = ThingNum Then Do While Len(line) > 0 And Not ts.AtEndOfStream line = ts.ReadLine word = UCase(FirstToken(line)) word2 = UCase(SecondTokenEqual(line)) If word = "MAPTHINGNUM" Then txtDoomednum.Text = Val(word2) ElseIf word = "SPAWNSTATE" Then cmbSpawnstate.ListIndex = Val(word2) ElseIf word = "SPAWNHEALTH" Then txtSpawnhealth.Text = Val(word2) ElseIf word = "SEESTATE" Then cmbSeestate.ListIndex = Val(word2) ElseIf word = "SEESOUND" Then cmbSeesound.ListIndex = Val(word2) ElseIf word = "REACTIONTIME" Then txtReactiontime.Text = Val(word2) ElseIf word = "ATTACKSOUND" Then cmbAttacksound.ListIndex = Val(word2) ElseIf word = "PAINSTATE" Then cmbPainstate.ListIndex = Val(word2) ElseIf word = "PAINCHANCE" Then txtPainchance.Text = Val(word2) ElseIf word = "PAINSOUND" Then cmbPainsound.ListIndex = Val(word2) ElseIf word = "MELEESTATE" Then cmbMeleestate.ListIndex = Val(word2) ElseIf word = "MISSILESTATE" Then cmbMissilestate.ListIndex = Val(word2) ElseIf word = "DEATHSTATE" Then cmbDeathstate.ListIndex = Val(word2) ElseIf word = "DEATHSOUND" Then cmbDeathsound.ListIndex = Val(word2) ElseIf word = "XDEATHSTATE" Then cmbXdeathstate.ListIndex = Val(word2) ElseIf word = "SPEED" Then txtSpeed.Text = Val(word2) ElseIf word = "RADIUS" Then txtRadius.Text = Val(word2) ElseIf word = "HEIGHT" Then txtHeight.Text = Val(word2) ElseIf word = "MASS" Then txtMass.Text = Val(word2) ElseIf word = "DAMAGE" Then txtDamage.Text = Val(word2) ElseIf word = "ACTIVESOUND" Then cmbActivesound.ListIndex = Val(word2) ElseIf word = "FLAGS" Then For j = 0 To 26 temp = Val(word2) If temp And chkFlags(j).Tag Then chkFlags(j).Value = 1 Else chkFlags(j).Value = 0 End If Next j ElseIf word = "RAISESTATE" Then cmbRaisestate.ListIndex = Val(word2) ElseIf Len(line) > 0 And Left(line, 1) <> "#" Then MsgBox "Error in SOC!" & vbCrLf & "Unknown line: " & line End If Loop Exit Do End If Loop ts.Close Set myFSO = Nothing End Sub Private Function FindThingNum(ThingName As String) As Integer Dim i As Integer Dim temp As String Dim startpoint As Integer Dim endpoint As Integer For i = 0 To lstThings.ListCount - 1 temp = lstThings.List(i) startpoint = InStr(temp, "-") + 2 endpoint = Len(temp) - startpoint + 1 temp = Mid(temp, startpoint, endpoint) If temp = ThingName Then FindThingNum = Val(lstThings.List(i)) Exit For End If Next End Function Private Function FindPowerNum(PowerName As String) As Integer Dim myFSO As New Scripting.FileSystemObject Dim ts As TextStream Dim line As String Dim number As Integer Dim startclip As Integer ChDir SourcePath Set ts = myFSO.OpenTextFile("d_player.h", ForReading, False) Do While InStr(ts.ReadLine, "Player powers. (don't edit this comment)") = 0 Loop ts.SkipLine ' typedef enum ts.SkipLine ' { line = ts.ReadLine number = 0 Do While InStr(line, "NUMPOWERS") = 0 startclip = InStr(line, PowerName) If startclip <> 0 Then FindPowerNum = number Exit Do End If number = number + 1 line = ts.ReadLine Loop ts.Close Set myFSO = Nothing End Function Private Sub WriteThing(Remove As Boolean, num As Integer) Dim myFSOSource As New Scripting.FileSystemObject Dim tsSource As TextStream Dim myFSOTarget As New Scripting.FileSystemObject Dim tsTarget As TextStream Dim line As String Dim word As String Dim word2 As String Dim flags As Long Dim thingfound As Boolean Dim i As Integer thingfound = False Set tsSource = myFSOSource.OpenTextFile(SOCFile, ForReading, False) Set tsTarget = myFSOTarget.OpenTextFile(SOCTemp, ForWriting, True) Do While Not tsSource.AtEndOfStream line = tsSource.ReadLine word = UCase(FirstToken(line)) word2 = UCase(SecondToken(line)) 'If the current thing exists in the SOC, delete it. If word = "THING" And Val(word2) = num Then thingfound = True Do While Len(TrimComplete(tsSource.ReadLine)) > 0 And Not (tsSource.AtEndOfStream) Loop Else tsTarget.WriteLine line End If Loop tsSource.Close Set myFSOSource = Nothing If Remove = False Then If line <> "" Then tsTarget.WriteLine "" tsTarget.WriteLine "Thing " & num txtDoomednum.Text = TrimComplete(txtDoomednum.Text) cmbSpawnstate.Text = TrimComplete(cmbSpawnstate.Text) txtSpawnhealth.Text = TrimComplete(txtSpawnhealth.Text) cmbSeestate.Text = TrimComplete(cmbSeestate.Text) cmbSeesound.Text = TrimComplete(cmbSeesound.Text) txtReactiontime.Text = TrimComplete(txtReactiontime.Text) cmbAttacksound.Text = TrimComplete(cmbAttacksound.Text) cmbPainstate.Text = TrimComplete(cmbPainstate.Text) txtPainchance.Text = TrimComplete(txtPainchance.Text) cmbPainsound.Text = TrimComplete(cmbPainsound.Text) cmbMeleestate.Text = TrimComplete(cmbMeleestate.Text) cmbMissilestate.Text = TrimComplete(cmbMissilestate.Text) cmbDeathstate.Text = TrimComplete(cmbDeathstate.Text) cmbDeathsound.Text = TrimComplete(cmbDeathsound.Text) cmbXdeathstate.Text = TrimComplete(cmbXdeathstate.Text) txtSpeed.Text = TrimComplete(txtSpeed.Text) txtRadius.Text = TrimComplete(txtRadius.Text) txtHeight.Text = TrimComplete(txtHeight.Text) txtMass.Text = TrimComplete(txtMass.Text) txtDamage.Text = TrimComplete(txtDamage.Text) cmbActivesound.Text = TrimComplete(cmbActivesound.Text) cmbRaisestate.Text = TrimComplete(cmbRaisestate.Text) flags = 0 ' Only 31 bits can be used, because VB is stupid. For i = 0 To 26 If chkFlags(i).Value = 1 Then flags = flags + Val(chkFlags(i).Tag) Next If txtDoomednum.Text <> "" Then tsTarget.WriteLine "MAPTHINGNUM = " & Val(txtDoomednum.Text) If cmbSpawnstate.Text <> "" Then tsTarget.WriteLine "SPAWNSTATE = " & Val(cmbSpawnstate.Text) If txtSpawnhealth.Text <> "" Then tsTarget.WriteLine "SPAWNHEALTH = " & Val(txtSpawnhealth.Text) If cmbSeestate.Text <> "" Then tsTarget.WriteLine "SEESTATE = " & Val(cmbSeestate.Text) If cmbSeesound.Text <> "" Then tsTarget.WriteLine "SEESOUND = " & Val(cmbSeesound.Text) If txtReactiontime.Text <> "" Then tsTarget.WriteLine "REACTIONTIME = " & Val(txtReactiontime.Text) If cmbAttacksound.Text <> "" Then tsTarget.WriteLine "ATTACKSOUND = " & Val(cmbAttacksound.Text) If cmbPainstate.Text <> "" Then tsTarget.WriteLine "PAINSTATE = " & Val(cmbPainstate.Text) If txtPainchance.Text <> "" Then tsTarget.WriteLine "PAINCHANCE = " & Val(txtPainchance.Text) If cmbPainsound.Text <> "" Then tsTarget.WriteLine "PAINSOUND = " & Val(cmbPainsound.Text) If cmbMeleestate.Text <> "" Then tsTarget.WriteLine "MELEESTATE = " & Val(cmbMeleestate.Text) If cmbMissilestate.Text <> "" Then tsTarget.WriteLine "MISSILESTATE = " & Val(cmbMissilestate.Text) If cmbDeathstate.Text <> "" Then tsTarget.WriteLine "DEATHSTATE = " & Val(cmbDeathstate.Text) If cmbDeathsound.Text <> "" Then tsTarget.WriteLine "DEATHSOUND = " & Val(cmbDeathsound.Text) If cmbXdeathstate.Text <> "" Then tsTarget.WriteLine "XDEATHSTATE = " & Val(cmbXdeathstate.Text) If txtSpeed.Text <> "" Then tsTarget.WriteLine "SPEED = " & Val(txtSpeed.Text) If txtRadius.Text <> "" Then tsTarget.WriteLine "RADIUS = " & Val(txtRadius.Text) If txtHeight.Text <> "" Then tsTarget.WriteLine "HEIGHT = " & Val(txtHeight.Text) If txtMass.Text <> "" Then tsTarget.WriteLine "MASS = " & Val(txtMass.Text) If txtDamage.Text <> "" Then tsTarget.WriteLine "DAMAGE = " & Val(txtDamage.Text) If cmbActivesound.Text <> "" Then tsTarget.WriteLine "ACTIVESOUND = " & Val(cmbActivesound.Text) If cmbRaisestate.Text <> "" Then tsTarget.WriteLine "RAISESTATE = " & Val(cmbRaisestate.Text) tsTarget.WriteLine "FLAGS = " & flags End If tsTarget.Close Set myFSOTarget = Nothing FileCopy SOCTemp, SOCFile Kill SOCTemp If Remove = True Then If thingfound = True Then MsgBox "Thing removed from SOC." Else MsgBox "Thing not found in SOC." End If Else MsgBox "Thing Saved." End If End Sub