VCD
Valve Choreography Data (VCD) is a proprietary file format used to store choreography data.
VCDs are authored in Faceposer and played in your map via the logic_choreographed_scene entity. The filename should contain only one period before the file extension; otherwise, the scene file cannot be found.
Format
VCD uses a plain-text format that superficially resembles a simplified version of JSON and can be edited with any text editor. Each file contains a nested list of objects that each have properties of their own. Properties can be text, numbers, or other objects and are denoted using a simple system of key-value pairs without separators.
The basic notation is as follows:
// comment object_type (parameters) "name" { property "value" property value object_type "name" { property 1 } }
Objects
Each object is denoted using the syntax type parameters "name"
. Names and paremeters may be optional depending on object type; the most simple declaration possible consists solely of an object type, such as with scalesettings
. Common objects are actors, channels, and events.
Object types
An incomplete list of object types follows. This list is incomplete and based on ongoing examination of the format. You can help expand it.
Type | Assumed function | Known parameters | Example |
---|---|---|---|
actor | A single actor, with channels and events as children | name | actor "Alyx" { ... }
|
channel | A single channel, as child of an actor object, containing events | name | channel "look at" { ... }
|
event | A single event on the Faceposer timeline. | event type (i.e. "lookat", name | event lookat "look_player" { ... }
|
event_ramp | Unknown, possibly for blending animations | none known | |
scalesettings | Unknown, possibly for saving Faceposer UI preferences | none known |
scalesettings { "CChoreoView" "25" "ExpressionTool" "100" "GestureTool" "100" "RampTool" "52" "SceneRampTool" "100" } |
Properties
Properties of objects are denoted using their name (key) without parentheses, followed by a one or more values separated by spaces. Text is enclosed in double quotes (" "), numbers are not. Properties may be other objects, each with their own properties. The amount and type of available or required properties depend on the object type.
A few properties are common across many object types, such as time (float) (float)
and param (string)
, indicating time codes and parameters that are to be passed to certain events. One such example is the lookat
type event, which takes two time values for its position and duration or end point on the timeline and one param value to determine the entity an actor should look at:
// from scenes/eli_lab/al_cmon.vcd ... event lookat "look_player" { time 0.053333 2.553333 param "!player" ... }
Comments
Single-line comments may be created by prefacing a line with two slashes, for example:
// this is a comment channel "look_at" { ... }