This article relates to the game "Dota 2". Click here for more information.
This article relates to the SDK/Workshop Tools for "Dota 2 Workshop Tools". Click here for more information.
This article's documentation is for Source 2. Click here for more information.

Attachments

From Valve Developer Community
Jump to navigation Jump to search
English (en)Translate (Translate)


Attachments are parented to a joints, and are defined by an offset and a rotation. In game they can be used for particle emission, and item attachment points among other uses. Attachments are stored in an attachment list, and can have multiple parents (influences).

Display

  • To toggle attachment display go Display > Attachments.
  • To toggle attachment name display go to Display >Attachment Names.

Create

  • Right click on a joint item in the outliner, and select Add Attachment.
  • Use the Model > Attachments menu items.

Edit

  • When an attachment is selected via the viewport or an outliner item the gizmo becomes available. Use the gizmo to translate and rotate the attachment.
  • When selected the editable properties of an attachment are accessible via the property editor.

Data Structures

The vmdl attachment data looks like this:

CVattachmentListReference[] m_pAttachmentLists = 
[
	CVattachmentListReference
	{
		CVattachmentList* m_pObject = &CVattachmentList_0
		string m_sFileName = ""
	}
]

m_pAttachmentLists

A list of CVattachmentListReference elements

CVattachmentListReference

A reference to an internal or external CVattachmentList:

Attribute Friendly Name Description Type Default Value
m_pObject pointer to the internal CVattachmentList CVattachmentList*
m_sFileName content relative path to the external CVattachmentList string

A CVattachmentList set list looks like this:

CVattachmentList CVattachmentList_0
{
	string m_name = ""
	CVattachment[] m_attachments = 
	[
		CVattachment
		{
			string m_name = "test"
			CVattachmentInfluence[] m_influences = 
			[
				CVattachmentInfluence
				{
					string m_influenceName = "spine1"
					float(3) m_vTranslationOffset = ( 0.000000, 0.000000, 0.000000 )
					float(3) m_vRotationOffset = ( 0.000000, 0.000000, 0.000000 )
					float m_flWeight = 1.000000
					bool m_bRoot = false
				}
			]
		}
	]
}

CVattachmentList

Attribute Friendly Name Description Type Default Value
m_name Name The name of the attachment list string
m_attachments Attachments List of CVattachment elements CVattachment[]
Note.pngNote:When it is made external, a CVattachmentList is saved as a ".attach" file.

CVattachment

The data description of the attachment

Attribute Friendly Name Description Type Default Value
m_name Name The name of the attachment list string
m_influences Influences List of CVattachmentInfluence elements CVattachmentInfluence[]

CVattachmentInfluence

The data description of the influence

Attribute Friendly Name Description Type Default Value
m_influenceName Influence Name The name of the influence string
m_vTranslationOffset Translation Translation offset from the influnce float(3) ( 0.000000, 0.000000, 0.000000 )
m_vRotationOffset Rotation Rotation offset from the influnce float(3) ( 0.000000, 0.000000, 0.000000 )
m_flWeight Weight Weight of the influence float 1.0
m_bRoot Is Root Is the root of the model bool true
Note.pngNote:Changing the influence weight only matters if there are more than one influence.
Tip.pngTip:Use "Is Root" when adding an attachment to a model that has not joints.