Cables on Models

From Valve Developer Community
Jump to: navigation, search

Cables can be placed onto models simply by placing the correct code into the QC file. The cables work in the same fashion as the ones created using the move_rope and keyframe_rope entities, only that they're more limited in that they can't be broken or made solid. A good example of this is the model of Dog from HL2.

Note.pngNote:If used on props, the prop entity must be set as prop_dynamic for the cables to be rendered.
Warning.pngWarning:Does not work in Left 4 Dead 2 Left 4 Dead 2
PlacementTip.pngWorkaround: Add move_rope and keyframe_rope entities like any other rope. Then use a logic_auto to parent each end to the model via SetParentAttachment.

Adding cables to a model

Cables are added to a model first by defining $attachment points.

$attachment "point1" "staticprop" 0.00 0.00 9.50 rotate 0.00 0.00 0.00
$attachment "point2" "staticprop" -128.00 0.00 9.50 rotate 0.00 0.00 0.00
$attachment "point3" "staticprop" 0.00 0.00 25.50 rotate 0.00 0.00 0.00

The code to create the cables must be placed within the $keyvalues block in another block titled Cables. Every time you want to create a single cable you must create a block titled "Cable"

StartAttachment <attachment name>
The $attachment point the cable starts from.
EndAttachment <attachment name>
The $attachment point the cable ends to.
Width <float>
Defines the width of the cable.
Material <VMT file location>
The VMT (material) to use. Cable materials are located in "materials/cables".
NumSegments <int>
The amount of segments in the cable. More segments make the cable more 'smooth'. Should be increased if the cable bends a lot.
Length <int>
The length of cable between the two attachment points. If the length is shorter than the distance between the two points then the cable will remain permanently straight.
Note.pngNote:Finding the optimal length between two points can be a frustrating task. Cables can go from super tight to extremely slack within a difference of just 10 units.

Example

In this example, two cables are create between the three attachment points.

$keyvalues
{
    Cables
    {
        "Cable"
        {
            "StartAttachment" "point1"
            "EndAttachment" "point2"
            "Width" "0.6"
            "Material" "cable\cable"
            "NumSegments" "4"
            "Length" "200"
        }
        "Cable"
        {
            "StartAttachment" "point2"
            "EndAttachment" "point3"
            "Width" "0.6"
            "Material" "cable\cable"
            "NumSegments" "6"
            "Length" "250"
        }
    }
}