I noticed the ParameterValue field in ArticulationParameters is defined as a double. Although the DIS spec has the ParameterValue field taking up 64 bits, it's only the most significant 32 bits that are used, and the least significant are left as zeros. This means that the ParameterValue field should be defined as a float, and then padding needs to be added after the value is written.
I'm using the C# code, but I think the Java code has this problem as well (the Javadoc has it listed as a double), and potentially the C++ code as well, although I have not checked. It was a pretty easy fix, I can send in the whole file if you like, but here are the most relevant bits of code from ArticulationParameters.cs:
protected float _parameterValue;
public void setParameterValue(float pParameterValue)
{ _parameterValue = pParameterValue;
}
[XmlElement(Type = typeof(float), ElementName = "parameterValue")]
public float ParameterValue
{
get
{
return _parameterValue;
}
set
{
_parameterValue = value;
}
}
///
public void unmarshal(DataInputStream dis)
{
try
{
_parameterTypeDesignator = dis.readByte();
_changeIndicator = dis.readByte();
_partAttachedTo = dis.readUshort();
_parameterType = dis.readUint();
_parameterValue = dis.readFloat();
dis.readFloat(); //eat the 4-byte padding
} // end try
catch(Exception e)
{
Trace.WriteLine(e);
Trace.Flush();
}
} // end of unmarshal method