PUP Files General
PUP files (or Puppet files) denote which KEY file is to be executed depending on an objects current state. A PUP file consists of two parts: the MODES and the JOINTS (JOINTS is optional).
Modes Modes are used to discriminate between which KEYs are used for each action. Modes can have any number of submodes that more specifically define the state of the object. Some of the more common submodes are:
stand walk run walkback strafeleft straferight death death2 hit jump rising drop land fall choke leap turnleft turnright fire fire2 block block2
Each submode is made up of the following parts:
submode This is the name of the submode keyframe Which KEY file is to be used for this state flags 32-bit value specifying the properties of this submode lopri Low-priority of this submode (0-5) hipri High-priority of this submode (0-5)
Modes can inherit submodes from any previously defined mode. This is achievable through the basedon keyword in the mode declaration.
For example: Mode=2, BasedOn=0
Mode 2 inherits all of the submodes of Mode 0. From here, Mode 2 can either override a previously defined submode by using the same name, or it can define new submodes by using different names.
Inheritance is used most commonly to differ between different styles of movement based on the physical attributes of the object or its environment (ie carrying the lightsaber, or swimming).
JOINTS This section is used for 3DOs that have several nodes, i.e. meshes that move separately. For example, different body parts of a stormtrooper. Joints are also used to create effects such as the Lambda Shuttle opening its wings when it takes off. It is ommitted from other objects, such as lifts and moving platforms. It is used to associate primary "sections" with the Hierarchy Nodes of the 3DO.
For humanoid objects there are 7 of these sections (there are less for simpler creatures like the Octopus: 0: head 1: neck 2: torso 3: primary weapon fire 4: secondard weapon fire 5: primary weapon aiming joint 6: secondary weapon aiming joint
Assignment is achieved through the use of the '=' character. For instance:
Means that the joint 1 of the object is contained in node 16 of the 3DO.
This section is begun with the joints keyword, and is ended with the end keyword.