Implemented property name validation system
This commit is contained in:
parent
f980bc7536
commit
11917d03e8
|
@ -5,7 +5,6 @@
|
|||
#include "CAssetID.h"
|
||||
#include "CColor.h"
|
||||
#include "CFourCC.h"
|
||||
#include "CHashFNV1A.h"
|
||||
#include "CScopedTimer.h"
|
||||
#include "CTimer.h"
|
||||
#include "EGame.h"
|
||||
|
@ -17,6 +16,8 @@
|
|||
#include "Log.h"
|
||||
#include "TString.h"
|
||||
#include "types.h"
|
||||
#include "Hash/CCRC32.h"
|
||||
#include "Hash/CFNV1A.h"
|
||||
#include "Serialization/Binary.h"
|
||||
#include "Serialization/XML.h"
|
||||
|
||||
|
|
|
@ -46,7 +46,6 @@ INCLUDEPATH += $$PWE_MAIN_INCLUDE \
|
|||
HEADERS += \
|
||||
CColor.h \
|
||||
CFourCC.h \
|
||||
CHashFNV1A.h \
|
||||
CTimer.h \
|
||||
EKeyInputs.h \
|
||||
EMouseInputs.h \
|
||||
|
@ -59,6 +58,7 @@ HEADERS += \
|
|||
AssertMacro.h \
|
||||
CScopedTimer.h \
|
||||
CAssetID.h \
|
||||
Hash\CFNV1A.h \
|
||||
Serialization/IArchive.h \
|
||||
Serialization/CXMLWriter.h \
|
||||
Serialization/CXMLReader.h \
|
||||
|
@ -83,7 +83,8 @@ HEADERS += \
|
|||
FileIO\CBitStreamInWrapper.h \
|
||||
FileIO\CFileLock.h \
|
||||
FileIO.h \
|
||||
Common.h
|
||||
Common.h \
|
||||
Hash/CCRC32.h
|
||||
|
||||
# Source Files
|
||||
SOURCES += \
|
||||
|
@ -105,4 +106,5 @@ SOURCES += \
|
|||
FileIO\IOUtil.cpp \
|
||||
FileIO\IInputStream.cpp \
|
||||
FileIO\IOutputStream.cpp \
|
||||
FileIO\CBitStreamInWrapper.cpp
|
||||
FileIO\CBitStreamInWrapper.cpp \
|
||||
Hash/CCRC32.cpp
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
#include "CCRC32.h"
|
||||
|
||||
const u32 gkCrcTable[] = {
|
||||
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
|
||||
0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
|
||||
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
|
||||
0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
|
||||
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
|
||||
0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
|
||||
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
|
||||
0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
|
||||
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
|
||||
0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
|
||||
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
|
||||
0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
|
||||
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
|
||||
0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
|
||||
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
|
||||
0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
|
||||
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
|
||||
0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
|
||||
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
|
||||
0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
|
||||
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
|
||||
0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
|
||||
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
|
||||
0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
|
||||
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
|
||||
0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
|
||||
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
|
||||
0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
|
||||
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
|
||||
0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
|
||||
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
|
||||
0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
|
||||
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
|
||||
0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
|
||||
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
|
||||
0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
|
||||
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
|
||||
0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
|
||||
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
|
||||
0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
|
||||
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
|
||||
0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
|
||||
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
|
||||
};
|
||||
|
||||
/** Default constructor, initializes the hash to the default value */
|
||||
CCRC32::CCRC32()
|
||||
: mHash( 0xFFFFFFFF )
|
||||
{
|
||||
}
|
||||
|
||||
/** Allows the hash to be initialized to an arbitrary value */
|
||||
CCRC32::CCRC32(u32 InitialValue)
|
||||
: mHash( InitialValue )
|
||||
{
|
||||
}
|
||||
|
||||
/** Hash arbitrary data */
|
||||
void CCRC32::Hash(const void* pkData, int Size)
|
||||
{
|
||||
const u8* pkCastData = static_cast<const u8*>(pkData);
|
||||
|
||||
while (Size--)
|
||||
{
|
||||
mHash = gkCrcTable[(mHash ^ *pkCastData++) & 0xFF] ^ (mHash >> 8);
|
||||
}
|
||||
}
|
||||
|
||||
/** Retrieve the final output hash. (You can keep adding data to the hash after calling this.) */
|
||||
u32 CCRC32::Digest() const
|
||||
{
|
||||
return mHash;
|
||||
}
|
||||
|
||||
/** Convenience hash methods */
|
||||
void CCRC32::Hash(u8 v)
|
||||
{
|
||||
Hash(&v, 1);
|
||||
}
|
||||
|
||||
void CCRC32::Hash(u16 v)
|
||||
{
|
||||
Hash(&v, 2);
|
||||
}
|
||||
|
||||
void CCRC32::Hash(u32 v)
|
||||
{
|
||||
Hash(&v, 4);
|
||||
}
|
||||
|
||||
void CCRC32::Hash(u64 v)
|
||||
{
|
||||
Hash(&v, 8);
|
||||
}
|
||||
|
||||
void CCRC32::Hash(float v)
|
||||
{
|
||||
Hash(&v, 4);
|
||||
}
|
||||
|
||||
void CCRC32::Hash(double v)
|
||||
{
|
||||
Hash(&v, 8);
|
||||
}
|
||||
|
||||
void CCRC32::Hash(const char* pkString)
|
||||
{
|
||||
while (*pkString)
|
||||
{
|
||||
Hash(pkString++, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/** Static */
|
||||
u32 CCRC32::StaticHashString(const char* pkString)
|
||||
{
|
||||
CCRC32 Hasher;
|
||||
Hasher.Hash(pkString);
|
||||
return Hasher.Digest();
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
#ifndef CCRC32_H
|
||||
#define CCRC32_H
|
||||
|
||||
#include "Common/TString.h"
|
||||
#include "Common/types.h"
|
||||
|
||||
/**
|
||||
* CRC32 hash implementation
|
||||
*/
|
||||
class CCRC32
|
||||
{
|
||||
/** Current hash value */
|
||||
u32 mHash;
|
||||
|
||||
public:
|
||||
/** Default constructor, initializes the hash to the default value */
|
||||
CCRC32();
|
||||
|
||||
/** Allows the hash to be initialized to an arbitrary value */
|
||||
CCRC32(u32 InitialValue);
|
||||
|
||||
/** Hash arbitrary data */
|
||||
void Hash(const void* pkData, int Size);
|
||||
|
||||
/** Retrieve the final output hash. (You can keep adding data to the hash after calling this.) */
|
||||
u32 Digest() const;
|
||||
|
||||
/** Convenience hash methods */
|
||||
void Hash(u8 v);
|
||||
void Hash(u16 v);
|
||||
void Hash(u32 v);
|
||||
void Hash(u64 v);
|
||||
void Hash(float v);
|
||||
void Hash(double v);
|
||||
void Hash(const char* pkString);
|
||||
|
||||
static u32 StaticHashString(const char* pkString);
|
||||
};
|
||||
|
||||
#endif // CCRC32_H
|
|
@ -1,10 +1,10 @@
|
|||
#ifndef CHASHFNV1A_H
|
||||
#define CHASHFNV1A_H
|
||||
#ifndef CFNV1A_H
|
||||
#define CFNV1A_H
|
||||
|
||||
#include "types.h"
|
||||
#include "TString.h"
|
||||
#include "Common/types.h"
|
||||
#include "Common/TString.h"
|
||||
|
||||
class CHashFNV1A
|
||||
class CFNV1A
|
||||
{
|
||||
public:
|
||||
enum EHashLength {
|
||||
|
@ -21,7 +21,7 @@ private:
|
|||
static const u64 skFNVPrime64 = 0x100000001B3;
|
||||
|
||||
public:
|
||||
CHashFNV1A(EHashLength Length)
|
||||
CFNV1A(EHashLength Length)
|
||||
{
|
||||
if (Length == e32Bit)
|
||||
Init32();
|
||||
|
@ -65,4 +65,4 @@ public:
|
|||
inline void HashString(const TString& rkVal) { HashData(rkVal.Data(), rkVal.Size()); }
|
||||
};
|
||||
|
||||
#endif // CHASHFNV1A_H
|
||||
#endif // CFNV1A_H
|
|
@ -1,5 +1,5 @@
|
|||
#include "TString.h"
|
||||
#include "CHashFNV1A.h"
|
||||
#include "Hash/CFNV1A.h"
|
||||
#include <FileIO/IOUtil.h>
|
||||
#include <codecvt>
|
||||
#include <locale>
|
||||
|
@ -7,14 +7,14 @@
|
|||
// ************ TString ************
|
||||
u32 TString::Hash32() const
|
||||
{
|
||||
CHashFNV1A Hash(CHashFNV1A::e32Bit);
|
||||
CFNV1A Hash(CFNV1A::e32Bit);
|
||||
Hash.HashString(*this);
|
||||
return Hash.GetHash32();
|
||||
}
|
||||
|
||||
u64 TString::Hash64() const
|
||||
{
|
||||
CHashFNV1A Hash(CHashFNV1A::e64Bit);
|
||||
CFNV1A Hash(CFNV1A::e64Bit);
|
||||
Hash.HashString(*this);
|
||||
return Hash.GetHash64();
|
||||
}
|
||||
|
@ -108,14 +108,14 @@ TWideString TString::ToUTF16() const
|
|||
// ************ TWideString ************
|
||||
u32 TWideString::Hash32() const
|
||||
{
|
||||
CHashFNV1A Hash(CHashFNV1A::e32Bit);
|
||||
CFNV1A Hash(CFNV1A::e32Bit);
|
||||
Hash.HashData(Data(), Size() * sizeof(wchar_t));
|
||||
return Hash.GetHash32();
|
||||
}
|
||||
|
||||
u64 TWideString::Hash64() const
|
||||
{
|
||||
CHashFNV1A Hash(CHashFNV1A::e64Bit);
|
||||
CFNV1A Hash(CFNV1A::e64Bit);
|
||||
Hash.HashData(Data(), Size() * sizeof(wchar_t));
|
||||
return Hash.GetHash64();
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include "Core/Render/CRenderer.h"
|
||||
#include "Core/OpenGL/GLCommon.h"
|
||||
#include "Core/OpenGL/CShaderGenerator.h"
|
||||
#include <Common/CHashFNV1A.h>
|
||||
#include <Common/Hash/CFNV1A.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <GL/glew.h>
|
||||
|
@ -243,7 +243,7 @@ u64 CMaterial::HashParameters()
|
|||
{
|
||||
if (mRecalcHash)
|
||||
{
|
||||
CHashFNV1A Hash(CHashFNV1A::e64Bit);
|
||||
CFNV1A Hash(CFNV1A::e64Bit);
|
||||
|
||||
Hash.HashLong(mVersion);
|
||||
Hash.HashLong(mOptions);
|
||||
|
|
|
@ -58,7 +58,7 @@ CMaterialPass* CMaterialPass::Clone(CMaterial *pParent)
|
|||
return pOut;
|
||||
}
|
||||
|
||||
void CMaterialPass::HashParameters(CHashFNV1A& rHash)
|
||||
void CMaterialPass::HashParameters(CFNV1A& rHash)
|
||||
{
|
||||
if (mEnabled)
|
||||
{
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#include "ETevEnums.h"
|
||||
#include "Core/Render/FRenderOptions.h"
|
||||
#include <Common/CFourCC.h>
|
||||
#include <Common/CHashFNV1A.h>
|
||||
#include <Common/Hash/CFNV1A.h>
|
||||
|
||||
class CMaterial;
|
||||
|
||||
|
@ -45,7 +45,7 @@ public:
|
|||
CMaterialPass(CMaterial *pParent);
|
||||
~CMaterialPass();
|
||||
CMaterialPass* Clone(CMaterial *pParent);
|
||||
void HashParameters(CHashFNV1A& rHash);
|
||||
void HashParameters(CFNV1A& rHash);
|
||||
void LoadTexture(u32 PassIndex);
|
||||
void SetAnimCurrent(FRenderOptions Options, u32 PassIndex);
|
||||
|
||||
|
|
|
@ -256,6 +256,7 @@ void CTemplateLoader::LoadStructTemplate(const TString& rkTemplateFileName, CStr
|
|||
}
|
||||
}
|
||||
pSource->mSourceFile = rkTemplateFileName;
|
||||
pSource->mTypeName = pSource->mSourceFile.GetFileName(false);
|
||||
|
||||
TString NameAttr = TString(pRootElem->Attribute("name"));
|
||||
if (!NameAttr.IsEmpty())
|
||||
|
@ -373,7 +374,13 @@ void CTemplateLoader::LoadEnumerators(XMLElement *pEnumeratorsElem, CEnumTemplat
|
|||
const char *pkName = pChild->Attribute("name");
|
||||
|
||||
if (pkID && pkName)
|
||||
pTemp->mEnumerators.push_back(CEnumTemplate::SEnumerator(pkName, TString(pkID).ToInt32()));
|
||||
{
|
||||
u32 EnumeratorID = TString(pkID).ToInt32();
|
||||
pTemp->mEnumerators.push_back(CEnumTemplate::SEnumerator(pkName, EnumeratorID));
|
||||
|
||||
if (EnumeratorID > 0xFF)
|
||||
pTemp->mUsesHashes = true;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
|
|
|
@ -28,6 +28,7 @@ enum EPropertyType
|
|||
// functions defined in IPropertyTemplate.cpp
|
||||
EPropertyType PropStringToPropEnum(TString Prop);
|
||||
TString PropEnumToPropString(EPropertyType Prop);
|
||||
const char* HashablePropTypeName(EPropertyType Prop);
|
||||
|
||||
#endif // EPROPERTYTYPE
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "IPropertyTemplate.h"
|
||||
#include "CMasterTemplate.h"
|
||||
#include <Common/Hash/CCRC32.h>
|
||||
#include <iostream>
|
||||
|
||||
// ************ IPropertyTemplate ************
|
||||
|
@ -69,6 +70,36 @@ bool IPropertyTemplate::IsFromStructTemplate() const
|
|||
return false;
|
||||
}
|
||||
|
||||
bool IPropertyTemplate::IsNameCorrect() const
|
||||
{
|
||||
// Check whether the property name is correct... i.e., if we hash it, does it match the property ID?
|
||||
// Only valid for Prime 2 and up, since Prime 1 doesn't have real property IDs, so we can't validate names
|
||||
if (Game() >= eEchoesDemo)
|
||||
{
|
||||
// Don't hash for single-property structs
|
||||
if ( (!Parent() || !Parent()->IsSingleProperty()) &&
|
||||
// Don't hash for the three properties in EditorProperties that have fourCC property IDs
|
||||
mID != FOURCC('INAM') &&
|
||||
mID != FOURCC('XFRM') &&
|
||||
mID != FOURCC('ACTV') )
|
||||
{
|
||||
// Only re-hash if we need to. Save the result (output won't change if function is called multiple times)
|
||||
if (!mHasCachedNameCheck)
|
||||
{
|
||||
// The property ID is just a CRC32 of the property name + the type
|
||||
CCRC32 Hash;
|
||||
Hash.Hash(*mName);
|
||||
Hash.Hash(GetTypeNameString());
|
||||
mCachedNameIsCorrect = Hash.Digest() == mID;
|
||||
mHasCachedNameCheck = true;
|
||||
}
|
||||
return mCachedNameIsCorrect;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
TString IPropertyTemplate::FindStructSource() const
|
||||
{
|
||||
const CStructTemplate *pkStruct = mpParent;
|
||||
|
@ -95,6 +126,7 @@ void CStructTemplate::CopyStructData(const CStructTemplate *pkStruct)
|
|||
mVersionPropertyCounts = pkStruct->mVersionPropertyCounts;
|
||||
mIsSingleProperty = pkStruct->mIsSingleProperty;
|
||||
mSourceFile = pkStruct->mSourceFile;
|
||||
mTypeName = pkStruct->mTypeName;
|
||||
|
||||
mSubProperties.resize(pkStruct->mSubProperties.size());
|
||||
|
||||
|
@ -271,6 +303,30 @@ EPropertyType PropStringToPropEnum(TString Prop)
|
|||
return eInvalidProperty;
|
||||
}
|
||||
|
||||
const char* HashablePropTypeName(EPropertyType Prop)
|
||||
{
|
||||
// Variants that match Retro's internal type names for generating property IDs. case sensitive
|
||||
switch (Prop)
|
||||
{
|
||||
case eBoolProperty: return "bool";
|
||||
case eLongProperty: return "int";
|
||||
case eEnumProperty: return "enum";
|
||||
case eBitfieldProperty: return "bitfield";
|
||||
case eFloatProperty: return "float";
|
||||
case eStringProperty: return "string";
|
||||
case eColorProperty: return "Color";
|
||||
case eVector3Property: return "Vector3f";
|
||||
case eSoundProperty: return "SfxId";
|
||||
case eAssetProperty: return "asset";
|
||||
case eMayaSplineProperty: return "MayaSpline";
|
||||
|
||||
// All other types are either invalid or need a custom reimplementation because they can return multiple strings (like struct)
|
||||
default:
|
||||
ASSERT(false);
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
// ************ DEBUG ************
|
||||
void CStructTemplate::DebugPrintProperties(TString base)
|
||||
{
|
||||
|
|
|
@ -40,6 +40,8 @@ protected:
|
|||
u32 mID;
|
||||
ECookPreference mCookPreference;
|
||||
std::vector<u32> mAllowedVersions;
|
||||
mutable bool mHasCachedNameCheck;
|
||||
mutable bool mCachedNameIsCorrect;
|
||||
|
||||
public:
|
||||
IPropertyTemplate(u32 ID, CScriptTemplate *pScript, CMasterTemplate *pMaster, CStructTemplate *pParent = 0)
|
||||
|
@ -49,6 +51,8 @@ public:
|
|||
, mpMasterTemplate(pMaster)
|
||||
, mName("UNSET PROPERTY NAME")
|
||||
, mCookPreference(eNoCookPreference)
|
||||
, mHasCachedNameCheck(false)
|
||||
, mCachedNameIsCorrect(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -59,6 +63,8 @@ public:
|
|||
, mpMasterTemplate(pMaster)
|
||||
, mName(rkName)
|
||||
, mCookPreference(CookPreference)
|
||||
, mHasCachedNameCheck(false)
|
||||
, mCachedNameIsCorrect(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -93,6 +99,7 @@ public:
|
|||
virtual bool HasValidRange() const { return false; }
|
||||
virtual TString RangeToString() const { return ""; }
|
||||
virtual TString Suffix() const { return ""; }
|
||||
virtual const char* GetTypeNameString() const { return HashablePropTypeName(Type()); }
|
||||
|
||||
virtual void SetParam(const TString& rkParamName, const TString& rkValue)
|
||||
{
|
||||
|
@ -118,6 +125,7 @@ public:
|
|||
TIDString IDString(bool FullPath) const;
|
||||
bool IsDescendantOf(const CStructTemplate *pStruct) const;
|
||||
bool IsFromStructTemplate() const;
|
||||
bool IsNameCorrect() const;
|
||||
TString FindStructSource() const;
|
||||
CStructTemplate* RootStruct();
|
||||
|
||||
|
@ -129,7 +137,7 @@ public:
|
|||
inline CStructTemplate* Parent() const { return mpParent; }
|
||||
inline CScriptTemplate* ScriptTemplate() const { return mpScriptTemplate; }
|
||||
inline CMasterTemplate* MasterTemplate() const { return mpMasterTemplate; }
|
||||
inline void SetName(const TString& rkName) { mName = rkName; }
|
||||
inline void SetName(const TString& rkName) { mName = rkName; mHasCachedNameCheck = false; }
|
||||
inline void SetDescription(const TString& rkDesc) { mDescription = rkDesc; }
|
||||
};
|
||||
|
||||
|
@ -327,6 +335,13 @@ public:
|
|||
{
|
||||
return new TCharacterProperty(this, pInstance, pParent, CAnimationParameters(Game()));
|
||||
}
|
||||
|
||||
const char* GetTypeNameString() const
|
||||
{
|
||||
return (Game() < eCorruptionProto ? "AnimationParameters" : "CharacterAnimationSet");
|
||||
}
|
||||
|
||||
IMPLEMENT_TEMPLATE_CLONE(TCharacterTemplate)
|
||||
};
|
||||
|
||||
class TSoundTemplate : public TTypedPropertyTemplate<u32, eSoundProperty, CSoundValue, false>
|
||||
|
@ -345,6 +360,8 @@ public:
|
|||
{
|
||||
return new TSoundProperty(this, pInstance, pParent, -1);
|
||||
}
|
||||
|
||||
IMPLEMENT_TEMPLATE_CLONE(TSoundTemplate)
|
||||
};
|
||||
|
||||
class TStringTemplate : public TTypedPropertyTemplate<TString, eStringProperty, CStringValue, false>
|
||||
|
@ -363,6 +380,8 @@ public:
|
|||
{
|
||||
return new TStringProperty(this, pInstance, pParent);
|
||||
}
|
||||
|
||||
IMPLEMENT_TEMPLATE_CLONE(TStringTemplate)
|
||||
};
|
||||
|
||||
class TMayaSplineTemplate : public TTypedPropertyTemplate<std::vector<u8>, eMayaSplineProperty, CMayaSplineValue, false>
|
||||
|
@ -381,6 +400,8 @@ public:
|
|||
{
|
||||
return new TMayaSplineProperty(this, pInstance, pParent);
|
||||
}
|
||||
|
||||
IMPLEMENT_TEMPLATE_CLONE(TMayaSplineTemplate)
|
||||
};
|
||||
|
||||
// CAssetTemplate - Property template for assets. Tracks a list of resource types that
|
||||
|
@ -448,15 +469,18 @@ class CEnumTemplate : public TTypedPropertyTemplate<s32, eEnumProperty, CHexLong
|
|||
};
|
||||
std::vector<SEnumerator> mEnumerators;
|
||||
TString mSourceFile;
|
||||
bool mUsesHashes;
|
||||
|
||||
public:
|
||||
CEnumTemplate(u32 ID, CScriptTemplate *pScript, CMasterTemplate *pMaster, CStructTemplate *pParent = 0)
|
||||
: TTypedPropertyTemplate(ID, pScript, pMaster, pParent)
|
||||
, mUsesHashes(false)
|
||||
{
|
||||
}
|
||||
|
||||
CEnumTemplate(u32 ID, const TString& rkName, ECookPreference CookPreference, CScriptTemplate *pScript, CMasterTemplate *pMaster, CStructTemplate *pParent = 0)
|
||||
: TTypedPropertyTemplate(ID, rkName, CookPreference, pScript, pMaster, pParent)
|
||||
, mUsesHashes(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -480,6 +504,7 @@ public:
|
|||
const CEnumTemplate *pkEnum = static_cast<const CEnumTemplate*>(pkTemp);
|
||||
mEnumerators = pkEnum->mEnumerators;
|
||||
mSourceFile = pkEnum->mSourceFile;
|
||||
mUsesHashes = pkEnum->mUsesHashes;
|
||||
}
|
||||
|
||||
virtual bool Matches(const IPropertyTemplate *pkTemp) const
|
||||
|
@ -488,7 +513,13 @@ public:
|
|||
|
||||
return ( (TTypedPropertyTemplate::Matches(pkTemp)) &&
|
||||
(mEnumerators == pkEnum->mEnumerators) &&
|
||||
(mSourceFile == pkEnum->mSourceFile) );
|
||||
(mSourceFile == pkEnum->mSourceFile) &&
|
||||
(mUsesHashes == pkEnum->mUsesHashes) );
|
||||
}
|
||||
|
||||
virtual const char* GetTypeNameString() const
|
||||
{
|
||||
return (mUsesHashes ? "enum" : "choice");
|
||||
}
|
||||
|
||||
inline TString SourceFile() const { return mSourceFile; }
|
||||
|
@ -603,6 +634,7 @@ protected:
|
|||
std::vector<u32> mVersionPropertyCounts;
|
||||
bool mIsSingleProperty;
|
||||
TString mSourceFile;
|
||||
TString mTypeName;
|
||||
|
||||
void DetermineVersionPropertyCounts();
|
||||
public:
|
||||
|
@ -656,7 +688,8 @@ public:
|
|||
if ( (IPropertyTemplate::Matches(pkTemp)) &&
|
||||
(mVersionPropertyCounts == pkStruct->mVersionPropertyCounts) &&
|
||||
(mIsSingleProperty == pkStruct->mIsSingleProperty) &&
|
||||
(mSourceFile == pkStruct->mSourceFile) )
|
||||
(mSourceFile == pkStruct->mSourceFile) &&
|
||||
(mTypeName == pkStruct->mTypeName) )
|
||||
{
|
||||
return StructDataMatches(pkStruct);
|
||||
}
|
||||
|
@ -664,6 +697,12 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
const char* GetTypeNameString() const
|
||||
{
|
||||
// hack - currently templates embedded within another XML can't have a type name
|
||||
return mTypeName.IsEmpty() ? *mName : *mTypeName;
|
||||
}
|
||||
|
||||
bool StructDataMatches(const CStructTemplate *pkStruct) const
|
||||
{
|
||||
if ( (mIsSingleProperty == pkStruct->mIsSingleProperty) &&
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
#include "CPropertyNameValidator.h"
|
||||
#include <Common/Hash/CCRC32.h>
|
||||
|
||||
CPropertyNameValidator::CPropertyNameValidator(QObject* pParent)
|
||||
: QValidator(pParent)
|
||||
{}
|
||||
|
||||
/** Set the property to validate against */
|
||||
void CPropertyNameValidator::SetProperty(IPropertyTemplate* pProp)
|
||||
{
|
||||
mpProperty = pProp;
|
||||
emit changed();
|
||||
}
|
||||
|
||||
/** Perform validation */
|
||||
QValidator::State CPropertyNameValidator::validate(QString& rInput, int&) const
|
||||
{
|
||||
if (mpProperty)
|
||||
{
|
||||
CCRC32 Hash;
|
||||
Hash.Hash( rInput.toStdString().c_str() );
|
||||
Hash.Hash( mpProperty->GetTypeNameString() );
|
||||
u32 PropertyID = Hash.Digest();
|
||||
|
||||
return ( PropertyID == mpProperty->PropertyID() ? QValidator::Acceptable : QValidator::Invalid );
|
||||
}
|
||||
|
||||
return QValidator::Invalid;
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
#ifndef CPROPERTYNAMEVALIDATOR_H
|
||||
#define CPROPERTYNAMEVALIDATOR_H
|
||||
|
||||
#include <QValidator>
|
||||
#include <Core/Resource/Script/IPropertyTemplate.h>
|
||||
|
||||
/** QValidator subclass that checks if a property name is valid */
|
||||
class CPropertyNameValidator : public QValidator
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
/** The property being validated against */
|
||||
IPropertyTemplate* mpProperty;
|
||||
|
||||
public:
|
||||
CPropertyNameValidator(QObject* pParent = 0);
|
||||
|
||||
/** Set the property to validate against */
|
||||
void SetProperty(IPropertyTemplate* pProp);
|
||||
|
||||
/** Perform validation */
|
||||
QValidator::State validate(QString& rInput, int& rPos) const;
|
||||
};
|
||||
|
||||
#endif // CPROPERTYNAMEVALIDATOR_H
|
|
@ -196,7 +196,10 @@ HEADERS += \
|
|||
Undo/CRenameDirectoryCommand.h \
|
||||
CFileNameValidator.h \
|
||||
Undo/ICreateDeleteDirectoryCommand.h \
|
||||
ResourceBrowser/CVirtualDirectoryTreeView.h
|
||||
ResourceBrowser/CVirtualDirectoryTreeView.h \
|
||||
CPropertyNameValidator.h \
|
||||
Widgets/CSoftValidatorLineEdit.h \
|
||||
Widgets/CValidityLabel.h
|
||||
|
||||
# Source Files
|
||||
SOURCES += \
|
||||
|
@ -270,7 +273,8 @@ SOURCES += \
|
|||
ResourceBrowser/CResourceTableModel.cpp \
|
||||
ResourceBrowser/CResourceTableView.cpp \
|
||||
ResourceBrowser/CVirtualDirectoryModel.cpp \
|
||||
ResourceBrowser/CVirtualDirectoryTreeView.cpp
|
||||
ResourceBrowser/CVirtualDirectoryTreeView.cpp \
|
||||
CPropertyNameValidator.cpp
|
||||
|
||||
# UI Files
|
||||
FORMS += \
|
||||
|
|
|
@ -10,6 +10,7 @@ CPropertyModel::CPropertyModel(QObject *pParent /*= 0*/)
|
|||
: QAbstractItemModel(pParent)
|
||||
, mpBaseStruct(nullptr)
|
||||
, mBoldModifiedProperties(true)
|
||||
, mShowNameValidity(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -442,6 +443,23 @@ QVariant CPropertyModel::data(const QModelIndex& rkIndex, int Role) const
|
|||
return QSize(0, 23);
|
||||
}
|
||||
|
||||
if (Role == Qt::ForegroundRole)
|
||||
{
|
||||
if (mShowNameValidity && mpBaseStruct->Template()->Game() >= eEchoesDemo)
|
||||
{
|
||||
IProperty *pProp = PropertyForIndex(rkIndex, true);
|
||||
IPropertyTemplate *pTemp = (pProp ? pProp->Template() : nullptr);
|
||||
|
||||
// Don't highlight the name of the root property
|
||||
if (pTemp && pTemp->Parent() != nullptr)
|
||||
{
|
||||
static const QColor skRightColor = QColor(128, 255, 128);
|
||||
static const QColor skWrongColor = QColor(255, 128, 128);
|
||||
return QBrush( pTemp->IsNameCorrect() ? skRightColor : skWrongColor );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return QVariant::Invalid;
|
||||
}
|
||||
|
||||
|
@ -585,3 +603,16 @@ void CPropertyModel::ArrayResized(const QModelIndex& rkIndex, u32 OldSize)
|
|||
endRemoveRows();
|
||||
}
|
||||
}
|
||||
|
||||
void CPropertyModel::SetShowPropertyNameValidity(bool Enable)
|
||||
{
|
||||
mShowNameValidity = Enable;
|
||||
|
||||
// Emit data changed so that name colors are updated;
|
||||
QVector<int> Roles;
|
||||
Roles << Qt::ForegroundRole;
|
||||
|
||||
QModelIndex TopLeft = index(0, 0, QModelIndex());
|
||||
QModelIndex BottomRight = index( rowCount(QModelIndex()) - 1, 0, QModelIndex());
|
||||
emit dataChanged(TopLeft, BottomRight, Roles);
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ class CPropertyModel : public QAbstractItemModel
|
|||
|
||||
CPropertyStruct *mpBaseStruct;
|
||||
bool mBoldModifiedProperties;
|
||||
bool mShowNameValidity;
|
||||
QFont mFont;
|
||||
|
||||
public:
|
||||
|
@ -31,6 +32,8 @@ public:
|
|||
void ArrayResized(const QModelIndex& rkIndex, u32 OldSize);
|
||||
void ResizeArray(const QModelIndex& rkIndex, u32 NewSize);
|
||||
|
||||
void SetShowPropertyNameValidity(bool Enable);
|
||||
|
||||
inline void SetFont(QFont Font) { mFont = Font; }
|
||||
inline void SetBoldModifiedProperties(bool Enable) { mBoldModifiedProperties = Enable; }
|
||||
|
||||
|
|
|
@ -19,6 +19,12 @@ CPropertyView::CPropertyView(QWidget *pParent)
|
|||
setModel(mpModel);
|
||||
|
||||
setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
|
||||
mpShowNameValidityAction = new QAction("Show whether property name is correct", this);
|
||||
mpShowNameValidityAction->setCheckable(true);
|
||||
mpShowNameValidityAction->setChecked(false);
|
||||
connect(mpShowNameValidityAction, SIGNAL(triggered(bool)), this, SLOT(ToggleShowNameValidity(bool)));
|
||||
|
||||
mpEditTemplateAction = new QAction("Edit template", this);
|
||||
connect(mpEditTemplateAction, SIGNAL(triggered()), this, SLOT(EditPropertyTemplate()));
|
||||
|
||||
|
@ -216,10 +222,21 @@ void CPropertyView::CreateContextMenu(const QPoint& rkPos)
|
|||
|
||||
QMenu Menu;
|
||||
Menu.addAction(mpEditTemplateAction);
|
||||
|
||||
if (mpEditor->CurrentGame() >= eEchoesDemo)
|
||||
{
|
||||
Menu.addAction(mpShowNameValidityAction);
|
||||
}
|
||||
|
||||
Menu.exec(viewport()->mapToGlobal(rkPos));
|
||||
}
|
||||
}
|
||||
|
||||
void CPropertyView::ToggleShowNameValidity(bool ShouldShow)
|
||||
{
|
||||
mpModel->SetShowPropertyNameValidity(ShouldShow);
|
||||
}
|
||||
|
||||
void CPropertyView::EditPropertyTemplate()
|
||||
{
|
||||
CTemplateEditDialog Dialog(mpMenuProperty->Template(), mpEditor);
|
||||
|
|
|
@ -16,6 +16,7 @@ class CPropertyView : public QTreeView
|
|||
CScriptObject *mpObject;
|
||||
|
||||
IProperty *mpMenuProperty;
|
||||
QAction *mpShowNameValidityAction;
|
||||
QAction *mpEditTemplateAction;
|
||||
|
||||
public:
|
||||
|
@ -34,6 +35,7 @@ public slots:
|
|||
void OnPropertyModified(const QModelIndex& rkIndex);
|
||||
|
||||
void CreateContextMenu(const QPoint& rkPos);
|
||||
void ToggleShowNameValidity(bool ShouldShow);
|
||||
void EditPropertyTemplate();
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,125 @@
|
|||
#ifndef CSOFTVALIDATORLINEEDIT_H
|
||||
#define CSOFTVALIDATORLINEEDIT_H
|
||||
|
||||
#include "CTimedLineEdit.h"
|
||||
#include <QValidator>
|
||||
|
||||
/**
|
||||
* A QLineEdit subclass that can use a QValidator to check if the input meets certain criteria.
|
||||
* If the criteria is met, the line edit has a green outline; otherwise, a red outline.
|
||||
* Unlike the normal QLineEdit validator, the effects of this are strictly cosmetic.
|
||||
*/
|
||||
class CSoftValidatorLineEdit : public CTimedLineEdit
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
/** The validator that input is checked against */
|
||||
QValidator* mpSoftValidator;
|
||||
|
||||
/** Whether to only validate when the user stops typing. Good for slow validators. */
|
||||
bool mOnlyValidateOnFinishedTyping;
|
||||
|
||||
/** Whether the current input is valid */
|
||||
bool mInputIsValid;
|
||||
|
||||
signals:
|
||||
/** Emitted when the validity of the input changes */
|
||||
void SoftValidityChanged(bool NewValid);
|
||||
|
||||
protected slots:
|
||||
/** Internal update function */
|
||||
void InternalUpdate()
|
||||
{
|
||||
bool NewValidity = false;
|
||||
|
||||
if ( mpSoftValidator )
|
||||
{
|
||||
int DummyPos;
|
||||
if ( mpSoftValidator->validate(text(), DummyPos) == QValidator::Acceptable )
|
||||
{
|
||||
NewValidity = true;
|
||||
setStyleSheet("border: 1px solid green");
|
||||
}
|
||||
else
|
||||
{
|
||||
NewValidity = false;
|
||||
setStyleSheet("border: 1px solid red");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
NewValidity = true;
|
||||
setStyleSheet("");
|
||||
}
|
||||
|
||||
if (NewValidity != mInputIsValid)
|
||||
{
|
||||
mInputIsValid = NewValidity;
|
||||
emit SoftValidityChanged(mInputIsValid);
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
CSoftValidatorLineEdit(QWidget *pParent = 0)
|
||||
: CTimedLineEdit(pParent)
|
||||
, mpSoftValidator(nullptr)
|
||||
, mOnlyValidateOnFinishedTyping(false)
|
||||
, mInputIsValid(true)
|
||||
{}
|
||||
|
||||
/** Set the soft validator to use */
|
||||
void SetSoftValidator(QValidator* pValidator)
|
||||
{
|
||||
if (mpSoftValidator)
|
||||
{
|
||||
disconnect(mpSoftValidator);
|
||||
mpSoftValidator = nullptr;
|
||||
}
|
||||
|
||||
if (pValidator)
|
||||
{
|
||||
mpSoftValidator = pValidator;
|
||||
connect(mpSoftValidator, SIGNAL(changed()), this, SLOT(InternalUpdate()));
|
||||
}
|
||||
|
||||
InternalUpdate();
|
||||
}
|
||||
|
||||
/** Set whether the input should only be validated when the user finishes typing. */
|
||||
void SetOnlyDoSoftValidationOnFinishedTyping(bool Enable)
|
||||
{
|
||||
mOnlyValidateOnFinishedTyping = Enable;
|
||||
|
||||
if (!mOnlyValidateOnFinishedTyping)
|
||||
InternalUpdate();
|
||||
}
|
||||
|
||||
/** Check whether the input is valid */
|
||||
inline bool IsInputValid() const
|
||||
{
|
||||
return mInputIsValid;
|
||||
}
|
||||
|
||||
public slots:
|
||||
virtual void OnTextChanged()
|
||||
{
|
||||
CTimedLineEdit::OnTextChanged();
|
||||
|
||||
if (!mOnlyValidateOnFinishedTyping)
|
||||
{
|
||||
InternalUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnTimeout()
|
||||
{
|
||||
CTimedLineEdit::OnTimeout();
|
||||
|
||||
if (mOnlyValidateOnFinishedTyping)
|
||||
{
|
||||
InternalUpdate();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#endif // CSOFTVALIDATORLINEEDIT_H
|
|
@ -0,0 +1,71 @@
|
|||
#ifndef CVALIDITYLABEL_H
|
||||
#define CVALIDITYLABEL_H
|
||||
|
||||
#include <QLabel>
|
||||
|
||||
/** QLabel subclass that displays different text in either red or green depending on a flag. */
|
||||
class CValidityLabel : public QLabel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
/** String to display if valid */
|
||||
QString mValidString;
|
||||
|
||||
/** String to display if invalid */
|
||||
QString mInvalidString;
|
||||
|
||||
/** Whether we are displaying the valid or invalid string */
|
||||
bool mValid;
|
||||
|
||||
public:
|
||||
CValidityLabel(QWidget* pParent = 0)
|
||||
: QLabel(pParent)
|
||||
{
|
||||
SetValid(true);
|
||||
}
|
||||
|
||||
CValidityLabel(const QString& rkValidText, const QString& rkInvalidText, QWidget* pParent = 0)
|
||||
: QLabel( rkValidText, pParent )
|
||||
, mValidString( rkValidText )
|
||||
, mInvalidString( rkInvalidText )
|
||||
{
|
||||
SetValid(true);
|
||||
}
|
||||
|
||||
/** Configure the strings to display */
|
||||
void SetValidityText(const QString& rkValidText, const QString& rkInvalidText)
|
||||
{
|
||||
mValidString = rkValidText;
|
||||
mInvalidString = rkInvalidText;
|
||||
setText(mValid ? mValidString : mInvalidString);
|
||||
}
|
||||
|
||||
/** Returns whether we are valid */
|
||||
inline bool IsValid() const
|
||||
{
|
||||
return mValid;
|
||||
}
|
||||
|
||||
public slots:
|
||||
/** Updates the label as either valid or invalid */
|
||||
void SetValid(bool Valid)
|
||||
{
|
||||
mValid = Valid;
|
||||
QPalette NewPalette;
|
||||
|
||||
if (mValid)
|
||||
{
|
||||
NewPalette.setColor( foregroundRole(), Qt::green );
|
||||
setText(mValidString);
|
||||
}
|
||||
else
|
||||
{
|
||||
NewPalette.setColor( foregroundRole(), Qt::red );
|
||||
setText(mInvalidString);
|
||||
}
|
||||
|
||||
setPalette(NewPalette);
|
||||
}
|
||||
};
|
||||
|
||||
#endif // CVALIDITYLABEL_H
|
|
@ -8,23 +8,26 @@
|
|||
|
||||
CTemplateEditDialog::CTemplateEditDialog(IPropertyTemplate *pTemplate, QWidget *pParent)
|
||||
: QDialog(pParent)
|
||||
, ui(new Ui::CTemplateEditDialog)
|
||||
, mpUI(new Ui::CTemplateEditDialog)
|
||||
, mpValidator(new CPropertyNameValidator(this))
|
||||
, mpTemplate(pTemplate)
|
||||
, mGame(pTemplate->Game())
|
||||
, mOriginalName(pTemplate->Name())
|
||||
, mOriginalDescription(pTemplate->Description())
|
||||
, mOriginalNameWasValid(true)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
mpUI->setupUi(this);
|
||||
|
||||
ui->IDDisplayLabel->setText(TO_QSTRING(pTemplate->IDString(false)));
|
||||
ui->PathDisplayLabel->setText(TO_QSTRING(pTemplate->IDString(true)));
|
||||
ui->NameLineEdit->setText(TO_QSTRING(pTemplate->Name()));
|
||||
ui->DescriptionTextEdit->setPlainText(TO_QSTRING(pTemplate->Description()));
|
||||
mpUI->IDDisplayLabel->setText(TO_QSTRING(pTemplate->IDString(false)));
|
||||
mpUI->PathDisplayLabel->setText(TO_QSTRING(pTemplate->IDString(true)));
|
||||
mpUI->NameLineEdit->setText(TO_QSTRING(pTemplate->Name()));
|
||||
mpUI->DescriptionTextEdit->setPlainText(TO_QSTRING(pTemplate->Description()));
|
||||
|
||||
if (mGame <= ePrime)
|
||||
{
|
||||
ui->TemplatesGroupBox->hide();
|
||||
ui->RenameAllCheckBox->setText("Rename all copies of this property");
|
||||
mpUI->TemplatesGroupBox->hide();
|
||||
mpUI->RenameAllCheckBox->setText("Rename all copies of this property");
|
||||
mpUI->ValidityLabel->hide();
|
||||
resize(width(), minimumHeight());
|
||||
}
|
||||
|
||||
|
@ -34,7 +37,14 @@ CTemplateEditDialog::CTemplateEditDialog(IPropertyTemplate *pTemplate, QWidget *
|
|||
std::vector<TString> TemplateList = CMasterTemplate::XMLsUsingID(pTemplate->PropertyID());
|
||||
|
||||
for (u32 iTemp = 0; iTemp < TemplateList.size(); iTemp++)
|
||||
ui->TemplatesListWidget->addItem(TO_QSTRING(TemplateList[iTemp]));
|
||||
mpUI->TemplatesListWidget->addItem(TO_QSTRING(TemplateList[iTemp]));
|
||||
|
||||
mpUI->ValidityLabel->SetValidityText("Hash match! Property name is likely correct.", "Hash mismatch! Property name is likely wrong.");
|
||||
connect(mpUI->NameLineEdit, SIGNAL( SoftValidityChanged(bool) ), mpUI->ValidityLabel, SLOT( SetValid(bool) ) );
|
||||
|
||||
mpValidator->SetProperty(pTemplate);
|
||||
mpUI->NameLineEdit->SetSoftValidator(mpValidator);
|
||||
mOriginalNameWasValid = mpUI->NameLineEdit->IsInputValid();
|
||||
}
|
||||
|
||||
TString Source;
|
||||
|
@ -65,26 +75,36 @@ CTemplateEditDialog::CTemplateEditDialog(IPropertyTemplate *pTemplate, QWidget *
|
|||
Source = "None";
|
||||
}
|
||||
|
||||
ui->SourceFileDisplayLabel->setText(TO_QSTRING(Source));
|
||||
mpUI->SourceFileDisplayLabel->setText(TO_QSTRING(Source));
|
||||
|
||||
connect(ui->ButtonBox, SIGNAL(accepted()), this, SLOT(ApplyChanges()));
|
||||
connect(ui->ButtonBox, SIGNAL(rejected()), this, SLOT(close()));
|
||||
connect(mpUI->ButtonBox, SIGNAL(accepted()), this, SLOT(ApplyChanges()));
|
||||
connect(mpUI->ButtonBox, SIGNAL(rejected()), this, SLOT(close()));
|
||||
}
|
||||
|
||||
CTemplateEditDialog::~CTemplateEditDialog()
|
||||
{
|
||||
delete ui;
|
||||
delete mpUI;
|
||||
}
|
||||
|
||||
// ************ PUBLIC SLOTS ************
|
||||
void CTemplateEditDialog::ApplyChanges()
|
||||
{
|
||||
// Make sure the user *really* wants to change the property if the hash used to be correct and now isn't...
|
||||
if (mOriginalNameWasValid && !mpUI->NameLineEdit->IsInputValid())
|
||||
{
|
||||
bool ReallyApply = UICommon::YesNoQuestion(this, "Name mismatch",
|
||||
"The new property name does not match the property ID. It is very likely that the original name was correct and the new one isn't. Are you sure you want to change it?");
|
||||
|
||||
if (!ReallyApply)
|
||||
return;
|
||||
}
|
||||
|
||||
FindEquivalentProperties(mpTemplate);
|
||||
|
||||
bool NeedsListResave = false;
|
||||
bool RenameAll = ui->RenameAllCheckBox->isChecked();
|
||||
bool RenameAll = mpUI->RenameAllCheckBox->isChecked();
|
||||
|
||||
TString NewName = TO_TSTRING(ui->NameLineEdit->text());
|
||||
TString NewName = TO_TSTRING(mpUI->NameLineEdit->text());
|
||||
if (NewName.IsEmpty()) NewName = "Unknown";
|
||||
|
||||
if (mOriginalName != NewName)
|
||||
|
@ -110,7 +130,7 @@ void CTemplateEditDialog::ApplyChanges()
|
|||
NeedsListResave = true;
|
||||
}
|
||||
|
||||
TString NewDescription = TO_TSTRING(ui->DescriptionTextEdit->toPlainText());
|
||||
TString NewDescription = TO_TSTRING(mpUI->DescriptionTextEdit->toPlainText());
|
||||
UpdateDescription(NewDescription);
|
||||
|
||||
// Resave templates
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef CTEMPLATEEDITDIALOG_H
|
||||
#define CTEMPLATEEDITDIALOG_H
|
||||
|
||||
#include "Editor/CPropertyNameValidator.h"
|
||||
#include <Core/Resource/Script/IPropertyTemplate.h>
|
||||
#include <Core/Resource/Script/CMasterTemplate.h>
|
||||
#include <QDialog>
|
||||
|
@ -12,13 +13,15 @@ class CTemplateEditDialog;
|
|||
class CTemplateEditDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
Ui::CTemplateEditDialog *ui;
|
||||
Ui::CTemplateEditDialog* mpUI;
|
||||
CPropertyNameValidator* mpValidator;
|
||||
|
||||
IPropertyTemplate *mpTemplate;
|
||||
EGame mGame;
|
||||
|
||||
TString mOriginalName;
|
||||
TString mOriginalDescription;
|
||||
bool mOriginalNameWasValid;
|
||||
|
||||
// These members help track what templates need to be updated and resaved after the user clicks OK
|
||||
QVector<CScriptTemplate*> mScriptTemplatesToResave;
|
||||
|
|
|
@ -13,9 +13,9 @@
|
|||
<property name="windowTitle">
|
||||
<string>Edit Template</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<layout class="QFormLayout" name="PropertyDataForm">
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="IDLabel">
|
||||
<property name="text">
|
||||
|
@ -62,6 +62,26 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="SourceFileLabel">
|
||||
<property name="text">
|
||||
<string>Source File:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="SourceFileDisplayLabel">
|
||||
<property name="cursor">
|
||||
<cursorShape>IBeamCursor</cursorShape>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>SOURCE FILE GOES HERE</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="NameLabel">
|
||||
<property name="text">
|
||||
|
@ -70,7 +90,31 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="NameLineEdit"/>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="CSoftValidatorLineEdit" name="NameLineEdit"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CValidityLabel" name="ValidityLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>7</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Valid</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="DescriptionLabel">
|
||||
|
@ -104,26 +148,6 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="SourceFileLabel">
|
||||
<property name="text">
|
||||
<string>Source File:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="SourceFileDisplayLabel">
|
||||
<property name="cursor">
|
||||
<cursorShape>IBeamCursor</cursorShape>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>SOURCE FILE GOES HERE</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -205,6 +229,18 @@
|
|||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>CSoftValidatorLineEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>Editor/Widgets/CSoftValidatorLineEdit.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>CValidityLabel</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>Editor/Widgets/CValidityLabel.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Properties version="4">
|
||||
<property ID="0x0001F679" name="Unknown"/>
|
||||
<property ID="0x000E4BAE" name="Sky Temple Key 5"/>
|
||||
<property ID="0x000E4BAE" name="TempleKey5"/>
|
||||
<property ID="0x00183589" name="LockFire"/>
|
||||
<property ID="0x001DDB4F" name="UnknownStruct1"/>
|
||||
<property ID="0x002444C6" name="Light Beam"/>
|
||||
<property ID="0x002444C6" name="Light"/>
|
||||
<property ID="0x002BA56D" name="Unknown"/>
|
||||
<property ID="0x002CFE87" name="RobotChickenFlyerStructB"/>
|
||||
<property ID="0x002F1E9D" name="Unknown"/>
|
||||
|
@ -251,7 +251,7 @@
|
|||
<property ID="0x05A5D4D0" name="Unknown"/>
|
||||
<property ID="0x05A79779" name="Unknown"/>
|
||||
<property ID="0x05A84EE6" name="FlareDef"/>
|
||||
<property ID="0x05AD250E" name="VisorParameters"/>
|
||||
<property ID="0x05AD250E" name="Visor"/>
|
||||
<property ID="0x05C5FC6E" name="Unknown"/>
|
||||
<property ID="0x05C67D0B" name="Unknown"/>
|
||||
<property ID="0x05C79560" name="CAUD"/>
|
||||
|
@ -429,7 +429,7 @@
|
|||
<property ID="0x0A5848FB" name="Unknown"/>
|
||||
<property ID="0x0A62C650" name="UnknownStruct1"/>
|
||||
<property ID="0x0A693A04" name="AudioPlaybackParms"/>
|
||||
<property ID="0x0A6B376F" name="Seeker Launcher"/>
|
||||
<property ID="0x0A6B376F" name="Seeker"/>
|
||||
<property ID="0x0A7326A3" name="DamageVulnerability"/>
|
||||
<property ID="0x0A7846EC" name="Unknown"/>
|
||||
<property ID="0x0A7A4155" name="Unknown"/>
|
||||
|
@ -728,7 +728,7 @@
|
|||
<property ID="0x118F6E87" name="Unknown"/>
|
||||
<property ID="0x119959F2" name="Unknown"/>
|
||||
<property ID="0x119E75AC" name="Unknown"/>
|
||||
<property ID="0x119FBD31" name="WeaponType"/>
|
||||
<property ID="0x119FBD31" name="DI_WeaponType"/>
|
||||
<property ID="0x11A273CB" name="Upper Left Wing Target"/>
|
||||
<property ID="0x11A73408" name="Unknown"/>
|
||||
<property ID="0x11AA184B" name="Unknown"/>
|
||||
|
@ -779,7 +779,7 @@
|
|||
<property ID="0x12AADA70" name="Unknown"/>
|
||||
<property ID="0x12AFE499" name="CAUD"/>
|
||||
<property ID="0x12B8E543" name="ShockWaveInfo"/>
|
||||
<property ID="0x12BBE440" name="Sky Temple Key 6"/>
|
||||
<property ID="0x12BBE440" name="TempleKey6"/>
|
||||
<property ID="0x12CBCDB4" name="Unknown"/>
|
||||
<property ID="0x12D1F873" name="Unknown"/>
|
||||
<property ID="0x12D3165C" name="UnknownStruct6"/>
|
||||
|
@ -968,7 +968,7 @@
|
|||
<property ID="0x16C1FDDB" name="Unknown"/>
|
||||
<property ID="0x16C9F38E" name="Unknown"/>
|
||||
<property ID="0x16D20640" name="Unknown"/>
|
||||
<property ID="0x16D89ACC" name="Sonic Boom"/>
|
||||
<property ID="0x16D89ACC" name="AnnihilatorBeamCombo"/>
|
||||
<property ID="0x16D9A75D" name="Saved State ID"/>
|
||||
<property ID="0x16E6E8BD" name="PART"/>
|
||||
<property ID="0x16E7D74A" name="CRSC"/>
|
||||
|
@ -1150,7 +1150,7 @@
|
|||
<property ID="0x1AAE3DB5" name="PlasmaBeamInfo"/>
|
||||
<property ID="0x1AAF4C43" name="Unknown"/>
|
||||
<property ID="0x1AB2B090" name="PART"/>
|
||||
<property ID="0x1AB78BEF" name="Darkburst"/>
|
||||
<property ID="0x1AB78BEF" name="BlackHole"/>
|
||||
<property ID="0x1AB843D9" name="Unknown"/>
|
||||
<property ID="0x1ABE5CCD" name="Option 2"/>
|
||||
<property ID="0x1AC1247F" name="Unknown"/>
|
||||
|
@ -1233,7 +1233,7 @@
|
|||
<property ID="0x1C30F1A6" name="Unknown"/>
|
||||
<property ID="0x1C3A365C" name="Unknown"/>
|
||||
<property ID="0x1C3E84B6" name="Sound"/>
|
||||
<property ID="0x1C453986" name="Deactivate On Exited"/>
|
||||
<property ID="0x1C453986" name="DeactivateOnExit"/>
|
||||
<property ID="0x1C5687CC" name="Unknown"/>
|
||||
<property ID="0x1C5B4A3A" name="ScanInfoSecondaryModel"/>
|
||||
<property ID="0x1C5C303B" name="Unknown"/>
|
||||
|
@ -1279,7 +1279,7 @@
|
|||
<property ID="0x1D3DC638" name="Unknown"/>
|
||||
<property ID="0x1D49D35C" name="Unknown"/>
|
||||
<property ID="0x1D510C6C" name="WPSC"/>
|
||||
<property ID="0x1D52588D" name="WeaponVulnerability"/>
|
||||
<property ID="0x1D52588D" name="AreaDamageHot"/>
|
||||
<property ID="0x1D53D1DA" name="CAUD"/>
|
||||
<property ID="0x1D5CCC2D" name="CMDL"/>
|
||||
<property ID="0x1D5FB7D6" name="DamageInfo"/>
|
||||
|
@ -1637,7 +1637,7 @@
|
|||
<property ID="0x255A4580" name="EditorProperties"/>
|
||||
<property ID="0x255F33BC" name="Unknown"/>
|
||||
<property ID="0x2564EE27" name="DamageInfo"/>
|
||||
<property ID="0x25651472" name="Sky Temple Key 3"/>
|
||||
<property ID="0x25651472" name="TempleKey3"/>
|
||||
<property ID="0x256B394F" name="Unknown"/>
|
||||
<property ID="0x25717ACE" name="Unknown"/>
|
||||
<property ID="0x257FE26E" name="Unknown"/>
|
||||
|
@ -1845,7 +1845,7 @@
|
|||
<property ID="0x29FC6554" name="Unknown"/>
|
||||
<property ID="0x2A01734F" name="Unknown"/>
|
||||
<property ID="0x2A05E6D9" name="Unknown"/>
|
||||
<property ID="0x2A0F0524" name="Dark (Charged)"/>
|
||||
<property ID="0x2A0F0524" name="Entangler"/>
|
||||
<property ID="0x2A1D3A89" name="Unknown"/>
|
||||
<property ID="0x2A247EDE" name="Unknown"/>
|
||||
<property ID="0x2A2E4100" name="Unknown"/>
|
||||
|
@ -2174,7 +2174,7 @@
|
|||
<property ID="0x31111D41" name="Map Move Left"/>
|
||||
<property ID="0x311759A0" name="UnknownStruct2"/>
|
||||
<property ID="0x311B0750" name="Unknown"/>
|
||||
<property ID="0x311FB061" name="Sonic Boom"/>
|
||||
<property ID="0x311FB061" name="Imploder"/>
|
||||
<property ID="0x3127E68A" name="Unknown"/>
|
||||
<property ID="0x3128976F" name="Unknown"/>
|
||||
<property ID="0x312E194A" name="Unknown"/>
|
||||
|
@ -2212,11 +2212,11 @@
|
|||
<property ID="0x31FF1A31" name="Unknown"/>
|
||||
<property ID="0x31FFBFE7" name="Unknown"/>
|
||||
<property ID="0x320333AA" name="Unknown"/>
|
||||
<property ID="0x32052F91" name="Light Ammo"/>
|
||||
<property ID="0x32052F91" name="LightBeamAmmo"/>
|
||||
<property ID="0x320723A9" name="Unknown"/>
|
||||
<property ID="0x32133B39" name="Unknown"/>
|
||||
<property ID="0x32152AB2" name="Unknown"/>
|
||||
<property ID="0x3217DFF8" name="Auto-Start"/>
|
||||
<property ID="0x3217DFF8" name="AutoStart"/>
|
||||
<property ID="0x321C97A9" name="PART"/>
|
||||
<property ID="0x321FAE5B" name="Unknown"/>
|
||||
<property ID="0x3221407E" name="PART"/>
|
||||
|
@ -2275,7 +2275,7 @@
|
|||
<property ID="0x3376814D" name="CMDL"/>
|
||||
<property ID="0x337C4056" name="Unknown"/>
|
||||
<property ID="0x337E60A9" name="Unknown"/>
|
||||
<property ID="0x337F9524" name="DamageInfo"/>
|
||||
<property ID="0x337F9524" name="Damage"/>
|
||||
<property ID="0x33868C8F" name="PART"/>
|
||||
<property ID="0x338C748D" name="SeedBoss1Stage"/>
|
||||
<property ID="0x3390E915" name="Unknown"/>
|
||||
|
@ -2438,7 +2438,7 @@
|
|||
<property ID="0x373BEBE3" name="SwarmSoundData"/>
|
||||
<property ID="0x374C17BA" name="Unknown"/>
|
||||
<property ID="0x37564B7D" name="Unknown"/>
|
||||
<property ID="0x375BFD7C" name="ScannableParameters"/>
|
||||
<property ID="0x375BFD7C" name="Scannable"/>
|
||||
<property ID="0x375F1663" name="CAUD"/>
|
||||
<property ID="0x376181E9" name="Unknown"/>
|
||||
<property ID="0x3761C8E8" name="Unknown"/>
|
||||
|
@ -2569,7 +2569,7 @@
|
|||
<property ID="0x3A1AFF1F" name="STRG"/>
|
||||
<property ID="0x3A20FB9B" name="Unknown"/>
|
||||
<property ID="0x3A25F09D" name="Unknown"/>
|
||||
<property ID="0x3A2D17E4" name="Knockback Resistance"/>
|
||||
<property ID="0x3A2D17E4" name="HI_KnockBackResistance"/>
|
||||
<property ID="0x3A2D1AA4" name="WPSC"/>
|
||||
<property ID="0x3A32DFCB" name="Unknown"/>
|
||||
<property ID="0x3A3E03BA" name="Collision Scale"/>
|
||||
|
@ -2712,7 +2712,7 @@
|
|||
<property ID="0x3D45EC67" name="Unknown"/>
|
||||
<property ID="0x3D46B799" name="Unknown"/>
|
||||
<property ID="0x3D58F51F" name="Unknown"/>
|
||||
<property ID="0x3D625F10" name="WeaponVulnerability"/>
|
||||
<property ID="0x3D625F10" name="AreaDamageDark"/>
|
||||
<property ID="0x3D6768D8" name="SCAN"/>
|
||||
<property ID="0x3D689EDD" name="Unknown"/>
|
||||
<property ID="0x3D69D750" name="Unknown"/>
|
||||
|
@ -3031,7 +3031,7 @@
|
|||
<property ID="0x44303A9C" name="Unknown"/>
|
||||
<property ID="0x4432C4FE" name="Unknown"/>
|
||||
<property ID="0x4432CCD6" name="Unknown"/>
|
||||
<property ID="0x44335AFF" name="Start Time"/>
|
||||
<property ID="0x44335AFF" name="Time"/>
|
||||
<property ID="0x44337A05" name="Unknown"/>
|
||||
<property ID="0x4436A388" name="DamageInfo"/>
|
||||
<property ID="0x443FB4E4" name="Unknown"/>
|
||||
|
@ -3352,7 +3352,7 @@
|
|||
<property ID="0x4ACC5921" name="Unknown"/>
|
||||
<property ID="0x4AD191DB" name="Unknown"/>
|
||||
<property ID="0x4AD656DA" name="Unknown"/>
|
||||
<property ID="0x4AD8F416" name="Sky Temple Key 9"/>
|
||||
<property ID="0x4AD8F416" name="TempleKey9"/>
|
||||
<property ID="0x4AE27FE7" name="Unknown"/>
|
||||
<property ID="0x4AE57FEB" name="CMDL"/>
|
||||
<property ID="0x4AE8523D" name="Unknown"/>
|
||||
|
@ -3623,7 +3623,7 @@
|
|||
<property ID="0x50BAEE63" name="AudioPlaybackParms"/>
|
||||
<property ID="0x50C31684" name="Unknown"/>
|
||||
<property ID="0x50D4E6DD" name="Unknown"/>
|
||||
<property ID="0x50DDE891" name="WeaponVulnerability"/>
|
||||
<property ID="0x50DDE891" name="PoisonWater"/>
|
||||
<property ID="0x50DE5441" name="Unknown"/>
|
||||
<property ID="0x50E45EA8" name="Sound"/>
|
||||
<property ID="0x50E46527" name="Unknown"/>
|
||||
|
@ -3734,7 +3734,7 @@
|
|||
<property ID="0x53336141" name="Unknown"/>
|
||||
<property ID="0x53336240" name="Unknown"/>
|
||||
<property ID="0x53366BBD" name="Unknown"/>
|
||||
<property ID="0x53387689" name="Morph Ball Bomb"/>
|
||||
<property ID="0x53387689" name="Bomb"/>
|
||||
<property ID="0x533C5684" name="Unknown"/>
|
||||
<property ID="0x53401390" name="Unknown"/>
|
||||
<property ID="0x5344D2F7" name="Aim Hold"/>
|
||||
|
@ -3819,17 +3819,17 @@
|
|||
<property ID="0x552DB72C" name="CAUD"/>
|
||||
<property ID="0x552F7242" name="BirdBossData"/>
|
||||
<property ID="0x552F8118" name="Unknown"/>
|
||||
<property ID="0x553B1339" name="DamageInfo"/>
|
||||
<property ID="0x553B1339" name="ProjectileDamage"/>
|
||||
<property ID="0x55477700" name="Unknown"/>
|
||||
<property ID="0x554B3450" name="CAUD"/>
|
||||
<property ID="0x55571199" name="ShockWaveInfo"/>
|
||||
<property ID="0x55578CFC" name="SandwormStruct"/>
|
||||
<property ID="0x555B055E" name="Unknown"/>
|
||||
<property ID="0x555FF80A" name="Knockback Power"/>
|
||||
<property ID="0x555FF80A" name="DI_KnockBackPower"/>
|
||||
<property ID="0x5562C40D" name="ELSC"/>
|
||||
<property ID="0x556481E8" name="Unknown"/>
|
||||
<property ID="0x5566B6E4" name="Unknown"/>
|
||||
<property ID="0x55744160" name="AFSM"/>
|
||||
<property ID="0x55744160" name="StateMachine"/>
|
||||
<property ID="0x5574A8ED" name="Unknown"/>
|
||||
<property ID="0x557AB710" name="Unknown"/>
|
||||
<property ID="0x558147C0" name="Unknown"/>
|
||||
|
@ -3933,7 +3933,7 @@
|
|||
<property ID="0x57D7BA36" name="Unknown"/>
|
||||
<property ID="0x57E40DC7" name="Unknown"/>
|
||||
<property ID="0x57E862AA" name="Unknown"/>
|
||||
<property ID="0x57EB9E8B" name="Unknown"/>
|
||||
<property ID="0x57EB9E8B" name="LightBomb"/>
|
||||
<property ID="0x57F0A2A7" name="Unknown"/>
|
||||
<property ID="0x57F7EFF9" name="ELSC"/>
|
||||
<property ID="0x57FEE02A" name="Unknown"/>
|
||||
|
@ -3988,7 +3988,7 @@
|
|||
<property ID="0x5908EF39" name="Unknown"/>
|
||||
<property ID="0x591125C3" name="UnknownStruct25"/>
|
||||
<property ID="0x59148173" name="Unknown"/>
|
||||
<property ID="0x591B80E3" name="WeaponVulnerability"/>
|
||||
<property ID="0x591B80E3" name="AreaDamageLight"/>
|
||||
<property ID="0x591CD695" name="Unknown"/>
|
||||
<property ID="0x591DA5B4" name="Unknown"/>
|
||||
<property ID="0x59276E14" name="Unknown"/>
|
||||
|
@ -4090,7 +4090,7 @@
|
|||
<property ID="0x5BA7702E" name="Always FF?"/>
|
||||
<property ID="0x5BA82F66" name="Unknown"/>
|
||||
<property ID="0x5BA86245" name="PART"/>
|
||||
<property ID="0x5BA991B1" name="Annihilator (Charged)"/>
|
||||
<property ID="0x5BA991B1" name="SonicBoom"/>
|
||||
<property ID="0x5BB59A3B" name="Unknown"/>
|
||||
<property ID="0x5BBB6EC9" name="Unknown"/>
|
||||
<property ID="0x5BBBE79E" name="Unknown"/>
|
||||
|
@ -4486,7 +4486,7 @@
|
|||
<property ID="0x64C22667" name="CAUD"/>
|
||||
<property ID="0x64C7990D" name="Unknown"/>
|
||||
<property ID="0x64D482D5" name="Unknown"/>
|
||||
<property ID="0x64DDD543" name="WeaponVulnerability"/>
|
||||
<property ID="0x64DDD543" name="AreaDamageCold"/>
|
||||
<property ID="0x64E5FE9F" name="Unknown"/>
|
||||
<property ID="0x64E9152D" name="Sound"/>
|
||||
<property ID="0x64EDCEF1" name="Unknown"/>
|
||||
|
@ -4655,7 +4655,7 @@
|
|||
<property ID="0x686E030B" name="Unknown"/>
|
||||
<property ID="0x68737A67" name="Unknown"/>
|
||||
<property ID="0x68738246" name="Unknown"/>
|
||||
<property ID="0x68780737" name="Dark Agon Key 3"/>
|
||||
<property ID="0x68780737" name="SandKey3"/>
|
||||
<property ID="0x687DF7A3" name="Unknown"/>
|
||||
<property ID="0x68865410" name="CMDL"/>
|
||||
<property ID="0x68926CCD" name="SpindlePositionInterpolant"/>
|
||||
|
@ -4690,7 +4690,7 @@
|
|||
<property ID="0x691B244D" name="Unknown"/>
|
||||
<property ID="0x691E6360" name="Unknown"/>
|
||||
<property ID="0x692267EA" name="TranslationSplines"/>
|
||||
<property ID="0x6924B8C1" name="Super Missile"/>
|
||||
<property ID="0x6924B8C1" name="SuperMissle"/>
|
||||
<property ID="0x692FA63C" name="AudioPlaybackParms"/>
|
||||
<property ID="0x6930C945" name="STRG"/>
|
||||
<property ID="0x69415FAE" name="Unknown"/>
|
||||
|
@ -4782,7 +4782,7 @@
|
|||
<property ID="0x6B016DB2" name="STRG"/>
|
||||
<property ID="0x6B08E2E5" name="IngSpaceJumpGuardianStruct"/>
|
||||
<property ID="0x6B08F2F2" name="Unknown"/>
|
||||
<property ID="0x6B1FBC3A" name="Echo Visor Model"/>
|
||||
<property ID="0x6B1FBC3A" name="EchoModel"/>
|
||||
<property ID="0x6B20BDB0" name="Unknown"/>
|
||||
<property ID="0x6B32E09E" name="Unknown"/>
|
||||
<property ID="0x6B40ACEF" name="Unknown"/>
|
||||
|
@ -4903,7 +4903,7 @@
|
|||
<property ID="0x6D62EF74" name="Unknown"/>
|
||||
<property ID="0x6D67C284" name="Unknown"/>
|
||||
<property ID="0x6D6C84CB" name="Unknown"/>
|
||||
<property ID="0x6D7172BF" name="Sunburst"/>
|
||||
<property ID="0x6D7172BF" name="LightBeamCombo"/>
|
||||
<property ID="0x6D752EFC" name="Unknown"/>
|
||||
<property ID="0x6D7811F5" name="Unknown"/>
|
||||
<property ID="0x6D7A5209" name="Unknown"/>
|
||||
|
@ -4953,7 +4953,7 @@
|
|||
<property ID="0x6EDE16B9" name="Unknown"/>
|
||||
<property ID="0x6EF66FAA" name="Unknown"/>
|
||||
<property ID="0x6EFA8159" name="Unknown"/>
|
||||
<property ID="0x6EFFCF82" name="Dark Torvus Key 1"/>
|
||||
<property ID="0x6EFFCF82" name="SwampKey1"/>
|
||||
<property ID="0x6F135424" name="Unknown"/>
|
||||
<property ID="0x6F135965" name="Unknown"/>
|
||||
<property ID="0x6F1DEB26" name="Unknown"/>
|
||||
|
@ -5503,7 +5503,7 @@
|
|||
<property ID="0x7B66A7B4" name="SpindlePositionInterpolant"/>
|
||||
<property ID="0x7B6C604A" name="FlyerMovementMode"/>
|
||||
<property ID="0x7B714814" name="Unknown"/>
|
||||
<property ID="0x7B71AE90" name="Vulnerabilities"/>
|
||||
<property ID="0x7B71AE90" name="Vulnerability"/>
|
||||
<property ID="0x7B77E31D" name="Unknown"/>
|
||||
<property ID="0x7B7C262A" name="Unknown"/>
|
||||
<property ID="0x7B86E0A2" name="Unknown"/>
|
||||
|
@ -5541,7 +5541,7 @@
|
|||
<property ID="0x7C2457BC" name="Unknown"/>
|
||||
<property ID="0x7C269EBC" name="Unknown"/>
|
||||
<property ID="0x7C3033B4" name="Unknown"/>
|
||||
<property ID="0x7C4A606C" name="Dark Torvus Key 2"/>
|
||||
<property ID="0x7C4A606C" name="SwampKey2"/>
|
||||
<property ID="0x7C519662" name="CAUD"/>
|
||||
<property ID="0x7C538ED3" name="Unknown"/>
|
||||
<property ID="0x7C642C9C" name="CAUD"/>
|
||||
|
@ -6019,7 +6019,7 @@
|
|||
<property ID="0x87011652" name="RULE"/>
|
||||
<property ID="0x87012F0F" name="Unknown"/>
|
||||
<property ID="0x8708B7D3" name="Unknown"/>
|
||||
<property ID="0x870E6D6F" name="Virtual Dock"/>
|
||||
<property ID="0x870E6D6F" name="IsVirtual"/>
|
||||
<property ID="0x8716D656" name="Unknown"/>
|
||||
<property ID="0x871C5F4C" name="Unknown"/>
|
||||
<property ID="0x8723498A" name="Unknown"/>
|
||||
|
@ -6284,7 +6284,7 @@
|
|||
<property ID="0x8D123FE9" name="WPSC"/>
|
||||
<property ID="0x8D1CF97A" name="Unknown"/>
|
||||
<property ID="0x8D2DF72E" name="Unknown"/>
|
||||
<property ID="0x8D33465F" name="Deactivate On Entered"/>
|
||||
<property ID="0x8D33465F" name="DeactivateOnEnter"/>
|
||||
<property ID="0x8D3AB314" name="Area Type"/>
|
||||
<property ID="0x8D3BA8AE" name="Unknown"/>
|
||||
<property ID="0x8D3C1940" name="SwarmSoundData"/>
|
||||
|
@ -6391,7 +6391,7 @@
|
|||
<property ID="0x8F6291D1" name="Unknown"/>
|
||||
<property ID="0x8F6732EA" name="DigitalGuardianHeadStruct"/>
|
||||
<property ID="0x8F68AC21" name="PART"/>
|
||||
<property ID="0x8F6CDCF9" name="Sky Temple Key 1"/>
|
||||
<property ID="0x8F6CDCF9" name="TempleKey1"/>
|
||||
<property ID="0x8F70D3F2" name="Unknown"/>
|
||||
<property ID="0x8F73E73D" name="Unknown"/>
|
||||
<property ID="0x8F791468" name="STRG"/>
|
||||
|
@ -6608,7 +6608,7 @@
|
|||
<property ID="0x948E53C3" name="Unknown"/>
|
||||
<property ID="0x94980A67" name="Unknown"/>
|
||||
<property ID="0x949B0FFF" name="Unknown"/>
|
||||
<property ID="0x949E3C86" name="Light (Charged)"/>
|
||||
<property ID="0x949E3C86" name="LightBlast"/>
|
||||
<property ID="0x94A19A8B" name="Unknown"/>
|
||||
<property ID="0x94A23BF9" name="PART"/>
|
||||
<property ID="0x94AF1445" name="Amount"/>
|
||||
|
@ -6756,7 +6756,7 @@
|
|||
<property ID="0x97ADB194" name="Unknown"/>
|
||||
<property ID="0x97B14DC6" name="Unknown"/>
|
||||
<property ID="0x97B18EC5" name="Unknown"/>
|
||||
<property ID="0x97B5C68B" name="WeaponVulnerability"/>
|
||||
<property ID="0x97B5C68B" name="DarkWater"/>
|
||||
<property ID="0x97B791D7" name="Unknown"/>
|
||||
<property ID="0x97B8A76A" name="LogBook"/>
|
||||
<property ID="0x97BEFF4F" name="Unknown"/>
|
||||
|
@ -6905,7 +6905,7 @@
|
|||
<property ID="0x9AF3FD16" name="Unknown"/>
|
||||
<property ID="0x9B03295E" name="GenericCreatureStructD"/>
|
||||
<property ID="0x9B03B5C0" name="RobotChickenFlyerStructB"/>
|
||||
<property ID="0x9B06BD3C" name="Darkburst"/>
|
||||
<property ID="0x9B06BD3C" name="DarkBeamCombo"/>
|
||||
<property ID="0x9B087893" name="GenericCreatureStructE"/>
|
||||
<property ID="0x9B131110" name="Unknown"/>
|
||||
<property ID="0x9B193AE8" name="Unknown"/>
|
||||
|
@ -6997,7 +6997,7 @@
|
|||
<property ID="0x9D45FA96" name="Unknown"/>
|
||||
<property ID="0x9D58F885" name="Unknown"/>
|
||||
<property ID="0x9D6E1A47" name="CAUD"/>
|
||||
<property ID="0x9D7A576D" name="Unknown"/>
|
||||
<property ID="0x9D7A576D" name="StringParm"/>
|
||||
<property ID="0x9D7B5570" name="Unknown"/>
|
||||
<property ID="0x9D837DA5" name="Unknown"/>
|
||||
<property ID="0x9D852DFE" name="Unknown"/>
|
||||
|
@ -7014,7 +7014,7 @@
|
|||
<property ID="0x9DCE6B35" name="Unknown"/>
|
||||
<property ID="0x9DD3BB57" name="Unknown"/>
|
||||
<property ID="0x9DD3E88B" name="Unknown"/>
|
||||
<property ID="0x9DD97317" name="Sky Temple Key 2"/>
|
||||
<property ID="0x9DD97317" name="TempleKey2"/>
|
||||
<property ID="0x9DE8731D" name="ScanVisor"/>
|
||||
<property ID="0x9DEDCFF1" name="AudioPlaybackParms"/>
|
||||
<property ID="0x9DEE347A" name="Unknown"/>
|
||||
|
@ -7051,7 +7051,7 @@
|
|||
<property ID="0x9EEF71C2" name="WPSC"/>
|
||||
<property ID="0x9EF4A101" name="DamageInfo"/>
|
||||
<property ID="0x9EF6B290" name="WPSC"/>
|
||||
<property ID="0x9F027D91" name="Dark Visor Skin"/>
|
||||
<property ID="0x9F027D91" name="DarkSkin"/>
|
||||
<property ID="0x9F0677D6" name="Unknown"/>
|
||||
<property ID="0x9F0E3E0B" name="PART"/>
|
||||
<property ID="0x9F0FF852" name="DamageVulnerability"/>
|
||||
|
@ -7306,7 +7306,7 @@
|
|||
<property ID="0xA42F6495" name="Unknown"/>
|
||||
<property ID="0xA438A3CD" name="Unknown"/>
|
||||
<property ID="0xA439CA6A" name="Unknown"/>
|
||||
<property ID="0xA442B4A3" name="Power (Charged)"/>
|
||||
<property ID="0xA442B4A3" name="PowerCharge"/>
|
||||
<property ID="0xA45E5B13" name="UnknownStruct26"/>
|
||||
<property ID="0xA4658688" name="Unknown"/>
|
||||
<property ID="0xA4692E9C" name="Unknown"/>
|
||||
|
@ -7430,7 +7430,7 @@
|
|||
<property ID="0xA726316B" name="Unknown"/>
|
||||
<property ID="0xA72CA4BA" name="OceanBridgeStructB"/>
|
||||
<property ID="0xA72DFC5E" name="Unknown"/>
|
||||
<property ID="0xA734F8A5" name="Unknown"/>
|
||||
<property ID="0xA734F8A5" name="IntParm1"/>
|
||||
<property ID="0xA738790A" name="MotionInterpolationMethod"/>
|
||||
<property ID="0xA74065CE" name="CMDL"/>
|
||||
<property ID="0xA74987FF" name="Unknown"/>
|
||||
|
@ -7560,7 +7560,7 @@
|
|||
<property ID="0xA9F8A74F" name="Unknown"/>
|
||||
<property ID="0xA9FE872A" name="PART"/>
|
||||
<property ID="0xAA04F0BE" name="Unknown"/>
|
||||
<property ID="0xAA078325" name="Sky Temple Key 7"/>
|
||||
<property ID="0xAA078325" name="TempleKey7"/>
|
||||
<property ID="0xAA0C4AC9" name="TrainTrackManagerStructB"/>
|
||||
<property ID="0xAA125F90" name="CAUD"/>
|
||||
<property ID="0xAA13253A" name="Unknown"/>
|
||||
|
@ -7666,7 +7666,7 @@
|
|||
<property ID="0xAC794DA8" name="Energized Scan File"/>
|
||||
<property ID="0xAC80013B" name="Unknown"/>
|
||||
<property ID="0xAC870724" name="TrainTrackManagerStructA"/>
|
||||
<property ID="0xAC8BB2A7" name="Power Beam"/>
|
||||
<property ID="0xAC8BB2A7" name="Power"/>
|
||||
<property ID="0xACB083EC" name="Unknown"/>
|
||||
<property ID="0xACB1CDCB" name="Unknown"/>
|
||||
<property ID="0xACB3F8F7" name="Unknown"/>
|
||||
|
@ -7783,7 +7783,7 @@
|
|||
<property ID="0xAEB22FC4" name="BeatUpHandlerStruct"/>
|
||||
<property ID="0xAEB294FD" name="Convergence"/>
|
||||
<property ID="0xAEB31AF3" name="PART"/>
|
||||
<property ID="0xAEB34A86" name="Unknown"/>
|
||||
<property ID="0xAEB34A86" name="DarkBomb"/>
|
||||
<property ID="0xAEB694B4" name="Unknown"/>
|
||||
<property ID="0xAEB97157" name="Unknown"/>
|
||||
<property ID="0xAEC7546E" name="Unknown"/>
|
||||
|
@ -7851,7 +7851,7 @@
|
|||
<property ID="0xB01A28D5" name="Unknown"/>
|
||||
<property ID="0xB0253266" name="Unknown"/>
|
||||
<property ID="0xB0259D23" name="Unknown"/>
|
||||
<property ID="0xB028DB0E" name="LightParameters"/>
|
||||
<property ID="0xB028DB0E" name="Lighting"/>
|
||||
<property ID="0xB0291470" name="Unknown"/>
|
||||
<property ID="0xB02AAA53" name="Unknown"/>
|
||||
<property ID="0xB02CD31F" name="Unknown"/>
|
||||
|
@ -7923,7 +7923,7 @@
|
|||
<property ID="0xB187CD9B" name="Unknown"/>
|
||||
<property ID="0xB197BF80" name="GenericCreatureStructD"/>
|
||||
<property ID="0xB198E731" name="Unknown"/>
|
||||
<property ID="0xB19B6D6C" name="Dark Beam"/>
|
||||
<property ID="0xB19B6D6C" name="Dark"/>
|
||||
<property ID="0xB1A26335" name="Unknown"/>
|
||||
<property ID="0xB1AC9176" name="CinematicStartType"/>
|
||||
<property ID="0xB1B44917" name="DamageInfo"/>
|
||||
|
@ -8082,7 +8082,7 @@
|
|||
<property ID="0xB5702CA3" name="Unknown"/>
|
||||
<property ID="0xB5752C08" name="Unknown"/>
|
||||
<property ID="0xB57BAE86" name="Unknown"/>
|
||||
<property ID="0xB581574B" name="Unknown"/>
|
||||
<property ID="0xB581574B" name="IntParm2"/>
|
||||
<property ID="0xB58890FB" name="Unknown"/>
|
||||
<property ID="0xB58B514E" name="Unknown"/>
|
||||
<property ID="0xB5A78A38" name="Unknown"/>
|
||||
|
@ -8221,7 +8221,7 @@
|
|||
<property ID="0xB8A6413A" name="Unknown"/>
|
||||
<property ID="0xB8AE1BDC" name="SandBossStructB"/>
|
||||
<property ID="0xB8AFCF21" name="Function"/>
|
||||
<property ID="0xB8B22CCB" name="Sky Temple Key 4"/>
|
||||
<property ID="0xB8B22CCB" name="TempleKey4"/>
|
||||
<property ID="0xB8BAA8C0" name="Unknown"/>
|
||||
<property ID="0xB8BD2175" name="Unknown"/>
|
||||
<property ID="0xB8BF561E" name="Unknown"/>
|
||||
|
@ -8244,7 +8244,7 @@
|
|||
<property ID="0xB93990E6" name="Unknown"/>
|
||||
<property ID="0xB93E46E5" name="WPSC"/>
|
||||
<property ID="0xB9413FE6" name="CAUD"/>
|
||||
<property ID="0xB94E9BE7" name="Scan File"/>
|
||||
<property ID="0xB94E9BE7" name="SCAN"/>
|
||||
<property ID="0xB956F379" name="Unknown"/>
|
||||
<property ID="0xB95725AC" name="Unknown"/>
|
||||
<property ID="0xB95C4953" name="Unknown"/>
|
||||
|
@ -8451,7 +8451,7 @@
|
|||
<property ID="0xBDB18B2F" name="Unknown"/>
|
||||
<property ID="0xBDB697A9" name="Unknown"/>
|
||||
<property ID="0xBDBA191E" name="Unknown"/>
|
||||
<property ID="0xBDBEC295" name="ScannableParameters"/>
|
||||
<property ID="0xBDBEC295" name="ScanInfo"/>
|
||||
<property ID="0xBDC01C71" name="Unknown"/>
|
||||
<property ID="0xBDC57CE0" name="Unknown"/>
|
||||
<property ID="0xBDCCE71B" name="CMDL"/>
|
||||
|
@ -8538,7 +8538,7 @@
|
|||
<property ID="0xBF8B57BF" name="Unknown"/>
|
||||
<property ID="0xBF95A130" name="Unknown"/>
|
||||
<property ID="0xBF9BA6CC" name="FriendlyData"/>
|
||||
<property ID="0xBFAC229F" name="WeaponVulnerability"/>
|
||||
<property ID="0xBFAC229F" name="Ai"/>
|
||||
<property ID="0xBFACE762" name="Unknown"/>
|
||||
<property ID="0xBFAEFB37" name="PowerBombGuardianStageProperties"/>
|
||||
<property ID="0xBFB7CA5C" name="Unknown"/>
|
||||
|
@ -8583,7 +8583,7 @@
|
|||
<property ID="0xC08E06AC" name="Unknown"/>
|
||||
<property ID="0xC0A86488" name="Leg Model"/>
|
||||
<property ID="0xC0AC271E" name="Unknown"/>
|
||||
<property ID="0xC0BA9E18" name="Dark Visor Model"/>
|
||||
<property ID="0xC0BA9E18" name="DarkModel"/>
|
||||
<property ID="0xC0BD8A5E" name="Unknown"/>
|
||||
<property ID="0xC0C31785" name="UnknownStruct15"/>
|
||||
<property ID="0xC0CB3936" name="Unknown"/>
|
||||
|
@ -8619,7 +8619,7 @@
|
|||
<property ID="0xC1B9EEF1" name="Unknown"/>
|
||||
<property ID="0xC1BBBED8" name="PART"/>
|
||||
<property ID="0xC1C315FF" name="Sonic Boom"/>
|
||||
<property ID="0xC1C7E255" name="FSM2"/>
|
||||
<property ID="0xC1C7E255" name="StateMachine2"/>
|
||||
<property ID="0xC1C8D862" name="Unknown"/>
|
||||
<property ID="0xC1D1E465" name="Unknown"/>
|
||||
<property ID="0xC1D9DBC6" name="Unknown"/>
|
||||
|
@ -8659,7 +8659,7 @@
|
|||
<property ID="0xC2688B41" name="Unknown"/>
|
||||
<property ID="0xC26C291C" name="Unknown"/>
|
||||
<property ID="0xC26D7475" name="Unknown"/>
|
||||
<property ID="0xC271CFBC" name="Dark Agon Key 1"/>
|
||||
<property ID="0xC271CFBC" name="SandKey1"/>
|
||||
<property ID="0xC271EAF5" name="PART"/>
|
||||
<property ID="0xC2784287" name="IngBoostBallGuardianStruct"/>
|
||||
<property ID="0xC27FFA8F" name="Model"/>
|
||||
|
@ -8774,7 +8774,7 @@
|
|||
<property ID="0xC4DFBFA7" name="Unknown"/>
|
||||
<property ID="0xC4E17CA8" name="Unknown"/>
|
||||
<property ID="0xC4E74018" name="Unknown"/>
|
||||
<property ID="0xC4F60709" name="Dark Torvus Key 3"/>
|
||||
<property ID="0xC4F60709" name="SwampKey3"/>
|
||||
<property ID="0xC5012A38" name="ELSC"/>
|
||||
<property ID="0xC50D5431" name="Unknown"/>
|
||||
<property ID="0xC50F608B" name="Dark Beam"/>
|
||||
|
@ -8893,7 +8893,7 @@
|
|||
<property ID="0xC739D41A" name="Unknown"/>
|
||||
<property ID="0xC73B2C90" name="AnnihilatorBeam"/>
|
||||
<property ID="0xC7426B90" name="CMDL"/>
|
||||
<property ID="0xC7493FEE" name="PART?"/>
|
||||
<property ID="0xC7493FEE" name="PART"/>
|
||||
<property ID="0xC75386A1" name="Unknown"/>
|
||||
<property ID="0xC758541F" name="Unknown"/>
|
||||
<property ID="0xC758F52E" name="Unknown"/>
|
||||
|
@ -9260,7 +9260,7 @@
|
|||
<property ID="0xCF626995" name="UnknownStruct56"/>
|
||||
<property ID="0xCF6C1DE9" name="Unknown"/>
|
||||
<property ID="0xCF8D32F4" name="Unknown"/>
|
||||
<property ID="0xCF90D15E" name="HealthInfo"/>
|
||||
<property ID="0xCF90D15E" name="Health"/>
|
||||
<property ID="0xCF9768F8" name="Unknown"/>
|
||||
<property ID="0xCF98F423" name="PART"/>
|
||||
<property ID="0xCF9D77E8" name="SeedBoss3Data"/>
|
||||
|
@ -9316,7 +9316,7 @@
|
|||
<property ID="0xD0B6A007" name="Unknown"/>
|
||||
<property ID="0xD0B8CDC5" name="Ing Hive Key 2"/>
|
||||
<property ID="0xD0C15066" name="Unknown"/>
|
||||
<property ID="0xD0C46052" name="Dark Agon Key 2"/>
|
||||
<property ID="0xD0C46052" name="SandKey2"/>
|
||||
<property ID="0xD0CC9573" name="Unknown"/>
|
||||
<property ID="0xD0D118E3" name="Unknown"/>
|
||||
<property ID="0xD0D1760E" name="Unknown"/>
|
||||
|
@ -9618,7 +9618,7 @@
|
|||
<property ID="0xD74FC76C" name="DamageInfo"/>
|
||||
<property ID="0xD75426F9" name="PART"/>
|
||||
<property ID="0xD7548E97" name="ReptilicusHunterEnergyWhip"/>
|
||||
<property ID="0xD756416E" name="DamageInfo"/>
|
||||
<property ID="0xD756416E" name="ContactDamage"/>
|
||||
<property ID="0xD757CB94" name="CMDL"/>
|
||||
<property ID="0xD7591319" name="Unknown"/>
|
||||
<property ID="0xD75D29F8" name="Unknown"/>
|
||||
|
@ -10079,7 +10079,7 @@
|
|||
<property ID="0xE23FE8A7" name="Unknown"/>
|
||||
<property ID="0xE25A15C1" name="Unknown"/>
|
||||
<property ID="0xE25BA471" name="Unknown"/>
|
||||
<property ID="0xE25FB08C" name="Unknown"/>
|
||||
<property ID="0xE25FB08C" name="AnimSet"/>
|
||||
<property ID="0xE265ED56" name="Unknown"/>
|
||||
<property ID="0xE27604BE" name="Unknown"/>
|
||||
<property ID="0xE27A4E87" name="ReptilicusHunterStruct"/>
|
||||
|
@ -10279,7 +10279,7 @@
|
|||
<property ID="0xE6AA24C0" name="Unknown"/>
|
||||
<property ID="0xE6B1D780" name="Unknown"/>
|
||||
<property ID="0xE6B57A25" name="Unknown"/>
|
||||
<property ID="0xE6BACDE5" name="Annihilator Beam"/>
|
||||
<property ID="0xE6BACDE5" name="Annihilator"/>
|
||||
<property ID="0xE6C24412" name="Unknown"/>
|
||||
<property ID="0xE6C41F91" name="Unknown"/>
|
||||
<property ID="0xE6C64015" name="Unknown"/>
|
||||
|
@ -10360,7 +10360,7 @@
|
|||
<property ID="0xE84AA51C" name="RobotChickenFlyerStructA"/>
|
||||
<property ID="0xE85121C7" name="Unknown"/>
|
||||
<property ID="0xE856FC2B" name="Unknown"/>
|
||||
<property ID="0xE8619082" name="DamageInfo"/>
|
||||
<property ID="0xE8619082" name="CloudDamage"/>
|
||||
<property ID="0xE8662D92" name="Unknown"/>
|
||||
<property ID="0xE8706E6E" name="PART"/>
|
||||
<property ID="0xE8796BCE" name="Unknown"/>
|
||||
|
@ -10495,7 +10495,7 @@
|
|||
<property ID="0xEB03168D" name="Unknown"/>
|
||||
<property ID="0xEB12BEE4" name="DamageInfo"/>
|
||||
<property ID="0xEB1B90C2" name="Unknown"/>
|
||||
<property ID="0xEB1D06BE" name="Echo Visor Skin"/>
|
||||
<property ID="0xEB1D06BE" name="EchoSkin"/>
|
||||
<property ID="0xEB250A0B" name="Unknown"/>
|
||||
<property ID="0xEB300034" name="Unknown"/>
|
||||
<property ID="0xEB383668" name="Unknown"/>
|
||||
|
@ -10617,7 +10617,7 @@
|
|||
<property ID="0xED999133" name="Unknown"/>
|
||||
<property ID="0xED9BF5A3" name="Unknown"/>
|
||||
<property ID="0xEDA45014" name="Unknown"/>
|
||||
<property ID="0xEDA47FF6" name="Looped"/>
|
||||
<property ID="0xEDA47FF6" name="Loop"/>
|
||||
<property ID="0xEDA4C771" name="Unknown"/>
|
||||
<property ID="0xEDA6D736" name="Unknown"/>
|
||||
<property ID="0xEDB06C1D" name="Unknown"/>
|
||||
|
@ -10643,7 +10643,7 @@
|
|||
<property ID="0xEE16CE9D" name="Unknown"/>
|
||||
<property ID="0xEE178D76" name="Unknown"/>
|
||||
<property ID="0xEE1BA439" name="Unknown"/>
|
||||
<property ID="0xEE1BE914" name="Radius"/>
|
||||
<property ID="0xEE1BE914" name="DI_Radius"/>
|
||||
<property ID="0xEE1F1DF6" name="Unknown"/>
|
||||
<property ID="0xEE258868" name="Unknown"/>
|
||||
<property ID="0xEE37CD3C" name="Unknown"/>
|
||||
|
@ -10690,7 +10690,7 @@
|
|||
<property ID="0xEF3E4DA5" name="Unknown"/>
|
||||
<property ID="0xEF3EFEC0" name="Unknown"/>
|
||||
<property ID="0xEF43B845" name="PlayerInventoryWeapons"/>
|
||||
<property ID="0xEF485DB9" name="WPSC"/>
|
||||
<property ID="0xEF485DB9" name="Projectile"/>
|
||||
<property ID="0xEF505965" name="Unknown"/>
|
||||
<property ID="0xEF531185" name="Unknown"/>
|
||||
<property ID="0xEF549530" name="Unknown"/>
|
||||
|
@ -10714,7 +10714,7 @@
|
|||
<property ID="0xEFB54F99" name="Unknown"/>
|
||||
<property ID="0xEFC5A137" name="STRG"/>
|
||||
<property ID="0xEFD287D9" name="Unknown"/>
|
||||
<property ID="0xEFD4DABE" name="Super Missile"/>
|
||||
<property ID="0xEFD4DABE" name="PowerBeamCombo"/>
|
||||
<property ID="0xEFD76F97" name="Unknown"/>
|
||||
<property ID="0xEFD78A41" name="Unknown"/>
|
||||
<property ID="0xEFDC8306" name="Unknown"/>
|
||||
|
@ -10837,7 +10837,7 @@
|
|||
<property ID="0xF2502CD2" name="Unknown"/>
|
||||
<property ID="0xF2565B1B" name="PuddleControlData"/>
|
||||
<property ID="0xF25FFDFF" name="PathCurveType"/>
|
||||
<property ID="0xF2649373" name="Sky Temple Key 8"/>
|
||||
<property ID="0xF2649373" name="TempleKey8"/>
|
||||
<property ID="0xF26DF1D6" name="Unknown"/>
|
||||
<property ID="0xF2782501" name="Unknown"/>
|
||||
<property ID="0xF27C01EE" name="Unknown"/>
|
||||
|
@ -10849,7 +10849,7 @@
|
|||
<property ID="0xF2B3C5A1" name="Unknown"/>
|
||||
<property ID="0xF2BA21E1" name="BloggStruct"/>
|
||||
<property ID="0xF2C3FC10" name="Unknown"/>
|
||||
<property ID="0xF2D02613" name="Damage"/>
|
||||
<property ID="0xF2D02613" name="DI_Damage"/>
|
||||
<property ID="0xF2D2C8E8" name="UnknownStruct33"/>
|
||||
<property ID="0xF2D36ABB" name="Unknown"/>
|
||||
<property ID="0xF2DC8618" name="PART"/>
|
||||
|
@ -10941,7 +10941,7 @@
|
|||
<property ID="0xF4C13980" name="Unknown"/>
|
||||
<property ID="0xF4C318B3" name="CMDL"/>
|
||||
<property ID="0xF4C85E26" name="Unknown"/>
|
||||
<property ID="0xF4CE8ACF" name="WeaponVulnerability"/>
|
||||
<property ID="0xF4CE8ACF" name="Lava"/>
|
||||
<property ID="0xF4D1C792" name="Unknown"/>
|
||||
<property ID="0xF4D39593" name="TrackObjectModuleData"/>
|
||||
<property ID="0xF4D5150F" name="LaunchProjectileData"/>
|
||||
|
@ -10980,7 +10980,7 @@
|
|||
<property ID="0xF55924DA" name="Unknown"/>
|
||||
<property ID="0xF55A1548" name="ShockWaveInfo"/>
|
||||
<property ID="0xF55B70E6" name="FargullHatcherData"/>
|
||||
<property ID="0xF55BE12C" name="Space Jump Boots"/>
|
||||
<property ID="0xF55BE12C" name="DoubleJump"/>
|
||||
<property ID="0xF55DD02C" name="Unknown"/>
|
||||
<property ID="0xF56589A6" name="Unknown"/>
|
||||
<property ID="0xF5666B6E" name="SpindleCameraStruct"/>
|
||||
|
@ -11262,7 +11262,7 @@
|
|||
<property ID="0xFB2DDFAD" name="FlyerMovementMode"/>
|
||||
<property ID="0xFB2E32DB" name="Unknown"/>
|
||||
<property ID="0xFB33B3A7" name="Unknown"/>
|
||||
<property ID="0xFB33F2A1" name="Unknown"/>
|
||||
<property ID="0xFB33F2A1" name="AnnihilatorBomb"/>
|
||||
<property ID="0xFB35A95A" name="Unknown"/>
|
||||
<property ID="0xFB406CA9" name="Unknown"/>
|
||||
<property ID="0xFB435257" name="Unknown"/>
|
||||
|
@ -11349,7 +11349,7 @@
|
|||
<property ID="0xFCD8057B" name="Unknown"/>
|
||||
<property ID="0xFCDCAA4E" name="Unknown"/>
|
||||
<property ID="0xFCDCB7D4" name="Sunburst"/>
|
||||
<property ID="0xFCECF744" name="Dark Ammo"/>
|
||||
<property ID="0xFCECF744" name="DarkBeamAmmo"/>
|
||||
<property ID="0xFCF4AAB0" name="Unknown"/>
|
||||
<property ID="0xFCF7C5F6" name="TrainTrackManagerStructB"/>
|
||||
<property ID="0xFD0AEACC" name="Unknown"/>
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
<default>0.0, 0.0, 0.0</default>
|
||||
</property>
|
||||
<property ID="0x0FC966DC" type="asset" extensions="DCLN"/>
|
||||
<property ID="0x33CF5665" type="asset" extensions="unknown"/>
|
||||
<property ID="0x33CF5665" type="asset" extensions="UNKN"/>
|
||||
<property ID="0xA244C9D8" type="character"/>
|
||||
<property ID="0xB7CD213C" type="character"/>
|
||||
<property ID="0x9F93BC3F" type="character"/>
|
||||
|
|
|
@ -92,7 +92,7 @@
|
|||
<property ID="0x03E7B2B4" type="float">
|
||||
<default>5.0</default>
|
||||
</property>
|
||||
<property ID="0xE190F77D" type="asset" extensions="unknown"/>
|
||||
<property ID="0xE190F77D" type="asset" extensions="UNKN"/>
|
||||
<property ID="0xCE5D16C3" type="bool">
|
||||
<default>false</default>
|
||||
</property>
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<property ID="0x8B51E23F" type="float">
|
||||
<default>1.0</default>
|
||||
</property>
|
||||
<property ID="0xC2ACB79E" type="asset" extensions="unknown"/>
|
||||
<property ID="0xC2ACB79E" type="asset" extensions="UNKN"/>
|
||||
<struct ID="0xD9EB71E0" template="Structs/CameraShakerEnvelope.xml"/>
|
||||
<struct ID="0xC5B09632" template="Structs/CameraShakerEnvelope.xml"/>
|
||||
<struct ID="0x21B704E3" template="Structs/CameraShakerEnvelope.xml"/>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<name>Effect</name>
|
||||
<properties>
|
||||
<struct ID="0x255A4580" template="Structs/EditorProperties.xml"/>
|
||||
<property ID="0x0A479D6F" type="asset" extensions="PART,SWHC,SPSC"/>
|
||||
<property ID="0x0A479D6F" type="asset" extensions="PART,SPSC,SWHC"/>
|
||||
<property ID="0x3217DFF8" type="bool">
|
||||
<default>true</default>
|
||||
</property>
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
</property>
|
||||
<struct ID="0xEFE4EA57" template="Structs/RotationSplines.xml"/>
|
||||
<struct ID="0x692267EA" template="Structs/TranslationSplines.xml"/>
|
||||
<property ID="0x36F96F54" type="asset" extensions="unknown"/>
|
||||
<property ID="0x465159A3" type="asset" extensions="unknown"/>
|
||||
<property ID="0x36F96F54" type="asset" extensions="UNKN"/>
|
||||
<property ID="0x465159A3" type="asset" extensions="UNKN"/>
|
||||
<property ID="0x25C9C68F" type="bool">
|
||||
<default>false</default>
|
||||
</property>
|
||||
|
|
|
@ -136,8 +136,8 @@
|
|||
<property ID="0x4A66B162" type="asset" extensions="CAUD"/>
|
||||
<property ID="0xD1C3FD0D" type="asset" extensions="CAUD"/>
|
||||
<property ID="0xECC8C95F" type="asset" extensions="CAUD"/>
|
||||
<property ID="0x436EA086" type="asset" extensions="unknown"/>
|
||||
<property ID="0xDBAFBA23" type="asset" extensions="unknown"/>
|
||||
<property ID="0x436EA086" type="asset" extensions="UNKN"/>
|
||||
<property ID="0xDBAFBA23" type="asset" extensions="UNKN"/>
|
||||
</properties>
|
||||
</struct>
|
||||
<struct ID="0x0BDE5216" type="multi">
|
||||
|
|
|
@ -94,8 +94,8 @@
|
|||
<property ID="0x003E7991" type="asset" extensions="CAUD"/>
|
||||
<property ID="0x87501D31" type="asset" extensions="CAUD"/>
|
||||
<property ID="0x72679165" type="asset" extensions="CAUD"/>
|
||||
<property ID="0xCC70E91C" type="asset" extensions="unknown"/>
|
||||
<property ID="0xB2B02A99" type="asset" extensions="unknown"/>
|
||||
<property ID="0xCC70E91C" type="asset" extensions="UNKN"/>
|
||||
<property ID="0xB2B02A99" type="asset" extensions="UNKN"/>
|
||||
<property ID="0x4392D0C4" type="asset" extensions="CAUD"/>
|
||||
</properties>
|
||||
</struct>
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<property ID="0xE7572064" type="asset" extensions="STRG"/>
|
||||
<property ID="0xC022B7A6" type="asset" extensions="STRG"/>
|
||||
<property ID="0xCC4EB20D" type="asset" extensions="STRG"/>
|
||||
<property ID="0xF7E675FE" type="asset" extensions="unknown"/>
|
||||
<property ID="0xF7E675FE" type="asset" extensions="UNKN"/>
|
||||
</properties>
|
||||
</struct>
|
||||
<struct ID="0xF9674517" type="multi">
|
||||
|
@ -77,11 +77,11 @@
|
|||
<property ID="0xA40D410E" type="asset" extensions="STRG"/>
|
||||
<property ID="0x471FEA86" type="asset" extensions="STRG"/>
|
||||
<property ID="0xA01E0887" type="asset" extensions="STRG"/>
|
||||
<property ID="0x4BEC8291" type="asset" extensions="unknown"/>
|
||||
<property ID="0xA0DB3992" type="asset" extensions="unknown"/>
|
||||
<property ID="0x4F1952AC" type="asset" extensions="unknown"/>
|
||||
<property ID="0xADC549D5" type="asset" extensions="unknown"/>
|
||||
<property ID="0x420722EB" type="asset" extensions="unknown"/>
|
||||
<property ID="0x4BEC8291" type="asset" extensions="UNKN"/>
|
||||
<property ID="0xA0DB3992" type="asset" extensions="UNKN"/>
|
||||
<property ID="0x4F1952AC" type="asset" extensions="UNKN"/>
|
||||
<property ID="0xADC549D5" type="asset" extensions="UNKN"/>
|
||||
<property ID="0x420722EB" type="asset" extensions="UNKN"/>
|
||||
</properties>
|
||||
</struct>
|
||||
<struct ID="0x4CEA53F4" type="multi">
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
<property ID="0x69A2B08E" type="asset" extensions="CMDL"/>
|
||||
<property ID="0xA2FE632B" type="asset" extensions="CMDL"/>
|
||||
<property ID="0x246A1185" type="asset" extensions="CMDL"/>
|
||||
<property ID="0xEF36C220" type="asset" extensions="unknown"/>
|
||||
<property ID="0xF233F298" type="asset" extensions="unknown"/>
|
||||
<property ID="0xEF36C220" type="asset" extensions="UNKN"/>
|
||||
<property ID="0xF233F298" type="asset" extensions="UNKN"/>
|
||||
<property ID="0xF7AA5F32" type="MayaSpline"/>
|
||||
<property ID="0xD0239F95" type="MayaSpline"/>
|
||||
<property ID="0x5688683B" type="float">
|
||||
|
@ -179,20 +179,20 @@
|
|||
</property>
|
||||
<property ID="0xE7CA6050" type="asset" extensions="CAUD"/>
|
||||
<property ID="0x5D4FBC07" type="asset" extensions="CAUD"/>
|
||||
<property ID="0x0ED5E783" type="asset" extensions="unknown"/>
|
||||
<property ID="0x0ED5E783" type="asset" extensions="UNKN"/>
|
||||
<property ID="0xA3BAC487" type="asset" extensions="CAUD"/>
|
||||
<property ID="0x4FE79727" type="asset" extensions="CAUD"/>
|
||||
<property ID="0x1C7DCCA3" type="asset" extensions="unknown"/>
|
||||
<property ID="0x1C7DCCA3" type="asset" extensions="UNKN"/>
|
||||
<property ID="0x51ED297F" type="asset" extensions="CAUD"/>
|
||||
<property ID="0xEAEFFC4B" type="asset" extensions="CAUD"/>
|
||||
<property ID="0xB975A7CF" type="asset" extensions="unknown"/>
|
||||
<property ID="0xB975A7CF" type="asset" extensions="UNKN"/>
|
||||
<property ID="0xB6F08FE8" type="asset" extensions="CAUD"/>
|
||||
<property ID="0x89E8256F" type="asset" extensions="CAUD"/>
|
||||
<property ID="0xDA727EEB" type="asset" extensions="unknown"/>
|
||||
<property ID="0xDA727EEB" type="asset" extensions="UNKN"/>
|
||||
<property ID="0x6E33F4CE" type="asset" extensions="CAUD"/>
|
||||
<property ID="0x7B8E2CD2" type="asset" extensions="CAUD"/>
|
||||
<property ID="0x28147756" type="asset" extensions="unknown"/>
|
||||
<property ID="0x0093800D" type="asset" extensions="unknown"/>
|
||||
<property ID="0x28147756" type="asset" extensions="UNKN"/>
|
||||
<property ID="0x0093800D" type="asset" extensions="UNKN"/>
|
||||
<property ID="0xCCBB7330" type="MayaSpline"/>
|
||||
<property ID="0xAA62345F" type="MayaSpline"/>
|
||||
<property ID="0x1852AF24" type="MayaSpline"/>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
</property>
|
||||
<property ID="0xC27FFA8F" type="asset" extensions="CMDL"/>
|
||||
<property ID="0xA244C9D8" type="character"/>
|
||||
<property ID="0x2CF40978" type="asset" extensions="unknown"/>
|
||||
<property ID="0x2CF40978" type="asset" extensions="UNKN"/>
|
||||
<property ID="0x3128976F" type="character"/>
|
||||
<struct ID="0x7E397FED" template="Structs/ActorParameters.xml"/>
|
||||
<struct ID="0xD545F36B" type="multi">
|
||||
|
|
|
@ -127,7 +127,7 @@
|
|||
<default>0.2</default>
|
||||
</property>
|
||||
<property ID="0x68137EA7" type="asset" extensions="PART"/>
|
||||
<property ID="0xEBF3B81D" type="asset" extensions="unknown"/>
|
||||
<property ID="0xEBF3B81D" type="asset" extensions="UNKN"/>
|
||||
</properties>
|
||||
</struct>
|
||||
<struct ID="0x9127FBC8" type="multi">
|
||||
|
|
|
@ -332,7 +332,7 @@
|
|||
</property>
|
||||
<property ID="0xAD61C23A" type="asset" extensions="PART"/>
|
||||
<property ID="0x9965B481" type="asset" extensions="PART"/>
|
||||
<property ID="0x389C3BD6" type="asset" extensions="unknown"/>
|
||||
<property ID="0x389C3BD6" type="asset" extensions="UNKN"/>
|
||||
<property ID="0x17918504" type="asset" extensions="PART"/>
|
||||
<property ID="0x6CF5915A" type="asset" extensions="CAUD"/>
|
||||
<property ID="0x57184EE6" type="asset" extensions="CAUD"/>
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
</property>
|
||||
<property ID="0xDFE74895" type="asset" extensions="PART"/>
|
||||
<property ID="0xC88AD680" type="asset" extensions="CAUD"/>
|
||||
<property ID="0x64C22667" type="asset" extensions="unknown"/>
|
||||
<property ID="0x64C22667" type="asset" extensions="UNKN"/>
|
||||
<property ID="0xFD8A9692" type="bool">
|
||||
<default>true</default>
|
||||
</property>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<struct name="PeanutStruct" type="multi">
|
||||
<properties>
|
||||
<struct ID="0xD72E09E1" template="Structs/ClingPathControlStruct.xml"/>
|
||||
<property ID="0x5B60214F" type="asset" extensions="unknown"/>
|
||||
<property ID="0xA272ADE0" type="asset" extensions="unknown"/>
|
||||
<property ID="0x5B60214F" type="asset" extensions="UNKN"/>
|
||||
<property ID="0xA272ADE0" type="asset" extensions="UNKN"/>
|
||||
</properties>
|
||||
</struct>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<struct name="UnknownStruct" type="multi">
|
||||
<properties>
|
||||
<property ID="0x2B3B3B7D" type="asset" extensions="unknown"/>
|
||||
<property ID="0x2B3B3B7D" type="asset" extensions="UNKN"/>
|
||||
</properties>
|
||||
</struct>
|
||||
|
|
|
@ -80,15 +80,9 @@
|
|||
<property ID="0xAC202A5D" type="float">
|
||||
<default>1.0</default>
|
||||
</property>
|
||||
<property ID="0x14038B71" type="sound">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x16A435CB" type="sound">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x67EDEFC2" type="sound">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x14038B71" type="sound"/>
|
||||
<property ID="0x16A435CB" type="sound"/>
|
||||
<property ID="0x67EDEFC2" type="sound"/>
|
||||
<property ID="0x8F4FB79D" type="float">
|
||||
<default>1.0</default>
|
||||
</property>
|
||||
|
|
|
@ -41,15 +41,9 @@
|
|||
<property ID="0xF78947D4" type="float">
|
||||
<default>2.0</default>
|
||||
</property>
|
||||
<property ID="0x6A942A60" type="sound">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x808392EC" type="sound">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0xDF2D8017" type="sound">
|
||||
<default>-1</default>
|
||||
</property>
|
||||
<property ID="0x6A942A60" type="sound"/>
|
||||
<property ID="0x808392EC" type="sound"/>
|
||||
<property ID="0xDF2D8017" type="sound"/>
|
||||
</properties>
|
||||
<states/>
|
||||
<messages/>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<name>Midi</name>
|
||||
<properties>
|
||||
<struct ID="0x255A4580" template="Structs/EditorProperties.xml"/>
|
||||
<property ID="0x9D1A67A8" type="asset" extensions="STRM"/>
|
||||
<property ID="0x9D1A67A8" type="asset" extensions="CSNG"/>
|
||||
<property ID="0x90AA341F" type="float">
|
||||
<default>0.0</default>
|
||||
</property>
|
||||
|
|
Loading…
Reference in New Issue