ObjectUpdate

From Second Life Wiki
Jump to navigation Jump to search

Message Layout

{
	ObjectUpdate High 12 Trusted Zerocoded
	{
		RegionData			Single
		{	RegionHandle	U64	}
		{   TimeDilation	U16   }
	}
	{
		ObjectData			Variable
		{	ID				U32	}
		{	State			U8	}

		{	FullID			LLUUID	}
		{	CRC				U32	}
		{	PCode			U8	}
		{	Material		U8	}
		{	ClickAction		U8	}
		{	Scale			LLVector3	}
		{	ObjectData		Variable	1	}

		{	ParentID		U32	}
		{	UpdateFlags		U32	}

		{	PathCurve		U8	}
		{	ProfileCurve	U8	}
		{	PathBegin		U16	}
		{	PathEnd			U16	}
		{	PathScaleX		U8	}
		{	PathScaleY		U8	}
		{	PathShearX		U8	}
		{	PathShearY		U8	}
		{	PathTwist		S8	}
		{	PathTwistBegin		S8	}
		{ 	PathRadiusOffset 	S8	}
		{ 	PathTaperX		S8	}
		{	PathTaperY		S8	}
		{	PathRevolutions		U8	}
		{	PathSkew		S8	}
		{	ProfileBegin	U16	}
		{	ProfileEnd		U16	}
		{	ProfileHollow	U16	}

		{	TextureEntry	Variable	2	}
		{	TextureAnim		Variable	1	}

		{	NameValue		Variable	2	}
		{	Data			Variable	2	}
		{	Text			Variable	1	}
		{	TextColor		Fixed		4	}
		{	MediaURL		Variable	1	}

		{	PSBlock			Variable	1	}
		
		{	ExtraParams		Variable	1	}
		
		{	Sound           LLUUID  }
		{	OwnerID			LLUUID	}
		{	Gain            F32		}
		{	Flags           U8		}
		{	Radius          F32		}

		{	JointType 			U8		}
		{	JointPivot			LLVector3	}
		{	JointAxisOrAnchor 	LLVector3	}
	}
}

Usage and Notes

RegionData

RegionHandle is the global coordinates of the simulator compressed and encoded into a single U64, with each coordinate taking up 32 bits. It can be visualized as XXXX|YYYY where each character is 8bits.

TimeDilation is used to update the regions time dilation. It is cast to a F32 and then divided by 65535. for actual value.

ObjectData

  • FullID is the uuid of the task.
  • ID is the region local id of the task, these are used for most operations in place of the tasks uuid.
  • State is a legacy field, unused in everything but grass. With grass it is used to determine species of grass.
  • PCode is the type of object represented by this task. Possibles include avatars, grass, trees, volumes.
  • Material represents the physical material that makes up the task. Possibles include wood, glass, flesh, rubber.
  • ClickAction is the default action to take when the task is clicked on in the viewer. Possibles include pay, sit, touch, open.
  • ObjectData contains a variable precision set of values for the object. They can include position, velocity, rotation.
  • Scale contains the LLVector3 size of the object or task. Is ignored for a few PCodes.
  • ParentID contains localid of any task that this task is a child of, used for the creation of object or attachments. Should be 0 if not present.
  • UpdateFlags is used to give various pieces of information about the object to the viewer. Stores things like empty inventory, scripted.
  • Sound is the asset uuid of any attached looped sound to play.
  • OwnerID is the uuid of the owner of the prim. Is null if there is no attached looped sound or a particle source attached to the prim.
  • Flags used to store flags related to attached sounds.
  • Gain is the gain of the attached looped sound to apply.
  • Radius is the radius from the center of the prim that the attached looped sound should be audible from.
  • JointType is the type of joint associated with the task. Should be unused. Legacy.
  • JointPivot is the offset from the center of the prim used to pivot around. Should be unused. Legacy.
  • JointAxisOrAnchor is the offset or axis used for certain joint types. Should be unused. Legacy.
  • Text is the data related to task llSetText.
  • TextColor is packed 4 byte RGBA representation of a color. Alpha value is inverted.
  • MediaURL is both the the url for any media to be attached to the task. Is always a webpage type.
  • NameValue is a string that contains any name value pairs specific to the task. Most used for avatar names.
  • TextureEntry is a full property list for each tasks face, includes textures, colors. Face
  • TextureAnim is the properties to set up texture animations of the face of the task. llSetTextureAnim
  • PSBlock is the attached particle details for the task. llParticleSystem
  • ExtraParams is data related to flexible primitives, sculpt data, or attached light data.
  • Data is generic appended data.

Generic Object Properties

This section explains details about properties that are unpacked and parsed regardless of PCode. These apply to most PCode types.

CRC is copied directly from each message and is not checked, appears to be used for object cache only.

Changing material type sets the task as having moved, undamped.

If generic data exists, it is cleared and replaced when an update is received. (Data field.)

ObjectData Format

The contents of ObjectData are dependent on the size of the field.

Size of 76 bytes
  • Foot collision plane. LLVector4.

Angular velocity is ignored and set to 0. Falls through to 60 bytes parser.

Size of 60 bytes

32 bit precision update.

  • Position. LLVector3.
  • Velocity. LLVector3.
  • Acceleration. LLVector3.
  • Rotation. LLVector3.
  • Angular velocity. LLVector3.
Size of 48 bytes
  • Foot collision plane. LLVector4

Falls through to 32 bytes parser.

Size of 32 bytes

16 bit precision update.

  • Position. U16Vec3.
  • Velocity. U16Vec3.
  • Acceleration. U16Vec3.
  • Rotation. U16Rot(4xU16).
  • Angular velocity. LLVector3.
Size of 16

8 bit precision update.

  • Position. U8Vec3.
  • Velocity. U8Vec3.
  • Acceleration. U8Vec3.
  • Rotation. U8Rot(4xU8).
  • Angular velocity. U8Vec3

Attached Sounds

Attached sounds use the following fields within the ObjectUpdate packet.

  • Flags
  • Gain
  • Radius
  • Sound
  • OwnerID

Attached sounds volume is only adjusted when an object update it received for that specific task. Is not affected by adjusting SFX volume or muting SFX. (BUG?)

OwnerID is used to allow muting of attached sounds and particles only.