Finished the template writer and regenerated templates (most of the template changes are just automated formatting changes)

This commit is contained in:
parax0 2016-02-14 01:03:17 -07:00
parent 3296948bea
commit 34eb7c436e
681 changed files with 2645 additions and 2037 deletions

View File

@ -5,6 +5,7 @@
#include <tinyxml2.h>
using namespace tinyxml2;
TString CTemplateWriter::smTemplatesDir = "../templates/";
CTemplateWriter::CTemplateWriter()
{
@ -14,12 +15,14 @@ void CTemplateWriter::SaveAllTemplates()
{
// Create directory
std::list<CMasterTemplate*> MasterList = CMasterTemplate::GetMasterList();
TString Out = "../templates/";
boost::filesystem::create_directory(Out.ToStdString());
boost::filesystem::create_directory(smTemplatesDir.ToStdString());
// Resave property list
SavePropertyList();
// Resave master templates
for (auto it = MasterList.begin(); it != MasterList.end(); it++)
SaveGameTemplates(*it, Out);
SaveGameTemplates(*it);
// Resave game list
XMLDocument GameList;
@ -31,6 +34,10 @@ void CTemplateWriter::SaveAllTemplates()
pBase->SetAttribute("version", 4);
GameList.LinkEndChild(pBase);
XMLElement *pProperties = GameList.NewElement("properties");
pProperties->SetText("Properties.xml");
pBase->LinkEndChild(pProperties);
for (auto it = MasterList.begin(); it != MasterList.end(); it++)
{
CMasterTemplate *pMaster = *it;
@ -52,20 +59,24 @@ void CTemplateWriter::SaveAllTemplates()
pGame->LinkEndChild(pTempPath);
}
TString GameListName = Out + "GameList.xml";
TString GameListName = smTemplatesDir + "GameList.xml";
GameList.SaveFile(*GameListName);
}
void CTemplateWriter::SaveGameTemplates(CMasterTemplate *pMaster, const TString& rkDir)
void CTemplateWriter::SaveGameTemplates(CMasterTemplate *pMaster)
{
// Create directory
TString OutFile = rkDir + pMaster->mSourceFile;
TString OutFile = smTemplatesDir + pMaster->mSourceFile;
TString OutDir = OutFile.GetFileDirectory();
boost::filesystem::create_directory(OutDir.ToStdString());
// Resave script templates
for (auto it = pMaster->mTemplates.begin(); it != pMaster->mTemplates.end(); it++)
SaveScriptTemplate(it->second, OutDir);
SaveScriptTemplate(it->second);
// Resave struct templates
for (auto it = pMaster->mStructTemplates.begin(); it != pMaster->mStructTemplates.end(); it++)
SaveStructTemplate(it->second, pMaster);
// Resave master template
XMLDocument Master;
@ -77,16 +88,6 @@ void CTemplateWriter::SaveGameTemplates(CMasterTemplate *pMaster, const TString&
pBase->SetAttribute("version", 4);
Master.LinkEndChild(pBase);
// Write property list
if (!pMaster->smPropertyNames.empty())
{
SavePropertyList(OutDir);
XMLElement *pPropList = Master.NewElement("properties");
pPropList->SetText("Properties.xml");
pBase->LinkEndChild(pPropList);
}
// Write versions
if (!pMaster->mGameVersions.empty())
{
@ -97,7 +98,7 @@ void CTemplateWriter::SaveGameTemplates(CMasterTemplate *pMaster, const TString&
{
XMLElement *pVersion = Master.NewElement("version");
pVersion->SetText(*(*it));
pBase->LinkEndChild(pVersion);
pVersionsBlock->LinkEndChild(pVersion);
}
}
@ -147,7 +148,7 @@ void CTemplateWriter::SaveGameTemplates(CMasterTemplate *pMaster, const TString&
Master.SaveFile(*OutFile);
}
void CTemplateWriter::SavePropertyList(const TString& rkDir)
void CTemplateWriter::SavePropertyList()
{
// Create XML
XMLDocument List;
@ -171,16 +172,18 @@ void CTemplateWriter::SavePropertyList(const TString& rkDir)
pBase->LinkEndChild(pElem);
}
TString OutFile = rkDir + "Properties.xml";
TString OutFile = smTemplatesDir + "Properties.xml";
List.SaveFile(*OutFile);
}
void CTemplateWriter::SaveScriptTemplate(CScriptTemplate *pTemp, const TString& rkDir)
void CTemplateWriter::SaveScriptTemplate(CScriptTemplate *pTemp)
{
CMasterTemplate *pMaster = pTemp->MasterTemplate();
// Create directory
TString OutFile = rkDir + pTemp->mSourceFile;
TString outDir = OutFile.GetFileDirectory();
boost::filesystem::create_directory(*outDir);
TString OutFile = smTemplatesDir + pMaster->GetDirectory() + pTemp->mSourceFile;
TString OutDir = OutFile.GetFileDirectory();
boost::filesystem::create_directory(*OutDir);
// Create new document
XMLDocument ScriptXML;
@ -199,7 +202,14 @@ void CTemplateWriter::SaveScriptTemplate(CScriptTemplate *pTemp, const TString&
pRoot->LinkEndChild(pName);
// Write properties
SaveProperties(&ScriptXML, pRoot, pTemp->mpBaseStruct, pTemp->MasterTemplate(), rkDir);
SaveProperties(&ScriptXML, pRoot, pTemp->mpBaseStruct, pMaster);
// States/Messages [todo]
XMLElement *pStates = ScriptXML.NewElement("states");
pRoot->LinkEndChild(pStates);
XMLElement *pMessages = ScriptXML.NewElement("messages");
pRoot->LinkEndChild(pMessages);
// Write editor properties
XMLElement *pEditor = ScriptXML.NewElement("editor");
@ -248,12 +258,12 @@ void CTemplateWriter::SaveScriptTemplate(CScriptTemplate *pTemp, const TString&
}
s32 Force = -1;
if (it->AssetSource == CScriptTemplate::SEditorAsset::eAnimParams)
if (it->AssetType == CScriptTemplate::SEditorAsset::eAnimParams)
Force = it->ForceNodeIndex;
XMLElement *pAsset = ScriptXML.NewElement(*Type);
pAsset->SetAttribute("source", *Source);
if (Force >= 0) pAsset->SetAttribute("force", std::to_string(Force).c_str());
if (Force >= 0) pAsset->SetAttribute("force", *TString::FromInt32(Force, 0, 10));
pAsset->SetText(*it->AssetLocation);
pAssets->LinkEndChild(pAsset);
}
@ -314,7 +324,7 @@ void CTemplateWriter::SaveScriptTemplate(CScriptTemplate *pTemp, const TString&
// Write conditions
for (auto it = pTemp->mVolumeConditions.begin(); it != pTemp->mVolumeConditions.end(); it++)
{
// Value should be an integer, or a boolean condition?
// Value should be an integer, or a boolean condition
TString StrVal;
if (pProp->Type() == eBoolProperty)
@ -335,10 +345,10 @@ void CTemplateWriter::SaveScriptTemplate(CScriptTemplate *pTemp, const TString&
ScriptXML.SaveFile(*OutFile);
}
void CTemplateWriter::SaveStructTemplate(CStructTemplate *pTemp, CMasterTemplate *pMaster, const TString& rkDir)
void CTemplateWriter::SaveStructTemplate(CStructTemplate *pTemp, CMasterTemplate *pMaster)
{
// Create directory
TString OutFile = rkDir + pTemp->mSourceFile;
TString OutFile = smTemplatesDir + pMaster->GetDirectory() + pTemp->mSourceFile;
TString OutDir = OutFile.GetFileDirectory();
TString Name = OutFile.GetFileName(false);
boost::filesystem::create_directory(OutDir.ToStdString());
@ -354,14 +364,14 @@ void CTemplateWriter::SaveStructTemplate(CStructTemplate *pTemp, CMasterTemplate
pRoot->SetAttribute("type", (pTemp->IsSingleProperty() ? "single" : "multi"));
StructXML.LinkEndChild(pRoot);
SaveProperties(&StructXML, pRoot, pTemp, pMaster, rkDir);
SaveProperties(&StructXML, pRoot, pTemp, pMaster);
StructXML.SaveFile(*OutFile);
}
void CTemplateWriter::SaveEnumTemplate(CEnumTemplate *pTemp, const TString& rkDir)
void CTemplateWriter::SaveEnumTemplate(CEnumTemplate *pTemp, CMasterTemplate *pMaster)
{
// Create directory
TString OutFile = rkDir + pTemp->mSourceFile;
TString OutFile = smTemplatesDir + pMaster->GetDirectory() + pTemp->mSourceFile;
TString OutDir = OutFile.GetFileDirectory();
TString Name = OutFile.GetFileName(false);
boost::filesystem::create_directory(*OutDir);
@ -380,10 +390,10 @@ void CTemplateWriter::SaveEnumTemplate(CEnumTemplate *pTemp, const TString& rkDi
EnumXML.SaveFile(*OutFile);
}
void CTemplateWriter::SaveBitfieldTemplate(CBitfieldTemplate *pTemp, const TString& rkDir)
void CTemplateWriter::SaveBitfieldTemplate(CBitfieldTemplate *pTemp, CMasterTemplate *pMaster)
{
// Create directory
TString OutFile = rkDir + pTemp->mSourceFile;
TString OutFile = smTemplatesDir + pMaster->GetDirectory() + pTemp->mSourceFile;
TString OutDir = OutFile.GetFileDirectory();
TString Name = pTemp->mSourceFile.GetFileName(false);
boost::filesystem::create_directory(*OutDir);
@ -402,7 +412,7 @@ void CTemplateWriter::SaveBitfieldTemplate(CBitfieldTemplate *pTemp, const TStri
BitfieldXML.SaveFile(*OutFile);
}
void CTemplateWriter::SaveProperties(XMLDocument *pDoc, XMLElement *pParent, CStructTemplate *pTemp, CMasterTemplate *pMaster, const TString& rkDir)
void CTemplateWriter::SaveProperties(XMLDocument *pDoc, XMLElement *pParent, CStructTemplate *pTemp, CMasterTemplate *pMaster)
{
// Create base element
XMLElement *pPropsBlock = pDoc->NewElement("properties");
@ -429,20 +439,15 @@ void CTemplateWriter::SaveProperties(XMLDocument *pDoc, XMLElement *pParent, CSt
else
pElem = pDoc->NewElement("property");
pPropsBlock->LinkEndChild(pElem);
// Set common property parameters, starting with ID
pElem->SetAttribute("ID", *StrID);
// Type
if (pProp->Type() == eStructProperty)
pElem->SetAttribute("type", (static_cast<CStructTemplate*>(pProp)->mIsSingleProperty ? "single" : "multi"));
else if (TString(pElem->Name()) == "property")
pElem->SetAttribute("type", *PropEnumToPropString(pProp->Type()));
// Name
TString Name = pProp->Name();
if (pMaster->GetGame() >= eEchoesDemo)
if (pMaster->GetGame() >= eEchoesDemo && ID > 0xFF)
{
TString MasterName = CMasterTemplate::GetPropertyName(ID);
@ -453,14 +458,53 @@ void CTemplateWriter::SaveProperties(XMLDocument *pDoc, XMLElement *pParent, CSt
else
pElem->SetAttribute("name", *Name);
// Type
if (pProp->Type() == eStructProperty)
{
CStructTemplate *pStruct = static_cast<CStructTemplate*>(pProp);
if (pStruct->mSourceFile.IsEmpty())
pElem->SetAttribute("type", (pStruct->mIsSingleProperty ? "single" : "multi"));
}
else if (TString(pElem->Name()) == "property")
pElem->SetAttribute("type", *PropEnumToPropString(pProp->Type()));
// Versions
u32 NumVersions = pProp->mAllowedVersions.size();
if (NumVersions > 0 && NumVersions != pMaster->mGameVersions.size())
{
XMLElement *pVersions = pDoc->NewElement("versions");
pElem->LinkEndChild(pVersions);
for (u32 iVer = 0; iVer < pMaster->mGameVersions.size(); iVer++)
{
if (pProp->IsInVersion(iVer))
{
XMLElement *pVersion = pDoc->NewElement("version");
pVersion->SetText(*pMaster->mGameVersions[iVer]);
pVersions->LinkEndChild(pVersion);
}
}
}
// Default
if (pProp->CanHaveDefault())
if (pProp->CanHaveDefault() && pMaster->GetGame() >= eEchoesDemo)
{
XMLElement *pDefault = pDoc->NewElement("default");
pDefault->SetText(*pProp->DefaultToString());
pElem->LinkEndChild(pDefault);
}
// Description
if (!pProp->Description().IsEmpty())
{
XMLElement *pDesc = pDoc->NewElement("description");
pDesc->SetText(*pProp->Description());
pElem->LinkEndChild(pDesc);
}
// Range
if (pProp->IsNumerical() && pProp->HasValidRange())
{
@ -502,7 +546,8 @@ void CTemplateWriter::SaveProperties(XMLDocument *pDoc, XMLElement *pParent, CSt
for (auto it = rkExtensions.begin(); it != rkExtensions.end(); it++)
ExtensionsString += *it + ",";
ExtensionsString.ChopBack(1); // Remove extra comma
ExtensionsString = ExtensionsString.ChopBack(1); // Remove extra comma
if (ExtensionsString.IsEmpty()) ExtensionsString = "UNKN";
pElem->SetAttribute("extensions", *ExtensionsString);
}
@ -516,7 +561,7 @@ void CTemplateWriter::SaveProperties(XMLDocument *pDoc, XMLElement *pParent, CSt
else
{
SaveEnumTemplate(pEnum, rkDir);
SaveEnumTemplate(pEnum, pMaster);
pElem->SetAttribute("template", *pEnum->mSourceFile);
}
}
@ -531,28 +576,167 @@ void CTemplateWriter::SaveProperties(XMLDocument *pDoc, XMLElement *pParent, CSt
else
{
SaveBitfieldTemplate(pBitfield, rkDir);
SaveBitfieldTemplate(pBitfield, pMaster);
pElem->SetAttribute("template", *pBitfield->mSourceFile);
}
}
// Struct/array-specific parameters
if (pProp->Type() == eStructProperty || pProp->Type() == eArrayProperty)
else if (pProp->Type() == eStructProperty || pProp->Type() == eArrayProperty)
{
// Element Name
if (pProp->Type() == eArrayProperty)
{
CArrayTemplate *pArray = static_cast<CArrayTemplate*>(pProp);
if (!pArray->ElementName().IsEmpty())
{
XMLElement *pElement = pDoc->NewElement("element_name");
pElement->SetText(*static_cast<CArrayTemplate*>(pProp)->ElementName());
pElem->LinkEndChild(pElement);
}
}
// Sub-properties
CStructTemplate *pStruct = static_cast<CStructTemplate*>(pProp);
if (pStruct->mSourceFile.IsEmpty())
SaveProperties(pDoc, pElem, pStruct, pMaster, rkDir);
SaveProperties(pDoc, pElem, pStruct, pMaster);
else
{
SaveStructTemplate(pStruct, pMaster, rkDir);
auto it = pMaster->mStructTemplates.find(pStruct->mSourceFile);
if (it != pMaster->mStructTemplates.end())
SavePropertyOverrides(pDoc, pElem, pStruct, it->second);
pElem->SetAttribute("template", *pStruct->mSourceFile);
}
}
}
}
void CTemplateWriter::SavePropertyOverrides(XMLDocument *pDoc, XMLElement *pParent, CStructTemplate *pStruct, CStructTemplate *pOriginal)
{
if (!pStruct->StructDataMatches(pOriginal))
{
// Create base element
XMLElement *pPropsBlock = pDoc->NewElement("properties");
pParent->LinkEndChild(pPropsBlock);
for (u32 iProp = 0; iProp < pStruct->Count(); iProp++)
{
IPropertyTemplate *pProp = pStruct->PropertyByIndex(iProp);
IPropertyTemplate *pSource = pOriginal->PropertyByIndex(iProp);
if (!pProp->Matches(pSource))
{
// Create element
XMLElement *pElem;
if (pProp->Type() == eStructProperty)
pElem = pDoc->NewElement("struct");
else if (pProp->Type() == eEnumProperty)
pElem = pDoc->NewElement("enum");
else if (pProp->Type() == eBitfieldProperty)
pElem = pDoc->NewElement("bitfield");
else if (pProp->Type() == eArrayProperty)
pElem = pDoc->NewElement("array");
else
pElem = pDoc->NewElement("property");
pPropsBlock->LinkEndChild(pElem);
// ID
u32 ID = pProp->PropertyID();
pElem->SetAttribute("ID", *TString::HexString(pProp->PropertyID(), true, true, (ID > 0xFF ? 8 : 2)));
// Name
if (pProp->Name() != pSource->Name())
pElem->SetAttribute("name", *pProp->Name());
// Default
if (pProp->CanHaveDefault() && !pProp->RawDefaultValue()->Matches(pSource->RawDefaultValue()))
{
XMLElement *pDefault = pDoc->NewElement("default");
pDefault->SetText(*pProp->DefaultToString());
pElem->LinkEndChild(pDefault);
}
// Description
if (pProp->Description() != pSource->Description())
{
XMLElement *pDesc = pDoc->NewElement("description");
pDesc->SetText(*pProp->Description());
pElem->LinkEndChild(pDesc);
}
// Range
if (pProp->IsNumerical())
{
TString Range = pProp->RangeToString();
if (Range != pSource->RangeToString())
{
XMLElement *pRange = pDoc->NewElement("range");
pRange->SetText(*Range);
pElem->LinkEndChild(pRange);
}
}
// Suffix
if (pProp->Suffix() != pSource->Suffix())
{
XMLElement *pSuffix = pDoc->NewElement("suffix");
pSuffix->SetText(*pProp->Suffix());
pElem->LinkEndChild(pSuffix);
}
// Cook Pref
if (pProp->CookPreference() != pSource->CookPreference())
{
XMLElement *pCookPref = pDoc->NewElement("should_cook");
TString PrefStr;
if (pProp->CookPreference() == eAlwaysCook) PrefStr = "always";
else if (pProp->CookPreference() == eNeverCook) PrefStr = "never";
else PrefStr = "nopref";
pCookPref->SetText(*PrefStr);
pElem->LinkEndChild(pCookPref);
}
// File-specific parameters
if (pProp->Type() == eFileProperty)
{
CFileTemplate *pFile = static_cast<CFileTemplate*>(pProp);
CFileTemplate *pSourceFile = static_cast<CFileTemplate*>(pSource);
if (pFile->Extensions() != pSourceFile->Extensions())
{
TString ExtensionsString;
for (auto it = pFile->Extensions().begin(); it != pFile->Extensions().end(); it++)
ExtensionsString += *it + ",";
ExtensionsString = ExtensionsString.ChopBack(1);
if (ExtensionsString.IsEmpty()) ExtensionsString = "UNKN";
pElem->SetAttribute("extensions", *ExtensionsString);
}
}
// Struct/array-specific parameters
else if (pProp->Type() == eStructProperty || pProp->Type() == eArrayProperty)
{
CStructTemplate *pStruct = static_cast<CStructTemplate*>(pProp);
CStructTemplate *pSourceStruct = static_cast<CStructTemplate*>(pSource);
SavePropertyOverrides(pDoc, pElem, pStruct, pSourceStruct);
}
}
}
}
}
void CTemplateWriter::SaveEnumerators(XMLDocument *pDoc, XMLElement *pParent, CEnumTemplate *pTemp)
{
XMLElement *pEnumerators = pDoc->NewElement("enumerators");
@ -562,7 +746,7 @@ void CTemplateWriter::SaveEnumerators(XMLDocument *pDoc, XMLElement *pParent, CE
{
XMLElement *pElem = pDoc->NewElement("enumerator");
u32 EnumerID = pTemp->EnumeratorID(iEnum);
pElem->SetAttribute("ID", *TString::HexString(EnumerID, true, true, (EnumerID > 0xFF ? 8 : 0)));
pElem->SetAttribute("ID", *TString::HexString(EnumerID, true, true, (EnumerID > 0xFF ? 8 : 2)));
pElem->SetAttribute("name", *pTemp->EnumeratorName(iEnum));
pEnumerators->LinkEndChild(pElem);
}

View File

@ -8,16 +8,18 @@
class CTemplateWriter
{
CTemplateWriter();
static TString smTemplatesDir;
public:
static void SaveAllTemplates();
static void SaveGameTemplates(CMasterTemplate *pMaster, const TString& rkDir);
static void SavePropertyList(const TString& rkDir);
static void SaveScriptTemplate(CScriptTemplate *pTemp, const TString& rkDir);
static void SaveStructTemplate(CStructTemplate *pTemp, CMasterTemplate *pMaster, const TString& rkDir);
static void SaveEnumTemplate(CEnumTemplate *pTemp, const TString& rkDir);
static void SaveBitfieldTemplate(CBitfieldTemplate *pTemp, const TString& rkDir);
static void SaveProperties(tinyxml2::XMLDocument *pDoc, tinyxml2::XMLElement *pParent, CStructTemplate *pTemp, CMasterTemplate *pMaster, const TString& rkDir);
static void SaveGameTemplates(CMasterTemplate *pMaster);
static void SavePropertyList();
static void SaveScriptTemplate(CScriptTemplate *pTemp);
static void SaveStructTemplate(CStructTemplate *pTemp, CMasterTemplate *pMaster);
static void SaveEnumTemplate(CEnumTemplate *pTemp, CMasterTemplate *pMaster);
static void SaveBitfieldTemplate(CBitfieldTemplate *pTemp, CMasterTemplate *pMaster);
static void SaveProperties(tinyxml2::XMLDocument *pDoc, tinyxml2::XMLElement *pParent, CStructTemplate *pTemp, CMasterTemplate *pMaster);
static void SavePropertyOverrides(tinyxml2::XMLDocument *pDoc, tinyxml2::XMLElement *pParent, CStructTemplate *pStruct, CStructTemplate *pOriginal);
static void SaveEnumerators(tinyxml2::XMLDocument *pDoc, tinyxml2::XMLElement *pParent, CEnumTemplate *pTemp);
static void SaveBitFlags(tinyxml2::XMLDocument *pDoc, tinyxml2::XMLElement *pParent, CBitfieldTemplate *pTemp);
};

View File

@ -20,7 +20,7 @@ IPropertyTemplate* CTemplateLoader::LoadProperty(XMLElement *pElem, CStructTempl
// Get ID + name
if (IDAttr.IsEmpty())
{
Log::Error("Error reading " + rkTemplateName + "; ran into a property with no ID");
Log::Error(rkTemplateName + ": ran into a property with no ID");
return nullptr;
}
@ -33,7 +33,7 @@ IPropertyTemplate* CTemplateLoader::LoadProperty(XMLElement *pElem, CStructTempl
Name = CMasterTemplate::GetPropertyName(ID);
else
{
Log::Error("Error reading " + rkTemplateName + " property " + TString::HexString(ID, true, true, 8) + "; this property doesn't have a name either in the template itself nor in the master list");
Log::Error(rkTemplateName + ": Property " + TString::HexString(ID, true, true, 8) + " doesn't have a name either in the template itself nor in the master list");
return nullptr;
}
@ -53,9 +53,9 @@ IPropertyTemplate* CTemplateLoader::LoadProperty(XMLElement *pElem, CStructTempl
if (Type == eInvalidProperty)
{
if (TypeStr.IsEmpty())
Log::Error("Error reading " + rkTemplateName + " property " + TString::HexString(ID, true, true, 8) + "; this property doesn't have a valid type set");
Log::Error(rkTemplateName + ": Property " + TString::HexString(ID, true, true, 8) + " doesn't have a type set");
else
Log::Error("Error reading " + rkTemplateName + " property " + TString::HexString(ID, true, true, 8) + "; this property has an invalid type set: " + TypeStr);
Log::Error(rkTemplateName + ": Property " + TString::HexString(ID, true, true, 8) + " has an invalid type set: " + TypeStr);
return nullptr;
}
@ -64,7 +64,7 @@ IPropertyTemplate* CTemplateLoader::LoadProperty(XMLElement *pElem, CStructTempl
if (!pProp)
{
Log::Error("Error reading " + rkTemplateName + " property " + TString::HexString(ID, true, true, 8) + "; seem to have attempted to load a valid but unsupported property type? (" + TypeStr + ")");
Log::Error(rkTemplateName + ": Property " + TString::HexString(ID, true, true, 8) + " seems to be using a valid but unsupported property type? (" + TypeStr + ")");
return nullptr;
}
}
@ -90,7 +90,7 @@ IPropertyTemplate* CTemplateLoader::LoadProperty(XMLElement *pElem, CStructTempl
u32 VerIdx = mpMaster->GetGameVersion(VerName);
if (VerIdx == -1)
Log::Error("Error reading " + rkTemplateName + " property " + TString::HexString(ID, true, true, 8) + "; invalid version \"" + VerName + "\"");
Log::Error(rkTemplateName + ": Property " + TString::HexString(ID, true, true, 8) + " has invalid version \"" + VerName + "\"");
else
pProp->mAllowedVersions.push_back(VerIdx);
@ -156,15 +156,16 @@ IPropertyTemplate* CTemplateLoader::LoadProperty(XMLElement *pElem, CStructTempl
LoadStructTemplate(TemplateAttr, pStruct);
if (IsNewProperty && TemplateAttr.IsEmpty() && Type == eStructProperty)
pStruct->mIsSingleProperty = (TypeAttr == "single" ? true : false);
pStruct->mIsSingleProperty = (TypeAttr == "single");
// Load sub-properties
// Load sub-properties and parameter overrides
XMLElement *pProperties = pElem->FirstChildElement("properties");
if (pProperties)
LoadProperties(pProperties, pStruct, rkTemplateName);
}
CMasterTemplate::AddProperty(pProp, mMasterDir + rkTemplateName);
return pProp;
}
@ -184,7 +185,7 @@ IPropertyTemplate* CTemplateLoader::CreateProperty(u32 ID, EPropertyType Type, c
case eVector3Property: pOut = CREATE_PROP_TEMP(TVector3Template); break;
case eColorProperty: pOut = CREATE_PROP_TEMP(TColorTemplate); break;
case eFileProperty: pOut = CREATE_PROP_TEMP(CFileTemplate); break;
case eCharacterProperty: pOut = CREATE_PROP_TEMP(CCharacterTemplate); break;
case eCharacterProperty: pOut = CREATE_PROP_TEMP(TCharacterTemplate); break;
case eEnumProperty: pOut = CREATE_PROP_TEMP(CEnumTemplate); break;
case eBitfieldProperty: pOut = CREATE_PROP_TEMP(CBitfieldTemplate); break;
case eArrayProperty: pOut = CREATE_PROP_TEMP(CArrayTemplate); break;
@ -199,8 +200,15 @@ IPropertyTemplate* CTemplateLoader::CreateProperty(u32 ID, EPropertyType Type, c
void CTemplateLoader::LoadStructTemplate(const TString& rkTemplateFileName, CStructTemplate *pStruct)
{
// Check whether this struct has already been read
auto it = mpMaster->mStructTemplates.find(rkTemplateFileName);
CStructTemplate *pSource = (it == mpMaster->mStructTemplates.end() ? nullptr : it->second);
// If the source hasn't been read yet, then we read it and add it to master's list
if (!pSource)
{
XMLDocument Doc;
OpenXML(mMasterDir + rkTemplateFileName, Doc);
OpenXML(mskTemplatesDir + mMasterDir + rkTemplateFileName, Doc);
if (!Doc.Error())
{
@ -208,11 +216,12 @@ void CTemplateLoader::LoadStructTemplate(const TString& rkTemplateFileName, CStr
if (pStruct->Type() == eStructProperty)
{
pSource = new CStructTemplate(-1, nullptr);
pRootElem = Doc.FirstChildElement("struct");
if (!pRootElem)
{
Log::Error("Error reading struct template " + rkTemplateFileName + ": there is no root \"struct\" element");
Log::Error(rkTemplateFileName + ": There is no root \"struct\" element");
return;
}
@ -220,11 +229,11 @@ void CTemplateLoader::LoadStructTemplate(const TString& rkTemplateFileName, CStr
if (TypeAttr.IsEmpty())
{
Log::Error("Error reading struct template " + rkTemplateFileName + "; there is no struct type specified");
Log::Error(rkTemplateFileName + ": There is no struct type specified");
return;
}
pStruct->mIsSingleProperty = (TypeAttr == "single" ? true : false);
pSource->mIsSingleProperty = (TypeAttr == "single" ? true : false);
}
else if (pStruct->Type() == eArrayProperty)
@ -233,7 +242,7 @@ void CTemplateLoader::LoadStructTemplate(const TString& rkTemplateFileName, CStr
if (!pRootElem)
{
Log::Error("Error reading array template " + rkTemplateFileName + "; there is no root \"array\" element");
Log::Error(rkTemplateFileName + ": There is no root \"array\" element");
return;
}
}
@ -242,17 +251,30 @@ void CTemplateLoader::LoadStructTemplate(const TString& rkTemplateFileName, CStr
XMLElement *pSubPropsElem = pRootElem->FirstChildElement("properties");
if (pSubPropsElem)
LoadProperties(pSubPropsElem, pStruct, rkTemplateFileName);
{
LoadProperties(pSubPropsElem, pSource, rkTemplateFileName);
mpMaster->mStructTemplates[rkTemplateFileName] = pSource;
pSource->mSourceFile = rkTemplateFileName;
}
else
Log::Error("Error reading " + TString(pStruct->Type() == eStructProperty ? "struct" : "array") + " template " + rkTemplateFileName + "; there's no \"properties\" block element");
{
Log::Error(rkTemplateFileName + ": There is no \"properties\" block element");
delete pSource;
pSource = nullptr;
}
}
}
// Copy source to the new struct template
if (pSource)
pStruct->CopyStructData(pSource);
}
void CTemplateLoader::LoadEnumTemplate(const TString& rkTemplateFileName, CEnumTemplate *pEnum)
{
XMLDocument Doc;
OpenXML(mMasterDir + rkTemplateFileName, Doc);
OpenXML(mskTemplatesDir + mMasterDir + rkTemplateFileName, Doc);
if (!Doc.Error())
{
@ -260,7 +282,7 @@ void CTemplateLoader::LoadEnumTemplate(const TString& rkTemplateFileName, CEnumT
if (!pRootElem)
{
Log::Error("Error reading enum template " + rkTemplateFileName + "; there is no root \"enum\" element");
Log::Error(rkTemplateFileName + ": There is no root \"enum\" element");
return;
}
@ -270,14 +292,16 @@ void CTemplateLoader::LoadEnumTemplate(const TString& rkTemplateFileName, CEnumT
LoadEnumerators(pEnumers, pEnum, rkTemplateFileName);
else
Log::Error("Error reading enum template " + rkTemplateFileName + "; there is no \"enumerators\" block element");
Log::Error(rkTemplateFileName + ": There is no \"enumerators\" block element");
pEnum->mSourceFile = rkTemplateFileName;
}
}
void CTemplateLoader::LoadBitfieldTemplate(const TString& rkTemplateFileName, CBitfieldTemplate *pBitfield)
{
XMLDocument Doc;
OpenXML(mMasterDir + rkTemplateFileName, Doc);
OpenXML(mskTemplatesDir + mMasterDir + rkTemplateFileName, Doc);
if (!Doc.Error())
{
@ -285,7 +309,7 @@ void CTemplateLoader::LoadBitfieldTemplate(const TString& rkTemplateFileName, CB
if (!pRootElem)
{
Log::Error("Error reading bitfield template " + rkTemplateFileName + "; there is no root \"bitfield\" element");
Log::Error(rkTemplateFileName + ": There is no root \"bitfield\" element");
return;
}
@ -295,7 +319,9 @@ void CTemplateLoader::LoadBitfieldTemplate(const TString& rkTemplateFileName, CB
LoadBitFlags(pFlags, pBitfield, rkTemplateFileName);
else
Log::Error("Error reading bitfield template " + rkTemplateFileName + "; there is no \"flags\" block element");
Log::Error(rkTemplateFileName + ": There is no \"flags\" block element");
pBitfield->mSourceFile = rkTemplateFileName;
}
}
@ -309,7 +335,7 @@ void CTemplateLoader::LoadProperties(XMLElement *pPropertiesElem, CStructTemplat
if ( (NodeType != "property") && (NodeType != "struct") && (NodeType != "enum") && (NodeType != "bitfield") && (NodeType != "array") )
{
Log::Error("Error reading " + rkTemplateName + "; a node in a properties block has an invalid name: " + NodeType);
Log::Error(rkTemplateName + ": A node in a properties block has an invalid name: " + NodeType);
}
// LoadProperty adds newly created properties to the struct, so we don't need to do anything other than call it for each sub-element.
@ -339,7 +365,7 @@ void CTemplateLoader::LoadEnumerators(XMLElement *pEnumeratorsElem, CEnumTemplat
else
{
TString LogErrorBase = "Couldn't parse enumerator in " + rkTemplateName + "; ";
TString LogErrorBase = rkTemplateName + ": Couldn't parse enumerator; ";
if (!pkID && pkName) Log::Error(LogErrorBase + "no valid ID (" + pkName + ")");
else if (pkID && !pkName) Log::Error(LogErrorBase + "no valid name (ID " + pkID + ")");
@ -364,7 +390,7 @@ void CTemplateLoader::LoadBitFlags(XMLElement *pFlagsElem, CBitfieldTemplate *pT
else
{
TString LogErrorBase = "Couldn't parse bit flag in " + templateName + "; ";
TString LogErrorBase = templateName + ": Couldn't parse bit flag; ";
if (!pkMask && pkName) Log::Error(LogErrorBase + "no mask (" + pkName + ")");
else if (pkMask && !pkName) Log::Error(LogErrorBase + "no name (mask " + pkMask + ")");
@ -381,6 +407,7 @@ CScriptTemplate* CTemplateLoader::LoadScriptTemplate(XMLDocument *pDoc, const TS
CScriptTemplate *pScript = new CScriptTemplate(mpMaster);
pScript->mObjectID = ObjectID;
pScript->mpBaseStruct = new CStructTemplate(-1, nullptr);
pScript->mSourceFile = rkTemplateName;
XMLElement *pRoot = pDoc->FirstChildElement("ScriptTemplate");
@ -399,7 +426,7 @@ CScriptTemplate* CTemplateLoader::LoadScriptTemplate(XMLDocument *pDoc, const TS
if (pPropsElem)
LoadProperties(pPropsElem, pScript->mpBaseStruct, rkTemplateName);
else
Log::Error("Error reading script template " + rkTemplateName + "; there is no properties block");
Log::Error(rkTemplateName + ": There is no \"properties\" block element");
// Editor Parameters
XMLElement *pEditor = pRoot->FirstChildElement("editor");
@ -413,7 +440,7 @@ CScriptTemplate* CTemplateLoader::LoadScriptTemplate(XMLDocument *pDoc, const TS
while (pEdProp)
{
TString Name = TString(pEdProp->Attribute("name")).ToLower();
TString ID = TString(pEdProp->Attribute("ID")).ToLower();
TString ID = TString(pEdProp->Attribute("ID"));
if (!Name.IsEmpty() && !ID.IsEmpty())
{
@ -489,7 +516,7 @@ CScriptTemplate* CTemplateLoader::LoadScriptTemplate(XMLDocument *pDoc, const TS
{
if (!pScript->mpBaseStruct->HasProperty(Asset.AssetLocation))
{
Log::Error("Error reading script template " + rkTemplateName + "; invalid property for " + Type + " asset: " + ID);
Log::Error(rkTemplateName + ": Invalid property for " + Type + " asset: " + ID);
pAsset = pAsset->NextSiblingElement();
continue;
}
@ -501,7 +528,7 @@ CScriptTemplate* CTemplateLoader::LoadScriptTemplate(XMLDocument *pDoc, const TS
TString Path = "../resources/" + ID;
if (!boost::filesystem::exists(*Path))
{
Log::Error("Error reading script template " + rkTemplateName + "; invalid file for " + Type + " asset: " + ID);
Log::Error(rkTemplateName + ": Invalid file for " + Type + " asset: " + ID);
pAsset = pAsset->NextSiblingElement();
continue;
}
@ -625,7 +652,7 @@ CScriptTemplate* CTemplateLoader::LoadScriptTemplate(XMLDocument *pDoc, const TS
void CTemplateLoader::LoadMasterTemplate(XMLDocument *pDoc, CMasterTemplate *pMaster)
{
mpMaster = pMaster;
mMasterDir = mskTemplatesDir + pMaster->mSourceFile.GetFileDirectory();
mMasterDir = pMaster->mSourceFile.GetFileDirectory();
XMLElement *pRoot = pDoc->FirstChildElement("MasterTemplate");
mpMaster->mVersion = TString(pRoot->Attribute("version")).ToInt32();
@ -668,18 +695,15 @@ void CTemplateLoader::LoadMasterTemplate(XMLDocument *pDoc, CMasterTemplate *pMa
TString TemplateName = pObj->Attribute("template");
XMLDocument ScriptXML;
OpenXML(mMasterDir + TemplateName, ScriptXML);
OpenXML(mskTemplatesDir + mMasterDir + TemplateName, ScriptXML);
if (!ScriptXML.Error())
{
CScriptTemplate *pTemp = LoadScriptTemplate(&ScriptXML, TemplateName, ID);
if (pTemp)
{
pTemp->mSourceFile = TemplateName;
mpMaster->mTemplates[ID] = pTemp;
}
}
pObj = pObj->NextSiblingElement("object");
}
@ -773,7 +797,7 @@ void CTemplateLoader::OpenXML(const TString& rkPath, XMLDocument& rDoc)
if (rDoc.Error())
{
TString Name = AbsPath.GetFileName();
Log::Error("Error when opening template XML " + Name + ": " + ErrorName(rDoc.ErrorID()));
Log::Error("Error opening " + Name + ": " + ErrorName(rDoc.ErrorID()));
}
}
@ -861,7 +885,7 @@ void CTemplateLoader::LoadGameTemplates(EGame Game)
{
CMasterTemplate *pMaster = *it;
if (pMaster->GetGame() == Game)
if (pMaster->GetGame() == Game && !pMaster->IsLoadedSuccessfully())
{
XMLDocument MasterXML;
OpenXML(mskTemplatesDir + pMaster->mSourceFile, MasterXML);
@ -878,12 +902,35 @@ void CTemplateLoader::LoadGameTemplates(EGame Game)
}
}
void CTemplateLoader::LoadAllGames()
{
std::list<CMasterTemplate*> MasterList = CMasterTemplate::GetMasterList();
for (auto it = MasterList.begin(); it != MasterList.end(); it++)
{
CMasterTemplate *pMaster = *it;
if (!pMaster->IsLoadedSuccessfully())
{
XMLDocument MasterXML;
OpenXML(mskTemplatesDir + pMaster->mSourceFile, MasterXML);
if (!MasterXML.Error())
{
CTemplateLoader Loader(mskTemplatesDir);
Loader.mGame = pMaster->GetGame();
Loader.LoadMasterTemplate(&MasterXML, pMaster);
}
}
}
}
void CTemplateLoader::LoadPropertyList(XMLDocument *pDoc, const TString& ListName)
{
XMLElement *pRootElem = pDoc->FirstChildElement("Properties");
if (!pRootElem)
Log::Error("Error reading property list at " + ListName + "; there is no root \"Properties\" block element");
Log::Error(ListName + ": There is no root \"Properties\" block element");
else
{

View File

@ -45,6 +45,7 @@ class CTemplateLoader
public:
static void LoadGameList();
static void LoadGameTemplates(EGame Game);
static void LoadAllGames();
static void LoadPropertyList(tinyxml2::XMLDocument *pDoc, const TString& rkListName);
};

View File

@ -99,6 +99,11 @@ TString CMasterTemplate::MessageByIndex(u32 Index)
return (std::next(it, Index))->second;
}
TString CMasterTemplate::GetDirectory() const
{
return mSourceFile.GetFileDirectory();
}
bool CMasterTemplate::IsLoadedSuccessfully()
{
return mFullyLoaded;
@ -135,6 +140,79 @@ TString CMasterTemplate::GetPropertyName(u32 PropertyID)
return "Unknown";
}
void CMasterTemplate::AddProperty(IPropertyTemplate *pTemp, const TString& rkTemplateName)
{
auto it = smIDMap.find(pTemp->PropertyID());
// Add this property/template to existing ID info
if (it != smIDMap.end())
{
SPropIDInfo& rInfo = it->second;
bool NewTemplate = true;
for (u32 iTemp = 0; iTemp < rInfo.XMLList.size(); iTemp++)
{
if (rInfo.XMLList[iTemp] == rkTemplateName)
{
NewTemplate = false;
break;
}
}
if (NewTemplate)
rInfo.XMLList.push_back(rkTemplateName);
it->second.PropertyList.push_back(pTemp);
}
// Create new ID info
else
{
SPropIDInfo Info;
Info.XMLList.push_back(rkTemplateName);
Info.PropertyList.push_back(pTemp);
smIDMap[pTemp->PropertyID()] = Info;
}
}
void CMasterTemplate::RenameProperty(u32 ID, const TString& rkNewName)
{
auto NameIt = smPropertyNames.find(ID);
TString CurName = (NameIt == smPropertyNames.end() ? "" : NameIt->second);
auto InfoIt = smIDMap.find(ID);
if (InfoIt != smIDMap.end())
{
const SPropIDInfo& rkInfo = InfoIt->second;
for (u32 iTemp = 0; iTemp < rkInfo.PropertyList.size(); iTemp++)
{
IPropertyTemplate *pTemp = rkInfo.PropertyList[iTemp];
if (pTemp->Name() == CurName)
pTemp->SetName(rkNewName);
}
}
if (NameIt != smPropertyNames.end())
smPropertyNames[ID] = rkNewName;
}
std::vector<TString> CMasterTemplate::GetTemplatesUsingID(u32 ID)
{
auto InfoIt = smIDMap.find(ID);
if (InfoIt != smIDMap.end())
{
const SPropIDInfo& rkInfo = InfoIt->second;
return rkInfo.XMLList;
}
else
return std::vector<TString>();
}
std::map<u32, CMasterTemplate::SPropIDInfo> CMasterTemplate::smIDMap;
std::map<EGame, CMasterTemplate*> CMasterTemplate::smMasterMap;
std::map<u32, TString> CMasterTemplate::smPropertyNames;
u32 CMasterTemplate::smGameListVersion;

View File

@ -18,11 +18,18 @@ class CMasterTemplate
bool mFullyLoaded;
std::vector<TString> mGameVersions;
std::map<TString, CStructTemplate*> mStructTemplates;
std::map<u32, CScriptTemplate*> mTemplates;
std::map<u32, TString> mStates;
std::map<u32, TString> mMessages;
struct SPropIDInfo
{
std::vector<TString> XMLList; // List of script/struct templates that use this ID
std::vector<IPropertyTemplate*> PropertyList; // List of all properties that use this ID
};
static std::map<u32, SPropIDInfo> smIDMap;
static std::map<EGame, CMasterTemplate*> smMasterMap;
static std::map<u32, TString> smPropertyNames;
static u32 smGameListVersion;
@ -45,11 +52,15 @@ public:
TString MessageByID(u32 MessageID);
TString MessageByID(const CFourCC& MessageID);
TString MessageByIndex(u32 Index);
TString GetDirectory() const;
bool IsLoadedSuccessfully();
static CMasterTemplate* GetMasterForGame(EGame Game);
static std::list<CMasterTemplate*> GetMasterList();
static TString GetPropertyName(u32 PropertyID);
static void AddProperty(IPropertyTemplate *pTemp, const TString& rkTemplateName);
static void RenameProperty(u32 ID, const TString& rkNewName);
static std::vector<TString> GetTemplatesUsingID(u32 ID);
};
// ************ INLINE ************

View File

@ -41,7 +41,7 @@ public:
IPropertyTemplate(u32 ID, CStructTemplate *pParent = 0)
: mID(ID)
, mpParent(pParent)
, mName("Unknown")
, mName("UNSET PROPERTY NAME")
, mCookPreference(eNoCookPreference)
{
}
@ -130,7 +130,7 @@ public:
// TTypedPropertyTemplate - Template property class that allows for tracking
// a default value. Typedefs are set up for a bunch of property types.
template<typename PropType, EPropertyType PropTypeEnum, class ValueClass>
template<typename PropType, EPropertyType PropTypeEnum, class ValueClass, bool CanHaveDefaultValue>
class TTypedPropertyTemplate : public IPropertyTemplate
{
friend class CTemplateLoader;
@ -147,7 +147,7 @@ public:
: IPropertyTemplate(ID, rkName, CookPreference, pParent) {}
virtual EPropertyType Type() const { return PropTypeEnum; }
virtual bool CanHaveDefault() const { return true; }
virtual bool CanHaveDefault() const { return CanHaveDefaultValue; }
virtual bool IsNumerical() const { return false; }
virtual IProperty* InstantiateProperty(CPropertyStruct *pParent)
@ -200,7 +200,7 @@ public:
// TNumericalPropertyTemplate - Subclass of TTypedPropertyTemplate for numerical
// property types, and allows a min/max value and a suffix to be tracked.
template<typename PropType, EPropertyType PropTypeEnum, class ValueClass>
class TNumericalPropertyTemplate : public TTypedPropertyTemplate<PropType,PropTypeEnum,ValueClass>
class TNumericalPropertyTemplate : public TTypedPropertyTemplate<PropType,PropTypeEnum,ValueClass,true>
{
friend class CTemplateLoader;
friend class CTemplateWriter;
@ -252,7 +252,7 @@ public:
virtual void SetParam(const TString& rkParamName, const TString& rkValue)
{
TTypedPropertyTemplate<PropType,PropTypeEnum,ValueClass>::SetParam(rkParamName, rkValue);
TTypedPropertyTemplate::SetParam(rkParamName, rkValue);
if (rkParamName == "range")
{
@ -288,14 +288,15 @@ public:
};
// Typedefs for all property types that don't need further functionality.
typedef TTypedPropertyTemplate<bool, eBoolProperty, CBoolValue> TBoolTemplate;
typedef TTypedPropertyTemplate<bool, eBoolProperty, CBoolValue, true> TBoolTemplate;
typedef TNumericalPropertyTemplate<s8, eByteProperty, CByteValue> TByteTemplate;
typedef TNumericalPropertyTemplate<s16, eShortProperty, CShortValue> TShortTemplate;
typedef TNumericalPropertyTemplate<s32, eLongProperty, CLongValue> TLongTemplate;
typedef TNumericalPropertyTemplate<float, eFloatProperty, CFloatValue> TFloatTemplate;
typedef TTypedPropertyTemplate<TString, eStringProperty, CStringValue> TStringTemplate;
typedef TTypedPropertyTemplate<CVector3f, eVector3Property, CVector3Value> TVector3Template;
typedef TTypedPropertyTemplate<CColor, eColorProperty, CColorValue> TColorTemplate;
typedef TTypedPropertyTemplate<TString, eStringProperty, CStringValue, false> TStringTemplate;
typedef TTypedPropertyTemplate<CVector3f, eVector3Property, CVector3Value, true> TVector3Template;
typedef TTypedPropertyTemplate<CColor, eColorProperty, CColorValue, true> TColorTemplate;
typedef TTypedPropertyTemplate<CAnimationParameters, eCharacterProperty, CCharacterValue, false> TCharacterTemplate;
// CFileTemplate - Property template for files. Tracks a list of file types that
// the property is allowed to accept.
@ -348,36 +349,8 @@ public:
const TStringList& Extensions() const { return mAcceptedExtensions; }
};
// CCharacterTemplate - Typed property that doesn't allow default values.
class CCharacterTemplate : public TTypedPropertyTemplate<CAnimationParameters,
eCharacterProperty,
CCharacterValue>
{
friend class CTemplateLoader;
friend class CTemplateWriter;
public:
CCharacterTemplate(u32 ID, CStructTemplate *pParent = 0)
: TTypedPropertyTemplate(ID, pParent) { }
CCharacterTemplate(u32 ID, const TString& rkName, ECookPreference CookPreference, CStructTemplate *pParent = 0)
: TTypedPropertyTemplate(ID, rkName, CookPreference, pParent) { }
virtual bool CanHaveDefault() const
{
return false;
}
IProperty* InstantiateProperty(CPropertyStruct *pParent)
{
return new TCharacterProperty(this, pParent);
}
DEFINE_TEMPLATE_CLONE(CCharacterTemplate)
};
// CEnumTemplate - Property template for enums. Tracks a list of possible values (enumerators).
class CEnumTemplate : public TLongTemplate
class CEnumTemplate : public TTypedPropertyTemplate<s32, eEnumProperty, CHexLongValue, true>
{
friend class CTemplateLoader;
friend class CTemplateWriter;
@ -400,12 +373,12 @@ class CEnumTemplate : public TLongTemplate
public:
CEnumTemplate(u32 ID, CStructTemplate *pParent = 0)
: TLongTemplate(ID, pParent)
: TTypedPropertyTemplate(ID, pParent)
{
}
CEnumTemplate(u32 ID, const TString& rkName, ECookPreference CookPreference, CStructTemplate *pParent = 0)
: TLongTemplate(ID, rkName, CookPreference, pParent)
: TTypedPropertyTemplate(ID, rkName, CookPreference, pParent)
{
}
@ -424,7 +397,7 @@ public:
virtual void Copy(const IPropertyTemplate *pkTemp)
{
TLongTemplate::Copy(pkTemp);
TTypedPropertyTemplate::Copy(pkTemp);
const CEnumTemplate *pkEnum = static_cast<const CEnumTemplate*>(pkTemp);
mEnumerators = pkEnum->mEnumerators;
@ -435,7 +408,7 @@ public:
{
const CEnumTemplate *pkEnum = static_cast<const CEnumTemplate*>(pkTemp);
return ( (TLongTemplate::Matches(pkTemp)) &&
return ( (TTypedPropertyTemplate::Matches(pkTemp)) &&
(mEnumerators == pkEnum->mEnumerators) &&
(mSourceFile == pkEnum->mSourceFile) );
}
@ -474,7 +447,7 @@ public:
// CBitfieldTemplate - Property template for bitfields, which can have multiple
// distinct boolean parameters packed into one property.
class CBitfieldTemplate : public TTypedPropertyTemplate<u32, eBitfieldProperty, CHexLongValue>
class CBitfieldTemplate : public TTypedPropertyTemplate<u32, eBitfieldProperty, CHexLongValue, true>
{
friend class CTemplateLoader;
friend class CTemplateWriter;
@ -594,6 +567,11 @@ public:
IPropertyTemplate::Copy(pkTemp);
const CStructTemplate *pkStruct = static_cast<const CStructTemplate*>(pkTemp);
CopyStructData(pkStruct);
}
void CopyStructData(const CStructTemplate *pkStruct)
{
mVersionPropertyCounts = pkStruct->mVersionPropertyCounts;
mIsSingleProperty = pkStruct->mIsSingleProperty;
mSourceFile = pkStruct->mSourceFile;
@ -611,7 +589,17 @@ public:
if ( (IPropertyTemplate::Matches(pkTemp)) &&
(mVersionPropertyCounts == pkStruct->mVersionPropertyCounts) &&
(mIsSingleProperty == pkStruct->mIsSingleProperty) &&
(mSourceFile == pkStruct->mSourceFile) &&
(mSourceFile == pkStruct->mSourceFile) )
{
return StructDataMatches(pkStruct);
}
return false;
}
bool StructDataMatches(const CStructTemplate *pkStruct) const
{
if ( (mIsSingleProperty == pkStruct->mIsSingleProperty) &&
(mSubProperties.size() == pkStruct->mSubProperties.size()) )
{
for (u32 iSub = 0; iSub < mSubProperties.size(); iSub++)
@ -673,6 +661,8 @@ public:
virtual void Copy(const IPropertyTemplate *pkTemp)
{
IPropertyTemplate::Copy(pkTemp);
CStructTemplate::Copy(pkTemp);
mElementName = static_cast<const CArrayTemplate*>(pkTemp)->mElementName;
}

View File

@ -168,7 +168,7 @@ public:
TString ToString() const
{
return TString::HexString(mValue, true, true, 8);
return TString::HexString(mValue, true, true, mValue > 0xFF ? 8 : 2);
}
void FromString(const TString& rkString)

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<Properties version="4">
<property ID="0x0001F679" name="Unknown"/>
<property ID="0x000E4BAE" name="Sky Temple Key 5"/>
@ -4333,7 +4333,7 @@
<property ID="0x60FE934E" name="Unknown"/>
<property ID="0x610B8FB8" name="Unknown"/>
<property ID="0x610C0165" name="Unknown"/>
<property ID="0x610EEC90" name="This room's #"/>
<property ID="0x610EEC90" name="This room&apos;s #"/>
<property ID="0x6117E78F" name="Unknown"/>
<property ID="0x611905F1" name="Unknown"/>
<property ID="0x6119D07F" name="Unknown"/>

View File

@ -1,165 +1,165 @@
<?xml version="1.0" encoding="UTF-8"?>
<MasterTemplate version="4">
<objects>
<object ID="AAGM" template="Script/AnimGridModifier.xml"/>
<object ID="ACKF" template="Script/ActorKeyframe.xml"/>
<object ID="ACOU" template="Script/Acoustics.xml"/>
<object ID="ACTR" template="Script/Actor.xml"/>
<object ID="ADMG" template="Script/AreaDamage.xml"/>
<object ID="AIHT" template="Script/AIHint.xml"/>
<object ID="AIKF" template="Script/AIKeyframe.xml"/>
<object ID="AIWP" template="Script/AIWaypoint.xml"/>
<object ID="ACOU" template="Script/Acoustics.xml"/>
<object ID="ACTR" template="Script/Actor.xml"/>
<object ID="AAGM" template="Script/AnimGridModifier.xml"/>
<object ID="ACKF" template="Script/ActorKeyframe.xml"/>
<object ID="AMKF" template="Script/ActorMultiKeyframe.xml"/>
<object ID="ATRN" template="Script/ActorTransform.xml"/>
<object ID="REAA" template="Script/AreaAttributes.xml"/>
<object ID="ADMG" template="Script/AreaDamage.xml"/>
<object ID="AOCL" template="Script/AudioOccluder.xml"/>
<object ID="ARNO" template="Script/AreaNode.xml"/>
<object ID="ARPA" template="Script/AreaPath.xml"/>
<object ID="ASAS" template="Script/AssignedAudioStream.xml"/>
<object ID="AOCL" template="Script/AudioOccluder.xml"/>
<object ID="ATRN" template="Script/ActorTransform.xml"/>
<object ID="AVIS" template="Script/AVIS.xml"/>
<object ID="BABL" template="Script/BarrelBalloon.xml"/>
<object ID="BARL" template="Script/BarrelCannon.xml"/>
<object ID="BUHA" template="Script/BeatUpHandler.xml"/>
<object ID="BIRD" template="Script/BirdBoss.xml"/>
<object ID="BLME" template="Script/BloomEffect.xml"/>
<object ID="BLMV" template="Script/BloomVolume.xml"/>
<object ID="BLUR" template="Script/CameraBlurKeyframe.xml"/>
<object ID="BONU" template="Script/Bonus.xml"/>
<object ID="BTYR" template="Script/BouncyTire.xml"/>
<object ID="BUHA" template="Script/BeatUpHandler.xml"/>
<object ID="CABL" template="Script/Cable.xml"/>
<object ID="BLUR" template="Script/CameraBlurKeyframe.xml"/>
<object ID="FILT" template="Script/CameraFilterKeyframe.xml"/>
<object ID="CAMH" template="Script/CameraHint.xml"/>
<object ID="CMAN" template="Script/CameraManager.xml"/>
<object ID="CMOD" template="Script/CameraModifier.xml"/>
<object ID="CAMS" template="Script/CameraShaker.xml"/>
<object ID="CKPT" template="Script/Checkpoint.xml"/>
<object ID="CART" template="Script/MineCart.xml"/>
<object ID="CINE" template="Script/CinematicCamera.xml"/>
<object ID="CKPT" template="Script/Checkpoint.xml"/>
<object ID="CLPC" template="Script/ClingPathControl.xml"/>
<object ID="CLRM" template="Script/ColorModulate.xml"/>
<object ID="CRLY" template="Script/ConditionalRelay.xml"/>
<object ID="CMAN" template="Script/CameraManager.xml"/>
<object ID="CMGR" template="Script/PirateCrabManager.xml"/>
<object ID="CMOD" template="Script/CameraModifier.xml"/>
<object ID="CNTA" template="Script/ControllerAction.xml"/>
<object ID="CNTR" template="Script/Counter.xml"/>
<object ID="CRAB" template="Script/PirateCrab.xml"/>
<object ID="CRED" template="Script/Credits.xml"/>
<object ID="CRLY" template="Script/ConditionalRelay.xml"/>
<object ID="CSGO" template="Script/GameOver.xml"/>
<object ID="CSTI" template="Script/CSTI.xml"/>
<object ID="DMGA" template="Script/DamageArea.xml"/>
<object ID="DMGE" template="Script/DamageEffect.xml"/>
<object ID="DTRG" template="Script/DamageableTrigger.xml"/>
<object ID="DTRO" template="Script/DamageableTriggerOrientated.xml"/>
<object ID="DEBR" template="Script/Debris.xml"/>
<object ID="DOFT" template="Script/DepthOfFieldTuner.xml"/>
<object ID="DFOG" template="Script/DistanceFog.xml"/>
<object ID="DLHT" template="Script/DynamicLight.xml"/>
<object ID="DMGA" template="Script/DamageArea.xml"/>
<object ID="DMGE" template="Script/DamageEffect.xml"/>
<object ID="DOFT" template="Script/DepthOfFieldTuner.xml"/>
<object ID="DTRG" template="Script/DamageableTrigger.xml"/>
<object ID="DTRO" template="Script/DamageableTriggerOrientated.xml"/>
<object ID="EFCT" template="Script/Effect.xml"/>
<object ID="EOLD" template="Script/EOLDisplay.xml"/>
<object ID="FXDC" template="Script/EnvFxDensityController.xml"/>
<object ID="FSWC" template="Script/FactorySwitch.xml"/>
<object ID="FILT" template="Script/CameraFilterKeyframe.xml"/>
<object ID="FLPS" template="Script/FalsePerspective.xml"/>
<object ID="FOBS" template="Script/ForestBoss.xml"/>
<object ID="FOGO" template="Script/FogOverlay.xml"/>
<object ID="FOGV" template="Script/FogVolume.xml"/>
<object ID="FOBS" template="Script/ForestBoss.xml"/>
<object ID="GMGR" template="Script/GameManager.xml"/>
<object ID="CSGO" template="Script/GameOver.xml"/>
<object ID="GOBD" template="Script/GeneratedObjectDeleter.xml"/>
<object ID="GENR" template="Script/Generator.xml"/>
<object ID="GCTR" template="Script/GenericCreature.xml"/>
<object ID="FSWC" template="Script/FactorySwitch.xml"/>
<object ID="FXDC" template="Script/EnvFxDensityController.xml"/>
<object ID="GCGP" template="Script/GenericCreatureGroup.xml"/>
<object ID="GPDT" template="Script/GroundPoundDetector.xml"/>
<object ID="GUCH" template="Script/GuiCharacter.xml"/>
<object ID="GCTR" template="Script/GenericCreature.xml"/>
<object ID="GENR" template="Script/Generator.xml"/>
<object ID="GMGR" template="Script/GameManager.xml"/>
<object ID="GMNU" template="Script/GuiMenu.xml"/>
<object ID="GOBD" template="Script/GeneratedObjectDeleter.xml"/>
<object ID="GPDT" template="Script/GroundPoundDetector.xml"/>
<object ID="GPTR" template="Script/GPTR.xml"/>
<object ID="GSLD" template="Script/GuiSlider.xml"/>
<object ID="GUCH" template="Script/GuiCharacter.xml"/>
<object ID="GWIG" template="Script/GuiWidget.xml"/>
<object ID="HINT" template="Script/PlayerHint.xml"/>
<object ID="HUDD" template="Script/HUD.xml"/>
<object ID="HUDP" template="Script/HUDProxy.xml"/>
<object ID="IHUD" template="Script/IslandHUD.xml"/>
<object ID="ISAR" template="Script/IslandArea.xml"/>
<object ID="JB01" template="Script/JungleBoss1.xml"/>
<object ID="KONG" template="Script/Kong.xml"/>
<object ID="KNGP" template="Script/KongProxy.xml"/>
<object ID="LVLD" template="Script/LevelDarkener.xml"/>
<object ID="KONG" template="Script/Kong.xml"/>
<object ID="LODC" template="Script/LODController.xml"/>
<object ID="LVLD" template="Script/LevelDarkener.xml"/>
<object ID="LVOL" template="Script/LightVolume.xml"/>
<object ID="MNPL" template="Script/MotionPlatform.xml"/>
<object ID="MEAT" template="Script/MEAT.xml"/>
<object ID="MRLY" template="Script/MemoryRelay.xml"/>
<object ID="CART" template="Script/MineCart.xml"/>
<object ID="MOLC" template="Script/MoleCart.xml"/>
<object ID="MOLM" template="Script/MoleTrainManager.xml"/>
<object ID="MOLE" template="Script/Mole.xml"/>
<object ID="MMDL" template="Script/MultiModelActor.xml"/>
<object ID="MNPL" template="Script/MotionPlatform.xml"/>
<object ID="MOLC" template="Script/MoleCart.xml"/>
<object ID="MOLE" template="Script/Mole.xml"/>
<object ID="MOLM" template="Script/MoleTrainManager.xml"/>
<object ID="MOVI" template="Script/StreamedMovie.xml"/>
<object ID="MPSR" template="Script/MultiplayerSyncRelay.xml"/>
<object ID="MRLY" template="Script/MemoryRelay.xml"/>
<object ID="MUMA" template="Script/MusicMaster.xml"/>
<object ID="SAMD" template="Script/StreamedAudioModifier.xml"/>
<object ID="MUTR" template="Script/MusicTrack.xml"/>
<object ID="OBRG" template="Script/OceanBridge.xml"/>
<object ID="WAVE" template="Script/OceanWave.xml"/>
<object ID="OPAA" template="Script/OptionalAreaAsset.xml"/>
<object ID="PCTL" template="Script/PathControl.xml"/>
<object ID="PNUT" template="Script/Peanut.xml"/>
<object ID="PCKP" template="Script/Pickup.xml"/>
<object ID="PCHK" template="Script/PilotChicken.xml"/>
<object ID="CRAB" template="Script/PirateCrab.xml"/>
<object ID="CMGR" template="Script/PirateCrabManager.xml"/>
<object ID="PLAT" template="Script/Platform.xml"/>
<object ID="HINT" template="Script/PlayerHint.xml"/>
<object ID="PCKP" template="Script/Pickup.xml"/>
<object ID="PCTL" template="Script/PathControl.xml"/>
<object ID="PLAC" template="Script/PlayerActor.xml"/>
<object ID="PRSP" template="Script/PlayerRespawn.xml"/>
<object ID="PTOK" template="Script/PlayerToken.xml"/>
<object ID="PLAT" template="Script/Platform.xml"/>
<object ID="PNUT" template="Script/Peanut.xml"/>
<object ID="POIO" template="Script/PoiObject.xml"/>
<object ID="SPRL" template="Script/PositionRelay.xml"/>
<object ID="PRLA" template="Script/PickupRelay.xml"/>
<object ID="PROJ" template="Script/Projectile.xml"/>
<object ID="RADD" template="Script/RadialDamage.xml"/>
<object ID="RMBI" template="Script/Rambi.xml"/>
<object ID="PRSP" template="Script/PlayerRespawn.xml"/>
<object ID="PTOK" template="Script/PlayerToken.xml"/>
<object ID="RACR" template="Script/RambiCrate.xml"/>
<object ID="REAC" template="Script/ReactiveObject.xml"/>
<object ID="RSCL" template="Script/RSCL.xml"/>
<object ID="SRLY" template="Script/Relay.xml"/>
<object ID="RRLY" template="Script/RandomRelay.xml"/>
<object ID="RSBL" template="Script/RespawnBalloon.xml"/>
<object ID="RTNM" template="Script/Retronome.xml"/>
<object ID="RCTL" template="Script/ReviewControl.xml"/>
<object ID="RADD" template="Script/RadialDamage.xml"/>
<object ID="RBRL" template="Script/RocketBarrel.xml"/>
<object ID="RCHK" template="Script/RobotChicken.xml"/>
<object ID="RCKF" template="Script/RobotChickenFlyer.xml"/>
<object ID="RBRL" template="Script/RocketBarrel.xml"/>
<object ID="RCTL" template="Script/ReviewControl.xml"/>
<object ID="REAA" template="Script/AreaAttributes.xml"/>
<object ID="REAC" template="Script/ReactiveObject.xml"/>
<object ID="RMBI" template="Script/Rambi.xml"/>
<object ID="ROPE" template="Script/SwingRope.xml"/>
<object ID="RRLY" template="Script/RandomRelay.xml"/>
<object ID="RSBL" template="Script/RespawnBalloon.xml"/>
<object ID="RSCL" template="Script/RSCL.xml"/>
<object ID="RTNM" template="Script/Retronome.xml"/>
<object ID="RUMB" template="Script/RumbleEffect.xml"/>
<object ID="SLCT" template="Script/ScriptLayerController.xml"/>
<object ID="SQTR" template="Script/SequenceTimer.xml"/>
<object ID="SHDW" template="Script/ShadowProjector.xml"/>
<object ID="SAMD" template="Script/StreamedAudioModifier.xml"/>
<object ID="SBMI" template="Script/SkyboxModInca.xml"/>
<object ID="SOND" template="Script/Sound.xml"/>
<object ID="SCTL" template="Script/SurfaceControl.xml"/>
<object ID="SHDW" template="Script/ShadowProjector.xml"/>
<object ID="SLCT" template="Script/ScriptLayerController.xml"/>
<object ID="SNDM" template="Script/SoundModifier.xml"/>
<object ID="SNMD" template="Script/SoundModifierData.xml"/>
<object ID="SPWN" template="Script/SpawnPoint.xml"/>
<object ID="SOND" template="Script/Sound.xml"/>
<object ID="SPFN" template="Script/SpecialFunction.xml"/>
<object ID="SPIN" template="Script/Spinner.xml"/>
<object ID="SVOL" template="Script/SplineModifierVolume.xml"/>
<object ID="SPPA" template="Script/SplinePath.xml"/>
<object ID="SPNW" template="Script/SplinePathNetwork.xml"/>
<object ID="SWKP" template="Script/SquawkPuzzleAlert.xml"/>
<object ID="SPPA" template="Script/SplinePath.xml"/>
<object ID="SPRL" template="Script/PositionRelay.xml"/>
<object ID="SPWN" template="Script/SpawnPoint.xml"/>
<object ID="SQTR" template="Script/SequenceTimer.xml"/>
<object ID="SRLY" template="Script/Relay.xml"/>
<object ID="STAU" template="Script/StreamedAudio.xml"/>
<object ID="MOVI" template="Script/StreamedMovie.xml"/>
<object ID="SUBT" template="Script/Subtitles.xml"/>
<object ID="SCTL" template="Script/SurfaceControl.xml"/>
<object ID="SUSP" template="Script/SuspensionBridge.xml"/>
<object ID="ROPE" template="Script/SwingRope.xml"/>
<object ID="SVOL" template="Script/SplineModifierVolume.xml"/>
<object ID="SWKP" template="Script/SquawkPuzzleAlert.xml"/>
<object ID="SWTC" template="Script/Switch.xml"/>
<object ID="TARP" template="Script/TarPit.xml"/>
<object ID="TXPN" template="Script/TextPane.xml"/>
<object ID="TIDE" template="Script/TidalWave.xml"/>
<object ID="TEOL" template="Script/TimeAttackEOLDisplay.xml"/>
<object ID="TKEY" template="Script/TimeKeyframe.xml"/>
<object ID="TIDE" template="Script/TidalWave.xml"/>
<object ID="TIMR" template="Script/Timer.xml"/>
<object ID="TIPI" template="Script/TippyPlatform.xml"/>
<object ID="TPND" template="Script/TPND.xml"/>
<object ID="TKEY" template="Script/TimeKeyframe.xml"/>
<object ID="TMGR" template="Script/TrainTrackManager.xml"/>
<object ID="TSEQ" template="Script/TrainSequence.xml"/>
<object ID="TRSC" template="Script/TransitionScreen.xml"/>
<object ID="TPND" template="Script/TPND.xml"/>
<object ID="TRGR" template="Script/Trigger.xml"/>
<object ID="TRSC" template="Script/TransitionScreen.xml"/>
<object ID="TSEQ" template="Script/TrainSequence.xml"/>
<object ID="TUTR" template="Script/Tutorial.xml"/>
<object ID="VRBR" template="Script/VerticalRocketBarrel.xml"/>
<object ID="TXPN" template="Script/TextPane.xml"/>
<object ID="VBPT" template="Script/VolcanoBossBodyPart.xml"/>
<object ID="VOLG" template="Script/VolGroup.xml"/>
<object ID="VRBR" template="Script/VerticalRocketBarrel.xml"/>
<object ID="WAVE" template="Script/OceanWave.xml"/>
<object ID="WAYP" template="Script/Waypoint.xml"/>
<object ID="WLDA" template="Script/WorldAttributes.xml"/>
<object ID="WLIT" template="Script/WorldLightFader.xml"/>

View File

@ -4,19 +4,26 @@
<properties>
<struct ID="0x255A4580" template="Structs/EditorProperties.xml"/>
<array ID="0xEF5C94E9">
<default>0</default>
<element_name>Connection</element_name>
<properties>
<property ID="0x00" name="Connection Index" type="short" />
<property ID="0x00" name="Connection Index" type="short">
<default>0</default>
</property>
<array ID="0x01" name="Activation Times">
<element_name>Activation Time</element_name>
<properties>
<property ID="0x00" name="Time" type="float" />
<property ID="0x00" name="Time" type="float">
<default>0.0</default>
</property>
<property ID="0x01" name="Unknown 1" type="long">
<default>0</default>
<description>Always 0</description>
</property>
<property ID="0x02" name="Unknown 2" type="long"/>
<property ID="0x02" name="Unknown 2" type="long">
<default>0</default>
</property>
<property ID="0x03" name="Unknown 3" type="long">
<default>0</default>
<description>Always 0</description>
</property>
</properties>

View File

@ -8,7 +8,7 @@
</property>
<struct ID="0x20091B54" template="Structs/SplineType.xml"/>
<property ID="0x00DD86E2" type="color">
<default>1,0,1,1</default>
<default>1.0, 0.0, 1.0, 1.0</default>
</property>
</properties>
<states/>

View File

@ -1,9 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<struct name="LayerID" type="single">
<properties>
<property ID="0x00" type="long" name="Layer ID Part 1"/>
<property ID="0x01" type="long" name="Layer ID Part 2"/>
<property ID="0x02" type="long" name="Layer ID Part 3"/>
<property ID="0x03" type="long" name="Layer ID Part 4"/>
<property ID="0x00" name="Layer ID Part 1" type="long">
<default>0</default>
</property>
<property ID="0x01" name="Layer ID Part 2" type="long">
<default>0</default>
</property>
<property ID="0x02" name="Layer ID Part 3" type="long">
<default>0</default>
</property>
<property ID="0x03" name="Layer ID Part 4" type="long">
<default>0</default>
</property>
</properties>
</struct>

View File

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<struct name="LayerSwitch" type="single">
<properties>
<property ID="0x00" name="Area ID" type="file" ext="NULL"/>
<property ID="0x01" name="Layer #" type="long"/>
<property ID="0x00" name="Area ID" type="file" extensions="UNKN"/>
<property ID="0x01" name="Layer #" type="long">
<default>0</default>
</property>
</properties>
</struct>

View File

@ -5,7 +5,7 @@
<default>1.0, 1.0, 1.0, 1.0</default>
</property>
<enum ID="0x6B5E7509">
<default>1</default>
<default>0x01</default>
<enumerators>
<enumerator ID="0x00" name="Unknown 1"/>
<enumerator ID="0x01" name="Normal World Lighting"/>

View File

@ -2,13 +2,13 @@
<struct name="Transform" type="single">
<properties>
<property ID="0x00" name="Position" type="vector3f">
<default>0,0,0</default>
<default>0.0, 0.0, 0.0</default>
</property>
<property ID="0x01" name="Rotation" type="vector3f">
<default>0,0,0</default>
<default>0.0, 0.0, 0.0</default>
</property>
<property ID="0x02" name="Scale" type="vector3f">
<default>1,1,1</default>
<default>1.0, 1.0, 1.0</default>
</property>
</properties>
</struct>

View File

@ -1,21 +1,21 @@
<?xml version="1.0" ?>
<enum name="ControllerButton">
<enumerator ID="0x0" name="None" />
<enumerator ID="0x1" name="Left Stick Up" />
<enumerator ID="0x2" name="Left Stick Down" />
<enumerator ID="0x3" name="Left Stick Left" />
<enumerator ID="0x4" name="Left Stick Right" />
<enumerator ID="0x5" name="Right Stick Up" />
<enumerator ID="0x6" name="Right Stick Down" />
<enumerator ID="0x7" name="Right Stick Left" />
<enumerator ID="0x8" name="Right Stick Right" />
<enumerator ID="0x9" name="Left Trigger" />
<enumerator ID="0xA" name="Right Trigger" />
<enumerator ID="0xB" name="D-Pad Up" />
<enumerator ID="0xC" name="D-Pad Down" />
<enumerator ID="0xD" name="D-Pad Left" />
<enumerator ID="0xE" name="D-Pad Right" />
<enumerator ID="0xF" name="A Button" />
<enumerator ID="0x00" name="None" />
<enumerator ID="0x01" name="Left Stick Up" />
<enumerator ID="0x02" name="Left Stick Down" />
<enumerator ID="0x03" name="Left Stick Left" />
<enumerator ID="0x04" name="Left Stick Right" />
<enumerator ID="0x05" name="Right Stick Up" />
<enumerator ID="0x06" name="Right Stick Down" />
<enumerator ID="0x07" name="Right Stick Left" />
<enumerator ID="0x08" name="Right Stick Right" />
<enumerator ID="0x09" name="Left Trigger" />
<enumerator ID="0x0A" name="Right Trigger" />
<enumerator ID="0x0B" name="D-Pad Up" />
<enumerator ID="0x0C" name="D-Pad Down" />
<enumerator ID="0x0D" name="D-Pad Left" />
<enumerator ID="0x0E" name="D-Pad Right" />
<enumerator ID="0x0F" name="A Button" />
<enumerator ID="0x10" name="B Button" />
<enumerator ID="0x11" name="X Button" />
<enumerator ID="0x12" name="Y Button" />

View File

@ -1,22 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<enum name="InventorySlot">
<enumerators>
<enumerator ID="0x0" name="Power Beam"/>
<enumerator ID="0x1" name="Ice Beam"/>
<enumerator ID="0x2" name="Wave Beam"/>
<enumerator ID="0x3" name="Plasma Beam"/>
<enumerator ID="0x4" name="Missile"/>
<enumerator ID="0x5" name="Scan Visor"/>
<enumerator ID="0x6" name="Morph Ball Bomb"/>
<enumerator ID="0x7" name="Power Bomb"/>
<enumerator ID="0x8" name="Flamethrower"/>
<enumerator ID="0x9" name="Thermal Visor"/>
<enumerator ID="0xA" name="Charge Beam"/>
<enumerator ID="0xB" name="Super Missile"/>
<enumerator ID="0xC" name="Grapple Beam"/>
<enumerator ID="0xD" name="X-Ray Visor"/>
<enumerator ID="0xE" name="Ice Spreader"/>
<enumerator ID="0xF" name="Space Jump Boots"/>
<enumerator ID="0x00" name="Power Beam"/>
<enumerator ID="0x01" name="Ice Beam"/>
<enumerator ID="0x02" name="Wave Beam"/>
<enumerator ID="0x03" name="Plasma Beam"/>
<enumerator ID="0x04" name="Missile"/>
<enumerator ID="0x05" name="Scan Visor"/>
<enumerator ID="0x06" name="Morph Ball Bomb"/>
<enumerator ID="0x07" name="Power Bomb"/>
<enumerator ID="0x08" name="Flamethrower"/>
<enumerator ID="0x09" name="Thermal Visor"/>
<enumerator ID="0x0A" name="Charge Beam"/>
<enumerator ID="0x0B" name="Super Missile"/>
<enumerator ID="0x0C" name="Grapple Beam"/>
<enumerator ID="0x0D" name="X-Ray Visor"/>
<enumerator ID="0x0E" name="Ice Spreader"/>
<enumerator ID="0x0F" name="Space Jump Boots"/>
<enumerator ID="0x10" name="Morph Ball"/>
<enumerator ID="0x11" name="Combat Visor"/>
<enumerator ID="0x12" name="Boost Ball"/>

View File

@ -1,21 +1,21 @@
<?xml version="1.0" ?>
<enum name="PlayerAction">
<enumerator ID="0x0" name="Forward" />
<enumerator ID="0x1" name="Backward" />
<enumerator ID="0x2" name="Turn Left" />
<enumerator ID="0x3" name="Turn Right" />
<enumerator ID="0x4" name="Strafe Left" />
<enumerator ID="0x5" name="Strafe Right" />
<enumerator ID="0x6" name="Look Left" />
<enumerator ID="0x7" name="Look Right" />
<enumerator ID="0x8" name="Look Up" />
<enumerator ID="0x9" name="Look Down" />
<enumerator ID="0xA" name="Jump/Boost" />
<enumerator ID="0xB" name="Fire/Bomb" />
<enumerator ID="0xC" name="Missile/PowerBomb" />
<enumerator ID="0xD" name="Morph" />
<enumerator ID="0xE" name="Aim Up" />
<enumerator ID="0xF" ame="Aim Down" />
<enumerator ID="0x00" name="Forward" />
<enumerator ID="0x01" name="Backward" />
<enumerator ID="0x02" name="Turn Left" />
<enumerator ID="0x03" name="Turn Right" />
<enumerator ID="0x04" name="Strafe Left" />
<enumerator ID="0x05" name="Strafe Right" />
<enumerator ID="0x06" name="Look Left" />
<enumerator ID="0x07" name="Look Right" />
<enumerator ID="0x08" name="Look Up" />
<enumerator ID="0x09" name="Look Down" />
<enumerator ID="0x0A" name="Jump/Boost" />
<enumerator ID="0x0B" name="Fire/Bomb" />
<enumerator ID="0x0C" name="Missile/PowerBomb" />
<enumerator ID="0x0D" name="Morph" />
<enumerator ID="0x0E" name="Aim Up" />
<enumerator ID="0x0F" ame="Aim Down" />
<enumerator ID="0x10" name="Cycle Beam Up" />
<enumerator ID="0x11" name="Cycle Beam Down" />
<enumerator ID="0x12" name="Cycle Item" />

View File

@ -1,22 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<enum name="SpecialFunctionType">
<enumerators>
<enumerator ID="0x0" name="What"/>
<enumerator ID="0x1" name="Player Follow Locator"/>
<enumerator ID="0x2" name="Spinner Controller"/>
<enumerator ID="0x3" name="Object Follow Locator"/>
<enumerator ID="0x4" name="Function 4"/>
<enumerator ID="0x5" name="Inventory Activator"/>
<enumerator ID="0x6" name="Map Station"/>
<enumerator ID="0x7" name="Save Station"/>
<enumerator ID="0x8" name="Intro Boss Ring Controller"/>
<enumerator ID="0x9" name="View Frustum Tester (Unused)"/>
<enumerator ID="0xA" name="Shot Spinner Controller"/>
<enumerator ID="0xB" name="Escape Sequence"/>
<enumerator ID="0xC" name="Boss Energy Bar"/>
<enumerator ID="0xD" name="End Game"/>
<enumerator ID="0xE" name="HUD Fade In"/>
<enumerator ID="0xF" name="Cinematic Skip"/>
<enumerator ID="0x00" name="What"/>
<enumerator ID="0x01" name="Player Follow Locator"/>
<enumerator ID="0x02" name="Spinner Controller"/>
<enumerator ID="0x03" name="Object Follow Locator"/>
<enumerator ID="0x04" name="Function 4"/>
<enumerator ID="0x05" name="Inventory Activator"/>
<enumerator ID="0x06" name="Map Station"/>
<enumerator ID="0x07" name="Save Station"/>
<enumerator ID="0x08" name="Intro Boss Ring Controller"/>
<enumerator ID="0x09" name="View Frustum Tester (Unused)"/>
<enumerator ID="0x0A" name="Shot Spinner Controller"/>
<enumerator ID="0x0B" name="Escape Sequence"/>
<enumerator ID="0x0C" name="Boss Energy Bar"/>
<enumerator ID="0x0D" name="End Game"/>
<enumerator ID="0x0E" name="HUD Fade In"/>
<enumerator ID="0x0F" name="Cinematic Skip"/>
<enumerator ID="0x10" name="Script Layer Controller"/>
<enumerator ID="0x11" name="Rain Simulator"/>
<enumerator ID="0x12" name="Area Damage"/>

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<enum name="VulnerabilityType">
<enumerators>
<enumerator ID="0x0" name="Double Damage"/>
<enumerator ID="0x1" name="Normal"/>
<enumerator ID="0x2" name="Reflect"/>
<enumerator ID="0x3" name="Immune"/>
<enumerator ID="0x4" name="Pass Through"/>
<enumerator ID="0x5" name="Direct/Double"/>
<enumerator ID="0x6" name="Direct"/>
<enumerator ID="0x00" name="Double Damage"/>
<enumerator ID="0x01" name="Normal"/>
<enumerator ID="0x02" name="Reflect"/>
<enumerator ID="0x03" name="Immune"/>
<enumerator ID="0x04" name="Pass Through"/>
<enumerator ID="0x05" name="Direct/Double"/>
<enumerator ID="0x06" name="Direct"/>
</enumerators>
</enum>

View File

@ -1,20 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<enum name="WeaponType">
<enumerators>
<enumerator ID="0x0" name="Power"/>
<enumerator ID="0x1" name="Ice"/>
<enumerator ID="0x2" name="Wave"/>
<enumerator ID="0x3" name="Plasma"/>
<enumerator ID="0x4" name="Bomb"/>
<enumerator ID="0x5" name="Power Bomb"/>
<enumerator ID="0x6" name="Missile"/>
<enumerator ID="0x7" name="Boost Ball"/>
<enumerator ID="0x8" name="Phazon"/>
<enumerator ID="0x9" name="Enemy Weapon 1"/>
<enumerator ID="0xA" name="Enemy Weapon 2 (Poison)"/>
<enumerator ID="0xB" name="Enemy Weapon 3 (Lava)"/>
<enumerator ID="0xC" name="Enemy Weapon 4"/>
<enumerator ID="0xD" name="Unknown Weapon 1"/>
<enumerator ID="0xE" name="Unknown Weapon 2"/>
<enumerator ID="0x00" name="Power"/>
<enumerator ID="0x01" name="Ice"/>
<enumerator ID="0x02" name="Wave"/>
<enumerator ID="0x03" name="Plasma"/>
<enumerator ID="0x04" name="Bomb"/>
<enumerator ID="0x05" name="Power Bomb"/>
<enumerator ID="0x06" name="Missile"/>
<enumerator ID="0x07" name="Boost Ball"/>
<enumerator ID="0x08" name="Phazon"/>
<enumerator ID="0x09" name="Enemy Weapon 1"/>
<enumerator ID="0x0A" name="Enemy Weapon 2 (Poison)"/>
<enumerator ID="0x0B" name="Enemy Weapon 3 (Lava)"/>
<enumerator ID="0x0C" name="Enemy Weapon 4"/>
<enumerator ID="0x0D" name="Unknown Weapon 1"/>
<enumerator ID="0x0E" name="Unknown Weapon 2"/>
</enumerators>
</enum>

View File

@ -8,6 +8,8 @@
<property ID="0x03" name="Active" type="bool"/>
<property ID="0x04" name="Unknown 1" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -10,6 +10,8 @@
<property ID="0x05" name="Unknown 5" type="long"/>
<property ID="0x06" name="Unknown 6" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -27,6 +27,8 @@
<property ID="0x16" name="Unknown 13" type="bool"/>
<property ID="0x17" name="Unknown 14" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -18,6 +18,8 @@
<struct ID="0x0D" name="DamageInfo" template="Structs/DamageInfo.xml"/>
<property ID="0x0E" name="Unknown 4" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -10,6 +10,8 @@
<property ID="0x05" name="Unknown 5" type="long"/>
<property ID="0x06" name="Unknown 6" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -9,6 +9,8 @@
<property ID="0x04" name="Unknown 2" type="bool"/>
<property ID="0x05" name="Active" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -19,6 +19,8 @@
<property ID="0x0E" name="Unknown 6" type="long"/>
<property ID="0x0F" name="Unknown 7" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -12,6 +12,8 @@
<property ID="0x07" name="Skybox Model" type="file" extensions="CMDL"/>
<property ID="0x08" name="Unknown 7" type="long"/>
</properties>
<states/>
<messages/>
<editor>
<properties/>
<assets>

View File

@ -17,6 +17,8 @@
<property ID="0x0C" name="Unknown 4" type="bool"/>
<property ID="0x0D" name="Unknown 5" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -24,6 +24,8 @@
<property ID="0x13" name="Unknown 9" type="long"/>
<property ID="0x14" name="Unknown 10" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -36,6 +36,8 @@
<property ID="0x1F" name="Unknown 11" type="long"/>
<property ID="0x20" name="Particle 6" type="file" extensions="PART"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -12,6 +12,8 @@
<property ID="0x07" name="Unknown 5" type="vector3f"/>
<property ID="0x08" name="Unknown 6" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -19,6 +19,8 @@
<property ID="0x0E" name="Unknown 5" type="float"/>
<property ID="0x0F" name="Unknown 6" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -21,6 +21,8 @@
<property ID="0x10" name="Particle 5" type="file" extensions="PART"/>
<property ID="0x11" name="Unknown 2" type="long"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -16,6 +16,8 @@
<property ID="0x0B" name="Always FFFFFFFF" type="long"/>
<property ID="0x0C" name="Particle 4" type="file" extensions="PART"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -18,6 +18,8 @@
<property ID="0x0D" name="Unknown 11" type="bool"/>
<property ID="0x0E" name="Unknown 12" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -10,6 +10,8 @@
<property ID="0x05" name="Unknown 5" type="float"/>
<property ID="0x06" name="Unknown 6" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -13,6 +13,8 @@
<property ID="0x08" name="Unknown 8" type="float"/>
<property ID="0x09" name="Texture" type="file" extensions="TXTR"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -101,6 +101,8 @@
<property ID="0x15" name="Unknown 50" type="float"/>
<property ID="0x16" name="Unknown 51" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -10,6 +10,8 @@
<property ID="0x05" name="Unknown 2" type="bool"/>
<property ID="0x06" name="Unknown 3" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -11,6 +11,8 @@
<property ID="0x06" name="Unknown 3" type="float"/>
<property ID="0x07" name="Unknown 4" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -12,6 +12,8 @@
<property ID="0x07" name="Unknown 7" type="float"/>
<property ID="0x08" name="Unknown 8" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -9,6 +9,8 @@
<property ID="0x04" name="Unknown 2" type="float"/>
<property ID="0x05" name="Unknown 3" type="long"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -34,6 +34,8 @@
<property ID="0x1D" name="Unknown 12" type="long"/>
<property ID="0x1E" name="Unknown 13" type="long"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -15,6 +15,8 @@
<property ID="0x0A" name="Unknown 10" type="bool"/>
<property ID="0x0B" name="Unknown 11" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -7,6 +7,8 @@
<property ID="0x02" name="Unknown 2" type="long"/>
<property ID="0x03" name="Unknown 3" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -8,6 +8,8 @@
<property ID="0x03" name="Unknown 1" type="bool"/>
<property ID="0x04" name="Unknown 2" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -12,6 +12,8 @@
<property ID="0x07" name="Unknown 5" type="float"/>
<property ID="0x08" name="Unknown 6" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -9,11 +9,11 @@
<struct ID="0x04" name="DamageVulnerability" template="Structs/DamageVulnerability.xml"/>
<enum ID="0x05" name="Render Side">
<enumerators>
<enumerator ID="0x0" name="Don't Render"/>
<enumerator ID="0x1" name="North"/>
<enumerator ID="0x2" name="South"/>
<enumerator ID="0x4" name="West"/>
<enumerator ID="0x8" name="East"/>
<enumerator ID="0x00" name="Don&apos;t Render"/>
<enumerator ID="0x01" name="North"/>
<enumerator ID="0x02" name="South"/>
<enumerator ID="0x04" name="West"/>
<enumerator ID="0x08" name="East"/>
<enumerator ID="0x10" name="Top"/>
<enumerator ID="0x20" name="Bottom"/>
</enumerators>
@ -25,6 +25,8 @@
<property ID="0x0A" name="Active" type="bool"/>
<struct ID="0x0B" name="VisorParameters" template="Structs/VisorParameters.xml"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -21,6 +21,8 @@
<property ID="0x10" name="Unknown 10" type="bool"/>
<property ID="0x11" name="Unknown 11" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -42,6 +42,8 @@
<property ID="0x25" name="Unknown 29" type="bool"/>
<property ID="0x26" name="Unknown 30" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -7,6 +7,8 @@
<property ID="0x02" name="Rotation" type="vector3f"/>
<property ID="0x03" name="Unknown 1" type="long"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -21,6 +21,8 @@
<property ID="0x06" name="Unknown 8" type="bool"/>
<property ID="0x07" name="Unknown 9" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -10,6 +10,8 @@
<property ID="0x05" name="Room Number" type="long"/>
<property ID="0x06" name="Load Automatically?" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -6,6 +6,8 @@
<property ID="0x01" name="Unknown 1" type="long"/>
<property ID="0x02" name="Unknown 2" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -17,6 +17,8 @@
<property ID="0x0C" name="Unknown 7" type="float"/>
<property ID="0x0D" name="Unknown 8" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -48,6 +48,8 @@
<property ID="0x2B" name="Sound?" type="long"/>
<property ID="0x2C" name="Unknown 30" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -27,6 +27,8 @@
<property ID="0x16" name="Unknown 17" type="bool"/>
<struct ID="0x17" name="LightParameters" template="Structs/LightParameters.xml"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -15,6 +15,8 @@
<property ID="0x0A" name="Unknown 8" type="float"/>
<property ID="0x0B" name="Particle" type="file" extensions="PART"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -45,6 +45,8 @@
<property ID="0x28" name="Unknown 17" type="bool"/>
<property ID="0x29" name="Unknown 18" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -23,6 +23,8 @@
<struct ID="0x12" name="DamageInfo 2" template="Structs/DamageInfo.xml"/>
<property ID="0x13" name="Unknown 6" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -7,6 +7,8 @@
<property ID="0x02" name="Unknown 2" type="float"/>
<property ID="0x03" name="Unknown 3" type="long"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -24,6 +24,8 @@
<property ID="0x13" name="Unknown 5" type="long"/>
<property ID="0x14" name="Unknown 6" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -12,6 +12,8 @@
<property ID="0x07" name="Unknown 2" type="bool"/>
<property ID="0x08" name="Unknown 3" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -39,6 +39,8 @@
<property ID="0x22" name="Unknown 29" type="bool"/>
<property ID="0x23" name="Unknown 30" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -10,6 +10,8 @@
<property ID="0x05" name="Unknown 4" type="float"/>
<property ID="0x06" name="Unknown 5" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -26,6 +26,8 @@
<property ID="0x15" name="AnimationParameters" type="character"/>
<property ID="0x16" name="DGRP" type="file" extensions="DGRP"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -9,6 +9,8 @@
<struct ID="0x04" name="PatternedInfo" template="Structs/PatternedInfo.xml"/>
<struct ID="0x05" name="ActorParameters" template="Structs/ActorParameters.xml"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -13,6 +13,8 @@
<property ID="0x08" name="Unknown 3" type="bool"/>
<property ID="0x09" name="Unknown 4" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -39,6 +39,8 @@
<property ID="0x22" name="Unknown 19" type="float"/>
<property ID="0x23" name="Unknown 20" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -10,6 +10,8 @@
<property ID="0x05" name="Unknown 3" type="color"/>
<property ID="0x06" name="Unknown 4" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -19,6 +19,8 @@
<property ID="0x0E" name="Unknown 9" type="long"/>
<property ID="0x0F" name="Unknown 10" type="long"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -11,6 +11,8 @@
<property ID="0x06" name="Unknown 6" type="float"/>
<property ID="0x07" name="Unknown 7" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -8,6 +8,8 @@
<property ID="0x03" name="Active" type="bool"/>
<struct ID="0x04" name="GrappleParameters" template="Structs/GrappleParameters.xml"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -51,6 +51,8 @@
<property ID="0x2E" name="Unknown 29" type="float"/>
<property ID="0x2F" name="Unknown 30" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -7,13 +7,15 @@
<property ID="0x02" name="Unknown 1" type="bool"/>
<enum ID="0x03" name="Memo Type">
<enumerators>
<enumerator ID="0x00000000" name="Status Message"/>
<enumerator ID="0x00000001" name="Message Box"/>
<enumerator ID="0x00" name="Status Message"/>
<enumerator ID="0x01" name="Message Box"/>
</enumerators>
</enum>
<property ID="0x04" name="STRG" type="file" extensions="STRG"/>
<property ID="0x05" name="Active" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -40,6 +40,8 @@
<property ID="0x23" name="Unknown 12" type="bool"/>
<property ID="0x24" name="Unknown 13" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -19,6 +19,8 @@
<struct ID="0x0E" name="DamageVulnerability" template="Structs/DamageVulnerability.xml"/>
<property ID="0x0F" name="Unknown 9" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -23,6 +23,8 @@
<property ID="0x12" name="Unknown 12" type="float"/>
<property ID="0x13" name="Unknown 13" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -34,6 +34,8 @@
<property ID="0x14" name="Unknown 13" type="float"/>
<property ID="0x15" name="Unknown 14" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -13,6 +13,8 @@
<property ID="0x08" name="Unknown 6" type="vector3f"/>
<property ID="0x09" name="Unknown 7" type="vector3f"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -6,6 +6,8 @@
<property ID="0x01" name="Unknown 1" type="bool"/>
<property ID="0x02" name="Active" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -15,6 +15,8 @@
<property ID="0x0A" name="Unknown 4" type="float"/>
<property ID="0x0B" name="Unknown 5" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -23,6 +23,8 @@
<property ID="0x12" name="AnimationParameters 4" type="character"/>
<property ID="0x13" name="Unknown 8" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -26,6 +26,8 @@
<property ID="0x15" name="Particle 4" type="file" extensions="PART"/>
<property ID="0x16" name="Unknown 10" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -77,6 +77,8 @@
</properties>
</struct>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x01"/>

View File

@ -14,6 +14,8 @@
<property ID="0x09" name="Unknown 1" type="long"/>
<property ID="0x0A" name="Particle 2" type="file" extensions="PART"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -9,6 +9,8 @@
<property ID="0x04" name="Unknown 3" type="float"/>
<property ID="0x05" name="Unknown 4" type="long"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -72,6 +72,8 @@
</properties>
</struct>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -16,6 +16,8 @@
<property ID="0x0B" name="Texture 1" type="file" extensions="TXTR"/>
<property ID="0x0C" name="Texture 2" type="file" extensions="TXTR"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -18,6 +18,8 @@
<property ID="0x0D" name="Unknown 7" type="float"/>
<struct ID="0x0E" name="DamageInfo" template="Structs/DamageInfo.xml"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -48,6 +48,8 @@
<property ID="0x2B" name="CSKR" type="file" extensions="CSKR"/>
<property ID="0x2C" name="CINF" type="file" extensions="CINF"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -28,6 +28,8 @@
<property ID="0x17" name="Unknown 18" type="float"/>
<property ID="0x18" name="Unknown 19" type="bool"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -23,6 +23,8 @@
<property ID="0x09" name="Unknown 12" type="float"/>
<property ID="0x0A" name="Unknown 13" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -12,6 +12,8 @@
<property ID="0x07" name="ELSC" type="file" extensions="ELSC"/>
<property ID="0x08" name="Unknown 2" type="string"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -21,6 +21,8 @@
<property ID="0x10" name="Unknown 8" type="bool"/>
<property ID="0x11" name="Unknown 9" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -21,6 +21,8 @@
<property ID="0x10" name="Unknown 1" type="float"/>
<property ID="0x11" name="Particle" type="file" extensions="PART"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

View File

@ -7,6 +7,8 @@
<property ID="0x02" name="Active" type="bool"/>
<property ID="0x03" name="Frequency" type="float"/>
</properties>
<states/>
<messages/>
<editor>
<properties>
<property name="InstanceName" ID="0x00"/>

Some files were not shown because too many files have changed in this diff Show More