diff --git a/Engine/source/console/simObject.cpp b/Engine/source/console/simObject.cpp index 8a54f7299..1a76e23fe 100644 --- a/Engine/source/console/simObject.cpp +++ b/Engine/source/console/simObject.cpp @@ -304,6 +304,10 @@ bool SimObject::writeField(StringTableEntry fieldname, const char* value) void SimObject::writeFields(Stream &stream, U32 tabStop) { // Write static fields. + + // Create a default object of the same type + ConsoleObject* defaultConObject = ConsoleObject::create(getClassName()); + SimObject* defaultObject = dynamic_cast(defaultConObject); const AbstractClassRep::FieldList &list = getFieldList(); @@ -332,6 +336,11 @@ void SimObject::writeFields(Stream &stream, U32 tabStop) if (!writeField(f->pFieldname, valCopy)) continue; + //If the field hasn't been changed from the default value, then don't bother writing it out + const char* defaultValueCheck = defaultObject->getDataField(f->pFieldname, array); + if (dStricmp(defaultValueCheck, valCopy) == 0) + continue; + val = valCopy; U32 expandedBufferSize = ( nBufferSize * 2 ) + dStrlen(f->pFieldname) + 32; @@ -366,6 +375,9 @@ void SimObject::writeFields(Stream &stream, U32 tabStop) if(mFieldDictionary && mCanSaveFieldDictionary) mFieldDictionary->writeFields(this, stream, tabStop); + + // Cleanup our created default object + delete defaultConObject; } //----------------------------------------------------------------------------- diff --git a/Engine/source/persistence/taml/taml.cpp b/Engine/source/persistence/taml/taml.cpp index 2bfd104b9..782731a80 100644 --- a/Engine/source/persistence/taml/taml.cpp +++ b/Engine/source/persistence/taml/taml.cpp @@ -217,11 +217,6 @@ ImplementEnumType(_TamlFormatMode, FileStream stream; - if (StringTable->insert("c://.asset.taml") == StringTable->insert(mFilePathBuffer)) - { - bool asdfasdf = true; - } - // File opened? if (!stream.open(mFilePathBuffer, Torque::FS::File::Write)) { @@ -643,6 +638,19 @@ ImplementEnumType(_TamlFormatMode, // Fetch field count. const U32 fieldCount = fieldList.size(); + ConsoleObject* defaultConObject; + SimObject* defaultObject; + if (!getWriteDefaults()) + { + // Create a default object of the same type + defaultConObject = ConsoleObject::create(pSimObject->getClassName()); + defaultObject = dynamic_cast(defaultConObject); + + // ***Really*** shouldn't happen + if (!defaultObject) + return; + } + // Iterate fields. U8 arrayDepth = 0; TamlCustomNode* currentArrayNode = NULL; @@ -709,9 +717,6 @@ ImplementEnumType(_TamlFormatMode, if (!pFieldValue) pFieldValue = StringTable->EmptyString(); - if (pField->type == TypeBool) - pFieldValue = dAtob(pFieldValue) ? "true" : "false"; - U32 nBufferSize = dStrlen(pFieldValue) + 1; FrameTemp valueCopy(nBufferSize); dStrcpy((char *)valueCopy, pFieldValue, nBufferSize); @@ -720,9 +725,19 @@ ImplementEnumType(_TamlFormatMode, if (!pSimObject->writeField(fieldName, valueCopy)) continue; + if (!getWriteDefaults()) + { + //If the field hasn't been changed from the default value, then don't bother writing it out + if (dStricmp(defaultObject->getDataField(fieldName, indexBuffer), pFieldValue) == 0) + continue; + } + // Reassign field value. pFieldValue = valueCopy; + if (pField->type == TypeBool) + pFieldValue = dAtob(pFieldValue) ? "true" : "false"; + // Detect and collapse relative path information char fnBuf[1024]; if ((S32)pField->type == TypeFilename) @@ -741,6 +756,12 @@ ImplementEnumType(_TamlFormatMode, } } } + + if (!getWriteDefaults()) + { + // Cleanup our created default object + delete defaultConObject; + } } //-----------------------------------------------------------------------------