diff --git a/CBash.suo b/CBash.suo
index a37a336..d7d0f0e 100644
Binary files a/CBash.suo and b/CBash.suo differ
diff --git a/CBash/CBash.cpp b/CBash/CBash.cpp
index f2e9472..5a068d8 100644
--- a/CBash/CBash.cpp
+++ b/CBash/CBash.cpp
@@ -97,7 +97,7 @@ ModFile *ValidateModName(Collection *curCollection, STRING const ModName)
STRING const &CompName = NonGhostName ? NonGhostName : ModName;
//ModFiles will never contain null pointers
for(UINT32 x = 0; x < curCollection->ModFiles.size();++x)
- if(_stricmp(CompName, curCollection->ModFiles[x]->reader.getModName()) == 0)
+ if(icmps(CompName, curCollection->ModFiles[x]->reader.getModName()) == 0)
{
delete []NonGhostName;
return curCollection->ModFiles[x];
@@ -122,7 +122,7 @@ ModFile *ValidateLoadOrderIndex(Collection *curCollection, STRING const ModName)
STRING const &CompName = NonGhostName ? NonGhostName : ModName;
//ModFiles will never contain null pointers
for(UINT32 x = 0; x < curCollection->LoadOrder255.size();++x)
- if(_stricmp(CompName, curCollection->LoadOrder255[x]->reader.getModName()) == 0)
+ if(icmps(CompName, curCollection->LoadOrder255[x]->reader.getModName()) == 0)
{
delete []NonGhostName;
return curCollection->LoadOrder255[x];
@@ -314,7 +314,7 @@ Collection * CreateCollection(STRING const ModsPath, const UINT32 CollectionType
try
{
- //ValidatePointer(ModsPath);
+ ValidatePointer(ModsPath);
for(UINT32 p = 0; p < Collections.size(); ++p)
{
if(Collections[p] == NULL)
@@ -513,7 +513,7 @@ SINT32 AddMod(Collection *CollectionID, STRING const ModName, const UINT32 ModFl
try
{
//ValidatePointer(CollectionID);
- //ValidatePointer(ModName);
+ ValidatePointer(ModName);
return CollectionID->AddMod(ModName, flags);
}
catch(std::exception &ex)
@@ -967,7 +967,7 @@ STRING GetLongIDName(Collection *CollectionID, ModFile *ModID, const UINT8 ModIn
// {
// ModFile *curModFile = ValidateModID(ValidateCollectionID(CollectionID), ModID);
// for(UINT16 x = 0; x < curModFile->TES4.MAST.size(); ++x)
-// if(_stricmp(curModFile->TES4.MAST[x].value, ModName) == 0)
+// if(icmps(curModFile->TES4.MAST[x].value, ModName) == 0)
// return curModFile->FormIDHandler.ExpandTable[(UINT8)x] << 24;
// printf("GetShortIDIndex: Error\n %s not found in %s's master list!\n", ModName, curModFile->reader.getModName());
// return -1;
diff --git a/CBash/CBash.vcproj b/CBash/CBash.vcproj
index 8d0d29e..aacb495 100644
--- a/CBash/CBash.vcproj
+++ b/CBash/CBash.vcproj
@@ -1261,6 +1261,37 @@
/>
+
+
+
+
+
+
+
+
+
+
+
@@ -1486,6 +1517,10 @@
/>
+
+
@@ -1517,6 +1552,37 @@
/>
+
+
+
+
+
+
+
+
+
+
+
@@ -1548,6 +1614,10 @@
/>
+
+
@@ -2437,6 +2507,37 @@
RelativePath=".\FalloutNewVegas\Records\TXSTRecord.cpp"
>
+
+
+
+
+
+
+
+
+
+
+
@@ -2658,6 +2759,37 @@
/>
+
+
+
+
+
+
+
+
+
+
+
@@ -2914,6 +3046,10 @@
/>
+
+
@@ -2976,6 +3112,37 @@
/>
+
+
+
+
+
+
+
+
+
+
+
@@ -3007,6 +3174,10 @@
/>
+
+
@@ -4005,6 +4176,37 @@
RelativePath=".\FalloutNewVegas\Records\API\TXSTRecordAPI.cpp"
>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CBash/Collection.cpp b/CBash/Collection.cpp
index 7719b87..167a668 100644
--- a/CBash/Collection.cpp
+++ b/CBash/Collection.cpp
@@ -137,7 +137,7 @@ SINT32 Collection::AddMod(STRING const &_FileName, ModFlags &flags, bool IsPrelo
bool Collection::IsModAdded(STRING const &ModName)
{
for(UINT32 p = 0;p < ModFiles.size();p++)
- if(_stricmp(ModName, ModFiles[p]->reader.getModName()) == 0)
+ if(icmps(ModName, ModFiles[p]->reader.getModName()) == 0)
return true;
return false;
}
@@ -932,7 +932,7 @@ SINT32 Collection::SetRecordIDs(ModFile *&curModFile, Record *&RecordID, FORMID
{
if(EditorID == NULL)
bChangingEditorID = true;
- else if(strcmp(RecordEditorID, EditorID) != 0)
+ else if(cmps(RecordEditorID, EditorID) != 0)
bChangingEditorID = true;
}
diff --git a/CBash/Common.cpp b/CBash/Common.cpp
index 4212f79..d8f6560 100644
--- a/CBash/Common.cpp
+++ b/CBash/Common.cpp
@@ -56,16 +56,38 @@ const STRING Ex_INVALIDRECORDINDEX::__CLR_OR_THIS_CALL what() const
return "Invalid RecordID or RecordEditorID. Record not found.";
}
+int icmps(const STRING lhs, const STRING rhs)
+ {
+ if(lhs == rhs)
+ return 0;
+ if(lhs == NULL)
+ return -1;
+ if(rhs == NULL)
+ return 1;
+ return _stricmp(lhs, rhs);
+ }
+
+int cmps(const STRING lhs, const STRING rhs)
+ {
+ if(lhs == rhs)
+ return 0;
+ if(lhs == NULL)
+ return -1;
+ if(rhs == NULL)
+ return 1;
+ return strcmp(lhs, rhs);
+ }
+
bool sameStr::operator()( const STRING s1, const STRING s2 ) const
{
- return _stricmp( s1, s2 ) < 0;
+ return icmps(s1, s2) < 0;
}
STRING DeGhostModName(STRING const ModName)
{
STRING NonGhostName = NULL;
UINT32 NameLength = strlen(ModName) + 1;
- if(_stricmp(".ghost",ModName + NameLength - 7) == 0)
+ if(icmps(".ghost",ModName + NameLength - 7) == 0)
{
NonGhostName = new char[NameLength];
strcpy_s(NonGhostName, NameLength, ModName);
@@ -543,7 +565,7 @@ void FormIDHandlerClass::UpdateFormIDLookup()
{
for(UINT16 y = 0; y < CollapsedIndex; ++y)
{
- if(_stricmp(LoadOrder255[(UINT8)x], MAST[(UINT8)y].value) == 0)
+ if(icmps(LoadOrder255[(UINT8)x], MAST[(UINT8)y].value) == 0)
{
sortedMAST.push_back(MAST[(UINT8)y]);
break;
@@ -561,7 +583,7 @@ void FormIDHandlerClass::UpdateFormIDLookup()
curMaster = MAST[(UINT8)p].value;
//printf("master %s\n", curMaster);
for(UINT32 y = 0; y < numMods; ++y)
- if(_stricmp(LoadOrder255[(UINT8)y], curMaster) == 0)
+ if(icmps(LoadOrder255[(UINT8)y], curMaster) == 0)
{
CollapseTable[(UINT8)y] = (UINT8)p;
//printf("%02X == %02X\n", (UINT8)y, (UINT8)p);
@@ -605,7 +627,7 @@ void FormIDHandlerClass::CreateFormIDLookup(const UINT8 expandedIndex)
{
curMaster = MAST[(UINT8)p].value;
for(UINT32 y = 0; y < numMods; ++y)
- if(_stricmp(LoadOrder255[(UINT8)y], curMaster) == 0)
+ if(icmps(LoadOrder255[(UINT8)y], curMaster) == 0)
{
ExpandTable[(UINT8)p] = (UINT8)y;
CollapseTable[(UINT8)y] = (UINT8)p;
@@ -869,26 +891,12 @@ void StringRecord::Copy(STRING FieldValue)
bool StringRecord::equals(const StringRecord &other) const
{
- if(!IsLoaded())
- {
- if(!other.IsLoaded())
- return true;
- }
- else if(other.IsLoaded() && (strcmp(value, other.value) == 0))
- return true;
- return false;
+ return cmps(value, other.value) == 0;
}
bool StringRecord::equalsi(const StringRecord &other) const
{
- if(!IsLoaded())
- {
- if(!other.IsLoaded())
- return true;
- }
- else if(other.IsLoaded() && (_stricmp(value, other.value) == 0))
- return true;
- return false;
+ return icmps(value, other.value) == 0;
}
StringRecord& StringRecord::operator = (const StringRecord &rhs)
@@ -1055,7 +1063,7 @@ bool UnorderedPackedStrings::equals(const UnorderedPackedStrings &other) const
if(value.size() == other.value.size())
{
for(UINT32 x = 0; x < value.size(); ++x)
- if(strcmp(value[x], other.value[x]) != 0)
+ if(cmps(value[x], other.value[x]) != 0)
return false;
return true;
}
@@ -1069,7 +1077,7 @@ bool UnorderedPackedStrings::equalsi(const UnorderedPackedStrings &other) const
if(value.size() == other.value.size())
{
for(UINT32 x = 0; x < value.size(); ++x)
- if(_stricmp(value[x], other.value[x]) != 0)
+ if(icmps(value[x], other.value[x]) != 0)
return false;
return true;
}
diff --git a/CBash/Common.h b/CBash/Common.h
index 8593b58..4dbea7c 100644
--- a/CBash/Common.h
+++ b/CBash/Common.h
@@ -190,6 +190,10 @@ class Ex_INVALIDRECORDINDEX : public std::exception
const char * __CLR_OR_THIS_CALL what() const;
};
+//wrappers for _stricmp and strcmp that handle NULL args
+int icmps(const STRING lhs, const STRING rhs);
+int cmps(const STRING lhs, const STRING rhs);
+
class ModFile;
class Record;
class StringRecord;
@@ -1560,7 +1564,10 @@ struct ReqSubRecord
!(test == REV32(DATA) && (test2 == REV32(NAM1) || test2 == REV32(NAM2) || test2 == REV32(VNAM) || test2 == REV32(PROJ)) && subSize == 68 && sizeof(T) == 84) &&
!(test == REV32(DATA) && (test2 == REV32(CTDA) || test2 == REV32(INDX) || test2 == REV32(QOBJ)) && subSize == 2 && sizeof(T) == 8) &&
!(test == REV32(DATA) && (test2 == REV32(IDLE) || test2 == REV32(GRUP)) && subSize == 6 && sizeof(T) == 8) &&
- !(test == REV32(PKDT) && subSize == 8 && sizeof(T) == 12)
+ !(test == REV32(PKDT) && subSize == 8 && sizeof(T) == 12) &&
+ !(test == REV32(DATA) && subSize == 184 && sizeof(T) == 196) &&
+ !(test == REV32(DNAM) && subSize == 184 && sizeof(T) == 196) &&
+ !(test == REV32(DATA) && (test2 == REV32(EFSH) || test2 == REV32(GRUP)) && sizeof(T) == 308) //multiple possible subSizes
)
{
printf("ReqSubRecord: Info - Unable to fully parse chunk (%c%c%c%c). Size "
diff --git a/CBash/FalloutNewVegas/FNVFile.cpp b/CBash/FalloutNewVegas/FNVFile.cpp
index e9b689b..1a90a97 100644
--- a/CBash/FalloutNewVegas/FNVFile.cpp
+++ b/CBash/FalloutNewVegas/FNVFile.cpp
@@ -572,34 +572,34 @@ SINT32 FNVFile::Load(RecordOp &indexer, std::vector &Expanders
break;
case eIgANIO:
case REV32(ANIO):
- //reader.read(&ANIO.stamp, 4);
- //reader.read(&ANIO.unknown, 4);
- //ANIO.Skim(reader, GRUPSize, processor, indexer);
- //break;
+ reader.read(&ANIO.stamp, 4);
+ reader.read(&ANIO.unknown, 4);
+ ANIO.Skim(reader, GRUPSize, processor, indexer);
+ break;
case eIgWATR:
case REV32(WATR):
- //reader.read(&WATR.stamp, 4);
- //reader.read(&WATR.unknown, 4);
- //WATR.Skim(reader, GRUPSize, processor, indexer);
- //break;
+ reader.read(&WATR.stamp, 4);
+ reader.read(&WATR.unknown, 4);
+ WATR.Skim(reader, GRUPSize, processor, indexer);
+ break;
case eIgEFSH:
case REV32(EFSH):
- //reader.read(&EFSH.stamp, 4);
- //reader.read(&EFSH.unknown, 4);
- //EFSH.Skim(reader, GRUPSize, processor, indexer);
- //break;
+ reader.read(&EFSH.stamp, 4);
+ reader.read(&EFSH.unknown, 4);
+ EFSH.Skim(reader, GRUPSize, processor, indexer);
+ break;
//case eIgEXPL: //Same as normal
case REV32(EXPL):
- //reader.read(&EXPL.stamp, 4);
- //reader.read(&EXPL.unknown, 4);
- //EXPL.Skim(reader, GRUPSize, processor, indexer);
- //break;
+ reader.read(&EXPL.stamp, 4);
+ reader.read(&EXPL.unknown, 4);
+ EXPL.Skim(reader, GRUPSize, processor, indexer);
+ break;
case eIgDEBR:
case REV32(DEBR):
- //reader.read(&DEBR.stamp, 4);
- //reader.read(&DEBR.unknown, 4);
- //DEBR.Skim(reader, GRUPSize, processor, indexer);
- //break;
+ reader.read(&DEBR.stamp, 4);
+ reader.read(&DEBR.unknown, 4);
+ DEBR.Skim(reader, GRUPSize, processor, indexer);
+ break;
case eIgIMGS:
case REV32(IMGS):
//reader.read(&IMGS.stamp, 4);
@@ -996,15 +996,15 @@ UINT32 FNVFile::GetNumRecords(const UINT32 &RecordType)
case REV32(LSCR):
return (UINT32)LSCR.Records.size();
case REV32(ANIO):
- //return (UINT32)ANIO.Records.size();
+ return (UINT32)ANIO.Records.size();
case REV32(WATR):
- //return (UINT32)WATR.Records.size();
+ return (UINT32)WATR.Records.size();
case REV32(EFSH):
- //return (UINT32)EFSH.Records.size();
+ return (UINT32)EFSH.Records.size();
case REV32(EXPL):
- //return (UINT32)EXPL.Records.size();
+ return (UINT32)EXPL.Records.size();
case REV32(DEBR):
- //return (UINT32)DEBR.Records.size();
+ return (UINT32)DEBR.Records.size();
case REV32(IMGS):
//return (UINT32)IMGS.Records.size();
case REV32(IMAD):
@@ -1506,25 +1506,25 @@ Record * FNVFile::CreateRecord(const UINT32 &RecordType, STRING const &RecordEdi
newRecord = LSCR.Records.back();
break;
case REV32(ANIO):
- //ANIO.Records.push_back(new FNV::ANIORecord((FNV::ANIORecord *)SourceRecord));
- //newRecord = ANIO.Records.back();
- //break;
+ ANIO.Records.push_back(new FNV::ANIORecord((FNV::ANIORecord *)SourceRecord));
+ newRecord = ANIO.Records.back();
+ break;
case REV32(WATR):
- //WATR.Records.push_back(new FNV::WATRRecord((FNV::WATRRecord *)SourceRecord));
- //newRecord = WATR.Records.back();
- //break;
+ WATR.Records.push_back(new FNV::WATRRecord((FNV::WATRRecord *)SourceRecord));
+ newRecord = WATR.Records.back();
+ break;
case REV32(EFSH):
- //EFSH.Records.push_back(new FNV::EFSHRecord((FNV::EFSHRecord *)SourceRecord));
- //newRecord = EFSH.Records.back();
- //break;
+ EFSH.Records.push_back(new FNV::EFSHRecord((FNV::EFSHRecord *)SourceRecord));
+ newRecord = EFSH.Records.back();
+ break;
case REV32(EXPL):
- //EXPL.Records.push_back(new FNV::EXPLRecord((FNV::EXPLRecord *)SourceRecord));
- //newRecord = EXPL.Records.back();
- //break;
+ EXPL.Records.push_back(new FNV::EXPLRecord((FNV::EXPLRecord *)SourceRecord));
+ newRecord = EXPL.Records.back();
+ break;
case REV32(DEBR):
- //DEBR.Records.push_back(new FNV::DEBRRecord((FNV::DEBRRecord *)SourceRecord));
- //newRecord = DEBR.Records.back();
- //break;
+ DEBR.Records.push_back(new FNV::DEBRRecord((FNV::DEBRRecord *)SourceRecord));
+ newRecord = DEBR.Records.back();
+ break;
case REV32(IMGS):
//IMGS.Records.push_back(new FNV::IMGSRecord((FNV::IMGSRecord *)SourceRecord));
//newRecord = IMGS.Records.back();
@@ -1763,11 +1763,11 @@ SINT32 FNVFile::CleanMasters(std::vector &Expanders)
if(PACK.VisitRecords(NULL, checker, false)) continue;
if(CSTY.VisitRecords(NULL, checker, false)) continue;
if(LSCR.VisitRecords(NULL, checker, false)) continue;
- //if(ANIO.VisitRecords(NULL, checker, false)) continue;
- //if(WATR.VisitRecords(NULL, checker, false)) continue;
- //if(EFSH.VisitRecords(NULL, checker, false)) continue;
- //if(EXPL.VisitRecords(NULL, checker, false)) continue;
- //if(DEBR.VisitRecords(NULL, checker, false)) continue;
+ if(ANIO.VisitRecords(NULL, checker, false)) continue;
+ if(WATR.VisitRecords(NULL, checker, false)) continue;
+ if(EFSH.VisitRecords(NULL, checker, false)) continue;
+ if(EXPL.VisitRecords(NULL, checker, false)) continue;
+ if(DEBR.VisitRecords(NULL, checker, false)) continue;
//if(IMGS.VisitRecords(NULL, checker, false)) continue;
//if(IMAD.VisitRecords(NULL, checker, false)) continue;
//if(FLST.VisitRecords(NULL, checker, false)) continue;
@@ -1901,11 +1901,11 @@ SINT32 FNVFile::Save(STRING const &SaveName, std::vector &Expa
formCount += PACK.WriteGRUP(REV32(PACK), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
formCount += CSTY.WriteGRUP(REV32(CSTY), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
formCount += LSCR.WriteGRUP(REV32(LSCR), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
- //formCount += ANIO.WriteGRUP(REV32(ANIO), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
- //formCount += WATR.WriteGRUP(REV32(WATR), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
- //formCount += EFSH.WriteGRUP(REV32(EFSH), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
- //formCount += EXPL.WriteGRUP(REV32(EXPL), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
- //formCount += DEBR.WriteGRUP(REV32(DEBR), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
+ formCount += ANIO.WriteGRUP(REV32(ANIO), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
+ formCount += WATR.WriteGRUP(REV32(WATR), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
+ formCount += EFSH.WriteGRUP(REV32(EFSH), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
+ formCount += EXPL.WriteGRUP(REV32(EXPL), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
+ formCount += DEBR.WriteGRUP(REV32(DEBR), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
//formCount += IMGS.WriteGRUP(REV32(IMGS), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
//formCount += IMAD.WriteGRUP(REV32(IMAD), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
//formCount += FLST.WriteGRUP(REV32(FLST), writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
@@ -2024,11 +2024,11 @@ void FNVFile::VisitAllRecords(RecordOp &op)
PACK.VisitRecords(NULL, op, true);
CSTY.VisitRecords(NULL, op, true);
LSCR.VisitRecords(NULL, op, true);
- //ANIO.VisitRecords(NULL, op, true);
- //WATR.VisitRecords(NULL, op, true);
- //EFSH.VisitRecords(NULL, op, true);
- //EXPL.VisitRecords(NULL, op, true);
- //DEBR.VisitRecords(NULL, op, true);
+ ANIO.VisitRecords(NULL, op, true);
+ WATR.VisitRecords(NULL, op, true);
+ EFSH.VisitRecords(NULL, op, true);
+ EXPL.VisitRecords(NULL, op, true);
+ DEBR.VisitRecords(NULL, op, true);
//IMGS.VisitRecords(NULL, op, true);
//IMAD.VisitRecords(NULL, op, true);
//FLST.VisitRecords(NULL, op, true);
@@ -2265,20 +2265,20 @@ void FNVFile::VisitRecords(const UINT32 &TopRecordType, const UINT32 &RecordType
LSCR.VisitRecords(RecordType, op, DeepVisit);
break;
case REV32(ANIO):
- //ANIO.VisitRecords(RecordType, op, DeepVisit);
- //break;
+ ANIO.VisitRecords(RecordType, op, DeepVisit);
+ break;
case REV32(WATR):
- //WATR.VisitRecords(RecordType, op, DeepVisit);
- //break;
+ WATR.VisitRecords(RecordType, op, DeepVisit);
+ break;
case REV32(EFSH):
- //EFSH.VisitRecords(RecordType, op, DeepVisit);
- //break;
+ EFSH.VisitRecords(RecordType, op, DeepVisit);
+ break;
case REV32(EXPL):
- //EXPL.VisitRecords(RecordType, op, DeepVisit);
- //break;
+ EXPL.VisitRecords(RecordType, op, DeepVisit);
+ break;
case REV32(DEBR):
- //DEBR.VisitRecords(RecordType, op, DeepVisit);
- //break;
+ DEBR.VisitRecords(RecordType, op, DeepVisit);
+ break;
case REV32(IMGS):
//IMGS.VisitRecords(RecordType, op, DeepVisit);
//break;
diff --git a/CBash/FalloutNewVegas/FNVFile.h b/CBash/FalloutNewVegas/FNVFile.h
index e9c5dd1..237a638 100644
--- a/CBash/FalloutNewVegas/FNVFile.h
+++ b/CBash/FalloutNewVegas/FNVFile.h
@@ -84,11 +84,11 @@ GPL License and Copyright Notice ============================================
#include "Records/PACKRecord.h"
#include "Records/CSTYRecord.h"
#include "Records/LSCRRecord.h"
-//#include "Records/ANIORecord.h"
-//#include "Records/WATRRecord.h"
-//#include "Records/EFSHRecord.h"
-//#include "Records/EXPLRecord.h"
-//#include "Records/DEBRRecord.h"
+#include "Records/ANIORecord.h"
+#include "Records/WATRRecord.h"
+#include "Records/EFSHRecord.h"
+#include "Records/EXPLRecord.h"
+#include "Records/DEBRRecord.h"
//#include "Records/IMGSRecord.h"
//#include "Records/IMADRecord.h"
//#include "Records/FLSTRecord.h"
@@ -189,11 +189,11 @@ class FNVFile : public ModFile
FNVGRUPRecords PACK;
FNVGRUPRecords CSTY;
FNVGRUPRecords LSCR;
- //FNVGRUPRecords ANIO;
- //FNVGRUPRecords WATR;
- //FNVGRUPRecords EFSH;
- //FNVGRUPRecords EXPL;
- //FNVGRUPRecords DEBR;
+ FNVGRUPRecords ANIO;
+ FNVGRUPRecords WATR;
+ FNVGRUPRecords EFSH;
+ FNVGRUPRecords EXPL;
+ FNVGRUPRecords DEBR;
//FNVGRUPRecords IMGS;
//FNVGRUPRecords IMAD;
//FNVGRUPRecords FLST;
diff --git a/CBash/FalloutNewVegas/Records/ANIORecord.cpp b/CBash/FalloutNewVegas/Records/ANIORecord.cpp
index a295594..b982630 100644
--- a/CBash/FalloutNewVegas/Records/ANIORecord.cpp
+++ b/CBash/FalloutNewVegas/Records/ANIORecord.cpp
@@ -51,9 +51,7 @@ ANIORecord::ANIORecord(ANIORecord *srcRecord):
}
EDID = srcRecord->EDID;
-
MODL = srcRecord->MODL;
-
DATA = srcRecord->DATA;
return;
}
@@ -73,8 +71,7 @@ bool ANIORecord::VisitFormIDs(FormIDOp &op)
for(UINT32 x = 0; x < MODL->Textures.MODS.size(); x++)
op.Accept(MODL->Textures.MODS[x]->texture);
}
- if(DATA.IsLoaded())
- op.Accept(DATA->value);
+ op.Accept(DATA.value);
return op.Stop();
}
@@ -153,6 +150,7 @@ SINT32 ANIORecord::Unload()
{
IsChanged(false);
IsLoaded(false);
+
EDID.Unload();
MODL.Unload();
DATA.Unload();
@@ -162,19 +160,16 @@ SINT32 ANIORecord::Unload()
SINT32 ANIORecord::WriteRecord(FileWriter &writer)
{
WRITE(EDID);
-
MODL.Write(writer);
-
WRITE(DATA);
-
return -1;
}
bool ANIORecord::operator ==(const ANIORecord &other) const
{
- return (EDID.equalsi(other.EDID) &&
- MODL == other.MODL &&
- DATA == other.DATA);
+ return (DATA == other.DATA &&
+ EDID.equalsi(other.EDID) &&
+ MODL == other.MODL);
}
bool ANIORecord::operator !=(const ANIORecord &other) const
diff --git a/CBash/FalloutNewVegas/Records/ANIORecord.h b/CBash/FalloutNewVegas/Records/ANIORecord.h
index f7cc3c8..6645545 100644
--- a/CBash/FalloutNewVegas/Records/ANIORecord.h
+++ b/CBash/FalloutNewVegas/Records/ANIORecord.h
@@ -30,7 +30,7 @@ class ANIORecord : public FNVRecord //Animated Object
public:
StringRecord EDID; //Editor ID
OptSubRecord MODL; //Model Filename
- OptSimpleSubRecord DATA; //Animation
+ ReqSimpleSubRecord DATA; //Animation
ANIORecord(unsigned char *_recData=NULL);
ANIORecord(ANIORecord *srcRecord);
diff --git a/CBash/FalloutNewVegas/Records/API/ANIORecordAPI.cpp b/CBash/FalloutNewVegas/Records/API/ANIORecordAPI.cpp
index bf87ed5..daa78e8 100644
--- a/CBash/FalloutNewVegas/Records/API/ANIORecordAPI.cpp
+++ b/CBash/FalloutNewVegas/Records/API/ANIORecordAPI.cpp
@@ -75,12 +75,41 @@ UINT32 ANIORecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 10: //mods Alternate Textures
- return ISTRING_FIELD;
+ case 10: //altTextures
+ if(!MODL.IsLoaded())
+ return UNKNOWN_FIELD;
+
+ if(ListFieldID == 0) //altTextures
+ {
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return LIST_FIELD;
+ case 1: //fieldSize
+ return MODL->Textures.MODS.size();
+ default:
+ return UNKNOWN_FIELD;
+ }
+ }
+
+ if(ListIndex >= MODL->Textures.MODS.size())
+ return UNKNOWN_FIELD;
- case 13: //modelFlags
- return UINT8_FIELD;
- case 14: //data Animation
+ switch(ListFieldID)
+ {
+ case 1: //name
+ return STRING_FIELD;
+ case 2: //texture
+ return FORMID_FIELD;
+ case 3: //index
+ return SINT32_FIELD;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 11: //modelFlags
+ return UINT8_FLAG_FIELD;
+ case 12: //animation
return FORMID_FIELD;
default:
return UNKNOWN_FIELD;
@@ -113,16 +142,29 @@ void * ANIORecord::GetField(FIELD_IDENTIFIERS, void **FieldValues)
case 9: //modt_p
*FieldValues = MODL.IsLoaded() ? MODL->MODT.value : NULL;
return NULL;
- case 10: //mods Alternate Textures
- return MODL.IsLoaded() ? MODL->MODS.value : NULL;
- case 11: //mods Alternate Textures
- return MODL.IsLoaded() ? &MODL->MODS->value11 : NULL;
- case 12: //mods Alternate Textures
- return MODL.IsLoaded() ? &MODL->MODS->value12 : NULL;
- case 13: //modelFlags
- return MODL.IsLoaded() ? &MODL->MODD->value13 : NULL;
- case 14: //data Animation
- return DATA.IsLoaded() ? &DATA->value14 : NULL;
+ case 10: //altTextures
+ if(!MODL.IsLoaded())
+ return NULL;
+
+ if(ListIndex >= MODL->Textures.MODS.size())
+ return NULL;
+
+ switch(ListFieldID)
+ {
+ case 1: //name
+ return MODL->Textures.MODS[ListIndex]->name;
+ case 2: //texture
+ return &MODL->Textures.MODS[ListIndex]->texture;
+ case 3: //index
+ return &MODL->Textures.MODS[ListIndex]->index;
+ default:
+ return NULL;
+ }
+ return NULL;
+ case 11: //modelFlags
+ return MODL.IsLoaded() ? &MODL->MODD.value : NULL;
+ case 12: //animation
+ return &DATA.value;
default:
return NULL;
}
@@ -168,28 +210,45 @@ bool ANIORecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
MODL.Load();
MODL->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize);
break;
- case 10: //mods Alternate Textures
- MODL.Load();
- MODL->MODS.Copy((STRING)FieldValue);
- break;
- case 11: //mods Alternate Textures
+ case 10: //altTextures
MODL.Load();
- MODL->MODS.Load();
- MODL->MODS->value11 = *(FORMID *)FieldValue;
- return true;
- case 12: //mods Alternate Textures
- MODL.Load();
- MODL->MODS.Load();
- MODL->MODS->value12 = *(SINT32 *)FieldValue;
+ if(ListFieldID == 0) //altTexturesSize
+ {
+ MODL->Textures.resize(ArraySize);
+ return false;
+ }
+
+ if(ListIndex >= MODL->Textures.MODS.size())
+ break;
+
+ switch(ListFieldID)
+ {
+ case 1: //name
+ delete []MODL->Textures.MODS[ListIndex]->name;
+ MODL->Textures.MODS[ListIndex]->name = NULL;
+ if(FieldValue != NULL)
+ {
+ ArraySize = (UINT32)strlen((STRING)FieldValue) + 1;
+ MODL->Textures.MODS[ListIndex]->name = new char[ArraySize];
+ strcpy_s(MODL->Textures.MODS[ListIndex]->name, ArraySize, (STRING)FieldValue);
+ }
+ break;
+ case 2: //texture
+ MODL->Textures.MODS[ListIndex]->texture = *(FORMID *)FieldValue;
+ return true;
+ case 3: //index
+ MODL->Textures.MODS[ListIndex]->index = *(SINT32 *)FieldValue;
+ break;
+ default:
+ break;
+ }
break;
- case 13: //modelFlags
+ case 11: //modelFlags
MODL.Load();
- MODL->MODD.Load();
- MODL->MODD->value13 = *(UINT8 *)FieldValue;
+ MODL->SetFlagMask(*(UINT8 *)FieldValue);
break;
- case 14: //data Animation
- DATA.Load();
- DATA->value14 = *(FORMID *)FieldValue;
+ case 12: //animation
+ DATA.value = *(FORMID *)FieldValue;
return true;
default:
break;
@@ -199,6 +258,7 @@ bool ANIORecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
void ANIORecord::DeleteField(FIELD_IDENTIFIERS)
{
+ FNVMODS defaultMODS;
switch(FieldID)
{
case 1: //flags1
@@ -229,23 +289,40 @@ void ANIORecord::DeleteField(FIELD_IDENTIFIERS)
if(MODL.IsLoaded())
MODL->MODT.Unload();
return;
- case 10: //mods Alternate Textures
- if(MODL.IsLoaded())
- MODL->MODS.Unload();
- return;
- case 11: //mods Alternate Textures
- if(MODL.IsLoaded())
- MODL->MODS.Unload();
- return;
- case 12: //mods Alternate Textures
+ case 10: //altTextures
if(MODL.IsLoaded())
- MODL->MODS.Unload();
+ {
+ if(ListFieldID == 0) //altTextures
+ {
+ MODL->Textures.Unload();
+ return;
+ }
+
+ if(ListIndex >= MODL->Textures.MODS.size())
+ return;
+
+ switch(ListFieldID)
+ {
+ case 1: //name
+ delete []MODL->Textures.MODS[ListIndex]->name;
+ MODL->Textures.MODS[ListIndex]->name = NULL;
+ return;
+ case 2: //texture
+ MODL->Textures.MODS[ListIndex]->texture = defaultMODS.texture;
+ return;
+ case 3: //index
+ MODL->Textures.MODS[ListIndex]->index = defaultMODS.index;
+ return;
+ default:
+ return;
+ }
+ }
return;
- case 13: //modelFlags
+ case 11: //modelFlags
if(MODL.IsLoaded())
MODL->MODD.Unload();
return;
- case 14: //data Animation
+ case 12: //animation
DATA.Unload();
return;
default:
diff --git a/CBash/FalloutNewVegas/Records/API/CELLRecordAPI.cpp b/CBash/FalloutNewVegas/Records/API/CELLRecordAPI.cpp
index 64726c9..5b52afd 100644
--- a/CBash/FalloutNewVegas/Records/API/CELLRecordAPI.cpp
+++ b/CBash/FalloutNewVegas/Records/API/CELLRecordAPI.cpp
@@ -728,6 +728,8 @@ bool CELLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
}
break;
case 32: //concSolid
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -736,6 +738,8 @@ bool CELLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->concSolid[0], FieldValue, ArraySize);
break;
case 33: //concBroken
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -744,6 +748,8 @@ bool CELLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->concBroken[0], FieldValue, ArraySize);
break;
case 34: //metalSolid
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -752,6 +758,8 @@ bool CELLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->metalSolid[0], FieldValue, ArraySize);
break;
case 35: //metalHollow
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -760,6 +768,8 @@ bool CELLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->metalHollow[0], FieldValue, ArraySize);
break;
case 36: //metalSheet
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -768,6 +778,8 @@ bool CELLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->metalSheet[0], FieldValue, ArraySize);
break;
case 37: //wood
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -776,6 +788,8 @@ bool CELLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->wood[0], FieldValue, ArraySize);
break;
case 38: //sand
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -784,6 +798,8 @@ bool CELLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->sand[0], FieldValue, ArraySize);
break;
case 39: //dirt
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -792,6 +808,8 @@ bool CELLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->dirt[0], FieldValue, ArraySize);
break;
case 40: //grass
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -800,6 +818,8 @@ bool CELLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->grass[0], FieldValue, ArraySize);
break;
case 41: //water
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
diff --git a/CBash/FalloutNewVegas/Records/API/CREARecordAPI.cpp b/CBash/FalloutNewVegas/Records/API/CREARecordAPI.cpp
index b7a3688..fb1ac67 100644
--- a/CBash/FalloutNewVegas/Records/API/CREARecordAPI.cpp
+++ b/CBash/FalloutNewVegas/Records/API/CREARecordAPI.cpp
@@ -923,9 +923,12 @@ bool CREARecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
NIFZ.resize(ArraySize);
for(UINT32 x = 0; x < ArraySize; x++)
{
- UINT32 size = (UINT32)strlen(((STRINGARRAY)FieldValue)[x]) + 1;
- NIFZ.value[x] = new char[size];
- strcpy_s(NIFZ.value[x], size, ((STRINGARRAY)FieldValue)[x]);
+ if(((STRINGARRAY)FieldValue)[x] != NULL)
+ {
+ UINT32 size = (UINT32)strlen(((STRINGARRAY)FieldValue)[x]) + 1;
+ NIFZ.value[x] = new char[size];
+ strcpy_s(NIFZ.value[x], size, ((STRINGARRAY)FieldValue)[x]);
+ }
}
break;
case 23: //nift_p
@@ -1151,9 +1154,12 @@ bool CREARecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
KFFZ.resize(ArraySize);
for(UINT32 x = 0; x < ArraySize; x++)
{
- UINT32 size = (UINT32)strlen(((STRINGARRAY)FieldValue)[x]) + 1;
- KFFZ.value[x] = new char[size];
- strcpy_s(KFFZ.value[x], size, ((STRINGARRAY)FieldValue)[x]);
+ if(((STRINGARRAY)FieldValue)[x] != NULL)
+ {
+ UINT32 size = (UINT32)strlen(((STRINGARRAY)FieldValue)[x]) + 1;
+ KFFZ.value[x] = new char[size];
+ strcpy_s(KFFZ.value[x], size, ((STRINGARRAY)FieldValue)[x]);
+ }
}
break;
case 59: //creatureType
diff --git a/CBash/FalloutNewVegas/Records/API/CSTYRecordAPI.cpp b/CBash/FalloutNewVegas/Records/API/CSTYRecordAPI.cpp
index edc8beb..a7c2c83 100644
--- a/CBash/FalloutNewVegas/Records/API/CSTYRecordAPI.cpp
+++ b/CBash/FalloutNewVegas/Records/API/CSTYRecordAPI.cpp
@@ -678,7 +678,7 @@ bool CSTYRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
case 67: //waitFireTimerMin
CSSD.value.waitFireTimerMin = *(FLOAT32 *)FieldValue;
break;
- case 68: //waitFireTimerMax
+ case 68: //waitFireTimerMax
CSSD.value.waitFireTimerMax = *(FLOAT32 *)FieldValue;
break;
case 69: //fireTimerMin
@@ -936,7 +936,7 @@ void CSTYRecord::DeleteField(FIELD_IDENTIFIERS)
case 67: //waitFireTimerMin
CSSD.value.waitFireTimerMin =defaultCSSD.waitFireTimerMin;
break;
- case 68: //waitFireTimerMax
+ case 68: //waitFireTimerMax
CSSD.value.waitFireTimerMax = defaultCSSD.waitFireTimerMax;
break;
case 69: //fireTimerMin
diff --git a/CBash/FalloutNewVegas/Records/API/DEBRRecordAPI.cpp b/CBash/FalloutNewVegas/Records/API/DEBRRecordAPI.cpp
index c9a2e6e..594859b 100644
--- a/CBash/FalloutNewVegas/Records/API/DEBRRecordAPI.cpp
+++ b/CBash/FalloutNewVegas/Records/API/DEBRRecordAPI.cpp
@@ -60,22 +60,47 @@ UINT32 DEBRRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 7: //data DATA ,, Struct
- return UINT8_FIELD;
- case 8: //data DATA ,, Struct
- return STRING_FIELD;
- case 9: //data DATA ,, Struct
- return UINT8_FIELD;
- case 10: //modt_p
- switch(WhichAttribute)
+ case 7: //models
+ if(ListFieldID == 0) //models
{
- case 0: //fieldType
- return UINT8_ARRAY_FIELD;
- case 1: //fieldSize
- return MODL.IsLoaded() ? MODL->MODT.GetSize() : 0;
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return LIST_FIELD;
+ case 1: //fieldSize
+ return (UINT32)Models.MODS.size();
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ }
+
+ if(ListIndex >= Models.MODS.size())
+ return UNKNOWN_FIELD;
+
+ switch(ListFieldID)
+ {
+ case 1: //percentage
+ return UINT8_FIELD;
+ case 2: //modPath
+ return ISTRING_FIELD;
+ case 3: //flags
+ return UINT8_FLAG_FIELD;
+ case 4: //modt_p
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return Models.MODS[ListIndex]->MODT.GetSize();
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
default:
return UNKNOWN_FIELD;
}
+ return UNKNOWN_FIELD;
default:
return UNKNOWN_FIELD;
}
@@ -100,14 +125,24 @@ void * DEBRRecord::GetField(FIELD_IDENTIFIERS, void **FieldValues)
case 6: //versionControl2
*FieldValues = &versionControl2[0];
return NULL;
- case 7: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value7 : NULL;
- case 8: //data DATA ,, Struct
- return DATA.value;
- case 9: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value9 : NULL;
- case 10: //modt_p
- *FieldValues = MODT.value;
+ case 7: //models
+ if(ListIndex >= Models.MODS.size())
+ return NULL;
+
+ switch(ListFieldID)
+ {
+ case 1: //percentage
+ return &Models.MODS[ListIndex]->percentage;
+ case 2: //modPath
+ return Models.MODS[ListIndex]->modPath;
+ case 3: //flags
+ return &Models.MODS[ListIndex]->flags;
+ case 4: //modt_p
+ *FieldValues = Models.MODS[ListIndex]->MODT.value;
+ return NULL;
+ default:
+ return NULL;
+ }
return NULL;
default:
return NULL;
@@ -142,19 +177,40 @@ bool DEBRRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
versionControl2[0] = ((UINT8ARRAY)FieldValue)[0];
versionControl2[1] = ((UINT8ARRAY)FieldValue)[1];
break;
- case 7: //data DATA ,, Struct
- DATA.Load();
- DATA->value7 = *(UINT8 *)FieldValue;
- break;
- case 8: //data DATA ,, Struct
- DATA.Copy((STRING)FieldValue);
- break;
- case 9: //data DATA ,, Struct
- DATA.Load();
- DATA->value9 = *(UINT8 *)FieldValue;
- break;
- case 10: //modt_p
- MODT.Copy((UINT8ARRAY)FieldValue, ArraySize);
+ case 7: //models
+ if(ListFieldID == 0) //modelsSize
+ {
+ Models.resize(ArraySize);
+ return false;
+ }
+
+ if(ListIndex >= Models.MODS.size())
+ break;
+
+ switch(ListFieldID)
+ {
+ case 1: //percentage
+ Models.MODS[ListIndex]->percentage = *(UINT8 *)FieldValue;
+ break;
+ case 2: //modPath
+ delete []Models.MODS[ListIndex]->modPath;
+ Models.MODS[ListIndex]->modPath = NULL;
+ if(FieldValue != NULL)
+ {
+ ArraySize = (UINT32)strlen((STRING)FieldValue) + 1;
+ Models.MODS[ListIndex]->modPath = new char[ArraySize];
+ strcpy_s(Models.MODS[ListIndex]->modPath, ArraySize, (STRING)FieldValue);
+ }
+ break;
+ case 3: //flags
+ Models.MODS[ListIndex]->SetFlagMask(*(UINT8 *)FieldValue);
+ break;
+ case 4: //modt_p
+ Models.MODS[ListIndex]->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize);
+ break;
+ default:
+ break;
+ }
break;
default:
break;
@@ -164,6 +220,7 @@ bool DEBRRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
void DEBRRecord::DeleteField(FIELD_IDENTIFIERS)
{
+ DEBRModel defaultModel;
switch(FieldID)
{
case 1: //flags1
@@ -182,17 +239,34 @@ void DEBRRecord::DeleteField(FIELD_IDENTIFIERS)
versionControl2[0] = 0;
versionControl2[1] = 0;
return;
- case 7: //data DATA ,, Struct
- DATA.Unload();
- return;
- case 8: //data DATA ,, Struct
- DATA.Unload();
- return;
- case 9: //data DATA ,, Struct
- DATA.Unload();
- return;
- case 10: //modt_p
- MODT.Unload();
+ case 7: //models
+ if(ListFieldID == 0) //modelsSize
+ {
+ Models.Unload();
+ return;
+ }
+
+ if(ListIndex >= Models.MODS.size())
+ return;
+
+ switch(ListFieldID)
+ {
+ case 1: //percentage
+ Models.MODS[ListIndex]->percentage = defaultModel.percentage;
+ return;
+ case 2: //modPath
+ delete []Models.MODS[ListIndex]->modPath;
+ Models.MODS[ListIndex]->modPath = NULL;
+ return;
+ case 3: //flags
+ Models.MODS[ListIndex]->SetFlagMask(defaultModel.flags);
+ return;
+ case 4: //modt_p
+ Models.MODS[ListIndex]->MODT.Unload();
+ return;
+ default:
+ return;
+ }
return;
default:
return;
diff --git a/CBash/FalloutNewVegas/Records/API/EFSHRecordAPI.cpp b/CBash/FalloutNewVegas/Records/API/EFSHRecordAPI.cpp
index fcbc449..8fd3c25 100644
--- a/CBash/FalloutNewVegas/Records/API/EFSHRecordAPI.cpp
+++ b/CBash/FalloutNewVegas/Records/API/EFSHRecordAPI.cpp
@@ -60,15 +60,15 @@ UINT32 EFSHRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 7: //icon Fill Texture
+ case 7: //fillPath
return ISTRING_FIELD;
- case 8: //ico2 Particle Shader Texture
+ case 8: //particlePath
return ISTRING_FIELD;
- case 9: //nam7 Holes Texture
+ case 9: //holesPath
return ISTRING_FIELD;
- case 10: //data DATA ,, Struct
- return UINT8_FIELD;
- case 11: //data_p DATA ,, Struct
+ case 10: //flags
+ return UINT8_FLAG_FIELD;
+ case 11: //unused1
switch(WhichAttribute)
{
case 0: //fieldType
@@ -79,19 +79,19 @@ UINT32 EFSHRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 12: //data DATA ,, Struct
+ case 12: //memSBlend
return UINT32_FIELD;
- case 13: //data DATA ,, Struct
+ case 13: //memBlendOp
return UINT32_FIELD;
- case 14: //data DATA ,, Struct
+ case 14: //memZFunc
return UINT32_FIELD;
- case 15: //data DATA ,, Struct
+ case 15: //fill.red
return UINT8_FIELD;
- case 16: //data DATA ,, Struct
+ case 16: //fill.green
return UINT8_FIELD;
- case 17: //data DATA ,, Struct
+ case 17: //fill.blue
return UINT8_FIELD;
- case 18: //data_p DATA ,, Struct
+ case 18: //unused2
switch(WhichAttribute)
{
case 0: //fieldType
@@ -102,31 +102,31 @@ UINT32 EFSHRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 19: //data DATA ,, Struct
+ case 19: //fillAIn
return FLOAT32_FIELD;
- case 20: //data DATA ,, Struct
+ case 20: //fillAFull
return FLOAT32_FIELD;
- case 21: //data DATA ,, Struct
+ case 21: //fillAOut
return FLOAT32_FIELD;
- case 22: //data DATA ,, Struct
+ case 22: //fillAPRatio
return FLOAT32_FIELD;
- case 23: //data DATA ,, Struct
+ case 23: //fillAAmp
return FLOAT32_FIELD;
- case 24: //data DATA ,, Struct
+ case 24: //fillAFreq
return FLOAT32_FIELD;
- case 25: //data DATA ,, Struct
+ case 25: //fillAnimSpdU
return FLOAT32_FIELD;
- case 26: //data DATA ,, Struct
+ case 26: //fillAnimSpdV
return FLOAT32_FIELD;
- case 27: //data DATA ,, Struct
+ case 27: //edgeEffOff
return FLOAT32_FIELD;
- case 28: //data DATA ,, Struct
+ case 28: //edgeEff.red
return UINT8_FIELD;
- case 29: //data DATA ,, Struct
+ case 29: //edgeEff.green
return UINT8_FIELD;
- case 30: //data DATA ,, Struct
+ case 30: //edgeEff.blue
return UINT8_FIELD;
- case 31: //data_p DATA ,, Struct
+ case 31: //unused3
switch(WhichAttribute)
{
case 0: //fieldType
@@ -137,77 +137,77 @@ UINT32 EFSHRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 32: //data DATA ,, Struct
+ case 32: //edgeEffAIn
return FLOAT32_FIELD;
- case 33: //data DATA ,, Struct
+ case 33: //edgeEffAFull
return FLOAT32_FIELD;
- case 34: //data DATA ,, Struct
+ case 34: //edgeEffAOut
return FLOAT32_FIELD;
- case 35: //data DATA ,, Struct
+ case 35: //edgeEffAPRatio
return FLOAT32_FIELD;
- case 36: //data DATA ,, Struct
+ case 36: //edgeEffAAmp
return FLOAT32_FIELD;
- case 37: //data DATA ,, Struct
+ case 37: //edgeEffAFreq
return FLOAT32_FIELD;
- case 38: //data DATA ,, Struct
+ case 38: //fillAFRatio
return FLOAT32_FIELD;
- case 39: //data DATA ,, Struct
+ case 39: //edgeEffAFRatio
return FLOAT32_FIELD;
- case 40: //data DATA ,, Struct
+ case 40: //memDBlend
return UINT32_FIELD;
- case 41: //data DATA ,, Struct
+ case 41: //partSBlend
return UINT32_FIELD;
- case 42: //data DATA ,, Struct
+ case 42: //partBlendOp
return UINT32_FIELD;
- case 43: //data DATA ,, Struct
+ case 43: //partZFunc
return UINT32_FIELD;
- case 44: //data DATA ,, Struct
+ case 44: //partDBlend
return UINT32_FIELD;
- case 45: //data DATA ,, Struct
+ case 45: //partBUp
return FLOAT32_FIELD;
- case 46: //data DATA ,, Struct
+ case 46: //partBFull
return FLOAT32_FIELD;
- case 47: //data DATA ,, Struct
+ case 47: //partBDown
return FLOAT32_FIELD;
- case 48: //data DATA ,, Struct
+ case 48: //partBFRatio
return FLOAT32_FIELD;
- case 49: //data DATA ,, Struct
+ case 49: //partBPRatio
return FLOAT32_FIELD;
- case 50: //data DATA ,, Struct
+ case 50: //partLTime
return FLOAT32_FIELD;
- case 51: //data DATA ,, Struct
+ case 51: //partLDelta
return FLOAT32_FIELD;
- case 52: //data DATA ,, Struct
+ case 52: //partNSpd
return FLOAT32_FIELD;
- case 53: //data DATA ,, Struct
+ case 53: //partNAcc
return FLOAT32_FIELD;
- case 54: //data DATA ,, Struct
+ case 54: //partVel1
return FLOAT32_FIELD;
- case 55: //data DATA ,, Struct
+ case 55: //partVel2
return FLOAT32_FIELD;
- case 56: //data DATA ,, Struct
+ case 56: //partVel3
return FLOAT32_FIELD;
- case 57: //data DATA ,, Struct
+ case 57: //partAcc1
return FLOAT32_FIELD;
- case 58: //data DATA ,, Struct
+ case 58: //partAcc2
return FLOAT32_FIELD;
- case 59: //data DATA ,, Struct
+ case 59: //partAcc3
return FLOAT32_FIELD;
- case 60: //data DATA ,, Struct
+ case 60: //partKey1
return FLOAT32_FIELD;
- case 61: //data DATA ,, Struct
+ case 61: //partKey2
return FLOAT32_FIELD;
- case 62: //data DATA ,, Struct
+ case 62: //partKey1Time
return FLOAT32_FIELD;
- case 63: //data DATA ,, Struct
+ case 63: //partKey2Time
return FLOAT32_FIELD;
- case 64: //data DATA ,, Struct
+ case 64: //key1.red
return UINT8_FIELD;
- case 65: //data DATA ,, Struct
+ case 65: //key1.green
return UINT8_FIELD;
- case 66: //data DATA ,, Struct
+ case 66: //key1.blue
return UINT8_FIELD;
- case 67: //data_p DATA ,, Struct
+ case 67: //unused4
switch(WhichAttribute)
{
case 0: //fieldType
@@ -218,13 +218,13 @@ UINT32 EFSHRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 68: //data DATA ,, Struct
+ case 68: //key2.red
return UINT8_FIELD;
- case 69: //data DATA ,, Struct
+ case 69: //key2.green
return UINT8_FIELD;
- case 70: //data DATA ,, Struct
+ case 70: //key2.blue
return UINT8_FIELD;
- case 71: //data_p DATA ,, Struct
+ case 71: //unused5
switch(WhichAttribute)
{
case 0: //fieldType
@@ -235,13 +235,13 @@ UINT32 EFSHRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 72: //data DATA ,, Struct
+ case 72: //key3.red
return UINT8_FIELD;
- case 73: //data DATA ,, Struct
+ case 73: //key3.green
return UINT8_FIELD;
- case 74: //data DATA ,, Struct
+ case 74: //key3.blue
return UINT8_FIELD;
- case 75: //data_p DATA ,, Struct
+ case 75: //unused6
switch(WhichAttribute)
{
case 0: //fieldType
@@ -252,47 +252,47 @@ UINT32 EFSHRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 76: //data DATA ,, Struct
+ case 76: //key1A
return FLOAT32_FIELD;
- case 77: //data DATA ,, Struct
+ case 77: //key2A
return FLOAT32_FIELD;
- case 78: //data DATA ,, Struct
+ case 78: //key3A
return FLOAT32_FIELD;
- case 79: //data DATA ,, Struct
+ case 79: //key1Time
return FLOAT32_FIELD;
- case 80: //data DATA ,, Struct
+ case 80: //key2Time
return FLOAT32_FIELD;
- case 81: //data DATA ,, Struct
+ case 81: //key3Time
return FLOAT32_FIELD;
- case 82: //data DATA ,, Struct
+ case 82: //partInitSpd
return FLOAT32_FIELD;
- case 83: //data DATA ,, Struct
+ case 83: //partInitRot
return FLOAT32_FIELD;
- case 84: //data DATA ,, Struct
+ case 84: //partInitRotDelta
return FLOAT32_FIELD;
- case 85: //data DATA ,, Struct
+ case 85: //partRotSpd
return FLOAT32_FIELD;
- case 86: //data DATA ,, Struct
+ case 86: //partRotDelta
return FLOAT32_FIELD;
- case 87: //data DATA ,, Struct
+ case 87: //addon
return FORMID_FIELD;
- case 88: //data DATA ,, Struct
+ case 88: //holesSTime
return FLOAT32_FIELD;
- case 89: //data DATA ,, Struct
+ case 89: //holesETime
return FLOAT32_FIELD;
- case 90: //data DATA ,, Struct
+ case 90: //holesSValue
return FLOAT32_FIELD;
- case 91: //data DATA ,, Struct
+ case 91: //holesEValue
return FLOAT32_FIELD;
- case 92: //data DATA ,, Struct
+ case 92: //edgeWidth
return FLOAT32_FIELD;
- case 93: //data DATA ,, Struct
+ case 93: //edge.red
return UINT8_FIELD;
- case 94: //data DATA ,, Struct
+ case 94: //edge.green
return UINT8_FIELD;
- case 95: //data DATA ,, Struct
+ case 95: //edge.blue
return UINT8_FIELD;
- case 96: //data_p DATA ,, Struct
+ case 96: //unused7
switch(WhichAttribute)
{
case 0: //fieldType
@@ -303,23 +303,23 @@ UINT32 EFSHRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 97: //data DATA ,, Struct
+ case 97: //explWindSpd
return FLOAT32_FIELD;
- case 98: //data DATA ,, Struct
+ case 98: //textCountU
return UINT32_FIELD;
- case 99: //data DATA ,, Struct
+ case 99: //textCountV
return UINT32_FIELD;
- case 100: //data DATA ,, Struct
+ case 100: //addonFITime
return FLOAT32_FIELD;
- case 101: //data DATA ,, Struct
+ case 101: //addonFOTime
return FLOAT32_FIELD;
- case 102: //data DATA ,, Struct
+ case 102: //addonScaleStart
return FLOAT32_FIELD;
- case 103: //data DATA ,, Struct
+ case 103: //addonScaleEnd
return FLOAT32_FIELD;
- case 104: //data DATA ,, Struct
+ case 104: //addonScaleInTime
return FLOAT32_FIELD;
- case 105: //data DATA ,, Struct
+ case 105: //addonScaleOutTime
return FLOAT32_FIELD;
default:
return UNKNOWN_FIELD;
@@ -345,211 +345,211 @@ void * EFSHRecord::GetField(FIELD_IDENTIFIERS, void **FieldValues)
case 6: //versionControl2
*FieldValues = &versionControl2[0];
return NULL;
- case 7: //icon Fill Texture
+ case 7: //fillPath
return ICON.value;
- case 8: //ico2 Particle Shader Texture
+ case 8: //particlePath
return ICO2.value;
- case 9: //nam7 Holes Texture
+ case 9: //holesPath
return NAM7.value;
- case 10: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value10 : NULL;
- case 11: //data_p DATA ,, Struct
- *FieldValues = DATA.IsLoaded() ? &DATA->value11[0] : NULL;
+ case 10: //flags
+ return &DATA.value.flags;
+ case 11: //unused1
+ *FieldValues = &DATA.value.unused1[0];
return NULL;
- case 12: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value12 : NULL;
- case 13: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value13 : NULL;
- case 14: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value14 : NULL;
- case 15: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value15 : NULL;
- case 16: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value16 : NULL;
- case 17: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value17 : NULL;
- case 18: //data_p DATA ,, Struct
- *FieldValues = DATA.IsLoaded() ? &DATA->value18[0] : NULL;
+ case 12: //memSBlend
+ return &DATA.value.memSBlend;
+ case 13: //memBlendOp
+ return &DATA.value.memBlendOp;
+ case 14: //memZFunc
+ return &DATA.value.memZFunc;
+ case 15: //fill.red
+ return &DATA.value.fill.red;
+ case 16: //fill.green
+ return &DATA.value.fill.green;
+ case 17: //fill.blue
+ return &DATA.value.fill.blue;
+ case 18: //unused2
+ *FieldValues = &DATA.value.fill.unused1;
return NULL;
- case 19: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value19 : NULL;
- case 20: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value20 : NULL;
- case 21: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value21 : NULL;
- case 22: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value22 : NULL;
- case 23: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value23 : NULL;
- case 24: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value24 : NULL;
- case 25: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value25 : NULL;
- case 26: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value26 : NULL;
- case 27: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value27 : NULL;
- case 28: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value28 : NULL;
- case 29: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value29 : NULL;
- case 30: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value30 : NULL;
- case 31: //data_p DATA ,, Struct
- *FieldValues = DATA.IsLoaded() ? &DATA->value31[0] : NULL;
+ case 19: //fillAIn
+ return &DATA.value.fillAIn;
+ case 20: //fillAFull
+ return &DATA.value.fillAFull;
+ case 21: //fillAOut
+ return &DATA.value.fillAOut;
+ case 22: //fillAPRatio
+ return &DATA.value.fillAPRatio;
+ case 23: //fillAAmp
+ return &DATA.value.fillAAmp;
+ case 24: //fillAFreq
+ return &DATA.value.fillAFreq;
+ case 25: //fillAnimSpdU
+ return &DATA.value.fillAnimSpdU;
+ case 26: //fillAnimSpdV
+ return &DATA.value.fillAnimSpdV;
+ case 27: //edgeEffOff
+ return &DATA.value.edgeEffOff;
+ case 28: //edgeEff.red
+ return &DATA.value.edgeEff.red;
+ case 29: //edgeEff.green
+ return &DATA.value.edgeEff.green;
+ case 30: //edgeEff.blue
+ return &DATA.value.edgeEff.blue;
+ case 31: //unused3
+ *FieldValues = &DATA.value.edgeEff.unused1;
return NULL;
- case 32: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value32 : NULL;
- case 33: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value33 : NULL;
- case 34: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value34 : NULL;
- case 35: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value35 : NULL;
- case 36: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value36 : NULL;
- case 37: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value37 : NULL;
- case 38: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value38 : NULL;
- case 39: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value39 : NULL;
- case 40: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value40 : NULL;
- case 41: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value41 : NULL;
- case 42: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value42 : NULL;
- case 43: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value43 : NULL;
- case 44: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value44 : NULL;
- case 45: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value45 : NULL;
- case 46: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value46 : NULL;
- case 47: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value47 : NULL;
- case 48: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value48 : NULL;
- case 49: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value49 : NULL;
- case 50: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value50 : NULL;
- case 51: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value51 : NULL;
- case 52: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value52 : NULL;
- case 53: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value53 : NULL;
- case 54: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value54 : NULL;
- case 55: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value55 : NULL;
- case 56: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value56 : NULL;
- case 57: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value57 : NULL;
- case 58: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value58 : NULL;
- case 59: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value59 : NULL;
- case 60: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value60 : NULL;
- case 61: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value61 : NULL;
- case 62: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value62 : NULL;
- case 63: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value63 : NULL;
- case 64: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value64 : NULL;
- case 65: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value65 : NULL;
- case 66: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value66 : NULL;
- case 67: //data_p DATA ,, Struct
- *FieldValues = DATA.IsLoaded() ? &DATA->value67[0] : NULL;
+ case 32: //edgeEffAIn
+ return &DATA.value.edgeEffAIn;
+ case 33: //edgeEffAFull
+ return &DATA.value.edgeEffAFull;
+ case 34: //edgeEffAOut
+ return &DATA.value.edgeEffAOut;
+ case 35: //edgeEffAPRatio
+ return &DATA.value.edgeEffAPRatio;
+ case 36: //edgeEffAAmp
+ return &DATA.value.edgeEffAAmp;
+ case 37: //edgeEffAFreq
+ return &DATA.value.edgeEffAFreq;
+ case 38: //fillAFRatio
+ return &DATA.value.fillAFRatio;
+ case 39: //edgeEffAFRatio
+ return &DATA.value.edgeEffAFRatio;
+ case 40: //memDBlend
+ return &DATA.value.memDBlend;
+ case 41: //partSBlend
+ return &DATA.value.partSBlend;
+ case 42: //partBlendOp
+ return &DATA.value.partBlendOp;
+ case 43: //partZFunc
+ return &DATA.value.partZFunc;
+ case 44: //partDBlend
+ return &DATA.value.partDBlend;
+ case 45: //partBUp
+ return &DATA.value.partBUp;
+ case 46: //partBFull
+ return &DATA.value.partBFull;
+ case 47: //partBDown
+ return &DATA.value.partBDown;
+ case 48: //partBFRatio
+ return &DATA.value.partBFRatio;
+ case 49: //partBPRatio
+ return &DATA.value.partBPRatio;
+ case 50: //partLTime
+ return &DATA.value.partLTime;
+ case 51: //partLDelta
+ return &DATA.value.partLDelta;
+ case 52: //partNSpd
+ return &DATA.value.partNSpd;
+ case 53: //partNAcc
+ return &DATA.value.partNAcc;
+ case 54: //partVel1
+ return &DATA.value.partVel1;
+ case 55: //partVel2
+ return &DATA.value.partVel2;
+ case 56: //partVel3
+ return &DATA.value.partVel3;
+ case 57: //partAcc1
+ return &DATA.value.partAcc1;
+ case 58: //partAcc2
+ return &DATA.value.partAcc2;
+ case 59: //partAcc3
+ return &DATA.value.partAcc3;
+ case 60: //partKey1
+ return &DATA.value.partKey1;
+ case 61: //partKey2
+ return &DATA.value.partKey2;
+ case 62: //partKey1Time
+ return &DATA.value.partKey1Time;
+ case 63: //partKey2Time
+ return &DATA.value.partKey2Time;
+ case 64: //key1.red
+ return &DATA.value.key1.red;
+ case 65: //key1.green
+ return &DATA.value.key1.green;
+ case 66: //key1.blue
+ return &DATA.value.key1.blue;
+ case 67: //unused4
+ *FieldValues = &DATA.value.key1.unused1;
return NULL;
- case 68: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value68 : NULL;
- case 69: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value69 : NULL;
- case 70: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value70 : NULL;
- case 71: //data_p DATA ,, Struct
- *FieldValues = DATA.IsLoaded() ? &DATA->value71[0] : NULL;
+ case 68: //key2.red
+ return &DATA.value.key2.red;
+ case 69: //key2.green
+ return &DATA.value.key2.green;
+ case 70: //key2.blue
+ return &DATA.value.key2.blue;
+ case 71: //unused5
+ *FieldValues = &DATA.value.key2.unused1;
return NULL;
- case 72: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value72 : NULL;
- case 73: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value73 : NULL;
- case 74: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value74 : NULL;
- case 75: //data_p DATA ,, Struct
- *FieldValues = DATA.IsLoaded() ? &DATA->value75[0] : NULL;
+ case 72: //key3.red
+ return &DATA.value.key3.red;
+ case 73: //key3.green
+ return &DATA.value.key3.green;
+ case 74: //key3.blue
+ return &DATA.value.key3.blue;
+ case 75: //unused6
+ *FieldValues = &DATA.value.key3.unused1;
return NULL;
- case 76: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value76 : NULL;
- case 77: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value77 : NULL;
- case 78: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value78 : NULL;
- case 79: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value79 : NULL;
- case 80: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value80 : NULL;
- case 81: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value81 : NULL;
- case 82: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value82 : NULL;
- case 83: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value83 : NULL;
- case 84: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value84 : NULL;
- case 85: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value85 : NULL;
- case 86: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value86 : NULL;
- case 87: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value87 : NULL;
- case 88: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value88 : NULL;
- case 89: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value89 : NULL;
- case 90: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value90 : NULL;
- case 91: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value91 : NULL;
- case 92: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value92 : NULL;
- case 93: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value93 : NULL;
- case 94: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value94 : NULL;
- case 95: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value95 : NULL;
- case 96: //data_p DATA ,, Struct
- *FieldValues = DATA.IsLoaded() ? &DATA->value96[0] : NULL;
+ case 76: //key1A
+ return &DATA.value.key1A;
+ case 77: //key2A
+ return &DATA.value.key2A;
+ case 78: //key3A
+ return &DATA.value.key3A;
+ case 79: //key1Time
+ return &DATA.value.key1Time;
+ case 80: //key2Time
+ return &DATA.value.key2Time;
+ case 81: //key3Time
+ return &DATA.value.key3Time;
+ case 82: //partInitSpd
+ return &DATA.value.partInitSpd;
+ case 83: //partInitRot
+ return &DATA.value.partInitRot;
+ case 84: //partInitRotDelta
+ return &DATA.value.partInitRotDelta;
+ case 85: //partRotSpd
+ return &DATA.value.partRotSpd;
+ case 86: //partRotDelta
+ return &DATA.value.partRotDelta;
+ case 87: //addon
+ return &DATA.value.addon;
+ case 88: //holesSTime
+ return &DATA.value.holesSTime;
+ case 89: //holesETime
+ return &DATA.value.holesETime;
+ case 90: //holesSValue
+ return &DATA.value.holesSValue;
+ case 91: //holesEValue
+ return &DATA.value.holesEValue;
+ case 92: //edgeWidth
+ return &DATA.value.edgeWidth;
+ case 93: //edge.red
+ return &DATA.value.edge.red;
+ case 94: //edge.green
+ return &DATA.value.edge.green;
+ case 95: //edge.blue
+ return &DATA.value.edge.blue;
+ case 96: //unused7
+ *FieldValues = &DATA.value.edge.unused1;
return NULL;
- case 97: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value97 : NULL;
- case 98: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value98 : NULL;
- case 99: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value99 : NULL;
- case 100: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value100 : NULL;
- case 101: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value101 : NULL;
- case 102: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value102 : NULL;
- case 103: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value103 : NULL;
- case 104: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value104 : NULL;
- case 105: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value105 : NULL;
+ case 97: //explWindSpd
+ return &DATA.value.explWindSpd;
+ case 98: //textCountU
+ return &DATA.value.textCountU;
+ case 99: //textCountV
+ return &DATA.value.textCountV;
+ case 100: //addonFITime
+ return &DATA.value.addonFITime;
+ case 101: //addonFOTime
+ return &DATA.value.addonFOTime;
+ case 102: //addonScaleStart
+ return &DATA.value.addonScaleStart;
+ case 103: //addonScaleEnd
+ return &DATA.value.addonScaleEnd;
+ case 104: //addonScaleInTime
+ return &DATA.value.addonScaleInTime;
+ case 105: //addonScaleOutTime
+ return &DATA.value.addonScaleOutTime;
default:
return NULL;
}
@@ -583,414 +583,318 @@ bool EFSHRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
versionControl2[0] = ((UINT8ARRAY)FieldValue)[0];
versionControl2[1] = ((UINT8ARRAY)FieldValue)[1];
break;
- case 7: //icon Fill Texture
+ case 7: //fillPath
ICON.Copy((STRING)FieldValue);
break;
- case 8: //ico2 Particle Shader Texture
+ case 8: //particlePath
ICO2.Copy((STRING)FieldValue);
break;
- case 9: //nam7 Holes Texture
+ case 9: //holesPath
NAM7.Copy((STRING)FieldValue);
break;
- case 10: //data DATA ,, Struct
- DATA.Load();
- DATA->value10 = *(UINT8 *)FieldValue;
+ case 10: //flags
+ SetFlagMask(*(UINT8 *)FieldValue);
break;
- case 11: //data_p DATA ,, Struct
+ case 11: //unused1
if(ArraySize != 3)
break;
- DATA.Load();
- DATA->value11[0] = ((UINT8ARRAY)FieldValue)[0];
- DATA->value11[1] = ((UINT8ARRAY)FieldValue)[1];
- DATA->value11[2] = ((UINT8ARRAY)FieldValue)[2];
+ DATA.value.unused1[0] = ((UINT8ARRAY)FieldValue)[0];
+ DATA.value.unused1[1] = ((UINT8ARRAY)FieldValue)[1];
+ DATA.value.unused1[2] = ((UINT8ARRAY)FieldValue)[2];
break;
- case 12: //data DATA ,, Struct
- DATA.Load();
- DATA->value12 = *(UINT32 *)FieldValue;
+ case 12: //memSBlend
+ DATA.value.memSBlend = *(UINT32 *)FieldValue;
break;
- case 13: //data DATA ,, Struct
- DATA.Load();
- DATA->value13 = *(UINT32 *)FieldValue;
+ case 13: //memBlendOp
+ DATA.value.memBlendOp = *(UINT32 *)FieldValue;
break;
- case 14: //data DATA ,, Struct
- DATA.Load();
- DATA->value14 = *(UINT32 *)FieldValue;
+ case 14: //memZFunc
+ DATA.value.memZFunc = *(UINT32 *)FieldValue;
break;
- case 15: //data DATA ,, Struct
- DATA.Load();
- DATA->value15 = *(UINT8 *)FieldValue;
+ case 15: //fill.red
+ DATA.value.fill.red = *(UINT8 *)FieldValue;
break;
- case 16: //data DATA ,, Struct
- DATA.Load();
- DATA->value16 = *(UINT8 *)FieldValue;
+ case 16: //fill.green
+ DATA.value.fill.green = *(UINT8 *)FieldValue;
break;
- case 17: //data DATA ,, Struct
- DATA.Load();
- DATA->value17 = *(UINT8 *)FieldValue;
+ case 17: //fill.blue
+ DATA.value.fill.blue = *(UINT8 *)FieldValue;
break;
- case 18: //data_p DATA ,, Struct
+ case 18: //unused2
if(ArraySize != 1)
break;
- DATA.Load();
- DATA->value18[0] = ((UINT8ARRAY)FieldValue)[0];
+ DATA.value.fill.unused1 = ((UINT8ARRAY)FieldValue)[0];
break;
- case 19: //data DATA ,, Struct
- DATA.Load();
- DATA->value19 = *(FLOAT32 *)FieldValue;
+ case 19: //fillAIn
+ DATA.value.fillAIn = *(FLOAT32 *)FieldValue;
break;
- case 20: //data DATA ,, Struct
- DATA.Load();
- DATA->value20 = *(FLOAT32 *)FieldValue;
+ case 20: //fillAFull
+ DATA.value.fillAFull = *(FLOAT32 *)FieldValue;
break;
- case 21: //data DATA ,, Struct
- DATA.Load();
- DATA->value21 = *(FLOAT32 *)FieldValue;
+ case 21: //fillAOut
+ DATA.value.fillAOut = *(FLOAT32 *)FieldValue;
break;
- case 22: //data DATA ,, Struct
- DATA.Load();
- DATA->value22 = *(FLOAT32 *)FieldValue;
+ case 22: //fillAPRatio
+ DATA.value.fillAPRatio = *(FLOAT32 *)FieldValue;
break;
- case 23: //data DATA ,, Struct
- DATA.Load();
- DATA->value23 = *(FLOAT32 *)FieldValue;
+ case 23: //fillAAmp
+ DATA.value.fillAAmp = *(FLOAT32 *)FieldValue;
break;
- case 24: //data DATA ,, Struct
- DATA.Load();
- DATA->value24 = *(FLOAT32 *)FieldValue;
+ case 24: //fillAFreq
+ DATA.value.fillAFreq = *(FLOAT32 *)FieldValue;
break;
- case 25: //data DATA ,, Struct
- DATA.Load();
- DATA->value25 = *(FLOAT32 *)FieldValue;
+ case 25: //fillAnimSpdU
+ DATA.value.fillAnimSpdU = *(FLOAT32 *)FieldValue;
break;
- case 26: //data DATA ,, Struct
- DATA.Load();
- DATA->value26 = *(FLOAT32 *)FieldValue;
+ case 26: //fillAnimSpdV
+ DATA.value.fillAnimSpdV = *(FLOAT32 *)FieldValue;
break;
- case 27: //data DATA ,, Struct
- DATA.Load();
- DATA->value27 = *(FLOAT32 *)FieldValue;
+ case 27: //edgeEffOff
+ DATA.value.edgeEffOff = *(FLOAT32 *)FieldValue;
break;
- case 28: //data DATA ,, Struct
- DATA.Load();
- DATA->value28 = *(UINT8 *)FieldValue;
+ case 28: //edgeEff.red
+ DATA.value.edgeEff.red = *(UINT8 *)FieldValue;
break;
- case 29: //data DATA ,, Struct
- DATA.Load();
- DATA->value29 = *(UINT8 *)FieldValue;
+ case 29: //edgeEff.green
+ DATA.value.edgeEff.green = *(UINT8 *)FieldValue;
break;
- case 30: //data DATA ,, Struct
- DATA.Load();
- DATA->value30 = *(UINT8 *)FieldValue;
+ case 30: //edgeEff.blue
+ DATA.value.edgeEff.blue = *(UINT8 *)FieldValue;
break;
- case 31: //data_p DATA ,, Struct
+ case 31: //unused3
if(ArraySize != 1)
break;
- DATA.Load();
- DATA->value31[0] = ((UINT8ARRAY)FieldValue)[0];
+ DATA.value.edgeEff.unused1 = ((UINT8ARRAY)FieldValue)[0];
break;
- case 32: //data DATA ,, Struct
- DATA.Load();
- DATA->value32 = *(FLOAT32 *)FieldValue;
+ case 32: //edgeEffAIn
+ DATA.value.edgeEffAIn = *(FLOAT32 *)FieldValue;
break;
- case 33: //data DATA ,, Struct
- DATA.Load();
- DATA->value33 = *(FLOAT32 *)FieldValue;
+ case 33: //edgeEffAFull
+ DATA.value.edgeEffAFull = *(FLOAT32 *)FieldValue;
break;
- case 34: //data DATA ,, Struct
- DATA.Load();
- DATA->value34 = *(FLOAT32 *)FieldValue;
+ case 34: //edgeEffAOut
+ DATA.value.edgeEffAOut = *(FLOAT32 *)FieldValue;
break;
- case 35: //data DATA ,, Struct
- DATA.Load();
- DATA->value35 = *(FLOAT32 *)FieldValue;
+ case 35: //edgeEffAPRatio
+ DATA.value.edgeEffAPRatio = *(FLOAT32 *)FieldValue;
break;
- case 36: //data DATA ,, Struct
- DATA.Load();
- DATA->value36 = *(FLOAT32 *)FieldValue;
+ case 36: //edgeEffAAmp
+ DATA.value.edgeEffAAmp = *(FLOAT32 *)FieldValue;
break;
- case 37: //data DATA ,, Struct
- DATA.Load();
- DATA->value37 = *(FLOAT32 *)FieldValue;
+ case 37: //edgeEffAFreq
+ DATA.value.edgeEffAFreq = *(FLOAT32 *)FieldValue;
break;
- case 38: //data DATA ,, Struct
- DATA.Load();
- DATA->value38 = *(FLOAT32 *)FieldValue;
+ case 38: //fillAFRatio
+ DATA.value.fillAFRatio = *(FLOAT32 *)FieldValue;
break;
- case 39: //data DATA ,, Struct
- DATA.Load();
- DATA->value39 = *(FLOAT32 *)FieldValue;
+ case 39: //edgeEffAFRatio
+ DATA.value.edgeEffAFRatio = *(FLOAT32 *)FieldValue;
break;
- case 40: //data DATA ,, Struct
- DATA.Load();
- DATA->value40 = *(UINT32 *)FieldValue;
+ case 40: //memDBlend
+ DATA.value.memDBlend = *(UINT32 *)FieldValue;
break;
- case 41: //data DATA ,, Struct
- DATA.Load();
- DATA->value41 = *(UINT32 *)FieldValue;
+ case 41: //partSBlend
+ DATA.value.partSBlend = *(UINT32 *)FieldValue;
break;
- case 42: //data DATA ,, Struct
- DATA.Load();
- DATA->value42 = *(UINT32 *)FieldValue;
+ case 42: //partBlendOp
+ DATA.value.partBlendOp = *(UINT32 *)FieldValue;
break;
- case 43: //data DATA ,, Struct
- DATA.Load();
- DATA->value43 = *(UINT32 *)FieldValue;
+ case 43: //partZFunc
+ DATA.value.partZFunc = *(UINT32 *)FieldValue;
break;
- case 44: //data DATA ,, Struct
- DATA.Load();
- DATA->value44 = *(UINT32 *)FieldValue;
+ case 44: //partDBlend
+ DATA.value.partDBlend = *(UINT32 *)FieldValue;
break;
- case 45: //data DATA ,, Struct
- DATA.Load();
- DATA->value45 = *(FLOAT32 *)FieldValue;
+ case 45: //partBUp
+ DATA.value.partBUp = *(FLOAT32 *)FieldValue;
break;
- case 46: //data DATA ,, Struct
- DATA.Load();
- DATA->value46 = *(FLOAT32 *)FieldValue;
+ case 46: //partBFull
+ DATA.value.partBFull = *(FLOAT32 *)FieldValue;
break;
- case 47: //data DATA ,, Struct
- DATA.Load();
- DATA->value47 = *(FLOAT32 *)FieldValue;
+ case 47: //partBDown
+ DATA.value.partBDown = *(FLOAT32 *)FieldValue;
break;
- case 48: //data DATA ,, Struct
- DATA.Load();
- DATA->value48 = *(FLOAT32 *)FieldValue;
+ case 48: //partBFRatio
+ DATA.value.partBFRatio = *(FLOAT32 *)FieldValue;
break;
- case 49: //data DATA ,, Struct
- DATA.Load();
- DATA->value49 = *(FLOAT32 *)FieldValue;
+ case 49: //partBPRatio
+ DATA.value.partBPRatio = *(FLOAT32 *)FieldValue;
break;
- case 50: //data DATA ,, Struct
- DATA.Load();
- DATA->value50 = *(FLOAT32 *)FieldValue;
+ case 50: //partLTime
+ DATA.value.partLTime = *(FLOAT32 *)FieldValue;
break;
- case 51: //data DATA ,, Struct
- DATA.Load();
- DATA->value51 = *(FLOAT32 *)FieldValue;
+ case 51: //partLDelta
+ DATA.value.partLDelta = *(FLOAT32 *)FieldValue;
break;
- case 52: //data DATA ,, Struct
- DATA.Load();
- DATA->value52 = *(FLOAT32 *)FieldValue;
+ case 52: //partNSpd
+ DATA.value.partNSpd = *(FLOAT32 *)FieldValue;
break;
- case 53: //data DATA ,, Struct
- DATA.Load();
- DATA->value53 = *(FLOAT32 *)FieldValue;
+ case 53: //partNAcc
+ DATA.value.partNAcc = *(FLOAT32 *)FieldValue;
break;
- case 54: //data DATA ,, Struct
- DATA.Load();
- DATA->value54 = *(FLOAT32 *)FieldValue;
+ case 54: //partVel1
+ DATA.value.partVel1 = *(FLOAT32 *)FieldValue;
break;
- case 55: //data DATA ,, Struct
- DATA.Load();
- DATA->value55 = *(FLOAT32 *)FieldValue;
+ case 55: //partVel2
+ DATA.value.partVel2 = *(FLOAT32 *)FieldValue;
break;
- case 56: //data DATA ,, Struct
- DATA.Load();
- DATA->value56 = *(FLOAT32 *)FieldValue;
+ case 56: //partVel3
+ DATA.value.partVel3 = *(FLOAT32 *)FieldValue;
break;
- case 57: //data DATA ,, Struct
- DATA.Load();
- DATA->value57 = *(FLOAT32 *)FieldValue;
+ case 57: //partAcc1
+ DATA.value.partAcc1 = *(FLOAT32 *)FieldValue;
break;
- case 58: //data DATA ,, Struct
- DATA.Load();
- DATA->value58 = *(FLOAT32 *)FieldValue;
+ case 58: //partAcc2
+ DATA.value.partAcc2 = *(FLOAT32 *)FieldValue;
break;
- case 59: //data DATA ,, Struct
- DATA.Load();
- DATA->value59 = *(FLOAT32 *)FieldValue;
+ case 59: //partAcc3
+ DATA.value.partAcc3 = *(FLOAT32 *)FieldValue;
break;
- case 60: //data DATA ,, Struct
- DATA.Load();
- DATA->value60 = *(FLOAT32 *)FieldValue;
+ case 60: //partKey1
+ DATA.value.partKey1 = *(FLOAT32 *)FieldValue;
break;
- case 61: //data DATA ,, Struct
- DATA.Load();
- DATA->value61 = *(FLOAT32 *)FieldValue;
+ case 61: //partKey2
+ DATA.value.partKey2 = *(FLOAT32 *)FieldValue;
break;
- case 62: //data DATA ,, Struct
- DATA.Load();
- DATA->value62 = *(FLOAT32 *)FieldValue;
+ case 62: //partKey1Time
+ DATA.value.partKey1Time = *(FLOAT32 *)FieldValue;
break;
- case 63: //data DATA ,, Struct
- DATA.Load();
- DATA->value63 = *(FLOAT32 *)FieldValue;
+ case 63: //partKey2Time
+ DATA.value.partKey2Time = *(FLOAT32 *)FieldValue;
break;
- case 64: //data DATA ,, Struct
- DATA.Load();
- DATA->value64 = *(UINT8 *)FieldValue;
+ case 64: //key1.red
+ DATA.value.key1.red = *(UINT8 *)FieldValue;
break;
- case 65: //data DATA ,, Struct
- DATA.Load();
- DATA->value65 = *(UINT8 *)FieldValue;
+ case 65: //key1.green
+ DATA.value.key1.green = *(UINT8 *)FieldValue;
break;
- case 66: //data DATA ,, Struct
- DATA.Load();
- DATA->value66 = *(UINT8 *)FieldValue;
+ case 66: //key1.blue
+ DATA.value.key1.blue = *(UINT8 *)FieldValue;
break;
- case 67: //data_p DATA ,, Struct
+ case 67: //unused4
if(ArraySize != 1)
break;
- DATA.Load();
- DATA->value67[0] = ((UINT8ARRAY)FieldValue)[0];
+ DATA.value.key1.unused1 = ((UINT8ARRAY)FieldValue)[0];
break;
- case 68: //data DATA ,, Struct
- DATA.Load();
- DATA->value68 = *(UINT8 *)FieldValue;
+ case 68: //key2.red
+ DATA.value.key2.red = *(UINT8 *)FieldValue;
break;
- case 69: //data DATA ,, Struct
- DATA.Load();
- DATA->value69 = *(UINT8 *)FieldValue;
+ case 69: //key2.green
+ DATA.value.key2.green = *(UINT8 *)FieldValue;
break;
- case 70: //data DATA ,, Struct
- DATA.Load();
- DATA->value70 = *(UINT8 *)FieldValue;
+ case 70: //key2.blue
+ DATA.value.key2.blue = *(UINT8 *)FieldValue;
break;
- case 71: //data_p DATA ,, Struct
+ case 71: //unused5
if(ArraySize != 1)
break;
- DATA.Load();
- DATA->value71[0] = ((UINT8ARRAY)FieldValue)[0];
+ DATA.value.key2.unused1 = ((UINT8ARRAY)FieldValue)[0];
break;
- case 72: //data DATA ,, Struct
- DATA.Load();
- DATA->value72 = *(UINT8 *)FieldValue;
+ case 72: //key3.red
+ DATA.value.key3.red = *(UINT8 *)FieldValue;
break;
- case 73: //data DATA ,, Struct
- DATA.Load();
- DATA->value73 = *(UINT8 *)FieldValue;
+ case 73: //key3.green
+ DATA.value.key3.green = *(UINT8 *)FieldValue;
break;
- case 74: //data DATA ,, Struct
- DATA.Load();
- DATA->value74 = *(UINT8 *)FieldValue;
+ case 74: //key3.blue
+ DATA.value.key3.blue = *(UINT8 *)FieldValue;
break;
- case 75: //data_p DATA ,, Struct
+ case 75: //unused6
if(ArraySize != 1)
break;
- DATA.Load();
- DATA->value75[0] = ((UINT8ARRAY)FieldValue)[0];
+ DATA.value.key3.unused1 = ((UINT8ARRAY)FieldValue)[0];
break;
- case 76: //data DATA ,, Struct
- DATA.Load();
- DATA->value76 = *(FLOAT32 *)FieldValue;
+ case 76: //key1A
+ DATA.value.key1A = *(FLOAT32 *)FieldValue;
break;
- case 77: //data DATA ,, Struct
- DATA.Load();
- DATA->value77 = *(FLOAT32 *)FieldValue;
+ case 77: //key2A
+ DATA.value.key2A = *(FLOAT32 *)FieldValue;
break;
- case 78: //data DATA ,, Struct
- DATA.Load();
- DATA->value78 = *(FLOAT32 *)FieldValue;
+ case 78: //key3A
+ DATA.value.key3A = *(FLOAT32 *)FieldValue;
break;
- case 79: //data DATA ,, Struct
- DATA.Load();
- DATA->value79 = *(FLOAT32 *)FieldValue;
+ case 79: //key1Time
+ DATA.value.key1Time = *(FLOAT32 *)FieldValue;
break;
- case 80: //data DATA ,, Struct
- DATA.Load();
- DATA->value80 = *(FLOAT32 *)FieldValue;
+ case 80: //key2Time
+ DATA.value.key2Time = *(FLOAT32 *)FieldValue;
break;
- case 81: //data DATA ,, Struct
- DATA.Load();
- DATA->value81 = *(FLOAT32 *)FieldValue;
+ case 81: //key3Time
+ DATA.value.key3Time = *(FLOAT32 *)FieldValue;
break;
- case 82: //data DATA ,, Struct
- DATA.Load();
- DATA->value82 = *(FLOAT32 *)FieldValue;
+ case 82: //partInitSpd
+ DATA.value.partInitSpd = *(FLOAT32 *)FieldValue;
break;
- case 83: //data DATA ,, Struct
- DATA.Load();
- DATA->value83 = *(FLOAT32 *)FieldValue;
+ case 83: //partInitRot
+ DATA.value.partInitRot = *(FLOAT32 *)FieldValue;
break;
- case 84: //data DATA ,, Struct
- DATA.Load();
- DATA->value84 = *(FLOAT32 *)FieldValue;
+ case 84: //partInitRotDelta
+ DATA.value.partInitRotDelta = *(FLOAT32 *)FieldValue;
break;
- case 85: //data DATA ,, Struct
- DATA.Load();
- DATA->value85 = *(FLOAT32 *)FieldValue;
+ case 85: //partRotSpd
+ DATA.value.partRotSpd = *(FLOAT32 *)FieldValue;
break;
- case 86: //data DATA ,, Struct
- DATA.Load();
- DATA->value86 = *(FLOAT32 *)FieldValue;
+ case 86: //partRotDelta
+ DATA.value.partRotDelta = *(FLOAT32 *)FieldValue;
break;
- case 87: //data DATA ,, Struct
- DATA.Load();
- DATA->value87 = *(FORMID *)FieldValue;
+ case 87: //addon
+ DATA.value.addon = *(FORMID *)FieldValue;
return true;
- case 88: //data DATA ,, Struct
- DATA.Load();
- DATA->value88 = *(FLOAT32 *)FieldValue;
+ case 88: //holesSTime
+ DATA.value.holesSTime = *(FLOAT32 *)FieldValue;
break;
- case 89: //data DATA ,, Struct
- DATA.Load();
- DATA->value89 = *(FLOAT32 *)FieldValue;
+ case 89: //holesETime
+ DATA.value.holesETime = *(FLOAT32 *)FieldValue;
break;
- case 90: //data DATA ,, Struct
- DATA.Load();
- DATA->value90 = *(FLOAT32 *)FieldValue;
+ case 90: //holesSValue
+ DATA.value.holesSValue = *(FLOAT32 *)FieldValue;
break;
- case 91: //data DATA ,, Struct
- DATA.Load();
- DATA->value91 = *(FLOAT32 *)FieldValue;
+ case 91: //holesEValue
+ DATA.value.holesEValue = *(FLOAT32 *)FieldValue;
break;
- case 92: //data DATA ,, Struct
- DATA.Load();
- DATA->value92 = *(FLOAT32 *)FieldValue;
+ case 92: //edgeWidth
+ DATA.value.edgeWidth = *(FLOAT32 *)FieldValue;
break;
- case 93: //data DATA ,, Struct
- DATA.Load();
- DATA->value93 = *(UINT8 *)FieldValue;
+ case 93: //edge.red
+ DATA.value.edge.red = *(UINT8 *)FieldValue;
break;
- case 94: //data DATA ,, Struct
- DATA.Load();
- DATA->value94 = *(UINT8 *)FieldValue;
+ case 94: //edge.green
+ DATA.value.edge.green = *(UINT8 *)FieldValue;
break;
- case 95: //data DATA ,, Struct
- DATA.Load();
- DATA->value95 = *(UINT8 *)FieldValue;
+ case 95: //edge.blue
+ DATA.value.edge.blue = *(UINT8 *)FieldValue;
break;
- case 96: //data_p DATA ,, Struct
+ case 96: //unused7
if(ArraySize != 1)
break;
- DATA.Load();
- DATA->value96[0] = ((UINT8ARRAY)FieldValue)[0];
+ DATA.value.edge.unused1 = ((UINT8ARRAY)FieldValue)[0];
break;
- case 97: //data DATA ,, Struct
- DATA.Load();
- DATA->value97 = *(FLOAT32 *)FieldValue;
+ case 97: //explWindSpd
+ DATA.value.explWindSpd = *(FLOAT32 *)FieldValue;
break;
- case 98: //data DATA ,, Struct
- DATA.Load();
- DATA->value98 = *(UINT32 *)FieldValue;
+ case 98: //textCountU
+ DATA.value.textCountU = *(UINT32 *)FieldValue;
break;
- case 99: //data DATA ,, Struct
- DATA.Load();
- DATA->value99 = *(UINT32 *)FieldValue;
+ case 99: //textCountV
+ DATA.value.textCountV = *(UINT32 *)FieldValue;
break;
- case 100: //data DATA ,, Struct
- DATA.Load();
- DATA->value100 = *(FLOAT32 *)FieldValue;
+ case 100: //addonFITime
+ DATA.value.addonFITime = *(FLOAT32 *)FieldValue;
break;
- case 101: //data DATA ,, Struct
- DATA.Load();
- DATA->value101 = *(FLOAT32 *)FieldValue;
+ case 101: //addonFOTime
+ DATA.value.addonFOTime = *(FLOAT32 *)FieldValue;
break;
- case 102: //data DATA ,, Struct
- DATA.Load();
- DATA->value102 = *(FLOAT32 *)FieldValue;
+ case 102: //addonScaleStart
+ DATA.value.addonScaleStart = *(FLOAT32 *)FieldValue;
break;
- case 103: //data DATA ,, Struct
- DATA.Load();
- DATA->value103 = *(FLOAT32 *)FieldValue;
+ case 103: //addonScaleEnd
+ DATA.value.addonScaleEnd = *(FLOAT32 *)FieldValue;
break;
- case 104: //data DATA ,, Struct
- DATA.Load();
- DATA->value104 = *(FLOAT32 *)FieldValue;
+ case 104: //addonScaleInTime
+ DATA.value.addonScaleInTime = *(FLOAT32 *)FieldValue;
break;
- case 105: //data DATA ,, Struct
- DATA.Load();
- DATA->value105 = *(FLOAT32 *)FieldValue;
+ case 105: //addonScaleOutTime
+ DATA.value.addonScaleOutTime = *(FLOAT32 *)FieldValue;
break;
default:
break;
@@ -1000,6 +904,7 @@ bool EFSHRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
void EFSHRecord::DeleteField(FIELD_IDENTIFIERS)
{
+ EFSHDATA defaultDATA;
switch(FieldID)
{
case 1: //flags1
@@ -1018,302 +923,304 @@ void EFSHRecord::DeleteField(FIELD_IDENTIFIERS)
versionControl2[0] = 0;
versionControl2[1] = 0;
return;
- case 7: //icon Fill Texture
+ case 7: //fillPath
ICON.Unload();
return;
- case 8: //ico2 Particle Shader Texture
+ case 8: //particlePath
ICO2.Unload();
return;
- case 9: //nam7 Holes Texture
+ case 9: //holesPath
NAM7.Unload();
return;
- case 10: //data DATA ,, Struct
- DATA.Unload();
+ case 10: //flags
+ SetFlagMask(defaultDATA.flags);
return;
- case 11: //data_p DATA ,, Struct
- DATA.Unload();
+ case 11: //unused1
+ DATA.value.unused1[0] = defaultDATA.unused1[0];
+ DATA.value.unused1[1] = defaultDATA.unused1[1];
+ DATA.value.unused1[2] = defaultDATA.unused1[2];
return;
- case 12: //data DATA ,, Struct
- DATA.Unload();
+ case 12: //memSBlend
+ DATA.value.memSBlend = defaultDATA.memSBlend;
return;
- case 13: //data DATA ,, Struct
- DATA.Unload();
+ case 13: //memBlendOp
+ DATA.value.memBlendOp = defaultDATA.memBlendOp;
return;
- case 14: //data DATA ,, Struct
- DATA.Unload();
+ case 14: //memZFunc
+ DATA.value.memZFunc = defaultDATA.memZFunc;
return;
- case 15: //data DATA ,, Struct
- DATA.Unload();
+ case 15: //fill.red
+ DATA.value.fill.red = defaultDATA.fill.red;
return;
- case 16: //data DATA ,, Struct
- DATA.Unload();
+ case 16: //fill.green
+ DATA.value.fill.green = defaultDATA.fill.green;
return;
- case 17: //data DATA ,, Struct
- DATA.Unload();
+ case 17: //fill.blue
+ DATA.value.fill.blue = defaultDATA.fill.blue;
return;
- case 18: //data_p DATA ,, Struct
- DATA.Unload();
+ case 18: //unused2
+ DATA.value.fill.unused1 = defaultDATA.fill.unused1;
return;
- case 19: //data DATA ,, Struct
- DATA.Unload();
+ case 19: //fillAIn
+ DATA.value.fillAIn = defaultDATA.fillAIn;
return;
- case 20: //data DATA ,, Struct
- DATA.Unload();
+ case 20: //fillAFull
+ DATA.value.fillAFull = defaultDATA.fillAFull;
return;
- case 21: //data DATA ,, Struct
- DATA.Unload();
+ case 21: //fillAOut
+ DATA.value.fillAOut = defaultDATA.fillAOut;
return;
- case 22: //data DATA ,, Struct
- DATA.Unload();
+ case 22: //fillAPRatio
+ DATA.value.fillAPRatio = defaultDATA.fillAPRatio;
return;
- case 23: //data DATA ,, Struct
- DATA.Unload();
+ case 23: //fillAAmp
+ DATA.value.fillAAmp = defaultDATA.fillAAmp;
return;
- case 24: //data DATA ,, Struct
- DATA.Unload();
+ case 24: //fillAFreq
+ DATA.value.fillAFreq = defaultDATA.fillAFreq;
return;
- case 25: //data DATA ,, Struct
- DATA.Unload();
+ case 25: //fillAnimSpdU
+ DATA.value.fillAnimSpdU = defaultDATA.fillAnimSpdU;
return;
- case 26: //data DATA ,, Struct
- DATA.Unload();
+ case 26: //fillAnimSpdV
+ DATA.value.fillAnimSpdV = defaultDATA.fillAnimSpdV;
return;
- case 27: //data DATA ,, Struct
- DATA.Unload();
+ case 27: //edgeEffOff
+ DATA.value.edgeEffOff = defaultDATA.edgeEffOff;
return;
- case 28: //data DATA ,, Struct
- DATA.Unload();
+ case 28: //edgeEff.red
+ DATA.value.edgeEff.red = defaultDATA.edgeEff.red;
return;
- case 29: //data DATA ,, Struct
- DATA.Unload();
+ case 29: //edgeEff.green
+ DATA.value.edgeEff.green = defaultDATA.edgeEff.green;
return;
- case 30: //data DATA ,, Struct
- DATA.Unload();
+ case 30: //edgeEff.blue
+ DATA.value.edgeEff.blue = defaultDATA.edgeEff.blue;
return;
- case 31: //data_p DATA ,, Struct
- DATA.Unload();
+ case 31: //unused3
+ DATA.value.edgeEff.unused1 = defaultDATA.edgeEff.unused1;
return;
- case 32: //data DATA ,, Struct
- DATA.Unload();
+ case 32: //edgeEffAIn
+ DATA.value.edgeEffAIn = defaultDATA.edgeEffAIn;
return;
- case 33: //data DATA ,, Struct
- DATA.Unload();
+ case 33: //edgeEffAFull
+ DATA.value.edgeEffAFull = defaultDATA.edgeEffAFull;
return;
- case 34: //data DATA ,, Struct
- DATA.Unload();
+ case 34: //edgeEffAOut
+ DATA.value.edgeEffAOut = defaultDATA.edgeEffAOut;
return;
- case 35: //data DATA ,, Struct
- DATA.Unload();
+ case 35: //edgeEffAPRatio
+ DATA.value.edgeEffAPRatio = defaultDATA.edgeEffAPRatio;
return;
- case 36: //data DATA ,, Struct
- DATA.Unload();
+ case 36: //edgeEffAAmp
+ DATA.value.edgeEffAAmp = defaultDATA.edgeEffAAmp;
return;
- case 37: //data DATA ,, Struct
- DATA.Unload();
+ case 37: //edgeEffAFreq
+ DATA.value.edgeEffAFreq = defaultDATA.edgeEffAFreq;
return;
- case 38: //data DATA ,, Struct
- DATA.Unload();
+ case 38: //fillAFRatio
+ DATA.value.fillAFRatio = defaultDATA.fillAFRatio;
return;
- case 39: //data DATA ,, Struct
- DATA.Unload();
+ case 39: //edgeEffAFRatio
+ DATA.value.edgeEffAFRatio = defaultDATA.edgeEffAFRatio;
return;
- case 40: //data DATA ,, Struct
- DATA.Unload();
+ case 40: //memDBlend
+ DATA.value.memDBlend = defaultDATA.memDBlend;
return;
- case 41: //data DATA ,, Struct
- DATA.Unload();
+ case 41: //partSBlend
+ DATA.value.partSBlend = defaultDATA.partSBlend;
return;
- case 42: //data DATA ,, Struct
- DATA.Unload();
+ case 42: //partBlendOp
+ DATA.value.partBlendOp = defaultDATA.partBlendOp;
return;
- case 43: //data DATA ,, Struct
- DATA.Unload();
+ case 43: //partZFunc
+ DATA.value.partZFunc = defaultDATA.partZFunc;
return;
- case 44: //data DATA ,, Struct
- DATA.Unload();
+ case 44: //partDBlend
+ DATA.value.partDBlend = defaultDATA.partDBlend;
return;
- case 45: //data DATA ,, Struct
- DATA.Unload();
+ case 45: //partBUp
+ DATA.value.partBUp = defaultDATA.partBUp;
return;
- case 46: //data DATA ,, Struct
- DATA.Unload();
+ case 46: //partBFull
+ DATA.value.partBFull = defaultDATA.partBFull;
return;
- case 47: //data DATA ,, Struct
- DATA.Unload();
+ case 47: //partBDown
+ DATA.value.partBDown = defaultDATA.partBDown;
return;
- case 48: //data DATA ,, Struct
- DATA.Unload();
+ case 48: //partBFRatio
+ DATA.value.partBFRatio = defaultDATA.partBFRatio;
return;
- case 49: //data DATA ,, Struct
- DATA.Unload();
+ case 49: //partBPRatio
+ DATA.value.partBPRatio = defaultDATA.partBPRatio;
return;
- case 50: //data DATA ,, Struct
- DATA.Unload();
+ case 50: //partLTime
+ DATA.value.partLTime = defaultDATA.partLTime;
return;
- case 51: //data DATA ,, Struct
- DATA.Unload();
+ case 51: //partLDelta
+ DATA.value.partLDelta = defaultDATA.partLDelta;
return;
- case 52: //data DATA ,, Struct
- DATA.Unload();
+ case 52: //partNSpd
+ DATA.value.partNSpd = defaultDATA.partNSpd;
return;
- case 53: //data DATA ,, Struct
- DATA.Unload();
+ case 53: //partNAcc
+ DATA.value.partNAcc = defaultDATA.partNAcc;
return;
- case 54: //data DATA ,, Struct
- DATA.Unload();
+ case 54: //partVel1
+ DATA.value.partVel1 = defaultDATA.partVel1;
return;
- case 55: //data DATA ,, Struct
- DATA.Unload();
+ case 55: //partVel2
+ DATA.value.partVel2 = defaultDATA.partVel2;
return;
- case 56: //data DATA ,, Struct
- DATA.Unload();
+ case 56: //partVel3
+ DATA.value.partVel3 = defaultDATA.partVel3;
return;
- case 57: //data DATA ,, Struct
- DATA.Unload();
+ case 57: //partAcc1
+ DATA.value.partAcc1 = defaultDATA.partAcc1;
return;
- case 58: //data DATA ,, Struct
- DATA.Unload();
+ case 58: //partAcc2
+ DATA.value.partAcc2 = defaultDATA.partAcc2;
return;
- case 59: //data DATA ,, Struct
- DATA.Unload();
+ case 59: //partAcc3
+ DATA.value.partAcc3 = defaultDATA.partAcc3;
return;
- case 60: //data DATA ,, Struct
- DATA.Unload();
+ case 60: //partKey1
+ DATA.value.partKey1 = defaultDATA.partKey1;
return;
- case 61: //data DATA ,, Struct
- DATA.Unload();
+ case 61: //partKey2
+ DATA.value.partKey2 = defaultDATA.partKey2;
return;
- case 62: //data DATA ,, Struct
- DATA.Unload();
+ case 62: //partKey1Time
+ DATA.value.partKey1Time = defaultDATA.partKey1Time;
return;
- case 63: //data DATA ,, Struct
- DATA.Unload();
+ case 63: //partKey2Time
+ DATA.value.partKey2Time = defaultDATA.partKey2Time;
return;
- case 64: //data DATA ,, Struct
- DATA.Unload();
+ case 64: //key1.red
+ DATA.value.key1.red = defaultDATA.key1.red;
return;
- case 65: //data DATA ,, Struct
- DATA.Unload();
+ case 65: //key1.green
+ DATA.value.key1.green = defaultDATA.key1.green;
return;
- case 66: //data DATA ,, Struct
- DATA.Unload();
+ case 66: //key1.blue
+ DATA.value.key1.blue = defaultDATA.key1.blue;
return;
- case 67: //data_p DATA ,, Struct
- DATA.Unload();
+ case 67: //unused4
+ DATA.value.key1.unused1 = defaultDATA.key1.unused1;
return;
- case 68: //data DATA ,, Struct
- DATA.Unload();
+ case 68: //key2.red
+ DATA.value.key2.red = defaultDATA.key2.red;
return;
- case 69: //data DATA ,, Struct
- DATA.Unload();
+ case 69: //key2.green
+ DATA.value.key2.green = defaultDATA.key2.green;
return;
- case 70: //data DATA ,, Struct
- DATA.Unload();
+ case 70: //key2.blue
+ DATA.value.key2.blue = defaultDATA.key2.blue;
return;
- case 71: //data_p DATA ,, Struct
- DATA.Unload();
+ case 71: //unused5
+ DATA.value.key2.unused1 = defaultDATA.key2.unused1;
return;
- case 72: //data DATA ,, Struct
- DATA.Unload();
+ case 72: //key3.red
+ DATA.value.key3.red = defaultDATA.key3.red;
return;
- case 73: //data DATA ,, Struct
- DATA.Unload();
+ case 73: //key3.green
+ DATA.value.key3.green = defaultDATA.key3.green;
return;
- case 74: //data DATA ,, Struct
- DATA.Unload();
+ case 74: //key3.blue
+ DATA.value.key3.blue = defaultDATA.key3.blue;
return;
- case 75: //data_p DATA ,, Struct
- DATA.Unload();
+ case 75: //unused6
+ DATA.value.key3.unused1 = defaultDATA.key3.unused1;
return;
- case 76: //data DATA ,, Struct
- DATA.Unload();
+ case 76: //key1A
+ DATA.value.key1A = defaultDATA.key1A;
return;
- case 77: //data DATA ,, Struct
- DATA.Unload();
+ case 77: //key2A
+ DATA.value.key2A = defaultDATA.key2A;
return;
- case 78: //data DATA ,, Struct
- DATA.Unload();
+ case 78: //key3A
+ DATA.value.key3A = defaultDATA.key3A;
return;
- case 79: //data DATA ,, Struct
- DATA.Unload();
+ case 79: //key1Time
+ DATA.value.key1Time = defaultDATA.key1Time;
return;
- case 80: //data DATA ,, Struct
- DATA.Unload();
+ case 80: //key2Time
+ DATA.value.key2Time = defaultDATA.key2Time;
return;
- case 81: //data DATA ,, Struct
- DATA.Unload();
+ case 81: //key3Time
+ DATA.value.key3Time = defaultDATA.key3Time;
return;
- case 82: //data DATA ,, Struct
- DATA.Unload();
+ case 82: //partInitSpd
+ DATA.value.partInitSpd = defaultDATA.partInitSpd;
return;
- case 83: //data DATA ,, Struct
- DATA.Unload();
+ case 83: //partInitRot
+ DATA.value.partInitRot = defaultDATA.partInitRot;
return;
- case 84: //data DATA ,, Struct
- DATA.Unload();
+ case 84: //partInitRotDelta
+ DATA.value.partInitRotDelta = defaultDATA.partInitRotDelta;
return;
- case 85: //data DATA ,, Struct
- DATA.Unload();
+ case 85: //partRotSpd
+ DATA.value.partRotSpd = defaultDATA.partRotSpd;
return;
- case 86: //data DATA ,, Struct
- DATA.Unload();
+ case 86: //partRotDelta
+ DATA.value.partRotDelta = defaultDATA.partRotDelta;
return;
- case 87: //data DATA ,, Struct
- DATA.Unload();
+ case 87: //addon
+ DATA.value.addon = defaultDATA.addon;
return;
- case 88: //data DATA ,, Struct
- DATA.Unload();
+ case 88: //holesSTime
+ DATA.value.holesSTime = defaultDATA.holesSTime;
return;
- case 89: //data DATA ,, Struct
- DATA.Unload();
+ case 89: //holesETime
+ DATA.value.holesETime = defaultDATA.holesETime;
return;
- case 90: //data DATA ,, Struct
- DATA.Unload();
+ case 90: //holesSValue
+ DATA.value.holesSValue = defaultDATA.holesSValue;
return;
- case 91: //data DATA ,, Struct
- DATA.Unload();
+ case 91: //holesEValue
+ DATA.value.holesEValue = defaultDATA.holesEValue;
return;
- case 92: //data DATA ,, Struct
- DATA.Unload();
+ case 92: //edgeWidth
+ DATA.value.edgeWidth = defaultDATA.edgeWidth;
return;
- case 93: //data DATA ,, Struct
- DATA.Unload();
+ case 93: //edge.red
+ DATA.value.edge.red = defaultDATA.edge.red;
return;
- case 94: //data DATA ,, Struct
- DATA.Unload();
+ case 94: //edge.green
+ DATA.value.edge.green = defaultDATA.edge.green;
return;
- case 95: //data DATA ,, Struct
- DATA.Unload();
+ case 95: //edge.blue
+ DATA.value.edge.blue = defaultDATA.edge.blue;
return;
- case 96: //data_p DATA ,, Struct
- DATA.Unload();
+ case 96: //unused7
+ DATA.value.edge.unused1 = defaultDATA.edge.unused1;
return;
- case 97: //data DATA ,, Struct
- DATA.Unload();
+ case 97: //explWindSpd
+ DATA.value.explWindSpd = defaultDATA.explWindSpd;
return;
- case 98: //data DATA ,, Struct
- DATA.Unload();
+ case 98: //textCountU
+ DATA.value.textCountU = defaultDATA.textCountU;
return;
- case 99: //data DATA ,, Struct
- DATA.Unload();
+ case 99: //textCountV
+ DATA.value.textCountV = defaultDATA.textCountV;
return;
- case 100: //data DATA ,, Struct
- DATA.Unload();
+ case 100: //addonFITime
+ DATA.value.addonFITime = defaultDATA.addonFITime;
return;
- case 101: //data DATA ,, Struct
- DATA.Unload();
+ case 101: //addonFOTime
+ DATA.value.addonFOTime = defaultDATA.addonFOTime;
return;
- case 102: //data DATA ,, Struct
- DATA.Unload();
+ case 102: //addonScaleStart
+ DATA.value.addonScaleStart = defaultDATA.addonScaleStart;
return;
- case 103: //data DATA ,, Struct
- DATA.Unload();
+ case 103: //addonScaleEnd
+ DATA.value.addonScaleEnd = defaultDATA.addonScaleEnd;
return;
- case 104: //data DATA ,, Struct
- DATA.Unload();
+ case 104: //addonScaleInTime
+ DATA.value.addonScaleInTime = defaultDATA.addonScaleInTime;
return;
- case 105: //data DATA ,, Struct
- DATA.Unload();
+ case 105: //addonScaleOutTime
+ DATA.value.addonScaleOutTime = defaultDATA.addonScaleOutTime;
return;
default:
return;
diff --git a/CBash/FalloutNewVegas/Records/API/EXPLRecordAPI.cpp b/CBash/FalloutNewVegas/Records/API/EXPLRecordAPI.cpp
index 7a9a2af..25598a7 100644
--- a/CBash/FalloutNewVegas/Records/API/EXPLRecordAPI.cpp
+++ b/CBash/FalloutNewVegas/Records/API/EXPLRecordAPI.cpp
@@ -60,19 +60,25 @@ UINT32 EXPLRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 7: //boundX
+ case 7: //boundX1
return SINT16_FIELD;
- case 8: //boundY
+ case 8: //boundY1
return SINT16_FIELD;
- case 9: //boundZ
+ case 9: //boundZ1
return SINT16_FIELD;
- case 10: //full
+ case 10: //boundX2
+ return SINT16_FIELD;
+ case 11: //boundY2
+ return SINT16_FIELD;
+ case 12: //boundZ2
+ return SINT16_FIELD;
+ case 13: //full
return STRING_FIELD;
- case 11: //modPath
+ case 14: //modPath
return ISTRING_FIELD;
- case 12: //modb
+ case 15: //modb
return FLOAT32_FIELD;
- case 13: //modt_p
+ case 16: //modt_p
switch(WhichAttribute)
{
case 0: //fieldType
@@ -83,7 +89,7 @@ UINT32 EXPLRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 14: //altTextures
+ case 17: //altTextures
if(!MODL.IsLoaded())
return UNKNOWN_FIELD;
@@ -94,13 +100,13 @@ UINT32 EXPLRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
case 0: //fieldType
return LIST_FIELD;
case 1: //fieldSize
- return MODL->Textures.size();
+ return MODL->Textures.MODS.size();
default:
return UNKNOWN_FIELD;
}
}
- if(ListIndex >= MODL->Textures.size())
+ if(ListIndex >= MODL->Textures.MODS.size())
return UNKNOWN_FIELD;
switch(ListFieldID)
@@ -114,40 +120,40 @@ UINT32 EXPLRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
default:
return UNKNOWN_FIELD;
}
-
- case 17: //modelFlags
- return UINT8_FIELD;
- case 18: //effect
+ return UNKNOWN_FIELD;
+ case 18: //modelFlags
+ return UINT8_FLAG_FIELD;
+ case 19: //effect
return FORMID_FIELD;
- case 19: //mnam Image Space Modifier
+ case 20: //imageSpace
return FORMID_FIELD;
- case 20: //data DATA ,, Struct
+ case 21: //force
return FLOAT32_FIELD;
- case 21: //data DATA ,, Struct
+ case 22: //damage
return FLOAT32_FIELD;
- case 22: //data DATA ,, Struct
+ case 23: //radius
return FLOAT32_FIELD;
- case 23: //data DATA ,, Struct
+ case 24: //light
return FORMID_FIELD;
- case 24: //data DATA ,, Struct
+ case 25: //sound1
return FORMID_FIELD;
- case 25: //data DATA ,, Struct
- return UINT32_FIELD;
- case 26: //data DATA ,, Struct
+ case 26: //flags
+ return UINT32_FLAG_FIELD;
+ case 27: //ISRadius
return FLOAT32_FIELD;
- case 27: //data DATA ,, Struct
+ case 28: //impactDataSet
return FORMID_FIELD;
- case 28: //data DATA ,, Struct
+ case 29: //sound2
return FORMID_FIELD;
- case 29: //data DATA ,, Struct
+ case 30: //radLevel
return FLOAT32_FIELD;
- case 30: //data DATA ,, Struct
+ case 31: //radTime
return FLOAT32_FIELD;
- case 31: //data DATA ,, Struct
+ case 32: //radRadius
return FLOAT32_FIELD;
- case 32: //data DATA ,, Struct
+ case 33: //soundLevel
return UINT32_FIELD;
- case 33: //inam Placed Impact Object
+ case 34: //impact
return FORMID_FIELD;
default:
return UNKNOWN_FIELD;
@@ -173,61 +179,80 @@ void * EXPLRecord::GetField(FIELD_IDENTIFIERS, void **FieldValues)
case 6: //versionControl2
*FieldValues = &versionControl2[0];
return NULL;
- case 7: //boundX
- return OBND.IsLoaded() ? &OBND->x : NULL;
- case 8: //boundY
- return OBND.IsLoaded() ? &OBND->y : NULL;
- case 9: //boundZ
- return OBND.IsLoaded() ? &OBND->z : NULL;
- case 10: //full
+ case 7: //boundX1
+ return &OBND.value.x1;
+ case 8: //boundY1
+ return &OBND.value.y1;
+ case 9: //boundZ1
+ return &OBND.value.z1;
+ case 10: //boundX2
+ return &OBND.value.x2;
+ case 11: //boundY2
+ return &OBND.value.y2;
+ case 12: //boundZ2
+ return &OBND.value.z2;
+ case 13: //full
return FULL.value;
- case 11: //modPath
+ case 14: //modPath
return MODL.IsLoaded() ? MODL->MODL.value : NULL;
- case 12: //modb
+ case 15: //modb
return MODL.IsLoaded() ? &MODL->MODB.value : NULL;
- case 13: //modt_p
+ case 16: //modt_p
*FieldValues = MODL.IsLoaded() ? MODL->MODT.value : NULL;
return NULL;
- case 14: //mods Alternate Textures
- return MODL.IsLoaded() ? MODL->MODS.value : NULL;
- case 15: //mods Alternate Textures
- return MODL.IsLoaded() ? &MODL->MODS->value15 : NULL;
- case 16: //mods Alternate Textures
- return MODL.IsLoaded() ? &MODL->MODS->value16 : NULL;
- case 17: //modelFlags
- return MODL.IsLoaded() ? &MODL->MODD->value17 : NULL;
- case 18: //effect
- return EITM.IsLoaded() ? &EITM->value18 : NULL;
- case 19: //mnam Image Space Modifier
- return MNAM.IsLoaded() ? &MNAM->value19 : NULL;
- case 20: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value20 : NULL;
- case 21: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value21 : NULL;
- case 22: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value22 : NULL;
- case 23: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value23 : NULL;
- case 24: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value24 : NULL;
- case 25: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value25 : NULL;
- case 26: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value26 : NULL;
- case 27: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value27 : NULL;
- case 28: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value28 : NULL;
- case 29: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value29 : NULL;
- case 30: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value30 : NULL;
- case 31: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value31 : NULL;
- case 32: //data DATA ,, Struct
- return DATA.IsLoaded() ? &DATA->value32 : NULL;
- case 33: //inam Placed Impact Object
- return INAM.IsLoaded() ? &INAM->value33 : NULL;
+ case 17: //altTextures
+ if(!MODL.IsLoaded())
+ return NULL;
+
+ if(ListIndex >= MODL->Textures.MODS.size())
+ return NULL;
+
+ switch(ListFieldID)
+ {
+ case 1: //name
+ return MODL->Textures.MODS[ListIndex]->name;
+ case 2: //texture
+ return &MODL->Textures.MODS[ListIndex]->texture;
+ case 3: //index
+ return &MODL->Textures.MODS[ListIndex]->index;
+ default:
+ return NULL;
+ }
+ return NULL;
+ case 18: //modelFlags
+ return MODL.IsLoaded() ? &MODL->MODD.value : NULL;
+ case 19: //effect
+ return &EITM.value;
+ case 20: //imageSpace
+ return &MNAM.value;
+ case 21: //force
+ return &DATA.value.force;
+ case 22: //damage
+ return &DATA.value.damage;
+ case 23: //radius
+ return &DATA.value.radius;
+ case 24: //light
+ return &DATA.value.light;
+ case 25: //sound1
+ return &DATA.value.sound1;
+ case 26: //flags
+ return &DATA.value.flags;
+ case 27: //ISRadius
+ return &DATA.value.ISRadius;
+ case 28: //impactDataSet
+ return &DATA.value.impactDataSet;
+ case 29: //sound2
+ return &DATA.value.sound2;
+ case 30: //radLevel
+ return &DATA.value.radLevel;
+ case 31: //radTime
+ return &DATA.value.radTime;
+ case 32: //radRadius
+ return &DATA.value.radRadius;
+ case 33: //soundLevel
+ return &DATA.value.soundLevel;
+ case 34: //impact
+ return &INAM.value;
default:
return NULL;
}
@@ -261,115 +286,123 @@ bool EXPLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
versionControl2[0] = ((UINT8ARRAY)FieldValue)[0];
versionControl2[1] = ((UINT8ARRAY)FieldValue)[1];
break;
- case 7: //boundX
- OBND.Load();
- OBND->x = *(SINT16 *)FieldValue;
+ case 7: //boundX1
+ OBND.value.x1 = *(SINT16 *)FieldValue;
+ break;
+ case 8: //boundY1
+ OBND.value.y1 = *(SINT16 *)FieldValue;
+ break;
+ case 9: //boundZ1
+ OBND.value.z1 = *(SINT16 *)FieldValue;
+ break;
+ case 10: //boundX2
+ OBND.value.x2 = *(SINT16 *)FieldValue;
break;
- case 8: //boundY
- OBND.Load();
- OBND->y = *(SINT16 *)FieldValue;
+ case 11: //boundY2
+ OBND.value.y2 = *(SINT16 *)FieldValue;
break;
- case 9: //boundZ
- OBND.Load();
- OBND->z = *(SINT16 *)FieldValue;
+ case 12: //boundZ2
+ OBND.value.z2 = *(SINT16 *)FieldValue;
break;
- case 10: //full
+ case 13: //full
FULL.Copy((STRING)FieldValue);
break;
- case 11: //modPath
+ case 14: //modPath
MODL.Load();
MODL->MODL.Copy((STRING)FieldValue);
break;
- case 12: //modb
+ case 15: //modb
MODL.Load();
MODL->MODB.value = *(FLOAT32 *)FieldValue;
break;
- case 13: //modt_p
+ case 16: //modt_p
MODL.Load();
MODL->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize);
break;
- case 14: //mods Alternate Textures
+ case 17: //altTextures
MODL.Load();
- MODL->MODS.Copy((STRING)FieldValue);
- break;
- case 15: //mods Alternate Textures
- MODL.Load();
- MODL->MODS.Load();
- MODL->MODS->value15 = *(FORMID *)FieldValue;
- return true;
- case 16: //mods Alternate Textures
- MODL.Load();
- MODL->MODS.Load();
- MODL->MODS->value16 = *(SINT32 *)FieldValue;
+ if(ListFieldID == 0) //altTexturesSize
+ {
+ MODL->Textures.resize(ArraySize);
+ return false;
+ }
+
+ if(ListIndex >= MODL->Textures.MODS.size())
+ break;
+
+ switch(ListFieldID)
+ {
+ case 1: //name
+ delete []MODL->Textures.MODS[ListIndex]->name;
+ MODL->Textures.MODS[ListIndex]->name = NULL;
+ if(FieldValue != NULL)
+ {
+ ArraySize = (UINT32)strlen((STRING)FieldValue) + 1;
+ MODL->Textures.MODS[ListIndex]->name = new char[ArraySize];
+ strcpy_s(MODL->Textures.MODS[ListIndex]->name, ArraySize, (STRING)FieldValue);
+ }
+ break;
+ case 2: //texture
+ MODL->Textures.MODS[ListIndex]->texture = *(FORMID *)FieldValue;
+ return true;
+ case 3: //index
+ MODL->Textures.MODS[ListIndex]->index = *(SINT32 *)FieldValue;
+ break;
+ default:
+ break;
+ }
break;
- case 17: //modelFlags
+ case 18: //modelFlags
MODL.Load();
- MODL->MODD.Load();
- MODL->MODD->value17 = *(UINT8 *)FieldValue;
+ MODL->SetFlagMask(*(UINT8 *)FieldValue);
break;
- case 18: //effect
- EITM.Load();
- EITM->value18 = *(FORMID *)FieldValue;
+ case 19: //effect
+ EITM.value = *(FORMID *)FieldValue;
return true;
- case 19: //mnam Image Space Modifier
- MNAM.Load();
- MNAM->value19 = *(FORMID *)FieldValue;
+ case 20: //imageSpace
+ MNAM.value = *(FORMID *)FieldValue;
return true;
- case 20: //data DATA ,, Struct
- DATA.Load();
- DATA->value20 = *(FLOAT32 *)FieldValue;
+ case 21: //force
+ DATA.value.force = *(FLOAT32 *)FieldValue;
break;
- case 21: //data DATA ,, Struct
- DATA.Load();
- DATA->value21 = *(FLOAT32 *)FieldValue;
+ case 22: //damage
+ DATA.value.damage = *(FLOAT32 *)FieldValue;
break;
- case 22: //data DATA ,, Struct
- DATA.Load();
- DATA->value22 = *(FLOAT32 *)FieldValue;
+ case 23: //radius
+ DATA.value.radius = *(FLOAT32 *)FieldValue;
break;
- case 23: //data DATA ,, Struct
- DATA.Load();
- DATA->value23 = *(FORMID *)FieldValue;
+ case 24: //light
+ DATA.value.light = *(FORMID *)FieldValue;
return true;
- case 24: //data DATA ,, Struct
- DATA.Load();
- DATA->value24 = *(FORMID *)FieldValue;
+ case 25: //sound1
+ DATA.value.sound1 = *(FORMID *)FieldValue;
return true;
- case 25: //data DATA ,, Struct
- DATA.Load();
- DATA->value25 = *(UINT32 *)FieldValue;
+ case 26: //flags
+ SetFlagMask(*(UINT32 *)FieldValue);
break;
- case 26: //data DATA ,, Struct
- DATA.Load();
- DATA->value26 = *(FLOAT32 *)FieldValue;
+ case 27: //ISRadius
+ DATA.value.ISRadius = *(FLOAT32 *)FieldValue;
break;
- case 27: //data DATA ,, Struct
- DATA.Load();
- DATA->value27 = *(FORMID *)FieldValue;
+ case 28: //impactDataSet
+ DATA.value.impactDataSet = *(FORMID *)FieldValue;
return true;
- case 28: //data DATA ,, Struct
- DATA.Load();
- DATA->value28 = *(FORMID *)FieldValue;
+ case 29: //sound2
+ DATA.value.sound2 = *(FORMID *)FieldValue;
return true;
- case 29: //data DATA ,, Struct
- DATA.Load();
- DATA->value29 = *(FLOAT32 *)FieldValue;
+ case 30: //radLevel
+ DATA.value.radLevel = *(FLOAT32 *)FieldValue;
break;
- case 30: //data DATA ,, Struct
- DATA.Load();
- DATA->value30 = *(FLOAT32 *)FieldValue;
+ case 31: //radTime
+ DATA.value.radTime = *(FLOAT32 *)FieldValue;
break;
- case 31: //data DATA ,, Struct
- DATA.Load();
- DATA->value31 = *(FLOAT32 *)FieldValue;
+ case 32: //radRadius
+ DATA.value.radRadius = *(FLOAT32 *)FieldValue;
break;
- case 32: //data DATA ,, Struct
- DATA.Load();
- DATA->value32 = *(UINT32 *)FieldValue;
+ case 33: //soundLevel
+ DATA.value.soundLevel = *(UINT32 *)FieldValue;
break;
- case 33: //inam Placed Impact Object
- INAM.Load();
- INAM->value33 = *(FORMID *)FieldValue;
+ case 34: //impact
+ INAM.value = *(FORMID *)FieldValue;
return true;
default:
break;
@@ -379,6 +412,9 @@ bool EXPLRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
void EXPLRecord::DeleteField(FIELD_IDENTIFIERS)
{
+ GENOBND defaultOBND;
+ FNVMODS defaultMODS;
+ EXPLDATA defaultDATA;
switch(FieldID)
{
case 1: //flags1
@@ -397,95 +433,118 @@ void EXPLRecord::DeleteField(FIELD_IDENTIFIERS)
versionControl2[0] = 0;
versionControl2[1] = 0;
return;
- case 7: //boundX
- if(OBND.IsLoaded())
- OBND->x = defaultOBND.x;
+ case 7: //boundX1
+ OBND.value.x1 = defaultOBND.x1;
+ return;
+ case 8: //boundY1
+ OBND.value.y1 = defaultOBND.y1;
+ return;
+ case 9: //boundZ1
+ OBND.value.z1 = defaultOBND.z1;
+ return;
+ case 10: //boundX2
+ OBND.value.x2 = defaultOBND.x2;
return;
- case 8: //boundY
- if(OBND.IsLoaded())
- OBND->y = defaultOBND.y;
+ case 11: //boundY2
+ OBND.value.y2 = defaultOBND.y2;
return;
- case 9: //boundZ
- if(OBND.IsLoaded())
- OBND->z = defaultOBND.z;
+ case 12: //boundZ2
+ OBND.value.z2 = defaultOBND.z2;
return;
- case 10: //full
+ case 13: //full
FULL.Unload();
return;
- case 11: //modPath
+ case 14: //modPath
if(MODL.IsLoaded())
MODL->MODL.Unload();
return;
- case 12: //modb
+ case 15: //modb
if(MODL.IsLoaded())
MODL->MODB.Unload();
return;
- case 13: //modt_p
+ case 16: //modt_p
if(MODL.IsLoaded())
MODL->MODT.Unload();
return;
- case 14: //mods Alternate Textures
+ case 17: //altTextures
if(MODL.IsLoaded())
- MODL->MODS.Unload();
- return;
- case 15: //mods Alternate Textures
- if(MODL.IsLoaded())
- MODL->MODS.Unload();
- return;
- case 16: //mods Alternate Textures
- if(MODL.IsLoaded())
- MODL->MODS.Unload();
+ {
+ if(ListFieldID == 0) //altTextures
+ {
+ MODL->Textures.Unload();
+ return;
+ }
+
+ if(ListIndex >= MODL->Textures.MODS.size())
+ return;
+
+ switch(ListFieldID)
+ {
+ case 1: //name
+ delete []MODL->Textures.MODS[ListIndex]->name;
+ MODL->Textures.MODS[ListIndex]->name = NULL;
+ return;
+ case 2: //texture
+ MODL->Textures.MODS[ListIndex]->texture = defaultMODS.texture;
+ return;
+ case 3: //index
+ MODL->Textures.MODS[ListIndex]->index = defaultMODS.index;
+ return;
+ default:
+ return;
+ }
+ }
return;
- case 17: //modelFlags
+ case 18: //modelFlags
if(MODL.IsLoaded())
MODL->MODD.Unload();
return;
- case 18: //effect
+ case 19: //effect
EITM.Unload();
return;
- case 19: //mnam Image Space Modifier
+ case 20: //imageSpace
MNAM.Unload();
return;
- case 20: //data DATA ,, Struct
- DATA.Unload();
+ case 21: //force
+ DATA.value.force = defaultDATA.force;
return;
- case 21: //data DATA ,, Struct
- DATA.Unload();
+ case 22: //damage
+ DATA.value.damage = defaultDATA.damage;
return;
- case 22: //data DATA ,, Struct
- DATA.Unload();
+ case 23: //radius
+ DATA.value.radius = defaultDATA.radius;
return;
- case 23: //data DATA ,, Struct
- DATA.Unload();
+ case 24: //light
+ DATA.value.light = defaultDATA.light;
return;
- case 24: //data DATA ,, Struct
- DATA.Unload();
+ case 25: //sound1
+ DATA.value.sound1 = defaultDATA.sound1;
return;
- case 25: //data DATA ,, Struct
- DATA.Unload();
+ case 26: //flags
+ SetFlagMask(defaultDATA.flags);
return;
- case 26: //data DATA ,, Struct
- DATA.Unload();
+ case 27: //ISRadius
+ DATA.value.ISRadius = defaultDATA.ISRadius;
return;
- case 27: //data DATA ,, Struct
- DATA.Unload();
+ case 28: //impactDataSet
+ DATA.value.impactDataSet = defaultDATA.impactDataSet;
return;
- case 28: //data DATA ,, Struct
- DATA.Unload();
+ case 29: //sound2
+ DATA.value.sound2 = defaultDATA.sound2;
return;
- case 29: //data DATA ,, Struct
- DATA.Unload();
+ case 30: //radLevel
+ DATA.value.radLevel = defaultDATA.radLevel;
return;
- case 30: //data DATA ,, Struct
- DATA.Unload();
+ case 31: //radTime
+ DATA.value.radTime = defaultDATA.radTime;
return;
- case 31: //data DATA ,, Struct
- DATA.Unload();
+ case 32: //radRadius
+ DATA.value.radRadius = defaultDATA.radRadius;
return;
- case 32: //data DATA ,, Struct
- DATA.Unload();
+ case 33: //soundLevel
+ DATA.value.soundLevel = defaultDATA.soundLevel;
return;
- case 33: //inam Placed Impact Object
+ case 34: //impact
INAM.Unload();
return;
default:
diff --git a/CBash/FalloutNewVegas/Records/API/GMSTRecordAPI.cpp b/CBash/FalloutNewVegas/Records/API/GMSTRecordAPI.cpp
index aaf72b7..4f72629 100644
--- a/CBash/FalloutNewVegas/Records/API/GMSTRecordAPI.cpp
+++ b/CBash/FalloutNewVegas/Records/API/GMSTRecordAPI.cpp
@@ -154,10 +154,13 @@ bool GMSTRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
switch(DATA.format)
{
case 's':
- delete []DATA.s;
- ArraySize = (UINT32)strlen((STRING)FieldValue) + 1;
- DATA.s = new char[ArraySize];
- strcpy_s(DATA.s, ArraySize, (STRING)FieldValue);
+ if(FieldValue != NULL)
+ {
+ delete []DATA.s;
+ ArraySize = (UINT32)strlen((STRING)FieldValue) + 1;
+ DATA.s = new char[ArraySize];
+ strcpy_s(DATA.s, ArraySize, (STRING)FieldValue);
+ }
break;
case 'i':
DATA.i = *(SINT32 *)FieldValue;
@@ -203,14 +206,13 @@ void GMSTRecord::DeleteField(FIELD_IDENTIFIERS)
{
case 's':
delete []DATA.s;
+ DATA.s = defaultDATA.s;
if(defaultDATA.s != NULL)
{
ArraySize = (UINT32)strlen(defaultDATA.s) + 1;
DATA.s = new char[ArraySize];
strcpy_s(DATA.s, ArraySize, defaultDATA.s);
}
- else
- DATA.s = defaultDATA.s;
return;
case 'i':
DATA.i = defaultDATA.i;
diff --git a/CBash/FalloutNewVegas/Records/API/QUSTRecordAPI.cpp b/CBash/FalloutNewVegas/Records/API/QUSTRecordAPI.cpp
index f50546b..f8c687c 100644
--- a/CBash/FalloutNewVegas/Records/API/QUSTRecordAPI.cpp
+++ b/CBash/FalloutNewVegas/Records/API/QUSTRecordAPI.cpp
@@ -275,10 +275,10 @@ UINT32 QUSTRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
}
return UNKNOWN_FIELD;
}
-
+
if(ListX3Index >= Stages.value[ListIndex]->Entries.value[ListX2Index]->CTDA.value.size())
return UNKNOWN_FIELD;
-
+
switch(ListX3FieldID)
{
case 1: //operType
@@ -363,7 +363,7 @@ UINT32 QUSTRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
default:
return UNKNOWN_FIELD;
}
-
+
}
return UNKNOWN_FIELD;
default:
@@ -442,10 +442,10 @@ UINT32 QUSTRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
}
-
+
if(ListX3Index >= Stages.value[ListIndex]->Entries.value[ListX2Index]->VARS.value.size())
return UNKNOWN_FIELD;
-
+
switch(ListX3FieldID)
{
case 1: //index
@@ -492,10 +492,10 @@ UINT32 QUSTRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
}
return UNKNOWN_FIELD;
}
-
+
if(ListX3Index >= Stages.value[ListIndex]->Entries.value[ListX2Index]->SCR_.value.size())
return UNKNOWN_FIELD;
-
+
switch(ListX3FieldID)
{
case 1: //reference
@@ -596,10 +596,10 @@ UINT32 QUSTRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
}
return UNKNOWN_FIELD;
}
-
+
if(ListX3Index >= Objectives.value[ListIndex]->Targets.value[ListX2Index]->CTDA.value.size())
return UNKNOWN_FIELD;
-
+
switch(ListX3FieldID)
{
case 1: //operType
@@ -684,7 +684,7 @@ UINT32 QUSTRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
default:
return UNKNOWN_FIELD;
}
-
+
}
return UNKNOWN_FIELD;
default:
@@ -809,7 +809,7 @@ void * QUSTRecord::GetField(FIELD_IDENTIFIERS, void **FieldValues)
case 2: //conditions
if(ListX2Index >= Stages.value[ListIndex]->Entries.value[ListX2Index]->CTDA.value.size())
return NULL;
-
+
switch(ListFieldID)
{
case 1: //operType
@@ -856,7 +856,7 @@ void * QUSTRecord::GetField(FIELD_IDENTIFIERS, void **FieldValues)
case 12: //vars
if(ListX3Index >= Stages.value[ListIndex]->Entries.value[ListX2Index]->VARS.value.size())
return NULL;
-
+
switch(ListX3FieldID)
{
case 1: //index
@@ -915,7 +915,7 @@ void * QUSTRecord::GetField(FIELD_IDENTIFIERS, void **FieldValues)
case 4: //conditions
if(ListX3Index >= Objectives.value[ListIndex]->Targets.value[ListX2Index]->CTDA.value.size())
return NULL;
-
+
switch(ListX3FieldID)
{
case 1: //operType
@@ -1087,10 +1087,10 @@ bool QUSTRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
Stages.value[ListIndex]->Entries.value[ListX2Index]->CTDA.resize(ArraySize);
return false;
}
-
+
if(ListX3Index >= Stages.value[ListIndex]->Entries.value[ListX2Index]->CTDA.value.size())
break;
-
+
switch(ListX3FieldID)
{
case 1: //operType
@@ -1163,10 +1163,10 @@ bool QUSTRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
Stages.value[ListIndex]->Entries.value[ListX2Index]->VARS.resize(ArraySize);
return false;
}
-
+
if(ListX3Index >= Stages.value[ListIndex]->Entries.value[ListX2Index]->VARS.value.size())
break;
-
+
switch(ListX3FieldID)
{
case 1: //index
@@ -1215,10 +1215,10 @@ bool QUSTRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
Stages.value[ListIndex]->Entries.value[ListX2Index]->SCR_.resize(ArraySize);
return false;
}
-
+
if(ListX3Index >= Stages.value[ListIndex]->Entries.value[ListX2Index]->SCR_.value.size())
break;
-
+
switch(ListX3FieldID)
{
case 1: //reference
@@ -1287,10 +1287,10 @@ bool QUSTRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
Objectives.value[ListIndex]->Targets.value[ListX2Index]->CTDA.resize(ArraySize);
return false;
}
-
+
if(ListX3Index >= Objectives.value[ListIndex]->Targets.value[ListX2Index]->CTDA.value.size())
break;
-
+
switch(ListX3FieldID)
{
case 1: //operType
@@ -1468,10 +1468,10 @@ void QUSTRecord::DeleteField(FIELD_IDENTIFIERS)
Stages.value[ListIndex]->Entries.value[ListX2Index]->CTDA.Unload();
return;
}
-
+
if(ListX3Index >= Stages.value[ListIndex]->Entries.value[ListX2Index]->CTDA.value.size())
return;
-
+
switch(ListX3FieldID)
{
case 1: //operType
@@ -1540,10 +1540,10 @@ void QUSTRecord::DeleteField(FIELD_IDENTIFIERS)
Stages.value[ListIndex]->Entries.value[ListX2Index]->VARS.Unload();
return;
}
-
+
if(ListX3Index >= Stages.value[ListIndex]->Entries.value[ListX2Index]->VARS.value.size())
return;
-
+
switch(ListX3FieldID)
{
case 1: //index
@@ -1588,10 +1588,10 @@ void QUSTRecord::DeleteField(FIELD_IDENTIFIERS)
Stages.value[ListIndex]->Entries.value[ListX2Index]->SCR_.Unload();
return;
}
-
+
if(ListX3Index >= Stages.value[ListIndex]->Entries.value[ListX2Index]->SCR_.value.size())
return;
-
+
switch(ListX3FieldID)
{
case 1: //reference
@@ -1660,10 +1660,10 @@ void QUSTRecord::DeleteField(FIELD_IDENTIFIERS)
Objectives.value[ListIndex]->Targets.value[ListX2Index]->CTDA.Unload();
return;
}
-
+
if(ListX3Index >= Objectives.value[ListIndex]->Targets.value[ListX2Index]->CTDA.value.size())
return;
-
+
switch(ListX3FieldID)
{
case 1: //operType
diff --git a/CBash/FalloutNewVegas/Records/API/WATRRecordAPI.cpp b/CBash/FalloutNewVegas/Records/API/WATRRecordAPI.cpp
index a3ea8ec..8efe9fa 100644
--- a/CBash/FalloutNewVegas/Records/API/WATRRecordAPI.cpp
+++ b/CBash/FalloutNewVegas/Records/API/WATRRecordAPI.cpp
@@ -62,35 +62,35 @@ UINT32 WATRRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
case 7: //full
return STRING_FIELD;
- case 8: //nnam Noise Map
+ case 8: //noisePath
return ISTRING_FIELD;
- case 9: //anam Opacity
+ case 9: //opacity
return UINT8_FIELD;
- case 10: //fnam Flags
+ case 10: //flags
return UINT8_FIELD;
- case 11: //mnam Material ID
+ case 11: //material
return ISTRING_FIELD;
- case 12: //snam Sound
+ case 12: //sound
return FORMID_FIELD;
- case 13: //xnam Actor Effect
+ case 13: //effect
return FORMID_FIELD;
- case 14: //data Damage
+ case 14: //damage
return UINT16_FIELD;
- case 15: //dnam DNAM ,, Struct
+ case 15: //unknown1
return FLOAT32_FIELD;
- case 16: //dnam DNAM ,, Struct
+ case 16: //unknown2
return FLOAT32_FIELD;
- case 17: //dnam DNAM ,, Struct
+ case 17: //unknown3
return FLOAT32_FIELD;
- case 18: //dnam DNAM ,, Struct
+ case 18: //unknown4
return FLOAT32_FIELD;
- case 19: //dnam DNAM ,, Struct
+ case 19: //sunPower
return FLOAT32_FIELD;
- case 20: //dnam DNAM ,, Struct
+ case 20: //reflectAmt
return FLOAT32_FIELD;
- case 21: //dnam DNAM ,, Struct
+ case 21: //fresnelAmt
return FLOAT32_FIELD;
- case 22: //dnam_p DNAM ,, Struct
+ case 22: //unused1
switch(WhichAttribute)
{
case 0: //fieldType
@@ -101,17 +101,17 @@ UINT32 WATRRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 23: //dnam DNAM ,, Struct
+ case 23: //fogNear
return FLOAT32_FIELD;
- case 24: //dnam DNAM ,, Struct
+ case 24: //fogFar
return FLOAT32_FIELD;
- case 25: //dnam DNAM ,, Struct
+ case 25: //shallow.red
return UINT8_FIELD;
- case 26: //dnam DNAM ,, Struct
+ case 26: //shallow.green
return UINT8_FIELD;
- case 27: //dnam DNAM ,, Struct
+ case 27: //shallow.blue
return UINT8_FIELD;
- case 28: //dnam_p DNAM ,, Struct
+ case 28: //unused2
switch(WhichAttribute)
{
case 0: //fieldType
@@ -122,13 +122,13 @@ UINT32 WATRRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 29: //dnam DNAM ,, Struct
+ case 29: //deep.red
return UINT8_FIELD;
- case 30: //dnam DNAM ,, Struct
+ case 30: //deep.green
return UINT8_FIELD;
- case 31: //dnam DNAM ,, Struct
+ case 31: //deep.blue
return UINT8_FIELD;
- case 32: //dnam_p DNAM ,, Struct
+ case 32: //unused3
switch(WhichAttribute)
{
case 0: //fieldType
@@ -139,13 +139,13 @@ UINT32 WATRRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 33: //dnam DNAM ,, Struct
+ case 33: //refl.red
return UINT8_FIELD;
- case 34: //dnam DNAM ,, Struct
+ case 34: //refl.green
return UINT8_FIELD;
- case 35: //dnam DNAM ,, Struct
+ case 35: //refl.blue
return UINT8_FIELD;
- case 36: //dnam_p DNAM ,, Struct
+ case 36: //unused4
switch(WhichAttribute)
{
case 0: //fieldType
@@ -156,7 +156,7 @@ UINT32 WATRRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 37: //dnam_p DNAM ,, Struct
+ case 37: //unused5
switch(WhichAttribute)
{
case 0: //fieldType
@@ -167,81 +167,81 @@ UINT32 WATRRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 38: //dnam DNAM ,, Struct
+ case 38: //rainForce
return FLOAT32_FIELD;
- case 39: //dnam DNAM ,, Struct
+ case 39: //rainVelocity
return FLOAT32_FIELD;
- case 40: //dnam DNAM ,, Struct
+ case 40: //rainFalloff
return FLOAT32_FIELD;
- case 41: //dnam DNAM ,, Struct
+ case 41: //rainDampner
return FLOAT32_FIELD;
- case 42: //dnam DNAM ,, Struct
+ case 42: //dispSize
return FLOAT32_FIELD;
- case 43: //dnam DNAM ,, Struct
+ case 43: //dispForce
return FLOAT32_FIELD;
- case 44: //dnam DNAM ,, Struct
+ case 44: //dispVelocity
return FLOAT32_FIELD;
- case 45: //dnam DNAM ,, Struct
+ case 45: //dispFalloff
return FLOAT32_FIELD;
- case 46: //dnam DNAM ,, Struct
+ case 46: //dispDampner
return FLOAT32_FIELD;
- case 47: //dnam DNAM ,, Struct
+ case 47: //rainSize
return FLOAT32_FIELD;
- case 48: //dnam DNAM ,, Struct
+ case 48: //normalsNoiseScale
return FLOAT32_FIELD;
- case 49: //dnam DNAM ,, Struct
+ case 49: //noise1Direction
return FLOAT32_FIELD;
- case 50: //dnam DNAM ,, Struct
+ case 50: //noise2Direction
return FLOAT32_FIELD;
- case 51: //dnam DNAM ,, Struct
+ case 51: //noise3Direction
return FLOAT32_FIELD;
- case 52: //dnam DNAM ,, Struct
+ case 52: //noise1Speed
return FLOAT32_FIELD;
- case 53: //dnam DNAM ,, Struct
+ case 53: //noise2Speed
return FLOAT32_FIELD;
- case 54: //dnam DNAM ,, Struct
+ case 54: //noise3Speed
return FLOAT32_FIELD;
- case 55: //dnam DNAM ,, Struct
+ case 55: //normalsFalloffStart
return FLOAT32_FIELD;
- case 56: //dnam DNAM ,, Struct
+ case 56: //normalsFalloffEnd
return FLOAT32_FIELD;
- case 57: //dnam DNAM ,, Struct
+ case 57: //fogAmt
return FLOAT32_FIELD;
- case 58: //dnam DNAM ,, Struct
+ case 58: //normalsUVScale
return FLOAT32_FIELD;
- case 59: //dnam DNAM ,, Struct
+ case 59: //underFogAmt
return FLOAT32_FIELD;
- case 60: //dnam DNAM ,, Struct
+ case 60: //underFogNear
return FLOAT32_FIELD;
- case 61: //dnam DNAM ,, Struct
+ case 61: //underFogFar
return FLOAT32_FIELD;
- case 62: //dnam DNAM ,, Struct
+ case 62: //distAmt
return FLOAT32_FIELD;
- case 63: //dnam DNAM ,, Struct
+ case 63: //shininess
return FLOAT32_FIELD;
- case 64: //dnam DNAM ,, Struct
+ case 64: //hdrMult
return FLOAT32_FIELD;
- case 65: //dnam DNAM ,, Struct
+ case 65: //lightRadius
return FLOAT32_FIELD;
- case 66: //dnam DNAM ,, Struct
+ case 66: //lightBright
return FLOAT32_FIELD;
- case 67: //dnam DNAM ,, Struct
+ case 67: //noise1UVScale
return FLOAT32_FIELD;
- case 68: //dnam DNAM ,, Struct
+ case 68: //noise2UVScale
return FLOAT32_FIELD;
- case 69: //dnam DNAM ,, Struct
+ case 69: //noise3UVScale
return FLOAT32_FIELD;
- case 70: //dnam DNAM ,, Struct
+ case 70: //noise1AmpScale
return FLOAT32_FIELD;
- case 71: //dnam DNAM ,, Struct
+ case 71: //noise2AmpScale
return FLOAT32_FIELD;
- case 72: //dnam DNAM ,, Struct
+ case 72: //noise3AmpScale
return FLOAT32_FIELD;
- case 73: //gnam GNAM ,, Struct
+ case 73: //dayWater
return FORMID_FIELD;
- case 74: //gnam GNAM ,, Struct
+ case 74: //nightWater
return FORMID_FIELD;
- case 75: //gnam GNAM ,, Struct
+ case 75: //underWater
return FORMID_FIELD;
default:
return UNKNOWN_FIELD;
@@ -269,147 +269,147 @@ void * WATRRecord::GetField(FIELD_IDENTIFIERS, void **FieldValues)
return NULL;
case 7: //full
return FULL.value;
- case 8: //nnam Noise Map
+ case 8: //noisePath
return NNAM.value;
- case 9: //anam Opacity
- return ANAM.IsLoaded() ? &ANAM->value9 : NULL;
- case 10: //fnam Flags
- return FNAM.IsLoaded() ? &FNAM->value10 : NULL;
- case 11: //mnam Material ID
+ case 9: //opacity
+ return &ANAM.value;
+ case 10: //flags
+ return &FNAM.value;
+ case 11: //material
return MNAM.value;
- case 12: //snam Sound
- return SNAM.IsLoaded() ? &SNAM->value12 : NULL;
- case 13: //xnam Actor Effect
- return XNAM.IsLoaded() ? &XNAM->value13 : NULL;
- case 14: //data Damage
- return DATA.IsLoaded() ? &DATA->value14 : NULL;
- case 15: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value15 : NULL;
- case 16: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value16 : NULL;
- case 17: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value17 : NULL;
- case 18: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value18 : NULL;
- case 19: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value19 : NULL;
- case 20: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value20 : NULL;
- case 21: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value21 : NULL;
- case 22: //dnam_p DNAM ,, Struct
- *FieldValues = DNAM.IsLoaded() ? &DNAM->value22[0] : NULL;
+ case 12: //sound
+ return &SNAM.value;
+ case 13: //effect
+ return &XNAM.value;
+ case 14: //damage
+ return &DATA.value;
+ case 15: //unknown1
+ return &DNAM.value.unknown1;
+ case 16: //unknown2
+ return &DNAM.value.unknown2;
+ case 17: //unknown3
+ return &DNAM.value.unknown3;
+ case 18: //unknown4
+ return &DNAM.value.unknown4;
+ case 19: //sunPower
+ return &DNAM.value.sunPower;
+ case 20: //reflectAmt
+ return &DNAM.value.reflectAmt;
+ case 21: //fresnelAmt
+ return &DNAM.value.fresnelAmt;
+ case 22: //unused1
+ *FieldValues = &DNAM.value.unused1[0];
return NULL;
- case 23: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value23 : NULL;
- case 24: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value24 : NULL;
- case 25: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value25 : NULL;
- case 26: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value26 : NULL;
- case 27: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value27 : NULL;
- case 28: //dnam_p DNAM ,, Struct
- *FieldValues = DNAM.IsLoaded() ? &DNAM->value28[0] : NULL;
+ case 23: //fogNear
+ return &DNAM.value.fogNear;
+ case 24: //fogFar
+ return &DNAM.value.fogFar;
+ case 25: //shallow.red
+ return &DNAM.value.shallow.red;
+ case 26: //shallow.green
+ return &DNAM.value.shallow.green;
+ case 27: //shallow.blue
+ return &DNAM.value.shallow.blue;
+ case 28: //unused2
+ *FieldValues = &DNAM.value.shallow.unused1;
return NULL;
- case 29: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value29 : NULL;
- case 30: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value30 : NULL;
- case 31: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value31 : NULL;
- case 32: //dnam_p DNAM ,, Struct
- *FieldValues = DNAM.IsLoaded() ? &DNAM->value32[0] : NULL;
+ case 29: //deep.red
+ return &DNAM.value.deep.red;
+ case 30: //deep.green
+ return &DNAM.value.deep.green;
+ case 31: //deep.blue
+ return &DNAM.value.deep.blue;
+ case 32: //unused3
+ *FieldValues = &DNAM.value.deep.unused1;
return NULL;
- case 33: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value33 : NULL;
- case 34: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value34 : NULL;
- case 35: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value35 : NULL;
- case 36: //dnam_p DNAM ,, Struct
- *FieldValues = DNAM.IsLoaded() ? &DNAM->value36[0] : NULL;
+ case 33: //refl.red
+ return &DNAM.value.refl.red;
+ case 34: //refl.green
+ return &DNAM.value.refl.green;
+ case 35: //refl.blue
+ return &DNAM.value.refl.blue;
+ case 36: //unused4
+ *FieldValues = &DNAM.value.refl.unused1;
return NULL;
- case 37: //dnam_p DNAM ,, Struct
- *FieldValues = DNAM.IsLoaded() ? &DNAM->value37[0] : NULL;
+ case 37: //unused5
+ *FieldValues = &DNAM.value.unused2[0];
return NULL;
- case 38: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value38 : NULL;
- case 39: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value39 : NULL;
- case 40: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value40 : NULL;
- case 41: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value41 : NULL;
- case 42: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value42 : NULL;
- case 43: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value43 : NULL;
- case 44: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value44 : NULL;
- case 45: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value45 : NULL;
- case 46: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value46 : NULL;
- case 47: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value47 : NULL;
- case 48: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value48 : NULL;
- case 49: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value49 : NULL;
- case 50: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value50 : NULL;
- case 51: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value51 : NULL;
- case 52: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value52 : NULL;
- case 53: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value53 : NULL;
- case 54: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value54 : NULL;
- case 55: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value55 : NULL;
- case 56: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value56 : NULL;
- case 57: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value57 : NULL;
- case 58: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value58 : NULL;
- case 59: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value59 : NULL;
- case 60: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value60 : NULL;
- case 61: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value61 : NULL;
- case 62: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value62 : NULL;
- case 63: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value63 : NULL;
- case 64: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value64 : NULL;
- case 65: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value65 : NULL;
- case 66: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value66 : NULL;
- case 67: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value67 : NULL;
- case 68: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value68 : NULL;
- case 69: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value69 : NULL;
- case 70: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value70 : NULL;
- case 71: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value71 : NULL;
- case 72: //dnam DNAM ,, Struct
- return DNAM.IsLoaded() ? &DNAM->value72 : NULL;
- case 73: //gnam GNAM ,, Struct
- return GNAM.IsLoaded() ? &GNAM->value73 : NULL;
- case 74: //gnam GNAM ,, Struct
- return GNAM.IsLoaded() ? &GNAM->value74 : NULL;
- case 75: //gnam GNAM ,, Struct
- return GNAM.IsLoaded() ? &GNAM->value75 : NULL;
+ case 38: //rainForce
+ return &DNAM.value.rainForce;
+ case 39: //rainVelocity
+ return &DNAM.value.rainVelocity;
+ case 40: //rainFalloff
+ return &DNAM.value.rainFalloff;
+ case 41: //rainDampner
+ return &DNAM.value.rainDampner;
+ case 42: //dispSize
+ return &DNAM.value.dispSize;
+ case 43: //dispForce
+ return &DNAM.value.dispForce;
+ case 44: //dispVelocity
+ return &DNAM.value.dispVelocity;
+ case 45: //dispFalloff
+ return &DNAM.value.dispFalloff;
+ case 46: //dispDampner
+ return &DNAM.value.dispDampner;
+ case 47: //rainSize
+ return &DNAM.value.rainSize;
+ case 48: //normalsNoiseScale
+ return &DNAM.value.normalsNoiseScale;
+ case 49: //noise1Direction
+ return &DNAM.value.noise1Direction;
+ case 50: //noise2Direction
+ return &DNAM.value.noise2Direction;
+ case 51: //noise3Direction
+ return &DNAM.value.noise3Direction;
+ case 52: //noise1Speed
+ return &DNAM.value.noise1Speed;
+ case 53: //noise2Speed
+ return &DNAM.value.noise2Speed;
+ case 54: //noise3Speed
+ return &DNAM.value.noise3Speed;
+ case 55: //normalsFalloffStart
+ return &DNAM.value.normalsFalloffStart;
+ case 56: //normalsFalloffEnd
+ return &DNAM.value.normalsFalloffEnd;
+ case 57: //fogAmt
+ return &DNAM.value.fogAmt;
+ case 58: //normalsUVScale
+ return &DNAM.value.normalsUVScale;
+ case 59: //underFogAmt
+ return &DNAM.value.underFogAmt;
+ case 60: //underFogNear
+ return &DNAM.value.underFogNear;
+ case 61: //underFogFar
+ return &DNAM.value.underFogFar;
+ case 62: //distAmt
+ return &DNAM.value.distAmt;
+ case 63: //shininess
+ return &DNAM.value.shininess;
+ case 64: //hdrMult
+ return &DNAM.value.hdrMult;
+ case 65: //lightRadius
+ return &DNAM.value.lightRadius;
+ case 66: //lightBright
+ return &DNAM.value.lightBright;
+ case 67: //noise1UVScale
+ return &DNAM.value.noise1UVScale;
+ case 68: //noise2UVScale
+ return &DNAM.value.noise2UVScale;
+ case 69: //noise3UVScale
+ return &DNAM.value.noise3UVScale;
+ case 70: //noise1AmpScale
+ return &DNAM.value.noise1AmpScale;
+ case 71: //noise2AmpScale
+ return &DNAM.value.noise2AmpScale;
+ case 72: //noise3AmpScale
+ return &DNAM.value.noise3AmpScale;
+ case 73: //dayWater
+ return &GNAM.value.dayWater;
+ case 74: //nightWater
+ return &GNAM.value.nightWater;
+ case 75: //underWater
+ return &GNAM.value.underWater;
default:
return NULL;
}
@@ -446,291 +446,225 @@ bool WATRRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
case 7: //full
FULL.Copy((STRING)FieldValue);
break;
- case 8: //nnam Noise Map
+ case 8: //noisePath
NNAM.Copy((STRING)FieldValue);
break;
- case 9: //anam Opacity
- ANAM.Load();
- ANAM->value9 = *(UINT8 *)FieldValue;
+ case 9: //opacity
+ ANAM.value = *(UINT8 *)FieldValue;
break;
- case 10: //fnam Flags
- FNAM.Load();
- FNAM->value10 = *(UINT8 *)FieldValue;
+ case 10: //flags
+ FNAM.value = *(UINT8 *)FieldValue;
break;
- case 11: //mnam Material ID
+ case 11: //material
MNAM.Copy((STRING)FieldValue);
break;
- case 12: //snam Sound
- SNAM.Load();
- SNAM->value12 = *(FORMID *)FieldValue;
+ case 12: //sound
+ SNAM.value = *(FORMID *)FieldValue;
return true;
- case 13: //xnam Actor Effect
- XNAM.Load();
- XNAM->value13 = *(FORMID *)FieldValue;
+ case 13: //effect
+ XNAM.value = *(FORMID *)FieldValue;
return true;
- case 14: //data Damage
- DATA.Load();
- DATA->value14 = *(UINT16 *)FieldValue;
+ case 14: //damage
+ DATA.value = *(UINT16 *)FieldValue;
break;
- case 15: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value15 = *(FLOAT32 *)FieldValue;
+ case 15: //unknown1
+ DNAM.value.unknown1 = *(FLOAT32 *)FieldValue;
break;
- case 16: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value16 = *(FLOAT32 *)FieldValue;
+ case 16: //unknown2
+ DNAM.value.unknown2 = *(FLOAT32 *)FieldValue;
break;
- case 17: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value17 = *(FLOAT32 *)FieldValue;
+ case 17: //unknown3
+ DNAM.value.unknown3 = *(FLOAT32 *)FieldValue;
break;
- case 18: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value18 = *(FLOAT32 *)FieldValue;
+ case 18: //unknown4
+ DNAM.value.unknown4 = *(FLOAT32 *)FieldValue;
break;
- case 19: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value19 = *(FLOAT32 *)FieldValue;
+ case 19: //sunPower
+ DNAM.value.sunPower = *(FLOAT32 *)FieldValue;
break;
- case 20: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value20 = *(FLOAT32 *)FieldValue;
+ case 20: //reflectAmt
+ DNAM.value.reflectAmt = *(FLOAT32 *)FieldValue;
break;
- case 21: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value21 = *(FLOAT32 *)FieldValue;
+ case 21: //fresnelAmt
+ DNAM.value.fresnelAmt = *(FLOAT32 *)FieldValue;
break;
- case 22: //dnam_p DNAM ,, Struct
+ case 22: //unused1
if(ArraySize != 4)
break;
- DNAM.Load();
- DNAM->value22[0] = ((UINT8ARRAY)FieldValue)[0];
- DNAM->value22[1] = ((UINT8ARRAY)FieldValue)[1];
- DNAM->value22[2] = ((UINT8ARRAY)FieldValue)[2];
- DNAM->value22[3] = ((UINT8ARRAY)FieldValue)[3];
+ DNAM.value.unused1[0] = ((UINT8ARRAY)FieldValue)[0];
+ DNAM.value.unused1[1] = ((UINT8ARRAY)FieldValue)[1];
+ DNAM.value.unused1[2] = ((UINT8ARRAY)FieldValue)[2];
+ DNAM.value.unused1[3] = ((UINT8ARRAY)FieldValue)[3];
break;
- case 23: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value23 = *(FLOAT32 *)FieldValue;
+ case 23: //fogNear
+ DNAM.value.fogNear = *(FLOAT32 *)FieldValue;
break;
- case 24: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value24 = *(FLOAT32 *)FieldValue;
+ case 24: //fogFar
+ DNAM.value.fogFar = *(FLOAT32 *)FieldValue;
break;
- case 25: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value25 = *(UINT8 *)FieldValue;
+ case 25: //shallow.red
+ DNAM.value.shallow.red = *(UINT8 *)FieldValue;
break;
- case 26: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value26 = *(UINT8 *)FieldValue;
+ case 26: //shallow.green
+ DNAM.value.shallow.green = *(UINT8 *)FieldValue;
break;
- case 27: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value27 = *(UINT8 *)FieldValue;
+ case 27: //shallow.blue
+ DNAM.value.shallow.blue = *(UINT8 *)FieldValue;
break;
- case 28: //dnam_p DNAM ,, Struct
+ case 28: //unused2
if(ArraySize != 1)
break;
- DNAM.Load();
- DNAM->value28[0] = ((UINT8ARRAY)FieldValue)[0];
+ DNAM.value.shallow.unused1 = ((UINT8ARRAY)FieldValue)[0];
break;
- case 29: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value29 = *(UINT8 *)FieldValue;
+ case 29: //deep.red
+ DNAM.value.deep.red = *(UINT8 *)FieldValue;
break;
- case 30: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value30 = *(UINT8 *)FieldValue;
+ case 30: //deep.green
+ DNAM.value.deep.green = *(UINT8 *)FieldValue;
break;
- case 31: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value31 = *(UINT8 *)FieldValue;
+ case 31: //deep.blue
+ DNAM.value.deep.blue = *(UINT8 *)FieldValue;
break;
- case 32: //dnam_p DNAM ,, Struct
+ case 32: //unused3
if(ArraySize != 1)
break;
- DNAM.Load();
- DNAM->value32[0] = ((UINT8ARRAY)FieldValue)[0];
+ DNAM.value.deep.unused1 = ((UINT8ARRAY)FieldValue)[0];
break;
- case 33: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value33 = *(UINT8 *)FieldValue;
+ case 33: //refl.red
+ DNAM.value.refl.red = *(UINT8 *)FieldValue;
break;
- case 34: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value34 = *(UINT8 *)FieldValue;
+ case 34: //refl.green
+ DNAM.value.refl.green = *(UINT8 *)FieldValue;
break;
- case 35: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value35 = *(UINT8 *)FieldValue;
+ case 35: //refl.blue
+ DNAM.value.refl.blue = *(UINT8 *)FieldValue;
break;
- case 36: //dnam_p DNAM ,, Struct
+ case 36: //unused4
if(ArraySize != 1)
break;
- DNAM.Load();
- DNAM->value36[0] = ((UINT8ARRAY)FieldValue)[0];
+ DNAM.value.refl.unused1 = ((UINT8ARRAY)FieldValue)[0];
break;
- case 37: //dnam_p DNAM ,, Struct
+ case 37: //unused5
if(ArraySize != 4)
break;
- DNAM.Load();
- DNAM->value37[0] = ((UINT8ARRAY)FieldValue)[0];
- DNAM->value37[1] = ((UINT8ARRAY)FieldValue)[1];
- DNAM->value37[2] = ((UINT8ARRAY)FieldValue)[2];
- DNAM->value37[3] = ((UINT8ARRAY)FieldValue)[3];
+ DNAM.value.unused2[0] = ((UINT8ARRAY)FieldValue)[0];
+ DNAM.value.unused2[1] = ((UINT8ARRAY)FieldValue)[1];
+ DNAM.value.unused2[2] = ((UINT8ARRAY)FieldValue)[2];
+ DNAM.value.unused2[3] = ((UINT8ARRAY)FieldValue)[3];
break;
- case 38: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value38 = *(FLOAT32 *)FieldValue;
+ case 38: //rainForce
+ DNAM.value.rainForce = *(FLOAT32 *)FieldValue;
break;
- case 39: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value39 = *(FLOAT32 *)FieldValue;
+ case 39: //rainVelocity
+ DNAM.value.rainVelocity = *(FLOAT32 *)FieldValue;
break;
- case 40: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value40 = *(FLOAT32 *)FieldValue;
+ case 40: //rainFalloff
+ DNAM.value.rainFalloff = *(FLOAT32 *)FieldValue;
break;
- case 41: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value41 = *(FLOAT32 *)FieldValue;
+ case 41: //rainDampner
+ DNAM.value.rainDampner = *(FLOAT32 *)FieldValue;
break;
- case 42: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value42 = *(FLOAT32 *)FieldValue;
+ case 42: //dispSize
+ DNAM.value.dispSize = *(FLOAT32 *)FieldValue;
break;
- case 43: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value43 = *(FLOAT32 *)FieldValue;
+ case 43: //dispForce
+ DNAM.value.dispForce = *(FLOAT32 *)FieldValue;
break;
- case 44: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value44 = *(FLOAT32 *)FieldValue;
+ case 44: //dispVelocity
+ DNAM.value.dispVelocity = *(FLOAT32 *)FieldValue;
break;
- case 45: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value45 = *(FLOAT32 *)FieldValue;
+ case 45: //dispFalloff
+ DNAM.value.dispFalloff = *(FLOAT32 *)FieldValue;
break;
- case 46: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value46 = *(FLOAT32 *)FieldValue;
+ case 46: //dispDampner
+ DNAM.value.dispDampner = *(FLOAT32 *)FieldValue;
break;
- case 47: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value47 = *(FLOAT32 *)FieldValue;
+ case 47: //rainSize
+ DNAM.value.rainSize = *(FLOAT32 *)FieldValue;
break;
- case 48: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value48 = *(FLOAT32 *)FieldValue;
- break;
- case 49: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value49 = *(FLOAT32 *)FieldValue;
- break;
- case 50: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value50 = *(FLOAT32 *)FieldValue;
- break;
- case 51: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value51 = *(FLOAT32 *)FieldValue;
- break;
- case 52: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value52 = *(FLOAT32 *)FieldValue;
- break;
- case 53: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value53 = *(FLOAT32 *)FieldValue;
- break;
- case 54: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value54 = *(FLOAT32 *)FieldValue;
- break;
- case 55: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value55 = *(FLOAT32 *)FieldValue;
- break;
- case 56: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value56 = *(FLOAT32 *)FieldValue;
- break;
- case 57: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value57 = *(FLOAT32 *)FieldValue;
- break;
- case 58: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value58 = *(FLOAT32 *)FieldValue;
- break;
- case 59: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value59 = *(FLOAT32 *)FieldValue;
- break;
- case 60: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value60 = *(FLOAT32 *)FieldValue;
- break;
- case 61: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value61 = *(FLOAT32 *)FieldValue;
- break;
- case 62: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value62 = *(FLOAT32 *)FieldValue;
+ case 48: //normalsNoiseScale
+ DNAM.value.normalsNoiseScale = *(FLOAT32 *)FieldValue;
break;
- case 63: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value63 = *(FLOAT32 *)FieldValue;
+ case 49: //noise1Direction
+ DNAM.value.noise1Direction = *(FLOAT32 *)FieldValue;
break;
- case 64: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value64 = *(FLOAT32 *)FieldValue;
+ case 50: //noise2Direction
+ DNAM.value.noise2Direction = *(FLOAT32 *)FieldValue;
break;
- case 65: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value65 = *(FLOAT32 *)FieldValue;
+ case 51: //noise3Direction
+ DNAM.value.noise3Direction = *(FLOAT32 *)FieldValue;
break;
- case 66: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value66 = *(FLOAT32 *)FieldValue;
+ case 52: //noise1Speed
+ DNAM.value.noise1Speed = *(FLOAT32 *)FieldValue;
break;
- case 67: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value67 = *(FLOAT32 *)FieldValue;
+ case 53: //noise2Speed
+ DNAM.value.noise2Speed = *(FLOAT32 *)FieldValue;
break;
- case 68: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value68 = *(FLOAT32 *)FieldValue;
+ case 54: //noise3Speed
+ DNAM.value.noise3Speed = *(FLOAT32 *)FieldValue;
break;
- case 69: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value69 = *(FLOAT32 *)FieldValue;
+ case 55: //normalsFalloffStart
+ DNAM.value.normalsFalloffStart = *(FLOAT32 *)FieldValue;
break;
- case 70: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value70 = *(FLOAT32 *)FieldValue;
+ case 56: //normalsFalloffEnd
+ DNAM.value.normalsFalloffEnd = *(FLOAT32 *)FieldValue;
break;
- case 71: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value71 = *(FLOAT32 *)FieldValue;
+ case 57: //fogAmt
+ DNAM.value.fogAmt = *(FLOAT32 *)FieldValue;
break;
- case 72: //dnam DNAM ,, Struct
- DNAM.Load();
- DNAM->value72 = *(FLOAT32 *)FieldValue;
+ case 58: //normalsUVScale
+ DNAM.value.normalsUVScale = *(FLOAT32 *)FieldValue;
break;
- case 73: //gnam GNAM ,, Struct
- GNAM.Load();
- GNAM->value73 = *(FORMID *)FieldValue;
+ case 59: //underFogAmt
+ DNAM.value.underFogAmt = *(FLOAT32 *)FieldValue;
+ break;
+ case 60: //underFogNear
+ DNAM.value.underFogNear = *(FLOAT32 *)FieldValue;
+ break;
+ case 61: //underFogFar
+ DNAM.value.underFogFar = *(FLOAT32 *)FieldValue;
+ break;
+ case 62: //distAmt
+ DNAM.value.distAmt = *(FLOAT32 *)FieldValue;
+ break;
+ case 63: //shininess
+ DNAM.value.shininess = *(FLOAT32 *)FieldValue;
+ break;
+ case 64: //hdrMult
+ DNAM.value.hdrMult = *(FLOAT32 *)FieldValue;
+ break;
+ case 65: //lightRadius
+ DNAM.value.lightRadius = *(FLOAT32 *)FieldValue;
+ break;
+ case 66: //lightBright
+ DNAM.value.lightBright = *(FLOAT32 *)FieldValue;
+ break;
+ case 67: //noise1UVScale
+ DNAM.value.noise1UVScale = *(FLOAT32 *)FieldValue;
+ break;
+ case 68: //noise2UVScale
+ DNAM.value.noise2UVScale = *(FLOAT32 *)FieldValue;
+ break;
+ case 69: //noise3UVScale
+ DNAM.value.noise3UVScale = *(FLOAT32 *)FieldValue;
+ break;
+ case 70: //noise1AmpScale
+ DNAM.value.noise1AmpScale = *(FLOAT32 *)FieldValue;
+ break;
+ case 71: //noise2AmpScale
+ DNAM.value.noise2AmpScale = *(FLOAT32 *)FieldValue;
+ break;
+ case 72: //noise3AmpScale
+ DNAM.value.noise3AmpScale = *(FLOAT32 *)FieldValue;
+ break;
+ case 73: //dayWater
+ GNAM.value.dayWater = *(FORMID *)FieldValue;
return true;
- case 74: //gnam GNAM ,, Struct
- GNAM.Load();
- GNAM->value74 = *(FORMID *)FieldValue;
+ case 74: //nightWater
+ GNAM.value.nightWater = *(FORMID *)FieldValue;
return true;
- case 75: //gnam GNAM ,, Struct
- GNAM.Load();
- GNAM->value75 = *(FORMID *)FieldValue;
+ case 75: //underWater
+ GNAM.value.underWater = *(FORMID *)FieldValue;
return true;
default:
break;
@@ -740,6 +674,8 @@ bool WATRRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
void WATRRecord::DeleteField(FIELD_IDENTIFIERS)
{
+ WATRDNAM defaultDNAM;
+ WATRGNAM defaultGNAM;
switch(FieldID)
{
case 1: //flags1
@@ -761,209 +697,215 @@ void WATRRecord::DeleteField(FIELD_IDENTIFIERS)
case 7: //full
FULL.Unload();
return;
- case 8: //nnam Noise Map
+ case 8: //noisePath
NNAM.Unload();
return;
- case 9: //anam Opacity
+ case 9: //opacity
ANAM.Unload();
return;
- case 10: //fnam Flags
+ case 10: //flags
FNAM.Unload();
return;
- case 11: //mnam Material ID
+ case 11: //material
MNAM.Unload();
return;
- case 12: //snam Sound
+ case 12: //sound
SNAM.Unload();
return;
- case 13: //xnam Actor Effect
+ case 13: //effect
XNAM.Unload();
return;
- case 14: //data Damage
+ case 14: //damage
DATA.Unload();
return;
- case 15: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 15: //unknown1
+ DNAM.value.unknown1 = defaultDNAM.unknown1;
return;
- case 16: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 16: //unknown2
+ DNAM.value.unknown2 = defaultDNAM.unknown2;
return;
- case 17: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 17: //unknown3
+ DNAM.value.unknown3 = defaultDNAM.unknown3;
return;
- case 18: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 18: //unknown4
+ DNAM.value.unknown4 = defaultDNAM.unknown4;
return;
- case 19: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 19: //sunPower
+ DNAM.value.sunPower = defaultDNAM.sunPower;
return;
- case 20: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 20: //reflectAmt
+ DNAM.value.reflectAmt = defaultDNAM.reflectAmt;
return;
- case 21: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 21: //fresnelAmt
+ DNAM.value.fresnelAmt = defaultDNAM.fresnelAmt;
return;
- case 22: //dnam_p DNAM ,, Struct
- DNAM.Unload();
+ case 22: //unused1
+ DNAM.value.unused1[0] = defaultDNAM.unused1[0];
+ DNAM.value.unused1[1] = defaultDNAM.unused1[1];
+ DNAM.value.unused1[2] = defaultDNAM.unused1[2];
+ DNAM.value.unused1[3] = defaultDNAM.unused1[3];
return;
- case 23: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 23: //fogNear
+ DNAM.value.fogNear = defaultDNAM.fogNear;
return;
- case 24: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 24: //fogFar
+ DNAM.value.fogFar = defaultDNAM.fogFar;
return;
- case 25: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 25: //shallow.red
+ DNAM.value.shallow.red = defaultDNAM.shallow.red;
return;
- case 26: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 26: //shallow.green
+ DNAM.value.shallow.green = defaultDNAM.shallow.green;
return;
- case 27: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 27: //shallow.blue
+ DNAM.value.shallow.blue = defaultDNAM.shallow.blue;
return;
- case 28: //dnam_p DNAM ,, Struct
- DNAM.Unload();
+ case 28: //unused2
+ DNAM.value.shallow.unused1 = defaultDNAM.shallow.unused1;
return;
- case 29: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 29: //deep.red
+ DNAM.value.deep.red = defaultDNAM.deep.red;
return;
- case 30: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 30: //deep.green
+ DNAM.value.deep.green = defaultDNAM.deep.green;
return;
- case 31: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 31: //deep.blue
+ DNAM.value.deep.blue = defaultDNAM.deep.blue;
return;
- case 32: //dnam_p DNAM ,, Struct
- DNAM.Unload();
+ case 32: //unused3
+ DNAM.value.deep.unused1 = defaultDNAM.deep.unused1;
return;
- case 33: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 33: //refl.red
+ DNAM.value.refl.red = defaultDNAM.refl.red;
return;
- case 34: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 34: //refl.green
+ DNAM.value.refl.green = defaultDNAM.refl.green;
return;
- case 35: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 35: //refl.blue
+ DNAM.value.refl.blue = defaultDNAM.refl.blue;
return;
- case 36: //dnam_p DNAM ,, Struct
- DNAM.Unload();
+ case 36: //unused4
+ DNAM.value.refl.unused1 = defaultDNAM.refl.unused1;
return;
- case 37: //dnam_p DNAM ,, Struct
- DNAM.Unload();
+ case 37: //unused5
+ DNAM.value.unused2[0] = defaultDNAM.unused2[0];
+ DNAM.value.unused2[1] = defaultDNAM.unused2[1];
+ DNAM.value.unused2[2] = defaultDNAM.unused2[2];
+ DNAM.value.unused2[3] = defaultDNAM.unused2[3];
return;
- case 38: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 38: //rainForce
+ DNAM.value.rainForce = defaultDNAM.rainForce;
return;
- case 39: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 39: //rainVelocity
+ DNAM.value.rainVelocity = defaultDNAM.rainVelocity;
return;
- case 40: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 40: //rainFalloff
+ DNAM.value.rainFalloff = defaultDNAM.rainFalloff;
return;
- case 41: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 41: //rainDampner
+ DNAM.value.rainDampner = defaultDNAM.rainDampner;
return;
- case 42: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 42: //dispSize
+ DNAM.value.dispSize = defaultDNAM.dispSize;
return;
- case 43: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 43: //dispForce
+ DNAM.value.dispForce = defaultDNAM.dispForce;
return;
- case 44: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 44: //dispVelocity
+ DNAM.value.dispVelocity = defaultDNAM.dispVelocity;
return;
- case 45: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 45: //dispFalloff
+ DNAM.value.dispFalloff = defaultDNAM.dispFalloff;
return;
- case 46: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 46: //dispDampner
+ DNAM.value.dispDampner = defaultDNAM.dispDampner;
return;
- case 47: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 47: //rainSize
+ DNAM.value.rainSize = defaultDNAM.rainSize;
return;
- case 48: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 48: //normalsNoiseScale
+ DNAM.value.normalsNoiseScale = defaultDNAM.normalsNoiseScale;
return;
- case 49: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 49: //noise1Direction
+ DNAM.value.noise1Direction = defaultDNAM.noise1Direction;
return;
- case 50: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 50: //noise2Direction
+ DNAM.value.noise2Direction = defaultDNAM.noise2Direction;
return;
- case 51: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 51: //noise3Direction
+ DNAM.value.noise3Direction = defaultDNAM.noise3Direction;
return;
- case 52: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 52: //noise1Speed
+ DNAM.value.noise1Speed = defaultDNAM.noise1Speed;
return;
- case 53: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 53: //noise2Speed
+ DNAM.value.noise2Speed = defaultDNAM.noise2Speed;
return;
- case 54: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 54: //noise3Speed
+ DNAM.value.noise3Speed = defaultDNAM.noise3Speed;
return;
- case 55: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 55: //normalsFalloffStart
+ DNAM.value.normalsFalloffStart = defaultDNAM.normalsFalloffStart;
return;
- case 56: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 56: //normalsFalloffEnd
+ DNAM.value.normalsFalloffEnd = defaultDNAM.normalsFalloffEnd;
return;
- case 57: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 57: //fogAmt
+ DNAM.value.fogAmt = defaultDNAM.fogAmt;
return;
- case 58: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 58: //normalsUVScale
+ DNAM.value.normalsUVScale = defaultDNAM.normalsUVScale;
return;
- case 59: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 59: //underFogAmt
+ DNAM.value.underFogAmt = defaultDNAM.underFogAmt;
return;
- case 60: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 60: //underFogNear
+ DNAM.value.underFogNear = defaultDNAM.underFogNear;
return;
- case 61: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 61: //underFogFar
+ DNAM.value.underFogFar = defaultDNAM.underFogFar;
return;
- case 62: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 62: //distAmt
+ DNAM.value.distAmt = defaultDNAM.distAmt;
return;
- case 63: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 63: //shininess
+ DNAM.value.shininess = defaultDNAM.shininess;
return;
- case 64: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 64: //hdrMult
+ DNAM.value.hdrMult = defaultDNAM.hdrMult;
return;
- case 65: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 65: //lightRadius
+ DNAM.value.lightRadius = defaultDNAM.lightRadius;
return;
- case 66: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 66: //lightBright
+ DNAM.value.lightBright = defaultDNAM.lightBright;
return;
- case 67: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 67: //noise1UVScale
+ DNAM.value.noise1UVScale = defaultDNAM.noise1UVScale;
return;
- case 68: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 68: //noise2UVScale
+ DNAM.value.noise2UVScale = defaultDNAM.noise2UVScale;
return;
- case 69: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 69: //noise3UVScale
+ DNAM.value.noise3UVScale = defaultDNAM.noise3UVScale;
return;
- case 70: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 70: //noise1AmpScale
+ DNAM.value.noise1AmpScale = defaultDNAM.noise1AmpScale;
return;
- case 71: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 71: //noise2AmpScale
+ DNAM.value.noise2AmpScale = defaultDNAM.noise2AmpScale;
return;
- case 72: //dnam DNAM ,, Struct
- DNAM.Unload();
+ case 72: //noise3AmpScale
+ DNAM.value.noise3AmpScale = defaultDNAM.noise3AmpScale;
return;
- case 73: //gnam GNAM ,, Struct
- GNAM.Unload();
+ case 73: //dayWater
+ GNAM.value.dayWater = defaultGNAM.dayWater;
return;
- case 74: //gnam GNAM ,, Struct
- GNAM.Unload();
+ case 74: //nightWater
+ GNAM.value.nightWater = defaultGNAM.nightWater;
return;
- case 75: //gnam GNAM ,, Struct
- GNAM.Unload();
+ case 75: //underWater
+ GNAM.value.underWater = defaultGNAM.underWater;
return;
default:
return;
diff --git a/CBash/FalloutNewVegas/Records/API/WRLDRecordAPI.cpp b/CBash/FalloutNewVegas/Records/API/WRLDRecordAPI.cpp
index 98031f3..ee60c00 100644
--- a/CBash/FalloutNewVegas/Records/API/WRLDRecordAPI.cpp
+++ b/CBash/FalloutNewVegas/Records/API/WRLDRecordAPI.cpp
@@ -478,6 +478,8 @@ bool WRLDRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
}
break;
case 38: //concSolid
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -486,6 +488,8 @@ bool WRLDRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->concSolid[0], FieldValue, ArraySize);
break;
case 39: //concBroken
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -494,6 +498,8 @@ bool WRLDRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->concBroken[0], FieldValue, ArraySize);
break;
case 40: //metalSolid
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -502,6 +508,8 @@ bool WRLDRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->metalSolid[0], FieldValue, ArraySize);
break;
case 41: //metalHollow
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -510,6 +518,8 @@ bool WRLDRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->metalHollow[0], FieldValue, ArraySize);
break;
case 42: //metalSheet
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -518,6 +528,8 @@ bool WRLDRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->metalSheet[0], FieldValue, ArraySize);
break;
case 43: //wood
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -526,6 +538,8 @@ bool WRLDRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->wood[0], FieldValue, ArraySize);
break;
case 44: //sand
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -534,6 +548,8 @@ bool WRLDRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->sand[0], FieldValue, ArraySize);
break;
case 45: //dirt
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -542,6 +558,8 @@ bool WRLDRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->dirt[0], FieldValue, ArraySize);
break;
case 46: //grass
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
@@ -550,6 +568,8 @@ bool WRLDRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
memcpy(&IMPF->grass[0], FieldValue, ArraySize);
break;
case 47: //water
+ if(FieldValue == NULL)
+ break;
ArraySize = strlen((STRING)FieldValue);
if(ArraySize > 29)
break;
diff --git a/CBash/FalloutNewVegas/Records/CELLRecord.cpp b/CBash/FalloutNewVegas/Records/CELLRecord.cpp
index f368edd..ed0d4c4 100644
--- a/CBash/FalloutNewVegas/Records/CELLRecord.cpp
+++ b/CBash/FalloutNewVegas/Records/CELLRecord.cpp
@@ -702,7 +702,7 @@ SINT32 CELLRecord::WriteRecord(FileWriter &writer)
WRITE(DATA);
WRITE(XCLC);
WRITE(XCLL);
- WRITE(IMPS);
+ WRITE(IMPS);
WRITE(IMPF);
if(LNAM.value != 0 || LTMP.value != 0)
{
diff --git a/CBash/FalloutNewVegas/Records/CSTYRecord.h b/CBash/FalloutNewVegas/Records/CSTYRecord.h
index 23cf4d7..94ce6da 100644
--- a/CBash/FalloutNewVegas/Records/CSTYRecord.h
+++ b/CBash/FalloutNewVegas/Records/CSTYRecord.h
@@ -68,7 +68,7 @@ class CSTYRecord : public FNVRecord //Combat Style
struct CSTYCSSD // Simple
{
FLOAT32 coverRadius, coverChance, waitTimerMin, waitTimerMax,
- waitFireTimerMin, waitFireTimerMax, fireTimerMin,
+ waitFireTimerMin, waitFireTimerMax, fireTimerMin,
fireTimerMax, rangedRangeMultMin;
UINT8 unused1[4];
UINT32 weaponRestrictions;
@@ -96,8 +96,8 @@ class CSTYRecord : public FNVRecord //Combat Style
enum restrictionTypes
{
- eNone = 0,
- eMeleeOnly = 1,
+ eNone = 0,
+ eMeleeOnly = 1,
eRangedOnly = 2
};
diff --git a/CBash/FalloutNewVegas/Records/DEBRRecord.cpp b/CBash/FalloutNewVegas/Records/DEBRRecord.cpp
index 0e8ac48..a7db465 100644
--- a/CBash/FalloutNewVegas/Records/DEBRRecord.cpp
+++ b/CBash/FalloutNewVegas/Records/DEBRRecord.cpp
@@ -24,28 +24,198 @@ GPL License and Copyright Notice ============================================
namespace FNV
{
+DEBRRecord::DEBRModel::DEBRModel():
+ percentage(0),
+ modPath(NULL),
+ flags(0)
+ {
+ //
+ }
+
+DEBRRecord::DEBRModel::~DEBRModel()
+ {
+ delete []modPath;
+ }
+
bool DEBRRecord::DEBRModel::IsHasCollisionData()
{
- if(!Dummy.IsLoaded()) return false;
- return (Dummy->flags & fIsHasCollisionData) != 0;
+ return (flags & fIsHasCollisionData) != 0;
}
void DEBRRecord::DEBRModel::IsHasCollisionData(bool value)
{
- if(!Dummy.IsLoaded()) return;
- Dummy->flags = value ? (Dummy->flags | fIsHasCollisionData) : (Dummy->flags & ~fIsHasCollisionData);
+ flags = value ? (flags | fIsHasCollisionData) : (flags & ~fIsHasCollisionData);
}
bool DEBRRecord::DEBRModel::IsFlagMask(UINT8 Mask, bool Exact)
{
- if(!Dummy.IsLoaded()) return false;
- return Exact ? ((Dummy->flags & Mask) == Mask) : ((Dummy->flags & Mask) != 0);
+ return Exact ? ((flags & Mask) == Mask) : ((flags & Mask) != 0);
}
void DEBRRecord::DEBRModel::SetFlagMask(UINT8 Mask)
{
- Dummy.Load();
- Dummy->flags = Mask;
+ flags = Mask;
+ }
+
+bool DEBRRecord::DEBRModel::Read(unsigned char *buffer, UINT32 subSize, UINT32 &curPos)
+ {
+ if(subSize < 3)
+ {
+ printf("DEBRModel: Warning - Unable to parse chunk (%c%c%c%c). Size "
+ "of chunk (%u) is less than the minimum size of the subrecord (%u). "
+ "The chunk has been skipped.\n",
+ (buffer + curPos)[-6], (buffer + curPos)[-5], (buffer + curPos)[-4], (buffer + curPos)[-3],
+ subSize, 3);
+ curPos += subSize;
+ return false;
+ }
+ memcpy(&percentage, buffer + curPos, 1);
+ curPos += 1;
+
+ UINT32 size = (UINT32)strlen((STRING)(buffer + curPos)) + 1;
+ modPath = new char[size];
+ strcpy_s(modPath, size, (STRING)(buffer + curPos));
+ curPos += size;
+
+ memcpy(&flags, buffer + curPos, 1);
+ curPos += 1;
+
+ size += 2;
+ if(size != subSize)
+ {
+ printf("DEBRModel: Warning - Unable to parse chunk (%c%c%c%c). Size "
+ "of chunk (%u) is not equal to the parsed size (%u). "
+ "The loaded fields are likely corrupt.\n",
+ (buffer + curPos)[-6], (buffer + curPos)[-5], (buffer + curPos)[-4], (buffer + curPos)[-3],
+ subSize, size);
+ }
+ return true;
+ }
+
+void DEBRRecord::DEBRModel::Write(FileWriter &writer)
+ {
+ UINT32 size = 3; //null terminator, percentage, and flags
+ if(modPath != NULL)
+ {
+ size += (UINT32)strlen(modPath);
+ writer.record_write_subheader(REV32(DATA), size);
+ writer.record_write(&percentage, 1);
+ writer.record_write(modPath, size - 2);
+ writer.record_write(&flags, 1);
+ }
+ else
+ {
+ writer.record_write_subheader(REV32(DATA), size);
+ writer.record_write(&percentage, 1);
+ size = 0;
+ writer.record_write(&size, 1); //single null terminator
+ writer.record_write(&flags, 1);
+ }
+ WRITE(MODT);
+ }
+
+bool DEBRRecord::DEBRModel::operator ==(const DEBRModel &other) const
+ {
+ return (flags == other.flags &&
+ percentage == other.percentage &&
+ (icmps(modPath, other.modPath) == 0) &&
+ MODT == other.MODT);
+ }
+
+bool DEBRRecord::DEBRModel::operator !=(const DEBRModel &other) const
+ {
+ return !(*this == other);
+ }
+
+DEBRRecord::DEBRModels::DEBRModels()
+ {
+ //
+ }
+
+DEBRRecord::DEBRModels::~DEBRModels()
+ {
+ Unload();
+ }
+
+bool DEBRRecord::DEBRModels::IsLoaded() const
+ {
+ return (MODS.size() != 0);
+ }
+
+void DEBRRecord::DEBRModels::Load()
+ {
+ //
+ }
+
+void DEBRRecord::DEBRModels::Unload()
+ {
+ for(UINT32 x = 0; x < MODS.size(); ++x)
+ delete MODS[x];
+ MODS.clear();
+ }
+
+void DEBRRecord::DEBRModels::resize(UINT32 newSize)
+ {
+ //Shrink
+ UINT32 size = MODS.size();
+ for(; size > newSize;)
+ delete MODS[--size];
+ MODS.resize(newSize);
+ //Grow
+ for(; size < newSize;)
+ MODS[size++] = new DEBRModel;
+ }
+
+void DEBRRecord::DEBRModels::Write(FileWriter &writer)
+ {
+ for(UINT32 p = 0; p < MODS.size(); p++)
+ MODS[p]->Write(writer);
+ }
+
+DEBRRecord::DEBRModels& DEBRRecord::DEBRModels::operator = (const DEBRModels &rhs)
+ {
+ if(this != &rhs)
+ {
+ Unload();
+ if(rhs.MODS.size() != 0)
+ {
+ MODS.resize(rhs.MODS.size());
+ UINT32 pathSize = 0;
+ for(UINT32 p = 0; p < rhs.MODS.size(); p++)
+ {
+ MODS[p] = new DEBRModel;
+ MODS[p]->percentage = rhs.MODS[p]->percentage;
+
+ if(rhs.MODS[p]->modPath != NULL)
+ {
+ pathSize = (UINT32)strlen(rhs.MODS[p]->modPath) + 1;
+ MODS[p]->modPath = new char[pathSize];
+ strcpy_s(MODS[p]->modPath, pathSize, rhs.MODS[p]->modPath);
+ }
+ MODS[p]->flags = rhs.MODS[p]->flags;
+ }
+ }
+ }
+ return *this;
+ }
+
+bool DEBRRecord::DEBRModels::operator ==(const DEBRModels &other) const
+ {
+ if(MODS.size() == other.MODS.size())
+ {
+ //Not sure if record order matters on debris models, so equality testing is a guess
+ //Fix-up later
+ for(UINT32 x = 0; x < MODS.size(); ++x)
+ if(*MODS[x] != *other.MODS[x])
+ return false;
+ return true;
+ }
+ return false;
+ }
+
+bool DEBRRecord::DEBRModels::operator !=(const DEBRModels &other) const
+ {
+ return !(*this == other);
}
DEBRRecord::DEBRRecord(unsigned char *_recData):
@@ -75,8 +245,7 @@ DEBRRecord::DEBRRecord(DEBRRecord *srcRecord):
}
EDID = srcRecord->EDID;
- DATA = srcRecord->DATA;
- MODT = srcRecord->MODT;
+ Models = srcRecord->Models;
return;
}
@@ -85,15 +254,6 @@ DEBRRecord::~DEBRRecord()
//
}
-bool DEBRRecord::VisitFormIDs(FormIDOp &op)
- {
- if(!IsLoaded())
- return false;
-
-
- return op.Stop();
- }
-
UINT32 DEBRRecord::GetType()
{
return REV32(DEBR);
@@ -130,10 +290,13 @@ SINT32 DEBRRecord::ParseRecord(unsigned char *buffer, const UINT32 &recSize)
EDID.Read(buffer, subSize, curPos);
break;
case REV32(DATA):
- DATA.Read(buffer, subSize, curPos);
+ Models.MODS.push_back(new DEBRModel);
+ Models.MODS.back()->Read(buffer, subSize, curPos);
break;
case REV32(MODT):
- MODT.Read(buffer, subSize, curPos);
+ if(Models.MODS.size() == 0)
+ Models.MODS.push_back(new DEBRModel);
+ Models.MODS.back()->MODT.Read(buffer, subSize, curPos);
break;
default:
//printf("FileName = %s\n", FileName);
@@ -152,25 +315,21 @@ SINT32 DEBRRecord::Unload()
IsChanged(false);
IsLoaded(false);
EDID.Unload();
- DATA.Unload();
- MODT.Unload();
+ Models.Unload();
return 1;
}
SINT32 DEBRRecord::WriteRecord(FileWriter &writer)
{
WRITE(EDID);
- WRITE(DATA);
- WRITE(MODT);
-
+ Models.Write(writer);
return -1;
}
bool DEBRRecord::operator ==(const DEBRRecord &other) const
{
return (EDID.equalsi(other.EDID) &&
- DATA == other.DATA &&
- MODT == other.MODT);
+ Models == other.Models);
}
bool DEBRRecord::operator !=(const DEBRRecord &other) const
diff --git a/CBash/FalloutNewVegas/Records/DEBRRecord.h b/CBash/FalloutNewVegas/Records/DEBRRecord.h
index 658533b..ef395d7 100644
--- a/CBash/FalloutNewVegas/Records/DEBRRecord.h
+++ b/CBash/FalloutNewVegas/Records/DEBRRecord.h
@@ -28,27 +28,20 @@ namespace FNV
class DEBRRecord : public FNVRecord //Debris
{
private:
- struct DEBRDATA
+ struct DEBRModel
{
UINT8 percentage;
- STRING MODL;
+ STRING modPath;
UINT8 flags;
- DEBRDATA();
- ~DEBRDATA();
+ RawRecord MODT;
- bool operator ==(const DEBRDATA &other) const;
- bool operator !=(const DEBRDATA &other) const;
- };
-
- struct DEBRModel // Model
- {
- ReqSubRecord DATA; // Data
- RawRecord MODT; //Texture Files Hashes
+ DEBRModel();
+ ~DEBRModel();
enum flagsFlags
{
- fIsHasCollisionData = 0x00000001
+ fIsHasCollisionData = 0x01
};
bool IsHasCollisionData();
@@ -56,20 +49,41 @@ class DEBRRecord : public FNVRecord //Debris
bool IsFlagMask(UINT8 Mask, bool Exact=false);
void SetFlagMask(UINT8 Mask);
+ bool Read(unsigned char *buffer, UINT32 subSize, UINT32 &curPos);
+ void Write(FileWriter &writer);
+
bool operator ==(const DEBRModel &other) const;
bool operator !=(const DEBRModel &other) const;
};
+ struct DEBRModels
+ {
+ std::vector MODS;
+
+ DEBRModels();
+ ~DEBRModels();
+
+ bool IsLoaded() const;
+ void Load();
+ void Unload();
+
+ void resize(UINT32 newSize);
+
+ void Write(FileWriter &writer);
+
+ DEBRModels& operator = (const DEBRModels &rhs);
+ bool operator ==(const DEBRModels &other) const;
+ bool operator !=(const DEBRModels &other) const;
+ };
+
public:
StringRecord EDID; //Editor ID
- std::vector Models; //Models
+ DEBRModels Models; //Models
DEBRRecord(unsigned char *_recData=NULL);
DEBRRecord(DEBRRecord *srcRecord);
~DEBRRecord();
- bool VisitFormIDs(FormIDOp &op);
-
UINT32 GetFieldAttribute(DEFAULTED_FIELD_IDENTIFIERS, UINT32 WhichAttribute=0);
void * GetField(DEFAULTED_FIELD_IDENTIFIERS, void **FieldValues=NULL);
bool SetField(DEFAULTED_FIELD_IDENTIFIERS, void *FieldValue=NULL, UINT32 ArraySize=0);
diff --git a/CBash/FalloutNewVegas/Records/DIALRecord.cpp b/CBash/FalloutNewVegas/Records/DIALRecord.cpp
index b3225ef..b2e7033 100644
--- a/CBash/FalloutNewVegas/Records/DIALRecord.cpp
+++ b/CBash/FalloutNewVegas/Records/DIALRecord.cpp
@@ -441,7 +441,7 @@ SINT32 DIALRecord::Unload()
{
IsChanged(false);
IsLoaded(false);
-
+
EDID.Unload();
QSTI.Unload();
QSTR.Unload();
diff --git a/CBash/FalloutNewVegas/Records/EFSHRecord.cpp b/CBash/FalloutNewVegas/Records/EFSHRecord.cpp
index 7761819..c50cd5a 100644
--- a/CBash/FalloutNewVegas/Records/EFSHRecord.cpp
+++ b/CBash/FalloutNewVegas/Records/EFSHRecord.cpp
@@ -24,6 +24,173 @@ GPL License and Copyright Notice ============================================
namespace FNV
{
+EFSHRecord::EFSHDATA::EFSHDATA():
+ flags(0),
+ memSBlend(0),
+ memBlendOp(0),
+ memZFunc(0),
+ fillAIn(0.0f),
+ fillAFull(0.0f),
+ fillAOut(0.0f),
+ fillAPRatio(0.0f),
+ fillAAmp(0.0f),
+ fillAFreq(0.0f),
+ fillAnimSpdU(0.0f),
+ fillAnimSpdV(0.0f),
+ edgeEffOff(0.0f),
+ edgeEffAIn(0.0f),
+ edgeEffAFull(0.0f),
+ edgeEffAOut(0.0f),
+ edgeEffAPRatio(0.0f),
+ edgeEffAAmp(0.0f),
+ edgeEffAFreq(0.0f),
+ fillAFRatio(0.0f),
+ edgeEffAFRatio(0.0f),
+ memDBlend(0),
+ partSBlend(0),
+ partBlendOp(0),
+ partZFunc(0),
+ partDBlend(0),
+ partBUp(0.0f),
+ partBFull(0.0f),
+ partBDown(0.0f),
+ partBFRatio(0.0f),
+ partBPRatio(0.0f),
+ partLTime(0.0f),
+ partLDelta(0.0f),
+ partNSpd(0.0f),
+ partNAcc(0.0f),
+ partVel1(0.0f),
+ partVel2(0.0f),
+ partVel3(0.0f),
+ partAcc1(0.0f),
+ partAcc2(0.0f),
+ partAcc3(0.0f),
+ partKey1(0.0f),
+ partKey2(0.0f),
+ partKey1Time(0.0f),
+ partKey2Time(0.0f),
+ key1A(0.0f),
+ key2A(0.0f),
+ key3A(0.0f),
+ key1Time(0.0f),
+ key2Time(0.0f),
+ key3Time(0.0f),
+ partInitSpd(0.0f),
+ partInitRot(0.0f),
+ partInitRotDelta(0.0f),
+ partRotSpd(0.0f),
+ partRotDelta(0.0f),
+ addon(0),
+ holesSTime(0.0f),
+ holesETime(0.0f),
+ holesSValue(0.0f),
+ holesEValue(0.0f),
+ edgeWidth(0.0f),
+ explWindSpd(0.0f),
+ textCountU(0),
+ textCountV(0),
+ addonFITime(0.0f),
+ addonFOTime(0.0f),
+ addonScaleStart(0.0f),
+ addonScaleEnd(0.0f),
+ addonScaleInTime(0.0f),
+ addonScaleOutTime(0.0f)
+ {
+ memset(&unused1[0], 0x00, sizeof(unused1));
+ }
+
+EFSHRecord::EFSHDATA::~EFSHDATA()
+ {
+ //
+ }
+
+bool EFSHRecord::EFSHDATA::operator ==(const EFSHDATA &other) const
+ {
+ return (flags == other.flags &&
+ memSBlend == other.memSBlend &&
+ memBlendOp == other.memBlendOp &&
+ memZFunc == other.memZFunc &&
+ memDBlend == other.memDBlend &&
+ partSBlend == other.partSBlend &&
+ partBlendOp == other.partBlendOp &&
+ partZFunc == other.partZFunc &&
+ partDBlend == other.partDBlend &&
+ addon == other.addon &&
+ fill == other.fill &&
+ edgeEff == other.edgeEff &&
+ key1 == other.key1 &&
+ key2 == other.key2 &&
+ key3 == other.key3 &&
+ edge == other.edge &&
+ textCountU == other.textCountU &&
+ textCountV == other.textCountV &&
+ AlmostEqual(fillAIn,other.fillAIn,2) &&
+ AlmostEqual(fillAFull,other.fillAFull,2) &&
+ AlmostEqual(fillAOut,other.fillAOut,2) &&
+ AlmostEqual(fillAPRatio,other.fillAPRatio,2) &&
+ AlmostEqual(fillAAmp,other.fillAAmp,2) &&
+ AlmostEqual(fillAFreq,other.fillAFreq,2) &&
+ AlmostEqual(fillAnimSpdU,other.fillAnimSpdU,2) &&
+ AlmostEqual(fillAnimSpdV,other.fillAnimSpdV,2) &&
+ AlmostEqual(edgeEffOff,other.edgeEffOff,2) &&
+ AlmostEqual(edgeEffAIn,other.edgeEffAIn,2) &&
+ AlmostEqual(edgeEffAFull,other.edgeEffAFull,2) &&
+ AlmostEqual(edgeEffAOut,other.edgeEffAOut,2) &&
+ AlmostEqual(edgeEffAPRatio,other.edgeEffAPRatio,2) &&
+ AlmostEqual(edgeEffAAmp,other.edgeEffAAmp,2) &&
+ AlmostEqual(edgeEffAFreq,other.edgeEffAFreq,2) &&
+ AlmostEqual(fillAFRatio,other.fillAFRatio,2) &&
+ AlmostEqual(edgeEffAFRatio,other.edgeEffAFRatio,2) &&
+ AlmostEqual(partBUp,other.partBUp,2) &&
+ AlmostEqual(partBFull,other.partBFull,2) &&
+ AlmostEqual(partBDown,other.partBDown,2) &&
+ AlmostEqual(partBFRatio,other.partBFRatio,2) &&
+ AlmostEqual(partBPRatio,other.partBPRatio,2) &&
+ AlmostEqual(partLTime,other.partLTime,2) &&
+ AlmostEqual(partLDelta,other.partLDelta,2) &&
+ AlmostEqual(partNSpd,other.partNSpd,2) &&
+ AlmostEqual(partNAcc,other.partNAcc,2) &&
+ AlmostEqual(partVel1,other.partVel1,2) &&
+ AlmostEqual(partVel2,other.partVel2,2) &&
+ AlmostEqual(partVel3,other.partVel3,2) &&
+ AlmostEqual(partAcc1,other.partAcc1,2) &&
+ AlmostEqual(partAcc2,other.partAcc2,2) &&
+ AlmostEqual(partAcc3,other.partAcc3,2) &&
+ AlmostEqual(partKey1,other.partKey1,2) &&
+ AlmostEqual(partKey2,other.partKey2,2) &&
+ AlmostEqual(partKey1Time,other.partKey1Time,2) &&
+ AlmostEqual(partKey2Time,other.partKey2Time,2) &&
+ AlmostEqual(key1A,other.key1A,2) &&
+ AlmostEqual(key2A,other.key2A,2) &&
+ AlmostEqual(key3A,other.key3A,2) &&
+ AlmostEqual(key1Time,other.key1Time,2) &&
+ AlmostEqual(key2Time,other.key2Time,2) &&
+ AlmostEqual(key3Time,other.key3Time,2) &&
+ AlmostEqual(partInitSpd,other.partInitSpd,2) &&
+ AlmostEqual(partInitRot,other.partInitRot,2) &&
+ AlmostEqual(partInitRotDelta,other.partInitRotDelta,2) &&
+ AlmostEqual(partRotSpd,other.partRotSpd,2) &&
+ AlmostEqual(partRotDelta,other.partRotDelta,2) &&
+ AlmostEqual(holesSTime,other.holesSTime,2) &&
+ AlmostEqual(holesETime,other.holesETime,2) &&
+ AlmostEqual(holesSValue,other.holesSValue,2) &&
+ AlmostEqual(holesEValue,other.holesEValue,2) &&
+ AlmostEqual(edgeWidth,other.edgeWidth,2) &&
+ AlmostEqual(explWindSpd,other.explWindSpd,2) &&
+ AlmostEqual(addonFITime,other.addonFITime,2) &&
+ AlmostEqual(addonFOTime,other.addonFOTime,2) &&
+ AlmostEqual(addonScaleStart,other.addonScaleStart,2) &&
+ AlmostEqual(addonScaleEnd,other.addonScaleEnd,2) &&
+ AlmostEqual(addonScaleInTime,other.addonScaleInTime,2) &&
+ AlmostEqual(addonScaleOutTime,other.addonScaleOutTime,2));
+ }
+
+bool EFSHRecord::EFSHDATA::operator !=(const EFSHDATA &other) const
+ {
+ return !(*this == other);
+ }
+
EFSHRecord::EFSHRecord(unsigned char *_recData):
FNVRecord(_recData)
{
@@ -68,14 +235,11 @@ bool EFSHRecord::VisitFormIDs(FormIDOp &op)
if(!IsLoaded())
return false;
- //if(DATA.IsLoaded()) //FILL IN MANUALLY
- // op.Accept(DATA->value);
+ op.Accept(DATA.value.addon);
return op.Stop();
}
-
-
bool EFSHRecord::IsNoMemShader()
{
return (DATA.value.flags & fIsNoMemShader) != 0;
@@ -229,6 +393,7 @@ SINT32 EFSHRecord::Unload()
{
IsChanged(false);
IsLoaded(false);
+
EDID.Unload();
ICON.Unload();
ICO2.Unload();
@@ -244,17 +409,16 @@ SINT32 EFSHRecord::WriteRecord(FileWriter &writer)
WRITE(ICO2);
WRITE(NAM7);
WRITE(DATA);
-
return -1;
}
bool EFSHRecord::operator ==(const EFSHRecord &other) const
{
- return (EDID.equalsi(other.EDID) &&
+ return (DATA == other.DATA &&
+ EDID.equalsi(other.EDID) &&
ICON.equalsi(other.ICON) &&
ICO2.equalsi(other.ICO2) &&
- NAM7.equalsi(other.NAM7) &&
- DATA == other.DATA);
+ NAM7.equalsi(other.NAM7));
}
bool EFSHRecord::operator !=(const EFSHRecord &other) const
diff --git a/CBash/FalloutNewVegas/Records/EFSHRecord.h b/CBash/FalloutNewVegas/Records/EFSHRecord.h
index 571bbb9..a349578 100644
--- a/CBash/FalloutNewVegas/Records/EFSHRecord.h
+++ b/CBash/FalloutNewVegas/Records/EFSHRecord.h
@@ -76,7 +76,7 @@ class EFSHRecord : public FNVRecord //Effect Shader
StringRecord ICON; //Fill Texture
StringRecord ICO2; //Particle Shader Texture
StringRecord NAM7; //Holes Texture
- OptSubRecord DATA; //DATA ,, Struct
+ ReqSubRecord DATA; //Data
EFSHRecord(unsigned char *_recData=NULL);
EFSHRecord(EFSHRecord *srcRecord);
diff --git a/CBash/FalloutNewVegas/Records/EXPLRecord.cpp b/CBash/FalloutNewVegas/Records/EXPLRecord.cpp
index e0be48c..ba0d271 100644
--- a/CBash/FalloutNewVegas/Records/EXPLRecord.cpp
+++ b/CBash/FalloutNewVegas/Records/EXPLRecord.cpp
@@ -24,6 +24,51 @@ GPL License and Copyright Notice ============================================
namespace FNV
{
+EXPLRecord::EXPLDATA::EXPLDATA():
+ force(0.0f),
+ damage(0.0f),
+ radius(0.0f),
+ light(0),
+ sound1(0),
+ flags(0),
+ ISRadius(0.0f),
+ impactDataSet(0),
+ sound2(0),
+ radLevel(0.0f),
+ radTime(0.0f),
+ radRadius(0.0f),
+ soundLevel(0)
+ {
+ //
+ }
+
+EXPLRecord::EXPLDATA::~EXPLDATA()
+ {
+ //
+ }
+
+bool EXPLRecord::EXPLDATA::operator ==(const EXPLDATA &other) const
+ {
+ return (light == other.light &&
+ sound1 == other.sound1 &&
+ flags == other.flags &&
+ impactDataSet == other.impactDataSet &&
+ sound2 == other.sound2 &&
+ soundLevel == other.soundLevel &&
+ AlmostEqual(force,other.force,2) &&
+ AlmostEqual(damage,other.damage,2) &&
+ AlmostEqual(radius,other.radius,2) &&
+ AlmostEqual(ISRadius,other.ISRadius,2) &&
+ AlmostEqual(radLevel,other.radLevel,2) &&
+ AlmostEqual(radTime,other.radTime,2) &&
+ AlmostEqual(radRadius,other.radRadius,2));
+ }
+
+bool EXPLRecord::EXPLDATA::operator !=(const EXPLDATA &other) const
+ {
+ return !(*this == other);
+ }
+
EXPLRecord::EXPLRecord(unsigned char *_recData):
FNVRecord(_recData)
{
@@ -53,9 +98,7 @@ EXPLRecord::EXPLRecord(EXPLRecord *srcRecord):
EDID = srcRecord->EDID;
OBND = srcRecord->OBND;
FULL = srcRecord->FULL;
-
MODL = srcRecord->MODL;
-
EITM = srcRecord->EITM;
MNAM = srcRecord->MNAM;
DATA = srcRecord->DATA;
@@ -79,159 +122,137 @@ bool EXPLRecord::VisitFormIDs(FormIDOp &op)
op.Accept(MODL->Textures.MODS[x]->texture);
}
if(EITM.IsLoaded())
- op.Accept(EITM->value);
+ op.Accept(EITM.value);
if(MNAM.IsLoaded())
- op.Accept(MNAM->value);
- //if(DATA.IsLoaded()) //FILL IN MANUALLY
- // op.Accept(DATA->value);
+ op.Accept(MNAM.value);
+ op.Accept(DATA.value.light);
+ op.Accept(DATA.value.sound1);
+ op.Accept(DATA.value.impactDataSet);
+ op.Accept(DATA.value.sound2);
if(INAM.IsLoaded())
- op.Accept(INAM->value);
+ op.Accept(INAM.value);
return op.Stop();
}
bool EXPLRecord::IsUnknown1()
{
- if(!Dummy.IsLoaded()) return false;
- return (Dummy->flags & fIsUnknown1) != 0;
+ return (DATA.value.flags & fIsUnknown1) != 0;
}
void EXPLRecord::IsUnknown1(bool value)
{
- if(!Dummy.IsLoaded()) return;
- Dummy->flags = value ? (Dummy->flags | fIsUnknown1) : (Dummy->flags & ~fIsUnknown1);
+ DATA.value.flags = value ? (DATA.value.flags | fIsUnknown1) : (DATA.value.flags & ~fIsUnknown1);
}
bool EXPLRecord::IsAlwaysUsesWorldOrientation()
{
- if(!Dummy.IsLoaded()) return false;
- return (Dummy->flags & fIsAlwaysUsesWorldOrientation) != 0;
+ return (DATA.value.flags & fIsAlwaysUsesWorldOrientation) != 0;
}
void EXPLRecord::IsAlwaysUsesWorldOrientation(bool value)
{
- if(!Dummy.IsLoaded()) return;
- Dummy->flags = value ? (Dummy->flags | fIsAlwaysUsesWorldOrientation) : (Dummy->flags & ~fIsAlwaysUsesWorldOrientation);
+ DATA.value.flags = value ? (DATA.value.flags | fIsAlwaysUsesWorldOrientation) : (DATA.value.flags & ~fIsAlwaysUsesWorldOrientation);
}
bool EXPLRecord::IsAlwaysKnockDown()
{
- if(!Dummy.IsLoaded()) return false;
- return (Dummy->flags & fIsAlwaysKnockDown) != 0;
+ return (DATA.value.flags & fIsAlwaysKnockDown) != 0;
}
void EXPLRecord::IsAlwaysKnockDown(bool value)
{
- if(!Dummy.IsLoaded()) return;
- Dummy->flags = value ? (Dummy->flags | fIsAlwaysKnockDown) : (Dummy->flags & ~fIsAlwaysKnockDown);
+ DATA.value.flags = value ? (DATA.value.flags | fIsAlwaysKnockDown) : (DATA.value.flags & ~fIsAlwaysKnockDown);
}
bool EXPLRecord::IsFormulaKnockDown()
{
- if(!Dummy.IsLoaded()) return false;
- return (Dummy->flags & fIsFormulaKnockDown) != 0;
+ return (DATA.value.flags & fIsFormulaKnockDown) != 0;
}
void EXPLRecord::IsFormulaKnockDown(bool value)
{
- if(!Dummy.IsLoaded()) return;
- Dummy->flags = value ? (Dummy->flags | fIsFormulaKnockDown) : (Dummy->flags & ~fIsFormulaKnockDown);
+ DATA.value.flags = value ? (DATA.value.flags | fIsFormulaKnockDown) : (DATA.value.flags & ~fIsFormulaKnockDown);
}
bool EXPLRecord::IsIgnoreLOS()
{
- if(!Dummy.IsLoaded()) return false;
- return (Dummy->flags & fIsIgnoreLOS) != 0;
+ return (DATA.value.flags & fIsIgnoreLOS) != 0;
}
void EXPLRecord::IsIgnoreLOS(bool value)
{
- if(!Dummy.IsLoaded()) return;
- Dummy->flags = value ? (Dummy->flags | fIsIgnoreLOS) : (Dummy->flags & ~fIsIgnoreLOS);
+ DATA.value.flags = value ? (DATA.value.flags | fIsIgnoreLOS) : (DATA.value.flags & ~fIsIgnoreLOS);
}
bool EXPLRecord::IsPushExplosionSourceRefOnly()
{
- if(!Dummy.IsLoaded()) return false;
- return (Dummy->flags & fIsPushExplosionSourceRefOnly) != 0;
+ return (DATA.value.flags & fIsPushExplosionSourceRefOnly) != 0;
}
void EXPLRecord::IsPushExplosionSourceRefOnly(bool value)
{
- if(!Dummy.IsLoaded()) return;
- Dummy->flags = value ? (Dummy->flags | fIsPushExplosionSourceRefOnly) : (Dummy->flags & ~fIsPushExplosionSourceRefOnly);
+ DATA.value.flags = value ? (DATA.value.flags | fIsPushExplosionSourceRefOnly) : (DATA.value.flags & ~fIsPushExplosionSourceRefOnly);
}
bool EXPLRecord::IsIgnoreImageSpaceSwap()
{
- if(!Dummy.IsLoaded()) return false;
- return (Dummy->flags & fIsIgnoreImageSpaceSwap) != 0;
+ return (DATA.value.flags & fIsIgnoreImageSpaceSwap) != 0;
}
void EXPLRecord::IsIgnoreImageSpaceSwap(bool value)
{
- if(!Dummy.IsLoaded()) return;
- Dummy->flags = value ? (Dummy->flags | fIsIgnoreImageSpaceSwap) : (Dummy->flags & ~fIsIgnoreImageSpaceSwap);
+ DATA.value.flags = value ? (DATA.value.flags | fIsIgnoreImageSpaceSwap) : (DATA.value.flags & ~fIsIgnoreImageSpaceSwap);
}
bool EXPLRecord::IsFlagMask(UINT32 Mask, bool Exact)
{
- if(!Dummy.IsLoaded()) return false;
- return Exact ? ((Dummy->flags & Mask) == Mask) : ((Dummy->flags & Mask) != 0);
+ return Exact ? ((DATA.value.flags & Mask) == Mask) : ((DATA.value.flags & Mask) != 0);
}
void EXPLRecord::SetFlagMask(UINT32 Mask)
{
- Dummy.Load();
- Dummy->flags = Mask;
+ DATA.value.flags = Mask;
}
bool EXPLRecord::IsLoud()
{
- if(!Dummy.IsLoaded()) return false;
- return (Dummy->type == eLoud);
+ return DATA.value.soundLevel == eLoud;
}
void EXPLRecord::IsLoud(bool value)
{
- if(!Dummy.IsLoaded()) return;
- Dummy->flags = value ? eLoud : eDummyDefault;
+ DATA.value.soundLevel = value ? eLoud : eNormal;
}
bool EXPLRecord::IsNormal()
{
- if(!Dummy.IsLoaded()) return false;
- return (Dummy->type == eNormal);
+ return DATA.value.soundLevel == eNormal;
}
void EXPLRecord::IsNormal(bool value)
{
- if(!Dummy.IsLoaded()) return;
- Dummy->flags = value ? eNormal : eDummyDefault;
+ DATA.value.soundLevel = value ? eNormal : eLoud;
}
bool EXPLRecord::IsSilent()
{
- if(!Dummy.IsLoaded()) return false;
- return (Dummy->type == eSilent);
+ return DATA.value.soundLevel == eSilent;
}
void EXPLRecord::IsSilent(bool value)
{
- if(!Dummy.IsLoaded()) return;
- Dummy->flags = value ? eSilent : eDummyDefault;
+ DATA.value.soundLevel = value ? eSilent : eLoud;
}
bool EXPLRecord::IsSoundLevelType(UINT8 Type)
{
- if(!Dummy.IsLoaded()) return false;
- return Dummy->type == Type;
+ return DATA.value.soundLevel == Type;
}
void EXPLRecord::SetSoundLevelType(UINT8 Type)
{
- Dummy.Load();
- Dummy->flags = Mask;
+ DATA.value.soundLevel = Type;
}
UINT32 EXPLRecord::GetType()
@@ -323,6 +344,7 @@ SINT32 EXPLRecord::Unload()
{
IsChanged(false);
IsLoaded(false);
+
EDID.Unload();
OBND.Unload();
FULL.Unload();
@@ -339,27 +361,24 @@ SINT32 EXPLRecord::WriteRecord(FileWriter &writer)
WRITE(EDID);
WRITE(OBND);
WRITE(FULL);
-
MODL.Write(writer);
-
WRITE(EITM);
WRITE(MNAM);
WRITE(DATA);
WRITE(INAM);
-
return -1;
}
bool EXPLRecord::operator ==(const EXPLRecord &other) const
{
- return (EDID.equalsi(other.EDID) &&
- OBND == other.OBND &&
- FULL.equals(other.FULL) &&
- MODL == other.MODL &&
+ return (OBND == other.OBND &&
EITM == other.EITM &&
MNAM == other.MNAM &&
DATA == other.DATA &&
- INAM == other.INAM);
+ INAM == other.INAM &&
+ MODL == other.MODL &&
+ EDID.equalsi(other.EDID) &&
+ FULL.equals(other.FULL));
}
bool EXPLRecord::operator !=(const EXPLRecord &other) const
diff --git a/CBash/FalloutNewVegas/Records/EXPLRecord.h b/CBash/FalloutNewVegas/Records/EXPLRecord.h
index 307e2b6..7832dcd 100644
--- a/CBash/FalloutNewVegas/Records/EXPLRecord.h
+++ b/CBash/FalloutNewVegas/Records/EXPLRecord.h
@@ -70,7 +70,7 @@ class EXPLRecord : public FNVRecord //Explosion
OptSubRecord MODL; //Model
OptSimpleSubRecord EITM; //Object Effect
OptSimpleSubRecord MNAM; //Image Space Modifier
- OptSubRecord DATA; //Data
+ ReqSubRecord DATA; //Data
OptSimpleSubRecord INAM; //Placed Impact Object
EXPLRecord(unsigned char *_recData=NULL);
diff --git a/CBash/FalloutNewVegas/Records/GMSTRecord.cpp b/CBash/FalloutNewVegas/Records/GMSTRecord.cpp
index 0e34ddc..5972b8e 100644
--- a/CBash/FalloutNewVegas/Records/GMSTRecord.cpp
+++ b/CBash/FalloutNewVegas/Records/GMSTRecord.cpp
@@ -66,7 +66,7 @@ bool GMSTRecord::GMSTDATA::operator ==(const GMSTDATA &other) const
switch(format)
{
case 's':
- return strcmp(s, other.s) == 0;
+ return cmps(s, other.s) == 0;
case 'i':
return i == other.i;
case 'f':
diff --git a/CBash/FalloutNewVegas/Records/IDLERecord.h b/CBash/FalloutNewVegas/Records/IDLERecord.h
index 140720b..4b259f4 100644
--- a/CBash/FalloutNewVegas/Records/IDLERecord.h
+++ b/CBash/FalloutNewVegas/Records/IDLERecord.h
@@ -44,13 +44,13 @@ class IDLERecord : public FNVRecord //Idle Animation
enum groupType
{
- eIdle = 0,
- eMovement = 1,
+ eIdle = 0,
+ eMovement = 1,
eLeftArm = 2,
eLeftHand = 3,
- eWeapon = 4,
- eWeaponUp = 5,
- eWeaponDown = 6,
+ eWeapon = 4,
+ eWeaponUp = 5,
+ eWeaponDown = 6,
eSpecialIdle = 7,
eWholeBody = 20,
eUpperBody = 21
@@ -58,7 +58,7 @@ class IDLERecord : public FNVRecord //Idle Animation
enum groupFlag
{
- fIsUnknown1 = 0x40,
+ fIsUnknown1 = 0x40,
fIsNotReturnFile = 0x80
};
diff --git a/CBash/FalloutNewVegas/Records/INFORecord.cpp b/CBash/FalloutNewVegas/Records/INFORecord.cpp
index 18bacc6..e951717 100644
--- a/CBash/FalloutNewVegas/Records/INFORecord.cpp
+++ b/CBash/FalloutNewVegas/Records/INFORecord.cpp
@@ -476,7 +476,7 @@ bool INFORecord::IsTopic()
}
void INFORecord::IsTopic(bool value)
- {
+ {
DATA.value.dialType = value ? eTopic : eConversation;
}
@@ -895,7 +895,7 @@ SINT32 INFORecord::ParseRecord(unsigned char *buffer, const UINT32 &recSize)
break;
}
break;
- case REV32(SLSD):
+ case REV32(SLSD):
switch(lastChunk)
{
case REV32(NONE):
diff --git a/CBash/FalloutNewVegas/Records/LANDRecord.h b/CBash/FalloutNewVegas/Records/LANDRecord.h
index bff59f9..7fdbc27 100644
--- a/CBash/FalloutNewVegas/Records/LANDRecord.h
+++ b/CBash/FalloutNewVegas/Records/LANDRecord.h
@@ -113,7 +113,7 @@ class LANDRecord : public FNVRecord //Landscape
struct LANDLAYERS
{
ReqSubRecord ATXT;
- UnorderedPackedArray VTXT; //Actually ordered...
+ UnorderedPackedArray VTXT; //Actually ordered...
//Record order doesn't matter on opacities, so equality testing isn't easy
//Instead, they're keyed by position (VTXT.value.position)
//The proper solution would be to see if the opacity at each position matches
diff --git a/CBash/FalloutNewVegas/Records/PACKRecord.h b/CBash/FalloutNewVegas/Records/PACKRecord.h
index 12b2cd3..e5399ef 100644
--- a/CBash/FalloutNewVegas/Records/PACKRecord.h
+++ b/CBash/FalloutNewVegas/Records/PACKRecord.h
@@ -118,60 +118,60 @@ class PACKRecord : public FNVRecord //Package
enum flagsFlags
{
- fIsOffersServices = 0x00000001,
- fIsMustReachLocation = 0x00000002,
- fIsMustComplete = 0x00000004,
- fIsLockAtStart = 0x00000008,
- fIsLockAtEnd = 0x00000010,
- fIsLockAtLocation = 0x00000020,
- fIsUnlockAtStart = 0x00000040,
- fIsUnlockAtEnd = 0x00000080,
- fIsUnlockAtLocation = 0x00000100,
- fIsContinueIfPcNear = 0x00000200,
- fIsOncePerDay = 0x00000400,
- fIsSkipFallout = 0x00001000,
- fIsAlwaysRun = 0x00002000,
- fIsAlwaysSneak = 0x00020000,
- fIsAllowSwimming = 0x00040000,
- fIsAllowFalls = 0x00080000,
+ fIsOffersServices = 0x00000001,
+ fIsMustReachLocation = 0x00000002,
+ fIsMustComplete = 0x00000004,
+ fIsLockAtStart = 0x00000008,
+ fIsLockAtEnd = 0x00000010,
+ fIsLockAtLocation = 0x00000020,
+ fIsUnlockAtStart = 0x00000040,
+ fIsUnlockAtEnd = 0x00000080,
+ fIsUnlockAtLocation = 0x00000100,
+ fIsContinueIfPcNear = 0x00000200,
+ fIsOncePerDay = 0x00000400,
+ fIsSkipFallout = 0x00001000,
+ fIsAlwaysRun = 0x00002000,
+ fIsAlwaysSneak = 0x00020000,
+ fIsAllowSwimming = 0x00040000,
+ fIsAllowFalls = 0x00080000,
fIsHeadTrackingOff = 0x00100000,
- fIsUnequipWeapons = 0x00200000,
- fIsDefensiveCombat = 0x00400000,
+ fIsUnequipWeapons = 0x00200000,
+ fIsDefensiveCombat = 0x00400000,
fIsWeaponDrawn = 0x00800000,
- fIsNoIdleAnims = 0x01000000,
- fIsPretendInCombat = 0x02000000,
- fIsContinueDuringCombat = 0x04000000,
- fIsNoCombatAlert = 0x08000000,
- fIsNoWarnAttackBehavior = 0x10000000
+ fIsNoIdleAnims = 0x01000000,
+ fIsPretendInCombat = 0x02000000,
+ fIsContinueDuringCombat = 0x04000000,
+ fIsNoCombatAlert = 0x08000000,
+ fIsNoWarnAttackBehavior = 0x10000000
};
enum behaviorFlags
{
- fIsHellosToPlayer = 0x00000001,
- fIsRandomConversations = 0x00000002,
- fIsObserveCombatBehavior = 0x00000004,
- fIsUnknown4 = 0x00000008,
+ fIsHellosToPlayer = 0x00000001,
+ fIsRandomConversations = 0x00000002,
+ fIsObserveCombatBehavior = 0x00000004,
+ fIsUnknown4 = 0x00000008,
fIsReactionToPlayerActions = 0x00000010,
- fIsFriendlyFireComments = 0x00000020,
- fIsAggroRadiusBehavior = 0x00000040,
- fIsAllowIdleChatter = 0x00000080,
- fIsAvoidRadiation = 0x00000100
+ fIsFriendlyFireComments = 0x00000020,
+ fIsAggroRadiusBehavior = 0x00000040,
+ fIsAllowIdleChatter = 0x00000080,
+ fIsAvoidRadiation = 0x00000100
};
enum specificFlags
{
- fIsHide = 0x00000001, //Ambush only
- fIsNoEating = 0x00000001,
- fIsNoSleeping = 0x00000002,
- fIsSitDown = 0x00000002, //Use Item At only
- fIsNoConversation = 0x00000004,
+ fIsHide = 0x00000001, //Ambush only
+ fIsNoEating = 0x00000001,
+ fIsNoSleeping = 0x00000002,
+ fIsSitDown = 0x00000002, //Use Item At only
+ fIsNoConversation = 0x00000004,
fIsRemainNearReference = 0x00000004, //Guard only
- fIsNoIdleMarkers = 0x00000008,
- fIsNoFurniture = 0x00000010,
- fIsNoWandering = 0x00000020,
- fIsAllowBuying = 0x00000100,
- fIsAllowKilling = 0x00000200,
- fIsAllowStealing = 0x00000400
+ fIsNoIdleMarkers = 0x00000008,
+ fIsNoFurniture = 0x00000010,
+ fIsNoWandering = 0x00000020,
+ fIsAllowBuying = 0x00000100,
+ fIsAllowKilling = 0x00000200,
+ fIsAllowStealing = 0x00000400
};
enum aiTypeType
@@ -187,11 +187,11 @@ class PACKRecord : public FNVRecord //Package
eAIUseItemAt = 8,
eAIAmbush = 9,
eAIFleeNotCombat = 10,
- eAISandbox = 12,
- eAIPatrol = 13,
- eAIGuard = 14,
- eAIDialogue = 15,
- eAIUseWeapon = 16
+ eAISandbox = 12,
+ eAIPatrol = 13,
+ eAIGuard = 14,
+ eAIDialogue = 15,
+ eAIUseWeapon = 16
};
enum locTypeType
@@ -208,25 +208,25 @@ class PACKRecord : public FNVRecord //Package
enum schedDayType
{
- eAnyDay = -1,
- eSunday = 0,
- eMonday = 1,
- eTuesday = 2,
+ eAnyDay = -1,
+ eSunday = 0,
+ eMonday = 1,
+ eTuesday = 2,
eWednesday = 3,
- eThursday = 4,
- eFriday = 5,
- eSaturday = 6,
- eWeekdays = 7,
- eWeekends = 8,
- eMWF = 9,
- eTTh = 10
+ eThursday = 4,
+ eFriday = 5,
+ eSaturday = 6,
+ eWeekdays = 7,
+ eWeekends = 8,
+ eMWF = 9,
+ eTTh = 10
};
enum targetTypeType
{
- eTargetReference = 0,
- eTargetObjectID = 1,
- eTargetObjectType = 2,
+ eTargetReference = 0,
+ eTargetObjectID = 1,
+ eTargetObjectType = 2,
eTargetLinkedReference = 3
};
@@ -239,7 +239,7 @@ class PACKRecord : public FNVRecord //Package
enum pkptTypes
{
eNotRepeatable = 0,
- eRepeatable = 1
+ eRepeatable = 1
};
enum weaponFlags
@@ -252,14 +252,14 @@ class PACKRecord : public FNVRecord //Package
enum weaponRateTypes
{
- eAutoFire = 0,
+ eAutoFire = 0,
eVolleyFire = 1
};
enum weaponFireTypes
{
eNumberOfBursts = 0,
- eRepeatFire = 1
+ eRepeatFire = 1
};
enum dialogueFlags
@@ -271,7 +271,7 @@ class PACKRecord : public FNVRecord //Package
enum dialogueTypes
{
eConversation = 0,
- eSayTo = 1
+ eSayTo = 1
};
enum schrFlags
diff --git a/CBash/FalloutNewVegas/Records/QUSTRecord.cpp b/CBash/FalloutNewVegas/Records/QUSTRecord.cpp
index 964d24c..5622c0e 100644
--- a/CBash/FalloutNewVegas/Records/QUSTRecord.cpp
+++ b/CBash/FalloutNewVegas/Records/QUSTRecord.cpp
@@ -155,7 +155,7 @@ void QUSTRecord::QUSTEntry::Write(FileWriter &writer)
SCR_.Write(writer, true);
WRITE(NAM0);
}
-
+
bool QUSTRecord::QUSTEntry::operator ==(const QUSTEntry &other) const
{
return (QSDT == other.QSDT &&
@@ -173,7 +173,7 @@ bool QUSTRecord::QUSTEntry::operator !=(const QUSTEntry &other) const
{
return !(*this == other);
}
-
+
void QUSTRecord::QUSTStage::Write(FileWriter &writer)
{
WRITE(INDX);
@@ -233,13 +233,13 @@ void QUSTRecord::QUSTTarget::SetFlagMask(UINT8 Mask)
{
QSTA.value.flags = Mask;
}
-
+
void QUSTRecord::QUSTTarget::Write(FileWriter &writer)
{
WRITE(QSTA);
CTDA.Write(REV32(CTDA), writer, true);
}
-
+
bool QUSTRecord::QUSTTarget::operator ==(const QUSTTarget &other) const
{
return (QSTA == other.QSTA &&
@@ -250,7 +250,7 @@ bool QUSTRecord::QUSTTarget::operator !=(const QUSTTarget &other) const
{
return !(*this == other);
}
-
+
void QUSTRecord::QUSTObjective::Write(FileWriter &writer)
{
WRITE(QOBJ);
diff --git a/CBash/FalloutNewVegas/Records/QUSTRecord.h b/CBash/FalloutNewVegas/Records/QUSTRecord.h
index cd4ad0b..f367a39 100644
--- a/CBash/FalloutNewVegas/Records/QUSTRecord.h
+++ b/CBash/FalloutNewVegas/Records/QUSTRecord.h
@@ -158,7 +158,7 @@ class QUSTRecord : public FNVRecord //Quest
fIsStartEnabled = 0x00000001,
fIsRepeatedTopics = 0x00000004,
fIsRepeatedStages = 0x00000008,
- fIsUnknown = 0x00000010
+ fIsUnknown = 0x00000010
};
public:
diff --git a/CBash/FalloutNewVegas/Records/WATRRecord.cpp b/CBash/FalloutNewVegas/Records/WATRRecord.cpp
index a5e6310..947670e 100644
--- a/CBash/FalloutNewVegas/Records/WATRRecord.cpp
+++ b/CBash/FalloutNewVegas/Records/WATRRecord.cpp
@@ -24,6 +24,148 @@ GPL License and Copyright Notice ============================================
namespace FNV
{
+WATRRecord::WATRDNAM::WATRDNAM():
+ unknown1(0.0f),
+ unknown2(0.0f),
+ unknown3(0.0f),
+ unknown4(0.0f),
+ sunPower(50.0f),
+ reflectAmt(0.50f),
+ fresnelAmt(0.020f),
+ fogNear(0.0f),
+ fogFar(0.0f),
+ rainForce(0.40f),
+ rainVelocity(0.60f),
+ rainFalloff(0.9850f),
+ rainDampner(10.0f),
+ dispSize(0.010f),
+ dispForce(0.10f),
+ dispVelocity(0.60f),
+ dispFalloff(0.9850f),
+ dispDampner(2.0f),
+ rainSize(0.050f),
+ normalsNoiseScale(1.0f),
+ noise1Direction(1.0f),
+ noise2Direction(1.0f),
+ noise3Direction(1.0f),
+ noise1Speed(1.0f),
+ noise2Speed(1.0f),
+ noise3Speed(1.0f),
+ normalsFalloffStart(0.0f),
+ normalsFalloffEnd(0.0f),
+ fogAmt(1.0f),
+ normalsUVScale(500.0f),
+ underFogAmt(1.0f),
+ underFogNear(0.0f),
+ underFogFar(1000.0f),
+ distAmt(250.0f),
+ shininess(100.0f),
+ hdrMult(1.0f),
+ lightRadius(10000.0f),
+ lightBright(1.0f),
+ noise1UVScale(100.0f),
+ noise2UVScale(100.0f),
+ noise3UVScale(100.0f),
+ noise1AmpScale(0.0f),
+ noise2AmpScale(0.0f),
+ noise3AmpScale(0.0f)
+ {
+ shallow.green = 128;
+ shallow.blue = 128;
+ deep.blue = 25;
+ refl.red = 255;
+ refl.green = 255;
+ refl.blue = 255;
+ memset(&unused1[0], 0x00, sizeof(unused1));
+ memset(&unused2[0], 0x00, sizeof(unused2));
+ }
+
+WATRRecord::WATRDNAM::~WATRDNAM()
+ {
+ //
+ }
+
+bool WATRRecord::WATRDNAM::operator ==(const WATRDNAM &other) const
+ {
+ return (shallow == other.shallow &&
+ deep == other.deep &&
+ refl == other.refl &&
+ AlmostEqual(unknown1,other.unknown1,2) &&
+ AlmostEqual(unknown2,other.unknown2,2) &&
+ AlmostEqual(unknown3,other.unknown3,2) &&
+ AlmostEqual(unknown4,other.unknown4,2) &&
+ AlmostEqual(sunPower,other.sunPower,2) &&
+ AlmostEqual(reflectAmt,other.reflectAmt,2) &&
+ AlmostEqual(fresnelAmt,other.fresnelAmt,2) &&
+ AlmostEqual(fogNear,other.fogNear,2) &&
+ AlmostEqual(fogFar,other.fogFar,2) &&
+ AlmostEqual(rainForce,other.rainForce,2) &&
+ AlmostEqual(rainVelocity,other.rainVelocity,2) &&
+ AlmostEqual(rainFalloff,other.rainFalloff,2) &&
+ AlmostEqual(rainDampner,other.rainDampner,2) &&
+ AlmostEqual(dispSize,other.dispSize,2) &&
+ AlmostEqual(dispForce,other.dispForce,2) &&
+ AlmostEqual(dispVelocity,other.dispVelocity,2) &&
+ AlmostEqual(dispFalloff,other.dispFalloff,2) &&
+ AlmostEqual(dispDampner,other.dispDampner,2) &&
+ AlmostEqual(rainSize,other.rainSize,2) &&
+ AlmostEqual(normalsNoiseScale,other.normalsNoiseScale,2) &&
+ AlmostEqual(noise1Direction,other.noise1Direction,2) &&
+ AlmostEqual(noise2Direction,other.noise2Direction,2) &&
+ AlmostEqual(noise3Direction,other.noise3Direction,2) &&
+ AlmostEqual(noise1Speed,other.noise1Speed,2) &&
+ AlmostEqual(noise2Speed,other.noise2Speed,2) &&
+ AlmostEqual(noise3Speed,other.noise3Speed,2) &&
+ AlmostEqual(normalsFalloffStart,other.normalsFalloffStart,2) &&
+ AlmostEqual(normalsFalloffEnd,other.normalsFalloffEnd,2) &&
+ AlmostEqual(fogAmt,other.fogAmt,2) &&
+ AlmostEqual(normalsUVScale,other.normalsUVScale,2) &&
+ AlmostEqual(underFogAmt,other.underFogAmt,2) &&
+ AlmostEqual(underFogNear,other.underFogNear,2) &&
+ AlmostEqual(underFogFar,other.underFogFar,2) &&
+ AlmostEqual(distAmt,other.distAmt,2) &&
+ AlmostEqual(shininess,other.shininess,2) &&
+ AlmostEqual(hdrMult,other.hdrMult,2) &&
+ AlmostEqual(lightRadius,other.lightRadius,2) &&
+ AlmostEqual(lightBright,other.lightBright,2) &&
+ AlmostEqual(noise1UVScale,other.noise1UVScale,2) &&
+ AlmostEqual(noise2UVScale,other.noise2UVScale,2) &&
+ AlmostEqual(noise3UVScale,other.noise3UVScale,2) &&
+ AlmostEqual(noise1AmpScale,other.noise1AmpScale,2) &&
+ AlmostEqual(noise2AmpScale,other.noise2AmpScale,2) &&
+ AlmostEqual(noise3AmpScale,other.noise3AmpScale,2));
+ }
+
+bool WATRRecord::WATRDNAM::operator !=(const WATRDNAM &other) const
+ {
+ return !(*this == other);
+ }
+
+WATRRecord::WATRGNAM::WATRGNAM():
+ dayWater(0),
+ nightWater(0),
+ underWater(0)
+ {
+ //
+ }
+
+WATRRecord::WATRGNAM::~WATRGNAM()
+ {
+ //
+ }
+
+bool WATRRecord::WATRGNAM::operator ==(const WATRGNAM &other) const
+ {
+ return (dayWater == other.dayWater &&
+ nightWater == other.nightWater &&
+ underWater == other.underWater);
+ }
+
+bool WATRRecord::WATRGNAM::operator !=(const WATRGNAM &other) const
+ {
+ return !(*this == other);
+ }
+
WATRRecord::WATRRecord(unsigned char *_recData):
FNVRecord(_recData)
{
@@ -75,53 +217,54 @@ bool WATRRecord::VisitFormIDs(FormIDOp &op)
return false;
if(SNAM.IsLoaded())
- op.Accept(SNAM->value);
+ op.Accept(SNAM.value);
if(XNAM.IsLoaded())
- op.Accept(XNAM->value);
- //if(GNAM.IsLoaded()) //FILL IN MANUALLY
- // op.Accept(GNAM->value);
+ op.Accept(XNAM.value);
+ op.Accept(GNAM.value.dayWater);
+ op.Accept(GNAM.value.nightWater);
+ op.Accept(GNAM.value.underWater);
return op.Stop();
}
bool WATRRecord::IsCausesDmg()
{
- return (FNAM.value.value & fIsCausesDamage) != 0;
+ return (FNAM.value & fIsCausesDamage) != 0;
}
void WATRRecord::IsCausesDmg(bool value)
{
- FNAM.value.value = value ? (FNAM.value.value | fIsCausesDamage) : (FNAM.value.value & ~fIsCausesDamage);
+ FNAM.value = value ? (FNAM.value | fIsCausesDamage) : (FNAM.value & ~fIsCausesDamage);
}
bool WATRRecord::IsCausesDamage()
{
- return (FNAM.value.value & fIsCausesDamage) != 0;
+ return (FNAM.value & fIsCausesDamage) != 0;
}
void WATRRecord::IsCausesDamage(bool value)
{
- FNAM.value.value = value ? (FNAM.value.value | fIsCausesDamage) : (FNAM.value.value & ~fIsCausesDamage);
+ FNAM.value = value ? (FNAM.value | fIsCausesDamage) : (FNAM.value & ~fIsCausesDamage);
}
bool WATRRecord::IsReflective()
{
- return (FNAM.value.value & fIsReflective) != 0;
+ return (FNAM.value & fIsReflective) != 0;
}
void WATRRecord::IsReflective(bool value)
{
- FNAM.value.value = value ? (FNAM.value.value | fIsReflective) : (FNAM.value.value & ~fIsReflective);
+ FNAM.value = value ? (FNAM.value | fIsReflective) : (FNAM.value & ~fIsReflective);
}
bool WATRRecord::IsFlagMask(UINT8 Mask, bool Exact)
{
- return Exact ? ((FNAM.value.value & Mask) == Mask) : ((FNAM.value.value & Mask) != 0);
+ return Exact ? ((FNAM.value & Mask) == Mask) : ((FNAM.value & Mask) != 0);
}
void WATRRecord::SetFlagMask(UINT8 Mask)
{
- FNAM.value.value = Mask;
+ FNAM.value = Mask;
}
UINT32 WATRRecord::GetType()
@@ -181,7 +324,25 @@ SINT32 WATRRecord::ParseRecord(unsigned char *buffer, const UINT32 &recSize)
XNAM.Read(buffer, subSize, curPos);
break;
case REV32(DATA):
- DATA.Read(buffer, subSize, curPos);
+ switch(subSize)
+ {
+ case sizeof(DATA.value):
+ DATA.Read(buffer, subSize, curPos);
+ break;
+ case 186:
+ //last field of older DATA format is damage, and rest are congruent with DNAM
+ //last three fields of DNAM will be at their default value
+ DNAM.Read(buffer, subSize - 2, curPos);
+ DATA.Read(buffer, 2, curPos);
+ break;
+ default:
+ printf(" WATR: %08X - Unexpected DATA size\n", formID);
+ CBASH_CHUNK_DEBUG
+ printf(" Size = %i\n", subSize);
+ printf(" CurPos = %04x\n\n", curPos - 6);
+ curPos += subSize;
+ break;
+ }
break;
case REV32(DNAM):
DNAM.Read(buffer, subSize, curPos);
@@ -192,6 +353,7 @@ SINT32 WATRRecord::ParseRecord(unsigned char *buffer, const UINT32 &recSize)
default:
//printf("FileName = %s\n", FileName);
printf(" WATR: %08X - Unknown subType = %04x\n", formID, subType);
+ CBASH_CHUNK_DEBUG
printf(" Size = %i\n", subSize);
printf(" CurPos = %04x\n\n", curPos - 6);
curPos = recSize;
@@ -205,6 +367,7 @@ SINT32 WATRRecord::Unload()
{
IsChanged(false);
IsLoaded(false);
+
EDID.Unload();
FULL.Unload();
NNAM.Unload();
@@ -223,32 +386,31 @@ SINT32 WATRRecord::WriteRecord(FileWriter &writer)
{
WRITE(EDID);
WRITE(FULL);
- WRITE(NNAM);
+ WRITEREQ(NNAM);
WRITE(ANAM);
WRITE(FNAM);
- WRITE(MNAM);
+ WRITEREQ(MNAM);
WRITE(SNAM);
WRITE(XNAM);
WRITE(DATA);
WRITE(DNAM);
WRITE(GNAM);
-
return -1;
}
bool WATRRecord::operator ==(const WATRRecord &other) const
{
- return (EDID.equalsi(other.EDID) &&
- FULL.equals(other.FULL) &&
- NNAM.equalsi(other.NNAM) &&
- ANAM == other.ANAM &&
+ return (ANAM == other.ANAM &&
FNAM == other.FNAM &&
- MNAM.equalsi(other.MNAM) &&
SNAM == other.SNAM &&
XNAM == other.XNAM &&
- DATA == other.DATA &&
DNAM == other.DNAM &&
- GNAM == other.GNAM);
+ GNAM == other.GNAM &&
+ DATA == other.DATA &&
+ EDID.equalsi(other.EDID) &&
+ FULL.equals(other.FULL) &&
+ NNAM.equalsi(other.NNAM) &&
+ MNAM.equalsi(other.MNAM));
}
bool WATRRecord::operator !=(const WATRRecord &other) const
diff --git a/CBash/FalloutNewVegas/Records/WATRRecord.h b/CBash/FalloutNewVegas/Records/WATRRecord.h
index 6197def..7538577 100644
--- a/CBash/FalloutNewVegas/Records/WATRRecord.h
+++ b/CBash/FalloutNewVegas/Records/WATRRecord.h
@@ -28,17 +28,6 @@ namespace FNV
class WATRRecord : public FNVRecord //Water
{
private:
- struct WATRANAM
- {
- UINT8 opacity;
-
- WATRANAM();
- ~WATRANAM();
-
- bool operator ==(const WATRANAM &other) const;
- bool operator !=(const WATRANAM &other) const;
- };
-
struct WATRDNAM
{
FLOAT32 unknown1, unknown2, unknown3, unknown4,
@@ -51,23 +40,22 @@ class WATRRecord : public FNVRecord //Water
UINT8 unused2[4];
FLOAT32 rainForce, rainVelocity, rainFalloff, rainDampner,
dispSize, dispForce, dispVelocity, dispFalloff,
- dispDampner, rainSize, noiseScale, noise1Direction,
+ dispDampner, rainSize, normalsNoiseScale, noise1Direction,
noise2Direction, noise3Direction, noise1Speed,
- noise2Speed, noise3Speed, noiseFalloffStart,
- noiseFalloffEnd, underFogAmt, uvScale, underFogAmt,
+ noise2Speed, noise3Speed, normalsFalloffStart,
+ normalsFalloffEnd, fogAmt, normalsUVScale, underFogAmt,
underFogNear, underFogFar, distAmt, shininess,
hdrMult, lightRadius, lightBright, noise1UVScale,
noise2UVScale, noise3UVScale;
- //Missing in old format (DATA, not DNAM)
+ //Below aren't on older DATA, and also a few DNAM
FLOAT32 noise1AmpScale, noise2AmpScale, noise3AmpScale;
- UINT16 damage;
- WATRDATA();
- ~WATRDATA();
+ WATRDNAM();
+ ~WATRDNAM();
- bool operator ==(const WATRDATA &other) const;
- bool operator !=(const WATRDATA &other) const;
+ bool operator ==(const WATRDNAM &other) const;
+ bool operator !=(const WATRDNAM &other) const;
};
struct WATRGNAM
@@ -83,21 +71,21 @@ class WATRRecord : public FNVRecord //Water
enum flagsFlags
{
- fIsCausesDamage = 0x00000001,
- fIsReflective = 0x00000002
+ fIsCausesDamage = 0x01,
+ fIsReflective = 0x02
};
public:
StringRecord EDID; //Editor ID
StringRecord FULL; //Name
StringRecord NNAM; //Noise Map
- OptSubRecord ANAM; //Opacity
- OptSimpleSubRecord FNAM; //Flags
+ ReqSimpleSubRecord ANAM; // opacity
+ ReqSimpleSubRecord FNAM; //Flags
StringRecord MNAM; //Material ID
OptSimpleSubRecord SNAM; //Sound
OptSimpleSubRecord XNAM; //Actor Effect
- OptSimpleSubRecord DATA; //Damage
- OptSubRecord DNAM; //Visual Data (May be listed as DATA in old format, auto upgrade to DNAM on read)
- OptSubRecord GNAM; //Related Waters (Unused)
+ ReqSimpleSubRecord DATA; //Damage (May be 186 size struct (older format))
+ ReqSubRecord DNAM; //Visual Data (May be listed as DATA an old format, auto upgrade to DNAM on read)
+ ReqSubRecord GNAM; //Related Waters (Unused)
WATRRecord(unsigned char *_recData=NULL);
WATRRecord(WATRRecord *srcRecord);
diff --git a/CBash/FalloutNewVegas/Records/WRLDRecord.cpp b/CBash/FalloutNewVegas/Records/WRLDRecord.cpp
index 21e8b93..0ca2dfb 100644
--- a/CBash/FalloutNewVegas/Records/WRLDRecord.cpp
+++ b/CBash/FalloutNewVegas/Records/WRLDRecord.cpp
@@ -104,9 +104,9 @@ bool WRLDRecord::VisitSubRecords(const UINT32 &RecordType, RecordOp &op)
// }
// }
- if(RecordType == NULL ||
+ if(RecordType == NULL ||
RecordType != REV32(CELL) ||
- RecordType != REV32(ACHR) ||
+ RecordType != REV32(ACHR) ||
RecordType != REV32(ACRE) ||
RecordType != REV32(REFR) ||
RecordType != REV32(PGRE) ||
diff --git a/CBash/GRUPRecord.h b/CBash/GRUPRecord.h
index 9793726..f073b56 100644
--- a/CBash/GRUPRecord.h
+++ b/CBash/GRUPRecord.h
@@ -3614,7 +3614,7 @@ class FNVGRUPRecords
Temporary.push_back(curCell->NAVM[y]);
if(CloseMod)
curCell->NAVM.clear();
-
+
numChildren = (UINT32)VWD.size() + (UINT32)Temporary.size();
if(numChildren)
{
diff --git a/CBash/GenericChunks.cpp b/CBash/GenericChunks.cpp
index 0553c37..9ee561f 100644
--- a/CBash/GenericChunks.cpp
+++ b/CBash/GenericChunks.cpp
@@ -2249,7 +2249,7 @@ bool FNVMODS::operator ==(const FNVMODS &other) const
{
return (texture == other.texture &&
index == other.index &&
- _stricmp(name, other.name) == 0);
+ icmps(name, other.name) == 0);
}
bool FNVMODS::operator !=(const FNVMODS &other) const
@@ -4144,16 +4144,16 @@ GENIMPF::~GENIMPF()
bool GENIMPF::operator ==(const GENIMPF &other) const
{
- return (strcmp(&concSolid[0], &other.concSolid[0]) == 0 &&
- strcmp(&concBroken[0], &other.concBroken[0]) == 0 &&
- strcmp(&metalSolid[0], &other.metalSolid[0]) == 0 &&
- strcmp(&metalHollow[0], &other.metalHollow[0]) == 0 &&
- strcmp(&metalSheet[0], &other.metalSheet[0]) == 0 &&
- strcmp(&wood[0], &other.wood[0]) == 0 &&
- strcmp(&sand[0], &other.sand[0]) == 0 &&
- strcmp(&dirt[0], &other.dirt[0]) == 0 &&
- strcmp(&grass[0], &other.grass[0]) == 0 &&
- strcmp(&water[0], &other.water[0]) == 0);
+ return (cmps(&concSolid[0], &other.concSolid[0]) == 0 &&
+ cmps(&concBroken[0], &other.concBroken[0]) == 0 &&
+ cmps(&metalSolid[0], &other.metalSolid[0]) == 0 &&
+ cmps(&metalHollow[0], &other.metalHollow[0]) == 0 &&
+ cmps(&metalSheet[0], &other.metalSheet[0]) == 0 &&
+ cmps(&wood[0], &other.wood[0]) == 0 &&
+ cmps(&sand[0], &other.sand[0]) == 0 &&
+ cmps(&dirt[0], &other.dirt[0]) == 0 &&
+ cmps(&grass[0], &other.grass[0]) == 0 &&
+ cmps(&water[0], &other.water[0]) == 0);
}
bool GENIMPF::operator !=(const GENIMPF &other) const
diff --git a/CBash/ModFile.cpp b/CBash/ModFile.cpp
index 94fb3fd..32cba75 100644
--- a/CBash/ModFile.cpp
+++ b/CBash/ModFile.cpp
@@ -38,7 +38,7 @@ ModFile::ModFile(STRING FileName, STRING ModName, const UINT32 _flags):
Flags.IsIgnoreExisting = true;
TES4.IsLoaded(true);
STRING const _Name = reader.getModName();
- TES4.IsESM(_stricmp(".esm",_Name + strlen(_Name) - 4) == 0);
+ TES4.IsESM(icmps(".esm",_Name + strlen(_Name) - 4) == 0);
}
}
diff --git a/CBash/Oblivion/Records/API/GMSTRecordAPI.cpp b/CBash/Oblivion/Records/API/GMSTRecordAPI.cpp
index 25baa74..c99b514 100644
--- a/CBash/Oblivion/Records/API/GMSTRecordAPI.cpp
+++ b/CBash/Oblivion/Records/API/GMSTRecordAPI.cpp
@@ -113,10 +113,13 @@ bool GMSTRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
switch(DATA.format)
{
case 's':
- delete []DATA.s;
- ArraySize = (UINT32)strlen((STRING)FieldValue) + 1;
- DATA.s = new char[ArraySize];
- strcpy_s(DATA.s, ArraySize, (STRING)FieldValue);
+ if(FieldValue != NULL)
+ {
+ delete []DATA.s;
+ ArraySize = (UINT32)strlen((STRING)FieldValue) + 1;
+ DATA.s = new char[ArraySize];
+ strcpy_s(DATA.s, ArraySize, (STRING)FieldValue);
+ }
break;
case 'i':
DATA.i = *(SINT32 *)FieldValue;
@@ -155,14 +158,13 @@ void GMSTRecord::DeleteField(FIELD_IDENTIFIERS)
{
case 's':
delete []DATA.s;
+ DATA.s = defaultDATA.s;
if(defaultDATA.s != NULL)
{
ArraySize = (UINT32)strlen(defaultDATA.s) + 1;
DATA.s = new char[ArraySize];
strcpy_s(DATA.s, ArraySize, defaultDATA.s);
}
- else
- DATA.s = defaultDATA.s;
return;
case 'i':
DATA.i = defaultDATA.i;
diff --git a/CBash/Oblivion/Records/CREARecord.cpp b/CBash/Oblivion/Records/CREARecord.cpp
index bcb9ad5..c87ce1d 100644
--- a/CBash/Oblivion/Records/CREARecord.cpp
+++ b/CBash/Oblivion/Records/CREARecord.cpp
@@ -1004,8 +1004,8 @@ SINT32 CREARecord::ParseRecord(unsigned char *buffer, const UINT32 &recSize)
SPLO.push_back(curFormID);
break;
case REV32(NIFZ):
- for(subSize += curPos;curPos < (subSize - 1);curPos += (UINT32)strlen((char*)&buffer[curPos]) + 1)
- NIFZ.push_back(StringRecord((char*)&buffer[curPos]));
+ for(subSize += curPos;curPos < (subSize - 1);curPos += (UINT32)strlen((STRING)&buffer[curPos]) + 1)
+ NIFZ.push_back(StringRecord((STRING)&buffer[curPos]));
curPos++;
break;
case REV32(NIFT):
@@ -1044,8 +1044,8 @@ SINT32 CREARecord::ParseRecord(unsigned char *buffer, const UINT32 &recSize)
PKID.push_back(curFormID);
break;
case REV32(KFFZ):
- for(subSize += curPos;curPos < (subSize - 1);curPos += (UINT32)strlen((char*)&buffer[curPos]) + 1)
- KFFZ.push_back(StringRecord((char*)&buffer[curPos]));
+ for(subSize += curPos;curPos < (subSize - 1);curPos += (UINT32)strlen((STRING)&buffer[curPos]) + 1)
+ KFFZ.push_back(StringRecord((STRING)&buffer[curPos]));
curPos++;
break;
case REV32(DATA):
diff --git a/CBash/Oblivion/Records/GMSTRecord.cpp b/CBash/Oblivion/Records/GMSTRecord.cpp
index 748e21e..e9849c2 100644
--- a/CBash/Oblivion/Records/GMSTRecord.cpp
+++ b/CBash/Oblivion/Records/GMSTRecord.cpp
@@ -64,7 +64,7 @@ bool GMSTRecord::GMSTDATA::operator ==(const GMSTDATA &other) const
switch(format)
{
case 's':
- return strcmp(s, other.s) == 0;
+ return cmps(s, other.s) == 0;
case 'i':
return i == other.i;
case 'f':
@@ -114,9 +114,12 @@ GMSTRecord::GMSTRecord(GMSTRecord *srcRecord):
DATA.i = srcRecord->DATA.i;
break;
case 's':
- vSize = (UINT32)strlen(srcRecord->DATA.s) + 1;
- DATA.s = new char [vSize];
- strcpy_s(DATA.s, vSize, srcRecord->DATA.s);
+ if(srcRecord->DATA.s != NULL)
+ {
+ vSize = (UINT32)strlen(srcRecord->DATA.s) + 1;
+ DATA.s = new char [vSize];
+ strcpy_s(DATA.s, vSize, srcRecord->DATA.s);
+ }
break;
default:
break;
diff --git a/CBash/Oblivion/Records/NPC_Record.cpp b/CBash/Oblivion/Records/NPC_Record.cpp
index ab89552..e13afd6 100644
--- a/CBash/Oblivion/Records/NPC_Record.cpp
+++ b/CBash/Oblivion/Records/NPC_Record.cpp
@@ -615,8 +615,8 @@ SINT32 NPC_Record::ParseRecord(unsigned char *buffer, const UINT32 &recSize)
PKID.push_back(curFormID);
break;
case REV32(KFFZ):
- for(subSize += curPos;curPos < (subSize - 1);curPos += (UINT32)strlen((char*)&buffer[curPos]) + 1)
- KFFZ.push_back(StringRecord((char*)&buffer[curPos]));
+ for(subSize += curPos;curPos < (subSize - 1);curPos += (UINT32)strlen((STRING)&buffer[curPos]) + 1)
+ KFFZ.push_back(StringRecord((STRING)&buffer[curPos]));
curPos++;
break;
case REV32(CNAM):
diff --git a/release/CBash.dll b/release/CBash.dll
index 28c214e..5b52ba0 100644
Binary files a/release/CBash.dll and b/release/CBash.dll differ
diff --git a/release/FNVTest.py b/release/FNVTest.py
index 8744d75..2e387be 100644
--- a/release/FNVTest.py
+++ b/release/FNVTest.py
@@ -101,83 +101,83 @@ def TestRegressions():
Current.load()
newMod = Current.LookupModFile("TestRegressions.esp")
- assertTES4(Current, newMod)
- assertGMST(Current, newMod)
- assertTXST(Current, newMod)
- assertMICN(Current, newMod)
- assertGLOB(Current, newMod)
- assertCLAS(Current, newMod)
- assertFACT(Current, newMod)
- assertHDPT(Current, newMod)
- assertHAIR(Current, newMod)
- assertEYES(Current, newMod)
- assertRACE(Current, newMod)
- assertSOUN(Current, newMod)
- assertASPC(Current, newMod)
- assertMGEF(Current, newMod)
- assertSCPT(Current, newMod)
- assertLTEX(Current, newMod)
- assertENCH(Current, newMod)
- assertSPEL(Current, newMod)
- assertACTI(Current, newMod)
- assertTACT(Current, newMod)
- assertTERM(Current, newMod)
- assertARMO(Current, newMod)
- assertBOOK(Current, newMod)
- assertCONT(Current, newMod)
- assertDOOR(Current, newMod)
- assertINGR(Current, newMod)
- assertLIGH(Current, newMod)
- assertMISC(Current, newMod)
- assertSTAT(Current, newMod)
- assertSCOL(Current, newMod)
- assertMSTT(Current, newMod)
- assertPWAT(Current, newMod)
- assertGRAS(Current, newMod)
-## newMod.save()
- assertTREE(Current, newMod)
- assertFURN(Current, newMod)
- assertWEAP(Current, newMod)
- assertAMMO(Current, newMod)
- assertNPC_(Current, newMod)
- assertCREA(Current, newMod)
- assertLVLC(Current, newMod)
- assertLVLN(Current, newMod)
- assertKEYM(Current, newMod)
- assertALCH(Current, newMod)
- assertIDLM(Current, newMod)
- assertNOTE(Current, newMod)
- assertCOBJ(Current, newMod)
- assertPROJ(Current, newMod)
- assertLVLI(Current, newMod)
- assertWTHR(Current, newMod)
- assertCLMT(Current, newMod)
- assertREGN(Current, newMod)
- assertNAVI(Current, newMod)
- assertCELL(Current, newMod)
- assertACHR(Current, newMod)
- assertACRE(Current, newMod)
- assertREFR(Current, newMod)
- assertPGRE(Current, newMod)
- assertPMIS(Current, newMod)
- assertPBEA(Current, newMod)
- assertPFLA(Current, newMod)
- assertPCBE(Current, newMod)
- assertNAVM(Current, newMod)
- assertWRLD(Current, newMod)
- assertLAND(Current, newMod)
- assertDIAL(Current, newMod)
- assertINFO(Current, newMod)
- assertQUST(Current, newMod)
- assertIDLE(Current, newMod)
- assertPACK(Current, newMod)
- assertCSTY(Current, newMod)
- assertLSCR(Current, newMod)
- ## assertANIO(Current, newMod)
- ## assertWATR(Current, newMod)
- ## assertEFSH(Current, newMod)
- ## assertEXPL(Current, newMod)
- ## assertDEBR(Current, newMod)
+ ## assertTES4(Current, newMod)
+ ## assertGMST(Current, newMod)
+ ## assertTXST(Current, newMod)
+ ## assertMICN(Current, newMod)
+ ## assertGLOB(Current, newMod)
+ ## assertCLAS(Current, newMod)
+ ## assertFACT(Current, newMod)
+ ## assertHDPT(Current, newMod)
+ ## assertHAIR(Current, newMod)
+ ## assertEYES(Current, newMod)
+ ## assertRACE(Current, newMod)
+ ## assertSOUN(Current, newMod)
+ ## assertASPC(Current, newMod)
+ ## assertMGEF(Current, newMod)
+ ## assertSCPT(Current, newMod)
+ ## assertLTEX(Current, newMod)
+ ## assertENCH(Current, newMod)
+ ## assertSPEL(Current, newMod)
+ ## assertACTI(Current, newMod)
+ ## assertTACT(Current, newMod)
+ ## assertTERM(Current, newMod)
+ ## assertARMO(Current, newMod)
+ ## assertBOOK(Current, newMod)
+ ## assertCONT(Current, newMod)
+ ## assertDOOR(Current, newMod)
+ ## assertINGR(Current, newMod)
+ ## assertLIGH(Current, newMod)
+ ## assertMISC(Current, newMod)
+ ## assertSTAT(Current, newMod)
+ ## assertSCOL(Current, newMod)
+ ## assertMSTT(Current, newMod)
+ ## assertPWAT(Current, newMod)
+ ## assertGRAS(Current, newMod)
+ #### newMod.save()
+ #### assertTREE(Current, newMod)
+ #### assertFURN(Current, newMod)
+ #### assertWEAP(Current, newMod)
+ #### assertAMMO(Current, newMod)
+ #### assertNPC_(Current, newMod)
+ #### assertCREA(Current, newMod)
+ #### assertLVLC(Current, newMod)
+ #### assertLVLN(Current, newMod)
+ #### assertKEYM(Current, newMod)
+ #### assertALCH(Current, newMod)
+ #### assertIDLM(Current, newMod)
+ #### assertNOTE(Current, newMod)
+ #### assertCOBJ(Current, newMod)
+ #### assertPROJ(Current, newMod)
+ #### assertLVLI(Current, newMod)
+ #### assertWTHR(Current, newMod)
+ #### assertCLMT(Current, newMod)
+ #### assertREGN(Current, newMod)
+ #### assertNAVI(Current, newMod)
+ #### assertCELL(Current, newMod)
+ #### assertACHR(Current, newMod)
+ #### assertACRE(Current, newMod)
+ #### assertREFR(Current, newMod)
+ #### assertPGRE(Current, newMod)
+ #### assertPMIS(Current, newMod)
+ #### assertPBEA(Current, newMod)
+ #### assertPFLA(Current, newMod)
+ #### assertPCBE(Current, newMod)
+ #### assertNAVM(Current, newMod)
+ #### assertWRLD(Current, newMod)
+ #### assertLAND(Current, newMod)
+ #### assertDIAL(Current, newMod)
+ #### assertINFO(Current, newMod)
+ #### assertQUST(Current, newMod)
+ #### assertIDLE(Current, newMod)
+ #### assertPACK(Current, newMod)
+ #### assertCSTY(Current, newMod)
+ #### assertLSCR(Current, newMod)
+ assertANIO(Current, newMod)
+ assertWATR(Current, newMod)
+ assertEFSH(Current, newMod)
+ assertEXPL(Current, newMod)
+ assertDEBR(Current, newMod)
## assertIMGS(Current, newMod)
## assertIMAD(Current, newMod)
## assertFLST(Current, newMod)
@@ -12319,40 +12319,250 @@ def TestReadWrite():
## wrldCell.DeleteRecord()
## record.DeleteRecord()
##
- for record in Current.LoadOrderMods[0].DIAL:
- trgRecOver = record.CopyAsOverride(newMod)
- trgRecNew = record.CopyAsNew(newMod)
- for objRef in record.INFO:
- objRef.CopyAsOverride(trgRecOver)
- objRef.CopyAsNew(trgRecNew)
- objRef.DeleteRecord()
- record.DeleteRecord()
+## for record in Current.LoadOrderMods[0].DIAL:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## for objRef in record.INFO:
+## objRef.CopyAsOverride(trgRecOver)
+## objRef.CopyAsNew(trgRecNew)
+## objRef.DeleteRecord()
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].QUST:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].IDLE:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].PACK:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].CSTY:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].LSCR:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
- for record in Current.LoadOrderMods[0].QUST:
+ for record in Current.LoadOrderMods[0].ANIO:
trgRecOver = record.CopyAsOverride(newMod)
trgRecNew = record.CopyAsNew(newMod)
record.DeleteRecord()
- for record in Current.LoadOrderMods[0].IDLE:
+ for record in Current.LoadOrderMods[0].WATR:
trgRecOver = record.CopyAsOverride(newMod)
trgRecNew = record.CopyAsNew(newMod)
record.DeleteRecord()
- for record in Current.LoadOrderMods[0].PACK:
+ for record in Current.LoadOrderMods[0].EFSH:
trgRecOver = record.CopyAsOverride(newMod)
trgRecNew = record.CopyAsNew(newMod)
record.DeleteRecord()
- for record in Current.LoadOrderMods[0].CSTY:
+ for record in Current.LoadOrderMods[0].EXPL:
trgRecOver = record.CopyAsOverride(newMod)
trgRecNew = record.CopyAsNew(newMod)
record.DeleteRecord()
- for record in Current.LoadOrderMods[0].LSCR:
+ for record in Current.LoadOrderMods[0].DEBR:
trgRecOver = record.CopyAsOverride(newMod)
trgRecNew = record.CopyAsNew(newMod)
record.DeleteRecord()
+## for record in Current.LoadOrderMods[0].IMGS:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].IMAD:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].FLST:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].PERK:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].BPTD:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].ADDN:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].AVIF:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].RADS:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].CAMS:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].CPTH:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].VTYP:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].IPCT:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].IPDS:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].ARMA:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].ECZN:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].MESG:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].RGDL:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].DOBJ:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].LGTM:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].MUSC:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].IMOD:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].REPU:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].RCPE:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].RCCT:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].CHIP:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].CSNO:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].LSCT:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].MSET:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].ALOC:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].CHAL:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].AMEF:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].CCRD:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].CMNY:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].CDCK:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].DEHY:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].HUNG:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+##
+## for record in Current.LoadOrderMods[0].SLPD:
+## trgRecOver = record.CopyAsOverride(newMod)
+## trgRecNew = record.CopyAsNew(newMod)
+## record.DeleteRecord()
+
print "TestReadWrite:Save Test - TestRW.esp"
## phonenumber = raw_input(">")
@@ -12411,5 +12621,5 @@ def TestReadWrite():
##del Current
##phonenumber = raw_input("!")
-##TestRegressions()
-TestReadWrite()
\ No newline at end of file
+TestRegressions()
+##TestReadWrite()
diff --git a/release/cint-template.py b/release/cint-template.py
index 897866c..7b6c32a 100644
--- a/release/cint-template.py
+++ b/release/cint-template.py
@@ -8236,28 +8236,341 @@ class Location(ListComponent):
class FnvANIORecord(FnvBaseRecord):
_Type = 'ANIO'
-
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ ISTRING_MACRO(modPath, 7)
+ FLOAT32_MACRO(modb, 8)
+ UINT8_ARRAY_MACRO(modt_p, 9)
+
+ LIST_MACRO(altTextures, 10, FNVAltTexture)
+ UINT8_FLAG_MACRO(modelFlags, 11)
+ FORMID_MACRO(animation, 12)
+ copyattrs = FnvBaseRecord.baseattrs + ['modPath', 'modb', 'modt_p',
+ 'altTextures_list',
+ 'modelFlags', 'animation']
+ exportattrs = FnvBaseRecord.baseattrs + ['modPath', 'modb',
+ 'altTextures_list',
+ 'modelFlags', 'animation']# 'modt_p',
class FnvWATRRecord(FnvBaseRecord):
_Type = 'WATR'
-
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ STRING_MACRO(full, 7)
+ ISTRING_MACRO(noisePath, 8)
+ UINT8_MACRO(opacity, 9)
+ UINT8_MACRO(flags, 10)
+ ISTRING_MACRO(material, 11)
+ FORMID_MACRO(sound, 12)
+ FORMID_MACRO(effect, 13)
+ UINT16_MACRO(damage, 14)
+ FLOAT32_MACRO(unknown1, 15)
+ FLOAT32_MACRO(unknown2, 16)
+ FLOAT32_MACRO(unknown3, 17)
+ FLOAT32_MACRO(unknown4, 18)
+ FLOAT32_MACRO(sunPower, 19)
+ FLOAT32_MACRO(reflectAmt, 20)
+ FLOAT32_MACRO(fresnelAmt, 21)
+ UINT8_ARRAY_MACRO(unused1, 22, 4)
+ FLOAT32_MACRO(fogNear, 23)
+ FLOAT32_MACRO(fogFar, 24)
+ UINT8_MACRO(shallowRed, 25)
+ UINT8_MACRO(shallowGreen, 26)
+ UINT8_MACRO(shallowBlue, 27)
+ UINT8_ARRAY_MACRO(unused2, 28, 1)
+ UINT8_MACRO(deepRed, 29)
+ UINT8_MACRO(deepGreen, 30)
+ UINT8_MACRO(deepBlue, 31)
+ UINT8_ARRAY_MACRO(unused3, 32, 1)
+ UINT8_MACRO(reflRed, 33)
+ UINT8_MACRO(reflGreen, 34)
+ UINT8_MACRO(reflBlue, 35)
+ UINT8_ARRAY_MACRO(unused4, 36, 1)
+ UINT8_ARRAY_MACRO(unused5, 37, 4)
+ FLOAT32_MACRO(rainForce, 38)
+ FLOAT32_MACRO(rainVelocity, 39)
+ FLOAT32_MACRO(rainFalloff, 40)
+ FLOAT32_MACRO(rainDampner, 41)
+ FLOAT32_MACRO(dispSize, 42)
+ FLOAT32_MACRO(dispForce, 43)
+ FLOAT32_MACRO(dispVelocity, 44)
+ FLOAT32_MACRO(dispFalloff, 45)
+ FLOAT32_MACRO(dispDampner, 46)
+ FLOAT32_MACRO(rainSize, 47)
+ FLOAT32_MACRO(normalsNoiseScale, 48)
+ FLOAT32_MACRO(noise1Direction, 49)
+ FLOAT32_MACRO(noise2Direction, 50)
+ FLOAT32_MACRO(noise3Direction, 51)
+ FLOAT32_MACRO(noise1Speed, 52)
+ FLOAT32_MACRO(noise2Speed, 53)
+ FLOAT32_MACRO(noise3Speed, 54)
+ FLOAT32_MACRO(normalsFalloffStart, 55)
+ FLOAT32_MACRO(normalsFalloffEnd, 56)
+ FLOAT32_MACRO(fogAmt, 57)
+ FLOAT32_MACRO(normalsUVScale, 58)
+ FLOAT32_MACRO(underFogAmt, 59)
+ FLOAT32_MACRO(underFogNear, 60)
+ FLOAT32_MACRO(underFogFar, 61)
+ FLOAT32_MACRO(distAmt, 62)
+ FLOAT32_MACRO(shininess, 63)
+ FLOAT32_MACRO(hdrMult, 64)
+ FLOAT32_MACRO(lightRadius, 65)
+ FLOAT32_MACRO(lightBright, 66)
+ FLOAT32_MACRO(noise1UVScale, 67)
+ FLOAT32_MACRO(noise2UVScale, 68)
+ FLOAT32_MACRO(noise3UVScale, 69)
+ FLOAT32_MACRO(noise1AmpScale, 70)
+ FLOAT32_MACRO(noise2AmpScale, 71)
+ FLOAT32_MACRO(noise3AmpScale, 72)
+ FORMID_MACRO(dayWater, 73)
+ FORMID_MACRO(nightWater, 74)
+ FORMID_MACRO(underWater, 75)
+ BasicFlagMACRO(IsCausesDamage, flags, 0x01)
+ BasicFlagMACRO(IsReflective, flags, 0x02)
+ exportattrs = copyattrs = FnvBaseRecord.baseattrs + ['full', 'noisePath', 'opacity', 'flags',
+ 'material', 'sound', 'effect', 'damage',
+ 'unknown1', 'unknown2', 'unknown3', 'unknown4',
+ 'sunPower', 'reflectAmt', 'fresnelAmt',
+ 'fogNear', 'fogFar',
+ 'shallowRed', 'shallowGreen', 'shallowBlue',
+ 'deepRed', 'deepGreen', 'deepBlue',
+ 'reflRed', 'reflGreen', 'reflBlue',
+ 'rainForce', 'rainVelocity', 'rainFalloff',
+ 'rainDampner', 'dispSize', 'dispForce',
+ 'dispVelocity', 'dispFalloff', 'dispDampner',
+ 'rainSize', 'normalsNoiseScale',
+ 'noise1Direction', 'noise2Direction', 'noise3Direction',
+ 'noise1Speed', 'noise2Speed', 'noise3Speed',
+ 'normalsFalloffStart', 'normalsFalloffEnd',
+ 'fogAmt', 'normalsUVScale', 'underFogAmt', 'underFogNear',
+ 'underFogFar', 'distAmt', 'shininess', 'hdrMult',
+ 'lightRadius', 'lightBright',
+ 'noise1UVScale', 'noise2UVScale', 'noise3UVScale',
+ 'noise1AmpScale', 'noise2AmpScale', 'noise3AmpScale',
+ 'dayWater', 'nightWater', 'underWater']
class FnvEFSHRecord(FnvBaseRecord):
_Type = 'EFSH'
-
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ ISTRING_MACRO(fillPath, 7)
+ ISTRING_MACRO(particlePath, 8)
+ ISTRING_MACRO(holesPath, 9)
+ UINT8_FLAG_MACRO(flags, 10)
+ UINT8_ARRAY_MACRO(unused1, 11, 3)
+ UINT32_MACRO(memSBlend, 12)
+ UINT32_MACRO(memBlendOp, 13)
+ UINT32_MACRO(memZFunc, 14)
+ UINT8_MACRO(fillRed, 15)
+ UINT8_MACRO(fillGreen, 16)
+ UINT8_MACRO(fillBlue, 17)
+ UINT8_ARRAY_MACRO(unused2, 18, 1)
+ FLOAT32_MACRO(fillAIn, 19)
+ FLOAT32_MACRO(fillAFull, 20)
+ FLOAT32_MACRO(fillAOut, 21)
+ FLOAT32_MACRO(fillAPRatio, 22)
+ FLOAT32_MACRO(fillAAmp, 23)
+ FLOAT32_MACRO(fillAFreq, 24)
+ FLOAT32_MACRO(fillAnimSpdU, 25)
+ FLOAT32_MACRO(fillAnimSpdV, 26)
+ FLOAT32_MACRO(edgeEffOff, 27)
+ UINT8_MACRO(edgeEffRed, 28)
+ UINT8_MACRO(edgeEffGreen, 29)
+ UINT8_MACRO(edgeEffBlue, 30)
+ UINT8_ARRAY_MACRO(unused3, 31, 1)
+ FLOAT32_MACRO(edgeEffAIn, 32)
+ FLOAT32_MACRO(edgeEffAFull, 33)
+ FLOAT32_MACRO(edgeEffAOut, 34)
+ FLOAT32_MACRO(edgeEffAPRatio, 35)
+ FLOAT32_MACRO(edgeEffAAmp, 36)
+ FLOAT32_MACRO(edgeEffAFreq, 37)
+ FLOAT32_MACRO(fillAFRatio, 38)
+ FLOAT32_MACRO(edgeEffAFRatio, 39)
+ UINT32_MACRO(memDBlend, 40)
+ UINT32_MACRO(partSBlend, 41)
+ UINT32_MACRO(partBlendOp, 42)
+ UINT32_MACRO(partZFunc, 43)
+ UINT32_MACRO(partDBlend, 44)
+ FLOAT32_MACRO(partBUp, 45)
+ FLOAT32_MACRO(partBFull, 46)
+ FLOAT32_MACRO(partBDown, 47)
+ FLOAT32_MACRO(partBFRatio, 48)
+ FLOAT32_MACRO(partBPRatio, 49)
+ FLOAT32_MACRO(partLTime, 50)
+ FLOAT32_MACRO(partLDelta, 51)
+ FLOAT32_MACRO(partNSpd, 52)
+ FLOAT32_MACRO(partNAcc, 53)
+ FLOAT32_MACRO(partVel1, 54)
+ FLOAT32_MACRO(partVel2, 55)
+ FLOAT32_MACRO(partVel3, 56)
+ FLOAT32_MACRO(partAcc1, 57)
+ FLOAT32_MACRO(partAcc2, 58)
+ FLOAT32_MACRO(partAcc3, 59)
+ FLOAT32_MACRO(partKey1, 60)
+ FLOAT32_MACRO(partKey2, 61)
+ FLOAT32_MACRO(partKey1Time, 62)
+ FLOAT32_MACRO(partKey2Time, 63)
+ UINT8_MACRO(key1Red, 64)
+ UINT8_MACRO(key1Green, 65)
+ UINT8_MACRO(key1Blue, 66)
+ UINT8_ARRAY_MACRO(unused4, 67, 1)
+ UINT8_MACRO(key2Red, 68)
+ UINT8_MACRO(key2Green, 69)
+ UINT8_MACRO(key2Blue, 70)
+ UINT8_ARRAY_MACRO(unused5, 71, 1)
+ UINT8_MACRO(key3Red, 72)
+ UINT8_MACRO(key3Green, 73)
+ UINT8_MACRO(key3Blue, 74)
+ UINT8_ARRAY_MACRO(unused6, 75, 1)
+ FLOAT32_MACRO(key1A, 76)
+ FLOAT32_MACRO(key2A, 77)
+ FLOAT32_MACRO(key3A, 78)
+ FLOAT32_MACRO(key1Time, 79)
+ FLOAT32_MACRO(key2Time, 80)
+ FLOAT32_MACRO(key3Time, 81)
+ FLOAT32_MACRO(partInitSpd, 82)
+ FLOAT32_MACRO(partInitRot, 83)
+ FLOAT32_MACRO(partInitRotDelta, 84)
+ FLOAT32_MACRO(partRotSpd, 85)
+ FLOAT32_MACRO(partRotDelta, 86)
+ FORMID_MACRO(addon, 87)
+ FLOAT32_MACRO(holesSTime, 88)
+ FLOAT32_MACRO(holesETime, 89)
+ FLOAT32_MACRO(holesSValue, 90)
+ FLOAT32_MACRO(holesEValue, 91)
+ FLOAT32_MACRO(edgeWidth, 92)
+ UINT8_MACRO(edgeRed, 93)
+ UINT8_MACRO(edgeGreen, 94)
+ UINT8_MACRO(edgeBlue, 95)
+ UINT8_ARRAY_MACRO(unused7, 96, 1)
+ FLOAT32_MACRO(explWindSpd, 97)
+ UINT32_MACRO(textCountU, 98)
+ UINT32_MACRO(textCountV, 99)
+ FLOAT32_MACRO(addonFITime, 100)
+ FLOAT32_MACRO(addonFOTime, 101)
+ FLOAT32_MACRO(addonScaleStart, 102)
+ FLOAT32_MACRO(addonScaleEnd, 103)
+ FLOAT32_MACRO(addonScaleInTime, 104)
+ FLOAT32_MACRO(addonScaleOutTime, 105)
+
+ BasicFlagMACRO(IsNoMemShader, flags, 0x00000001)
+ BasicFlagMACRO(IsNoPartShader, flags, 0x00000008)
+ BasicFlagMACRO(IsEdgeInverse, flags, 0x00000010)
+ BasicFlagMACRO(IsMemSkinOnly, flags, 0x00000020)
+ exportattrs = copyattrs = FnvBaseRecord.baseattrs + ['fillPath', 'particlePath', 'holesPath',
+ 'flags', 'memSBlend', 'memBlendOp',
+ 'memZFunc',
+ 'fillRed', 'fillGreen', 'fillBlue',
+ 'fillAIn', 'fillAFull', 'fillAOut',
+ 'fillAPRatio', 'fillAAmp', 'fillAFreq',
+ 'fillAnimSpdU', 'fillAnimSpdV',
+ 'edgeEffOff',
+ 'edgeEffRed', 'edgeEffGreen', 'edgeEffBlue',
+ 'edgeEffAIn', 'edgeEffAFull', 'edgeEffAOut',
+ 'edgeEffAPRatio', 'edgeEffAAmp',
+ 'edgeEffAFreq', 'fillAFRatio',
+ 'edgeEffAFRatio', 'memDBlend', 'partSBlend',
+ 'partBlendOp', 'partZFunc', 'partDBlend',
+ 'partBUp', 'partBFull', 'partBDown',
+ 'partBFRatio', 'partBPRatio', 'partLTime',
+ 'partLDelta', 'partNSpd', 'partNAcc',
+ 'partVel1', 'partVel2', 'partVel3',
+ 'partAcc1', 'partAcc2', 'partAcc3',
+ 'partKey1', 'partKey2',
+ 'partKey1Time', 'partKey2Time',
+ 'key1Red', 'key1Green', 'key1Blue',
+ 'key2Red', 'key2Green', 'key2Blue',
+ 'key3Red', 'key3Green', 'key3Blue',
+ 'key1A', 'key2A', 'key3A',
+ 'key1Time', 'key2Time', 'key3Time',
+ 'partInitSpd', 'partInitRot',
+ 'partInitRotDelta', 'partRotSpd',
+ 'partRotDelta', 'addon', 'holesSTime',
+ 'holesETime', 'holesSValue', 'holesEValue',
+ 'edgeWidth',
+ 'edgeRed', 'edgeGreen', 'edgeBlue',
+ 'explWindSpd', 'textCountU', 'textCountV',
+ 'addonFITime', 'addonFOTime',
+ 'addonScaleStart', 'addonScaleEnd',
+ 'addonScaleInTime', 'addonScaleOutTime']
class FnvEXPLRecord(FnvBaseRecord):
_Type = 'EXPL'
-
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ SINT16_MACRO(boundX1, 7)
+ SINT16_MACRO(boundY1, 8)
+ SINT16_MACRO(boundZ1, 9)
+ SINT16_MACRO(boundX2, 10)
+ SINT16_MACRO(boundY2, 11)
+ SINT16_MACRO(boundZ2, 12)
+ STRING_MACRO(full, 13)
+ ISTRING_MACRO(modPath, 14)
+ FLOAT32_MACRO(modb, 15)
+ UINT8_ARRAY_MACRO(modt_p, 16)
+
+ LIST_MACRO(altTextures, 17, FNVAltTexture)
+ UINT8_FLAG_MACRO(modelFlags, 18)
+ FORMID_MACRO(effect, 19)
+ FORMID_MACRO(imageSpace, 20)
+ FLOAT32_MACRO(force, 21)
+ FLOAT32_MACRO(damage, 22)
+ FLOAT32_MACRO(radius, 23)
+ FORMID_MACRO(light, 24)
+ FORMID_MACRO(sound1, 25)
+ UINT32_FLAG_MACRO(flags, 26)
+ FLOAT32_MACRO(ISRadius, 27)
+ FORMID_MACRO(impactDataSet, 28)
+ FORMID_MACRO(sound2, 29)
+ FLOAT32_MACRO(radLevel, 30)
+ FLOAT32_MACRO(radTime, 31)
+ FLOAT32_MACRO(radRadius, 32)
+ UINT32_MACRO(soundLevel, 33)
+ FORMID_MACRO(impact, 34)
+
+ BasicFlagMACRO(IsUnknown1, flags, 0x00000001)
+ BasicFlagMACRO(IsAlwaysUsesWorldOrientation, flags, 0x00000002)
+ BasicFlagMACRO(IsAlwaysKnockDown, flags, 0x00000004)
+ BasicFlagMACRO(IsFormulaKnockDown, flags, 0x00000008)
+ BasicFlagMACRO(IsIgnoreLOS, flags, 0x00000010)
+ BasicFlagMACRO(IsPushExplosionSourceRefOnly, flags, 0x00000020)
+ BasicFlagMACRO(IsIgnoreImageSpaceSwap, flags, 0x00000040)
+
+ BasicFlagMACRO(IsHead, modelFlags, 0x01)
+ BasicFlagMACRO(IsTorso, modelFlags, 0x02)
+ BasicFlagMACRO(IsRightHand, modelFlags, 0x04)
+ BasicFlagMACRO(IsLeftHand, modelFlags, 0x08)
+
+ BasicTypeMACRO(IsLoud, soundLevel, 0, IsNormal)
+ BasicTypeMACRO(IsNormal, soundLevel, 1, IsLoud)
+ BasicTypeMACRO(IsSilent, soundLevel, 2, IsLoud)
+ copyattrs = FnvBaseRecord.baseattrs + ['boundX1', 'boundY1', 'boundZ1',
+ 'boundX2', 'boundY2', 'boundZ2',
+ 'full', 'modPath', 'modb', 'modt_p',
+ 'altTextures_list', 'modelFlags',
+ 'effect', 'imageSpace', 'force',
+ 'damage', 'radius', 'light',
+ 'sound1', 'flags', 'ISRadius',
+ 'impactDataSet', 'sound2',
+ 'radLevel', 'radTime',
+ 'radRadius', 'soundLevel', 'impact']
+ exportattrs = FnvBaseRecord.baseattrs + ['boundX1', 'boundY1', 'boundZ1',
+ 'boundX2', 'boundY2', 'boundZ2',
+ 'full', 'modPath', 'modb',
+ 'altTextures_list', 'modelFlags',
+ 'effect', 'imageSpace', 'force',
+ 'damage', 'radius', 'light',
+ 'sound1', 'flags', 'ISRadius',
+ 'impactDataSet', 'sound2',
+ 'radLevel', 'radTime',
+ 'radRadius', 'soundLevel', 'impact']# 'modt_p',
class FnvDEBRRecord(FnvBaseRecord):
_Type = 'DEBR'
-
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ class DebrisModel(ListComponent):
+ UINT8_LISTMACRO(percentage, 1)
+ ISTRING_LISTMACRO(modPath, 2)
+ UINT8_FLAG_LISTMACRO(flags, 3)
+ UINT8_ARRAY_LISTMACRO(modt_p, 4)
+
+ BasicFlagMACRO(IsHasCollisionData, flags, 0x01)
+ copyattrs = ['percentage', 'modPath', 'flags', 'modt_p']
+ exportattrs = ['percentage', 'modPath', 'flags']#, 'modt_p'
+
+ LIST_MACRO(models, 7, self.DebrisModel)
+ exportattrs = copyattrs = FnvBaseRecord.baseattrs + ['models_list']
class FnvIMGSRecord(FnvBaseRecord):
_Type = 'IMGS'
diff --git a/release/cint.py b/release/cint.py
index 366afce..2a4ef3c 100644
--- a/release/cint.py
+++ b/release/cint.py
@@ -9241,28 +9241,359 @@ def create_location(self):
class FnvANIORecord(FnvBaseRecord):
_Type = 'ANIO'
+ modPath = CBashISTRING(7)
+ modb = CBashFLOAT32(8)
+ modt_p = CBashUINT8ARRAY(9)
+
+ def create_altTexture(self):
+ length = CBash.GetFieldAttribute(self._CollectionID, self._ModID, self._RecordID, 10, 0, 0, 0, 0, 0, 0, 1)
+ CBash.SetField(self._CollectionID, self._ModID, self._RecordID, 10, 0, 0, 0, 0, 0, 0, 0, c_ulong(length + 1))
+ return FNVAltTexture(self._CollectionID, self._ModID, self._RecordID, 10, length)
+ altTextures = CBashLIST(10, FNVAltTexture)
+ altTextures_list = CBashLIST(10, FNVAltTexture, True)
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ modelFlags = CBashGeneric(11, c_ubyte)
+ animation = CBashFORMID(12)
+ copyattrs = FnvBaseRecord.baseattrs + ['modPath', 'modb', 'modt_p',
+ 'altTextures_list',
+ 'modelFlags', 'animation']
+ exportattrs = FnvBaseRecord.baseattrs + ['modPath', 'modb',
+ 'altTextures_list',
+ 'modelFlags', 'animation']# 'modt_p',
class FnvWATRRecord(FnvBaseRecord):
_Type = 'WATR'
-
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ full = CBashSTRING(7)
+ noisePath = CBashISTRING(8)
+ opacity = CBashGeneric(9, c_ubyte)
+ flags = CBashGeneric(10, c_ubyte)
+ material = CBashISTRING(11)
+ sound = CBashFORMID(12)
+ effect = CBashFORMID(13)
+ damage = CBashGeneric(14, c_ushort)
+ unknown1 = CBashFLOAT32(15)
+ unknown2 = CBashFLOAT32(16)
+ unknown3 = CBashFLOAT32(17)
+ unknown4 = CBashFLOAT32(18)
+ sunPower = CBashFLOAT32(19)
+ reflectAmt = CBashFLOAT32(20)
+ fresnelAmt = CBashFLOAT32(21)
+ unused1 = CBashUINT8ARRAY(22, 4)
+ fogNear = CBashFLOAT32(23)
+ fogFar = CBashFLOAT32(24)
+ shallowRed = CBashGeneric(25, c_ubyte)
+ shallowGreen = CBashGeneric(26, c_ubyte)
+ shallowBlue = CBashGeneric(27, c_ubyte)
+ unused2 = CBashUINT8ARRAY(28, 1)
+ deepRed = CBashGeneric(29, c_ubyte)
+ deepGreen = CBashGeneric(30, c_ubyte)
+ deepBlue = CBashGeneric(31, c_ubyte)
+ unused3 = CBashUINT8ARRAY(32, 1)
+ reflRed = CBashGeneric(33, c_ubyte)
+ reflGreen = CBashGeneric(34, c_ubyte)
+ reflBlue = CBashGeneric(35, c_ubyte)
+ unused4 = CBashUINT8ARRAY(36, 1)
+ unused5 = CBashUINT8ARRAY(37, 4)
+ rainForce = CBashFLOAT32(38)
+ rainVelocity = CBashFLOAT32(39)
+ rainFalloff = CBashFLOAT32(40)
+ rainDampner = CBashFLOAT32(41)
+ dispSize = CBashFLOAT32(42)
+ dispForce = CBashFLOAT32(43)
+ dispVelocity = CBashFLOAT32(44)
+ dispFalloff = CBashFLOAT32(45)
+ dispDampner = CBashFLOAT32(46)
+ rainSize = CBashFLOAT32(47)
+ normalsNoiseScale = CBashFLOAT32(48)
+ noise1Direction = CBashFLOAT32(49)
+ noise2Direction = CBashFLOAT32(50)
+ noise3Direction = CBashFLOAT32(51)
+ noise1Speed = CBashFLOAT32(52)
+ noise2Speed = CBashFLOAT32(53)
+ noise3Speed = CBashFLOAT32(54)
+ normalsFalloffStart = CBashFLOAT32(55)
+ normalsFalloffEnd = CBashFLOAT32(56)
+ fogAmt = CBashFLOAT32(57)
+ normalsUVScale = CBashFLOAT32(58)
+ underFogAmt = CBashFLOAT32(59)
+ underFogNear = CBashFLOAT32(60)
+ underFogFar = CBashFLOAT32(61)
+ distAmt = CBashFLOAT32(62)
+ shininess = CBashFLOAT32(63)
+ hdrMult = CBashFLOAT32(64)
+ lightRadius = CBashFLOAT32(65)
+ lightBright = CBashFLOAT32(66)
+ noise1UVScale = CBashFLOAT32(67)
+ noise2UVScale = CBashFLOAT32(68)
+ noise3UVScale = CBashFLOAT32(69)
+ noise1AmpScale = CBashFLOAT32(70)
+ noise2AmpScale = CBashFLOAT32(71)
+ noise3AmpScale = CBashFLOAT32(72)
+ dayWater = CBashFORMID(73)
+ nightWater = CBashFORMID(74)
+ underWater = CBashFORMID(75)
+ IsCausesDamage = CBashBasicFlag('flags', 0x01)
+ IsReflective = CBashBasicFlag('flags', 0x02)
+ exportattrs = copyattrs = FnvBaseRecord.baseattrs + ['full', 'noisePath', 'opacity', 'flags',
+ 'material', 'sound', 'effect', 'damage',
+ 'unknown1', 'unknown2', 'unknown3', 'unknown4',
+ 'sunPower', 'reflectAmt', 'fresnelAmt',
+ 'fogNear', 'fogFar',
+ 'shallowRed', 'shallowGreen', 'shallowBlue',
+ 'deepRed', 'deepGreen', 'deepBlue',
+ 'reflRed', 'reflGreen', 'reflBlue',
+ 'rainForce', 'rainVelocity', 'rainFalloff',
+ 'rainDampner', 'dispSize', 'dispForce',
+ 'dispVelocity', 'dispFalloff', 'dispDampner',
+ 'rainSize', 'normalsNoiseScale',
+ 'noise1Direction', 'noise2Direction', 'noise3Direction',
+ 'noise1Speed', 'noise2Speed', 'noise3Speed',
+ 'normalsFalloffStart', 'normalsFalloffEnd',
+ 'fogAmt', 'normalsUVScale', 'underFogAmt', 'underFogNear',
+ 'underFogFar', 'distAmt', 'shininess', 'hdrMult',
+ 'lightRadius', 'lightBright',
+ 'noise1UVScale', 'noise2UVScale', 'noise3UVScale',
+ 'noise1AmpScale', 'noise2AmpScale', 'noise3AmpScale',
+ 'dayWater', 'nightWater', 'underWater']
class FnvEFSHRecord(FnvBaseRecord):
_Type = 'EFSH'
-
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ fillPath = CBashISTRING(7)
+ particlePath = CBashISTRING(8)
+ holesPath = CBashISTRING(9)
+ flags = CBashGeneric(10, c_ubyte)
+ unused1 = CBashUINT8ARRAY(11, 3)
+ memSBlend = CBashGeneric(12, c_ulong)
+ memBlendOp = CBashGeneric(13, c_ulong)
+ memZFunc = CBashGeneric(14, c_ulong)
+ fillRed = CBashGeneric(15, c_ubyte)
+ fillGreen = CBashGeneric(16, c_ubyte)
+ fillBlue = CBashGeneric(17, c_ubyte)
+ unused2 = CBashUINT8ARRAY(18, 1)
+ fillAIn = CBashFLOAT32(19)
+ fillAFull = CBashFLOAT32(20)
+ fillAOut = CBashFLOAT32(21)
+ fillAPRatio = CBashFLOAT32(22)
+ fillAAmp = CBashFLOAT32(23)
+ fillAFreq = CBashFLOAT32(24)
+ fillAnimSpdU = CBashFLOAT32(25)
+ fillAnimSpdV = CBashFLOAT32(26)
+ edgeEffOff = CBashFLOAT32(27)
+ edgeEffRed = CBashGeneric(28, c_ubyte)
+ edgeEffGreen = CBashGeneric(29, c_ubyte)
+ edgeEffBlue = CBashGeneric(30, c_ubyte)
+ unused3 = CBashUINT8ARRAY(31, 1)
+ edgeEffAIn = CBashFLOAT32(32)
+ edgeEffAFull = CBashFLOAT32(33)
+ edgeEffAOut = CBashFLOAT32(34)
+ edgeEffAPRatio = CBashFLOAT32(35)
+ edgeEffAAmp = CBashFLOAT32(36)
+ edgeEffAFreq = CBashFLOAT32(37)
+ fillAFRatio = CBashFLOAT32(38)
+ edgeEffAFRatio = CBashFLOAT32(39)
+ memDBlend = CBashGeneric(40, c_ulong)
+ partSBlend = CBashGeneric(41, c_ulong)
+ partBlendOp = CBashGeneric(42, c_ulong)
+ partZFunc = CBashGeneric(43, c_ulong)
+ partDBlend = CBashGeneric(44, c_ulong)
+ partBUp = CBashFLOAT32(45)
+ partBFull = CBashFLOAT32(46)
+ partBDown = CBashFLOAT32(47)
+ partBFRatio = CBashFLOAT32(48)
+ partBPRatio = CBashFLOAT32(49)
+ partLTime = CBashFLOAT32(50)
+ partLDelta = CBashFLOAT32(51)
+ partNSpd = CBashFLOAT32(52)
+ partNAcc = CBashFLOAT32(53)
+ partVel1 = CBashFLOAT32(54)
+ partVel2 = CBashFLOAT32(55)
+ partVel3 = CBashFLOAT32(56)
+ partAcc1 = CBashFLOAT32(57)
+ partAcc2 = CBashFLOAT32(58)
+ partAcc3 = CBashFLOAT32(59)
+ partKey1 = CBashFLOAT32(60)
+ partKey2 = CBashFLOAT32(61)
+ partKey1Time = CBashFLOAT32(62)
+ partKey2Time = CBashFLOAT32(63)
+ key1Red = CBashGeneric(64, c_ubyte)
+ key1Green = CBashGeneric(65, c_ubyte)
+ key1Blue = CBashGeneric(66, c_ubyte)
+ unused4 = CBashUINT8ARRAY(67, 1)
+ key2Red = CBashGeneric(68, c_ubyte)
+ key2Green = CBashGeneric(69, c_ubyte)
+ key2Blue = CBashGeneric(70, c_ubyte)
+ unused5 = CBashUINT8ARRAY(71, 1)
+ key3Red = CBashGeneric(72, c_ubyte)
+ key3Green = CBashGeneric(73, c_ubyte)
+ key3Blue = CBashGeneric(74, c_ubyte)
+ unused6 = CBashUINT8ARRAY(75, 1)
+ key1A = CBashFLOAT32(76)
+ key2A = CBashFLOAT32(77)
+ key3A = CBashFLOAT32(78)
+ key1Time = CBashFLOAT32(79)
+ key2Time = CBashFLOAT32(80)
+ key3Time = CBashFLOAT32(81)
+ partInitSpd = CBashFLOAT32(82)
+ partInitRot = CBashFLOAT32(83)
+ partInitRotDelta = CBashFLOAT32(84)
+ partRotSpd = CBashFLOAT32(85)
+ partRotDelta = CBashFLOAT32(86)
+ addon = CBashFORMID(87)
+ holesSTime = CBashFLOAT32(88)
+ holesETime = CBashFLOAT32(89)
+ holesSValue = CBashFLOAT32(90)
+ holesEValue = CBashFLOAT32(91)
+ edgeWidth = CBashFLOAT32(92)
+ edgeRed = CBashGeneric(93, c_ubyte)
+ edgeGreen = CBashGeneric(94, c_ubyte)
+ edgeBlue = CBashGeneric(95, c_ubyte)
+ unused7 = CBashUINT8ARRAY(96, 1)
+ explWindSpd = CBashFLOAT32(97)
+ textCountU = CBashGeneric(98, c_ulong)
+ textCountV = CBashGeneric(99, c_ulong)
+ addonFITime = CBashFLOAT32(100)
+ addonFOTime = CBashFLOAT32(101)
+ addonScaleStart = CBashFLOAT32(102)
+ addonScaleEnd = CBashFLOAT32(103)
+ addonScaleInTime = CBashFLOAT32(104)
+ addonScaleOutTime = CBashFLOAT32(105)
+
+ IsNoMemShader = CBashBasicFlag('flags', 0x00000001)
+ IsNoPartShader = CBashBasicFlag('flags', 0x00000008)
+ IsEdgeInverse = CBashBasicFlag('flags', 0x00000010)
+ IsMemSkinOnly = CBashBasicFlag('flags', 0x00000020)
+ exportattrs = copyattrs = FnvBaseRecord.baseattrs + ['fillPath', 'particlePath', 'holesPath',
+ 'flags', 'memSBlend', 'memBlendOp',
+ 'memZFunc',
+ 'fillRed', 'fillGreen', 'fillBlue',
+ 'fillAIn', 'fillAFull', 'fillAOut',
+ 'fillAPRatio', 'fillAAmp', 'fillAFreq',
+ 'fillAnimSpdU', 'fillAnimSpdV',
+ 'edgeEffOff',
+ 'edgeEffRed', 'edgeEffGreen', 'edgeEffBlue',
+ 'edgeEffAIn', 'edgeEffAFull', 'edgeEffAOut',
+ 'edgeEffAPRatio', 'edgeEffAAmp',
+ 'edgeEffAFreq', 'fillAFRatio',
+ 'edgeEffAFRatio', 'memDBlend', 'partSBlend',
+ 'partBlendOp', 'partZFunc', 'partDBlend',
+ 'partBUp', 'partBFull', 'partBDown',
+ 'partBFRatio', 'partBPRatio', 'partLTime',
+ 'partLDelta', 'partNSpd', 'partNAcc',
+ 'partVel1', 'partVel2', 'partVel3',
+ 'partAcc1', 'partAcc2', 'partAcc3',
+ 'partKey1', 'partKey2',
+ 'partKey1Time', 'partKey2Time',
+ 'key1Red', 'key1Green', 'key1Blue',
+ 'key2Red', 'key2Green', 'key2Blue',
+ 'key3Red', 'key3Green', 'key3Blue',
+ 'key1A', 'key2A', 'key3A',
+ 'key1Time', 'key2Time', 'key3Time',
+ 'partInitSpd', 'partInitRot',
+ 'partInitRotDelta', 'partRotSpd',
+ 'partRotDelta', 'addon', 'holesSTime',
+ 'holesETime', 'holesSValue', 'holesEValue',
+ 'edgeWidth',
+ 'edgeRed', 'edgeGreen', 'edgeBlue',
+ 'explWindSpd', 'textCountU', 'textCountV',
+ 'addonFITime', 'addonFOTime',
+ 'addonScaleStart', 'addonScaleEnd',
+ 'addonScaleInTime', 'addonScaleOutTime']
class FnvEXPLRecord(FnvBaseRecord):
_Type = 'EXPL'
+ boundX1 = CBashGeneric(7, c_short)
+ boundY1 = CBashGeneric(8, c_short)
+ boundZ1 = CBashGeneric(9, c_short)
+ boundX2 = CBashGeneric(10, c_short)
+ boundY2 = CBashGeneric(11, c_short)
+ boundZ2 = CBashGeneric(12, c_short)
+ full = CBashSTRING(13)
+ modPath = CBashISTRING(14)
+ modb = CBashFLOAT32(15)
+ modt_p = CBashUINT8ARRAY(16)
+
+ def create_altTexture(self):
+ length = CBash.GetFieldAttribute(self._CollectionID, self._ModID, self._RecordID, 17, 0, 0, 0, 0, 0, 0, 1)
+ CBash.SetField(self._CollectionID, self._ModID, self._RecordID, 17, 0, 0, 0, 0, 0, 0, 0, c_ulong(length + 1))
+ return FNVAltTexture(self._CollectionID, self._ModID, self._RecordID, 17, length)
+ altTextures = CBashLIST(17, FNVAltTexture)
+ altTextures_list = CBashLIST(17, FNVAltTexture, True)
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ modelFlags = CBashGeneric(18, c_ubyte)
+ effect = CBashFORMID(19)
+ imageSpace = CBashFORMID(20)
+ force = CBashFLOAT32(21)
+ damage = CBashFLOAT32(22)
+ radius = CBashFLOAT32(23)
+ light = CBashFORMID(24)
+ sound1 = CBashFORMID(25)
+ flags = CBashGeneric(26, c_ulong)
+ ISRadius = CBashFLOAT32(27)
+ impactDataSet = CBashFORMID(28)
+ sound2 = CBashFORMID(29)
+ radLevel = CBashFLOAT32(30)
+ radTime = CBashFLOAT32(31)
+ radRadius = CBashFLOAT32(32)
+ soundLevel = CBashGeneric(33, c_ulong)
+ impact = CBashFORMID(34)
+
+ IsUnknown1 = CBashBasicFlag('flags', 0x00000001)
+ IsAlwaysUsesWorldOrientation = CBashBasicFlag('flags', 0x00000002)
+ IsAlwaysKnockDown = CBashBasicFlag('flags', 0x00000004)
+ IsFormulaKnockDown = CBashBasicFlag('flags', 0x00000008)
+ IsIgnoreLOS = CBashBasicFlag('flags', 0x00000010)
+ IsPushExplosionSourceRefOnly = CBashBasicFlag('flags', 0x00000020)
+ IsIgnoreImageSpaceSwap = CBashBasicFlag('flags', 0x00000040)
+
+ IsHead = CBashBasicFlag('modelFlags', 0x01)
+ IsTorso = CBashBasicFlag('modelFlags', 0x02)
+ IsRightHand = CBashBasicFlag('modelFlags', 0x04)
+ IsLeftHand = CBashBasicFlag('modelFlags', 0x08)
+
+ IsLoud = CBashBasicType('soundLevel', 0, 'IsNormal')
+ IsNormal = CBashBasicType('soundLevel', 1, 'IsLoud')
+ IsSilent = CBashBasicType('soundLevel', 2, 'IsLoud')
+ copyattrs = FnvBaseRecord.baseattrs + ['boundX1', 'boundY1', 'boundZ1',
+ 'boundX2', 'boundY2', 'boundZ2',
+ 'full', 'modPath', 'modb', 'modt_p',
+ 'altTextures_list', 'modelFlags',
+ 'effect', 'imageSpace', 'force',
+ 'damage', 'radius', 'light',
+ 'sound1', 'flags', 'ISRadius',
+ 'impactDataSet', 'sound2',
+ 'radLevel', 'radTime',
+ 'radRadius', 'soundLevel', 'impact']
+ exportattrs = FnvBaseRecord.baseattrs + ['boundX1', 'boundY1', 'boundZ1',
+ 'boundX2', 'boundY2', 'boundZ2',
+ 'full', 'modPath', 'modb',
+ 'altTextures_list', 'modelFlags',
+ 'effect', 'imageSpace', 'force',
+ 'damage', 'radius', 'light',
+ 'sound1', 'flags', 'ISRadius',
+ 'impactDataSet', 'sound2',
+ 'radLevel', 'radTime',
+ 'radRadius', 'soundLevel', 'impact']# 'modt_p',
class FnvDEBRRecord(FnvBaseRecord):
_Type = 'DEBR'
+ class DebrisModel(ListComponent):
+ percentage = CBashGeneric_LIST(1, c_ubyte)
+ modPath = CBashISTRING_LIST(2)
+ flags = CBashGeneric_LIST(3, c_ubyte)
+ modt_p = CBashUINT8ARRAY_LIST(4)
+
+ IsHasCollisionData = CBashBasicFlag('flags', 0x01)
+ copyattrs = ['percentage', 'modPath', 'flags', 'modt_p']
+ exportattrs = ['percentage', 'modPath', 'flags']#, 'modt_p'
+
+ def create_model(self):
+ length = CBash.GetFieldAttribute(self._CollectionID, self._ModID, self._RecordID, 7, 0, 0, 0, 0, 0, 0, 1)
+ CBash.SetField(self._CollectionID, self._ModID, self._RecordID, 7, 0, 0, 0, 0, 0, 0, 0, c_ulong(length + 1))
+ return self.DebrisModel(self._CollectionID, self._ModID, self._RecordID, 7, length)
+ models = CBashLIST(7, DebrisModel)
+ models_list = CBashLIST(7, DebrisModel, True)
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ exportattrs = copyattrs = FnvBaseRecord.baseattrs + ['models_list']
class FnvIMGSRecord(FnvBaseRecord):
_Type = 'IMGS'