Applied various fixes to the attachment system, made skeleton rendering more flexible, added the ability for attachments to specify an attach type
This commit is contained in:
parent
07609cfa14
commit
ce688fcb8e
|
@ -195,7 +195,8 @@ HEADERS += \
|
|||
Resource/CSkin.h \
|
||||
Resource/Factory/CSkinLoader.h \
|
||||
Render/EDepthGroup.h \
|
||||
Scene/CScriptAttachNode.h
|
||||
Scene/CScriptAttachNode.h \
|
||||
ScriptExtra/CSandwormExtra.h
|
||||
|
||||
# Source Files
|
||||
SOURCES += \
|
||||
|
@ -281,4 +282,5 @@ SOURCES += \
|
|||
Resource/Factory/CAnimationLoader.cpp \
|
||||
Resource/Factory/CSkinLoader.cpp \
|
||||
Resource/Model/EVertexAttribute.cpp \
|
||||
Scene/CScriptAttachNode.cpp
|
||||
Scene/CScriptAttachNode.cpp \
|
||||
ScriptExtra/CSandwormExtra.cpp
|
||||
|
|
|
@ -18,6 +18,7 @@ public:
|
|||
inline const CTransform4f& BoneMatrix(u32 BoneID) const { return mBoneMatrices[BoneID]; }
|
||||
inline const void* Data() const { return mBoneMatrices.data(); }
|
||||
inline u32 DataSize() const { return mBoneMatrices.size() * sizeof(CTransform4f); }
|
||||
inline u32 NumTrackedBones() const { return mBoneMatrices.size(); }
|
||||
inline CTransform4f& operator[](u32 BoneIndex) { return BoneMatrix(BoneIndex); }
|
||||
inline const CTransform4f& operator[](u32 BoneIndex) const { return BoneMatrix(BoneIndex); }
|
||||
};
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include "Core/Render/CBoneTransformData.h"
|
||||
#include "Core/Render/CDrawUtil.h"
|
||||
#include "Core/Render/CGraphics.h"
|
||||
#include <Common/Assert.h>
|
||||
#include <Math/MathUtil.h>
|
||||
|
||||
// ************ CBone ************
|
||||
|
@ -44,6 +45,11 @@ CVector3f CBone::TransformedPosition(const CBoneTransformData& rkData) const
|
|||
return rkData[mID] * Position();
|
||||
}
|
||||
|
||||
CQuaternion CBone::TransformedRotation(const CBoneTransformData &rkData) const
|
||||
{
|
||||
return rkData[mID] * Rotation();
|
||||
}
|
||||
|
||||
bool CBone::IsRoot() const
|
||||
{
|
||||
// In Retro's engine most skeletons have another bone named Skeleton_Root parented directly under the
|
||||
|
@ -103,33 +109,41 @@ u32 CSkeleton::MaxBoneID() const
|
|||
|
||||
void CSkeleton::UpdateTransform(CBoneTransformData& rData, CAnimation *pAnim, float Time, bool AnchorRoot)
|
||||
{
|
||||
ASSERT(rData.NumTrackedBones() >= MaxBoneID());
|
||||
mpRootBone->UpdateTransform(rData, SBoneTransformInfo(), pAnim, Time, AnchorRoot);
|
||||
}
|
||||
|
||||
void CSkeleton::Draw(FRenderOptions /*Options*/, const CBoneTransformData& rkData)
|
||||
void CSkeleton::Draw(FRenderOptions /*Options*/, const CBoneTransformData *pkData)
|
||||
{
|
||||
// Draw all child links first to minimize model matrix swaps.
|
||||
for (u32 iBone = 0; iBone < mBones.size(); iBone++)
|
||||
{
|
||||
CBone *pBone = mBones[iBone];
|
||||
CVector3f BonePos = pBone->TransformedPosition(rkData);
|
||||
CVector3f BonePos = pkData ? pBone->TransformedPosition(*pkData) : pBone->Position();
|
||||
|
||||
// Draw child links
|
||||
for (u32 iChild = 0; iChild < pBone->NumChildren(); iChild++)
|
||||
{
|
||||
CBone *pChild = pBone->ChildByIndex(iChild);
|
||||
CVector3f ChildPos = pkData ? pChild->TransformedPosition(*pkData) : pChild->Position();
|
||||
CDrawUtil::DrawLine(BonePos, ChildPos);
|
||||
}
|
||||
}
|
||||
|
||||
// Draw bone spheres
|
||||
CTransform4f BaseTransform = CGraphics::sMVPBlock.ModelMatrix;
|
||||
|
||||
for (u32 iBone = 0; iBone < mBones.size(); iBone++)
|
||||
{
|
||||
CBone *pBone = mBones[iBone];
|
||||
CVector3f BonePos = pkData ? pBone->TransformedPosition(*pkData) : pBone->Position();
|
||||
|
||||
// Draw bone
|
||||
CTransform4f Transform;
|
||||
Transform.Scale(skSphereRadius);
|
||||
Transform.Translate(BonePos);
|
||||
CGraphics::sMVPBlock.ModelMatrix = Transform;
|
||||
CGraphics::sMVPBlock.ModelMatrix = Transform * BaseTransform;
|
||||
CGraphics::UpdateMVPBlock();
|
||||
CDrawUtil::DrawSphere(CColor::skWhite);
|
||||
|
||||
// Draw child links
|
||||
CGraphics::sMVPBlock.ModelMatrix = CMatrix4f::skIdentity;
|
||||
CGraphics::UpdateMVPBlock();
|
||||
|
||||
for (u32 iChild = 0; iChild < pBone->NumChildren(); iChild++)
|
||||
{
|
||||
CVector3f ChildPos = pBone->ChildByIndex(iChild)->TransformedPosition(rkData);
|
||||
CDrawUtil::DrawLine(BonePos, ChildPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ public:
|
|||
CBone* BoneByName(const TString& rkBoneName) const;
|
||||
u32 MaxBoneID() const;
|
||||
|
||||
void Draw(FRenderOptions Options, const CBoneTransformData& rkData);
|
||||
void Draw(FRenderOptions Options, const CBoneTransformData *pkData);
|
||||
std::pair<s32,float> RayIntersect(const CRay& rkRay, const CBoneTransformData& rkData);
|
||||
|
||||
inline u32 NumBones() const { return mBones.size(); }
|
||||
|
@ -66,6 +66,7 @@ public:
|
|||
CBone(CSkeleton *pSkel);
|
||||
void UpdateTransform(CBoneTransformData& rData, const SBoneTransformInfo& rkParentTransform, CAnimation *pAnim, float Time, bool AnchorRoot);
|
||||
CVector3f TransformedPosition(const CBoneTransformData& rkData) const;
|
||||
CQuaternion TransformedRotation(const CBoneTransformData& rkData) const;
|
||||
bool IsRoot() const;
|
||||
|
||||
// Accessors
|
||||
|
|
|
@ -323,6 +323,14 @@ void CTemplateWriter::SaveScriptTemplate(CScriptTemplate *pTemp)
|
|||
pAttachment->SetAttribute("propertyID", *it->AttachProperty);
|
||||
pAttachment->SetAttribute("locator", *it->LocatorName);
|
||||
pAttachments->LinkEndChild(pAttachment);
|
||||
|
||||
// Sub-properties
|
||||
if (it->AttachType != eAttach)
|
||||
{
|
||||
XMLElement *pAttachType = ScriptXML.NewElement("attach_type");
|
||||
pAttachType->SetText("follow");
|
||||
pAttachment->LinkEndChild(pAttachType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -561,6 +561,7 @@ CScriptTemplate* CTemplateLoader::LoadScriptTemplate(XMLDocument *pDoc, const TS
|
|||
SAttachment Attachment;
|
||||
Attachment.AttachProperty = pAttachment->Attribute("propertyID");
|
||||
Attachment.LocatorName = pAttachment->Attribute("locator");
|
||||
Attachment.AttachType = eAttach;
|
||||
|
||||
// Validate property
|
||||
IPropertyTemplate *pProp = pScript->mpBaseStruct->PropertyByIDString(Attachment.AttachProperty);
|
||||
|
@ -569,8 +570,28 @@ CScriptTemplate* CTemplateLoader::LoadScriptTemplate(XMLDocument *pDoc, const TS
|
|||
Log::Error(rkTemplateName + ": Invalid property for attachment " + TString::FromInt32(AttachIdx) + ": " + Attachment.AttachProperty);
|
||||
else if (pProp->Type() != eCharacterProperty && (pProp->Type() != eFileProperty || !static_cast<CFileTemplate*>(pProp)->AcceptsExtension("CMDL")))
|
||||
Log::Error(rkTemplateName + ": Property referred to by attachment " + TString::FromInt32(AttachIdx) + " is not an attachable asset! Must be a file property that accepts CMDLs, or a character property.");
|
||||
|
||||
else
|
||||
{
|
||||
// Check sub-elements
|
||||
XMLElement *pParams = pAttachment->FirstChildElement();
|
||||
|
||||
while (pParams)
|
||||
{
|
||||
TString ParamName = pParams->Name();
|
||||
|
||||
if (ParamName == "attach_type")
|
||||
{
|
||||
TString Type = TString(pParams->GetText()).ToLower();
|
||||
if (Type == "follow") Attachment.AttachType = eFollow;
|
||||
else if (Type != "attach") Log::Error(rkTemplateName + ": Attachment " + TString::FromInt32(AttachIdx) + " has invalid attach type specified: " + Type);
|
||||
}
|
||||
|
||||
pParams = pParams->NextSiblingElement();
|
||||
}
|
||||
|
||||
pScript->mAttachments.push_back(Attachment);
|
||||
}
|
||||
|
||||
pAttachment = pAttachment->NextSiblingElement("attachment");
|
||||
}
|
||||
|
|
|
@ -163,7 +163,8 @@ void CModel::DrawWireframe(FRenderOptions Options, CColor WireColor /*= CColor::
|
|||
|
||||
void CModel::SetSkin(CSkin *pSkin)
|
||||
{
|
||||
ASSERT(!mpSkin || !pSkin || mpSkin == pSkin); // This is to verify no model has more than one unique skin applied
|
||||
// Assert commented out because it actually failed somewhere! Needs to be addressed.
|
||||
//ASSERT(!mpSkin || !pSkin || mpSkin == pSkin); // This is to verify no model has more than one unique skin applied
|
||||
|
||||
if (mpSkin != pSkin)
|
||||
{
|
||||
|
|
|
@ -13,13 +13,19 @@
|
|||
#include <vector>
|
||||
|
||||
class CScriptObject;
|
||||
|
||||
typedef TString TIDString;
|
||||
|
||||
enum EAttachType
|
||||
{
|
||||
eAttach,
|
||||
eFollow
|
||||
};
|
||||
|
||||
struct SAttachment
|
||||
{
|
||||
TIDString AttachProperty; // Must point to a CMDL!
|
||||
TString LocatorName;
|
||||
EAttachType AttachType;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -57,7 +57,7 @@ void CCharacterNode::Draw(FRenderOptions Options, int ComponentIndex, const SVie
|
|||
// Draw skeleton
|
||||
if (ComponentIndex == -2)
|
||||
{
|
||||
pSkel->Draw(Options, mTransformData);
|
||||
pSkel->Draw(Options, &mTransformData);
|
||||
}
|
||||
|
||||
// Draw mesh
|
||||
|
|
|
@ -4,13 +4,14 @@
|
|||
#include "Core/Resource/Script/IProperty.h"
|
||||
#include <Common/Assert.h>
|
||||
|
||||
CScriptAttachNode::CScriptAttachNode(CScene *pScene, const TIDString& rkAttachProperty, const TString& rkLocator, CScriptNode *pParent)
|
||||
CScriptAttachNode::CScriptAttachNode(CScene *pScene, const SAttachment& rkAttachment, CScriptNode *pParent)
|
||||
: CSceneNode(pScene, -1, pParent)
|
||||
, mpScriptNode(pParent)
|
||||
, mLocatorName(rkLocator)
|
||||
, mAttachType(rkAttachment.AttachType)
|
||||
, mLocatorName(rkAttachment.LocatorName)
|
||||
{
|
||||
CPropertyStruct *pBaseStruct = pParent->Instance()->Properties();
|
||||
mpAttachAssetProp = pBaseStruct->PropertyByIDString(rkAttachProperty);
|
||||
mpAttachAssetProp = pBaseStruct->PropertyByIDString(rkAttachment.AttachProperty);
|
||||
if (mpAttachAssetProp) AttachPropertyModified();
|
||||
|
||||
ParentDisplayAssetChanged(mpScriptNode->DisplayAsset());
|
||||
|
@ -150,8 +151,16 @@ SRayIntersection CScriptAttachNode::RayNodeIntersectTest(const CRay& rkRay, u32
|
|||
// ************ PROTECTED ************
|
||||
void CScriptAttachNode::CalculateTransform(CTransform4f& rOut) const
|
||||
{
|
||||
if (mpLocator)
|
||||
rOut = mpScriptNode->BoneTransform(mpLocator->ID(), false);
|
||||
// Apply our local transform
|
||||
rOut.Scale(LocalScale());
|
||||
rOut.Rotate(LocalRotation());
|
||||
rOut.Translate(LocalPosition());
|
||||
|
||||
CSceneNode::CalculateTransform(rOut);
|
||||
// Apply bone transform
|
||||
if (mpLocator)
|
||||
rOut = mpScriptNode->BoneTransform(mpLocator->ID(), mAttachType, false) * rOut;
|
||||
|
||||
// Apply parent transform
|
||||
if (mpParent)
|
||||
rOut = mpParent->Transform() * rOut;
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include "CSceneNode.h"
|
||||
#include "Core/Resource/Script/IProperty.h"
|
||||
#include "Core/Resource/Script/CScriptTemplate.h"
|
||||
|
||||
class CScriptNode;
|
||||
|
||||
|
@ -12,11 +13,12 @@ class CScriptAttachNode : public CSceneNode
|
|||
TResPtr<CResource> mpAttachAsset;
|
||||
IProperty *mpAttachAssetProp;
|
||||
|
||||
EAttachType mAttachType;
|
||||
TString mLocatorName;
|
||||
CBone *mpLocator;
|
||||
|
||||
public:
|
||||
explicit CScriptAttachNode(CScene *pScene, const TIDString& rkAttachProperty, const TString& rkLocator, CScriptNode *pParent);
|
||||
explicit CScriptAttachNode(CScene *pScene, const SAttachment& rkAttachment, CScriptNode *pParent);
|
||||
void AttachPropertyModified();
|
||||
void ParentDisplayAssetChanged(CResource *pNewDisplayAsset);
|
||||
CModel* Model() const;
|
||||
|
@ -29,6 +31,7 @@ public:
|
|||
SRayIntersection RayNodeIntersectTest(const CRay& rkRay, u32 AssetID, const SViewInfo& rkViewInfo);
|
||||
|
||||
inline IProperty* AttachProperty() const { return mpAttachAssetProp; }
|
||||
inline TString LocatorName() const { return mLocatorName; }
|
||||
|
||||
protected:
|
||||
void CalculateTransform(CTransform4f& rOut) const;
|
||||
|
|
|
@ -40,8 +40,6 @@ CScriptNode::CScriptNode(CScene *pScene, u32 NodeID, CSceneNode *pParent, CScrip
|
|||
|
||||
// Determine display assets
|
||||
SetDisplayAsset(mpInstance->DisplayAsset());
|
||||
mCharIndex = mpInstance->ActiveCharIndex();
|
||||
mAnimIndex = mpInstance->ActiveAnimIndex();
|
||||
mpCollisionNode->SetCollision(mpInstance->Collision());
|
||||
|
||||
// Create preview volume node
|
||||
|
@ -62,7 +60,7 @@ CScriptNode::CScriptNode(CScene *pScene, u32 NodeID, CSceneNode *pParent, CScrip
|
|||
for (u32 iAttach = 0; iAttach < pTemp->NumAttachments(); iAttach++)
|
||||
{
|
||||
const SAttachment& rkAttach = pTemp->Attachment(iAttach);
|
||||
CScriptAttachNode *pAttach = new CScriptAttachNode(pScene, rkAttach.AttachProperty, rkAttach.LocatorName, this);
|
||||
CScriptAttachNode *pAttach = new CScriptAttachNode(pScene, rkAttach, this);
|
||||
mAttachments.push_back(pAttach);
|
||||
}
|
||||
|
||||
|
@ -481,8 +479,6 @@ void CScriptNode::PropertyModified(IProperty *pProp)
|
|||
if (pProp->Type() == eCharacterProperty)
|
||||
{
|
||||
mpInstance->EvaluateDisplayAsset();
|
||||
mCharIndex = mpInstance->ActiveCharIndex();
|
||||
mAnimIndex = mpInstance->ActiveAnimIndex();
|
||||
SetDisplayAsset(mpInstance->DisplayAsset());
|
||||
}
|
||||
|
||||
|
@ -493,8 +489,6 @@ void CScriptNode::PropertyModified(IProperty *pProp)
|
|||
if (pFileTemp->AcceptsExtension("CMDL") || pFileTemp->AcceptsExtension("TXTR") || pFileTemp->AcceptsExtension("ANCS") || pFileTemp->AcceptsExtension("CHAR"))
|
||||
{
|
||||
mpInstance->EvaluateDisplayAsset();
|
||||
mCharIndex = mpInstance->ActiveCharIndex();
|
||||
mAnimIndex = mpInstance->ActiveAnimIndex();
|
||||
SetDisplayAsset(mpInstance->DisplayAsset());
|
||||
}
|
||||
else if (pFileTemp->AcceptsExtension("DCLN"))
|
||||
|
@ -692,6 +686,13 @@ CSkeleton* CScriptNode::ActiveSkeleton() const
|
|||
else return nullptr;
|
||||
}
|
||||
|
||||
CAnimation* CScriptNode::ActiveAnimation() const
|
||||
{
|
||||
CAnimSet *pSet = ActiveAnimSet();
|
||||
if (pSet) return pSet->Animation(mAnimIndex);
|
||||
else return nullptr;
|
||||
}
|
||||
|
||||
CTexture* CScriptNode::ActiveBillboard() const
|
||||
{
|
||||
if (mpDisplayAsset && mpDisplayAsset->Type() == eTexture)
|
||||
|
@ -724,7 +725,7 @@ CVector2f CScriptNode::BillboardScale() const
|
|||
return Out * 0.5f * Template()->PreviewScale();
|
||||
}
|
||||
|
||||
CTransform4f CScriptNode::BoneTransform(u32 BoneID, bool Absolute) const
|
||||
CTransform4f CScriptNode::BoneTransform(u32 BoneID, EAttachType AttachType, bool Absolute) const
|
||||
{
|
||||
CTransform4f Out;
|
||||
CSkeleton *pSkel = ActiveSkeleton();
|
||||
|
@ -732,6 +733,9 @@ CTransform4f CScriptNode::BoneTransform(u32 BoneID, bool Absolute) const
|
|||
if (pSkel)
|
||||
{
|
||||
CBone *pBone = pSkel->BoneByID(BoneID);
|
||||
ASSERT(pBone);
|
||||
|
||||
if (AttachType == eAttach) Out.Rotate(pBone->Rotation());
|
||||
Out.Translate(pBone->Position());
|
||||
}
|
||||
|
||||
|
@ -743,9 +747,12 @@ CTransform4f CScriptNode::BoneTransform(u32 BoneID, bool Absolute) const
|
|||
// ************ PROTECTED ************
|
||||
void CScriptNode::SetDisplayAsset(CResource *pRes)
|
||||
{
|
||||
if (mpDisplayAsset != pRes)
|
||||
{
|
||||
mpDisplayAsset = pRes;
|
||||
|
||||
bool IsAnimSet = (pRes && pRes->Type() == eAnimSet);
|
||||
mCharIndex = (IsAnimSet ? mpInstance->ActiveCharIndex() : -1);
|
||||
mAnimIndex = (IsAnimSet ? mpInstance->ActiveAnimIndex() : -1);
|
||||
|
||||
CModel *pModel = ActiveModel();
|
||||
mLocalAABox = (pModel ? pModel->AABox() : CAABox::skOne);
|
||||
MarkTransformChanged();
|
||||
|
@ -755,7 +762,6 @@ void CScriptNode::SetDisplayAsset(CResource *pRes)
|
|||
|
||||
if (mpExtra)
|
||||
mpExtra->DisplayAssetChanged(pRes);
|
||||
}
|
||||
}
|
||||
|
||||
void CScriptNode::CalculateTransform(CTransform4f& rOut) const
|
||||
|
|
|
@ -59,14 +59,17 @@ public:
|
|||
bool HasPreviewVolume() const;
|
||||
CAABox PreviewVolumeAABox() const;
|
||||
CVector2f BillboardScale() const;
|
||||
CTransform4f BoneTransform(u32 BoneID, bool Absolute) const;
|
||||
CTransform4f BoneTransform(u32 BoneID, EAttachType AttachType, bool Absolute) const;
|
||||
|
||||
CModel* ActiveModel() const;
|
||||
CAnimSet* ActiveAnimSet() const;
|
||||
CSkeleton* ActiveSkeleton() const;
|
||||
CAnimation* ActiveAnimation() const;
|
||||
CTexture* ActiveBillboard() const;
|
||||
bool UsesModel() const;
|
||||
|
||||
inline u32 NumAttachments() const { return mAttachments.size(); }
|
||||
inline CScriptAttachNode* Attachment(u32 Index) const { return mAttachments[Index]; }
|
||||
inline CResource* DisplayAsset() const { return mpDisplayAsset; }
|
||||
|
||||
protected:
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
#include "CSandwormExtra.h"
|
||||
|
||||
CSandwormExtra::CSandwormExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent)
|
||||
: CScriptExtra(pInstance, pScene, pParent)
|
||||
{
|
||||
// The back pincers need to be flipped 180 degrees
|
||||
for (u32 iAttach = 0; iAttach < pParent->NumAttachments(); iAttach++)
|
||||
{
|
||||
CScriptAttachNode *pAttach = pParent->Attachment(iAttach);
|
||||
|
||||
if (pAttach->LocatorName() == "L_back_claw" || pAttach->LocatorName() == "R_back_claw")
|
||||
pAttach->SetRotation(CVector3f(0,0,180));
|
||||
}
|
||||
|
||||
// Get pincers scale
|
||||
mpPincersScaleProperty = TPropCast<TFloatProperty>(pInstance->PropertyByIDString("0x3DB583AE"));
|
||||
if (mpPincersScaleProperty) PropertyModified(mpPincersScaleProperty);
|
||||
}
|
||||
|
||||
void CSandwormExtra::PropertyModified(IProperty *pProp)
|
||||
{
|
||||
if (pProp == mpPincersScaleProperty)
|
||||
{
|
||||
for (u32 iAttach = 0; iAttach < mpScriptNode->NumAttachments(); iAttach++)
|
||||
{
|
||||
CScriptAttachNode *pAttach = mpScriptNode->Attachment(iAttach);
|
||||
pAttach->SetScale(CVector3f(mpPincersScaleProperty->Get()));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
#ifndef CSANDWORMEXTRA_H
|
||||
#define CSANDWORMEXTRA_H
|
||||
|
||||
#include "CScriptExtra.h"
|
||||
|
||||
class CSandwormExtra : public CScriptExtra
|
||||
{
|
||||
// Transform adjustments to Sandworm attachments.
|
||||
TFloatProperty *mpPincersScaleProperty;
|
||||
|
||||
public:
|
||||
explicit CSandwormExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent);
|
||||
void PropertyModified(IProperty *pProp);
|
||||
};
|
||||
|
||||
#endif // CSANDWORMEXTRA_H
|
|
@ -7,6 +7,7 @@
|
|||
#include "CDoorExtra.h"
|
||||
#include "CRadiusSphereExtra.h"
|
||||
#include "CSplinePathExtra.h"
|
||||
#include "CSandwormExtra.h"
|
||||
|
||||
CScriptExtra* CScriptExtra::CreateExtra(CScriptNode *pNode)
|
||||
{
|
||||
|
@ -57,6 +58,10 @@ CScriptExtra* CScriptExtra::CreateExtra(CScriptNode *pNode)
|
|||
case 0x434C5043: // "CLPC" ClingPathControl (DKCR)
|
||||
pExtra = new CSplinePathExtra(pObj, pNode->Scene(), pNode);
|
||||
break;
|
||||
|
||||
case 0x574F524D: // "WORM" Sandworm (MP2)
|
||||
pExtra = new CSandwormExtra(pObj, pNode->Scene(), pNode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "CMatrix4f.h"
|
||||
#include "CQuaternion.h"
|
||||
#include "CVector3f.h"
|
||||
#include "CVector4f.h"
|
||||
#include "CTransform4f.h"
|
||||
|
@ -184,6 +185,12 @@ CVector4f CMatrix4f::operator*(const CVector4f& rkVec) const
|
|||
return out;
|
||||
}
|
||||
|
||||
CQuaternion CMatrix4f::operator*(const CQuaternion& rkQuat) const
|
||||
{
|
||||
// todo: there's probably a faster way to do this. (mirrored in CTransform4f and CQuaternion)
|
||||
return CQuaternion::FromRotationMatrix(Inverse().Transpose()) * rkQuat;
|
||||
}
|
||||
|
||||
CMatrix4f CMatrix4f::operator*(const CTransform4f& rkMtx) const
|
||||
{
|
||||
// CTransform4f is a 3x4 matrix with an implicit fourth row of {0, 0, 0, 1}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <glm.hpp>
|
||||
|
||||
class CQuaternion;
|
||||
class CVector3f;
|
||||
class CVector4f;
|
||||
class CTransform4f;
|
||||
|
@ -40,6 +41,7 @@ public:
|
|||
inline const float* operator[](long Index) const;
|
||||
CVector3f operator*(const CVector3f& rkVec) const;
|
||||
CVector4f operator*(const CVector4f& rkVec) const;
|
||||
CQuaternion operator*(const CQuaternion& rkQuat) const;
|
||||
CMatrix4f operator*(const CTransform4f& rkMtx) const;
|
||||
CMatrix4f operator*(const CMatrix4f& rkMtx) const;
|
||||
|
||||
|
|
|
@ -144,6 +144,17 @@ void CQuaternion::operator *= (const CQuaternion& rkOther)
|
|||
*this = *this * rkOther;
|
||||
}
|
||||
|
||||
CQuaternion CQuaternion::operator*(const CMatrix4f& rkMtx) const
|
||||
{
|
||||
// todo: there's probably a faster way to do this. (mirrored in CMatrix4f and CTransform4f)
|
||||
return *this * CQuaternion::FromRotationMatrix(rkMtx.Inverse().Transpose());
|
||||
}
|
||||
|
||||
void CQuaternion::operator *= (const CMatrix4f& rkMtx)
|
||||
{
|
||||
*this = *this * rkMtx;
|
||||
}
|
||||
|
||||
// ************ STATIC ************
|
||||
CQuaternion CQuaternion::FromEuler(CVector3f Euler)
|
||||
{
|
||||
|
|
|
@ -25,6 +25,8 @@ public:
|
|||
CVector3f operator*(const CVector3f& rkVec) const;
|
||||
CQuaternion operator*(const CQuaternion& rkOther) const;
|
||||
void operator *= (const CQuaternion& rkOther);
|
||||
CQuaternion operator*(const CMatrix4f& rkMtx) const;
|
||||
void operator *= (const CMatrix4f& rkMtx);
|
||||
|
||||
// Static
|
||||
static CQuaternion FromEuler(CVector3f Euler);
|
||||
|
|
|
@ -221,6 +221,12 @@ CVector4f CTransform4f::operator*(const CVector4f& rkVec) const
|
|||
return Out;
|
||||
}
|
||||
|
||||
CQuaternion CTransform4f::operator*(const CQuaternion& rkQuat) const
|
||||
{
|
||||
// todo: there's probably a faster way to do this. (mirrored in CMatrix4f and CQuaternion)
|
||||
return CQuaternion::FromRotationMatrix(Inverse().Transpose()) * rkQuat;
|
||||
}
|
||||
|
||||
CTransform4f CTransform4f::operator*(const CTransform4f& rkMtx) const
|
||||
{
|
||||
CTransform4f Out;
|
||||
|
|
|
@ -52,6 +52,7 @@ public:
|
|||
const float* operator[](long Index) const;
|
||||
CVector3f operator*(const CVector3f& rkVec) const;
|
||||
CVector4f operator*(const CVector4f& rkVec) const;
|
||||
CQuaternion operator*(const CQuaternion& rkQuat) const;
|
||||
CTransform4f operator*(const CTransform4f& rkMtx) const;
|
||||
void operator*=(const CTransform4f& rkMtx);
|
||||
bool operator==(const CTransform4f& rkMtx) const;
|
||||
|
|
|
@ -332,7 +332,7 @@
|
|||
<property ID="0x07BB06A6" name="Unknown"/>
|
||||
<property ID="0x07C1DE29" name="Unknown"/>
|
||||
<property ID="0x07D194AF" name="OffsetPosition"/>
|
||||
<property ID="0x07D8CC4F" name="Unknown"/>
|
||||
<property ID="0x07D8CC4F" name="Head Armor Model"/>
|
||||
<property ID="0x07D939A1" name="Unknown"/>
|
||||
<property ID="0x07DCD404" name="Unknown"/>
|
||||
<property ID="0x07E9D446" name="Unknown"/>
|
||||
|
@ -1866,7 +1866,7 @@
|
|||
<property ID="0x2A90F9A9" name="Unknown"/>
|
||||
<property ID="0x2A9A1751" name="Unknown"/>
|
||||
<property ID="0x2AA48723" name="Unknown"/>
|
||||
<property ID="0x2AA63FC4" name="Unknown"/>
|
||||
<property ID="0x2AA63FC4" name="SCAN"/>
|
||||
<property ID="0x2AAB8DDA" name="Unknown"/>
|
||||
<property ID="0x2AACEC2F" name="Unknown"/>
|
||||
<property ID="0x2AAE6322" name="Unknown"/>
|
||||
|
@ -2364,7 +2364,7 @@
|
|||
<property ID="0x3595D977" name="Unknown"/>
|
||||
<property ID="0x359B8513" name="Unknown"/>
|
||||
<property ID="0x359C7AAF" name="ControllerActionStruct"/>
|
||||
<property ID="0x35A1EC10" name="Unknown"/>
|
||||
<property ID="0x35A1EC10" name="Spine Armor Model 5"/>
|
||||
<property ID="0x35A88FA1" name="Unknown"/>
|
||||
<property ID="0x35A93DD5" name="TXTR"/>
|
||||
<property ID="0x35A9792E" name="Possessed Scan"/>
|
||||
|
@ -2460,7 +2460,7 @@
|
|||
<property ID="0x37DFFBFD" name="Unknown"/>
|
||||
<property ID="0x37E381C2" name="Unknown"/>
|
||||
<property ID="0x37E62F14" name="Unknown"/>
|
||||
<property ID="0x37E99C23" name="Unknown"/>
|
||||
<property ID="0x37E99C23" name="Tail Armor Model"/>
|
||||
<property ID="0x37E9D29B" name="Unknown"/>
|
||||
<property ID="0x37ED6EBB" name="DamageInfo"/>
|
||||
<property ID="0x37F04700" name="Unknown"/>
|
||||
|
@ -2734,7 +2734,7 @@
|
|||
<property ID="0x3DAF5302" name="Unknown"/>
|
||||
<property ID="0x3DB05763" name="Unknown"/>
|
||||
<property ID="0x3DB45F6A" name="Unknown"/>
|
||||
<property ID="0x3DB583AE" name="Unknown"/>
|
||||
<property ID="0x3DB583AE" name="Pincers Scale"/>
|
||||
<property ID="0x3DBA2F5C" name="CAUD"/>
|
||||
<property ID="0x3DC0F2BE" name="Unknown"/>
|
||||
<property ID="0x3DC3F16F" name="Unknown"/>
|
||||
|
@ -2812,7 +2812,7 @@
|
|||
<property ID="0x3FA164BC" name="Item"/>
|
||||
<property ID="0x3FA5C15B" name="SwarmBotData"/>
|
||||
<property ID="0x3FA67145" name="Unknown"/>
|
||||
<property ID="0x3FA7DF1C" name="Unknown"/>
|
||||
<property ID="0x3FA7DF1C" name="PART"/>
|
||||
<property ID="0x3FA80592" name="Unknown"/>
|
||||
<property ID="0x3FA8C740" name="Unknown"/>
|
||||
<property ID="0x3FAE47EB" name="Leash Radius"/>
|
||||
|
@ -3923,7 +3923,7 @@
|
|||
<property ID="0x576D9946" name="UnknownStruct25"/>
|
||||
<property ID="0x577D0617" name="Unknown"/>
|
||||
<property ID="0x5783E404" name="Unknown"/>
|
||||
<property ID="0x5796A143" name="Unknown"/>
|
||||
<property ID="0x5796A143" name="Antenna Model"/>
|
||||
<property ID="0x579ED88F" name="Unknown"/>
|
||||
<property ID="0x57A46C09" name="Unknown"/>
|
||||
<property ID="0x57A4DFF2" name="Ice Missile"/>
|
||||
|
@ -4243,7 +4243,7 @@
|
|||
<property ID="0x5EE2DB4B" name="STRG"/>
|
||||
<property ID="0x5EE57BCC" name="Unknown"/>
|
||||
<property ID="0x5EEB7F9D" name="STRG"/>
|
||||
<property ID="0x5EF8B288" name="Unknown"/>
|
||||
<property ID="0x5EF8B288" name="Knee Armor Model"/>
|
||||
<property ID="0x5F0471F3" name="Unknown"/>
|
||||
<property ID="0x5F058F67" name="Unknown"/>
|
||||
<property ID="0x5F11893B" name="DamageInfo"/>
|
||||
|
@ -4254,7 +4254,7 @@
|
|||
<property ID="0x5F362A14" name="Unknown"/>
|
||||
<property ID="0x5F3C27C6" name="DamageInfo"/>
|
||||
<property ID="0x5F3F294C" name="Unknown"/>
|
||||
<property ID="0x5F3F29E3" name="Unknown"/>
|
||||
<property ID="0x5F3F29E3" name="Right Pincer Model"/>
|
||||
<property ID="0x5F3FFFD6" name="Unknown"/>
|
||||
<property ID="0x5F55CCCA" name="Unknown"/>
|
||||
<property ID="0x5F63868C" name="Unknown"/>
|
||||
|
@ -4508,7 +4508,7 @@
|
|||
<property ID="0x6549E3F9" name="UnknownStruct28"/>
|
||||
<property ID="0x6551FC4A" name="Unknown"/>
|
||||
<property ID="0x6552BCC0" name="Unknown"/>
|
||||
<property ID="0x656C7DA3" name="Unknown"/>
|
||||
<property ID="0x656C7DA3" name="Spine Armor Model 2"/>
|
||||
<property ID="0x65700CCC" name="Unknown"/>
|
||||
<property ID="0x657327CD" name="Unknown"/>
|
||||
<property ID="0x6575A3D5" name="Unknown"/>
|
||||
|
@ -4575,7 +4575,7 @@
|
|||
<property ID="0x66CDC6E8" name="Unknown"/>
|
||||
<property ID="0x66D466B5" name="PART"/>
|
||||
<property ID="0x66DCAACB" name="DamageInfo"/>
|
||||
<property ID="0x66E34A08" name="Unknown"/>
|
||||
<property ID="0x66E34A08" name="Left Pincer Model"/>
|
||||
<property ID="0x66E48B1E" name="Unknown"/>
|
||||
<property ID="0x66E64EBA" name="Unknown"/>
|
||||
<property ID="0x66F4C4E4" name="OceanBridgeStructA"/>
|
||||
|
@ -5081,7 +5081,7 @@
|
|||
<property ID="0x71EAB030" name="Unknown"/>
|
||||
<property ID="0x71ED4B23" name="Unknown"/>
|
||||
<property ID="0x71EFFFC4" name="Unknown"/>
|
||||
<property ID="0x71F0C674" name="Unknown"/>
|
||||
<property ID="0x71F0C674" name="PART"/>
|
||||
<property ID="0x71F8B8F4" name="Unknown"/>
|
||||
<property ID="0x72124842" name="Unknown"/>
|
||||
<property ID="0x72173369" name="Unknown"/>
|
||||
|
@ -5340,7 +5340,7 @@
|
|||
<property ID="0x781CC1E9" name="Unknown"/>
|
||||
<property ID="0x782A0310" name="Unknown"/>
|
||||
<property ID="0x78306501" name="Unknown"/>
|
||||
<property ID="0x783635A6" name="Unknown"/>
|
||||
<property ID="0x783635A6" name="PART"/>
|
||||
<property ID="0x783B382F" name="Unknown"/>
|
||||
<property ID="0x783E852F" name="TrainTrackManagerStructB"/>
|
||||
<property ID="0x784625BD" name="Hyper Ball"/>
|
||||
|
@ -5356,7 +5356,7 @@
|
|||
<property ID="0x78656D1E" name="Unknown"/>
|
||||
<property ID="0x78673AB6" name="Unknown"/>
|
||||
<property ID="0x78685EB2" name="PART"/>
|
||||
<property ID="0x78694D1B" name="Unknown"/>
|
||||
<property ID="0x78694D1B" name="Spine Armor Model 3"/>
|
||||
<property ID="0x7869A2B0" name="Unknown"/>
|
||||
<property ID="0x7873EFD9" name="Unknown"/>
|
||||
<property ID="0x78755DA3" name="Unknown"/>
|
||||
|
@ -6317,7 +6317,7 @@
|
|||
<property ID="0x8DCF0226" name="Unknown"/>
|
||||
<property ID="0x8DD2C329" name="Unknown"/>
|
||||
<property ID="0x8DD4E38A" name="Unknown"/>
|
||||
<property ID="0x8DDD85CA" name="Unknown"/>
|
||||
<property ID="0x8DDD85CA" name="Shin Armor Model"/>
|
||||
<property ID="0x8DE5D7B2" name="Unknown"/>
|
||||
<property ID="0x8DF64D50" name="Unknown"/>
|
||||
<property ID="0x8DFB1669" name="Unknown"/>
|
||||
|
@ -7750,7 +7750,7 @@
|
|||
<property ID="0xAE22E0DC" name="DamageVulnerability"/>
|
||||
<property ID="0xAE27B368" name="HyperModeData"/>
|
||||
<property ID="0xAE27F052" name="Unknown"/>
|
||||
<property ID="0xAE30AE06" name="Unknown"/>
|
||||
<property ID="0xAE30AE06" name="Spine Armor Model 1"/>
|
||||
<property ID="0xAE342F0F" name="DamageEffectData"/>
|
||||
<property ID="0xAE41EED1" name="Unknown"/>
|
||||
<property ID="0xAE46D80E" name="Unknown"/>
|
||||
|
@ -7978,7 +7978,7 @@
|
|||
<property ID="0xB327E803" name="FlyingPirateData"/>
|
||||
<property ID="0xB32D1B19" name="PuddleControlData"/>
|
||||
<property ID="0xB3343F83" name="CMDL"/>
|
||||
<property ID="0xB3359EBE" name="Unknown"/>
|
||||
<property ID="0xB3359EBE" name="Spine Armor Model 4"/>
|
||||
<property ID="0xB335DB07" name="Unknown"/>
|
||||
<property ID="0xB33A0CBC" name="Unknown"/>
|
||||
<property ID="0xB33EB533" name="HealthInfo"/>
|
||||
|
@ -8320,7 +8320,7 @@
|
|||
<property ID="0xBAE5EABB" name="Unknown"/>
|
||||
<property ID="0xBAE63352" name="Unknown"/>
|
||||
<property ID="0xBAF37BAA" name="SeedBoss1Action"/>
|
||||
<property ID="0xBB06DD83" name="Unknown"/>
|
||||
<property ID="0xBB06DD83" name="Foot Weak Point Model"/>
|
||||
<property ID="0xBB0897EA" name="Unknown"/>
|
||||
<property ID="0xBB0E924C" name="Unknown"/>
|
||||
<property ID="0xBB0EE668" name="Unknown"/>
|
||||
|
@ -8581,7 +8581,7 @@
|
|||
<property ID="0xC07FA9BE" name="Unknown"/>
|
||||
<property ID="0xC08D1B93" name="Unknown"/>
|
||||
<property ID="0xC08E06AC" name="Unknown"/>
|
||||
<property ID="0xC0A86488" name="Unknown"/>
|
||||
<property ID="0xC0A86488" name="Leg Model"/>
|
||||
<property ID="0xC0AC271E" name="Unknown"/>
|
||||
<property ID="0xC0BA9E18" name="Dark Visor Model"/>
|
||||
<property ID="0xC0BD8A5E" name="Unknown"/>
|
||||
|
@ -8795,7 +8795,7 @@
|
|||
<property ID="0xC5528A8D" name="DamageInfo"/>
|
||||
<property ID="0xC55566DB" name="Unknown"/>
|
||||
<property ID="0xC558BC0D" name="FlyerMovementMode"/>
|
||||
<property ID="0xC55918CC" name="Unknown"/>
|
||||
<property ID="0xC55918CC" name="DigitalGuardianData"/>
|
||||
<property ID="0xC571A8C6" name="Unknown"/>
|
||||
<property ID="0xC578CA0D" name="Unknown"/>
|
||||
<property ID="0xC5868061" name="Unknown"/>
|
||||
|
@ -8964,7 +8964,7 @@
|
|||
<property ID="0xC8E441FA" name="TextProperties"/>
|
||||
<property ID="0xC8E8344A" name="Unknown"/>
|
||||
<property ID="0xC8E90B50" name="KorakkData"/>
|
||||
<property ID="0xC8EC315B" name="Unknown"/>
|
||||
<property ID="0xC8EC315B" name="PART"/>
|
||||
<property ID="0xC8ED17F6" name="Unknown"/>
|
||||
<property ID="0xC8FC49D0" name="Unknown"/>
|
||||
<property ID="0xC8FD4813" name="Unknown"/>
|
||||
|
@ -11170,7 +11170,7 @@
|
|||
<property ID="0xF9125D7E" name="Unknown"/>
|
||||
<property ID="0xF9328817" name="CAUD"/>
|
||||
<property ID="0xF9338CC7" name="Unknown"/>
|
||||
<property ID="0xF9469E49" name="Unknown"/>
|
||||
<property ID="0xF9469E49" name="PART"/>
|
||||
<property ID="0xF9529B46" name="Unknown"/>
|
||||
<property ID="0xF95D2033" name="CAUD"/>
|
||||
<property ID="0xF9656C39" name="Unknown"/>
|
||||
|
@ -11449,7 +11449,7 @@
|
|||
<property ID="0xFEF3D2DA" name="Unknown"/>
|
||||
<property ID="0xFEF5668B" name="Unknown"/>
|
||||
<property ID="0xFEF7F81D" name="Unknown"/>
|
||||
<property ID="0xFEFD3FB5" name="Unknown"/>
|
||||
<property ID="0xFEFD3FB5" name="Spine Armor Model 6"/>
|
||||
<property ID="0xFEFD7F33" name="Unknown"/>
|
||||
<property ID="0xFEFE4C34" name="Unknown"/>
|
||||
<property ID="0xFEFF7D43" name="Unknown"/>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<property ID="0x11" name="AnimationParameters" type="character"/>
|
||||
<property ID="0x12" name="Particle 2" type="file" extensions="PART"/>
|
||||
<property ID="0x13" name="Sound ID 2" type="long"/>
|
||||
<property ID="0x14" name="Model 1" type="file" extensions="CMDL"/>
|
||||
<property ID="0x14" name="Grenade Model" type="file" extensions="CMDL"/>
|
||||
<struct ID="0x15" name="DamageInfo 1" template="Structs/DamageInfo.xml"/>
|
||||
<property ID="0x16" name="Unknown 9" type="float"/>
|
||||
<property ID="0x17" name="Particle 3" type="file" extensions="PART"/>
|
||||
|
@ -44,9 +44,9 @@
|
|||
<property ID="0x27" name="Sound ID 5" type="long"/>
|
||||
<property ID="0x28" name="Unknown 17" type="bool"/>
|
||||
<property ID="0x29" name="Unknown 18" type="bool"/>
|
||||
<property ID="0x2A" name="Model 2" type="file" extensions="CMDL"/>
|
||||
<property ID="0x2B" name="CSKR" type="file" extensions="CSKR"/>
|
||||
<property ID="0x2C" name="CINF" type="file" extensions="CINF"/>
|
||||
<property ID="0x2A" name="X-Ray Model" type="file" extensions="CMDL"/>
|
||||
<property ID="0x2B" name="X-Ray CSKR" type="file" extensions="CSKR"/>
|
||||
<property ID="0x2C" name="X-Ray CINF" type="file" extensions="CINF"/>
|
||||
</properties>
|
||||
<states/>
|
||||
<messages/>
|
||||
|
|
|
@ -26,9 +26,7 @@
|
|||
<struct ID="0x7E397FED" template="Structs/ActorParameters.xml"/>
|
||||
<struct ID="0xC55918CC" type="multi">
|
||||
<properties>
|
||||
<property ID="0x2AA63FC4" type="long">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x2AA63FC4" type="file" extensions="SCAN"/>
|
||||
<property ID="0x0FAF6A8E" type="float">
|
||||
<default>10.0</default>
|
||||
</property>
|
||||
|
@ -40,9 +38,9 @@
|
|||
</property>
|
||||
<struct ID="0xEFACFA50" template="Structs/DamageInfo.xml">
|
||||
<properties>
|
||||
<property ID="0x119FBD31">
|
||||
<default>11</default>
|
||||
</property>
|
||||
<enum ID="0x119FBD31">
|
||||
<default>0x0000000B</default>
|
||||
</enum>
|
||||
<property ID="0xF2D02613">
|
||||
<default>50.0</default>
|
||||
</property>
|
||||
|
@ -54,12 +52,8 @@
|
|||
<property ID="0xB4561F28" type="float">
|
||||
<default>75.0</default>
|
||||
</property>
|
||||
<property ID="0xBB06DD83" type="long">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x783635A6" type="long">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0xBB06DD83" type="file" extensions="CMDL"/>
|
||||
<property ID="0x783635A6" type="file" extensions="PART"/>
|
||||
<struct ID="0x13845A66" template="Structs/AudioPlaybackParms.xml"/>
|
||||
<struct ID="0xA305DCBA" template="Structs/AudioPlaybackParms.xml"/>
|
||||
<struct ID="0xC6EC1630" template="Structs/AudioPlaybackParms.xml"/>
|
||||
|
@ -83,9 +77,9 @@
|
|||
</property>
|
||||
<struct ID="0x5CA612AA" template="Structs/DamageInfo.xml">
|
||||
<properties>
|
||||
<property ID="0x119FBD31">
|
||||
<default>11</default>
|
||||
</property>
|
||||
<enum ID="0x119FBD31">
|
||||
<default>0x0000000B</default>
|
||||
</enum>
|
||||
<property ID="0xF2D02613">
|
||||
<default>50.0</default>
|
||||
</property>
|
||||
|
@ -104,20 +98,14 @@
|
|||
<default>100.0</default>
|
||||
</property>
|
||||
<struct ID="0x7BFAB420" template="Structs/AudioPlaybackParms.xml"/>
|
||||
<property ID="0xC0A86488" type="long">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x8DDD85CA" type="long">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0xC0A86488" type="file" extensions="CMDL"/>
|
||||
<property ID="0x8DDD85CA" type="file" extensions="CMDL"/>
|
||||
<property ID="0xE3DD61E6" type="float">
|
||||
<default>100.0</default>
|
||||
</property>
|
||||
<struct ID="0x91D2A042" template="Structs/AudioPlaybackParms.xml"/>
|
||||
<struct ID="0x9386D22B" template="Structs/AudioPlaybackParms.xml"/>
|
||||
<property ID="0x5EF8B288" type="long">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x5EF8B288" type="file" extensions="CMDL"/>
|
||||
<struct ID="0x7B5B7312" template="Structs/EchoParameters.xml"/>
|
||||
<property ID="0xA324E26C" type="float">
|
||||
<default>2.0</default>
|
||||
|
@ -140,12 +128,8 @@
|
|||
<property ID="0x3254A16B" type="float">
|
||||
<default>1.0</default>
|
||||
</property>
|
||||
<property ID="0x5796A143" type="long">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x3FA7DF1C" type="long">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x5796A143" type="file" extensions="CMDL"/>
|
||||
<property ID="0x3FA7DF1C" type="file" extensions="PART"/>
|
||||
<struct ID="0x021B6F9D" template="Structs/EchoParameters.xml"/>
|
||||
<struct ID="0x55A8011C" template="Structs/AudioPlaybackParms.xml"/>
|
||||
<struct ID="0x7AE73FB3" template="Structs/AudioPlaybackParms.xml"/>
|
||||
|
@ -153,12 +137,8 @@
|
|||
<property ID="0x4F6D27D3" type="float">
|
||||
<default>500.0</default>
|
||||
</property>
|
||||
<property ID="0x71F0C674" type="long">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0xC8EC315B" type="long">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x71F0C674" type="file" extensions="PART"/>
|
||||
<property ID="0xC8EC315B" type="file" extensions="PART"/>
|
||||
<struct ID="0xEED5B990" template="Structs/AudioPlaybackParms.xml"/>
|
||||
<struct ID="0x535F6FEC" template="Structs/AudioPlaybackParms.xml"/>
|
||||
<struct ID="0x6DBAD233" template="Structs/DamageVulnerability.xml"/>
|
||||
|
@ -188,6 +168,24 @@
|
|||
<model source="property">0xC55918CC:0x5EF8B288</model>
|
||||
<model source="property">0xC55918CC:0x5796A143</model>
|
||||
</assets>
|
||||
<attachments>
|
||||
<attachment propertyID="0xC55918CC:0xBB06DD83" locator="L_front_ankle"/>
|
||||
<attachment propertyID="0xC55918CC:0xBB06DD83" locator="R_front_ankle"/>
|
||||
<attachment propertyID="0xC55918CC:0xBB06DD83" locator="L_back_ankle"/>
|
||||
<attachment propertyID="0xC55918CC:0xBB06DD83" locator="R_back_ankle"/>
|
||||
<attachment propertyID="0xC55918CC:0xC0A86488" locator="L_front_knee_2"/>
|
||||
<attachment propertyID="0xC55918CC:0xC0A86488" locator="R_front_knee_2"/>
|
||||
<attachment propertyID="0xC55918CC:0xC0A86488" locator="L_back_knee_2"/>
|
||||
<attachment propertyID="0xC55918CC:0xC0A86488" locator="R_back_knee_2"/>
|
||||
<attachment propertyID="0xC55918CC:0x8DDD85CA" locator="L_front_knee_2"/>
|
||||
<attachment propertyID="0xC55918CC:0x8DDD85CA" locator="R_front_knee_2"/>
|
||||
<attachment propertyID="0xC55918CC:0x8DDD85CA" locator="L_back_knee_2"/>
|
||||
<attachment propertyID="0xC55918CC:0x8DDD85CA" locator="R_back_knee_2"/>
|
||||
<attachment propertyID="0xC55918CC:0x5EF8B288" locator="L_front_knee_2"/>
|
||||
<attachment propertyID="0xC55918CC:0x5EF8B288" locator="R_front_knee_2"/>
|
||||
<attachment propertyID="0xC55918CC:0x5EF8B288" locator="L_back_knee_2"/>
|
||||
<attachment propertyID="0xC55918CC:0x5EF8B288" locator="R_back_knee_2"/>
|
||||
</attachments>
|
||||
<rotation_type>enabled</rotation_type>
|
||||
<scale_type>enabled</scale_type>
|
||||
</editor>
|
||||
|
|
|
@ -104,9 +104,9 @@
|
|||
</property>
|
||||
<struct ID="0x4EAF615F" template="Structs/DamageInfo.xml">
|
||||
<properties>
|
||||
<property ID="0x119FBD31">
|
||||
<default>11</default>
|
||||
</property>
|
||||
<enum ID="0x119FBD31">
|
||||
<default>0x0000000B</default>
|
||||
</enum>
|
||||
<property ID="0xF2D02613">
|
||||
<default>20.0</default>
|
||||
</property>
|
||||
|
@ -120,9 +120,9 @@
|
|||
</property>
|
||||
<struct ID="0x41177AC6" template="Structs/DamageInfo.xml">
|
||||
<properties>
|
||||
<property ID="0x119FBD31">
|
||||
<default>11</default>
|
||||
</property>
|
||||
<enum ID="0x119FBD31">
|
||||
<default>0x0000000B</default>
|
||||
</enum>
|
||||
<property ID="0xF2D02613">
|
||||
<default>20.0</default>
|
||||
</property>
|
||||
|
@ -173,9 +173,9 @@
|
|||
</property>
|
||||
<struct ID="0xA8C6106B" template="Structs/DamageInfo.xml">
|
||||
<properties>
|
||||
<property ID="0x119FBD31">
|
||||
<default>11</default>
|
||||
</property>
|
||||
<enum ID="0x119FBD31">
|
||||
<default>0x0000000B</default>
|
||||
</enum>
|
||||
<property ID="0xF2D02613">
|
||||
<default>20.0</default>
|
||||
</property>
|
||||
|
@ -189,9 +189,9 @@
|
|||
</property>
|
||||
<struct ID="0x45EF2EDC" template="Structs/DamageInfo.xml">
|
||||
<properties>
|
||||
<property ID="0x119FBD31">
|
||||
<default>11</default>
|
||||
</property>
|
||||
<enum ID="0x119FBD31">
|
||||
<default>0x0000000B</default>
|
||||
</enum>
|
||||
<property ID="0xF2D02613">
|
||||
<default>20.0</default>
|
||||
</property>
|
||||
|
|
|
@ -244,13 +244,27 @@
|
|||
<model source="property">0x91E88D81:0xBBD84681</model>
|
||||
</assets>
|
||||
<attachments>
|
||||
<attachment propertyID="0x91E88D81:0x8B452A19:0x07D8CC4F" locator="Head_1"/>
|
||||
<attachment propertyID="0x91E88D81:0x8B452A19:0xAE30AE06" locator="Spine_6"/>
|
||||
<attachment propertyID="0x91E88D81:0x8B452A19:0x656C7DA3" locator="Spine_5"/>
|
||||
<attachment propertyID="0x91E88D81:0x8B452A19:0x78694D1B" locator="Spine_4"/>
|
||||
<attachment propertyID="0x91E88D81:0x8B452A19:0xB3359EBE" locator="Spine_3"/>
|
||||
<attachment propertyID="0x91E88D81:0x8B452A19:0x35A1EC10" locator="Spine_2"/>
|
||||
<attachment propertyID="0x91E88D81:0x8B452A19:0xFEFD3FB5" locator="Spine_1"/>
|
||||
<attachment propertyID="0x91E88D81:0x8B452A19:0x07D8CC4F" locator="Head_1">
|
||||
<attach_type>follow</attach_type>
|
||||
</attachment>
|
||||
<attachment propertyID="0x91E88D81:0x8B452A19:0xAE30AE06" locator="Spine_6">
|
||||
<attach_type>follow</attach_type>
|
||||
</attachment>
|
||||
<attachment propertyID="0x91E88D81:0x8B452A19:0x656C7DA3" locator="Spine_5">
|
||||
<attach_type>follow</attach_type>
|
||||
</attachment>
|
||||
<attachment propertyID="0x91E88D81:0x8B452A19:0x78694D1B" locator="Spine_4">
|
||||
<attach_type>follow</attach_type>
|
||||
</attachment>
|
||||
<attachment propertyID="0x91E88D81:0x8B452A19:0xB3359EBE" locator="Spine_3">
|
||||
<attach_type>follow</attach_type>
|
||||
</attachment>
|
||||
<attachment propertyID="0x91E88D81:0x8B452A19:0x35A1EC10" locator="Spine_2">
|
||||
<attach_type>follow</attach_type>
|
||||
</attachment>
|
||||
<attachment propertyID="0x91E88D81:0x8B452A19:0xFEFD3FB5" locator="Spine_1">
|
||||
<attach_type>follow</attach_type>
|
||||
</attachment>
|
||||
</attachments>
|
||||
<rotation_type>enabled</rotation_type>
|
||||
<scale_type>enabled</scale_type>
|
||||
|
|
|
@ -50,21 +50,15 @@
|
|||
<property ID="0x8128CE4A" type="long">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x66E34A08" type="long">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x5F3F29E3" type="long">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x66E34A08" type="file" extensions="CMDL"/>
|
||||
<property ID="0x5F3F29E3" type="file" extensions="CMDL"/>
|
||||
<property ID="0x63DCBBB6" type="float">
|
||||
<default>9.0</default>
|
||||
</property>
|
||||
<property ID="0x2393C3C0" type="float">
|
||||
<default>25.0</default>
|
||||
</property>
|
||||
<property ID="0xF9469E49" type="long">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0xF9469E49" type="file" extensions="PART"/>
|
||||
<property ID="0x61F75902" type="float">
|
||||
<default>60.0</default>
|
||||
</property>
|
||||
|
@ -77,9 +71,9 @@
|
|||
<property ID="0xEF485DB9" type="file" extensions="WPSC"/>
|
||||
<struct ID="0x553B1339" template="Structs/DamageInfo.xml">
|
||||
<properties>
|
||||
<property ID="0x119FBD31">
|
||||
<default>11</default>
|
||||
</property>
|
||||
<enum ID="0x119FBD31">
|
||||
<default>0x0000000B</default>
|
||||
</enum>
|
||||
<property ID="0xF2D02613">
|
||||
<default>5.0</default>
|
||||
</property>
|
||||
|
@ -105,9 +99,9 @@
|
|||
</property>
|
||||
<struct ID="0xF8FD6885" template="Structs/DamageInfo.xml">
|
||||
<properties>
|
||||
<property ID="0x119FBD31">
|
||||
<default>11</default>
|
||||
</property>
|
||||
<enum ID="0x119FBD31">
|
||||
<default>0x0000000B</default>
|
||||
</enum>
|
||||
<property ID="0xF2D02613">
|
||||
<default>5.0</default>
|
||||
</property>
|
||||
|
@ -115,9 +109,9 @@
|
|||
</struct>
|
||||
<struct ID="0x449233BC" template="Structs/DamageInfo.xml">
|
||||
<properties>
|
||||
<property ID="0x119FBD31">
|
||||
<default>11</default>
|
||||
</property>
|
||||
<enum ID="0x119FBD31">
|
||||
<default>0x0000000B</default>
|
||||
</enum>
|
||||
<property ID="0xF2D02613">
|
||||
<default>5.0</default>
|
||||
</property>
|
||||
|
@ -158,9 +152,9 @@
|
|||
</property>
|
||||
<struct ID="0x4461A8AD" template="Structs/DamageInfo.xml">
|
||||
<properties>
|
||||
<property ID="0x119FBD31">
|
||||
<default>11</default>
|
||||
</property>
|
||||
<enum ID="0x119FBD31">
|
||||
<default>0x0000000B</default>
|
||||
</enum>
|
||||
<property ID="0xF2D02613">
|
||||
<default>5.0</default>
|
||||
</property>
|
||||
|
@ -207,6 +201,20 @@
|
|||
<model source="property">0x5F3F29E3</model>
|
||||
<model source="property">0xE61748ED:0xAD54DA11</model>
|
||||
</assets>
|
||||
<attachments>
|
||||
<attachment propertyID="0x66E34A08" locator="L_front_claw">
|
||||
<attach_type>follow</attach_type>
|
||||
</attachment>
|
||||
<attachment propertyID="0x5F3F29E3" locator="R_front_claw">
|
||||
<attach_type>follow</attach_type>
|
||||
</attachment>
|
||||
<attachment propertyID="0x5F3F29E3" locator="L_back_claw">
|
||||
<attach_type>follow</attach_type>
|
||||
</attachment>
|
||||
<attachment propertyID="0x66E34A08" locator="R_back_claw">
|
||||
<attach_type>follow</attach_type>
|
||||
</attachment>
|
||||
</attachments>
|
||||
<rotation_type>enabled</rotation_type>
|
||||
<scale_type>enabled</scale_type>
|
||||
</editor>
|
||||
|
|
|
@ -234,6 +234,12 @@
|
|||
<model source="property">0xB31B771D:0x26439458</model>
|
||||
<model source="property">0xB31B771D:0xBDD2D64E</model>
|
||||
</assets>
|
||||
<attachments>
|
||||
<attachment propertyID="0xB31B771D:0x11A273CB" locator="L_frontWing_1"/>
|
||||
<attachment propertyID="0xB31B771D:0x8A3331DD" locator="L_backWing_1"/>
|
||||
<attachment propertyID="0xB31B771D:0x26439458" locator="R_frontWing_1"/>
|
||||
<attachment propertyID="0xB31B771D:0xBDD2D64E" locator="R_backWing_1"/>
|
||||
</attachments>
|
||||
<rotation_type>enabled</rotation_type>
|
||||
<scale_type>enabled</scale_type>
|
||||
</editor>
|
||||
|
|
Loading…
Reference in New Issue