SRB2/tools/SOCEdit/Things.frm

1896 lines
60 KiB
Text
Raw Permalink Normal View History

2014-03-15 16:59:03 +00:00
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