diff --git a/CBash.suo b/CBash.suo
index 2c7094e..a35790e 100644
Binary files a/CBash.suo and b/CBash.suo differ
diff --git a/CBash/CBash.vcproj b/CBash/CBash.vcproj
index d36b3e0..e1d8b0f 100644
--- a/CBash/CBash.vcproj
+++ b/CBash/CBash.vcproj
@@ -1294,6 +1294,37 @@
/>
+
+
+
+
+
+
+
+
+
+
+
@@ -1981,6 +2012,37 @@
/>
+
+
+
+
+
+
+
+
+
+
+
@@ -2183,6 +2245,37 @@
/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -3064,6 +3188,37 @@
/>
+
+
+
+
+
+
+
+
+
+
+
@@ -3266,6 +3421,37 @@
/>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CBash/Common.h b/CBash/Common.h
index 9c6d04f..3149cf9 100644
--- a/CBash/Common.h
+++ b/CBash/Common.h
@@ -2095,6 +2095,13 @@ struct UnorderedPackedArray
if(value.size())
writer.record_write_subrecord(_Type, &value[0], (UINT32)value.size() * sizeof(T));
}
+ void ReqWrite(UINT32 _Type, FileWriter &writer)
+ {
+ if(value.size())
+ writer.record_write_subrecord(_Type, &value[0], (UINT32)value.size() * sizeof(T));
+ else
+ writer.record_write_subheader(_Type, 0);
+ }
UnorderedPackedArray& operator = (const UnorderedPackedArray &rhs)
{
diff --git a/CBash/FalloutNewVegas/FNVFile.cpp b/CBash/FalloutNewVegas/FNVFile.cpp
index 67e002d..6562565 100644
--- a/CBash/FalloutNewVegas/FNVFile.cpp
+++ b/CBash/FalloutNewVegas/FNVFile.cpp
@@ -500,22 +500,22 @@ SINT32 FNVFile::Load(RecordOp &indexer, std::vector &Expanders
break;
//case eIgWTHR: //Same as normal
case 'RHTW':
- //reader.read(&WTHR.stamp, 4);
- //reader.read(&WTHR.unknown, 4);
- //WTHR.Skim(reader, GRUPSize, processor, indexer);
- //break;
+ reader.read(&WTHR.stamp, 4);
+ reader.read(&WTHR.unknown, 4);
+ WTHR.Skim(reader, GRUPSize, processor, indexer);
+ break;
case eIgCLMT:
case 'TMLC':
- //reader.read(&CLMT.stamp, 4);
- //reader.read(&CLMT.unknown, 4);
- //CLMT.Skim(reader, GRUPSize, processor, indexer);
- //break;
+ reader.read(&CLMT.stamp, 4);
+ reader.read(&CLMT.unknown, 4);
+ CLMT.Skim(reader, GRUPSize, processor, indexer);
+ break;
case eIgREGN:
case 'NGER':
- //reader.read(®N.stamp, 4);
- //reader.read(®N.unknown, 4);
- //REGN.Skim(reader, GRUPSize, processor, indexer);
- //break;
+ reader.read(®N.stamp, 4);
+ reader.read(®N.unknown, 4);
+ REGN.Skim(reader, GRUPSize, processor, indexer);
+ break;
case eIgNAVI:
case 'IVAN':
//reader.read(&NAVI.stamp, 4);
@@ -949,11 +949,11 @@ UINT32 FNVFile::GetNumRecords(const UINT32 &RecordType)
case 'ILVL':
return (UINT32)LVLI.Records.size();
case 'RHTW':
- //return (UINT32)WTHR.Records.size();
+ return (UINT32)WTHR.Records.size();
case 'TMLC':
- //return (UINT32)CLMT.Records.size();
+ return (UINT32)CLMT.Records.size();
case 'NGER':
- //return (UINT32)REGN.Records.size();
+ return (UINT32)REGN.Records.size();
case 'IVAN':
//return (UINT32)NAVI.Records.size();
case 'LLEC':
@@ -1278,17 +1278,17 @@ Record * FNVFile::CreateRecord(const UINT32 &RecordType, STRING const &RecordEdi
newRecord = LVLI.Records.back();
break;
case 'RHTW':
- //WTHR.Records.push_back(new FNV::WTHRRecord((FNV::WTHRRecord *)SourceRecord));
- //newRecord = WTHR.Records.back();
- //break;
+ WTHR.Records.push_back(new FNV::WTHRRecord((FNV::WTHRRecord *)SourceRecord));
+ newRecord = WTHR.Records.back();
+ break;
case 'TMLC':
- //CLMT.Records.push_back(new FNV::CLMTRecord((FNV::CLMTRecord *)SourceRecord));
- //newRecord = CLMT.Records.back();
- //break;
+ CLMT.Records.push_back(new FNV::CLMTRecord((FNV::CLMTRecord *)SourceRecord));
+ newRecord = CLMT.Records.back();
+ break;
case 'NGER':
- //REGN.Records.push_back(new FNV::REGNRecord((FNV::REGNRecord *)SourceRecord));
- //newRecord = REGN.Records.back();
- //break;
+ REGN.Records.push_back(new FNV::REGNRecord((FNV::REGNRecord *)SourceRecord));
+ newRecord = REGN.Records.back();
+ break;
case 'IVAN':
//NAVI.Records.push_back(new FNV::NAVIRecord((FNV::NAVIRecord *)SourceRecord));
//newRecord = NAVI.Records.back();
@@ -1571,9 +1571,9 @@ SINT32 FNVFile::CleanMasters(std::vector &Expanders)
if(COBJ.VisitRecords(NULL, checker, false)) continue;
if(PROJ.VisitRecords(NULL, checker, false)) continue;
if(LVLI.VisitRecords(NULL, checker, false)) continue;
- //if(WTHR.VisitRecords(NULL, checker, false)) continue;
- //if(CLMT.VisitRecords(NULL, checker, false)) continue;
- //if(REGN.VisitRecords(NULL, checker, false)) continue;
+ if(WTHR.VisitRecords(NULL, checker, false)) continue;
+ if(CLMT.VisitRecords(NULL, checker, false)) continue;
+ if(REGN.VisitRecords(NULL, checker, false)) continue;
//if(NAVI.VisitRecords(NULL, checker, false)) continue;
//if(CELL.VisitRecords(NULL, checker, false)) continue;
//if(WRLD.VisitRecords(NULL, checker, false)) continue;
@@ -1709,9 +1709,9 @@ SINT32 FNVFile::Save(STRING const &SaveName, std::vector &Expa
formCount += COBJ.WriteGRUP('JBOC', writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
formCount += PROJ.WriteGRUP('JORP', writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
formCount += LVLI.WriteGRUP('ILVL', writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
- //formCount += WTHR.WriteGRUP('RHTW', writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
- //formCount += CLMT.WriteGRUP('TMLC', writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
- //formCount += REGN.WriteGRUP('NGER', writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
+ formCount += WTHR.WriteGRUP('RHTW', writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
+ formCount += CLMT.WriteGRUP('TMLC', writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
+ formCount += REGN.WriteGRUP('NGER', writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
//formCount += NAVI.WriteGRUP('IVAN', writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
//formCount += CELL.WriteGRUP('LLEC', writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
//formCount += WRLD.WriteGRUP('DLRW', writer, Expanders, expander, collapser, bMastersChanged, CloseMod);
@@ -1832,9 +1832,9 @@ void FNVFile::VisitAllRecords(RecordOp &op)
COBJ.VisitRecords(NULL, op, true);
PROJ.VisitRecords(NULL, op, true);
LVLI.VisitRecords(NULL, op, true);
- //WTHR.VisitRecords(NULL, op, true);
- //CLMT.VisitRecords(NULL, op, true);
- //REGN.VisitRecords(NULL, op, true);
+ WTHR.VisitRecords(NULL, op, true);
+ CLMT.VisitRecords(NULL, op, true);
+ REGN.VisitRecords(NULL, op, true);
//NAVI.VisitRecords(NULL, op, true);
//CELL.VisitRecords(NULL, op, true);
//WRLD.VisitRecords(NULL, op, true);
@@ -2049,14 +2049,14 @@ void FNVFile::VisitRecords(const UINT32 &TopRecordType, const UINT32 &RecordType
LVLI.VisitRecords(RecordType, op, DeepVisit);
break;
case 'RHTW':
- //WTHR.VisitRecords(RecordType, op, DeepVisit);
- //break;
+ WTHR.VisitRecords(RecordType, op, DeepVisit);
+ break;
case 'TMLC':
- //CLMT.VisitRecords(RecordType, op, DeepVisit);
- //break;
+ CLMT.VisitRecords(RecordType, op, DeepVisit);
+ break;
case 'NGER':
- //REGN.VisitRecords(RecordType, op, DeepVisit);
- //break;
+ REGN.VisitRecords(RecordType, op, DeepVisit);
+ break;
case 'IVAN':
//NAVI.VisitRecords(RecordType, op, DeepVisit);
//break;
diff --git a/CBash/FalloutNewVegas/FNVFile.h b/CBash/FalloutNewVegas/FNVFile.h
index 24d0686..6c0bcce 100644
--- a/CBash/FalloutNewVegas/FNVFile.h
+++ b/CBash/FalloutNewVegas/FNVFile.h
@@ -72,9 +72,9 @@ GPL License and Copyright Notice ============================================
#include "Records/COBJRecord.h"
#include "Records/PROJRecord.h"
#include "Records/LVLIRecord.h"
-//#include "Records/WTHRRecord.h"
-//#include "Records/CLMTRecord.h"
-//#include "Records/REGNRecord.h"
+#include "Records/WTHRRecord.h"
+#include "Records/CLMTRecord.h"
+#include "Records/REGNRecord.h"
//#include "Records/NAVIRecord.h"
//#include "Records/CELLRecord.h"
//#include "Records/WRLDRecord.h"
@@ -177,9 +177,9 @@ class FNVFile : public ModFile
FNVGRUPRecords COBJ;
FNVGRUPRecords PROJ;
FNVGRUPRecords LVLI;
- //FNVGRUPRecords WTHR;
- //FNVGRUPRecords CLMT;
- //FNVGRUPRecords REGN;
+ FNVGRUPRecords WTHR;
+ FNVGRUPRecords CLMT;
+ FNVGRUPRecords REGN;
//FNVGRUPRecords NAVI;
//FNVGRUPRecords CELL;
//FNVGRUPRecords WRLD;
diff --git a/CBash/FalloutNewVegas/Records/API/CLMTRecordAPI.cpp b/CBash/FalloutNewVegas/Records/API/CLMTRecordAPI.cpp
index d026a5d..01f7b11 100644
--- a/CBash/FalloutNewVegas/Records/API/CLMTRecordAPI.cpp
+++ b/CBash/FalloutNewVegas/Records/API/CLMTRecordAPI.cpp
@@ -60,21 +60,44 @@ UINT32 CLMTRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 7: //wlst Weather Types ,, Array
- return FORMID_FIELD;
- case 8: //wlst Weather Types ,, Array
- return SINT32_FIELD;
- case 9: //wlst Weather Types ,, Array
- return FORMID_FIELD;
- case 10: //fnam Sun Texture
+ case 7: //weathers
+ if(ListFieldID == 0) //weathers
+ {
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return LIST_FIELD;
+ case 1: //fieldSize
+ return (UINT32)Weathers.value.size();
+ default:
+ return UNKNOWN_FIELD;
+ }
+ }
+
+ if(ListIndex >= Weathers.value.size())
+ return UNKNOWN_FIELD;
+
+ switch(ListFieldID)
+ {
+ case 1: //weather
+ return FORMID_FIELD;
+ case 2: //chance
+ return SINT32_FIELD;
+ case 3: //globalId
+ return FORMID_FIELD;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 8: //sunPath
return ISTRING_FIELD;
- case 11: //gnam Sun Glare Texture
+ case 9: //glarePath
return ISTRING_FIELD;
- case 12: //modPath
+ case 10: //modPath
return ISTRING_FIELD;
- case 13: //modb
+ case 11: //modb
return FLOAT32_FIELD;
- case 14: //modt_p
+ case 12: //modt_p
switch(WhichAttribute)
{
case 0: //fieldType
@@ -85,7 +108,7 @@ UINT32 CLMTRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 15: //altTextures
+ case 13: //altTextures
if(!MODL.IsLoaded())
return UNKNOWN_FIELD;
@@ -96,13 +119,13 @@ UINT32 CLMTRecord::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)
@@ -116,20 +139,20 @@ UINT32 CLMTRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
default:
return UNKNOWN_FIELD;
}
-
- case 18: //modelFlags
- return UINT8_FIELD;
- case 19: //tnam TNAM ,, Struct
+ return UNKNOWN_FIELD;
+ case 14: //modelFlags
+ return UINT8_FLAG_FIELD;
+ case 15: //riseBegin
return UINT8_FIELD;
- case 20: //tnam TNAM ,, Struct
+ case 16: //riseEnd
return UINT8_FIELD;
- case 21: //tnam TNAM ,, Struct
+ case 17: //setBegin
return UINT8_FIELD;
- case 22: //tnam TNAM ,, Struct
+ case 18: //setEnd
return UINT8_FIELD;
- case 23: //tnam TNAM ,, Struct
+ case 19: //volatility
return UINT8_FIELD;
- case 24: //tnam TNAM ,, Struct
+ case 20: //phaseLength
return UINT8_FIELD;
default:
return UNKNOWN_FIELD;
@@ -155,43 +178,66 @@ void * CLMTRecord::GetField(FIELD_IDENTIFIERS, void **FieldValues)
case 6: //versionControl2
*FieldValues = &versionControl2[0];
return NULL;
- case 7: //wlst Weather Types ,, Array
- return WLST.IsLoaded() ? &WLST->value7 : NULL;
- case 8: //wlst Weather Types ,, Array
- return WLST.IsLoaded() ? &WLST->value8 : NULL;
- case 9: //wlst Weather Types ,, Array
- return WLST.IsLoaded() ? &WLST->value9 : NULL;
- case 10: //fnam Sun Texture
+ case 7: //weathers
+ if(ListIndex >= Weathers.value.size())
+ return NULL;
+
+ switch(ListFieldID)
+ {
+ case 1: //weather
+ return &Weathers.value[ListIndex].weather;
+ case 2: //chance
+ return &Weathers.value[ListIndex].chance;
+ case 3: //globalId
+ return &Weathers.value[ListIndex].globalId;
+ default:
+ return NULL;
+ }
+ return NULL;
+ case 8: //sunPath
return FNAM.value;
- case 11: //gnam Sun Glare Texture
+ case 9: //glarePath
return GNAM.value;
- case 12: //modPath
+ case 10: //modPath
return MODL.IsLoaded() ? MODL->MODL.value : NULL;
- case 13: //modb
+ case 11: //modb
return MODL.IsLoaded() ? &MODL->MODB.value : NULL;
- case 14: //modt_p
+ case 12: //modt_p
*FieldValues = MODL.IsLoaded() ? MODL->MODT.value : NULL;
return NULL;
- case 15: //mods Alternate Textures
- return MODL.IsLoaded() ? MODL->MODS.value : NULL;
- case 16: //mods Alternate Textures
- return MODL.IsLoaded() ? &MODL->MODS->value16 : NULL;
- case 17: //mods Alternate Textures
- return MODL.IsLoaded() ? &MODL->MODS->value17 : NULL;
- case 18: //modelFlags
- return MODL.IsLoaded() ? &MODL->MODD->value18 : NULL;
- case 19: //tnam TNAM ,, Struct
- return TNAM.IsLoaded() ? &TNAM->value19 : NULL;
- case 20: //tnam TNAM ,, Struct
- return TNAM.IsLoaded() ? &TNAM->value20 : NULL;
- case 21: //tnam TNAM ,, Struct
- return TNAM.IsLoaded() ? &TNAM->value21 : NULL;
- case 22: //tnam TNAM ,, Struct
- return TNAM.IsLoaded() ? &TNAM->value22 : NULL;
- case 23: //tnam TNAM ,, Struct
- return TNAM.IsLoaded() ? &TNAM->value23 : NULL;
- case 24: //tnam TNAM ,, Struct
- return TNAM.IsLoaded() ? &TNAM->value24 : NULL;
+ case 13: //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 14: //modelFlags
+ return MODL.IsLoaded() ? &MODL->MODD.value : NULL;
+ case 15: //riseBegin
+ return &TNAM.value.riseBegin;
+ case 16: //riseEnd
+ return &TNAM.value.riseEnd;
+ case 17: //setBegin
+ return &TNAM.value.setBegin;
+ case 18: //setEnd
+ return &TNAM.value.setEnd;
+ case 19: //volatility
+ return &TNAM.value.volatility;
+ case 20: //phaseLength
+ return &TNAM.value.phaseLength;
default:
return NULL;
}
@@ -225,78 +271,103 @@ bool CLMTRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
versionControl2[0] = ((UINT8ARRAY)FieldValue)[0];
versionControl2[1] = ((UINT8ARRAY)FieldValue)[1];
break;
- case 7: //wlst Weather Types ,, Array
- WLST.Load();
- WLST->value7 = *(FORMID *)FieldValue;
- return true;
- case 8: //wlst Weather Types ,, Array
- WLST.Load();
- WLST->value8 = *(SINT32 *)FieldValue;
+ case 7: //weathers
+ if(ListFieldID == 0) //weathersSize
+ {
+ Weathers.resize(ArraySize);
+ return false;
+ }
+
+ if(ListIndex >= Weathers.value.size())
+ break;
+
+ switch(ListFieldID)
+ {
+ case 1: //weather
+ Weathers.value[ListIndex].weather = *(FORMID *)FieldValue;
+ return true;
+ case 2: //chance
+ Weathers.value[ListIndex].chance = *(SINT32 *)FieldValue;
+ break;
+ case 3: //globalId
+ Weathers.value[ListIndex].globalId = *(FORMID *)FieldValue;
+ return true;
+ default:
+ break;
+ }
break;
- case 9: //wlst Weather Types ,, Array
- WLST.Load();
- WLST->value9 = *(FORMID *)FieldValue;
- return true;
- case 10: //fnam Sun Texture
+ case 8: //sunPath
FNAM.Copy((STRING)FieldValue);
break;
- case 11: //gnam Sun Glare Texture
+ case 9: //glarePath
GNAM.Copy((STRING)FieldValue);
break;
- case 12: //modPath
+ case 10: //modPath
MODL.Load();
MODL->MODL.Copy((STRING)FieldValue);
break;
- case 13: //modb
+ case 11: //modb
MODL.Load();
MODL->MODB.value = *(FLOAT32 *)FieldValue;
break;
- case 14: //modt_p
+ case 12: //modt_p
MODL.Load();
MODL->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize);
break;
- case 15: //mods Alternate Textures
- MODL.Load();
- MODL->MODS.Copy((STRING)FieldValue);
- break;
- case 16: //mods Alternate Textures
+ case 13: //altTextures
MODL.Load();
- MODL->MODS.Load();
- MODL->MODS->value16 = *(FORMID *)FieldValue;
- return true;
- case 17: //mods Alternate Textures
- MODL.Load();
- MODL->MODS.Load();
- MODL->MODS->value17 = *(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 18: //modelFlags
+ case 14: //modelFlags
MODL.Load();
- MODL->MODD.Load();
- MODL->MODD->value18 = *(UINT8 *)FieldValue;
+ MODL->SetFlagMask(*(UINT8 *)FieldValue);
break;
- case 19: //tnam TNAM ,, Struct
- TNAM.Load();
- TNAM->value19 = *(UINT8 *)FieldValue;
+ case 15: //riseBegin
+ TNAM.value.riseBegin = *(UINT8 *)FieldValue;
break;
- case 20: //tnam TNAM ,, Struct
- TNAM.Load();
- TNAM->value20 = *(UINT8 *)FieldValue;
+ case 16: //riseEnd
+ TNAM.value.riseEnd = *(UINT8 *)FieldValue;
break;
- case 21: //tnam TNAM ,, Struct
- TNAM.Load();
- TNAM->value21 = *(UINT8 *)FieldValue;
+ case 17: //setBegin
+ TNAM.value.setBegin = *(UINT8 *)FieldValue;
break;
- case 22: //tnam TNAM ,, Struct
- TNAM.Load();
- TNAM->value22 = *(UINT8 *)FieldValue;
+ case 18: //setEnd
+ TNAM.value.setEnd = *(UINT8 *)FieldValue;
break;
- case 23: //tnam TNAM ,, Struct
- TNAM.Load();
- TNAM->value23 = *(UINT8 *)FieldValue;
+ case 19: //volatility
+ TNAM.value.volatility = *(UINT8 *)FieldValue;
break;
- case 24: //tnam TNAM ,, Struct
- TNAM.Load();
- TNAM->value24 = *(UINT8 *)FieldValue;
+ case 20: //phaseLength
+ TNAM.value.phaseLength = *(UINT8 *)FieldValue;
break;
default:
break;
@@ -306,6 +377,10 @@ bool CLMTRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
void CLMTRecord::DeleteField(FIELD_IDENTIFIERS)
{
+ CLMTTNAM defaultTNAM;
+ CLMTWLST defaultWLST;
+ FNVMODS defaultMODS;
+
switch(FieldID)
{
case 1: //flags1
@@ -324,69 +399,103 @@ void CLMTRecord::DeleteField(FIELD_IDENTIFIERS)
versionControl2[0] = 0;
versionControl2[1] = 0;
return;
- case 7: //wlst Weather Types ,, Array
- WLST.Unload();
- return;
- case 8: //wlst Weather Types ,, Array
- WLST.Unload();
- return;
- case 9: //wlst Weather Types ,, Array
- WLST.Unload();
+ case 7: //weathers
+ if(ListFieldID == 0) //weathers
+ {
+ Weathers.Unload();
+ return;
+ }
+
+ if(ListIndex >= Weathers.value.size())
+ return;
+
+ switch(ListFieldID)
+ {
+ case 1: //weather
+ Weathers.value[ListIndex].weather = defaultWLST.weather;
+ return;
+ case 2: //chance
+ Weathers.value[ListIndex].chance = defaultWLST.chance;
+ return;
+ case 3: //globalId
+ Weathers.value[ListIndex].globalId = defaultWLST.globalId;
+ return;
+ default:
+ return;
+ }
return;
- case 10: //fnam Sun Texture
+ case 8: //sunPath
FNAM.Unload();
return;
- case 11: //gnam Sun Glare Texture
+ case 9: //glarePath
GNAM.Unload();
return;
- case 12: //modPath
+ case 10: //modPath
if(MODL.IsLoaded())
MODL->MODL.Unload();
return;
- case 13: //modb
+ case 11: //modb
if(MODL.IsLoaded())
MODL->MODB.Unload();
return;
- case 14: //modt_p
+ case 12: //modt_p
if(MODL.IsLoaded())
MODL->MODT.Unload();
return;
- case 15: //mods Alternate Textures
- if(MODL.IsLoaded())
- MODL->MODS.Unload();
- return;
- case 16: //mods Alternate Textures
+ case 13: //altTextures
if(MODL.IsLoaded())
- MODL->MODS.Unload();
- return;
- case 17: //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 18: //modelFlags
+ case 14: //modelFlags
if(MODL.IsLoaded())
MODL->MODD.Unload();
return;
- case 19: //tnam TNAM ,, Struct
- TNAM.Unload();
+ case 15: //riseBegin
+ TNAM.value.riseBegin = defaultTNAM.riseBegin;
return;
- case 20: //tnam TNAM ,, Struct
- TNAM.Unload();
+ case 16: //riseEnd
+ TNAM.value.riseEnd = defaultTNAM.riseEnd;
return;
- case 21: //tnam TNAM ,, Struct
- TNAM.Unload();
+ case 17: //setBegin
+ TNAM.value.setBegin = defaultTNAM.setBegin;
return;
- case 22: //tnam TNAM ,, Struct
- TNAM.Unload();
+ case 18: //setEnd
+ TNAM.value.setEnd = defaultTNAM.setEnd;
return;
- case 23: //tnam TNAM ,, Struct
- TNAM.Unload();
+ case 19: //volatility
+ TNAM.value.volatility = defaultTNAM.volatility;
return;
- case 24: //tnam TNAM ,, Struct
- TNAM.Unload();
+ case 20: //phaseLength
+ TNAM.value.phaseLength = defaultTNAM.phaseLength;
return;
default:
return;
}
+ return;
}
}
\ No newline at end of file
diff --git a/CBash/FalloutNewVegas/Records/API/REGNRecordAPI.cpp b/CBash/FalloutNewVegas/Records/API/REGNRecordAPI.cpp
index e10e42e..67ca630 100644
--- a/CBash/FalloutNewVegas/Records/API/REGNRecordAPI.cpp
+++ b/CBash/FalloutNewVegas/Records/API/REGNRecordAPI.cpp
@@ -64,13 +64,13 @@ UINT32 REGNRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return ISTRING_FIELD;
case 8: //smallIconPath
return ISTRING_FIELD;
- case 9: //rclr RCLR ,, Struct
+ case 9: //mapRed
return UINT8_FIELD;
- case 10: //rclr RCLR ,, Struct
+ case 10: //mapGreen
return UINT8_FIELD;
- case 11: //rclr RCLR ,, Struct
+ case 11: //mapBlue
return UINT8_FIELD;
- case 12: //rclr_p RCLR ,, Struct
+ case 12: //unused1
switch(WhichAttribute)
{
case 0: //fieldType
@@ -81,144 +81,313 @@ UINT32 REGNRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 13: //wnam Worldspace
+ case 13: //worldspace
return FORMID_FIELD;
- case 14: //rpli Edge Fall-off
- return UINT32_FIELD;
- case 15: //rpld RPLD ,, Struct
- return FLOAT32_FIELD;
- case 16: //rpld RPLD ,, Struct
- return FLOAT32_FIELD;
- case 17: //rdat RDAT ,, Struct
- return UINT32_FIELD;
- case 18: //rdat RDAT ,, Struct
- return UINT8_FIELD;
- case 19: //rdat RDAT ,, Struct
- return UINT8_FIELD;
- case 20: //rdat_p RDAT ,, Struct
- switch(WhichAttribute)
+ case 14: //areas
+ if(ListFieldID == 0) //areas
{
- case 0: //fieldType
- return UINT8_ARRAY_FIELD;
- case 1: //fieldSize
- return 0;
- default:
- return UNKNOWN_FIELD;
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return LIST_FIELD;
+ case 1: //fieldSize
+ return (UINT32)Areas.value.size();
+ default:
+ return UNKNOWN_FIELD;
+ }
}
- return UNKNOWN_FIELD;
- case 21: //rdot RDOT ,, Struct
- return FORMID_FIELD;
- case 22: //rdot RDOT ,, Struct
- return UINT16_FIELD;
- case 23: //rdot_p RDOT ,, Struct
- switch(WhichAttribute)
+
+ if(ListIndex >= Areas.value.size())
+ return UNKNOWN_FIELD;
+
+ switch(ListFieldID)
{
- case 0: //fieldType
- return UINT8_ARRAY_FIELD;
- case 1: //fieldSize
- return 2;
+ case 1: //edgeFalloff
+ return FORMID_FIELD;
+ case 2: //points
+ if(ListX2FieldID == 0) //points
+ {
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return LIST_FIELD;
+ case 1: //fieldSize
+ return (UINT32)Areas.value[ListIndex]->RPLD.value.size();
+ default:
+ return UNKNOWN_FIELD;
+ }
+ }
+
+ if(ListX2Index >= Areas.value[ListIndex]->RPLD.value.size())
+ return UNKNOWN_FIELD;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //posX
+ return FLOAT32_FIELD;
+ case 2: //posY
+ return FLOAT32_FIELD;
+ default:
+ return UNKNOWN_FIELD;
+ }
default:
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 24: //rdot RDOT ,, Struct
- return FLOAT32_FIELD;
- case 25: //rdot RDOT ,, Struct
- return UINT8_FIELD;
- case 26: //rdot RDOT ,, Struct
- return UINT8_FIELD;
- case 27: //rdot RDOT ,, Struct
- return UINT8_FIELD;
- case 28: //rdot RDOT ,, Struct
- return UINT8_FIELD;
- case 29: //rdot RDOT ,, Struct
- return UINT16_FIELD;
- case 30: //rdot RDOT ,, Struct
- return UINT16_FIELD;
- case 31: //rdot_p RDOT ,, Struct
- switch(WhichAttribute)
+ case 15: //entries
+ if(ListFieldID == 0) //entries
{
- case 0: //fieldType
- return UINT8_ARRAY_FIELD;
- case 1: //fieldSize
- return 4;
- default:
- return UNKNOWN_FIELD;
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return LIST_FIELD;
+ case 1: //fieldSize
+ return (UINT32)Entries.value.size();
+ default:
+ return UNKNOWN_FIELD;
+ }
}
- return UNKNOWN_FIELD;
- case 32: //rdot RDOT ,, Struct
- return FLOAT32_FIELD;
- case 33: //rdot RDOT ,, Struct
- return FLOAT32_FIELD;
- case 34: //rdot RDOT ,, Struct
- return FLOAT32_FIELD;
- case 35: //rdot RDOT ,, Struct
- return FLOAT32_FIELD;
- case 36: //rdot RDOT ,, Struct
- return UINT16_FIELD;
- case 37: //rdot RDOT ,, Struct
- return UINT16_FIELD;
- case 38: //rdot RDOT ,, Struct
- return UINT16_FIELD;
- case 39: //rdot_p RDOT ,, Struct
- switch(WhichAttribute)
+
+ if(ListIndex >= Entries.value.size())
+ return UNKNOWN_FIELD;
+
+ switch(ListFieldID)
{
- case 0: //fieldType
- return UINT8_ARRAY_FIELD;
- case 1: //fieldSize
- return 2;
- default:
+ case 1: //entryType
+ return UINT32_TYPE_FIELD;
+ case 2: //flags
+ return UINT8_FLAG_FIELD;
+ case 3: //priority
+ return UINT8_FIELD;
+ case 4: //unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 2;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ case 5: //objects
+ if(ListX2FieldID == 0) //points
+ {
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return LIST_FIELD;
+ case 1: //fieldSize
+ return (UINT32)Entries.value[ListIndex]->RDOT.value.size();
+ default:
+ return UNKNOWN_FIELD;
+ }
+ }
+
+ if(ListX2Index >= Entries.value[ListIndex]->RDOT.value.size())
+ return UNKNOWN_FIELD;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //objectId
+ return FORMID_FIELD;
+ case 2: //parentIndex
+ return UINT16_FIELD;
+ case 3: //unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 2;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ case 4: //density
+ return FLOAT32_FIELD;
+ case 5: //clustering
+ return UINT8_FIELD;
+ case 6: //minSlope
+ return UINT8_FIELD;
+ case 7: //maxSlope
+ return UINT8_FIELD;
+ case 8: //flags
+ return UINT8_FLAG_FIELD;
+ case 9: //radiusWRTParent
+ return UINT16_FIELD;
+ case 10: //radius
+ return UINT16_FIELD;
+ case 11: //unk1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 4;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ case 12: //maxHeight
+ return FLOAT32_FIELD;
+ case 13: //sink
+ return FLOAT32_FIELD;
+ case 14: //sinkVar
+ return FLOAT32_FIELD;
+ case 15: //sizeVar
+ return FLOAT32_FIELD;
+ case 16: //angleVarX
+ return UINT16_FIELD;
+ case 17: //angleVarY
+ return UINT16_FIELD;
+ case 18: //angleVarZ
+ return UINT16_FIELD;
+ case 19: //unused2
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 2;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ case 20: //unk2
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 4;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ default:
+ return UNKNOWN_FIELD;
+ }
+ case 6: //mapName
+ return STRING_FIELD;
+ case 7: //iconPath
+ return ISTRING_FIELD;
+ case 8: //grasses
+ if(ListX2FieldID == 0) //grasses
+ {
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return LIST_FIELD;
+ case 1: //fieldSize
+ return (UINT32)Entries.value[ListIndex]->RDGS.value.size();
+ default:
+ return UNKNOWN_FIELD;
+ }
+ }
+
+ if(ListX2Index >= Entries.value[ListIndex]->RDGS.value.size())
+ return UNKNOWN_FIELD;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //grass
+ return FORMID_FIELD;
+ case 2: //unk1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 4;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ default:
+ return UNKNOWN_FIELD;
+ }
+ case 9: //musicType
+ return UINT32_TYPE_FIELD;
+ case 10: //music
+ return FORMID_FIELD;
+ case 11: //incidentalMedia
+ return FORMID_FIELD;
+ case 12: //battleMedias
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return FORMID_ARRAY_FIELD;
+ case 1: //fieldSize
+ return Entries.value[ListIndex]->RDSB.value.size();
+ default:
+ return UNKNOWN_FIELD;
+ }
return UNKNOWN_FIELD;
- }
- return UNKNOWN_FIELD;
- case 40: //rdot_p RDOT ,, Struct
- switch(WhichAttribute)
- {
- case 0: //fieldType
- return UINT8_ARRAY_FIELD;
- case 1: //fieldSize
- return 4;
- default:
+ case 13: //sounds
+ if(ListX2FieldID == 0) //sounds
+ {
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return LIST_FIELD;
+ case 1: //fieldSize
+ return (UINT32)Entries.value[ListIndex]->RDSD.value.size();
+ default:
+ return UNKNOWN_FIELD;
+ }
+ }
+
+ if(ListX2Index >= Entries.value[ListIndex]->RDSD.value.size())
+ return UNKNOWN_FIELD;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //sound
+ return FORMID_FIELD;
+ case 2: //flags
+ return UINT32_FLAG_FIELD;
+ case 3: //chance
+ return UINT32_FIELD;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ case 14: //weathers
+ if(ListX2FieldID == 0) //weathers
+ {
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return LIST_FIELD;
+ case 1: //fieldSize
+ return (UINT32)Entries.value[ListIndex]->RDWT.value.size();
+ default:
+ return UNKNOWN_FIELD;
+ }
+ }
+
+ if(ListX2Index >= Entries.value[ListIndex]->RDWT.value.size())
+ return UNKNOWN_FIELD;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //weather
+ return FORMID_FIELD;
+ case 2: //chance
+ return UINT32_FIELD;
+ case 3: //globalId
+ return FORMID_FIELD;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ case 15: //imposters
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return FORMID_ARRAY_FIELD;
+ case 1: //fieldSize
+ return Entries.value[ListIndex]->RDID.value.size();
+ default:
+ return UNKNOWN_FIELD;
+ }
return UNKNOWN_FIELD;
- }
- return UNKNOWN_FIELD;
- case 41: //rdmp Map Name
- return ISTRING_FIELD;
- case 42: //rdgs RDGS ,, Struct
- return FORMID_FIELD;
- case 43: //rdgs_p RDGS ,, Struct
- switch(WhichAttribute)
- {
- case 0: //fieldType
- return UINT8_ARRAY_FIELD;
- case 1: //fieldSize
- return 4;
default:
return UNKNOWN_FIELD;
}
- return UNKNOWN_FIELD;
- case 44: //rdmd Music Type
- return UINT32_FIELD;
- case 45: //rdmo Music
- return FORMID_FIELD;
- case 46: //rdsi Incidental MediaSet
- return FORMID_FIELD;
- case 47: //rdsb Battle MediaSet
- return FORMID_FIELD;
- case 48: //rdsd RDSD ,, Struct
- return FORMID_FIELD;
- case 49: //rdsd RDSD ,, Struct
- return UINT32_FIELD;
- case 50: //rdsd RDSD ,, Struct
- return UINT32_FIELD;
- case 51: //rdwt RDWT ,, Struct
- return FORMID_FIELD;
- case 52: //rdwt RDWT ,, Struct
- return UINT32_FIELD;
- case 53: //rdwt RDWT ,, Struct
- return FORMID_FIELD;
- case 54: //rdid Imposters
- return UNPARSED_FIELD;
default:
return UNKNOWN_FIELD;
}
@@ -247,105 +416,179 @@ void * REGNRecord::GetField(FIELD_IDENTIFIERS, void **FieldValues)
return ICON.value;
case 8: //smallIconPath
return MICO.value;
- case 9: //rclr RCLR ,, Struct
- return RCLR.IsLoaded() ? &RCLR->value9 : NULL;
- case 10: //rclr RCLR ,, Struct
- return RCLR.IsLoaded() ? &RCLR->value10 : NULL;
- case 11: //rclr RCLR ,, Struct
- return RCLR.IsLoaded() ? &RCLR->value11 : NULL;
- case 12: //rclr_p RCLR ,, Struct
- *FieldValues = RCLR.IsLoaded() ? &RCLR->value12[0] : NULL;
- return NULL;
- case 13: //wnam Worldspace
- return WNAM.IsLoaded() ? &WNAM->value13 : NULL;
- case 14: //rpli Edge Fall-off
- return RPLI.IsLoaded() ? &RPLI->value14 : NULL;
- case 15: //rpld RPLD ,, Struct
- return RPLD.IsLoaded() ? &RPLD->value15 : NULL;
- case 16: //rpld RPLD ,, Struct
- return RPLD.IsLoaded() ? &RPLD->value16 : NULL;
- case 17: //rdat RDAT ,, Struct
- return RDAT.IsLoaded() ? &RDAT->value17 : NULL;
- case 18: //rdat RDAT ,, Struct
- return RDAT.IsLoaded() ? &RDAT->value18 : NULL;
- case 19: //rdat RDAT ,, Struct
- return RDAT.IsLoaded() ? &RDAT->value19 : NULL;
- case 20: //rdat_p RDAT ,, Struct
- *FieldValues = RDAT.IsLoaded() ? &RDAT->value20[0] : NULL;
+ case 9: //mapRed
+ return &RCLR.value.red;
+ case 10: //mapGreen
+ return &RCLR.value.green;
+ case 11: //mapBlue
+ return &RCLR.value.blue;
+ case 12: //unused1
+ *FieldValues = &RCLR.value.unused1;
return NULL;
- case 21: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value21 : NULL;
- case 22: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value22 : NULL;
- case 23: //rdot_p RDOT ,, Struct
- *FieldValues = RDOT.IsLoaded() ? &RDOT->value23[0] : NULL;
- return NULL;
- case 24: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value24 : NULL;
- case 25: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value25 : NULL;
- case 26: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value26 : NULL;
- case 27: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value27 : NULL;
- case 28: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value28 : NULL;
- case 29: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value29 : NULL;
- case 30: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value30 : NULL;
- case 31: //rdot_p RDOT ,, Struct
- *FieldValues = RDOT.IsLoaded() ? &RDOT->value31[0] : NULL;
- return NULL;
- case 32: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value32 : NULL;
- case 33: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value33 : NULL;
- case 34: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value34 : NULL;
- case 35: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value35 : NULL;
- case 36: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value36 : NULL;
- case 37: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value37 : NULL;
- case 38: //rdot RDOT ,, Struct
- return RDOT.IsLoaded() ? &RDOT->value38 : NULL;
- case 39: //rdot_p RDOT ,, Struct
- *FieldValues = RDOT.IsLoaded() ? &RDOT->value39[0] : NULL;
- return NULL;
- case 40: //rdot_p RDOT ,, Struct
- *FieldValues = RDOT.IsLoaded() ? &RDOT->value40[0] : NULL;
+ case 13: //worldspace
+ return WNAM.IsLoaded() ? &WNAM.value : NULL;
+ case 14: //areas
+ if(ListIndex >= Areas.value.size())
+ return NULL;
+
+ switch(ListFieldID)
+ {
+ case 1: //edgeFalloff
+ return &Areas.value[ListIndex]->RPLI.value;
+ case 2: //points
+ if(ListX2Index >= Areas.value[ListIndex]->RPLD.value.size())
+ return NULL;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //posX
+ return &Areas.value[ListIndex]->RPLD.value[ListX2Index].posX;
+ case 2: //posY
+ return &Areas.value[ListIndex]->RPLD.value[ListX2Index].posY;
+ default:
+ return NULL;
+ }
+ return NULL;
+ default:
+ return NULL;
+ }
return NULL;
- case 41: //rdmp Map Name
- return RDMP.value;
- case 42: //rdgs RDGS ,, Struct
- return RDGS.IsLoaded() ? &RDGS->value42 : NULL;
- case 43: //rdgs_p RDGS ,, Struct
- *FieldValues = RDGS.IsLoaded() ? &RDGS->value43[0] : NULL;
+ case 15: //entries
+ if(ListIndex >= Entries.value.size())
+ return NULL;
+
+ switch(ListFieldID)
+ {
+ case 1: //entryType
+ return &Entries.value[ListIndex]->RDAT.value.entryType;
+ case 2: //flags
+ return &Entries.value[ListIndex]->RDAT.value.flags;
+ case 3: //priority
+ return &Entries.value[ListIndex]->RDAT.value.priority;
+ case 4: //unused1
+ *FieldValues = &Entries.value[ListIndex]->RDAT.value.unused1[0];
+ return NULL;
+ case 5: //objects
+ if(ListX2Index >= Entries.value[ListIndex]->RDOT.value.size())
+ return NULL;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //objectId
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].objectId;
+ case 2: //parentIndex
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].parentIndex;
+ case 3: //unused1
+ *FieldValues = &Entries.value[ListIndex]->RDOT.value[ListX2Index].unused1[0];
+ return NULL;
+ case 4: //density
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].density;
+ case 5: //clustering
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].clustering;
+ case 6: //minSlope
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].minSlope;
+ case 7: //maxSlope
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].maxSlope;
+ case 8: //flags
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].flags;
+ case 9: //radiusWRTParent
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].radiusWRTParent;
+ case 10: //radius
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].radius;
+ case 11: //unk1
+ *FieldValues = &Entries.value[ListIndex]->RDOT.value[ListX2Index].unk1[0];
+ return NULL;
+ case 12: //maxHeight
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].maxHeight;
+ case 13: //sink
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].sink;
+ case 14: //sinkVar
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].sinkVar;
+ case 15: //sizeVar
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].sizeVar;
+ case 16: //angleVarX
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].angleVarX;
+ case 17: //angleVarY
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].angleVarY;
+ case 18: //angleVarZ
+ return &Entries.value[ListIndex]->RDOT.value[ListX2Index].angleVarZ;
+ case 19: //unused2
+ *FieldValues = &Entries.value[ListIndex]->RDOT.value[ListX2Index].unused2[0];
+ return NULL;
+ case 20: //unk2
+ *FieldValues = &Entries.value[ListIndex]->RDOT.value[ListX2Index].unk2[0];
+ return NULL;
+ default:
+ return NULL;
+ }
+ return NULL;
+ case 6: //mapName
+ return Entries.value[ListIndex]->RDMP.value;
+ case 7: //iconPath
+ return Entries.value[ListIndex]->ICON.value;
+ case 8: //grasses
+ if(ListX2Index >= Entries.value[ListIndex]->RDGS.value.size())
+ return NULL;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //grass
+ return &Entries.value[ListIndex]->RDGS.value[ListX2Index].grass;
+ case 2: //unk1
+ *FieldValues = &Entries.value[ListIndex]->RDGS.value[ListX2Index].unk1[0];
+ return NULL;
+ default:
+ return NULL;
+ }
+ return NULL;
+ case 9: //musicType
+ return Entries.value[ListIndex]->RDMD.value;
+ case 10: //music
+ return &Entries.value[ListIndex]->RDMO.value;
+ case 11: //incidentalMedia
+ return &Entries.value[ListIndex]->RDSI.value;
+ case 12: //battleMedias
+ *FieldValues = Entries.value[ListIndex]->RDSB.IsLoaded() ? &Entries.value[ListIndex]->RDSB.value[0] : NULL;
+ return NULL;
+ case 13: //sounds
+ if(ListX2Index >= Entries.value[ListIndex]->RDSD.value.size())
+ return NULL;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //sound
+ return &Entries.value[ListIndex]->RDSD.value[ListX2Index].sound;
+ case 2: //flags
+ return &Entries.value[ListIndex]->RDSD.value[ListX2Index].flags;
+ case 3: //chance
+ return &Entries.value[ListIndex]->RDSD.value[ListX2Index].chance;
+ default:
+ return NULL;
+ }
+ return NULL;
+ case 14: //weathers
+ if(ListX2Index >= Entries.value[ListIndex]->RDWT.value.size())
+ return NULL;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //weather
+ return &Entries.value[ListIndex]->RDWT.value[ListX2Index].weather;
+ case 2: //chance
+ return &Entries.value[ListIndex]->RDWT.value[ListX2Index].chance;
+ case 3: //globalId
+ return &Entries.value[ListIndex]->RDWT.value[ListX2Index].globalId;
+ default:
+ return NULL;
+ }
+ return NULL;
+ case 15: //imposters
+ *FieldValues = Entries.value[ListIndex]->RDID.IsLoaded() ? &Entries.value[ListIndex]->RDID.value[0] : NULL;
+ return NULL;
+ default:
+ return NULL;
+ }
return NULL;
- case 44: //rdmd Music Type
- return RDMD.IsLoaded() ? &RDMD->value44 : NULL;
- case 45: //rdmo Music
- return RDMO.IsLoaded() ? &RDMO->value45 : NULL;
- case 46: //rdsi Incidental MediaSet
- return RDSI.IsLoaded() ? &RDSI->value46 : NULL;
- case 47: //rdsb Battle MediaSet
- return RDSB.IsLoaded() ? &RDSB->value47 : NULL;
- case 48: //rdsd RDSD ,, Struct
- return RDSD.IsLoaded() ? &RDSD->value48 : NULL;
- case 49: //rdsd RDSD ,, Struct
- return RDSD.IsLoaded() ? &RDSD->value49 : NULL;
- case 50: //rdsd RDSD ,, Struct
- return RDSD.IsLoaded() ? &RDSD->value50 : NULL;
- case 51: //rdwt RDWT ,, Struct
- return RDWT.IsLoaded() ? &RDWT->value51 : NULL;
- case 52: //rdwt RDWT ,, Struct
- return RDWT.IsLoaded() ? &RDWT->value52 : NULL;
- case 53: //rdwt RDWT ,, Struct
- return RDWT.IsLoaded() ? &RDWT->value53 : NULL;
- case 54: //rdid Imposters
- return UNPARSEDGET_FIELD54;
default:
return NULL;
}
@@ -385,211 +628,290 @@ bool REGNRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
case 8: //smallIconPath
MICO.Copy((STRING)FieldValue);
break;
- case 9: //rclr RCLR ,, Struct
- RCLR.Load();
- RCLR->value9 = *(UINT8 *)FieldValue;
+ case 9: //mapRed
+ RCLR.value.red = *(UINT8 *)FieldValue;
break;
- case 10: //rclr RCLR ,, Struct
- RCLR.Load();
- RCLR->value10 = *(UINT8 *)FieldValue;
+ case 10: //mapGreen
+ RCLR.value.green = *(UINT8 *)FieldValue;
break;
- case 11: //rclr RCLR ,, Struct
- RCLR.Load();
- RCLR->value11 = *(UINT8 *)FieldValue;
+ case 11: //mapBlue
+ RCLR.value.blue = *(UINT8 *)FieldValue;
break;
- case 12: //rclr_p RCLR ,, Struct
+ case 12: //unused1
if(ArraySize != 1)
break;
- RCLR.Load();
- RCLR->value12[0] = ((UINT8ARRAY)FieldValue)[0];
+ RCLR.value.unused1 = ((UINT8ARRAY)FieldValue)[0];
break;
- case 13: //wnam Worldspace
+ case 13: //worldspace
WNAM.Load();
- WNAM->value13 = *(FORMID *)FieldValue;
+ WNAM.value = *(FORMID *)FieldValue;
return true;
- case 14: //rpli Edge Fall-off
- RPLI.Load();
- RPLI->value14 = *(UINT32 *)FieldValue;
- break;
- case 15: //rpld RPLD ,, Struct
- RPLD.Load();
- RPLD->value15 = *(FLOAT32 *)FieldValue;
- break;
- case 16: //rpld RPLD ,, Struct
- RPLD.Load();
- RPLD->value16 = *(FLOAT32 *)FieldValue;
- break;
- case 17: //rdat RDAT ,, Struct
- RDAT.Load();
- RDAT->value17 = *(UINT32 *)FieldValue;
- break;
- case 18: //rdat RDAT ,, Struct
- RDAT.Load();
- RDAT->value18 = *(UINT8 *)FieldValue;
- break;
- case 19: //rdat RDAT ,, Struct
- RDAT.Load();
- RDAT->value19 = *(UINT8 *)FieldValue;
- break;
- case 20: //rdat_p RDAT ,, Struct
- if(ArraySize != 0)
- break;
- RDAT.Load();
- break;
- case 21: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value21 = *(FORMID *)FieldValue;
- return true;
- case 22: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value22 = *(UINT16 *)FieldValue;
- break;
- case 23: //rdot_p RDOT ,, Struct
- if(ArraySize != 2)
- break;
- RDOT.Load();
- RDOT->value23[0] = ((UINT8ARRAY)FieldValue)[0];
- RDOT->value23[1] = ((UINT8ARRAY)FieldValue)[1];
- break;
- case 24: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value24 = *(FLOAT32 *)FieldValue;
- break;
- case 25: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value25 = *(UINT8 *)FieldValue;
- break;
- case 26: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value26 = *(UINT8 *)FieldValue;
- break;
- case 27: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value27 = *(UINT8 *)FieldValue;
- break;
- case 28: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value28 = *(UINT8 *)FieldValue;
- break;
- case 29: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value29 = *(UINT16 *)FieldValue;
- break;
- case 30: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value30 = *(UINT16 *)FieldValue;
- break;
- case 31: //rdot_p RDOT ,, Struct
- if(ArraySize != 4)
- break;
- RDOT.Load();
- RDOT->value31[0] = ((UINT8ARRAY)FieldValue)[0];
- RDOT->value31[1] = ((UINT8ARRAY)FieldValue)[1];
- RDOT->value31[2] = ((UINT8ARRAY)FieldValue)[2];
- RDOT->value31[3] = ((UINT8ARRAY)FieldValue)[3];
- break;
- case 32: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value32 = *(FLOAT32 *)FieldValue;
- break;
- case 33: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value33 = *(FLOAT32 *)FieldValue;
- break;
- case 34: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value34 = *(FLOAT32 *)FieldValue;
- break;
- case 35: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value35 = *(FLOAT32 *)FieldValue;
- break;
- case 36: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value36 = *(UINT16 *)FieldValue;
- break;
- case 37: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value37 = *(UINT16 *)FieldValue;
- break;
- case 38: //rdot RDOT ,, Struct
- RDOT.Load();
- RDOT->value38 = *(UINT16 *)FieldValue;
- break;
- case 39: //rdot_p RDOT ,, Struct
- if(ArraySize != 2)
- break;
- RDOT.Load();
- RDOT->value39[0] = ((UINT8ARRAY)FieldValue)[0];
- RDOT->value39[1] = ((UINT8ARRAY)FieldValue)[1];
- break;
- case 40: //rdot_p RDOT ,, Struct
- if(ArraySize != 4)
+ case 14: //areas
+ if(ListFieldID == 0) //areasSize
+ {
+ Areas.resize(ArraySize);
+ return false;
+ }
+
+ if(ListIndex >= Areas.value.size())
break;
- RDOT.Load();
- RDOT->value40[0] = ((UINT8ARRAY)FieldValue)[0];
- RDOT->value40[1] = ((UINT8ARRAY)FieldValue)[1];
- RDOT->value40[2] = ((UINT8ARRAY)FieldValue)[2];
- RDOT->value40[3] = ((UINT8ARRAY)FieldValue)[3];
- break;
- case 41: //rdmp Map Name
- RDMP.Copy((STRING)FieldValue);
+
+ switch(ListFieldID)
+ {
+ case 1: //edgeFalloff
+ Areas.value[ListIndex]->RPLI.value = *(UINT32 *)FieldValue;
+ break;
+ case 2: //points
+ if(ListX2FieldID == 0) //pointsSize
+ {
+ Areas.value[ListIndex]->RPLD.resize(ArraySize);
+ return false;
+ }
+
+ if(ListX2Index >= Areas.value[ListIndex]->RPLD.value.size())
+ break;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //posX
+ Areas.value[ListIndex]->RPLD.value[ListX2Index].posX = *(FLOAT32 *)FieldValue;
+ break;
+ case 2: //posY
+ Areas.value[ListIndex]->RPLD.value[ListX2Index].posY = *(FLOAT32 *)FieldValue;
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
break;
- case 42: //rdgs RDGS ,, Struct
- RDGS.Load();
- RDGS->value42 = *(FORMID *)FieldValue;
- return true;
- case 43: //rdgs_p RDGS ,, Struct
- if(ArraySize != 4)
+ case 15: //entries
+ if(ListFieldID == 0) //areasSize
+ {
+ Entries.resize(ArraySize);
+ return false;
+ }
+
+ if(ListIndex >= Entries.value.size())
break;
- RDGS.Load();
- RDGS->value43[0] = ((UINT8ARRAY)FieldValue)[0];
- RDGS->value43[1] = ((UINT8ARRAY)FieldValue)[1];
- RDGS->value43[2] = ((UINT8ARRAY)FieldValue)[2];
- RDGS->value43[3] = ((UINT8ARRAY)FieldValue)[3];
- break;
- case 44: //rdmd Music Type
- RDMD.Load();
- RDMD->value44 = *(UINT32 *)FieldValue;
- break;
- case 45: //rdmo Music
- RDMO.Load();
- RDMO->value45 = *(FORMID *)FieldValue;
- return true;
- case 46: //rdsi Incidental MediaSet
- RDSI.Load();
- RDSI->value46 = *(FORMID *)FieldValue;
- return true;
- case 47: //rdsb Battle MediaSet
- RDSB.Load();
- RDSB->value47 = *(FORMID *)FieldValue;
- return true;
- case 48: //rdsd RDSD ,, Struct
- RDSD.Load();
- RDSD->value48 = *(FORMID *)FieldValue;
- return true;
- case 49: //rdsd RDSD ,, Struct
- RDSD.Load();
- RDSD->value49 = *(UINT32 *)FieldValue;
- break;
- case 50: //rdsd RDSD ,, Struct
- RDSD.Load();
- RDSD->value50 = *(UINT32 *)FieldValue;
- break;
- case 51: //rdwt RDWT ,, Struct
- RDWT.Load();
- RDWT->value51 = *(FORMID *)FieldValue;
- return true;
- case 52: //rdwt RDWT ,, Struct
- RDWT.Load();
- RDWT->value52 = *(UINT32 *)FieldValue;
+
+ switch(ListFieldID)
+ {
+ case 1: //entryType
+ Entries.value[ListIndex]->SetType(*(UINT32 *)FieldValue);
+ return true;
+ case 2: //flags
+ Entries.value[ListIndex]->SetFlagMask(*(UINT8 *)FieldValue);
+ break;
+ case 3: //priority
+ Entries.value[ListIndex]->RDAT.value.priority = *(UINT8 *)FieldValue;
+ break;
+ case 4: //unused1
+ if(ArraySize != 2)
+ break;
+ Entries.value[ListIndex]->RDAT.value.unused1[0] = ((UINT8ARRAY)FieldValue)[0];
+ Entries.value[ListIndex]->RDAT.value.unused1[1] = ((UINT8ARRAY)FieldValue)[1];
+ break;
+ case 5: //objects
+ if(ListX2FieldID == 0) //objectsSize
+ {
+ Entries.value[ListIndex]->RDOT.resize(ArraySize);
+ return false;
+ }
+
+ if(ListX2Index >= Entries.value[ListIndex]->RDOT.value.size())
+ break;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //objectId
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].objectId = *(FORMID *)FieldValue;
+ return true;
+ case 2: //parentIndex
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].parentIndex = *(UINT16 *)FieldValue;
+ break;
+ case 3: //unused1
+ if(ArraySize != 2)
+ break;
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unused1[0] = ((UINT8ARRAY)FieldValue)[0];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unused1[1] = ((UINT8ARRAY)FieldValue)[1];
+ break;
+ case 4: //density
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].density = *(FLOAT32 *)FieldValue;
+ break;
+ case 5: //clustering
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].clustering = *(UINT8 *)FieldValue;
+ break;
+ case 6: //minSlope
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].minSlope = *(UINT8 *)FieldValue;
+ break;
+ case 7: //maxSlope
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].maxSlope = *(UINT8 *)FieldValue;
+ break;
+ case 8: //flags
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].SetFlagMask(*(UINT8 *)FieldValue);
+ break;
+ case 9: //radiusWRTParent
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].radiusWRTParent = *(UINT16 *)FieldValue;
+ break;
+ case 10: //radius
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].radius = *(UINT16 *)FieldValue;
+ break;
+ case 11: //unk1
+ if(ArraySize != 4)
+ break;
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk1[0] = ((UINT8ARRAY)FieldValue)[0];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk1[1] = ((UINT8ARRAY)FieldValue)[1];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk1[2] = ((UINT8ARRAY)FieldValue)[2];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk1[3] = ((UINT8ARRAY)FieldValue)[3];
+ break;
+ case 12: //maxHeight
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].maxHeight = *(FLOAT32 *)FieldValue;
+ break;
+ case 13: //sink
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].sink = *(FLOAT32 *)FieldValue;
+ break;
+ case 14: //sinkVar
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].sinkVar = *(FLOAT32 *)FieldValue;
+ break;
+ case 15: //sizeVar
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].sizeVar = *(FLOAT32 *)FieldValue;
+ break;
+ case 16: //angleVarX
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].angleVarX = *(UINT16 *)FieldValue;
+ break;
+ case 17: //angleVarY
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].angleVarY = *(UINT16 *)FieldValue;
+ break;
+ case 18: //angleVarZ
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].angleVarZ = *(UINT16 *)FieldValue;
+ break;
+ case 19: //unused2
+ if(ArraySize != 2)
+ break;
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unused2[0] = ((UINT8ARRAY)FieldValue)[0];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unused2[1] = ((UINT8ARRAY)FieldValue)[1];
+ break;
+ case 20: //unk2
+ if(ArraySize != 4)
+ break;
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk2[0] = ((UINT8ARRAY)FieldValue)[0];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk2[1] = ((UINT8ARRAY)FieldValue)[1];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk2[2] = ((UINT8ARRAY)FieldValue)[2];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk2[3] = ((UINT8ARRAY)FieldValue)[3];
+ break;
+ default:
+ break;
+ }
+ break;
+ case 6: //mapName
+ Entries.value[ListIndex]->RDMP.Copy((STRING)FieldValue);
+ break;
+ case 7: //iconPath
+ Entries.value[ListIndex]->ICON.Copy((STRING)FieldValue);
+ break;
+ case 8: //grasses
+ if(ListX2FieldID == 0) //grassesSize
+ {
+ Entries.value[ListIndex]->RDGS.resize(ArraySize);
+ return false;
+ }
+
+ if(ListX2Index >= Entries.value[ListIndex]->RDGS.value.size())
+ break;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //grass
+ Entries.value[ListIndex]->RDGS.value[ListX2Index].grass = *(FORMID *)FieldValue;
+ return true;
+ case 2: //unk1
+ if(ArraySize != 4)
+ break;
+ Entries.value[ListIndex]->RDGS.value[ListX2Index].unk1[0] = ((UINT8ARRAY)FieldValue)[0];
+ Entries.value[ListIndex]->RDGS.value[ListX2Index].unk1[1] = ((UINT8ARRAY)FieldValue)[1];
+ Entries.value[ListIndex]->RDGS.value[ListX2Index].unk1[2] = ((UINT8ARRAY)FieldValue)[2];
+ Entries.value[ListIndex]->RDGS.value[ListX2Index].unk1[3] = ((UINT8ARRAY)FieldValue)[3];
+ break;
+ default:
+ break;
+ }
+ break;
+ case 9: //musicType
+ Entries.value[ListIndex]->SetMusicType(*(UINT32 *)FieldValue);
+ break;
+ case 10: //music
+ Entries.value[ListIndex]->RDMO.value = *(FORMID *)FieldValue;
+ return true;
+ case 11: //incidentalMedia
+ Entries.value[ListIndex]->RDSI.value = *(FORMID *)FieldValue;
+ return true;
+ case 12: //battleMedias
+ Entries.value[ListIndex]->RDSB.value.resize(ArraySize);
+ for(UINT32 x = 0; x < ArraySize; x++)
+ Entries.value[ListIndex]->RDSB.value[x] = ((FORMIDARRAY)FieldValue)[x];
+ return true;
+ case 13: //sounds
+ if(ListX2FieldID == 0) //soundsSize
+ {
+ Entries.value[ListIndex]->RDSD.resize(ArraySize);
+ return false;
+ }
+
+ if(ListX2Index >= Entries.value[ListIndex]->RDSD.value.size())
+ break;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //sound
+ Entries.value[ListIndex]->RDSD.value[ListX2Index].sound = *(FORMID *)FieldValue;
+ return true;
+ case 2: //flags
+ Entries.value[ListIndex]->RDSD.value[ListX2Index].SetFlagMask(*(UINT32 *)FieldValue);
+ break;
+ case 3: //chance
+ Entries.value[ListIndex]->RDSD.value[ListX2Index].chance = *(UINT32 *)FieldValue;
+ break;
+ default:
+ break;
+ }
+ break;
+ case 14: //weathers
+ if(ListX2FieldID == 0) //weathersSize
+ {
+ Entries.value[ListIndex]->RDWT.resize(ArraySize);
+ return false;
+ }
+
+ if(ListX2Index >= Entries.value[ListIndex]->RDWT.value.size())
+ break;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //weather
+ Entries.value[ListIndex]->RDWT.value[ListX2Index].weather = *(FORMID *)FieldValue;
+ return true;
+ case 2: //chance
+ Entries.value[ListIndex]->RDWT.value[ListX2Index].chance = *(UINT32 *)FieldValue;
+ break;
+ case 3: //globalId
+ Entries.value[ListIndex]->RDWT.value[ListX2Index].globalId = *(FORMID *)FieldValue;
+ return true;
+ default:
+ break;
+ }
+ break;
+ case 15: //imposters
+ Entries.value[ListIndex]->RDID.value.resize(ArraySize);
+ for(UINT32 x = 0; x < ArraySize; x++)
+ Entries.value[ListIndex]->RDID.value[x] = ((FORMIDARRAY)FieldValue)[x];
+ return true;
+ default:
+ break;
+ }
break;
- case 53: //rdwt RDWT ,, Struct
- RDWT.Load();
- RDWT->value53 = *(FORMID *)FieldValue;
- return true;
- case 54: //rdid Imposters
- return UNPARSEDGET_FIELD54;
default:
break;
}
@@ -598,6 +920,16 @@ bool REGNRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
void REGNRecord::DeleteField(FIELD_IDENTIFIERS)
{
+ GENCLR defaultCLR;
+
+ REGNRDAT defaultRDAT;
+
+ REGNRPLD defaultRPLD;
+ REGNRDOT defaultRDOT;
+ REGNRDGS defaultRDGS;
+ REGNRDSD defaultRDSD;
+ REGNRDWT defaultRDWT;
+
switch(FieldID)
{
case 1: //flags1
@@ -622,145 +954,274 @@ void REGNRecord::DeleteField(FIELD_IDENTIFIERS)
case 8: //smallIconPath
MICO.Unload();
return;
- case 9: //rclr RCLR ,, Struct
- RCLR.Unload();
+ case 9: //mapRed
+ RCLR.value.red = defaultCLR.red;
return;
- case 10: //rclr RCLR ,, Struct
- RCLR.Unload();
+ case 10: //mapGreen
+ RCLR.value.green = defaultCLR.green;
return;
- case 11: //rclr RCLR ,, Struct
- RCLR.Unload();
+ case 11: //mapBlue
+ RCLR.value.blue = defaultCLR.blue;
return;
- case 12: //rclr_p RCLR ,, Struct
- RCLR.Unload();
+ case 12: //unused1
+ RCLR.value.unused1 = defaultCLR.unused1;
return;
- case 13: //wnam Worldspace
+ case 13: //worldspace
WNAM.Unload();
return;
- case 14: //rpli Edge Fall-off
- RPLI.Unload();
- return;
- case 15: //rpld RPLD ,, Struct
- RPLD.Unload();
- return;
- case 16: //rpld RPLD ,, Struct
- RPLD.Unload();
- return;
- case 17: //rdat RDAT ,, Struct
- RDAT.Unload();
- return;
- case 18: //rdat RDAT ,, Struct
- RDAT.Unload();
- return;
- case 19: //rdat RDAT ,, Struct
- RDAT.Unload();
- return;
- case 20: //rdat_p RDAT ,, Struct
- RDAT.Unload();
- return;
- case 21: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 22: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 23: //rdot_p RDOT ,, Struct
- RDOT.Unload();
- return;
- case 24: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 25: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 26: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 27: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 28: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 29: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 30: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 31: //rdot_p RDOT ,, Struct
- RDOT.Unload();
- return;
- case 32: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 33: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 34: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 35: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 36: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 37: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 38: //rdot RDOT ,, Struct
- RDOT.Unload();
- return;
- case 39: //rdot_p RDOT ,, Struct
- RDOT.Unload();
- return;
- case 40: //rdot_p RDOT ,, Struct
- RDOT.Unload();
- return;
- case 41: //rdmp Map Name
- RDMP.Unload();
- return;
- case 42: //rdgs RDGS ,, Struct
- RDGS.Unload();
- return;
- case 43: //rdgs_p RDGS ,, Struct
- RDGS.Unload();
- return;
- case 44: //rdmd Music Type
- RDMD.Unload();
- return;
- case 45: //rdmo Music
- RDMO.Unload();
- return;
- case 46: //rdsi Incidental MediaSet
- RDSI.Unload();
- return;
- case 47: //rdsb Battle MediaSet
- RDSB.Unload();
- return;
- case 48: //rdsd RDSD ,, Struct
- RDSD.Unload();
- return;
- case 49: //rdsd RDSD ,, Struct
- RDSD.Unload();
- return;
- case 50: //rdsd RDSD ,, Struct
- RDSD.Unload();
- return;
- case 51: //rdwt RDWT ,, Struct
- RDWT.Unload();
- return;
- case 52: //rdwt RDWT ,, Struct
- RDWT.Unload();
+ case 14: //areas
+ if(ListFieldID == 0) //areas
+ {
+ Areas.Unload();
+ return;
+ }
+
+ if(ListIndex >= Areas.value.size())
+ return;
+
+ switch(ListFieldID)
+ {
+ case 1: //edgeFalloff
+ Areas.value[ListIndex]->RPLI.Unload();
+ return;
+ case 2: //points
+ if(ListX2FieldID == 0) //points
+ {
+ Areas.value[ListIndex]->RPLD.Unload();
+ return;
+ }
+
+ if(ListX2Index >= Areas.value[ListIndex]->RPLD.value.size())
+ return;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //posX
+ Areas.value[ListIndex]->RPLD.value[ListX2Index].posX = defaultRPLD.posX;
+ return;
+ case 2: //posY
+ Areas.value[ListIndex]->RPLD.value[ListX2Index].posY = defaultRPLD.posY;
+ return;
+ default:
+ return;
+ }
+ return;
+ default:
+ return;
+ }
return;
- case 53: //rdwt RDWT ,, Struct
- RDWT.Unload();
+ case 15: //entries
+ if(ListFieldID == 0) //entries
+ {
+ Entries.Unload();
+ return;
+ }
+
+ if(ListIndex >= Entries.value.size())
+ return;
+
+ switch(ListFieldID)
+ {
+ case 1: //entryType
+ Entries.value[ListIndex]->RDAT.value.entryType = defaultRDAT.entryType;
+ return;
+ case 2: //flags
+ Entries.value[ListIndex]->RDAT.value.flags = defaultRDAT.flags;
+ return;
+ case 3: //priority
+ Entries.value[ListIndex]->RDAT.value.priority = defaultRDAT.priority;
+ return;
+ case 4: //unused1
+ Entries.value[ListIndex]->RDAT.value.unused1[0] = defaultRDAT.unused1[0];
+ Entries.value[ListIndex]->RDAT.value.unused1[1] = defaultRDAT.unused1[1];
+ return;
+ case 5: //objects
+ if(ListX2FieldID == 0) //objects
+ {
+ Entries.value[ListIndex]->RDOT.Unload();
+ return;
+ }
+
+ if(ListX2Index >= Entries.value[ListIndex]->RDOT.value.size())
+ return;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //objectId
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].objectId = defaultRDOT.objectId;
+ return;
+ case 2: //parentIndex
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].parentIndex = defaultRDOT.parentIndex;
+ return;
+ case 3: //unused1
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unused1[0] = defaultRDOT.unused1[0];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unused1[1] = defaultRDOT.unused1[1];
+ return;
+ case 4: //density
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].density = defaultRDOT.density;
+ return;
+ case 5: //clustering
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].clustering = defaultRDOT.clustering;
+ return;
+ case 6: //minSlope
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].minSlope = defaultRDOT.minSlope;
+ return;
+ case 7: //maxSlope
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].maxSlope = defaultRDOT.maxSlope;
+ return;
+ case 8: //flags
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].flags = defaultRDOT.flags;
+ return;
+ case 9: //radiusWRTParent
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].radiusWRTParent = defaultRDOT.radiusWRTParent;
+ return;
+ case 10: //radius
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].radius = defaultRDOT.radius;
+ return;
+ case 11: //unk1
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk1[0] = defaultRDOT.unk1[0];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk1[1] = defaultRDOT.unk1[1];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk1[2] = defaultRDOT.unk1[2];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk1[3] = defaultRDOT.unk1[3];
+ return;
+ case 12: //maxHeight
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].maxHeight = defaultRDOT.maxHeight;
+ return;
+ case 13: //sink
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].sink = defaultRDOT.sink;
+ return;
+ case 14: //sinkVar
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].sinkVar = defaultRDOT.sinkVar;
+ return;
+ case 15: //sizeVar
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].sizeVar = defaultRDOT.sizeVar;
+ return;
+ case 16: //angleVarX
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].angleVarX = defaultRDOT.angleVarX;
+ return;
+ case 17: //angleVarY
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].angleVarY = defaultRDOT.angleVarY;
+ return;
+ case 18: //angleVarZ
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].angleVarZ = defaultRDOT.angleVarZ;
+ return;
+ case 19: //unused2
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unused2[0] = defaultRDOT.unused2[0];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unused2[1] = defaultRDOT.unused2[1];
+ return;
+ case 20: //unk2
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk2[0] = defaultRDOT.unk2[0];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk2[1] = defaultRDOT.unk2[1];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk2[2] = defaultRDOT.unk2[2];
+ Entries.value[ListIndex]->RDOT.value[ListX2Index].unk2[3] = defaultRDOT.unk2[3];
+ return;
+ default:
+ return;
+ }
+ return;
+ case 6: //mapName
+ Entries.value[ListIndex]->RDMP.Unload();
+ return;
+ case 7: //iconPath
+ Entries.value[ListIndex]->ICON.Unload();
+ return;
+ case 8: //grasses
+ if(ListX2FieldID == 0) //grasses
+ {
+ Entries.value[ListIndex]->RDGS.Unload();
+ return;
+ }
+
+ if(ListX2Index >= Entries.value[ListIndex]->RDGS.value.size())
+ return;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //grass
+ Entries.value[ListIndex]->RDGS.value[ListX2Index].grass = defaultRDGS.grass;
+ return;
+ case 2: //unk1
+ Entries.value[ListIndex]->RDGS.value[ListX2Index].unk1[0] = defaultRDGS.unk1[0];
+ Entries.value[ListIndex]->RDGS.value[ListX2Index].unk1[1] = defaultRDGS.unk1[1];
+ Entries.value[ListIndex]->RDGS.value[ListX2Index].unk1[2] = defaultRDGS.unk1[2];
+ Entries.value[ListIndex]->RDGS.value[ListX2Index].unk1[3] = defaultRDGS.unk1[3];
+ return;
+ default:
+ return;
+ }
+ return;
+ case 9: //musicType
+ Entries.value[ListIndex]->RDMD.Unload();
+ return;
+ case 10: //music
+ Entries.value[ListIndex]->RDMO.Unload();
+ return;
+ case 11: //incidentalMedia
+ Entries.value[ListIndex]->RDSI.Unload();
+ return;
+ case 12: //battleMedias
+ Entries.value[ListIndex]->RDSB.Unload();
+ return;
+ case 13: //sounds
+ if(ListX2FieldID == 0) //sounds
+ {
+ Entries.value[ListIndex]->RDSD.Unload();
+ return;
+ }
+
+ if(ListX2Index >= Entries.value[ListIndex]->RDSD.value.size())
+ return;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //sound
+ Entries.value[ListIndex]->RDSD.value[ListX2Index].sound = defaultRDSD.sound;
+ return;
+ case 2: //flags
+ Entries.value[ListIndex]->RDSD.value[ListX2Index].flags = defaultRDSD.flags;
+ return;
+ case 3: //chance
+ Entries.value[ListIndex]->RDSD.value[ListX2Index].chance = defaultRDSD.chance;
+ return;
+ default:
+ return;
+ }
+ return;
+ case 14: //weathers
+ if(ListX2FieldID == 0) //weathers
+ {
+ Entries.value[ListIndex]->RDWT.Unload();
+ return;
+ }
+
+ if(ListX2Index >= Entries.value[ListIndex]->RDWT.value.size())
+ return;
+
+ switch(ListX2FieldID)
+ {
+ case 1: //weather
+ Entries.value[ListIndex]->RDWT.value[ListX2Index].weather = defaultRDWT.weather;
+ return;
+ case 2: //chance
+ Entries.value[ListIndex]->RDWT.value[ListX2Index].chance = defaultRDWT.chance;
+ return;
+ case 3: //globalId
+ Entries.value[ListIndex]->RDWT.value[ListX2Index].globalId = defaultRDWT.globalId;
+ return;
+ default:
+ return;
+ }
+ return;
+ case 15: //imposters
+ Entries.value[ListIndex]->RDWT.Unload();
+ return;
+ default:
+ return;
+ }
return;
- case 54: //rdid Imposters
- return UNPARSEDDEL_FIELD54;
default:
return;
}
+ return;
}
}
\ No newline at end of file
diff --git a/CBash/FalloutNewVegas/Records/API/WTHRRecordAPI.cpp b/CBash/FalloutNewVegas/Records/API/WTHRRecordAPI.cpp
index b419ef0..8c8315d 100644
--- a/CBash/FalloutNewVegas/Records/API/WTHRRecordAPI.cpp
+++ b/CBash/FalloutNewVegas/Records/API/WTHRRecordAPI.cpp
@@ -60,25 +60,25 @@ UINT32 WTHRRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 7: //0iad Sunrise Image Space Modifier
+ case 7: //sunriseImageSpace
return FORMID_FIELD;
- case 8: //1iad Day Image Space Modifier
+ case 8: //dayImageSpace
return FORMID_FIELD;
- case 9: //2iad Sunset Image Space Modifier
+ case 9: //sunsetImageSpace
return FORMID_FIELD;
- case 10: //3iad Night Image Space Modifier
+ case 10: //nightImageSpace
return FORMID_FIELD;
- case 11: //4iad Unknown
+ case 11: //unknown1ImageSpace
return FORMID_FIELD;
- case 12: //5iad Unknown
+ case 12: //unknown2ImageSpace
return FORMID_FIELD;
- case 13: //dnam Cloud Textures - Layer 0
+ case 13: //cloudLayer0Path
return ISTRING_FIELD;
- case 14: //cnam Cloud Textures - Layer 1
+ case 14: //cloudLayer1Path
return ISTRING_FIELD;
- case 15: //anam Cloud Textures - Layer 2
+ case 15: //cloudLayer2Path
return ISTRING_FIELD;
- case 16: //bnam Cloud Textures - Layer 3
+ case 16: //cloudLayer3Path
return ISTRING_FIELD;
case 17: //modPath
return ISTRING_FIELD;
@@ -106,13 +106,13 @@ UINT32 WTHRRecord::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)
@@ -126,40 +126,54 @@ UINT32 WTHRRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
default:
return UNKNOWN_FIELD;
}
-
- case 23: //modelFlags
+ return UNKNOWN_FIELD;
+ case 21: //modelFlags
+ return UINT8_FLAG_FIELD;
+ case 22: //unknown1
+ return UINT32_FIELD;
+ case 23: //layer0Speed
+ return UINT8_FIELD;
+ case 24: //layer1Speed
return UINT8_FIELD;
- case 24: //lnam_p Unknown
+ case 25: //layer2Speed
+ return UINT8_FIELD;
+ case 26: //layer3Speed
+ return UINT8_FIELD;
+ case 27: //pnam_p
switch(WhichAttribute)
{
case 0: //fieldType
return UINT8_ARRAY_FIELD;
case 1: //fieldSize
- return 4;
+ return PNAM.GetSize();
default:
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 25: //onam Cloud Speed
- return UNPARSED_FIELD;
- case 26: //pnam_p Unused
+ case 28: //upperSky.rise.red
+ return UINT8_FIELD;
+ case 29: //upperSky.rise.green
+ return UINT8_FIELD;
+ case 30: //upperSky.rise.blue
+ return UINT8_FIELD;
+ case 31: //upperSky.rise.unused1
switch(WhichAttribute)
{
case 0: //fieldType
return UINT8_ARRAY_FIELD;
case 1: //fieldSize
- return PNAM.GetSize();
+ return 1;
default:
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 27: //nam0 NAM0 ,, Struct
+ case 32: //upperSky.day.red
return UINT8_FIELD;
- case 28: //nam0 NAM0 ,, Struct
+ case 33: //upperSky.day.green
return UINT8_FIELD;
- case 29: //nam0 NAM0 ,, Struct
+ case 34: //upperSky.day.blue
return UINT8_FIELD;
- case 30: //nam0_p NAM0 ,, Struct
+ case 35: //upperSky.day.unused1
switch(WhichAttribute)
{
case 0: //fieldType
@@ -170,720 +184,2825 @@ UINT32 WTHRRecord::GetFieldAttribute(FIELD_IDENTIFIERS, UINT32 WhichAttribute)
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 31: //fnam FNAM ,, Struct
- return FLOAT32_FIELD;
- case 32: //fnam FNAM ,, Struct
- return FLOAT32_FIELD;
- case 33: //fnam FNAM ,, Struct
- return FLOAT32_FIELD;
- case 34: //fnam FNAM ,, Struct
- return FLOAT32_FIELD;
- case 35: //fnam FNAM ,, Struct
- return FLOAT32_FIELD;
- case 36: //fnam FNAM ,, Struct
- return FLOAT32_FIELD;
- case 37: //inam_p Unused
+ case 36: //upperSky.set.red
+ return UINT8_FIELD;
+ case 37: //upperSky.set.green
+ return UINT8_FIELD;
+ case 38: //upperSky.set.blue
+ return UINT8_FIELD;
+ case 39: //upperSky.set.unused1
switch(WhichAttribute)
{
case 0: //fieldType
return UINT8_ARRAY_FIELD;
case 1: //fieldSize
- return 304;
+ return 1;
default:
return UNKNOWN_FIELD;
}
return UNKNOWN_FIELD;
- case 38: //data DATA ,, Struct
+ case 40: //upperSky.night.red
return UINT8_FIELD;
- case 39: //data DATA ,, Struct
+ case 41: //upperSky.night.green
return UINT8_FIELD;
- case 40: //data DATA ,, Struct
+ case 42: //upperSky.night.blue
return UINT8_FIELD;
- case 41: //data DATA ,, Struct
+ case 43: //upperSky.night.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 44: //upperSky.noon.red
return UINT8_FIELD;
- case 42: //data DATA ,, Struct
+ case 45: //upperSky.noon.green
return UINT8_FIELD;
- case 43: //data DATA ,, Struct
+ case 46: //upperSky.noon.blue
return UINT8_FIELD;
- case 44: //data DATA ,, Struct
+ case 47: //upperSky.noon.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 48: //upperSky.midnight.red
return UINT8_FIELD;
- case 45: //data DATA ,, Struct
+ case 49: //upperSky.midnight.green
return UINT8_FIELD;
- case 46: //data DATA ,, Struct
+ case 50: //upperSky.midnight.blue
return UINT8_FIELD;
- case 47: //data DATA ,, Struct
+ case 51: //upperSky.midnight.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 52: //fog.rise.red
return UINT8_FIELD;
- case 48: //data DATA ,, Struct
+ case 53: //fog.rise.green
return UINT8_FIELD;
- case 49: //data DATA ,, Struct
+ case 54: //fog.rise.blue
return UINT8_FIELD;
- case 50: //data DATA ,, Struct
+ case 55: //fog.rise.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 56: //fog.day.red
return UINT8_FIELD;
- case 51: //data DATA ,, Struct
+ case 57: //fog.day.green
return UINT8_FIELD;
- case 52: //data DATA ,, Struct
+ case 58: //fog.day.blue
return UINT8_FIELD;
- case 53: //snam SNAM ,, Struct
- return FORMID_FIELD;
- case 54: //snam SNAM ,, Struct
- return UINT32_FIELD;
- default:
+ case 59: //fog.day.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 60: //fog.set.red
+ return UINT8_FIELD;
+ case 61: //fog.set.green
+ return UINT8_FIELD;
+ case 62: //fog.set.blue
+ return UINT8_FIELD;
+ case 63: //fog.set.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 64: //fog.night.red
+ return UINT8_FIELD;
+ case 65: //fog.night.green
+ return UINT8_FIELD;
+ case 66: //fog.night.blue
+ return UINT8_FIELD;
+ case 67: //fog.night.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 68: //fog.noon.red
+ return UINT8_FIELD;
+ case 69: //fog.noon.green
+ return UINT8_FIELD;
+ case 70: //fog.noon.blue
+ return UINT8_FIELD;
+ case 71: //fog.noon.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 72: //fog.midnight.red
+ return UINT8_FIELD;
+ case 73: //fog.midnight.green
+ return UINT8_FIELD;
+ case 74: //fog.midnight.blue
+ return UINT8_FIELD;
+ case 75: //fog.midnight.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 76: //lowerClouds.rise.red
+ return UINT8_FIELD;
+ case 77: //lowerClouds.rise.green
+ return UINT8_FIELD;
+ case 78: //lowerClouds.rise.blue
+ return UINT8_FIELD;
+ case 79: //lowerClouds.rise.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 80: //lowerClouds.day.red
+ return UINT8_FIELD;
+ case 81: //lowerClouds.day.green
+ return UINT8_FIELD;
+ case 82: //lowerClouds.day.blue
+ return UINT8_FIELD;
+ case 83: //lowerClouds.day.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 84: //lowerClouds.set.red
+ return UINT8_FIELD;
+ case 85: //lowerClouds.set.green
+ return UINT8_FIELD;
+ case 86: //lowerClouds.set.blue
+ return UINT8_FIELD;
+ case 87: //lowerClouds.set.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 88: //lowerClouds.night.red
+ return UINT8_FIELD;
+ case 89: //lowerClouds.night.green
+ return UINT8_FIELD;
+ case 90: //lowerClouds.night.blue
+ return UINT8_FIELD;
+ case 91: //lowerClouds.night.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 92: //lowerClouds.noon.red
+ return UINT8_FIELD;
+ case 93: //lowerClouds.noon.green
+ return UINT8_FIELD;
+ case 94: //lowerClouds.noon.blue
+ return UINT8_FIELD;
+ case 95: //lowerClouds.noon.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
return UNKNOWN_FIELD;
- }
- return UNKNOWN_FIELD;
- }
-
-void * WTHRRecord::GetField(FIELD_IDENTIFIERS, void **FieldValues)
- {
- switch(FieldID)
- {
- case 1: //flags1
- return &flags;
- case 2: //fid
- return &formID;
- case 3: //versionControl1
- *FieldValues = &flagsUnk;
- return NULL;
- case 4: //eid
- return EDID.value;
- case 5: //formVersion
- return &formVersion;
- case 6: //versionControl2
- *FieldValues = &versionControl2[0];
- return NULL;
- case 7: //0iad Sunrise Image Space Modifier
- return 0IAD.IsLoaded() ? &0IAD->value7 : NULL;
- case 8: //1iad Day Image Space Modifier
- return 1IAD.IsLoaded() ? &1IAD->value8 : NULL;
- case 9: //2iad Sunset Image Space Modifier
- return 2IAD.IsLoaded() ? &2IAD->value9 : NULL;
- case 10: //3iad Night Image Space Modifier
- return 3IAD.IsLoaded() ? &3IAD->value10 : NULL;
- case 11: //4iad Unknown
- return 4IAD.IsLoaded() ? &4IAD->value11 : NULL;
- case 12: //5iad Unknown
- return 5IAD.IsLoaded() ? &5IAD->value12 : NULL;
- case 13: //dnam Cloud Textures - Layer 0
- return DNAM.value;
- case 14: //cnam Cloud Textures - Layer 1
- return CNAM.value;
- case 15: //anam Cloud Textures - Layer 2
- return ANAM.value;
- case 16: //bnam Cloud Textures - Layer 3
- return BNAM.value;
- case 17: //modPath
- return MODL.IsLoaded() ? MODL->MODL.value : NULL;
- case 18: //modb
- return MODL.IsLoaded() ? &MODL->MODB.value : NULL;
- case 19: //modt_p
- *FieldValues = MODL.IsLoaded() ? MODL->MODT.value : NULL;
- return NULL;
- case 20: //mods Alternate Textures
- return MODL.IsLoaded() ? MODL->MODS.value : NULL;
- case 21: //mods Alternate Textures
- return MODL.IsLoaded() ? &MODL->MODS->value21 : NULL;
- case 22: //mods Alternate Textures
- return MODL.IsLoaded() ? &MODL->MODS->value22 : NULL;
- case 23: //modelFlags
- return MODL.IsLoaded() ? &MODL->MODD->value23 : NULL;
- case 24: //lnam_p Unknown
- *FieldValues = LNAM.IsLoaded() ? &LNAM->value24[0] : NULL;
- return NULL;
- case 25: //onam Cloud Speed
- return UNPARSEDGET_FIELD25;
- case 26: //pnam_p Unused
- *FieldValues = PNAM.value;
- return NULL;
- case 27: //nam0 NAM0 ,, Struct
- return NAM0.IsLoaded() ? &NAM0->value27 : NULL;
- case 28: //nam0 NAM0 ,, Struct
- return NAM0.IsLoaded() ? &NAM0->value28 : NULL;
- case 29: //nam0 NAM0 ,, Struct
- return NAM0.IsLoaded() ? &NAM0->value29 : NULL;
- case 30: //nam0_p NAM0 ,, Struct
- *FieldValues = NAM0.IsLoaded() ? &NAM0->value30[0] : NULL;
- return NULL;
- case 31: //fnam FNAM ,, Struct
- return FNAM.IsLoaded() ? &FNAM->value31 : NULL;
- case 32: //fnam FNAM ,, Struct
- return FNAM.IsLoaded() ? &FNAM->value32 : NULL;
- case 33: //fnam FNAM ,, Struct
- return FNAM.IsLoaded() ? &FNAM->value33 : NULL;
- case 34: //fnam FNAM ,, Struct
- return FNAM.IsLoaded() ? &FNAM->value34 : NULL;
- case 35: //fnam FNAM ,, Struct
- return FNAM.IsLoaded() ? &FNAM->value35 : NULL;
- case 36: //fnam FNAM ,, Struct
- return FNAM.IsLoaded() ? &FNAM->value36 : NULL;
- case 37: //inam_p Unused
- *FieldValues = INAM.IsLoaded() ? &INAM->value37[0] : NULL;
- return 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: //snam SNAM ,, Struct
- return SNAM.IsLoaded() ? &SNAM->value53 : NULL;
- case 54: //snam SNAM ,, Struct
- return SNAM.IsLoaded() ? &SNAM->value54 : NULL;
- default:
- return NULL;
- }
- return NULL;
- }
-bool WTHRRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
- {
- switch(FieldID)
- {
- case 1: //flags1
- SetHeaderFlagMask(*(UINT32 *)FieldValue);
- break;
- case 3: //versionControl1
- if(ArraySize != 4)
- break;
- ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0];
- ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1];
- ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2];
- ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3];
- break;
- case 4: //eid
- EDID.Copy((STRING)FieldValue);
- break;
- case 5: //formVersion
- formVersion = *(UINT16 *)FieldValue;
- break;
- case 6: //versionControl2
- if(ArraySize != 2)
- break;
+ case 96: //lowerClouds.midnight.red
+ return UINT8_FIELD;
+ case 97: //lowerClouds.midnight.green
+ return UINT8_FIELD;
+ case 98: //lowerClouds.midnight.blue
+ return UINT8_FIELD;
+ case 99: //lowerClouds.midnight.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 100: //ambient.rise.red
+ return UINT8_FIELD;
+ case 101: //ambient.rise.green
+ return UINT8_FIELD;
+ case 102: //ambient.rise.blue
+ return UINT8_FIELD;
+ case 103: //ambient.rise.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 104: //ambient.day.red
+ return UINT8_FIELD;
+ case 105: //ambient.day.green
+ return UINT8_FIELD;
+ case 106: //ambient.day.blue
+ return UINT8_FIELD;
+ case 107: //ambient.day.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 108: //ambient.set.red
+ return UINT8_FIELD;
+ case 109: //ambient.set.green
+ return UINT8_FIELD;
+ case 110: //ambient.set.blue
+ return UINT8_FIELD;
+ case 111: //ambient.set.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 112: //ambient.night.red
+ return UINT8_FIELD;
+ case 113: //ambient.night.green
+ return UINT8_FIELD;
+ case 114: //ambient.night.blue
+ return UINT8_FIELD;
+ case 115: //ambient.night.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 116: //ambient.noon.red
+ return UINT8_FIELD;
+ case 117: //ambient.noon.green
+ return UINT8_FIELD;
+ case 118: //ambient.noon.blue
+ return UINT8_FIELD;
+ case 119: //ambient.noon.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+
+ case 120: //ambient.midnight.red
+ return UINT8_FIELD;
+ case 121: //ambient.midnight.green
+ return UINT8_FIELD;
+ case 122: //ambient.midnight.blue
+ return UINT8_FIELD;
+ case 123: //ambient.midnight.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 124: //sunlight.rise.red
+ return UINT8_FIELD;
+ case 125: //sunlight.rise.green
+ return UINT8_FIELD;
+ case 126: //sunlight.rise.blue
+ return UINT8_FIELD;
+ case 127: //sunlight.rise.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 128: //sunlight.day.red
+ return UINT8_FIELD;
+ case 129: //sunlight.day.green
+ return UINT8_FIELD;
+ case 130: //sunlight.day.blue
+ return UINT8_FIELD;
+ case 131: //sunlight.day.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 132: //sunlight.set.red
+ return UINT8_FIELD;
+ case 133: //sunlight.set.green
+ return UINT8_FIELD;
+ case 134: //sunlight.set.blue
+ return UINT8_FIELD;
+ case 135: //sunlight.set.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 136: //sunlight.night.red
+ return UINT8_FIELD;
+ case 137: //sunlight.night.green
+ return UINT8_FIELD;
+ case 138: //sunlight.night.blue
+ return UINT8_FIELD;
+ case 139: //sunlight.night.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 140: //sunlight.noon.red
+ return UINT8_FIELD;
+ case 141: //sunlight.noon.green
+ return UINT8_FIELD;
+ case 142: //sunlight.noon.blue
+ return UINT8_FIELD;
+ case 143: //sunlight.noon.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+
+ case 144: //sunlight.midnight.red
+ return UINT8_FIELD;
+ case 145: //sunlight.midnight.green
+ return UINT8_FIELD;
+ case 146: //sunlight.midnight.blue
+ return UINT8_FIELD;
+ case 147: //sunlight.midnight.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 148: //sun.rise.red
+ return UINT8_FIELD;
+ case 149: //sun.rise.green
+ return UINT8_FIELD;
+ case 150: //sun.rise.blue
+ return UINT8_FIELD;
+ case 151: //sun.rise.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 152: //sun.day.red
+ return UINT8_FIELD;
+ case 153: //sun.day.green
+ return UINT8_FIELD;
+ case 154: //sun.day.blue
+ return UINT8_FIELD;
+ case 155: //sun.day.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 156: //sun.set.red
+ return UINT8_FIELD;
+ case 157: //sun.set.green
+ return UINT8_FIELD;
+ case 158: //sun.set.blue
+ return UINT8_FIELD;
+ case 159: //sun.set.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 160: //sun.night.red
+ return UINT8_FIELD;
+ case 161: //sun.night.green
+ return UINT8_FIELD;
+ case 162: //sun.night.blue
+ return UINT8_FIELD;
+ case 163: //sun.night.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 164: //sun.noon.red
+ return UINT8_FIELD;
+ case 165: //sun.noon.green
+ return UINT8_FIELD;
+ case 166: //sun.noon.blue
+ return UINT8_FIELD;
+ case 167: //sun.noon.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+
+ case 168: //sun.midnight.red
+ return UINT8_FIELD;
+ case 169: //sun.midnight.green
+ return UINT8_FIELD;
+ case 170: //sun.midnight.blue
+ return UINT8_FIELD;
+ case 171: //sun.midnight.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 172: //stars.rise.red
+ return UINT8_FIELD;
+ case 173: //stars.rise.green
+ return UINT8_FIELD;
+ case 174: //stars.rise.blue
+ return UINT8_FIELD;
+ case 175: //stars.rise.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 176: //stars.day.red
+ return UINT8_FIELD;
+ case 177: //stars.day.green
+ return UINT8_FIELD;
+ case 178: //stars.day.blue
+ return UINT8_FIELD;
+ case 179: //stars.day.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 180: //stars.set.red
+ return UINT8_FIELD;
+ case 181: //stars.set.green
+ return UINT8_FIELD;
+ case 182: //stars.set.blue
+ return UINT8_FIELD;
+ case 183: //stars.set.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 184: //stars.night.red
+ return UINT8_FIELD;
+ case 185: //stars.night.green
+ return UINT8_FIELD;
+ case 186: //stars.night.blue
+ return UINT8_FIELD;
+ case 187: //stars.night.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 188: //stars.noon.red
+ return UINT8_FIELD;
+ case 189: //stars.noon.green
+ return UINT8_FIELD;
+ case 190: //stars.noon.blue
+ return UINT8_FIELD;
+ case 191: //stars.noon.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+
+ case 192: //stars.midnight.red
+ return UINT8_FIELD;
+ case 193: //stars.midnight.green
+ return UINT8_FIELD;
+ case 194: //stars.midnight.blue
+ return UINT8_FIELD;
+ case 195: //stars.midnight.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 196: //lowerSky.rise.red
+ return UINT8_FIELD;
+ case 197: //lowerSky.rise.green
+ return UINT8_FIELD;
+ case 198: //lowerSky.rise.blue
+ return UINT8_FIELD;
+ case 199: //lowerSky.rise.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 200: //lowerSky.day.red
+ return UINT8_FIELD;
+ case 201: //lowerSky.day.green
+ return UINT8_FIELD;
+ case 202: //lowerSky.day.blue
+ return UINT8_FIELD;
+ case 203: //lowerSky.day.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 204: //lowerSky.set.red
+ return UINT8_FIELD;
+ case 205: //lowerSky.set.green
+ return UINT8_FIELD;
+ case 206: //lowerSky.set.blue
+ return UINT8_FIELD;
+ case 207: //lowerSky.set.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 208: //lowerSky.night.red
+ return UINT8_FIELD;
+ case 209: //lowerSky.night.green
+ return UINT8_FIELD;
+ case 210: //lowerSky.night.blue
+ return UINT8_FIELD;
+ case 211: //lowerSky.night.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 212: //lowerSky.noon.red
+ return UINT8_FIELD;
+ case 213: //lowerSky.noon.green
+ return UINT8_FIELD;
+ case 214: //lowerSky.noon.blue
+ return UINT8_FIELD;
+ case 215: //lowerSky.noon.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+
+ case 216: //lowerSky.midnight.red
+ return UINT8_FIELD;
+ case 217: //lowerSky.midnight.green
+ return UINT8_FIELD;
+ case 218: //lowerSky.midnight.blue
+ return UINT8_FIELD;
+ case 219: //lowerSky.midnight.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 220: //horizon.rise.red
+ return UINT8_FIELD;
+ case 221: //horizon.rise.green
+ return UINT8_FIELD;
+ case 222: //horizon.rise.blue
+ return UINT8_FIELD;
+ case 223: //horizon.rise.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 224: //horizon.day.red
+ return UINT8_FIELD;
+ case 225: //horizon.day.green
+ return UINT8_FIELD;
+ case 226: //horizon.day.blue
+ return UINT8_FIELD;
+ case 227: //horizon.day.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 228: //horizon.set.red
+ return UINT8_FIELD;
+ case 229: //horizon.set.green
+ return UINT8_FIELD;
+ case 230: //horizon.set.blue
+ return UINT8_FIELD;
+ case 231: //horizon.set.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 232: //horizon.night.red
+ return UINT8_FIELD;
+ case 233: //horizon.night.green
+ return UINT8_FIELD;
+ case 234: //horizon.night.blue
+ return UINT8_FIELD;
+ case 235: //horizon.night.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 236: //horizon.noon.red
+ return UINT8_FIELD;
+ case 237: //horizon.noon.green
+ return UINT8_FIELD;
+ case 238: //horizon.noon.blue
+ return UINT8_FIELD;
+ case 239: //horizon.noon.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+
+ case 240: //horizon.midnight.red
+ return UINT8_FIELD;
+ case 241: //horizon.midnight.green
+ return UINT8_FIELD;
+ case 242: //horizon.midnight.blue
+ return UINT8_FIELD;
+ case 243: //horizon.midnight.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 244: //upperClouds.rise.red
+ return UINT8_FIELD;
+ case 245: //upperClouds.rise.green
+ return UINT8_FIELD;
+ case 246: //upperClouds.rise.blue
+ return UINT8_FIELD;
+ case 247: //upperClouds.rise.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 248: //upperClouds.day.red
+ return UINT8_FIELD;
+ case 249: //upperClouds.day.green
+ return UINT8_FIELD;
+ case 250: //upperClouds.day.blue
+ return UINT8_FIELD;
+ case 251: //upperClouds.day.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 252: //upperClouds.set.red
+ return UINT8_FIELD;
+ case 253: //upperClouds.set.green
+ return UINT8_FIELD;
+ case 254: //upperClouds.set.blue
+ return UINT8_FIELD;
+ case 255: //upperClouds.set.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 256: //upperClouds.night.red
+ return UINT8_FIELD;
+ case 257: //upperClouds.night.green
+ return UINT8_FIELD;
+ case 258: //upperClouds.night.blue
+ return UINT8_FIELD;
+ case 259: //upperClouds.night.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 260: //upperClouds.noon.red
+ return UINT8_FIELD;
+ case 261: //upperClouds.noon.green
+ return UINT8_FIELD;
+ case 262: //upperClouds.noon.blue
+ return UINT8_FIELD;
+ case 263: //upperClouds.noon.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 264: //upperClouds.midnight.red
+ return UINT8_FIELD;
+ case 265: //upperClouds.midnight.green
+ return UINT8_FIELD;
+ case 266: //upperClouds.midnight.blue
+ return UINT8_FIELD;
+ case 267: //upperClouds.midnight.unused1
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return 1;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 268: //fogDayNear
+ return FLOAT32_FIELD;
+ case 269: //fogDayFar
+ return FLOAT32_FIELD;
+ case 270: //fogNightNear
+ return FLOAT32_FIELD;
+ case 271: //fogNightFar
+ return FLOAT32_FIELD;
+ case 272: //fogDayPower
+ return FLOAT32_FIELD;
+ case 273: //fogNightPower
+ return FLOAT32_FIELD;
+ case 274: //inam_p
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return UINT8_ARRAY_FIELD;
+ case 1: //fieldSize
+ return INAM.GetSize();
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ case 275: //windSpeed
+ return UINT8_FIELD;
+ case 276: //lowerCloudSpeed
+ return UINT8_FIELD;
+ case 277: //upperCloudSpeed
+ return UINT8_FIELD;
+ case 278: //transDelta
+ return UINT8_FIELD;
+ case 279: //sunGlare
+ return UINT8_FIELD;
+ case 280: //sunDamage
+ return UINT8_FIELD;
+ case 281: //rainFadeIn
+ return UINT8_FIELD;
+ case 282: //rainFadeOut
+ return UINT8_FIELD;
+ case 283: //boltFadeIn
+ return UINT8_FIELD;
+ case 284: //boltFadeOut
+ return UINT8_FIELD;
+ case 285: //boltFrequency
+ return UINT8_FIELD;
+ case 286: //weatherType
+ return UINT8_TYPE_FIELD;
+ case 287: //boltRed
+ return UINT8_FIELD;
+ case 288: //boltGreen
+ return UINT8_FIELD;
+ case 289: //boltBlue
+ return UINT8_FIELD;
+ case 290: //sounds
+ if(ListFieldID == 0) //sounds
+ {
+ switch(WhichAttribute)
+ {
+ case 0: //fieldType
+ return LIST_FIELD;
+ case 1: //fieldSize
+ return (UINT32)Sounds.value.size();
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ }
+
+ if(ListIndex >= Sounds.value.size())
+ return UNKNOWN_FIELD;
+
+ switch(ListFieldID)
+ {
+ case 1: //sound
+ return FORMID_FIELD;
+ case 2: //type
+ return UINT32_TYPE_FIELD;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ default:
+ return UNKNOWN_FIELD;
+ }
+ return UNKNOWN_FIELD;
+ }
+
+void * WTHRRecord::GetField(FIELD_IDENTIFIERS, void **FieldValues)
+ {
+ switch(FieldID)
+ {
+ case 1: //flags1
+ return &flags;
+ case 2: //fid
+ return &formID;
+ case 3: //versionControl1
+ *FieldValues = &flagsUnk;
+ return NULL;
+ case 4: //eid
+ return EDID.value;
+ case 5: //formVersion
+ return &formVersion;
+ case 6: //versionControl2
+ *FieldValues = &versionControl2[0];
+ return NULL;
+ case 7: //sunriseImageSpace
+ return &_0IAD.value;
+ case 8: //dayImageSpace
+ return &_1IAD.value;
+ case 9: //sunsetImageSpace
+ return &_2IAD.value;
+ case 10: //nightImageSpace
+ return &_3IAD.value;
+ case 11: //unknown1ImageSpace
+ return &_4IAD.value;
+ case 12: //unknown2ImageSpace
+ return &_5IAD.value;
+ case 13: //cloudLayer0Path
+ return DNAM.value;
+ case 14: //cloudLayer1Path
+ return CNAM.value;
+ case 15: //cloudLayer2Path
+ return ANAM.value;
+ case 16: //cloudLayer3Path
+ return BNAM.value;
+ case 17: //modPath
+ return MODL.IsLoaded() ? MODL->MODL.value : NULL;
+ case 18: //modb
+ return MODL.IsLoaded() ? &MODL->MODB.value : NULL;
+ case 19: //modt_p
+ *FieldValues = MODL.IsLoaded() ? MODL->MODT.value : NULL;
+ return NULL;
+ case 20: //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 21: //modelFlags
+ return MODL.IsLoaded() ? &MODL->MODD.value : NULL;
+ case 22: //unknown1
+ return &LNAM.value;
+ case 23: //layer0Speed
+ return ONAM.IsLoaded() ? &ONAM->layer0Speed : NULL;
+ case 24: //layer1Speed
+ return ONAM.IsLoaded() ? &ONAM->layer1Speed : NULL;
+ case 25: //layer2Speed
+ return ONAM.IsLoaded() ? &ONAM->layer2Speed : NULL;
+ case 26: //layer3Speed
+ return ONAM.IsLoaded() ? &ONAM->layer3Speed : NULL;
+ case 27: //pnam_p
+ *FieldValues = PNAM.value;
+ return NULL;
+ case 28: //upperSky.rise.red
+ return &NAM0.value.upperSky.rise.red;
+ case 29: //upperSky.rise.green
+ return &NAM0.value.upperSky.rise.green;
+ case 30: //upperSky.rise.blue
+ return &NAM0.value.upperSky.rise.blue;
+ case 31: //upperSky.rise.unused1
+ *FieldValues = &NAM0.value.upperSky.rise.unused1;
+ return NULL;
+ case 32: //upperSky.day.red
+ return &NAM0.value.upperSky.day.red;
+ case 33: //upperSky.day.green
+ return &NAM0.value.upperSky.day.green;
+ case 34: //upperSky.day.blue
+ return &NAM0.value.upperSky.day.blue;
+ case 35: //upperSky.day.unused1
+ *FieldValues = &NAM0.value.upperSky.day.unused1;
+ return NULL;
+ case 36: //upperSky.set.red
+ return &NAM0.value.upperSky.set.red;
+ case 37: //upperSky.set.green
+ return &NAM0.value.upperSky.set.green;
+ case 38: //upperSky.set.blue
+ return &NAM0.value.upperSky.set.blue;
+ case 39: //upperSky.set.unused1
+ *FieldValues = &NAM0.value.upperSky.set.unused1;
+ return NULL;
+ case 40: //upperSky.night.red
+ return &NAM0.value.upperSky.night.red;
+ case 41: //upperSky.night.green
+ return &NAM0.value.upperSky.night.green;
+ case 42: //upperSky.night.blue
+ return &NAM0.value.upperSky.night.blue;
+ case 43: //upperSky.night.unused1
+ *FieldValues = &NAM0.value.upperSky.night.unused1;
+ return NULL;
+ case 44: //upperSky.noon.red
+ return &NAM0.value.upperSky.noon.red;
+ case 45: //upperSky.noon.green
+ return &NAM0.value.upperSky.noon.green;
+ case 46: //upperSky.noon.blue
+ return &NAM0.value.upperSky.noon.blue;
+ case 47: //upperSky.noon.unused1
+ *FieldValues = &NAM0.value.upperSky.noon.unused1;
+ return NULL;
+ case 48: //upperSky.midnight.red
+ return &NAM0.value.upperSky.midnight.red;
+ case 49: //upperSky.midnight.green
+ return &NAM0.value.upperSky.midnight.green;
+ case 50: //upperSky.midnight.blue
+ return &NAM0.value.upperSky.midnight.blue;
+ case 51: //upperSky.midnight.unused1
+ *FieldValues = &NAM0.value.upperSky.midnight.unused1;
+ return NULL;
+ case 52: //fog.rise.red
+ return &NAM0.value.fog.rise.red;
+ case 53: //fog.rise.green
+ return &NAM0.value.fog.rise.green;
+ case 54: //fog.rise.blue
+ return &NAM0.value.fog.rise.blue;
+ case 55: //fog.rise.unused1
+ *FieldValues = &NAM0.value.fog.rise.unused1;
+ return NULL;
+ case 56: //fog.day.red
+ return &NAM0.value.fog.day.red;
+ case 57: //fog.day.green
+ return &NAM0.value.fog.day.green;
+ case 58: //fog.day.blue
+ return &NAM0.value.fog.day.blue;
+ case 59: //fog.day.unused1
+ *FieldValues = &NAM0.value.fog.day.unused1;
+ return NULL;
+ case 60: //fog.set.red
+ return &NAM0.value.fog.set.red;
+ case 61: //fog.set.green
+ return &NAM0.value.fog.set.green;
+ case 62: //fog.set.blue
+ return &NAM0.value.fog.set.blue;
+ case 63: //fog.set.unused1
+ *FieldValues = &NAM0.value.fog.set.unused1;
+ return NULL;
+ case 64: //fog.night.red
+ return &NAM0.value.fog.night.red;
+ case 65: //fog.night.green
+ return &NAM0.value.fog.night.green;
+ case 66: //fog.night.blue
+ return &NAM0.value.fog.night.blue;
+ case 67: //fog.night.unused1
+ *FieldValues = &NAM0.value.fog.night.unused1;
+ return NULL;
+ case 68: //fog.noon.red
+ return &NAM0.value.fog.noon.red;
+ case 69: //fog.noon.green
+ return &NAM0.value.fog.noon.green;
+ case 70: //fog.noon.blue
+ return &NAM0.value.fog.noon.blue;
+ case 71: //fog.noon.unused1
+ *FieldValues = &NAM0.value.fog.noon.unused1;
+ return NULL;
+ case 72: //fog.midnight.red
+ return &NAM0.value.fog.midnight.red;
+ case 73: //fog.midnight.green
+ return &NAM0.value.fog.midnight.green;
+ case 74: //fog.midnight.blue
+ return &NAM0.value.fog.midnight.blue;
+ case 75: //fog.midnight.unused1
+ *FieldValues = &NAM0.value.fog.midnight.unused1;
+ return NULL;
+ case 76: //lowerClouds.rise.red
+ return &NAM0.value.lowerClouds.rise.red;
+ case 77: //lowerClouds.rise.green
+ return &NAM0.value.lowerClouds.rise.green;
+ case 78: //lowerClouds.rise.blue
+ return &NAM0.value.lowerClouds.rise.blue;
+ case 79: //lowerClouds.rise.unused1
+ *FieldValues = &NAM0.value.lowerClouds.rise.unused1;
+ return NULL;
+ case 80: //lowerClouds.day.red
+ return &NAM0.value.lowerClouds.day.red;
+ case 81: //lowerClouds.day.green
+ return &NAM0.value.lowerClouds.day.green;
+ case 82: //lowerClouds.day.blue
+ return &NAM0.value.lowerClouds.day.blue;
+ case 83: //lowerClouds.day.unused1
+ *FieldValues = &NAM0.value.lowerClouds.day.unused1;
+ return NULL;
+ case 84: //lowerClouds.set.red
+ return &NAM0.value.lowerClouds.set.red;
+ case 85: //lowerClouds.set.green
+ return &NAM0.value.lowerClouds.set.green;
+ case 86: //lowerClouds.set.blue
+ return &NAM0.value.lowerClouds.set.blue;
+ case 87: //lowerClouds.set.unused1
+ *FieldValues = &NAM0.value.lowerClouds.set.unused1;
+ return NULL;
+ case 88: //lowerClouds.night.red
+ return &NAM0.value.lowerClouds.night.red;
+ case 89: //lowerClouds.night.green
+ return &NAM0.value.lowerClouds.night.green;
+ case 90: //lowerClouds.night.blue
+ return &NAM0.value.lowerClouds.night.blue;
+ case 91: //lowerClouds.night.unused1
+ *FieldValues = &NAM0.value.lowerClouds.night.unused1;
+ return NULL;
+ case 92: //lowerClouds.noon.red
+ return &NAM0.value.lowerClouds.noon.red;
+ case 93: //lowerClouds.noon.green
+ return &NAM0.value.lowerClouds.noon.green;
+ case 94: //lowerClouds.noon.blue
+ return &NAM0.value.lowerClouds.noon.blue;
+ case 95: //lowerClouds.noon.unused1
+ *FieldValues = &NAM0.value.lowerClouds.noon.unused1;
+ return NULL;
+ case 96: //lowerClouds.midnight.red
+ return &NAM0.value.lowerClouds.midnight.red;
+ case 97: //lowerClouds.midnight.green
+ return &NAM0.value.lowerClouds.midnight.green;
+ case 98: //lowerClouds.midnight.blue
+ return &NAM0.value.lowerClouds.midnight.blue;
+ case 99: //lowerClouds.midnight.unused1
+ *FieldValues = &NAM0.value.lowerClouds.midnight.unused1;
+ return NULL;
+ case 100: //ambient.rise.red
+ return &NAM0.value.ambient.rise.red;
+ case 101: //ambient.rise.green
+ return &NAM0.value.ambient.rise.green;
+ case 102: //ambient.rise.blue
+ return &NAM0.value.ambient.rise.blue;
+ case 103: //ambient.rise.unused1
+ *FieldValues = &NAM0.value.ambient.rise.unused1;
+ return NULL;
+ case 104: //ambient.day.red
+ return &NAM0.value.ambient.day.red;
+ case 105: //ambient.day.green
+ return &NAM0.value.ambient.day.green;
+ case 106: //ambient.day.blue
+ return &NAM0.value.ambient.day.blue;
+ case 107: //ambient.day.unused1
+ *FieldValues = &NAM0.value.ambient.day.unused1;
+ return NULL;
+ case 108: //ambient.set.red
+ return &NAM0.value.ambient.set.red;
+ case 109: //ambient.set.green
+ return &NAM0.value.ambient.set.green;
+ case 110: //ambient.set.blue
+ return &NAM0.value.ambient.set.blue;
+ case 111: //ambient.set.unused1
+ *FieldValues = &NAM0.value.ambient.set.unused1;
+ return NULL;
+ case 112: //ambient.night.red
+ return &NAM0.value.ambient.night.red;
+ case 113: //ambient.night.green
+ return &NAM0.value.ambient.night.green;
+ case 114: //ambient.night.blue
+ return &NAM0.value.ambient.night.blue;
+ case 115: //ambient.night.unused1
+ *FieldValues = &NAM0.value.ambient.night.unused1;
+ return NULL;
+ case 116: //ambient.noon.red
+ return &NAM0.value.ambient.noon.red;
+ case 117: //ambient.noon.green
+ return &NAM0.value.ambient.noon.green;
+ case 118: //ambient.noon.blue
+ return &NAM0.value.ambient.noon.blue;
+ case 119: //ambient.noon.unused1
+ *FieldValues = &NAM0.value.ambient.noon.unused1;
+ return NULL;
+ case 120: //ambient.midnight.red
+ return &NAM0.value.ambient.midnight.red;
+ case 121: //ambient.midnight.green
+ return &NAM0.value.ambient.midnight.green;
+ case 122: //ambient.midnight.blue
+ return &NAM0.value.ambient.midnight.blue;
+ case 123: //ambient.midnight.unused1
+ *FieldValues = &NAM0.value.ambient.midnight.unused1;
+ return NULL;
+ case 124: //sunlight.rise.red
+ return &NAM0.value.sunlight.rise.red;
+ case 125: //sunlight.rise.green
+ return &NAM0.value.sunlight.rise.green;
+ case 126: //sunlight.rise.blue
+ return &NAM0.value.sunlight.rise.blue;
+ case 127: //sunlight.rise.unused1
+ *FieldValues = &NAM0.value.sunlight.rise.unused1;
+ return NULL;
+ case 128: //sunlight.day.red
+ return &NAM0.value.sunlight.day.red;
+ case 129: //sunlight.day.green
+ return &NAM0.value.sunlight.day.green;
+ case 130: //sunlight.day.blue
+ return &NAM0.value.sunlight.day.blue;
+ case 131: //sunlight.day.unused1
+ *FieldValues = &NAM0.value.sunlight.day.unused1;
+ return NULL;
+ case 132: //sunlight.set.red
+ return &NAM0.value.sunlight.set.red;
+ case 133: //sunlight.set.green
+ return &NAM0.value.sunlight.set.green;
+ case 134: //sunlight.set.blue
+ return &NAM0.value.sunlight.set.blue;
+ case 135: //sunlight.set.unused1
+ *FieldValues = &NAM0.value.sunlight.set.unused1;
+ return NULL;
+ case 136: //sunlight.night.red
+ return &NAM0.value.sunlight.night.red;
+ case 137: //sunlight.night.green
+ return &NAM0.value.sunlight.night.green;
+ case 138: //sunlight.night.blue
+ return &NAM0.value.sunlight.night.blue;
+ case 139: //sunlight.night.unused1
+ *FieldValues = &NAM0.value.sunlight.night.unused1;
+ return NULL;
+ case 140: //sunlight.noon.red
+ return &NAM0.value.sunlight.noon.red;
+ case 141: //sunlight.noon.green
+ return &NAM0.value.sunlight.noon.green;
+ case 142: //sunlight.noon.blue
+ return &NAM0.value.sunlight.noon.blue;
+ case 143: //sunlight.noon.unused1
+ *FieldValues = &NAM0.value.sunlight.noon.unused1;
+ return NULL;
+ case 144: //sunlight.midnight.red
+ return &NAM0.value.sunlight.midnight.red;
+ case 145: //sunlight.midnight.green
+ return &NAM0.value.sunlight.midnight.green;
+ case 146: //sunlight.midnight.blue
+ return &NAM0.value.sunlight.midnight.blue;
+ case 147: //sunlight.midnight.unused1
+ *FieldValues = &NAM0.value.sunlight.midnight.unused1;
+ return NULL;
+ case 148: //sun.rise.red
+ return &NAM0.value.sun.rise.red;
+ case 149: //sun.rise.green
+ return &NAM0.value.sun.rise.green;
+ case 150: //sun.rise.blue
+ return &NAM0.value.sun.rise.blue;
+ case 151: //sun.rise.unused1
+ *FieldValues = &NAM0.value.sun.rise.unused1;
+ return NULL;
+ case 152: //sun.day.red
+ return &NAM0.value.sun.day.red;
+ case 153: //sun.day.green
+ return &NAM0.value.sun.day.green;
+ case 154: //sun.day.blue
+ return &NAM0.value.sun.day.blue;
+ case 155: //sun.day.unused1
+ *FieldValues = &NAM0.value.sun.day.unused1;
+ return NULL;
+ case 156: //sun.set.red
+ return &NAM0.value.sun.set.red;
+ case 157: //sun.set.green
+ return &NAM0.value.sun.set.green;
+ case 158: //sun.set.blue
+ return &NAM0.value.sun.set.blue;
+ case 159: //sun.set.unused1
+ *FieldValues = &NAM0.value.sun.set.unused1;
+ return NULL;
+ case 160: //sun.night.red
+ return &NAM0.value.sun.night.red;
+ case 161: //sun.night.green
+ return &NAM0.value.sun.night.green;
+ case 162: //sun.night.blue
+ return &NAM0.value.sun.night.blue;
+ case 163: //sun.night.unused1
+ *FieldValues = &NAM0.value.sun.night.unused1;
+ return NULL;
+ case 164: //sun.noon.red
+ return &NAM0.value.sun.noon.red;
+ case 165: //sun.noon.green
+ return &NAM0.value.sun.noon.green;
+ case 166: //sun.noon.blue
+ return &NAM0.value.sun.noon.blue;
+ case 167: //sun.noon.unused1
+ *FieldValues = &NAM0.value.sun.noon.unused1;
+ return NULL;
+ case 168: //sun.midnight.red
+ return &NAM0.value.sun.midnight.red;
+ case 169: //sun.midnight.green
+ return &NAM0.value.sun.midnight.green;
+ case 170: //sun.midnight.blue
+ return &NAM0.value.sun.midnight.blue;
+ case 171: //sun.midnight.unused1
+ *FieldValues = &NAM0.value.sun.midnight.unused1;
+ return NULL;
+ case 172: //stars.rise.red
+ return &NAM0.value.stars.rise.red;
+ case 173: //stars.rise.green
+ return &NAM0.value.stars.rise.green;
+ case 174: //stars.rise.blue
+ return &NAM0.value.stars.rise.blue;
+ case 175: //stars.rise.unused1
+ *FieldValues = &NAM0.value.stars.rise.unused1;
+ return NULL;
+ case 176: //stars.day.red
+ return &NAM0.value.stars.day.red;
+ case 177: //stars.day.green
+ return &NAM0.value.stars.day.green;
+ case 178: //stars.day.blue
+ return &NAM0.value.stars.day.blue;
+ case 179: //stars.day.unused1
+ *FieldValues = &NAM0.value.stars.day.unused1;
+ return NULL;
+ case 180: //stars.set.red
+ return &NAM0.value.stars.set.red;
+ case 181: //stars.set.green
+ return &NAM0.value.stars.set.green;
+ case 182: //stars.set.blue
+ return &NAM0.value.stars.set.blue;
+ case 183: //stars.set.unused1
+ *FieldValues = &NAM0.value.stars.set.unused1;
+ return NULL;
+ case 184: //stars.night.red
+ return &NAM0.value.stars.night.red;
+ case 185: //stars.night.green
+ return &NAM0.value.stars.night.green;
+ case 186: //stars.night.blue
+ return &NAM0.value.stars.night.blue;
+ case 187: //stars.night.unused1
+ *FieldValues = &NAM0.value.stars.night.unused1;
+ return NULL;
+ case 188: //stars.noon.red
+ return &NAM0.value.stars.noon.red;
+ case 189: //stars.noon.green
+ return &NAM0.value.stars.noon.green;
+ case 190: //stars.noon.blue
+ return &NAM0.value.stars.noon.blue;
+ case 191: //stars.noon.unused1
+ *FieldValues = &NAM0.value.stars.noon.unused1;
+ return NULL;
+ case 192: //stars.midnight.red
+ return &NAM0.value.stars.midnight.red;
+ case 193: //stars.midnight.green
+ return &NAM0.value.stars.midnight.green;
+ case 194: //stars.midnight.blue
+ return &NAM0.value.stars.midnight.blue;
+ case 195: //stars.midnight.unused1
+ *FieldValues = &NAM0.value.stars.midnight.unused1;
+ return NULL;
+ case 196: //lowerSky.rise.red
+ return &NAM0.value.lowerSky.rise.red;
+ case 197: //lowerSky.rise.green
+ return &NAM0.value.lowerSky.rise.green;
+ case 198: //lowerSky.rise.blue
+ return &NAM0.value.lowerSky.rise.blue;
+ case 199: //lowerSky.rise.unused1
+ *FieldValues = &NAM0.value.lowerSky.rise.unused1;
+ return NULL;
+ case 200: //lowerSky.day.red
+ return &NAM0.value.lowerSky.day.red;
+ case 201: //lowerSky.day.green
+ return &NAM0.value.lowerSky.day.green;
+ case 202: //lowerSky.day.blue
+ return &NAM0.value.lowerSky.day.blue;
+ case 203: //lowerSky.day.unused1
+ *FieldValues = &NAM0.value.lowerSky.day.unused1;
+ return NULL;
+ case 204: //lowerSky.set.red
+ return &NAM0.value.lowerSky.set.red;
+ case 205: //lowerSky.set.green
+ return &NAM0.value.lowerSky.set.green;
+ case 206: //lowerSky.set.blue
+ return &NAM0.value.lowerSky.set.blue;
+ case 207: //lowerSky.set.unused1
+ *FieldValues = &NAM0.value.lowerSky.set.unused1;
+ return NULL;
+ case 208: //lowerSky.night.red
+ return &NAM0.value.lowerSky.night.red;
+ case 209: //lowerSky.night.green
+ return &NAM0.value.lowerSky.night.green;
+ case 210: //lowerSky.night.blue
+ return &NAM0.value.lowerSky.night.blue;
+ case 211: //lowerSky.night.unused1
+ *FieldValues = &NAM0.value.lowerSky.night.unused1;
+ return NULL;
+ case 212: //lowerSky.noon.red
+ return &NAM0.value.lowerSky.noon.red;
+ case 213: //lowerSky.noon.green
+ return &NAM0.value.lowerSky.noon.green;
+ case 214: //lowerSky.noon.blue
+ return &NAM0.value.lowerSky.noon.blue;
+ case 215: //lowerSky.noon.unused1
+ *FieldValues = &NAM0.value.lowerSky.noon.unused1;
+ return NULL;
+ case 216: //lowerSky.midnight.red
+ return &NAM0.value.lowerSky.midnight.red;
+ case 217: //lowerSky.midnight.green
+ return &NAM0.value.lowerSky.midnight.green;
+ case 218: //lowerSky.midnight.blue
+ return &NAM0.value.lowerSky.midnight.blue;
+ case 219: //lowerSky.midnight.unused1
+ *FieldValues = &NAM0.value.lowerSky.midnight.unused1;
+ return NULL;
+ case 220: //horizon.rise.red
+ return &NAM0.value.horizon.rise.red;
+ case 221: //horizon.rise.green
+ return &NAM0.value.horizon.rise.green;
+ case 222: //horizon.rise.blue
+ return &NAM0.value.horizon.rise.blue;
+ case 223: //horizon.rise.unused1
+ *FieldValues = &NAM0.value.horizon.rise.unused1;
+ return NULL;
+ case 224: //horizon.day.red
+ return &NAM0.value.horizon.day.red;
+ case 225: //horizon.day.green
+ return &NAM0.value.horizon.day.green;
+ case 226: //horizon.day.blue
+ return &NAM0.value.horizon.day.blue;
+ case 227: //horizon.day.unused1
+ *FieldValues = &NAM0.value.horizon.day.unused1;
+ return NULL;
+ case 228: //horizon.set.red
+ return &NAM0.value.horizon.set.red;
+ case 229: //horizon.set.green
+ return &NAM0.value.horizon.set.green;
+ case 230: //horizon.set.blue
+ return &NAM0.value.horizon.set.blue;
+ case 231: //horizon.set.unused1
+ *FieldValues = &NAM0.value.horizon.set.unused1;
+ return NULL;
+ case 232: //horizon.night.red
+ return &NAM0.value.horizon.night.red;
+ case 233: //horizon.night.green
+ return &NAM0.value.horizon.night.green;
+ case 234: //horizon.night.blue
+ return &NAM0.value.horizon.night.blue;
+ case 235: //horizon.night.unused1
+ *FieldValues = &NAM0.value.horizon.night.unused1;
+ return NULL;
+ case 236: //horizon.noon.red
+ return &NAM0.value.horizon.noon.red;
+ case 237: //horizon.noon.green
+ return &NAM0.value.horizon.noon.green;
+ case 238: //horizon.noon.blue
+ return &NAM0.value.horizon.noon.blue;
+ case 239: //horizon.noon.unused1
+ *FieldValues = &NAM0.value.horizon.noon.unused1;
+ return NULL;
+ case 240: //horizon.midnight.red
+ return &NAM0.value.horizon.midnight.red;
+ case 241: //horizon.midnight.green
+ return &NAM0.value.horizon.midnight.green;
+ case 242: //horizon.midnight.blue
+ return &NAM0.value.horizon.midnight.blue;
+ case 243: //horizon.midnight.unused1
+ *FieldValues = &NAM0.value.horizon.midnight.unused1;
+ return NULL;
+ case 244: //upperClouds.rise.red
+ return &NAM0.value.upperClouds.rise.red;
+ case 245: //upperClouds.rise.green
+ return &NAM0.value.upperClouds.rise.green;
+ case 246: //upperClouds.rise.blue
+ return &NAM0.value.upperClouds.rise.blue;
+ case 247: //upperClouds.rise.unused1
+ *FieldValues = &NAM0.value.upperClouds.rise.unused1;
+ return NULL;
+ case 248: //upperClouds.day.red
+ return &NAM0.value.upperClouds.day.red;
+ case 249: //upperClouds.day.green
+ return &NAM0.value.upperClouds.day.green;
+ case 250: //upperClouds.day.blue
+ return &NAM0.value.upperClouds.day.blue;
+ case 251: //upperClouds.day.unused1
+ *FieldValues = &NAM0.value.upperClouds.day.unused1;
+ return NULL;
+ case 252: //upperClouds.set.red
+ return &NAM0.value.upperClouds.set.red;
+ case 253: //upperClouds.set.green
+ return &NAM0.value.upperClouds.set.green;
+ case 254: //upperClouds.set.blue
+ return &NAM0.value.upperClouds.set.blue;
+ case 255: //upperClouds.set.unused1
+ *FieldValues = &NAM0.value.upperClouds.set.unused1;
+ return NULL;
+ case 256: //upperClouds.night.red
+ return &NAM0.value.upperClouds.night.red;
+ case 257: //upperClouds.night.green
+ return &NAM0.value.upperClouds.night.green;
+ case 258: //upperClouds.night.blue
+ return &NAM0.value.upperClouds.night.blue;
+ case 259: //upperClouds.night.unused1
+ *FieldValues = &NAM0.value.upperClouds.night.unused1;
+ return NULL;
+ case 260: //upperClouds.noon.red
+ return &NAM0.value.upperClouds.noon.red;
+ case 261: //upperClouds.noon.green
+ return &NAM0.value.upperClouds.noon.green;
+ case 262: //upperClouds.noon.blue
+ return &NAM0.value.upperClouds.noon.blue;
+ case 263: //upperClouds.noon.unused1
+ *FieldValues = &NAM0.value.upperClouds.noon.unused1;
+ return NULL;
+ case 264: //upperClouds.midnight.red
+ return &NAM0.value.upperClouds.midnight.red;
+ case 265: //upperClouds.midnight.green
+ return &NAM0.value.upperClouds.midnight.green;
+ case 266: //upperClouds.midnight.blue
+ return &NAM0.value.upperClouds.midnight.blue;
+ case 267: //upperClouds.midnight.unused1
+ *FieldValues = &NAM0.value.upperClouds.midnight.unused1;
+ return NULL;
+ case 268: //fogDayNear
+ return &FNAM.value.fogDayNear;
+ case 269: //fogDayFar
+ return &FNAM.value.fogDayFar;
+ case 270: //fogNightNear
+ return &FNAM.value.fogNightNear;
+ case 271: //fogNightFar
+ return &FNAM.value.fogNightFar;
+ case 272: //fogDayPower
+ return &FNAM.value.fogDayPower;
+ case 273: //fogNightPower
+ return &FNAM.value.fogNightPower;
+ case 274: //inam_p
+ *FieldValues = INAM.value;
+ return NULL;
+ case 275: //windSpeed
+ return &DATA.value.windSpeed;
+ case 276: //lowerCloudSpeed
+ return &DATA.value.lowerCloudSpeed;
+ case 277: //upperCloudSpeed
+ return &DATA.value.upperCloudSpeed;
+ case 278: //transDelta
+ return &DATA.value.transDelta;
+ case 279: //sunGlare
+ return &DATA.value.sunGlare;
+ case 280: //sunDamage
+ return &DATA.value.sunDamage;
+ case 281: //rainFadeIn
+ return &DATA.value.rainFadeIn;
+ case 282: //rainFadeOut
+ return &DATA.value.rainFadeOut;
+ case 283: //boltFadeIn
+ return &DATA.value.boltFadeIn;
+ case 284: //boltFadeOut
+ return &DATA.value.boltFadeOut;
+ case 285: //boltFrequency
+ return &DATA.value.boltFrequency;
+ case 286: //weatherType
+ return &DATA.value.weatherType;
+ case 287: //boltRed
+ return &DATA.value.boltRed;
+ case 288: //boltGreen
+ return &DATA.value.boltGreen;
+ case 289: //boltBlue
+ return &DATA.value.boltBlue;
+ case 290: //sounds
+ if(ListIndex >= Sounds.value.size())
+ return NULL;
+
+ switch(ListFieldID)
+ {
+ case 1: //sound
+ return &Sounds.value[ListIndex]->sound;
+ case 2: //type
+ return &Sounds.value[ListIndex]->type;
+ default:
+ return NULL;
+ }
+ return NULL;
+ default:
+ return NULL;
+ }
+ return NULL;
+ }
+
+bool WTHRRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
+ {
+ switch(FieldID)
+ {
+ case 1: //flags1
+ SetHeaderFlagMask(*(UINT32 *)FieldValue);
+ break;
+ case 3: //versionControl1
+ if(ArraySize != 4)
+ break;
+ ((UINT8ARRAY)&flagsUnk)[0] = ((UINT8ARRAY)FieldValue)[0];
+ ((UINT8ARRAY)&flagsUnk)[1] = ((UINT8ARRAY)FieldValue)[1];
+ ((UINT8ARRAY)&flagsUnk)[2] = ((UINT8ARRAY)FieldValue)[2];
+ ((UINT8ARRAY)&flagsUnk)[3] = ((UINT8ARRAY)FieldValue)[3];
+ break;
+ case 4: //eid
+ EDID.Copy((STRING)FieldValue);
+ break;
+ case 5: //formVersion
+ formVersion = *(UINT16 *)FieldValue;
+ break;
+ case 6: //versionControl2
+ if(ArraySize != 2)
+ break;
versionControl2[0] = ((UINT8ARRAY)FieldValue)[0];
versionControl2[1] = ((UINT8ARRAY)FieldValue)[1];
break;
- case 7: //0iad Sunrise Image Space Modifier
- 0IAD.Load();
- 0IAD->value7 = *(FORMID *)FieldValue;
- return true;
- case 8: //1iad Day Image Space Modifier
- 1IAD.Load();
- 1IAD->value8 = *(FORMID *)FieldValue;
- return true;
- case 9: //2iad Sunset Image Space Modifier
- 2IAD.Load();
- 2IAD->value9 = *(FORMID *)FieldValue;
- return true;
- case 10: //3iad Night Image Space Modifier
- 3IAD.Load();
- 3IAD->value10 = *(FORMID *)FieldValue;
- return true;
- case 11: //4iad Unknown
- 4IAD.Load();
- 4IAD->value11 = *(FORMID *)FieldValue;
- return true;
- case 12: //5iad Unknown
- 5IAD.Load();
- 5IAD->value12 = *(FORMID *)FieldValue;
- return true;
- case 13: //dnam Cloud Textures - Layer 0
- DNAM.Copy((STRING)FieldValue);
+ case 7: //sunriseImageSpace
+ _0IAD.value = *(FORMID *)FieldValue;
+ return true;
+ case 8: //dayImageSpace
+ _1IAD.value = *(FORMID *)FieldValue;
+ return true;
+ case 9: //sunsetImageSpace
+ _2IAD.value = *(FORMID *)FieldValue;
+ return true;
+ case 10: //nightImageSpace
+ _3IAD.value = *(FORMID *)FieldValue;
+ return true;
+ case 11: //unknown1ImageSpace
+ _4IAD.value = *(FORMID *)FieldValue;
+ return true;
+ case 12: //unknown2ImageSpace
+ _5IAD.value = *(FORMID *)FieldValue;
+ return true;
+ case 13: //cloudLayer0Path
+ DNAM.Copy((STRING)FieldValue);
+ break;
+ case 14: //cloudLayer1Path
+ CNAM.Copy((STRING)FieldValue);
+ break;
+ case 15: //cloudLayer2Path
+ ANAM.Copy((STRING)FieldValue);
+ break;
+ case 16: //cloudLayer3Path
+ BNAM.Copy((STRING)FieldValue);
+ break;
+ case 17: //modPath
+ MODL.Load();
+ MODL->MODL.Copy((STRING)FieldValue);
+ break;
+ case 18: //modb
+ MODL.Load();
+ MODL->MODB.value = *(FLOAT32 *)FieldValue;
+ break;
+ case 19: //modt_p
+ MODL.Load();
+ MODL->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize);
+ break;
+ case 20: //altTextures
+ MODL.Load();
+ 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 21: //modelFlags
+ MODL.Load();
+ MODL->SetFlagMask(*(UINT8 *)FieldValue);
+ break;
+ case 22: //unknown1
+ LNAM.value = *(UINT32 *)FieldValue;
+ break;
+ case 23: //layer0Speed
+ ONAM.Load();
+ ONAM->layer0Speed = *(UINT8 *)FieldValue;
+ break;
+ case 24: //layer1Speed
+ ONAM.Load();
+ ONAM->layer1Speed = *(UINT8 *)FieldValue;
+ break;
+ case 25: //layer2Speed
+ ONAM.Load();
+ ONAM->layer2Speed = *(UINT8 *)FieldValue;
+ break;
+ case 26: //layer3Speed
+ ONAM.Load();
+ ONAM->layer3Speed = *(UINT8 *)FieldValue;
+ break;
+ case 27: //PNAM
+ PNAM.Copy((UINT8ARRAY)FieldValue, ArraySize);
+ break;
+ case 28: //upperSky.rise.red
+ NAM0.value.upperSky.rise.red = *(UINT8 *)FieldValue;
+ break;
+ case 29: //upperSky.rise.green
+ NAM0.value.upperSky.rise.green = *(UINT8 *)FieldValue;
+ break;
+ case 30: //upperSky.rise.blue
+ NAM0.value.upperSky.rise.blue = *(UINT8 *)FieldValue;
+ break;
+ case 31: //upperSky.rise.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.upperSky.rise.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 32: //upperSky.day.red
+ NAM0.value.upperSky.day.red = *(UINT8 *)FieldValue;
+ break;
+ case 33: //upperSky.day.green
+ NAM0.value.upperSky.day.green = *(UINT8 *)FieldValue;
+ break;
+ case 34: //upperSky.day.blue
+ NAM0.value.upperSky.day.blue = *(UINT8 *)FieldValue;
+ break;
+ case 35: //upperSky.day.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.upperSky.day.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 36: //upperSky.set.red
+ NAM0.value.upperSky.set.red = *(UINT8 *)FieldValue;
+ break;
+ case 37: //upperSky.set.green
+ NAM0.value.upperSky.set.green = *(UINT8 *)FieldValue;
+ break;
+ case 38: //upperSky.set.blue
+ NAM0.value.upperSky.set.blue = *(UINT8 *)FieldValue;
+ break;
+ case 39: //upperSky.set.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.upperSky.set.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 40: //upperSky.night.red
+ NAM0.value.upperSky.night.red = *(UINT8 *)FieldValue;
+ break;
+ case 41: //upperSky.night.green
+ NAM0.value.upperSky.night.green = *(UINT8 *)FieldValue;
+ break;
+ case 42: //upperSky.night.blue
+ NAM0.value.upperSky.night.blue = *(UINT8 *)FieldValue;
+ break;
+ case 43: //upperSky.night.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.upperSky.night.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 44: //upperSky.noon.red
+ NAM0.value.upperSky.noon.red = *(UINT8 *)FieldValue;
+ break;
+ case 45: //upperSky.noon.green
+ NAM0.value.upperSky.noon.green = *(UINT8 *)FieldValue;
+ break;
+ case 46: //upperSky.noon.blue
+ NAM0.value.upperSky.noon.blue = *(UINT8 *)FieldValue;
+ break;
+ case 47: //upperSky.noon.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.upperSky.noon.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 48: //upperSky.midnight.red
+ NAM0.value.upperSky.midnight.red = *(UINT8 *)FieldValue;
+ break;
+ case 49: //upperSky.midnight.green
+ NAM0.value.upperSky.midnight.green = *(UINT8 *)FieldValue;
+ break;
+ case 50: //upperSky.midnight.blue
+ NAM0.value.upperSky.midnight.blue = *(UINT8 *)FieldValue;
+ break;
+ case 51: //upperSky.midnight.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.upperSky.midnight.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 52: //fog.rise.red
+ NAM0.value.fog.rise.red = *(UINT8 *)FieldValue;
+ break;
+ case 53: //fog.rise.green
+ NAM0.value.fog.rise.green = *(UINT8 *)FieldValue;
+ break;
+ case 54: //fog.rise.blue
+ NAM0.value.fog.rise.blue = *(UINT8 *)FieldValue;
+ break;
+ case 55: //fog.rise.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.fog.rise.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 56: //fog.day.red
+ NAM0.value.fog.day.red = *(UINT8 *)FieldValue;
+ break;
+ case 57: //fog.day.green
+ NAM0.value.fog.day.green = *(UINT8 *)FieldValue;
+ break;
+ case 58: //fog.day.blue
+ NAM0.value.fog.day.blue = *(UINT8 *)FieldValue;
+ break;
+ case 59: //fog.day.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.fog.day.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 60: //fog.set.red
+ NAM0.value.fog.set.red = *(UINT8 *)FieldValue;
+ break;
+ case 61: //fog.set.green
+ NAM0.value.fog.set.green = *(UINT8 *)FieldValue;
+ break;
+ case 62: //fog.set.blue
+ NAM0.value.fog.set.blue = *(UINT8 *)FieldValue;
+ break;
+ case 63: //fog.set.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.fog.set.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 64: //fog.night.red
+ NAM0.value.fog.night.red = *(UINT8 *)FieldValue;
+ break;
+ case 65: //fog.night.green
+ NAM0.value.fog.night.green = *(UINT8 *)FieldValue;
+ break;
+ case 66: //fog.night.blue
+ NAM0.value.fog.night.blue = *(UINT8 *)FieldValue;
+ break;
+ case 67: //fog.night.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.fog.night.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 68: //fog.noon.red
+ NAM0.value.fog.noon.red = *(UINT8 *)FieldValue;
+ break;
+ case 69: //fog.noon.green
+ NAM0.value.fog.noon.green = *(UINT8 *)FieldValue;
+ break;
+ case 70: //fog.noon.blue
+ NAM0.value.fog.noon.blue = *(UINT8 *)FieldValue;
+ break;
+ case 71: //fog.noon.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.fog.noon.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 72: //fog.midnight.red
+ NAM0.value.fog.midnight.red = *(UINT8 *)FieldValue;
+ break;
+ case 73: //fog.midnight.green
+ NAM0.value.fog.midnight.green = *(UINT8 *)FieldValue;
+ break;
+ case 74: //fog.midnight.blue
+ NAM0.value.fog.midnight.blue = *(UINT8 *)FieldValue;
+ break;
+ case 75: //fog.midnight.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.fog.midnight.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 76: //lowerClouds.rise.red
+ NAM0.value.lowerClouds.rise.red = *(UINT8 *)FieldValue;
+ break;
+ case 77: //lowerClouds.rise.green
+ NAM0.value.lowerClouds.rise.green = *(UINT8 *)FieldValue;
+ break;
+ case 78: //lowerClouds.rise.blue
+ NAM0.value.lowerClouds.rise.blue = *(UINT8 *)FieldValue;
+ break;
+ case 79: //lowerClouds.rise.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.lowerClouds.rise.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 80: //lowerClouds.day.red
+ NAM0.value.lowerClouds.day.red = *(UINT8 *)FieldValue;
+ break;
+ case 81: //lowerClouds.day.green
+ NAM0.value.lowerClouds.day.green = *(UINT8 *)FieldValue;
+ break;
+ case 82: //lowerClouds.day.blue
+ NAM0.value.lowerClouds.day.blue = *(UINT8 *)FieldValue;
+ break;
+ case 83: //lowerClouds.day.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.lowerClouds.day.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 84: //lowerClouds.set.red
+ NAM0.value.lowerClouds.set.red = *(UINT8 *)FieldValue;
+ break;
+ case 85: //lowerClouds.set.green
+ NAM0.value.lowerClouds.set.green = *(UINT8 *)FieldValue;
+ break;
+ case 86: //lowerClouds.set.blue
+ NAM0.value.lowerClouds.set.blue = *(UINT8 *)FieldValue;
+ break;
+ case 87: //lowerClouds.set.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.lowerClouds.set.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 88: //lowerClouds.night.red
+ NAM0.value.lowerClouds.night.red = *(UINT8 *)FieldValue;
+ break;
+ case 89: //lowerClouds.night.green
+ NAM0.value.lowerClouds.night.green = *(UINT8 *)FieldValue;
+ break;
+ case 90: //lowerClouds.night.blue
+ NAM0.value.lowerClouds.night.blue = *(UINT8 *)FieldValue;
+ break;
+ case 91: //lowerClouds.night.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.lowerClouds.night.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 92: //lowerClouds.noon.red
+ NAM0.value.lowerClouds.noon.red = *(UINT8 *)FieldValue;
+ break;
+ case 93: //lowerClouds.noon.green
+ NAM0.value.lowerClouds.noon.green = *(UINT8 *)FieldValue;
+ break;
+ case 94: //lowerClouds.noon.blue
+ NAM0.value.lowerClouds.noon.blue = *(UINT8 *)FieldValue;
+ break;
+ case 95: //lowerClouds.noon.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.lowerClouds.noon.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 96: //lowerClouds.midnight.red
+ NAM0.value.lowerClouds.midnight.red = *(UINT8 *)FieldValue;
+ break;
+ case 97: //lowerClouds.midnight.green
+ NAM0.value.lowerClouds.midnight.green = *(UINT8 *)FieldValue;
+ break;
+ case 98: //lowerClouds.midnight.blue
+ NAM0.value.lowerClouds.midnight.blue = *(UINT8 *)FieldValue;
+ break;
+ case 99: //lowerClouds.midnight.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.lowerClouds.midnight.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 100: //ambient.rise.red
+ NAM0.value.ambient.rise.red = *(UINT8 *)FieldValue;
+ break;
+ case 101: //ambient.rise.green
+ NAM0.value.ambient.rise.green = *(UINT8 *)FieldValue;
+ break;
+ case 102: //ambient.rise.blue
+ NAM0.value.ambient.rise.blue = *(UINT8 *)FieldValue;
+ break;
+ case 103: //ambient.rise.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.ambient.rise.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 104: //ambient.day.red
+ NAM0.value.ambient.day.red = *(UINT8 *)FieldValue;
+ break;
+ case 105: //ambient.day.green
+ NAM0.value.ambient.day.green = *(UINT8 *)FieldValue;
+ break;
+ case 106: //ambient.day.blue
+ NAM0.value.ambient.day.blue = *(UINT8 *)FieldValue;
+ break;
+ case 107: //ambient.day.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.ambient.day.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 108: //ambient.set.red
+ NAM0.value.ambient.set.red = *(UINT8 *)FieldValue;
+ break;
+ case 109: //ambient.set.green
+ NAM0.value.ambient.set.green = *(UINT8 *)FieldValue;
+ break;
+ case 110: //ambient.set.blue
+ NAM0.value.ambient.set.blue = *(UINT8 *)FieldValue;
+ break;
+ case 111: //ambient.set.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.ambient.set.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 112: //ambient.night.red
+ NAM0.value.ambient.night.red = *(UINT8 *)FieldValue;
+ break;
+ case 113: //ambient.night.green
+ NAM0.value.ambient.night.green = *(UINT8 *)FieldValue;
+ break;
+ case 114: //ambient.night.blue
+ NAM0.value.ambient.night.blue = *(UINT8 *)FieldValue;
+ break;
+ case 115: //ambient.night.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.ambient.night.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 116: //ambient.noon.red
+ NAM0.value.ambient.noon.red = *(UINT8 *)FieldValue;
+ break;
+ case 117: //ambient.noon.green
+ NAM0.value.ambient.noon.green = *(UINT8 *)FieldValue;
+ break;
+ case 118: //ambient.noon.blue
+ NAM0.value.ambient.noon.blue = *(UINT8 *)FieldValue;
+ break;
+ case 119: //ambient.noon.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.ambient.noon.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 120: //ambient.midnight.red
+ NAM0.value.ambient.midnight.red = *(UINT8 *)FieldValue;
+ break;
+ case 121: //ambient.midnight.green
+ NAM0.value.ambient.midnight.green = *(UINT8 *)FieldValue;
+ break;
+ case 122: //ambient.midnight.blue
+ NAM0.value.ambient.midnight.blue = *(UINT8 *)FieldValue;
+ break;
+ case 123: //ambient.midnight.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.ambient.midnight.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 124: //sunlight.rise.red
+ NAM0.value.sunlight.rise.red = *(UINT8 *)FieldValue;
+ break;
+ case 125: //sunlight.rise.green
+ NAM0.value.sunlight.rise.green = *(UINT8 *)FieldValue;
+ break;
+ case 126: //sunlight.rise.blue
+ NAM0.value.sunlight.rise.blue = *(UINT8 *)FieldValue;
+ break;
+ case 127: //sunlight.rise.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.sunlight.rise.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 128: //sunlight.day.red
+ NAM0.value.sunlight.day.red = *(UINT8 *)FieldValue;
+ break;
+ case 129: //sunlight.day.green
+ NAM0.value.sunlight.day.green = *(UINT8 *)FieldValue;
+ break;
+ case 130: //sunlight.day.blue
+ NAM0.value.sunlight.day.blue = *(UINT8 *)FieldValue;
+ break;
+ case 131: //sunlight.day.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.sunlight.day.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 132: //sunlight.set.red
+ NAM0.value.sunlight.set.red = *(UINT8 *)FieldValue;
+ break;
+ case 133: //sunlight.set.green
+ NAM0.value.sunlight.set.green = *(UINT8 *)FieldValue;
+ break;
+ case 134: //sunlight.set.blue
+ NAM0.value.sunlight.set.blue = *(UINT8 *)FieldValue;
+ break;
+ case 135: //sunlight.set.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.sunlight.set.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 136: //sunlight.night.red
+ NAM0.value.sunlight.night.red = *(UINT8 *)FieldValue;
+ break;
+ case 137: //sunlight.night.green
+ NAM0.value.sunlight.night.green = *(UINT8 *)FieldValue;
+ break;
+ case 138: //sunlight.night.blue
+ NAM0.value.sunlight.night.blue = *(UINT8 *)FieldValue;
+ break;
+ case 139: //sunlight.night.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.sunlight.night.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 140: //sunlight.noon.red
+ NAM0.value.sunlight.noon.red = *(UINT8 *)FieldValue;
+ break;
+ case 141: //sunlight.noon.green
+ NAM0.value.sunlight.noon.green = *(UINT8 *)FieldValue;
+ break;
+ case 142: //sunlight.noon.blue
+ NAM0.value.sunlight.noon.blue = *(UINT8 *)FieldValue;
+ break;
+ case 143: //sunlight.noon.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.sunlight.noon.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 144: //sunlight.midnight.red
+ NAM0.value.sunlight.midnight.red = *(UINT8 *)FieldValue;
+ break;
+ case 145: //sunlight.midnight.green
+ NAM0.value.sunlight.midnight.green = *(UINT8 *)FieldValue;
+ break;
+ case 146: //sunlight.midnight.blue
+ NAM0.value.sunlight.midnight.blue = *(UINT8 *)FieldValue;
+ break;
+ case 147: //sunlight.midnight.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.sunlight.midnight.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 148: //sun.rise.red
+ NAM0.value.sun.rise.red = *(UINT8 *)FieldValue;
+ break;
+ case 149: //sun.rise.green
+ NAM0.value.sun.rise.green = *(UINT8 *)FieldValue;
+ break;
+ case 150: //sun.rise.blue
+ NAM0.value.sun.rise.blue = *(UINT8 *)FieldValue;
+ break;
+ case 151: //sun.rise.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.sun.rise.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 152: //sun.day.red
+ NAM0.value.sun.day.red = *(UINT8 *)FieldValue;
+ break;
+ case 153: //sun.day.green
+ NAM0.value.sun.day.green = *(UINT8 *)FieldValue;
+ break;
+ case 154: //sun.day.blue
+ NAM0.value.sun.day.blue = *(UINT8 *)FieldValue;
+ break;
+ case 155: //sun.day.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.sun.day.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 156: //sun.set.red
+ NAM0.value.sun.set.red = *(UINT8 *)FieldValue;
+ break;
+ case 157: //sun.set.green
+ NAM0.value.sun.set.green = *(UINT8 *)FieldValue;
+ break;
+ case 158: //sun.set.blue
+ NAM0.value.sun.set.blue = *(UINT8 *)FieldValue;
+ break;
+ case 159: //sun.set.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.sun.set.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 160: //sun.night.red
+ NAM0.value.sun.night.red = *(UINT8 *)FieldValue;
+ break;
+ case 161: //sun.night.green
+ NAM0.value.sun.night.green = *(UINT8 *)FieldValue;
+ break;
+ case 162: //sun.night.blue
+ NAM0.value.sun.night.blue = *(UINT8 *)FieldValue;
+ break;
+ case 163: //sun.night.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.sun.night.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 164: //sun.noon.red
+ NAM0.value.sun.noon.red = *(UINT8 *)FieldValue;
+ break;
+ case 165: //sun.noon.green
+ NAM0.value.sun.noon.green = *(UINT8 *)FieldValue;
+ break;
+ case 166: //sun.noon.blue
+ NAM0.value.sun.noon.blue = *(UINT8 *)FieldValue;
+ break;
+ case 167: //sun.noon.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.sun.noon.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 168: //sun.midnight.red
+ NAM0.value.sun.midnight.red = *(UINT8 *)FieldValue;
break;
- case 14: //cnam Cloud Textures - Layer 1
- CNAM.Copy((STRING)FieldValue);
+ case 169: //sun.midnight.green
+ NAM0.value.sun.midnight.green = *(UINT8 *)FieldValue;
break;
- case 15: //anam Cloud Textures - Layer 2
- ANAM.Copy((STRING)FieldValue);
+ case 170: //sun.midnight.blue
+ NAM0.value.sun.midnight.blue = *(UINT8 *)FieldValue;
break;
- case 16: //bnam Cloud Textures - Layer 3
- BNAM.Copy((STRING)FieldValue);
+ case 171: //sun.midnight.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.sun.midnight.unused1 = ((UINT8ARRAY)FieldValue)[0];
break;
- case 17: //modPath
- MODL.Load();
- MODL->MODL.Copy((STRING)FieldValue);
+ case 172: //stars.rise.red
+ NAM0.value.stars.rise.red = *(UINT8 *)FieldValue;
break;
- case 18: //modb
- MODL.Load();
- MODL->MODB.value = *(FLOAT32 *)FieldValue;
+ case 173: //stars.rise.green
+ NAM0.value.stars.rise.green = *(UINT8 *)FieldValue;
break;
- case 19: //modt_p
- MODL.Load();
- MODL->MODT.Copy((UINT8ARRAY)FieldValue, ArraySize);
+ case 174: //stars.rise.blue
+ NAM0.value.stars.rise.blue = *(UINT8 *)FieldValue;
break;
- case 20: //mods Alternate Textures
- MODL.Load();
- MODL->MODS.Copy((STRING)FieldValue);
+ case 175: //stars.rise.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.stars.rise.unused1 = ((UINT8ARRAY)FieldValue)[0];
break;
- case 21: //mods Alternate Textures
- MODL.Load();
- MODL->MODS.Load();
- MODL->MODS->value21 = *(FORMID *)FieldValue;
- return true;
- case 22: //mods Alternate Textures
- MODL.Load();
- MODL->MODS.Load();
- MODL->MODS->value22 = *(SINT32 *)FieldValue;
+ case 176: //stars.day.red
+ NAM0.value.stars.day.red = *(UINT8 *)FieldValue;
break;
- case 23: //modelFlags
- MODL.Load();
- MODL->MODD.Load();
- MODL->MODD->value23 = *(UINT8 *)FieldValue;
+ case 177: //stars.day.green
+ NAM0.value.stars.day.green = *(UINT8 *)FieldValue;
break;
- case 24: //lnam_p Unknown
- if(ArraySize != 4)
+ case 178: //stars.day.blue
+ NAM0.value.stars.day.blue = *(UINT8 *)FieldValue;
+ break;
+ case 179: //stars.day.unused1
+ if(ArraySize != 1)
break;
- LNAM.Load();
- LNAM->value24[0] = ((UINT8ARRAY)FieldValue)[0];
- LNAM->value24[1] = ((UINT8ARRAY)FieldValue)[1];
- LNAM->value24[2] = ((UINT8ARRAY)FieldValue)[2];
- LNAM->value24[3] = ((UINT8ARRAY)FieldValue)[3];
+ NAM0.value.stars.day.unused1 = ((UINT8ARRAY)FieldValue)[0];
break;
- case 25: //onam Cloud Speed
- return UNPARSEDGET_FIELD25;
- case 26: //pnam_p Unused
- PNAM.Copy((UINT8ARRAY)FieldValue, ArraySize);
+ case 180: //stars.set.red
+ NAM0.value.stars.set.red = *(UINT8 *)FieldValue;
+ break;
+ case 181: //stars.set.green
+ NAM0.value.stars.set.green = *(UINT8 *)FieldValue;
+ break;
+ case 182: //stars.set.blue
+ NAM0.value.stars.set.blue = *(UINT8 *)FieldValue;
+ break;
+ case 183: //stars.set.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.stars.set.unused1 = ((UINT8ARRAY)FieldValue)[0];
break;
- case 27: //nam0 NAM0 ,, Struct
- NAM0.Load();
- NAM0->value27 = *(UINT8 *)FieldValue;
+ case 184: //stars.night.red
+ NAM0.value.stars.night.red = *(UINT8 *)FieldValue;
break;
- case 28: //nam0 NAM0 ,, Struct
- NAM0.Load();
- NAM0->value28 = *(UINT8 *)FieldValue;
+ case 185: //stars.night.green
+ NAM0.value.stars.night.green = *(UINT8 *)FieldValue;
break;
- case 29: //nam0 NAM0 ,, Struct
- NAM0.Load();
- NAM0->value29 = *(UINT8 *)FieldValue;
+ case 186: //stars.night.blue
+ NAM0.value.stars.night.blue = *(UINT8 *)FieldValue;
break;
- case 30: //nam0_p NAM0 ,, Struct
+ case 187: //stars.night.unused1
if(ArraySize != 1)
break;
- NAM0.Load();
- NAM0->value30[0] = ((UINT8ARRAY)FieldValue)[0];
- break;
- case 31: //fnam FNAM ,, Struct
- FNAM.Load();
- FNAM->value31 = *(FLOAT32 *)FieldValue;
- break;
- case 32: //fnam FNAM ,, Struct
- FNAM.Load();
- FNAM->value32 = *(FLOAT32 *)FieldValue;
- break;
- case 33: //fnam FNAM ,, Struct
- FNAM.Load();
- FNAM->value33 = *(FLOAT32 *)FieldValue;
- break;
- case 34: //fnam FNAM ,, Struct
- FNAM.Load();
- FNAM->value34 = *(FLOAT32 *)FieldValue;
- break;
- case 35: //fnam FNAM ,, Struct
- FNAM.Load();
- FNAM->value35 = *(FLOAT32 *)FieldValue;
- break;
- case 36: //fnam FNAM ,, Struct
- FNAM.Load();
- FNAM->value36 = *(FLOAT32 *)FieldValue;
- break;
- case 37: //inam_p Unused
- if(ArraySize != 304)
- break;
- INAM.Load();
- INAM->value37[0] = ((UINT8ARRAY)FieldValue)[0];
- INAM->value37[1] = ((UINT8ARRAY)FieldValue)[1];
- INAM->value37[2] = ((UINT8ARRAY)FieldValue)[2];
- INAM->value37[3] = ((UINT8ARRAY)FieldValue)[3];
- INAM->value37[4] = ((UINT8ARRAY)FieldValue)[4];
- INAM->value37[5] = ((UINT8ARRAY)FieldValue)[5];
- INAM->value37[6] = ((UINT8ARRAY)FieldValue)[6];
- INAM->value37[7] = ((UINT8ARRAY)FieldValue)[7];
- INAM->value37[8] = ((UINT8ARRAY)FieldValue)[8];
- INAM->value37[9] = ((UINT8ARRAY)FieldValue)[9];
- INAM->value37[10] = ((UINT8ARRAY)FieldValue)[10];
- INAM->value37[11] = ((UINT8ARRAY)FieldValue)[11];
- INAM->value37[12] = ((UINT8ARRAY)FieldValue)[12];
- INAM->value37[13] = ((UINT8ARRAY)FieldValue)[13];
- INAM->value37[14] = ((UINT8ARRAY)FieldValue)[14];
- INAM->value37[15] = ((UINT8ARRAY)FieldValue)[15];
- INAM->value37[16] = ((UINT8ARRAY)FieldValue)[16];
- INAM->value37[17] = ((UINT8ARRAY)FieldValue)[17];
- INAM->value37[18] = ((UINT8ARRAY)FieldValue)[18];
- INAM->value37[19] = ((UINT8ARRAY)FieldValue)[19];
- INAM->value37[20] = ((UINT8ARRAY)FieldValue)[20];
- INAM->value37[21] = ((UINT8ARRAY)FieldValue)[21];
- INAM->value37[22] = ((UINT8ARRAY)FieldValue)[22];
- INAM->value37[23] = ((UINT8ARRAY)FieldValue)[23];
- INAM->value37[24] = ((UINT8ARRAY)FieldValue)[24];
- INAM->value37[25] = ((UINT8ARRAY)FieldValue)[25];
- INAM->value37[26] = ((UINT8ARRAY)FieldValue)[26];
- INAM->value37[27] = ((UINT8ARRAY)FieldValue)[27];
- INAM->value37[28] = ((UINT8ARRAY)FieldValue)[28];
- INAM->value37[29] = ((UINT8ARRAY)FieldValue)[29];
- INAM->value37[30] = ((UINT8ARRAY)FieldValue)[30];
- INAM->value37[31] = ((UINT8ARRAY)FieldValue)[31];
- INAM->value37[32] = ((UINT8ARRAY)FieldValue)[32];
- INAM->value37[33] = ((UINT8ARRAY)FieldValue)[33];
- INAM->value37[34] = ((UINT8ARRAY)FieldValue)[34];
- INAM->value37[35] = ((UINT8ARRAY)FieldValue)[35];
- INAM->value37[36] = ((UINT8ARRAY)FieldValue)[36];
- INAM->value37[37] = ((UINT8ARRAY)FieldValue)[37];
- INAM->value37[38] = ((UINT8ARRAY)FieldValue)[38];
- INAM->value37[39] = ((UINT8ARRAY)FieldValue)[39];
- INAM->value37[40] = ((UINT8ARRAY)FieldValue)[40];
- INAM->value37[41] = ((UINT8ARRAY)FieldValue)[41];
- INAM->value37[42] = ((UINT8ARRAY)FieldValue)[42];
- INAM->value37[43] = ((UINT8ARRAY)FieldValue)[43];
- INAM->value37[44] = ((UINT8ARRAY)FieldValue)[44];
- INAM->value37[45] = ((UINT8ARRAY)FieldValue)[45];
- INAM->value37[46] = ((UINT8ARRAY)FieldValue)[46];
- INAM->value37[47] = ((UINT8ARRAY)FieldValue)[47];
- INAM->value37[48] = ((UINT8ARRAY)FieldValue)[48];
- INAM->value37[49] = ((UINT8ARRAY)FieldValue)[49];
- INAM->value37[50] = ((UINT8ARRAY)FieldValue)[50];
- INAM->value37[51] = ((UINT8ARRAY)FieldValue)[51];
- INAM->value37[52] = ((UINT8ARRAY)FieldValue)[52];
- INAM->value37[53] = ((UINT8ARRAY)FieldValue)[53];
- INAM->value37[54] = ((UINT8ARRAY)FieldValue)[54];
- INAM->value37[55] = ((UINT8ARRAY)FieldValue)[55];
- INAM->value37[56] = ((UINT8ARRAY)FieldValue)[56];
- INAM->value37[57] = ((UINT8ARRAY)FieldValue)[57];
- INAM->value37[58] = ((UINT8ARRAY)FieldValue)[58];
- INAM->value37[59] = ((UINT8ARRAY)FieldValue)[59];
- INAM->value37[60] = ((UINT8ARRAY)FieldValue)[60];
- INAM->value37[61] = ((UINT8ARRAY)FieldValue)[61];
- INAM->value37[62] = ((UINT8ARRAY)FieldValue)[62];
- INAM->value37[63] = ((UINT8ARRAY)FieldValue)[63];
- INAM->value37[64] = ((UINT8ARRAY)FieldValue)[64];
- INAM->value37[65] = ((UINT8ARRAY)FieldValue)[65];
- INAM->value37[66] = ((UINT8ARRAY)FieldValue)[66];
- INAM->value37[67] = ((UINT8ARRAY)FieldValue)[67];
- INAM->value37[68] = ((UINT8ARRAY)FieldValue)[68];
- INAM->value37[69] = ((UINT8ARRAY)FieldValue)[69];
- INAM->value37[70] = ((UINT8ARRAY)FieldValue)[70];
- INAM->value37[71] = ((UINT8ARRAY)FieldValue)[71];
- INAM->value37[72] = ((UINT8ARRAY)FieldValue)[72];
- INAM->value37[73] = ((UINT8ARRAY)FieldValue)[73];
- INAM->value37[74] = ((UINT8ARRAY)FieldValue)[74];
- INAM->value37[75] = ((UINT8ARRAY)FieldValue)[75];
- INAM->value37[76] = ((UINT8ARRAY)FieldValue)[76];
- INAM->value37[77] = ((UINT8ARRAY)FieldValue)[77];
- INAM->value37[78] = ((UINT8ARRAY)FieldValue)[78];
- INAM->value37[79] = ((UINT8ARRAY)FieldValue)[79];
- INAM->value37[80] = ((UINT8ARRAY)FieldValue)[80];
- INAM->value37[81] = ((UINT8ARRAY)FieldValue)[81];
- INAM->value37[82] = ((UINT8ARRAY)FieldValue)[82];
- INAM->value37[83] = ((UINT8ARRAY)FieldValue)[83];
- INAM->value37[84] = ((UINT8ARRAY)FieldValue)[84];
- INAM->value37[85] = ((UINT8ARRAY)FieldValue)[85];
- INAM->value37[86] = ((UINT8ARRAY)FieldValue)[86];
- INAM->value37[87] = ((UINT8ARRAY)FieldValue)[87];
- INAM->value37[88] = ((UINT8ARRAY)FieldValue)[88];
- INAM->value37[89] = ((UINT8ARRAY)FieldValue)[89];
- INAM->value37[90] = ((UINT8ARRAY)FieldValue)[90];
- INAM->value37[91] = ((UINT8ARRAY)FieldValue)[91];
- INAM->value37[92] = ((UINT8ARRAY)FieldValue)[92];
- INAM->value37[93] = ((UINT8ARRAY)FieldValue)[93];
- INAM->value37[94] = ((UINT8ARRAY)FieldValue)[94];
- INAM->value37[95] = ((UINT8ARRAY)FieldValue)[95];
- INAM->value37[96] = ((UINT8ARRAY)FieldValue)[96];
- INAM->value37[97] = ((UINT8ARRAY)FieldValue)[97];
- INAM->value37[98] = ((UINT8ARRAY)FieldValue)[98];
- INAM->value37[99] = ((UINT8ARRAY)FieldValue)[99];
- INAM->value37[100] = ((UINT8ARRAY)FieldValue)[100];
- INAM->value37[101] = ((UINT8ARRAY)FieldValue)[101];
- INAM->value37[102] = ((UINT8ARRAY)FieldValue)[102];
- INAM->value37[103] = ((UINT8ARRAY)FieldValue)[103];
- INAM->value37[104] = ((UINT8ARRAY)FieldValue)[104];
- INAM->value37[105] = ((UINT8ARRAY)FieldValue)[105];
- INAM->value37[106] = ((UINT8ARRAY)FieldValue)[106];
- INAM->value37[107] = ((UINT8ARRAY)FieldValue)[107];
- INAM->value37[108] = ((UINT8ARRAY)FieldValue)[108];
- INAM->value37[109] = ((UINT8ARRAY)FieldValue)[109];
- INAM->value37[110] = ((UINT8ARRAY)FieldValue)[110];
- INAM->value37[111] = ((UINT8ARRAY)FieldValue)[111];
- INAM->value37[112] = ((UINT8ARRAY)FieldValue)[112];
- INAM->value37[113] = ((UINT8ARRAY)FieldValue)[113];
- INAM->value37[114] = ((UINT8ARRAY)FieldValue)[114];
- INAM->value37[115] = ((UINT8ARRAY)FieldValue)[115];
- INAM->value37[116] = ((UINT8ARRAY)FieldValue)[116];
- INAM->value37[117] = ((UINT8ARRAY)FieldValue)[117];
- INAM->value37[118] = ((UINT8ARRAY)FieldValue)[118];
- INAM->value37[119] = ((UINT8ARRAY)FieldValue)[119];
- INAM->value37[120] = ((UINT8ARRAY)FieldValue)[120];
- INAM->value37[121] = ((UINT8ARRAY)FieldValue)[121];
- INAM->value37[122] = ((UINT8ARRAY)FieldValue)[122];
- INAM->value37[123] = ((UINT8ARRAY)FieldValue)[123];
- INAM->value37[124] = ((UINT8ARRAY)FieldValue)[124];
- INAM->value37[125] = ((UINT8ARRAY)FieldValue)[125];
- INAM->value37[126] = ((UINT8ARRAY)FieldValue)[126];
- INAM->value37[127] = ((UINT8ARRAY)FieldValue)[127];
- INAM->value37[128] = ((UINT8ARRAY)FieldValue)[128];
- INAM->value37[129] = ((UINT8ARRAY)FieldValue)[129];
- INAM->value37[130] = ((UINT8ARRAY)FieldValue)[130];
- INAM->value37[131] = ((UINT8ARRAY)FieldValue)[131];
- INAM->value37[132] = ((UINT8ARRAY)FieldValue)[132];
- INAM->value37[133] = ((UINT8ARRAY)FieldValue)[133];
- INAM->value37[134] = ((UINT8ARRAY)FieldValue)[134];
- INAM->value37[135] = ((UINT8ARRAY)FieldValue)[135];
- INAM->value37[136] = ((UINT8ARRAY)FieldValue)[136];
- INAM->value37[137] = ((UINT8ARRAY)FieldValue)[137];
- INAM->value37[138] = ((UINT8ARRAY)FieldValue)[138];
- INAM->value37[139] = ((UINT8ARRAY)FieldValue)[139];
- INAM->value37[140] = ((UINT8ARRAY)FieldValue)[140];
- INAM->value37[141] = ((UINT8ARRAY)FieldValue)[141];
- INAM->value37[142] = ((UINT8ARRAY)FieldValue)[142];
- INAM->value37[143] = ((UINT8ARRAY)FieldValue)[143];
- INAM->value37[144] = ((UINT8ARRAY)FieldValue)[144];
- INAM->value37[145] = ((UINT8ARRAY)FieldValue)[145];
- INAM->value37[146] = ((UINT8ARRAY)FieldValue)[146];
- INAM->value37[147] = ((UINT8ARRAY)FieldValue)[147];
- INAM->value37[148] = ((UINT8ARRAY)FieldValue)[148];
- INAM->value37[149] = ((UINT8ARRAY)FieldValue)[149];
- INAM->value37[150] = ((UINT8ARRAY)FieldValue)[150];
- INAM->value37[151] = ((UINT8ARRAY)FieldValue)[151];
- INAM->value37[152] = ((UINT8ARRAY)FieldValue)[152];
- INAM->value37[153] = ((UINT8ARRAY)FieldValue)[153];
- INAM->value37[154] = ((UINT8ARRAY)FieldValue)[154];
- INAM->value37[155] = ((UINT8ARRAY)FieldValue)[155];
- INAM->value37[156] = ((UINT8ARRAY)FieldValue)[156];
- INAM->value37[157] = ((UINT8ARRAY)FieldValue)[157];
- INAM->value37[158] = ((UINT8ARRAY)FieldValue)[158];
- INAM->value37[159] = ((UINT8ARRAY)FieldValue)[159];
- INAM->value37[160] = ((UINT8ARRAY)FieldValue)[160];
- INAM->value37[161] = ((UINT8ARRAY)FieldValue)[161];
- INAM->value37[162] = ((UINT8ARRAY)FieldValue)[162];
- INAM->value37[163] = ((UINT8ARRAY)FieldValue)[163];
- INAM->value37[164] = ((UINT8ARRAY)FieldValue)[164];
- INAM->value37[165] = ((UINT8ARRAY)FieldValue)[165];
- INAM->value37[166] = ((UINT8ARRAY)FieldValue)[166];
- INAM->value37[167] = ((UINT8ARRAY)FieldValue)[167];
- INAM->value37[168] = ((UINT8ARRAY)FieldValue)[168];
- INAM->value37[169] = ((UINT8ARRAY)FieldValue)[169];
- INAM->value37[170] = ((UINT8ARRAY)FieldValue)[170];
- INAM->value37[171] = ((UINT8ARRAY)FieldValue)[171];
- INAM->value37[172] = ((UINT8ARRAY)FieldValue)[172];
- INAM->value37[173] = ((UINT8ARRAY)FieldValue)[173];
- INAM->value37[174] = ((UINT8ARRAY)FieldValue)[174];
- INAM->value37[175] = ((UINT8ARRAY)FieldValue)[175];
- INAM->value37[176] = ((UINT8ARRAY)FieldValue)[176];
- INAM->value37[177] = ((UINT8ARRAY)FieldValue)[177];
- INAM->value37[178] = ((UINT8ARRAY)FieldValue)[178];
- INAM->value37[179] = ((UINT8ARRAY)FieldValue)[179];
- INAM->value37[180] = ((UINT8ARRAY)FieldValue)[180];
- INAM->value37[181] = ((UINT8ARRAY)FieldValue)[181];
- INAM->value37[182] = ((UINT8ARRAY)FieldValue)[182];
- INAM->value37[183] = ((UINT8ARRAY)FieldValue)[183];
- INAM->value37[184] = ((UINT8ARRAY)FieldValue)[184];
- INAM->value37[185] = ((UINT8ARRAY)FieldValue)[185];
- INAM->value37[186] = ((UINT8ARRAY)FieldValue)[186];
- INAM->value37[187] = ((UINT8ARRAY)FieldValue)[187];
- INAM->value37[188] = ((UINT8ARRAY)FieldValue)[188];
- INAM->value37[189] = ((UINT8ARRAY)FieldValue)[189];
- INAM->value37[190] = ((UINT8ARRAY)FieldValue)[190];
- INAM->value37[191] = ((UINT8ARRAY)FieldValue)[191];
- INAM->value37[192] = ((UINT8ARRAY)FieldValue)[192];
- INAM->value37[193] = ((UINT8ARRAY)FieldValue)[193];
- INAM->value37[194] = ((UINT8ARRAY)FieldValue)[194];
- INAM->value37[195] = ((UINT8ARRAY)FieldValue)[195];
- INAM->value37[196] = ((UINT8ARRAY)FieldValue)[196];
- INAM->value37[197] = ((UINT8ARRAY)FieldValue)[197];
- INAM->value37[198] = ((UINT8ARRAY)FieldValue)[198];
- INAM->value37[199] = ((UINT8ARRAY)FieldValue)[199];
- INAM->value37[200] = ((UINT8ARRAY)FieldValue)[200];
- INAM->value37[201] = ((UINT8ARRAY)FieldValue)[201];
- INAM->value37[202] = ((UINT8ARRAY)FieldValue)[202];
- INAM->value37[203] = ((UINT8ARRAY)FieldValue)[203];
- INAM->value37[204] = ((UINT8ARRAY)FieldValue)[204];
- INAM->value37[205] = ((UINT8ARRAY)FieldValue)[205];
- INAM->value37[206] = ((UINT8ARRAY)FieldValue)[206];
- INAM->value37[207] = ((UINT8ARRAY)FieldValue)[207];
- INAM->value37[208] = ((UINT8ARRAY)FieldValue)[208];
- INAM->value37[209] = ((UINT8ARRAY)FieldValue)[209];
- INAM->value37[210] = ((UINT8ARRAY)FieldValue)[210];
- INAM->value37[211] = ((UINT8ARRAY)FieldValue)[211];
- INAM->value37[212] = ((UINT8ARRAY)FieldValue)[212];
- INAM->value37[213] = ((UINT8ARRAY)FieldValue)[213];
- INAM->value37[214] = ((UINT8ARRAY)FieldValue)[214];
- INAM->value37[215] = ((UINT8ARRAY)FieldValue)[215];
- INAM->value37[216] = ((UINT8ARRAY)FieldValue)[216];
- INAM->value37[217] = ((UINT8ARRAY)FieldValue)[217];
- INAM->value37[218] = ((UINT8ARRAY)FieldValue)[218];
- INAM->value37[219] = ((UINT8ARRAY)FieldValue)[219];
- INAM->value37[220] = ((UINT8ARRAY)FieldValue)[220];
- INAM->value37[221] = ((UINT8ARRAY)FieldValue)[221];
- INAM->value37[222] = ((UINT8ARRAY)FieldValue)[222];
- INAM->value37[223] = ((UINT8ARRAY)FieldValue)[223];
- INAM->value37[224] = ((UINT8ARRAY)FieldValue)[224];
- INAM->value37[225] = ((UINT8ARRAY)FieldValue)[225];
- INAM->value37[226] = ((UINT8ARRAY)FieldValue)[226];
- INAM->value37[227] = ((UINT8ARRAY)FieldValue)[227];
- INAM->value37[228] = ((UINT8ARRAY)FieldValue)[228];
- INAM->value37[229] = ((UINT8ARRAY)FieldValue)[229];
- INAM->value37[230] = ((UINT8ARRAY)FieldValue)[230];
- INAM->value37[231] = ((UINT8ARRAY)FieldValue)[231];
- INAM->value37[232] = ((UINT8ARRAY)FieldValue)[232];
- INAM->value37[233] = ((UINT8ARRAY)FieldValue)[233];
- INAM->value37[234] = ((UINT8ARRAY)FieldValue)[234];
- INAM->value37[235] = ((UINT8ARRAY)FieldValue)[235];
- INAM->value37[236] = ((UINT8ARRAY)FieldValue)[236];
- INAM->value37[237] = ((UINT8ARRAY)FieldValue)[237];
- INAM->value37[238] = ((UINT8ARRAY)FieldValue)[238];
- INAM->value37[239] = ((UINT8ARRAY)FieldValue)[239];
- INAM->value37[240] = ((UINT8ARRAY)FieldValue)[240];
- INAM->value37[241] = ((UINT8ARRAY)FieldValue)[241];
- INAM->value37[242] = ((UINT8ARRAY)FieldValue)[242];
- INAM->value37[243] = ((UINT8ARRAY)FieldValue)[243];
- INAM->value37[244] = ((UINT8ARRAY)FieldValue)[244];
- INAM->value37[245] = ((UINT8ARRAY)FieldValue)[245];
- INAM->value37[246] = ((UINT8ARRAY)FieldValue)[246];
- INAM->value37[247] = ((UINT8ARRAY)FieldValue)[247];
- INAM->value37[248] = ((UINT8ARRAY)FieldValue)[248];
- INAM->value37[249] = ((UINT8ARRAY)FieldValue)[249];
- INAM->value37[250] = ((UINT8ARRAY)FieldValue)[250];
- INAM->value37[251] = ((UINT8ARRAY)FieldValue)[251];
- INAM->value37[252] = ((UINT8ARRAY)FieldValue)[252];
- INAM->value37[253] = ((UINT8ARRAY)FieldValue)[253];
- INAM->value37[254] = ((UINT8ARRAY)FieldValue)[254];
- INAM->value37[255] = ((UINT8ARRAY)FieldValue)[255];
- INAM->value37[256] = ((UINT8ARRAY)FieldValue)[256];
- INAM->value37[257] = ((UINT8ARRAY)FieldValue)[257];
- INAM->value37[258] = ((UINT8ARRAY)FieldValue)[258];
- INAM->value37[259] = ((UINT8ARRAY)FieldValue)[259];
- INAM->value37[260] = ((UINT8ARRAY)FieldValue)[260];
- INAM->value37[261] = ((UINT8ARRAY)FieldValue)[261];
- INAM->value37[262] = ((UINT8ARRAY)FieldValue)[262];
- INAM->value37[263] = ((UINT8ARRAY)FieldValue)[263];
- INAM->value37[264] = ((UINT8ARRAY)FieldValue)[264];
- INAM->value37[265] = ((UINT8ARRAY)FieldValue)[265];
- INAM->value37[266] = ((UINT8ARRAY)FieldValue)[266];
- INAM->value37[267] = ((UINT8ARRAY)FieldValue)[267];
- INAM->value37[268] = ((UINT8ARRAY)FieldValue)[268];
- INAM->value37[269] = ((UINT8ARRAY)FieldValue)[269];
- INAM->value37[270] = ((UINT8ARRAY)FieldValue)[270];
- INAM->value37[271] = ((UINT8ARRAY)FieldValue)[271];
- INAM->value37[272] = ((UINT8ARRAY)FieldValue)[272];
- INAM->value37[273] = ((UINT8ARRAY)FieldValue)[273];
- INAM->value37[274] = ((UINT8ARRAY)FieldValue)[274];
- INAM->value37[275] = ((UINT8ARRAY)FieldValue)[275];
- INAM->value37[276] = ((UINT8ARRAY)FieldValue)[276];
- INAM->value37[277] = ((UINT8ARRAY)FieldValue)[277];
- INAM->value37[278] = ((UINT8ARRAY)FieldValue)[278];
- INAM->value37[279] = ((UINT8ARRAY)FieldValue)[279];
- INAM->value37[280] = ((UINT8ARRAY)FieldValue)[280];
- INAM->value37[281] = ((UINT8ARRAY)FieldValue)[281];
- INAM->value37[282] = ((UINT8ARRAY)FieldValue)[282];
- INAM->value37[283] = ((UINT8ARRAY)FieldValue)[283];
- INAM->value37[284] = ((UINT8ARRAY)FieldValue)[284];
- INAM->value37[285] = ((UINT8ARRAY)FieldValue)[285];
- INAM->value37[286] = ((UINT8ARRAY)FieldValue)[286];
- INAM->value37[287] = ((UINT8ARRAY)FieldValue)[287];
- INAM->value37[288] = ((UINT8ARRAY)FieldValue)[288];
- INAM->value37[289] = ((UINT8ARRAY)FieldValue)[289];
- INAM->value37[290] = ((UINT8ARRAY)FieldValue)[290];
- INAM->value37[291] = ((UINT8ARRAY)FieldValue)[291];
- INAM->value37[292] = ((UINT8ARRAY)FieldValue)[292];
- INAM->value37[293] = ((UINT8ARRAY)FieldValue)[293];
- INAM->value37[294] = ((UINT8ARRAY)FieldValue)[294];
- INAM->value37[295] = ((UINT8ARRAY)FieldValue)[295];
- INAM->value37[296] = ((UINT8ARRAY)FieldValue)[296];
- INAM->value37[297] = ((UINT8ARRAY)FieldValue)[297];
- INAM->value37[298] = ((UINT8ARRAY)FieldValue)[298];
- INAM->value37[299] = ((UINT8ARRAY)FieldValue)[299];
- INAM->value37[300] = ((UINT8ARRAY)FieldValue)[300];
- INAM->value37[301] = ((UINT8ARRAY)FieldValue)[301];
- INAM->value37[302] = ((UINT8ARRAY)FieldValue)[302];
- INAM->value37[303] = ((UINT8ARRAY)FieldValue)[303];
- break;
- case 38: //data DATA ,, Struct
- DATA.Load();
- DATA->value38 = *(UINT8 *)FieldValue;
- break;
- case 39: //data DATA ,, Struct
- DATA.Load();
- DATA->value39 = *(UINT8 *)FieldValue;
- break;
- case 40: //data DATA ,, Struct
- DATA.Load();
- DATA->value40 = *(UINT8 *)FieldValue;
- break;
- case 41: //data DATA ,, Struct
- DATA.Load();
- DATA->value41 = *(UINT8 *)FieldValue;
- break;
- case 42: //data DATA ,, Struct
- DATA.Load();
- DATA->value42 = *(UINT8 *)FieldValue;
- break;
- case 43: //data DATA ,, Struct
- DATA.Load();
- DATA->value43 = *(UINT8 *)FieldValue;
- break;
- case 44: //data DATA ,, Struct
- DATA.Load();
- DATA->value44 = *(UINT8 *)FieldValue;
- break;
- case 45: //data DATA ,, Struct
- DATA.Load();
- DATA->value45 = *(UINT8 *)FieldValue;
- break;
- case 46: //data DATA ,, Struct
- DATA.Load();
- DATA->value46 = *(UINT8 *)FieldValue;
- break;
- case 47: //data DATA ,, Struct
- DATA.Load();
- DATA->value47 = *(UINT8 *)FieldValue;
- break;
- case 48: //data DATA ,, Struct
- DATA.Load();
- DATA->value48 = *(UINT8 *)FieldValue;
- break;
- case 49: //data DATA ,, Struct
- DATA.Load();
- DATA->value49 = *(UINT8 *)FieldValue;
- break;
- case 50: //data DATA ,, Struct
- DATA.Load();
- DATA->value50 = *(UINT8 *)FieldValue;
- break;
- case 51: //data DATA ,, Struct
- DATA.Load();
- DATA->value51 = *(UINT8 *)FieldValue;
- break;
- case 52: //data DATA ,, Struct
- DATA.Load();
- DATA->value52 = *(UINT8 *)FieldValue;
- break;
- case 53: //snam SNAM ,, Struct
- SNAM.Load();
- SNAM->value53 = *(FORMID *)FieldValue;
- return true;
- case 54: //snam SNAM ,, Struct
- SNAM.Load();
- SNAM->value54 = *(UINT32 *)FieldValue;
+ NAM0.value.stars.night.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 188: //stars.noon.red
+ NAM0.value.stars.noon.red = *(UINT8 *)FieldValue;
+ break;
+ case 189: //stars.noon.green
+ NAM0.value.stars.noon.green = *(UINT8 *)FieldValue;
+ break;
+ case 190: //stars.noon.blue
+ NAM0.value.stars.noon.blue = *(UINT8 *)FieldValue;
+ break;
+ case 191: //stars.noon.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.stars.noon.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 192: //stars.midnight.red
+ NAM0.value.stars.midnight.red = *(UINT8 *)FieldValue;
+ break;
+ case 193: //stars.midnight.green
+ NAM0.value.stars.midnight.green = *(UINT8 *)FieldValue;
+ break;
+ case 194: //stars.midnight.blue
+ NAM0.value.stars.midnight.blue = *(UINT8 *)FieldValue;
+ break;
+ case 195: //stars.midnight.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.stars.midnight.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 196: //lowerSky.rise.red
+ NAM0.value.lowerSky.rise.red = *(UINT8 *)FieldValue;
+ break;
+ case 197: //lowerSky.rise.green
+ NAM0.value.lowerSky.rise.green = *(UINT8 *)FieldValue;
+ break;
+ case 198: //lowerSky.rise.blue
+ NAM0.value.lowerSky.rise.blue = *(UINT8 *)FieldValue;
+ break;
+ case 199: //lowerSky.rise.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.lowerSky.rise.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 200: //lowerSky.day.red
+ NAM0.value.lowerSky.day.red = *(UINT8 *)FieldValue;
+ break;
+ case 201: //lowerSky.day.green
+ NAM0.value.lowerSky.day.green = *(UINT8 *)FieldValue;
+ break;
+ case 202: //lowerSky.day.blue
+ NAM0.value.lowerSky.day.blue = *(UINT8 *)FieldValue;
+ break;
+ case 203: //lowerSky.day.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.lowerSky.day.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 204: //lowerSky.set.red
+ NAM0.value.lowerSky.set.red = *(UINT8 *)FieldValue;
+ break;
+ case 205: //lowerSky.set.green
+ NAM0.value.lowerSky.set.green = *(UINT8 *)FieldValue;
+ break;
+ case 206: //lowerSky.set.blue
+ NAM0.value.lowerSky.set.blue = *(UINT8 *)FieldValue;
+ break;
+ case 207: //lowerSky.set.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.lowerSky.set.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 208: //lowerSky.night.red
+ NAM0.value.lowerSky.night.red = *(UINT8 *)FieldValue;
+ break;
+ case 209: //lowerSky.night.green
+ NAM0.value.lowerSky.night.green = *(UINT8 *)FieldValue;
+ break;
+ case 210: //lowerSky.night.blue
+ NAM0.value.lowerSky.night.blue = *(UINT8 *)FieldValue;
+ break;
+ case 211: //lowerSky.night.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.lowerSky.night.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 212: //lowerSky.noon.red
+ NAM0.value.lowerSky.noon.red = *(UINT8 *)FieldValue;
+ break;
+ case 213: //lowerSky.noon.green
+ NAM0.value.lowerSky.noon.green = *(UINT8 *)FieldValue;
+ break;
+ case 214: //lowerSky.noon.blue
+ NAM0.value.lowerSky.noon.blue = *(UINT8 *)FieldValue;
+ break;
+ case 215: //lowerSky.noon.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.lowerSky.noon.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 216: //lowerSky.midnight.red
+ NAM0.value.lowerSky.midnight.red = *(UINT8 *)FieldValue;
+ break;
+ case 217: //lowerSky.midnight.green
+ NAM0.value.lowerSky.midnight.green = *(UINT8 *)FieldValue;
+ break;
+ case 218: //lowerSky.midnight.blue
+ NAM0.value.lowerSky.midnight.blue = *(UINT8 *)FieldValue;
+ break;
+ case 219: //lowerSky.midnight.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.lowerSky.midnight.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 220: //horizon.rise.red
+ NAM0.value.horizon.rise.red = *(UINT8 *)FieldValue;
+ break;
+ case 221: //horizon.rise.green
+ NAM0.value.horizon.rise.green = *(UINT8 *)FieldValue;
+ break;
+ case 222: //horizon.rise.blue
+ NAM0.value.horizon.rise.blue = *(UINT8 *)FieldValue;
+ break;
+ case 223: //horizon.rise.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.horizon.rise.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 224: //horizon.day.red
+ NAM0.value.horizon.day.red = *(UINT8 *)FieldValue;
+ break;
+ case 225: //horizon.day.green
+ NAM0.value.horizon.day.green = *(UINT8 *)FieldValue;
+ break;
+ case 226: //horizon.day.blue
+ NAM0.value.horizon.day.blue = *(UINT8 *)FieldValue;
+ break;
+ case 227: //horizon.day.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.horizon.day.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 228: //horizon.set.red
+ NAM0.value.horizon.set.red = *(UINT8 *)FieldValue;
+ break;
+ case 229: //horizon.set.green
+ NAM0.value.horizon.set.green = *(UINT8 *)FieldValue;
+ break;
+ case 230: //horizon.set.blue
+ NAM0.value.horizon.set.blue = *(UINT8 *)FieldValue;
+ break;
+ case 231: //horizon.set.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.horizon.set.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 232: //horizon.night.red
+ NAM0.value.horizon.night.red = *(UINT8 *)FieldValue;
+ break;
+ case 233: //horizon.night.green
+ NAM0.value.horizon.night.green = *(UINT8 *)FieldValue;
+ break;
+ case 234: //horizon.night.blue
+ NAM0.value.horizon.night.blue = *(UINT8 *)FieldValue;
+ break;
+ case 235: //horizon.night.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.horizon.night.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 236: //horizon.noon.red
+ NAM0.value.horizon.noon.red = *(UINT8 *)FieldValue;
+ break;
+ case 237: //horizon.noon.green
+ NAM0.value.horizon.noon.green = *(UINT8 *)FieldValue;
+ break;
+ case 238: //horizon.noon.blue
+ NAM0.value.horizon.noon.blue = *(UINT8 *)FieldValue;
+ break;
+ case 239: //horizon.noon.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.horizon.noon.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 240: //horizon.midnight.red
+ NAM0.value.horizon.midnight.red = *(UINT8 *)FieldValue;
+ break;
+ case 241: //horizon.midnight.green
+ NAM0.value.horizon.midnight.green = *(UINT8 *)FieldValue;
+ break;
+ case 242: //horizon.midnight.blue
+ NAM0.value.horizon.midnight.blue = *(UINT8 *)FieldValue;
+ break;
+ case 243: //horizon.midnight.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.horizon.midnight.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 244: //upperClouds.rise.red
+ NAM0.value.upperClouds.rise.red = *(UINT8 *)FieldValue;
+ break;
+ case 245: //upperClouds.rise.green
+ NAM0.value.upperClouds.rise.green = *(UINT8 *)FieldValue;
+ break;
+ case 246: //upperClouds.rise.blue
+ NAM0.value.upperClouds.rise.blue = *(UINT8 *)FieldValue;
+ break;
+ case 247: //upperClouds.rise.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.upperClouds.rise.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 248: //upperClouds.day.red
+ NAM0.value.upperClouds.day.red = *(UINT8 *)FieldValue;
+ break;
+ case 249: //upperClouds.day.green
+ NAM0.value.upperClouds.day.green = *(UINT8 *)FieldValue;
+ break;
+ case 250: //upperClouds.day.blue
+ NAM0.value.upperClouds.day.blue = *(UINT8 *)FieldValue;
+ break;
+ case 251: //upperClouds.day.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.upperClouds.day.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 252: //upperClouds.set.red
+ NAM0.value.upperClouds.set.red = *(UINT8 *)FieldValue;
+ break;
+ case 253: //upperClouds.set.green
+ NAM0.value.upperClouds.set.green = *(UINT8 *)FieldValue;
+ break;
+ case 254: //upperClouds.set.blue
+ NAM0.value.upperClouds.set.blue = *(UINT8 *)FieldValue;
+ break;
+ case 255: //upperClouds.set.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.upperClouds.set.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 256: //upperClouds.night.red
+ NAM0.value.upperClouds.night.red = *(UINT8 *)FieldValue;
+ break;
+ case 257: //upperClouds.night.green
+ NAM0.value.upperClouds.night.green = *(UINT8 *)FieldValue;
+ break;
+ case 258: //upperClouds.night.blue
+ NAM0.value.upperClouds.night.blue = *(UINT8 *)FieldValue;
+ break;
+ case 259: //upperClouds.night.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.upperClouds.night.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 260: //upperClouds.noon.red
+ NAM0.value.upperClouds.noon.red = *(UINT8 *)FieldValue;
+ break;
+ case 261: //upperClouds.noon.green
+ NAM0.value.upperClouds.noon.green = *(UINT8 *)FieldValue;
+ break;
+ case 262: //upperClouds.noon.blue
+ NAM0.value.upperClouds.noon.blue = *(UINT8 *)FieldValue;
+ break;
+ case 263: //upperClouds.noon.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.upperClouds.noon.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 264: //upperClouds.midnight.red
+ NAM0.value.upperClouds.midnight.red = *(UINT8 *)FieldValue;
+ break;
+ case 265: //upperClouds.midnight.green
+ NAM0.value.upperClouds.midnight.green = *(UINT8 *)FieldValue;
+ break;
+ case 266: //upperClouds.midnight.blue
+ NAM0.value.upperClouds.midnight.blue = *(UINT8 *)FieldValue;
+ break;
+ case 267: //upperClouds.midnight.unused1
+ if(ArraySize != 1)
+ break;
+ NAM0.value.upperClouds.midnight.unused1 = ((UINT8ARRAY)FieldValue)[0];
+ break;
+ case 268: //fogDayNear
+ FNAM.value.fogDayNear = *(FLOAT32 *)FieldValue;
+ break;
+ case 269: //fogDayFar
+ FNAM.value.fogDayFar = *(FLOAT32 *)FieldValue;
+ break;
+ case 270: //fogNightNear
+ FNAM.value.fogNightNear = *(FLOAT32 *)FieldValue;
+ break;
+ case 271: //fogNightFar
+ FNAM.value.fogNightFar = *(FLOAT32 *)FieldValue;
+ break;
+ case 272: //fogDayPower
+ FNAM.value.fogDayPower = *(FLOAT32 *)FieldValue;
+ break;
+ case 273: //fogNightPower
+ FNAM.value.fogNightPower = *(FLOAT32 *)FieldValue;
+ break;
+ case 274: //INAM
+ INAM.Copy((UINT8ARRAY)FieldValue, ArraySize);
+ break;
+ case 275: //windSpeed
+ DATA.value.windSpeed = *(UINT8 *)FieldValue;
+ break;
+ case 276: //lowerCloudSpeed
+ DATA.value.lowerCloudSpeed = *(UINT8 *)FieldValue;
+ break;
+ case 277: //upperCloudSpeed
+ DATA.value.upperCloudSpeed = *(UINT8 *)FieldValue;
+ break;
+ case 278: //transDelta
+ DATA.value.transDelta = *(UINT8 *)FieldValue;
+ break;
+ case 279: //sunGlare
+ DATA.value.sunGlare = *(UINT8 *)FieldValue;
+ break;
+ case 280: //sunDamage
+ DATA.value.sunDamage = *(UINT8 *)FieldValue;
+ break;
+ case 281: //rainFadeIn
+ DATA.value.rainFadeIn = *(UINT8 *)FieldValue;
+ break;
+ case 282: //rainFadeOut
+ DATA.value.rainFadeOut = *(UINT8 *)FieldValue;
+ break;
+ case 283: //boltFadeIn
+ DATA.value.boltFadeIn = *(UINT8 *)FieldValue;
+ break;
+ case 284: //boltFadeOut
+ DATA.value.boltFadeOut = *(UINT8 *)FieldValue;
+ break;
+ case 285: //boltFrequency
+ DATA.value.boltFrequency = *(UINT8 *)FieldValue;
+ break;
+ case 286: //weatherType
+ DATA.value.weatherType = *(UINT8 *)FieldValue;
+ break;
+ case 287: //boltRed
+ DATA.value.boltRed = *(UINT8 *)FieldValue;
+ break;
+ case 288: //boltGreen
+ DATA.value.boltGreen = *(UINT8 *)FieldValue;
+ break;
+ case 289: //boltBlue
+ DATA.value.boltBlue = *(UINT8 *)FieldValue;
+ break;
+ case 290: //sounds
+ if(ListFieldID == 0) //soundsSize
+ {
+ Sounds.resize(ArraySize);
+ return false;
+ }
+
+ if(ListIndex >= Sounds.value.size())
+ break;
+
+ switch(ListFieldID)
+ {
+ case 1: //sound
+ Sounds.value[ListIndex]->sound = *(FORMID *)FieldValue;
+ return true;
+ case 2: //type
+ Sounds.value[ListIndex]->SetType(*(UINT32 *)FieldValue);
+ break;
+ default:
+ break;
+ }
break;
default:
break;
@@ -893,173 +3012,965 @@ bool WTHRRecord::SetField(FIELD_IDENTIFIERS, void *FieldValue, UINT32 ArraySize)
void WTHRRecord::DeleteField(FIELD_IDENTIFIERS)
{
+ GENCLR defaultCLR;
+ WTHRFNAM defaultFNAM;
+ WTHRDATA defaultDATA;
+ WTHRColors defaultColors;
+ WTHRSNAM defaultSNAM;
+ FNVMODS defaultMODS;
+ WTHRONAM defaultONAM;
switch(FieldID)
{
case 1: //flags1
SetHeaderFlagMask(0);
return;
- case 3: //versionControl1
- flagsUnk = 0;
+ case 3: //versionControl1
+ flagsUnk = 0;
+ return;
+ case 4: //eid
+ EDID.Unload();
+ return;
+ case 5: //formVersion
+ formVersion = 0;
+ return;
+ case 6: //versionControl2
+ versionControl2[0] = 0;
+ versionControl2[1] = 0;
+ return;
+ case 7: //sunriseImageSpace
+ _0IAD.Unload();
+ return;
+ case 8: //dayImageSpace
+ _1IAD.Unload();
+ return;
+ case 9: //sunsetImageSpace
+ _2IAD.Unload();
+ return;
+ case 10: //nightImageSpace
+ _3IAD.Unload();
+ return;
+ case 11: //unknown1ImageSpace
+ _4IAD.Unload();
+ return;
+ case 12: //unknown2ImageSpace
+ _5IAD.Unload();
+ return;
+ case 13: //cloudLayer0Path
+ DNAM.Unload();
+ return;
+ case 14: //cloudLayer1Path
+ CNAM.Unload();
+ return;
+ case 15: //cloudLayer2Path
+ ANAM.Unload();
+ return;
+ case 16: //cloudLayer3Path
+ BNAM.Unload();
+ return;
+ case 17: //modPath
+ if(MODL.IsLoaded())
+ MODL->MODL.Unload();
+ return;
+ case 18: //modb
+ if(MODL.IsLoaded())
+ MODL->MODB.Unload();
+ return;
+ case 19: //modt_p
+ if(MODL.IsLoaded())
+ MODL->MODT.Unload();
+ return;
+ case 20: //altTextures
+ if(MODL.IsLoaded())
+ {
+ 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 21: //modelFlags
+ if(MODL.IsLoaded())
+ MODL->MODD.Unload();
+ return;
+ case 22: //unknown1
+ LNAM.Unload();
+ return;
+ case 23: //layer0Speed
+ if(ONAM.IsLoaded())
+ ONAM->layer0Speed = defaultONAM.layer0Speed;
+ return;
+ case 24: //layer1Speed
+ if(ONAM.IsLoaded())
+ ONAM->layer1Speed = defaultONAM.layer1Speed;
+ return;
+ case 25: //layer2Speed
+ if(ONAM.IsLoaded())
+ ONAM->layer2Speed = defaultONAM.layer2Speed;
+ return;
+ case 26: //layer3Speed
+ if(ONAM.IsLoaded())
+ ONAM->layer3Speed = defaultONAM.layer3Speed;
+ return;
+ case 27: //PNAM
+ PNAM.Unload();
+ return;
+ case 28: //upperSky.rise.red
+ NAM0.value.upperSky.rise.red = defaultCLR.red;
+ return;
+ case 29: //upperSky.rise.green
+ NAM0.value.upperSky.rise.green = defaultCLR.green;
+ return;
+ case 30: //upperSky.rise.blue
+ NAM0.value.upperSky.rise.blue = defaultCLR.blue;
+ return;
+ case 31: //upperSky.rise.unused1
+ NAM0.value.upperSky.rise.unused1 = defaultCLR.unused1;
return;
- case 4: //eid
- EDID.Unload();
+ case 32: //upperSky.day.red
+ NAM0.value.upperSky.day.red = defaultCLR.red;
return;
- case 5: //formVersion
- formVersion = 0;
+ case 33: //upperSky.day.green
+ NAM0.value.upperSky.day.green = defaultCLR.green;
return;
- case 6: //versionControl2
- versionControl2[0] = 0;
- versionControl2[1] = 0;
+ case 34: //upperSky.day.blue
+ NAM0.value.upperSky.day.blue = defaultCLR.blue;
return;
- case 7: //0iad Sunrise Image Space Modifier
- 0IAD.Unload();
+ case 35: //upperSky.day.unused1
+ NAM0.value.upperSky.day.unused1 = defaultCLR.unused1;
return;
- case 8: //1iad Day Image Space Modifier
- 1IAD.Unload();
+ case 36: //upperSky.set.red
+ NAM0.value.upperSky.set.red = defaultCLR.red;
return;
- case 9: //2iad Sunset Image Space Modifier
- 2IAD.Unload();
+ case 37: //upperSky.set.green
+ NAM0.value.upperSky.set.green = defaultCLR.green;
return;
- case 10: //3iad Night Image Space Modifier
- 3IAD.Unload();
+ case 38: //upperSky.set.blue
+ NAM0.value.upperSky.set.blue = defaultCLR.blue;
return;
- case 11: //4iad Unknown
- 4IAD.Unload();
+ case 39: //upperSky.set.unused1
+ NAM0.value.upperSky.set.unused1 = defaultCLR.unused1;
return;
- case 12: //5iad Unknown
- 5IAD.Unload();
+ case 40: //upperSky.night.red
+ NAM0.value.upperSky.night.red = defaultCLR.red;
return;
- case 13: //dnam Cloud Textures - Layer 0
- DNAM.Unload();
+ case 41: //upperSky.night.green
+ NAM0.value.upperSky.night.green = defaultCLR.green;
return;
- case 14: //cnam Cloud Textures - Layer 1
- CNAM.Unload();
+ case 42: //upperSky.night.blue
+ NAM0.value.upperSky.night.blue = defaultCLR.blue;
return;
- case 15: //anam Cloud Textures - Layer 2
- ANAM.Unload();
+ case 43: //upperSky.night.unused1
+ NAM0.value.upperSky.night.unused1 = defaultCLR.unused1;
return;
- case 16: //bnam Cloud Textures - Layer 3
- BNAM.Unload();
+ case 44: //upperSky.noon.red
+ NAM0.value.upperSky.noon.red = defaultCLR.red;
return;
- case 17: //modPath
- if(MODL.IsLoaded())
- MODL->MODL.Unload();
+ case 45: //upperSky.noon.green
+ NAM0.value.upperSky.noon.green = defaultCLR.green;
return;
- case 18: //modb
- if(MODL.IsLoaded())
- MODL->MODB.Unload();
+ case 46: //upperSky.noon.blue
+ NAM0.value.upperSky.noon.blue = defaultCLR.blue;
return;
- case 19: //modt_p
- if(MODL.IsLoaded())
- MODL->MODT.Unload();
+ case 47: //upperSky.noon.unused1
+ NAM0.value.upperSky.noon.unused1 = defaultCLR.unused1;
return;
- case 20: //mods Alternate Textures
- if(MODL.IsLoaded())
- MODL->MODS.Unload();
+ case 48: //upperSky.midnight.red
+ NAM0.value.upperSky.midnight.red = defaultCLR.red;
return;
- case 21: //mods Alternate Textures
- if(MODL.IsLoaded())
- MODL->MODS.Unload();
+ case 49: //upperSky.midnight.green
+ NAM0.value.upperSky.midnight.green = defaultCLR.green;
return;
- case 22: //mods Alternate Textures
- if(MODL.IsLoaded())
- MODL->MODS.Unload();
+ case 50: //upperSky.midnight.blue
+ NAM0.value.upperSky.midnight.blue = defaultCLR.blue;
return;
- case 23: //modelFlags
- if(MODL.IsLoaded())
- MODL->MODD.Unload();
+ case 51: //upperSky.midnight.unused1
+ NAM0.value.upperSky.midnight.unused1 = defaultCLR.unused1;
return;
- case 24: //lnam_p Unknown
- LNAM.Unload();
+ case 52: //fog.rise.red
+ NAM0.value.fog.rise.red = defaultCLR.red;
return;
- case 25: //onam Cloud Speed
- return UNPARSEDDEL_FIELD25;
- case 26: //pnam_p Unused
- PNAM.Unload();
+ case 53: //fog.rise.green
+ NAM0.value.fog.rise.green = defaultCLR.green;
+ return;
+ case 54: //fog.rise.blue
+ NAM0.value.fog.rise.blue = defaultCLR.blue;
+ return;
+ case 55: //fog.rise.unused1
+ NAM0.value.fog.rise.unused1 = defaultCLR.unused1;
+ return;
+ case 56: //fog.day.red
+ NAM0.value.fog.day.red = defaultCLR.red;
+ return;
+ case 57: //fog.day.green
+ NAM0.value.fog.day.green = defaultCLR.green;
+ return;
+ case 58: //fog.day.blue
+ NAM0.value.fog.day.blue = defaultCLR.blue;
+ return;
+ case 59: //fog.day.unused1
+ NAM0.value.fog.day.unused1 = defaultCLR.unused1;
+ return;
+ case 60: //fog.set.red
+ NAM0.value.fog.set.red = defaultCLR.red;
+ return;
+ case 61: //fog.set.green
+ NAM0.value.fog.set.green = defaultCLR.green;
+ return;
+ case 62: //fog.set.blue
+ NAM0.value.fog.set.blue = defaultCLR.blue;
+ return;
+ case 63: //fog.set.unused1
+ NAM0.value.fog.set.unused1 = defaultCLR.unused1;
+ return;
+ case 64: //fog.night.red
+ NAM0.value.fog.night.red = defaultCLR.red;
+ return;
+ case 65: //fog.night.green
+ NAM0.value.fog.night.green = defaultCLR.green;
+ return;
+ case 66: //fog.night.blue
+ NAM0.value.fog.night.blue = defaultCLR.blue;
+ return;
+ case 67: //fog.night.unused1
+ NAM0.value.fog.night.unused1 = defaultCLR.unused1;
+ return;
+ case 68: //fog.noon.red
+ NAM0.value.fog.noon.red = defaultCLR.red;
+ return;
+ case 69: //fog.noon.green
+ NAM0.value.fog.noon.green = defaultCLR.green;
+ return;
+ case 70: //fog.noon.blue
+ NAM0.value.fog.noon.blue = defaultCLR.blue;
+ return;
+ case 71: //fog.noon.unused1
+ NAM0.value.fog.noon.unused1 = defaultCLR.unused1;
+ return;
+ case 72: //fog.midnight.red
+ NAM0.value.fog.midnight.red = defaultCLR.red;
+ return;
+ case 73: //fog.midnight.green
+ NAM0.value.fog.midnight.green = defaultCLR.green;
+ return;
+ case 74: //fog.midnight.blue
+ NAM0.value.fog.midnight.blue = defaultCLR.blue;
+ return;
+ case 75: //fog.midnight.unused1
+ NAM0.value.fog.midnight.unused1 = defaultCLR.unused1;
+ return;
+ case 76: //lowerClouds.rise.red
+ NAM0.value.lowerClouds.rise.red = defaultCLR.red;
+ return;
+ case 77: //lowerClouds.rise.green
+ NAM0.value.lowerClouds.rise.green = defaultCLR.green;
+ return;
+ case 78: //lowerClouds.rise.blue
+ NAM0.value.lowerClouds.rise.blue = defaultCLR.blue;
+ return;
+ case 79: //lowerClouds.rise.unused1
+ NAM0.value.lowerClouds.rise.unused1 = defaultCLR.unused1;
+ return;
+ case 80: //lowerClouds.day.red
+ NAM0.value.lowerClouds.day.red = defaultCLR.red;
+ return;
+ case 81: //lowerClouds.day.green
+ NAM0.value.lowerClouds.day.green = defaultCLR.green;
+ return;
+ case 82: //lowerClouds.day.blue
+ NAM0.value.lowerClouds.day.blue = defaultCLR.blue;
+ return;
+ case 83: //lowerClouds.day.unused1
+ NAM0.value.lowerClouds.day.unused1 = defaultCLR.unused1;
+ return;
+ case 84: //lowerClouds.set.red
+ NAM0.value.lowerClouds.set.red = defaultCLR.red;
+ return;
+ case 85: //lowerClouds.set.green
+ NAM0.value.lowerClouds.set.green = defaultCLR.green;
+ return;
+ case 86: //lowerClouds.set.blue
+ NAM0.value.lowerClouds.set.blue = defaultCLR.blue;
+ return;
+ case 87: //lowerClouds.set.unused1
+ NAM0.value.lowerClouds.set.unused1 = defaultCLR.unused1;
+ return;
+ case 88: //lowerClouds.night.red
+ NAM0.value.lowerClouds.night.red = defaultCLR.red;
+ return;
+ case 89: //lowerClouds.night.green
+ NAM0.value.lowerClouds.night.green = defaultCLR.green;
+ return;
+ case 90: //lowerClouds.night.blue
+ NAM0.value.lowerClouds.night.blue = defaultCLR.blue;
+ return;
+ case 91: //lowerClouds.night.unused1
+ NAM0.value.lowerClouds.night.unused1 = defaultCLR.unused1;
+ return;
+ case 92: //lowerClouds.noon.red
+ NAM0.value.lowerClouds.noon.red = defaultCLR.red;
+ return;
+ case 93: //lowerClouds.noon.green
+ NAM0.value.lowerClouds.noon.green = defaultCLR.green;
+ return;
+ case 94: //lowerClouds.noon.blue
+ NAM0.value.lowerClouds.noon.blue = defaultCLR.blue;
+ return;
+ case 95: //lowerClouds.noon.unused1
+ NAM0.value.lowerClouds.noon.unused1 = defaultCLR.unused1;
+ return;
+ case 96: //lowerClouds.midnight.red
+ NAM0.value.lowerClouds.midnight.red = defaultCLR.red;
+ return;
+ case 97: //lowerClouds.midnight.green
+ NAM0.value.lowerClouds.midnight.green = defaultCLR.green;
+ return;
+ case 98: //lowerClouds.midnight.blue
+ NAM0.value.lowerClouds.midnight.blue = defaultCLR.blue;
+ return;
+ case 99: //lowerClouds.midnight.unused1
+ NAM0.value.lowerClouds.midnight.unused1 = defaultCLR.unused1;
+ return;
+ case 100: //ambient.rise.red
+ NAM0.value.ambient.rise.red = defaultCLR.red;
+ return;
+ case 101: //ambient.rise.green
+ NAM0.value.ambient.rise.green = defaultCLR.green;
+ return;
+ case 102: //ambient.rise.blue
+ NAM0.value.ambient.rise.blue = defaultCLR.blue;
+ return;
+ case 103: //ambient.rise.unused1
+ NAM0.value.ambient.rise.unused1 = defaultCLR.unused1;
+ return;
+ case 104: //ambient.day.red
+ NAM0.value.ambient.day.red = defaultCLR.red;
+ return;
+ case 105: //ambient.day.green
+ NAM0.value.ambient.day.green = defaultCLR.green;
+ return;
+ case 106: //ambient.day.blue
+ NAM0.value.ambient.day.blue = defaultCLR.blue;
+ return;
+ case 107: //ambient.day.unused1
+ NAM0.value.ambient.day.unused1 = defaultCLR.unused1;
+ return;
+ case 108: //ambient.set.red
+ NAM0.value.ambient.set.red = defaultCLR.red;
+ return;
+ case 109: //ambient.set.green
+ NAM0.value.ambient.set.green = defaultCLR.green;
+ return;
+ case 110: //ambient.set.blue
+ NAM0.value.ambient.set.blue = defaultCLR.blue;
+ return;
+ case 111: //ambient.set.unused1
+ NAM0.value.ambient.set.unused1 = defaultCLR.unused1;
+ return;
+ case 112: //ambient.night.red
+ NAM0.value.ambient.night.red = defaultCLR.red;
+ return;
+ case 113: //ambient.night.green
+ NAM0.value.ambient.night.green = defaultCLR.green;
+ return;
+ case 114: //ambient.night.blue
+ NAM0.value.ambient.night.blue = defaultCLR.blue;
+ return;
+ case 115: //ambient.night.unused1
+ NAM0.value.ambient.night.unused1 = defaultCLR.unused1;
+ return;
+ case 116: //ambient.noon.red
+ NAM0.value.ambient.noon.red = defaultCLR.red;
+ return;
+ case 117: //ambient.noon.green
+ NAM0.value.ambient.noon.green = defaultCLR.green;
+ return;
+ case 118: //ambient.noon.blue
+ NAM0.value.ambient.noon.blue = defaultCLR.blue;
+ return;
+ case 119: //ambient.noon.unused1
+ NAM0.value.ambient.noon.unused1 = defaultCLR.unused1;
+ return;
+ case 120: //ambient.midnight.red
+ NAM0.value.ambient.midnight.red = defaultCLR.red;
+ return;
+ case 121: //ambient.midnight.green
+ NAM0.value.ambient.midnight.green = defaultCLR.green;
+ return;
+ case 122: //ambient.midnight.blue
+ NAM0.value.ambient.midnight.blue = defaultCLR.blue;
+ return;
+ case 123: //ambient.midnight.unused1
+ NAM0.value.ambient.midnight.unused1 = defaultCLR.unused1;
+ return;
+ case 124: //sunlight.rise.red
+ NAM0.value.sunlight.rise.red = defaultCLR.red;
+ return;
+ case 125: //sunlight.rise.green
+ NAM0.value.sunlight.rise.green = defaultCLR.green;
+ return;
+ case 126: //sunlight.rise.blue
+ NAM0.value.sunlight.rise.blue = defaultCLR.blue;
+ return;
+ case 127: //sunlight.rise.unused1
+ NAM0.value.sunlight.rise.unused1 = defaultCLR.unused1;
+ return;
+ case 128: //sunlight.day.red
+ NAM0.value.sunlight.day.red = defaultCLR.red;
+ return;
+ case 129: //sunlight.day.green
+ NAM0.value.sunlight.day.green = defaultCLR.green;
+ return;
+ case 130: //sunlight.day.blue
+ NAM0.value.sunlight.day.blue = defaultCLR.blue;
+ return;
+ case 131: //sunlight.day.unused1
+ NAM0.value.sunlight.day.unused1 = defaultCLR.unused1;
+ return;
+ case 132: //sunlight.set.red
+ NAM0.value.sunlight.set.red = defaultCLR.red;
+ return;
+ case 133: //sunlight.set.green
+ NAM0.value.sunlight.set.green = defaultCLR.green;
+ return;
+ case 134: //sunlight.set.blue
+ NAM0.value.sunlight.set.blue = defaultCLR.blue;
+ return;
+ case 135: //sunlight.set.unused1
+ NAM0.value.sunlight.set.unused1 = defaultCLR.unused1;
+ return;
+ case 136: //sunlight.night.red
+ NAM0.value.sunlight.night.red = defaultCLR.red;
+ return;
+ case 137: //sunlight.night.green
+ NAM0.value.sunlight.night.green = defaultCLR.green;
+ return;
+ case 138: //sunlight.night.blue
+ NAM0.value.sunlight.night.blue = defaultCLR.blue;
+ return;
+ case 139: //sunlight.night.unused1
+ NAM0.value.sunlight.night.unused1 = defaultCLR.unused1;
+ return;
+ case 140: //sunlight.noon.red
+ NAM0.value.sunlight.noon.red = defaultCLR.red;
+ return;
+ case 141: //sunlight.noon.green
+ NAM0.value.sunlight.noon.green = defaultCLR.green;
+ return;
+ case 142: //sunlight.noon.blue
+ NAM0.value.sunlight.noon.blue = defaultCLR.blue;
+ return;
+ case 143: //sunlight.noon.unused1
+ NAM0.value.sunlight.noon.unused1 = defaultCLR.unused1;
+ return;
+ case 144: //sunlight.midnight.red
+ NAM0.value.sunlight.midnight.red = defaultCLR.red;
+ return;
+ case 145: //sunlight.midnight.green
+ NAM0.value.sunlight.midnight.green = defaultCLR.green;
+ return;
+ case 146: //sunlight.midnight.blue
+ NAM0.value.sunlight.midnight.blue = defaultCLR.blue;
+ return;
+ case 147: //sunlight.midnight.unused1
+ NAM0.value.sunlight.midnight.unused1 = defaultCLR.unused1;
+ return;
+ case 148: //sun.rise.red
+ NAM0.value.sun.rise.red = defaultCLR.red;
+ return;
+ case 149: //sun.rise.green
+ NAM0.value.sun.rise.green = defaultCLR.green;
+ return;
+ case 150: //sun.rise.blue
+ NAM0.value.sun.rise.blue = defaultCLR.blue;
+ return;
+ case 151: //sun.rise.unused1
+ NAM0.value.sun.rise.unused1 = defaultCLR.unused1;
+ return;
+ case 152: //sun.day.red
+ NAM0.value.sun.day.red = defaultCLR.red;
return;
- case 27: //nam0 NAM0 ,, Struct
- NAM0.Unload();
+ case 153: //sun.day.green
+ NAM0.value.sun.day.green = defaultCLR.green;
return;
- case 28: //nam0 NAM0 ,, Struct
- NAM0.Unload();
+ case 154: //sun.day.blue
+ NAM0.value.sun.day.blue = defaultCLR.blue;
return;
- case 29: //nam0 NAM0 ,, Struct
- NAM0.Unload();
+ case 155: //sun.day.unused1
+ NAM0.value.sun.day.unused1 = defaultCLR.unused1;
return;
- case 30: //nam0_p NAM0 ,, Struct
- NAM0.Unload();
+ case 156: //sun.set.red
+ NAM0.value.sun.set.red = defaultCLR.red;
return;
- case 31: //fnam FNAM ,, Struct
- FNAM.Unload();
+ case 157: //sun.set.green
+ NAM0.value.sun.set.green = defaultCLR.green;
return;
- case 32: //fnam FNAM ,, Struct
- FNAM.Unload();
+ case 158: //sun.set.blue
+ NAM0.value.sun.set.blue = defaultCLR.blue;
return;
- case 33: //fnam FNAM ,, Struct
- FNAM.Unload();
+ case 159: //sun.set.unused1
+ NAM0.value.sun.set.unused1 = defaultCLR.unused1;
return;
- case 34: //fnam FNAM ,, Struct
- FNAM.Unload();
+ case 160: //sun.night.red
+ NAM0.value.sun.night.red = defaultCLR.red;
return;
- case 35: //fnam FNAM ,, Struct
- FNAM.Unload();
+ case 161: //sun.night.green
+ NAM0.value.sun.night.green = defaultCLR.green;
return;
- case 36: //fnam FNAM ,, Struct
- FNAM.Unload();
+ case 162: //sun.night.blue
+ NAM0.value.sun.night.blue = defaultCLR.blue;
return;
- case 37: //inam_p Unused
+ case 163: //sun.night.unused1
+ NAM0.value.sun.night.unused1 = defaultCLR.unused1;
+ return;
+ case 164: //sun.noon.red
+ NAM0.value.sun.noon.red = defaultCLR.red;
+ return;
+ case 165: //sun.noon.green
+ NAM0.value.sun.noon.green = defaultCLR.green;
+ return;
+ case 166: //sun.noon.blue
+ NAM0.value.sun.noon.blue = defaultCLR.blue;
+ return;
+ case 167: //sun.noon.unused1
+ NAM0.value.sun.noon.unused1 = defaultCLR.unused1;
+ return;
+ case 168: //sun.midnight.red
+ NAM0.value.sun.midnight.red = defaultCLR.red;
+ return;
+ case 169: //sun.midnight.green
+ NAM0.value.sun.midnight.green = defaultCLR.green;
+ return;
+ case 170: //sun.midnight.blue
+ NAM0.value.sun.midnight.blue = defaultCLR.blue;
+ return;
+ case 171: //sun.midnight.unused1
+ NAM0.value.sun.midnight.unused1 = defaultCLR.unused1;
+ return;
+ case 172: //stars.rise.red
+ NAM0.value.stars.rise.red = defaultCLR.red;
+ return;
+ case 173: //stars.rise.green
+ NAM0.value.stars.rise.green = defaultCLR.green;
+ return;
+ case 174: //stars.rise.blue
+ NAM0.value.stars.rise.blue = defaultCLR.blue;
+ return;
+ case 175: //stars.rise.unused1
+ NAM0.value.stars.rise.unused1 = defaultCLR.unused1;
+ return;
+ case 176: //stars.day.red
+ NAM0.value.stars.day.red = defaultCLR.red;
+ return;
+ case 177: //stars.day.green
+ NAM0.value.stars.day.green = defaultCLR.green;
+ return;
+ case 178: //stars.day.blue
+ NAM0.value.stars.day.blue = defaultCLR.blue;
+ return;
+ case 179: //stars.day.unused1
+ NAM0.value.stars.day.unused1 = defaultCLR.unused1;
+ return;
+ case 180: //stars.set.red
+ NAM0.value.stars.set.red = defaultCLR.red;
+ return;
+ case 181: //stars.set.green
+ NAM0.value.stars.set.green = defaultCLR.green;
+ return;
+ case 182: //stars.set.blue
+ NAM0.value.stars.set.blue = defaultCLR.blue;
+ return;
+ case 183: //stars.set.unused1
+ NAM0.value.stars.set.unused1 = defaultCLR.unused1;
+ return;
+ case 184: //stars.night.red
+ NAM0.value.stars.night.red = defaultCLR.red;
+ return;
+ case 185: //stars.night.green
+ NAM0.value.stars.night.green = defaultCLR.green;
+ return;
+ case 186: //stars.night.blue
+ NAM0.value.stars.night.blue = defaultCLR.blue;
+ return;
+ case 187: //stars.night.unused1
+ NAM0.value.stars.night.unused1 = defaultCLR.unused1;
+ return;
+ case 188: //stars.noon.red
+ NAM0.value.stars.noon.red = defaultCLR.red;
+ return;
+ case 189: //stars.noon.green
+ NAM0.value.stars.noon.green = defaultCLR.green;
+ return;
+ case 190: //stars.noon.blue
+ NAM0.value.stars.noon.blue = defaultCLR.blue;
+ return;
+ case 191: //stars.noon.unused1
+ NAM0.value.stars.noon.unused1 = defaultCLR.unused1;
+ return;
+ case 192: //stars.midnight.red
+ NAM0.value.stars.midnight.red = defaultCLR.red;
+ return;
+ case 193: //stars.midnight.green
+ NAM0.value.stars.midnight.green = defaultCLR.green;
+ return;
+ case 194: //stars.midnight.blue
+ NAM0.value.stars.midnight.blue = defaultCLR.blue;
+ return;
+ case 195: //stars.midnight.unused1
+ NAM0.value.stars.midnight.unused1 = defaultCLR.unused1;
+ return;
+ case 196: //lowerSky.rise.red
+ NAM0.value.lowerSky.rise.red = defaultCLR.red;
+ return;
+ case 197: //lowerSky.rise.green
+ NAM0.value.lowerSky.rise.green = defaultCLR.green;
+ return;
+ case 198: //lowerSky.rise.blue
+ NAM0.value.lowerSky.rise.blue = defaultCLR.blue;
+ return;
+ case 199: //lowerSky.rise.unused1
+ NAM0.value.lowerSky.rise.unused1 = defaultCLR.unused1;
+ return;
+ case 200: //lowerSky.day.red
+ NAM0.value.lowerSky.day.red = defaultCLR.red;
+ return;
+ case 201: //lowerSky.day.green
+ NAM0.value.lowerSky.day.green = defaultCLR.green;
+ return;
+ case 202: //lowerSky.day.blue
+ NAM0.value.lowerSky.day.blue = defaultCLR.blue;
+ return;
+ case 203: //lowerSky.day.unused1
+ NAM0.value.lowerSky.day.unused1 = defaultCLR.unused1;
+ return;
+ case 204: //lowerSky.set.red
+ NAM0.value.lowerSky.set.red = defaultCLR.red;
+ return;
+ case 205: //lowerSky.set.green
+ NAM0.value.lowerSky.set.green = defaultCLR.green;
+ return;
+ case 206: //lowerSky.set.blue
+ NAM0.value.lowerSky.set.blue = defaultCLR.blue;
+ return;
+ case 207: //lowerSky.set.unused1
+ NAM0.value.lowerSky.set.unused1 = defaultCLR.unused1;
+ return;
+ case 208: //lowerSky.night.red
+ NAM0.value.lowerSky.night.red = defaultCLR.red;
+ return;
+ case 209: //lowerSky.night.green
+ NAM0.value.lowerSky.night.green = defaultCLR.green;
+ return;
+ case 210: //lowerSky.night.blue
+ NAM0.value.lowerSky.night.blue = defaultCLR.blue;
+ return;
+ case 211: //lowerSky.night.unused1
+ NAM0.value.lowerSky.night.unused1 = defaultCLR.unused1;
+ return;
+ case 212: //lowerSky.noon.red
+ NAM0.value.lowerSky.noon.red = defaultCLR.red;
+ return;
+ case 213: //lowerSky.noon.green
+ NAM0.value.lowerSky.noon.green = defaultCLR.green;
+ return;
+ case 214: //lowerSky.noon.blue
+ NAM0.value.lowerSky.noon.blue = defaultCLR.blue;
+ return;
+ case 215: //lowerSky.noon.unused1
+ NAM0.value.lowerSky.noon.unused1 = defaultCLR.unused1;
+ return;
+ case 216: //lowerSky.midnight.red
+ NAM0.value.lowerSky.midnight.red = defaultCLR.red;
+ return;
+ case 217: //lowerSky.midnight.green
+ NAM0.value.lowerSky.midnight.green = defaultCLR.green;
+ return;
+ case 218: //lowerSky.midnight.blue
+ NAM0.value.lowerSky.midnight.blue = defaultCLR.blue;
+ return;
+ case 219: //lowerSky.midnight.unused1
+ NAM0.value.lowerSky.midnight.unused1 = defaultCLR.unused1;
+ return;
+ case 220: //horizon.rise.red
+ NAM0.value.horizon.rise.red = defaultCLR.red;
+ return;
+ case 221: //horizon.rise.green
+ NAM0.value.horizon.rise.green = defaultCLR.green;
+ return;
+ case 222: //horizon.rise.blue
+ NAM0.value.horizon.rise.blue = defaultCLR.blue;
+ return;
+ case 223: //horizon.rise.unused1
+ NAM0.value.horizon.rise.unused1 = defaultCLR.unused1;
+ return;
+ case 224: //horizon.day.red
+ NAM0.value.horizon.day.red = defaultCLR.red;
+ return;
+ case 225: //horizon.day.green
+ NAM0.value.horizon.day.green = defaultCLR.green;
+ return;
+ case 226: //horizon.day.blue
+ NAM0.value.horizon.day.blue = defaultCLR.blue;
+ return;
+ case 227: //horizon.day.unused1
+ NAM0.value.horizon.day.unused1 = defaultCLR.unused1;
+ return;
+ case 228: //horizon.set.red
+ NAM0.value.horizon.set.red = defaultCLR.red;
+ return;
+ case 229: //horizon.set.green
+ NAM0.value.horizon.set.green = defaultCLR.green;
+ return;
+ case 230: //horizon.set.blue
+ NAM0.value.horizon.set.blue = defaultCLR.blue;
+ return;
+ case 231: //horizon.set.unused1
+ NAM0.value.horizon.set.unused1 = defaultCLR.unused1;
+ return;
+ case 232: //horizon.night.red
+ NAM0.value.horizon.night.red = defaultCLR.red;
+ return;
+ case 233: //horizon.night.green
+ NAM0.value.horizon.night.green = defaultCLR.green;
+ return;
+ case 234: //horizon.night.blue
+ NAM0.value.horizon.night.blue = defaultCLR.blue;
+ return;
+ case 235: //horizon.night.unused1
+ NAM0.value.horizon.night.unused1 = defaultCLR.unused1;
+ return;
+ case 236: //horizon.noon.red
+ NAM0.value.horizon.noon.red = defaultCLR.red;
+ return;
+ case 237: //horizon.noon.green
+ NAM0.value.horizon.noon.green = defaultCLR.green;
+ return;
+ case 238: //horizon.noon.blue
+ NAM0.value.horizon.noon.blue = defaultCLR.blue;
+ return;
+ case 239: //horizon.noon.unused1
+ NAM0.value.horizon.noon.unused1 = defaultCLR.unused1;
+ return;
+ case 240: //horizon.midnight.red
+ NAM0.value.horizon.midnight.red = defaultCLR.red;
+ return;
+ case 241: //horizon.midnight.green
+ NAM0.value.horizon.midnight.green = defaultCLR.green;
+ return;
+ case 242: //horizon.midnight.blue
+ NAM0.value.horizon.midnight.blue = defaultCLR.blue;
+ return;
+ case 243: //horizon.midnight.unused1
+ NAM0.value.horizon.midnight.unused1 = defaultCLR.unused1;
+ return;
+ case 244: //upperClouds.rise.red
+ NAM0.value.upperClouds.rise.red = defaultCLR.red;
+ return;
+ case 245: //upperClouds.rise.green
+ NAM0.value.upperClouds.rise.green = defaultCLR.green;
+ return;
+ case 246: //upperClouds.rise.blue
+ NAM0.value.upperClouds.rise.blue = defaultCLR.blue;
+ return;
+ case 247: //upperClouds.rise.unused1
+ NAM0.value.upperClouds.rise.unused1 = defaultCLR.unused1;
+ return;
+ case 248: //upperClouds.day.red
+ NAM0.value.upperClouds.day.red = defaultCLR.red;
+ return;
+ case 249: //upperClouds.day.green
+ NAM0.value.upperClouds.day.green = defaultCLR.green;
+ return;
+ case 250: //upperClouds.day.blue
+ NAM0.value.upperClouds.day.blue = defaultCLR.blue;
+ return;
+ case 251: //upperClouds.day.unused1
+ NAM0.value.upperClouds.day.unused1 = defaultCLR.unused1;
+ return;
+ case 252: //upperClouds.set.red
+ NAM0.value.upperClouds.set.red = defaultCLR.red;
+ return;
+ case 253: //upperClouds.set.green
+ NAM0.value.upperClouds.set.green = defaultCLR.green;
+ return;
+ case 254: //upperClouds.set.blue
+ NAM0.value.upperClouds.set.blue = defaultCLR.blue;
+ return;
+ case 255: //upperClouds.set.unused1
+ NAM0.value.upperClouds.set.unused1 = defaultCLR.unused1;
+ return;
+ case 256: //upperClouds.night.red
+ NAM0.value.upperClouds.night.red = defaultCLR.red;
+ return;
+ case 257: //upperClouds.night.green
+ NAM0.value.upperClouds.night.green = defaultCLR.green;
+ return;
+ case 258: //upperClouds.night.blue
+ NAM0.value.upperClouds.night.blue = defaultCLR.blue;
+ return;
+ case 259: //upperClouds.night.unused1
+ NAM0.value.upperClouds.night.unused1 = defaultCLR.unused1;
+ return;
+ case 260: //upperClouds.noon.red
+ NAM0.value.upperClouds.noon.red = defaultCLR.red;
+ return;
+ case 261: //upperClouds.noon.green
+ NAM0.value.upperClouds.noon.green = defaultCLR.green;
+ return;
+ case 262: //upperClouds.noon.blue
+ NAM0.value.upperClouds.noon.blue = defaultCLR.blue;
+ return;
+ case 263: //upperClouds.noon.unused1
+ NAM0.value.upperClouds.noon.unused1 = defaultCLR.unused1;
+ return;
+ case 264: //upperClouds.midnight.red
+ NAM0.value.upperClouds.midnight.red = defaultCLR.red;
+ return;
+ case 265: //upperClouds.midnight.green
+ NAM0.value.upperClouds.midnight.green = defaultCLR.green;
+ return;
+ case 266: //upperClouds.midnight.blue
+ NAM0.value.upperClouds.midnight.blue = defaultCLR.blue;
+ return;
+ case 267: //upperClouds.midnight.unused1
+ NAM0.value.upperClouds.midnight.unused1 = defaultCLR.unused1;
+ return;
+ case 268: //fogDayNear
+ FNAM.value.fogDayNear = defaultFNAM.fogDayNear;
+ return;
+ case 269: //fogDayFar
+ FNAM.value.fogDayFar = defaultFNAM.fogDayFar;
+ return;
+ case 270: //fogNightNear
+ FNAM.value.fogNightNear = defaultFNAM.fogNightNear;
+ return;
+ case 271: //fogNightFar
+ FNAM.value.fogNightFar = defaultFNAM.fogNightFar;
+ return;
+ case 272: //fogDayPower
+ FNAM.value.fogDayPower = defaultFNAM.fogDayPower;
+ return;
+ case 273: //fogNightPower
+ FNAM.value.fogNightPower = defaultFNAM.fogNightPower;
+ return;
+ case 274: //INAM
INAM.Unload();
return;
- case 38: //data DATA ,, Struct
- DATA.Unload();
+ case 275: //windSpeed
+ DATA.value.windSpeed = defaultDATA.windSpeed;
+ return;
+ case 276: //lowerCloudSpeed
+ DATA.value.lowerCloudSpeed = defaultDATA.lowerCloudSpeed;
return;
- case 39: //data DATA ,, Struct
- DATA.Unload();
+ case 277: //upperCloudSpeed
+ DATA.value.upperCloudSpeed = defaultDATA.upperCloudSpeed;
return;
- case 40: //data DATA ,, Struct
- DATA.Unload();
+ case 278: //transDelta
+ DATA.value.transDelta = defaultDATA.transDelta;
return;
- case 41: //data DATA ,, Struct
- DATA.Unload();
+ case 279: //sunGlare
+ DATA.value.sunGlare = defaultDATA.sunGlare;
return;
- case 42: //data DATA ,, Struct
- DATA.Unload();
+ case 280: //sunDamage
+ DATA.value.sunDamage = defaultDATA.sunDamage;
return;
- case 43: //data DATA ,, Struct
- DATA.Unload();
+ case 281: //rainFadeIn
+ DATA.value.rainFadeIn = defaultDATA.rainFadeIn;
return;
- case 44: //data DATA ,, Struct
- DATA.Unload();
+ case 282: //rainFadeOut
+ DATA.value.rainFadeOut = defaultDATA.rainFadeOut;
+ return;
+ case 283: //boltFadeIn
+ DATA.value.boltFadeIn = defaultDATA.boltFadeIn;
+ return;
+ case 284: //boltFadeOut
+ DATA.value.boltFadeOut = defaultDATA.boltFadeOut;
+ return;
+ case 285: //boltFrequency
+ DATA.value.boltFrequency = defaultDATA.boltFrequency;
+ return;
+ case 286: //weatherType
+ DATA.value.weatherType = defaultDATA.weatherType;
+ return;
+ case 287: //boltRed
+ DATA.value.boltRed = defaultDATA.boltRed;
+ return;
+ case 288: //boltGreen
+ DATA.value.boltGreen = defaultDATA.boltGreen;
+ return;
+ case 289: //boltBlue
+ DATA.value.boltBlue = defaultDATA.boltBlue;
+ return;
+ case 290: //sounds
+ if(ListFieldID == 0) //sounds
+ {
+ Sounds.Unload();
+ return;
+ }
+
+ if(ListIndex >= Sounds.value.size())
+ return;
+
+ switch(ListFieldID)
+ {
+ case 1: //sound
+ Sounds.value[ListIndex]->sound = defaultSNAM.sound;
+ return;
+ case 2: //type
+ Sounds.value[ListIndex]->type = defaultSNAM.type;
+ return;
+ default:
+ return;
+ }
return;
- case 45: //data DATA ,, Struct
- DATA.Unload();
+ case 291: //convenience deleter
+ NAM0.value.upperSky = defaultColors;
return;
- case 46: //data DATA ,, Struct
- DATA.Unload();
+ case 292: //convenience deleter
+ NAM0.value.fog = defaultColors;
return;
- case 47: //data DATA ,, Struct
- DATA.Unload();
+ case 293: //convenience deleter
+ NAM0.value.lowerClouds = defaultColors;
return;
- case 48: //data DATA ,, Struct
- DATA.Unload();
+ case 294: //convenience deleter
+ NAM0.value.ambient = defaultColors;
return;
- case 49: //data DATA ,, Struct
- DATA.Unload();
+ case 295: //convenience deleter
+ NAM0.value.sunlight = defaultColors;
return;
- case 50: //data DATA ,, Struct
- DATA.Unload();
+ case 296: //convenience deleter
+ NAM0.value.sun = defaultColors;
return;
- case 51: //data DATA ,, Struct
- DATA.Unload();
+ case 297: //convenience deleter
+ NAM0.value.stars = defaultColors;
return;
- case 52: //data DATA ,, Struct
- DATA.Unload();
+ case 298: //convenience deleter
+ NAM0.value.lowerSky = defaultColors;
return;
- case 53: //snam SNAM ,, Struct
- SNAM.Unload();
+ case 299: //convenience deleter
+ NAM0.value.horizon = defaultColors;
return;
- case 54: //snam SNAM ,, Struct
- SNAM.Unload();
+ case 300: //convenience deleter
+ NAM0.value.upperClouds = defaultColors;
return;
default:
return;
diff --git a/CBash/FalloutNewVegas/Records/CLMTRecord.cpp b/CBash/FalloutNewVegas/Records/CLMTRecord.cpp
index 4cc4215..e40076e 100644
--- a/CBash/FalloutNewVegas/Records/CLMTRecord.cpp
+++ b/CBash/FalloutNewVegas/Records/CLMTRecord.cpp
@@ -24,6 +24,62 @@ GPL License and Copyright Notice ============================================
namespace FNV
{
+CLMTRecord::CLMTWLST::CLMTWLST():
+ weather(0),
+ chance(0),
+ globalId(0)
+ {
+ //
+ }
+
+CLMTRecord::CLMTWLST::~CLMTWLST()
+ {
+ //
+ }
+
+bool CLMTRecord::CLMTWLST::operator ==(const CLMTWLST &other) const
+ {
+ return (weather == other.weather &&
+ chance == other.chance &&
+ globalId == other.globalId);
+ }
+
+bool CLMTRecord::CLMTWLST::operator !=(const CLMTWLST &other) const
+ {
+ return !(*this == other);
+ }
+
+CLMTRecord::CLMTTNAM::CLMTTNAM():
+ riseBegin(0),
+ riseEnd(0),
+ setBegin(0),
+ setEnd(0),
+ volatility(0),
+ phaseLength(0)
+ {
+ //
+ }
+
+CLMTRecord::CLMTTNAM::~CLMTTNAM()
+ {
+ //
+ }
+
+bool CLMTRecord::CLMTTNAM::operator ==(const CLMTTNAM &other) const
+ {
+ return (riseBegin == other.riseBegin &&
+ riseEnd == other.riseEnd &&
+ setBegin == other.setBegin &&
+ setEnd == other.setEnd &&
+ volatility == other.volatility &&
+ phaseLength == other.phaseLength);
+ }
+
+bool CLMTRecord::CLMTTNAM::operator !=(const CLMTTNAM &other) const
+ {
+ return !(*this == other);
+ }
+
CLMTRecord::CLMTRecord(unsigned char *_recData):
FNVRecord(_recData)
{
@@ -51,12 +107,10 @@ CLMTRecord::CLMTRecord(CLMTRecord *srcRecord):
}
EDID = srcRecord->EDID;
- WLST = srcRecord->WLST;
+ Weathers = srcRecord->Weathers;
FNAM = srcRecord->FNAM;
GNAM = srcRecord->GNAM;
-
MODL = srcRecord->MODL;
-
TNAM = srcRecord->TNAM;
return;
}
@@ -71,17 +125,23 @@ bool CLMTRecord::VisitFormIDs(FormIDOp &op)
if(!IsLoaded())
return false;
- //if(WLST.IsLoaded()) //FILL IN MANUALLY
- // op.Accept(WLST->value);
- if(MODL.IsLoaded() && MODL->MODS.IsLoaded())
- op.Accept(MODL->MODS->value);
+ for(UINT32 x = 0; x < Weathers.value.size(); x++)
+ {
+ op.Accept(Weathers.value[x].weather);
+ op.Accept(Weathers.value[x].globalId);
+ }
+ if(MODL.IsLoaded())
+ {
+ for(UINT32 x = 0; x < MODL->Textures.MODS.size(); x++)
+ op.Accept(MODL->Textures.MODS[x]->texture);
+ }
return op.Stop();
}
UINT32 CLMTRecord::GetType()
{
- return 'TMLC';
+ return REV32(CLMT);
}
STRING CLMTRecord::GetStrType()
@@ -111,39 +171,39 @@ SINT32 CLMTRecord::ParseRecord(unsigned char *buffer, const UINT32 &recSize)
}
switch(subType)
{
- case 'DIDE':
+ case REV32(EDID):
EDID.Read(buffer, subSize, curPos);
break;
- case 'TSLW':
- WLST.Read(buffer, subSize, curPos);
+ case REV32(WLST):
+ Weathers.Read(buffer, subSize, curPos);
break;
- case 'MANF':
+ case REV32(FNAM):
FNAM.Read(buffer, subSize, curPos);
break;
- case 'MANG':
+ case REV32(GNAM):
GNAM.Read(buffer, subSize, curPos);
break;
- case 'LDOM':
+ case REV32(MODL):
MODL.Load();
MODL->MODL.Read(buffer, subSize, curPos);
break;
- case 'BDOM':
+ case REV32(MODB):
MODL.Load();
MODL->MODB.Read(buffer, subSize, curPos);
break;
- case 'TDOM':
+ case REV32(MODT):
MODL.Load();
MODL->MODT.Read(buffer, subSize, curPos);
break;
- case 'SDOM':
+ case REV32(MODS):
MODL.Load();
MODL->Textures.Read(buffer, subSize, curPos);
break;
- case 'DDOM':
+ case REV32(MODD):
MODL.Load();
MODL->MODD.Read(buffer, subSize, curPos);
break;
- case 'MANT':
+ case REV32(TNAM):
TNAM.Read(buffer, subSize, curPos);
break;
default:
@@ -163,7 +223,7 @@ SINT32 CLMTRecord::Unload()
IsChanged(false);
IsLoaded(false);
EDID.Unload();
- WLST.Unload();
+ Weathers.Unload();
FNAM.Unload();
GNAM.Unload();
MODL.Unload();
@@ -174,25 +234,22 @@ SINT32 CLMTRecord::Unload()
SINT32 CLMTRecord::WriteRecord(FileWriter &writer)
{
WRITE(EDID);
- WRITE(WLST);
+ WRITEAS(Weathers, WLST);
WRITE(FNAM);
WRITE(GNAM);
-
MODL.Write(writer);
-
WRITE(TNAM);
-
return -1;
}
bool CLMTRecord::operator ==(const CLMTRecord &other) const
{
- return (EDID.equalsi(other.EDID) &&
- WLST == other.WLST &&
+ return (TNAM == other.TNAM &&
+ EDID.equalsi(other.EDID) &&
FNAM.equalsi(other.FNAM) &&
GNAM.equalsi(other.GNAM) &&
- MODL == other.MODL &&
- TNAM == other.TNAM);
+ Weathers == other.Weathers &&
+ MODL == other.MODL);
}
bool CLMTRecord::operator !=(const CLMTRecord &other) const
diff --git a/CBash/FalloutNewVegas/Records/CLMTRecord.h b/CBash/FalloutNewVegas/Records/CLMTRecord.h
index d261139..d9674e3 100644
--- a/CBash/FalloutNewVegas/Records/CLMTRecord.h
+++ b/CBash/FalloutNewVegas/Records/CLMTRecord.h
@@ -30,9 +30,9 @@ class CLMTRecord : public FNVRecord //Climate
private:
struct CLMTWLST
{
- UINT32 weather;
+ FORMID weather;
SINT32 chance;
- FORMID global;
+ FORMID globalId;
CLMTWLST();
~CLMTWLST();
@@ -53,7 +53,7 @@ class CLMTRecord : public FNVRecord //Climate
};
public:
StringRecord EDID; //Editor ID
- std::vector Weathers; //Weather Types
+ UnorderedPackedArray Weathers; //Weather Types
StringRecord FNAM; //Sun Texture
StringRecord GNAM; //Sun Glare Texture
OptSubRecord MODL; //Model
diff --git a/CBash/FalloutNewVegas/Records/REGNRecord.cpp b/CBash/FalloutNewVegas/Records/REGNRecord.cpp
index 9f4b998..f319f06 100644
--- a/CBash/FalloutNewVegas/Records/REGNRecord.cpp
+++ b/CBash/FalloutNewVegas/Records/REGNRecord.cpp
@@ -21,9 +21,571 @@ GPL License and Copyright Notice ============================================
*/
#include "..\..\Common.h"
#include "REGNRecord.h"
+#include
namespace FNV
{
+REGNRecord::REGNRPLD::REGNRPLD():
+ posX(0.0f),
+ posY(0.0f)
+ {
+ //
+ }
+
+REGNRecord::REGNRPLD::~REGNRPLD()
+ {
+ //
+ }
+
+bool REGNRecord::REGNRPLD::operator ==(const REGNRPLD &other) const
+ {
+ return (AlmostEqual(posX,other.posX,2) &&
+ AlmostEqual(posY,other.posY,2));
+ }
+
+bool REGNRecord::REGNRPLD::operator !=(const REGNRPLD &other) const
+ {
+ return !(*this == other);
+ }
+
+void REGNRecord::REGNArea::Write(FileWriter &writer)
+ {
+ WRITE(RPLI);
+ WRITE(RPLD);
+ }
+
+bool REGNRecord::REGNArea::operator ==(const REGNArea &other) const
+ {
+ return (RPLI == other.RPLI &&
+ RPLD == other.RPLD);
+ }
+
+bool REGNRecord::REGNArea::operator !=(const REGNArea &other) const
+ {
+ return !(*this == other);
+ }
+
+REGNRecord::REGNRDWT::REGNRDWT():
+ weather(0),
+ chance(0),
+ globalId(0)
+ {
+ //
+ }
+
+REGNRecord::REGNRDWT::~REGNRDWT()
+ {
+ //
+ }
+
+bool REGNRecord::REGNRDWT::operator ==(const REGNRDWT &other) const
+ {
+ return (weather == other.weather &&
+ chance == other.chance &&
+ globalId == other.globalId);
+ }
+
+bool REGNRecord::REGNRDWT::operator !=(const REGNRDWT &other) const
+ {
+ return !(*this == other);
+ }
+
+REGNRecord::REGNRDSD::REGNRDSD():
+ sound(0),
+ flags(0),
+ chance(0)
+ {
+ //
+ }
+
+REGNRecord::REGNRDSD::~REGNRDSD()
+ {
+ //
+ }
+
+bool REGNRecord::REGNRDSD::IsPleasant()
+ {
+ return (flags & fIsPleasant) != 0;
+ }
+
+void REGNRecord::REGNRDSD::IsPleasant(bool value)
+ {
+ flags = value ? (flags | fIsPleasant) : (flags & ~fIsPleasant);
+ }
+
+bool REGNRecord::REGNRDSD::IsCloudy()
+ {
+ return (flags & fIsCloudy) != 0;
+ }
+
+void REGNRecord::REGNRDSD::IsCloudy(bool value)
+ {
+ flags = value ? (flags | fIsCloudy) : (flags & ~fIsCloudy);
+ }
+
+bool REGNRecord::REGNRDSD::IsRainy()
+ {
+ return (flags & fIsRainy) != 0;
+ }
+
+void REGNRecord::REGNRDSD::IsRainy(bool value)
+ {
+ flags = value ? (flags | fIsRainy) : (flags & ~fIsRainy);
+ }
+
+bool REGNRecord::REGNRDSD::IsSnowy()
+ {
+ return (flags & fIsSnowy) != 0;
+ }
+
+void REGNRecord::REGNRDSD::IsSnowy(bool value)
+ {
+ flags = value ? (flags | fIsSnowy) : (flags & ~fIsSnowy);
+ }
+
+bool REGNRecord::REGNRDSD::IsFlagMask(UINT32 Mask, bool Exact)
+ {
+ return Exact ? ((flags & Mask) == Mask) : ((flags & Mask) != 0);
+ }
+
+void REGNRecord::REGNRDSD::SetFlagMask(UINT32 Mask)
+ {
+ flags = Mask;
+ }
+
+bool REGNRecord::REGNRDSD::operator ==(const REGNRDSD &other) const
+ {
+ return (sound == other.sound &&
+ flags == other.flags &&
+ flags == other.flags);
+ }
+
+bool REGNRecord::REGNRDSD::operator !=(const REGNRDSD &other) const
+ {
+ return !(*this == other);
+ }
+
+REGNRecord::REGNRDGS::REGNRDGS():
+ grass(0)
+ {
+ memset(&unk1[0], 0x00, sizeof(unk1));
+ }
+
+REGNRecord::REGNRDGS::~REGNRDGS()
+ {
+ //
+ }
+
+bool REGNRecord::REGNRDGS::operator ==(const REGNRDGS &other) const
+ {
+ return (grass == other.grass);
+ }
+
+bool REGNRecord::REGNRDGS::operator !=(const REGNRDGS &other) const
+ {
+ return !(*this == other);
+ }
+
+REGNRecord::REGNRDOT::REGNRDOT():
+ objectId(0),
+ parentIndex(0),
+ density(0.0f),
+ clustering(0),
+ minSlope(0),
+ maxSlope(0),
+ flags(0),
+ radiusWRTParent(0),
+ radius(0),
+ maxHeight(0.0f),
+ sink(0.0f),
+ sinkVar(0.0f),
+ sizeVar(0.0f),
+ angleVarX(0),
+ angleVarY(0),
+ angleVarZ(0)
+ {
+ memset(&unused1[0], 0x00, sizeof(unused1));
+ memset(&unk1[0], 0x00, sizeof(unk1));
+ memset(&unused2[0], 0x00, sizeof(unused2));
+ memset(&unk2[0], 0x00, sizeof(unk2));
+ }
+
+REGNRecord::REGNRDOT::~REGNRDOT()
+ {
+ //
+ }
+
+bool REGNRecord::REGNRDOT::IsConformToSlope()
+ {
+ return (flags & fIsConformToSlope) != 0;
+ }
+
+void REGNRecord::REGNRDOT::IsConformToSlope(bool value)
+ {
+ flags = value ? (flags | fIsConformToSlope) : (flags & ~fIsConformToSlope);
+ }
+
+bool REGNRecord::REGNRDOT::IsPaintVertices()
+ {
+ return (flags & fIsPaintVertices) != 0;
+ }
+
+void REGNRecord::REGNRDOT::IsPaintVertices(bool value)
+ {
+ flags = value ? (flags | fIsPaintVertices) : (flags & ~fIsPaintVertices);
+ }
+
+bool REGNRecord::REGNRDOT::IsSizeVariance()
+ {
+ return (flags & fIsSizeVariance) != 0;
+ }
+
+void REGNRecord::REGNRDOT::IsSizeVariance(bool value)
+ {
+ flags = value ? (flags | fIsSizeVariance) : (flags & ~fIsSizeVariance);
+ }
+
+bool REGNRecord::REGNRDOT::IsXVariance()
+ {
+ return (flags & fIsXVariance) != 0;
+ }
+
+void REGNRecord::REGNRDOT::IsXVariance(bool value)
+ {
+ flags = value ? (flags | fIsXVariance) : (flags & ~fIsXVariance);
+ }
+
+bool REGNRecord::REGNRDOT::IsYVariance()
+ {
+ return (flags & fIsYVariance) != 0;
+ }
+
+void REGNRecord::REGNRDOT::IsYVariance(bool value)
+ {
+ flags = value ? (flags | fIsYVariance) : (flags & ~fIsYVariance);
+ }
+
+bool REGNRecord::REGNRDOT::IsZVariance()
+ {
+ return (flags & fIsZVariance) != 0;
+ }
+
+void REGNRecord::REGNRDOT::IsZVariance(bool value)
+ {
+ flags = value ? (flags | fIsZVariance) : (flags & ~fIsZVariance);
+ }
+
+bool REGNRecord::REGNRDOT::IsTree()
+ {
+ return (flags & fIsTree) != 0;
+ }
+
+void REGNRecord::REGNRDOT::IsTree(bool value)
+ {
+ flags = value ? (flags | fIsTree) : (flags & ~fIsTree);
+ }
+
+bool REGNRecord::REGNRDOT::IsHugeRock()
+ {
+ return (flags & fIsHugeRock) != 0;
+ }
+
+void REGNRecord::REGNRDOT::IsHugeRock(bool value)
+ {
+ flags = value ? (flags | fIsHugeRock) : (flags & ~fIsHugeRock);
+ }
+
+bool REGNRecord::REGNRDOT::IsFlagMask(UINT8 Mask, bool Exact)
+ {
+ return Exact ? ((flags & Mask) == Mask) : ((flags & Mask) != 0);
+ }
+
+void REGNRecord::REGNRDOT::SetFlagMask(UINT8 Mask)
+ {
+ flags = Mask;
+ }
+
+bool REGNRecord::REGNRDOT::operator ==(const REGNRDOT &other) const
+ {
+ return (objectId == other.objectId &&
+ parentIndex == other.parentIndex &&
+ clustering == other.clustering &&
+ minSlope == other.minSlope &&
+ maxSlope == other.maxSlope &&
+ flags == other.flags &&
+ radiusWRTParent == other.radiusWRTParent &&
+ radius == other.radius &&
+ angleVarX == other.angleVarX &&
+ angleVarY == other.angleVarY &&
+ angleVarZ == other.angleVarZ &&
+ AlmostEqual(density,other.density,2) &&
+ AlmostEqual(maxHeight,other.maxHeight,2) &&
+ AlmostEqual(sink,other.sink,2) &&
+ AlmostEqual(sinkVar,other.sinkVar,2) &&
+ AlmostEqual(sizeVar,other.sizeVar,2));
+ }
+
+bool REGNRecord::REGNRDOT::operator !=(const REGNRDOT &other) const
+ {
+ return !(*this == other);
+ }
+
+REGNRecord::REGNRDAT::REGNRDAT():
+ entryType(0),
+ flags(0),
+ priority(0)
+ {
+ memset(&unused1[0], 0x00, sizeof(unused1));
+ }
+
+REGNRecord::REGNRDAT::~REGNRDAT()
+ {
+ //
+ }
+
+bool REGNRecord::REGNRDAT::operator ==(const REGNRDAT &other) const
+ {
+ return (entryType == other.entryType &&
+ flags == other.flags &&
+ priority == other.priority);
+ }
+
+bool REGNRecord::REGNRDAT::operator !=(const REGNRDAT &other) const
+ {
+ return !(*this == other);
+ }
+
+bool REGNRecord::REGNEntry::IsOverride()
+ {
+ return (RDAT.value.flags & fIsOverride) != 0;
+ }
+
+void REGNRecord::REGNEntry::IsOverride(bool value)
+ {
+ RDAT.value.flags = value ? (RDAT.value.flags | fIsOverride) : (RDAT.value.flags & ~fIsOverride);
+ }
+
+bool REGNRecord::REGNEntry::IsFlagMask(UINT8 Mask, bool Exact)
+ {
+ return Exact ? ((RDAT.value.flags & Mask) == Mask) : ((RDAT.value.flags & Mask) != 0);
+ }
+
+void REGNRecord::REGNEntry::SetFlagMask(UINT8 Mask)
+ {
+ RDAT.value.flags = Mask;
+ }
+
+bool REGNRecord::REGNEntry::IsObject()
+ {
+ return (RDAT.value.entryType == eObject);
+ }
+
+void REGNRecord::REGNEntry::IsObject(bool value)
+ {
+ if(value)
+ RDAT.value.entryType = eObject;
+ else if(IsObject())
+ RDAT.value.entryType = eWeather;
+ }
+
+bool REGNRecord::REGNEntry::IsWeather()
+ {
+ return (RDAT.value.entryType == eWeather);
+ }
+
+void REGNRecord::REGNEntry::IsWeather(bool value)
+ {
+ if(value)
+ RDAT.value.entryType = eWeather;
+ else if(IsWeather())
+ RDAT.value.entryType = eObject;
+ }
+
+bool REGNRecord::REGNEntry::IsMap()
+ {
+ return (RDAT.value.entryType == eMap);
+ }
+
+void REGNRecord::REGNEntry::IsMap(bool value)
+ {
+ if(value)
+ RDAT.value.entryType = eMap;
+ else if(IsMap())
+ RDAT.value.entryType = eObject;
+ }
+
+bool REGNRecord::REGNEntry::IsLand()
+ {
+ return (RDAT.value.entryType == eLand);
+ }
+
+void REGNRecord::REGNEntry::IsLand(bool value)
+ {
+ if(value)
+ RDAT.value.entryType = eLand;
+ else if(IsLand())
+ RDAT.value.entryType = eObject;
+ }
+
+bool REGNRecord::REGNEntry::IsGrass()
+ {
+ return (RDAT.value.entryType == eGrass);
+ }
+
+void REGNRecord::REGNEntry::IsGrass(bool value)
+ {
+ if(value)
+ RDAT.value.entryType = eGrass;
+ else if(IsGrass())
+ RDAT.value.entryType = eObject;
+ }
+
+bool REGNRecord::REGNEntry::IsSound()
+ {
+ return (RDAT.value.entryType == eSound);
+ }
+
+void REGNRecord::REGNEntry::IsSound(bool value)
+ {
+ if(value)
+ RDAT.value.entryType = eSound;
+ else if(IsSound())
+ RDAT.value.entryType = eObject;
+ }
+
+bool REGNRecord::REGNEntry::IsImposter()
+ {
+ return (RDAT.value.entryType == eImposter);
+ }
+
+void REGNRecord::REGNEntry::IsImposter(bool value)
+ {
+ if(value)
+ RDAT.value.entryType = eImposter;
+ else if(IsImposter())
+ RDAT.value.entryType = eObject;
+ }
+
+bool REGNRecord::REGNEntry::IsType(UINT32 Type)
+ {
+ return (RDAT.value.entryType == Type);
+ }
+
+void REGNRecord::REGNEntry::SetType(UINT32 Type)
+ {
+ RDAT.value.entryType = Type;
+ }
+
+bool REGNRecord::REGNEntry::IsDefaultMusic()
+ {
+ return RDMD.IsLoaded() ? (*RDMD.value == eDefault) : false;
+ }
+
+void REGNRecord::REGNEntry::IsDefaultMusic(bool value)
+ {
+ RDMD.Load();
+ if(value)
+ *RDMD.value = eDefault;
+ else if(IsDefaultMusic())
+ *RDMD.value = ePublic;
+ }
+
+bool REGNRecord::REGNEntry::IsPublicMusic()
+ {
+ return RDMD.IsLoaded() ? (*RDMD.value == ePublic) : false;
+ }
+
+void REGNRecord::REGNEntry::IsPublicMusic(bool value)
+ {
+ RDMD.Load();
+ if(value)
+ *RDMD.value = ePublic;
+ else if(IsPublicMusic())
+ *RDMD.value = eDefault;
+ }
+
+bool REGNRecord::REGNEntry::IsDungeonMusic()
+ {
+ return RDMD.IsLoaded() ? (*RDMD.value == eDungeon) : false;
+ }
+
+void REGNRecord::REGNEntry::IsDungeonMusic(bool value)
+ {
+ RDMD.Load();
+ if(value)
+ *RDMD.value = eDungeon;
+ else if(IsDungeonMusic())
+ *RDMD.value = eDefault;
+ }
+
+bool REGNRecord::REGNEntry::IsMusicType(UINT32 Type)
+ {
+ return RDMD.IsLoaded() ? (*RDMD.value == Type) : false;
+ }
+
+void REGNRecord::REGNEntry::SetMusicType(UINT32 Type)
+ {
+ RDMD.Load();
+ *RDMD.value = Type;
+ }
+
+void REGNRecord::REGNEntry::Write(FileWriter &writer)
+ {
+ WRITE(RDAT);
+ switch(RDAT.value.entryType)
+ {
+ case eObject:
+ WRITEREQ(RDOT);
+ break;
+ case eWeather:
+ WRITE(RDWT);
+ break;
+ case eMap:
+ WRITE(RDMP);
+ break;
+ case eLand:
+ WRITE(ICON);
+ break;
+ case eGrass:
+ WRITE(RDGS);
+ break;
+ case eSound:
+ WRITE(RDMD);
+ WRITE(RDMO);
+ WRITE(RDSI);
+ WRITE(RDSB);
+ WRITEREQ(RDSD);
+ break;
+ case eImposter:
+ WRITE(RDID);
+ break;
+ default:
+ //printf("!!!%08X: Unknown REGN Entry type: %i, Index:%i!!!\n", formID, RDAT.value.entryType, p);
+ break;
+ }
+ }
+
+bool REGNRecord::REGNEntry::operator ==(const REGNEntry &other) const
+ {
+ return (RDAT == other.RDAT &&
+ RDMD == other.RDMD &&
+ RDMO == other.RDMO &&
+ RDSI == other.RDSI &&
+ RDMP.equals(other.RDMP) &&
+ ICON.equalsi(other.ICON) &&
+ RDSB == other.RDSB &&
+ RDID == other.RDID &&
+ RDSD == other.RDSD &&
+ RDGS == other.RDGS &&
+ RDWT == other.RDWT &&
+ RDOT == other.RDOT);
+ }
+
+bool REGNRecord::REGNEntry::operator !=(const REGNEntry &other) const
+ {
+ return !(*this == other);
+ }
+
REGNRecord::REGNRecord(unsigned char *_recData):
FNVRecord(_recData)
{
@@ -55,19 +617,8 @@ REGNRecord::REGNRecord(REGNRecord *srcRecord):
MICO = srcRecord->MICO;
RCLR = srcRecord->RCLR;
WNAM = srcRecord->WNAM;
- RPLI = srcRecord->RPLI;
- RPLD = srcRecord->RPLD;
- RDAT = srcRecord->RDAT;
- RDOT = srcRecord->RDOT;
- RDMP = srcRecord->RDMP;
- RDGS = srcRecord->RDGS;
- RDMD = srcRecord->RDMD;
- RDMO = srcRecord->RDMO;
- RDSI = srcRecord->RDSI;
- RDSB = srcRecord->RDSB;
- RDSD = srcRecord->RDSD;
- RDWT = srcRecord->RDWT;
- RDID = srcRecord->RDID;
+ Areas = srcRecord->Areas;
+ Entries = srcRecord->Entries;
return;
}
@@ -82,32 +633,39 @@ bool REGNRecord::VisitFormIDs(FormIDOp &op)
return false;
if(WNAM.IsLoaded())
- op.Accept(WNAM->value);
- //if(RDOT.IsLoaded()) //FILL IN MANUALLY
- // op.Accept(RDOT->value);
- //if(RDGS.IsLoaded()) //FILL IN MANUALLY
- // op.Accept(RDGS->value);
- if(RDMO.IsLoaded())
- op.Accept(RDMO->value);
- if(RDSI.IsLoaded())
- op.Accept(RDSI->value);
- if(RDSB.IsLoaded())
- op.Accept(RDSB->value);
- //if(RDSD.IsLoaded()) //FILL IN MANUALLY
- // op.Accept(RDSD->value);
- //if(RDWT.IsLoaded()) //FILL IN MANUALLY
- // op.Accept(RDWT->value);
- //if(RDID.IsLoaded()) //FILL IN MANUALLY
- // op.Accept(RDID->value);
+ op.Accept(WNAM.value);
+ for(UINT32 x = 0; x < Entries.value.size(); x++)
+ {
+ for(UINT32 y = 0; y < Entries.value[x]->RDOT.value.size(); y++)
+ op.Accept(Entries.value[x]->RDOT.value[y].objectId);
+ for(UINT32 y = 0; y < Entries.value[x]->RDGS.value.size(); y++)
+ op.Accept(Entries.value[x]->RDGS.value[y].grass);
+ for(UINT32 y = 0; y < Entries.value[x]->RDSD.value.size(); y++)
+ op.Accept(Entries.value[x]->RDSD.value[y].sound);
+ for(UINT32 y = 0; y < Entries.value[x]->RDWT.value.size(); y++)
+ {
+ op.Accept(Entries.value[x]->RDWT.value[y].weather);
+ op.Accept(Entries.value[x]->RDWT.value[y].globalId);
+ }
+ if(Entries.value[x]->RDMO.IsLoaded())
+ op.Accept(Entries.value[x]->RDMO.value);
+ if(Entries.value[x]->RDSI.IsLoaded())
+ op.Accept(Entries.value[x]->RDSI.value);
+ for(UINT32 y = 0; y < Entries.value[x]->RDSB.value.size(); y++)
+ op.Accept(Entries.value[x]->RDSB.value[y]);
+ for(UINT32 y = 0; y < Entries.value[x]->RDID.value.size(); y++)
+ op.Accept(Entries.value[x]->RDID.value[y]);
+ }
return op.Stop();
}
UINT32 REGNRecord::GetType()
{
- return 'NGER';
+ return REV32(REGN);
}
+
STRING REGNRecord::GetStrType()
{
return "REGN";
@@ -135,59 +693,86 @@ SINT32 REGNRecord::ParseRecord(unsigned char *buffer, const UINT32 &recSize)
}
switch(subType)
{
- case 'DIDE':
+ case REV32(EDID):
EDID.Read(buffer, subSize, curPos);
break;
- case 'NOCI':
- ICON.Read(buffer, subSize, curPos);
+ case REV32(ICON):
+ if(Entries.value.size() != 0 && Entries.value.back()->IsLand())
+ Entries.value.back()->ICON.Read(buffer, subSize, curPos);
+ else
+ ICON.Read(buffer, subSize, curPos);
break;
- case 'OCIM':
+ case REV32(MICO):
MICO.Read(buffer, subSize, curPos);
break;
- case 'RLCR':
+ case REV32(RCLR):
RCLR.Read(buffer, subSize, curPos);
break;
- case 'MANW':
+ case REV32(WNAM):
WNAM.Read(buffer, subSize, curPos);
break;
- case 'ILPR':
- RPLI.Read(buffer, subSize, curPos);
+ case REV32(RPLI):
+ Areas.value.push_back(new REGNArea);
+ Areas.value.back()->RPLI.Read(buffer, subSize, curPos);
break;
- case 'DLPR':
- RPLD.Read(buffer, subSize, curPos);
+ case REV32(RPLD):
+ if(Areas.value.size() == 0)
+ Areas.value.push_back(new REGNArea);
+ Areas.value.back()->RPLD.Read(buffer, subSize, curPos);
break;
- case 'TADR':
- RDAT.Read(buffer, subSize, curPos);
+ case REV32(RDAT):
+ Entries.value.push_back(new REGNEntry);
+ Entries.value.back()->RDAT.Read(buffer, subSize, curPos);
break;
- case 'TODR':
- RDOT.Read(buffer, subSize, curPos);
+ case REV32(RDOT):
+ if(Entries.value.size() == 0)
+ Entries.value.push_back(new REGNEntry);
+ Entries.value.back()->RDOT.Read(buffer, subSize, curPos);
break;
- case 'PMDR':
- RDMP.Read(buffer, subSize, curPos);
+ case REV32(RDMP):
+ if(Entries.value.size() == 0)
+ Entries.value.push_back(new REGNEntry);
+ Entries.value.back()->RDMP.Read(buffer, subSize, curPos);
break;
- case 'SGDR':
- RDGS.Read(buffer, subSize, curPos);
+ case REV32(RDGS):
+ if(Entries.value.size() == 0)
+ Entries.value.push_back(new REGNEntry);
+ Entries.value.back()->RDGS.Read(buffer, subSize, curPos);
break;
- case 'DMDR':
- RDMD.Read(buffer, subSize, curPos);
+ case REV32(RDMD):
+ if(Entries.value.size() == 0)
+ Entries.value.push_back(new REGNEntry);
+ Entries.value.back()->RDMD.Read(buffer, subSize, curPos);
break;
- case 'OMDR':
- RDMO.Read(buffer, subSize, curPos);
+ case REV32(RDMO):
+ if(Entries.value.size() == 0)
+ Entries.value.push_back(new REGNEntry);
+ Entries.value.back()->RDMO.Read(buffer, subSize, curPos);
break;
- case 'ISDR':
- RDSI.Read(buffer, subSize, curPos);
+ case REV32(RDSI):
+ if(Entries.value.size() == 0)
+ Entries.value.push_back(new REGNEntry);
+ Entries.value.back()->RDSI.Read(buffer, subSize, curPos);
break;
- case 'BSDR':
- RDSB.Read(buffer, subSize, curPos);
+ case REV32(RDSB):
+ if(Entries.value.size() == 0)
+ Entries.value.push_back(new REGNEntry);
+ Entries.value.back()->RDSB.Read(buffer, subSize, curPos);
break;
- case 'DSDR':
- RDSD.Read(buffer, subSize, curPos);
+ case REV32(RDSD):
+ if(Entries.value.size() == 0)
+ Entries.value.push_back(new REGNEntry);
+ Entries.value.back()->RDSD.Read(buffer, subSize, curPos);
break;
- case 'TWDR':
- RDWT.Read(buffer, subSize, curPos);
+ case REV32(RDWT):
+ if(Entries.value.size() == 0)
+ Entries.value.push_back(new REGNEntry);
+ Entries.value.back()->RDWT.Read(buffer, subSize, curPos);
break;
- case 'DIDR':
- RDID.Read(buffer, subSize, curPos);
+ case REV32(RDID):
+ if(Entries.value.size() == 0)
+ Entries.value.push_back(new REGNEntry);
+ Entries.value.back()->RDID.Read(buffer, subSize, curPos);
break;
default:
//printf("FileName = %s\n", FileName);
@@ -210,19 +795,8 @@ SINT32 REGNRecord::Unload()
MICO.Unload();
RCLR.Unload();
WNAM.Unload();
- RPLI.Unload();
- RPLD.Unload();
- RDAT.Unload();
- RDOT.Unload();
- RDMP.Unload();
- RDGS.Unload();
- RDMD.Unload();
- RDMO.Unload();
- RDSI.Unload();
- RDSB.Unload();
- RDSD.Unload();
- RDWT.Unload();
- RDID.Unload();
+ Areas.Unload();
+ Entries.Unload();
return 1;
}
@@ -233,43 +807,22 @@ SINT32 REGNRecord::WriteRecord(FileWriter &writer)
WRITE(MICO);
WRITE(RCLR);
WRITE(WNAM);
- WRITE(RPLI);
- WRITE(RPLD);
- WRITE(RDAT);
- WRITE(RDOT);
- WRITE(RDMP);
- WRITE(RDGS);
- WRITE(RDMD);
- WRITE(RDMO);
- WRITE(RDSI);
- WRITE(RDSB);
- WRITE(RDSD);
- WRITE(RDWT);
- WRITE(RDID);
-
+ Areas.Write(writer);
+ Entries.Write(writer);
return -1;
}
bool REGNRecord::operator ==(const REGNRecord &other) const
{
- return (EDID.equalsi(other.EDID) &&
+ return (RCLR == other.RCLR &&
+ WNAM == other.WNAM &&
+ EDID.equalsi(other.EDID) &&
ICON.equalsi(other.ICON) &&
MICO.equalsi(other.MICO) &&
- RCLR == other.RCLR &&
- WNAM == other.WNAM &&
- RPLI == other.RPLI &&
- RPLD == other.RPLD &&
- RDAT == other.RDAT &&
- RDOT == other.RDOT &&
- RDMP.equalsi(other.RDMP) &&
- RDGS == other.RDGS &&
- RDMD == other.RDMD &&
- RDMO == other.RDMO &&
- RDSI == other.RDSI &&
- RDSB == other.RDSB &&
- RDSD == other.RDSD &&
- RDWT == other.RDWT &&
- RDID == other.RDID);
+ Areas == other.Areas &&
+ Entries == other.Entries);
+
+ return false;
}
bool REGNRecord::operator !=(const REGNRecord &other) const
diff --git a/CBash/FalloutNewVegas/Records/REGNRecord.h b/CBash/FalloutNewVegas/Records/REGNRecord.h
index f65bdeb..d1a57e7 100644
--- a/CBash/FalloutNewVegas/Records/REGNRecord.h
+++ b/CBash/FalloutNewVegas/Records/REGNRecord.h
@@ -42,7 +42,9 @@ class REGNRecord : public FNVRecord //Region
struct REGNArea
{
ReqSimpleSubRecord RPLI; // Edge Fall-off
- std::vector RPLD; // Region Point List Data
+ UnorderedPackedArray RPLD; // Region Point List Data
+
+ void Write(FileWriter &writer);
bool operator ==(const REGNArea &other) const;
bool operator !=(const REGNArea &other) const;
@@ -52,7 +54,7 @@ class REGNRecord : public FNVRecord //Region
{
FORMID weather;
UINT32 chance;
- FORMID globalVar;
+ FORMID globalId;
REGNRDWT();
~REGNRDWT();
@@ -170,16 +172,17 @@ class REGNRecord : public FNVRecord //Region
struct REGNEntry // Region Data Entry
{
ReqSubRecord RDAT; // Data Header
- std::vector RDOT; // Objects
+ UnorderedPackedArray RDOT; // Objects
StringRecord RDMP; //Map Name
- std::vector RDGS; // Grasses
+ StringRecord ICON; //Unknown
+ UnorderedPackedArray RDGS; // Grasses
SemiOptSimpleSubRecord RDMD; // Music Type
OptSimpleSubRecord RDMO; //Music
OptSimpleSubRecord RDSI; //Incidental MediaSet
- std::vector RDSB; //Battle MediaSets
- std::vector RDSD; // Sounds
- std::vector RDWT; // Weather Types
- std::vector RDID; //Imposters
+ UnorderedSparseArray RDSB; //Battle MediaSets
+ UnorderedPackedArray RDSD; // Sounds
+ UnorderedPackedArray RDWT; // Weather Types
+ UnorderedPackedArray RDID; //Imposters
enum RDATFlags
{
@@ -235,30 +238,20 @@ class REGNRecord : public FNVRecord //Region
bool IsMusicType(UINT32 Type);
void SetMusicType(UINT32 Type);
+ void Write(FileWriter &writer);
+
bool operator ==(const REGNEntry &other) const;
bool operator !=(const REGNEntry &other) const;
};
- enum eREGNType
- {
- eREGNObjects = 2,
- eREGNWeathers = 3,
- eREGNMap = 4,
- eREGNIcon = 5,
- eREGNGrasses = 6,
- eREGNSounds = 7
- };
-
- public:
-
public:
StringRecord EDID; //Editor ID
StringRecord ICON; //Large Icon Filename
StringRecord MICO; //Small Icon Filename
- OptSubRecord RCLR; //Map Color
+ ReqSubRecord RCLR; //Map Color
OptSimpleSubRecord WNAM; //Worldspace
- std::vector Areas; // Areas
- std::vector Entries; // Region Data Entries
+ UnorderedSparseArray Areas; // Areas
+ UnorderedSparseArray Entries; // Region Data Entries
REGNRecord(unsigned char *_recData=NULL);
REGNRecord(REGNRecord *srcRecord);
diff --git a/CBash/FalloutNewVegas/Records/WTHRRecord.cpp b/CBash/FalloutNewVegas/Records/WTHRRecord.cpp
index 01a6d51..ab5145c 100644
--- a/CBash/FalloutNewVegas/Records/WTHRRecord.cpp
+++ b/CBash/FalloutNewVegas/Records/WTHRRecord.cpp
@@ -24,6 +24,245 @@ GPL License and Copyright Notice ============================================
namespace FNV
{
+WTHRRecord::WTHRONAM::WTHRONAM():
+ layer0Speed(0),
+ layer1Speed(0),
+ layer2Speed(0),
+ layer3Speed(0)
+ {
+ //
+ }
+
+WTHRRecord::WTHRONAM::~WTHRONAM()
+ {
+ //
+ }
+
+bool WTHRRecord::WTHRONAM::operator ==(const WTHRONAM &other) const
+ {
+ return (layer0Speed == other.layer0Speed &&
+ layer1Speed == other.layer1Speed &&
+ layer2Speed == other.layer2Speed &&
+ layer3Speed == other.layer3Speed);
+ }
+
+bool WTHRRecord::WTHRONAM::operator !=(const WTHRONAM &other) const
+ {
+ return !(*this == other);
+ }
+
+
+bool WTHRRecord::WTHRColors::operator ==(const WTHRColors &other) const
+ {
+ return (rise == other.rise &&
+ day == other.day &&
+ set == other.set &&
+ night == other.night &&
+ noon == other.noon &&
+ midnight == other.midnight);
+ }
+
+bool WTHRRecord::WTHRColors::operator !=(const WTHRColors &other) const
+ {
+ return !(*this == other);
+ }
+
+bool WTHRRecord::WTHRNAM0::operator ==(const WTHRNAM0 &other) const
+ {
+ return (upperSky == other.upperSky &&
+ fog == other.fog &&
+ lowerClouds == other.lowerClouds &&
+ ambient == other.ambient &&
+ sunlight == other.sunlight &&
+ sun == other.sun &&
+ stars == other.stars &&
+ lowerSky == other.lowerSky &&
+ horizon == other.horizon &&
+ upperClouds == other.upperClouds);
+ }
+
+bool WTHRRecord::WTHRNAM0::operator !=(const WTHRNAM0 &other) const
+ {
+ return !(*this == other);
+ }
+
+WTHRRecord::WTHRFNAM::WTHRFNAM():
+ fogDayNear(0.0f),
+ fogDayFar(0.0f),
+ fogNightNear(0.0f),
+ fogNightFar(0.0f),
+ fogDayPower(0.0f),
+ fogNightPower(0.0f)
+ {
+ //
+ }
+
+WTHRRecord::WTHRFNAM::~WTHRFNAM()
+ {
+ //
+ }
+
+bool WTHRRecord::WTHRFNAM::operator ==(const WTHRFNAM &other) const
+ {
+ return (AlmostEqual(fogDayNear,other.fogDayNear,2) &&
+ AlmostEqual(fogDayFar,other.fogDayFar,2) &&
+ AlmostEqual(fogNightNear,other.fogNightNear,2) &&
+ AlmostEqual(fogNightFar,other.fogNightFar,2) &&
+ AlmostEqual(fogDayPower,other.fogDayPower,2) &&
+ AlmostEqual(fogNightPower,other.fogNightPower,2));
+ }
+
+bool WTHRRecord::WTHRFNAM::operator !=(const WTHRFNAM &other) const
+ {
+ return !(*this == other);
+ }
+
+WTHRRecord::WTHRDATA::WTHRDATA():
+ windSpeed(0),
+ lowerCloudSpeed(0),
+ upperCloudSpeed(0),
+ transDelta(0),
+ sunGlare(0),
+ sunDamage(0),
+ rainFadeIn(0),
+ rainFadeOut(0),
+ boltFadeIn(0),
+ boltFadeOut(0),
+ boltFrequency(0),
+ weatherType(0),
+ boltRed(0),
+ boltGreen(0),
+ boltBlue(0)
+ {
+ //
+ }
+
+WTHRRecord::WTHRDATA::~WTHRDATA()
+ {
+ //
+ }
+
+bool WTHRRecord::WTHRDATA::operator ==(const WTHRDATA &other) const
+ {
+ return (windSpeed == other.windSpeed &&
+ lowerCloudSpeed == other.lowerCloudSpeed &&
+ upperCloudSpeed == other.upperCloudSpeed &&
+ transDelta == other.transDelta &&
+ sunGlare == other.sunGlare &&
+ sunDamage == other.sunDamage &&
+ rainFadeIn == other.rainFadeIn &&
+ rainFadeOut == other.rainFadeOut &&
+ boltFadeIn == other.boltFadeIn &&
+ boltFadeOut == other.boltFadeOut &&
+ boltFrequency == other.boltFrequency &&
+ weatherType == other.weatherType &&
+ boltRed == other.boltRed &&
+ boltGreen == other.boltGreen &&
+ boltBlue == other.boltBlue);
+ }
+
+bool WTHRRecord::WTHRDATA::operator !=(const WTHRDATA &other) const
+ {
+ return !(*this == other);
+ }
+
+WTHRRecord::WTHRSNAM::WTHRSNAM():
+ sound(0),
+ type(0)
+ {
+ //
+ }
+
+WTHRRecord::WTHRSNAM::~WTHRSNAM()
+ {
+ //
+ }
+
+bool WTHRRecord::WTHRSNAM::IsDefault()
+ {
+ return (type == eDefault);
+ }
+
+void WTHRRecord::WTHRSNAM::IsDefault(bool value)
+ {
+ if(value)
+ type = eDefault;
+ else if(IsDefault())
+ type = ePrecip;
+ }
+
+bool WTHRRecord::WTHRSNAM::IsPrecip()
+ {
+ return (type == ePrecip);
+ }
+
+void WTHRRecord::WTHRSNAM::IsPrecip(bool value)
+ {
+ if(value)
+ type = ePrecip;
+ else if(IsPrecip())
+ type = eDefault;
+ }
+
+bool WTHRRecord::WTHRSNAM::IsPrecipitation()
+ {
+ return (type == ePrecip);
+ }
+
+void WTHRRecord::WTHRSNAM::IsPrecipitation(bool value)
+ {
+ if(value)
+ type = ePrecip;
+ else if(IsPrecipitation())
+ type = eDefault;
+ }
+
+bool WTHRRecord::WTHRSNAM::IsWind()
+ {
+ return (type == eWind);
+ }
+
+void WTHRRecord::WTHRSNAM::IsWind(bool value)
+ {
+ if(value)
+ type = eWind;
+ else if(IsWind())
+ type = eDefault;
+ }
+
+bool WTHRRecord::WTHRSNAM::IsThunder()
+ {
+ return (type == eThunder);
+ }
+
+void WTHRRecord::WTHRSNAM::IsThunder(bool value)
+ {
+ if(value)
+ type = eThunder;
+ else if(IsThunder())
+ type = eDefault;
+ }
+
+bool WTHRRecord::WTHRSNAM::IsType(UINT32 Type)
+ {
+ return (type == Type);
+ }
+
+void WTHRRecord::WTHRSNAM::SetType(UINT32 Type)
+ {
+ type = Type;
+ }
+
+bool WTHRRecord::WTHRSNAM::operator ==(const WTHRSNAM &other) const
+ {
+ return (sound == other.sound &&
+ type == other.type);
+ }
+bool WTHRRecord::WTHRSNAM::operator !=(const WTHRSNAM &other) const
+ {
+ return !(*this == other);
+ }
+
WTHRRecord::WTHRRecord(unsigned char *_recData):
FNVRecord(_recData)
{
@@ -51,19 +290,17 @@ WTHRRecord::WTHRRecord(WTHRRecord *srcRecord):
}
EDID = srcRecord->EDID;
- 0IAD = srcRecord->0IAD;
- 1IAD = srcRecord->1IAD;
- 2IAD = srcRecord->2IAD;
- 3IAD = srcRecord->3IAD;
- 4IAD = srcRecord->4IAD;
- 5IAD = srcRecord->5IAD;
+ _0IAD = srcRecord->_0IAD;
+ _1IAD = srcRecord->_1IAD;
+ _2IAD = srcRecord->_2IAD;
+ _3IAD = srcRecord->_3IAD;
+ _4IAD = srcRecord->_4IAD;
+ _5IAD = srcRecord->_5IAD;
DNAM = srcRecord->DNAM;
CNAM = srcRecord->CNAM;
ANAM = srcRecord->ANAM;
BNAM = srcRecord->BNAM;
-
MODL = srcRecord->MODL;
-
LNAM = srcRecord->LNAM;
ONAM = srcRecord->ONAM;
PNAM = srcRecord->PNAM;
@@ -71,7 +308,7 @@ WTHRRecord::WTHRRecord(WTHRRecord *srcRecord):
FNAM = srcRecord->FNAM;
INAM = srcRecord->INAM;
DATA = srcRecord->DATA;
- SNAM = srcRecord->SNAM;
+ Sounds = srcRecord->Sounds;
return;
}
@@ -85,22 +322,25 @@ bool WTHRRecord::VisitFormIDs(FormIDOp &op)
if(!IsLoaded())
return false;
- if(0IAD.IsLoaded())
- op.Accept(0IAD->value);
- if(1IAD.IsLoaded())
- op.Accept(1IAD->value);
- if(2IAD.IsLoaded())
- op.Accept(2IAD->value);
- if(3IAD.IsLoaded())
- op.Accept(3IAD->value);
- if(4IAD.IsLoaded())
- op.Accept(4IAD->value);
- if(5IAD.IsLoaded())
- op.Accept(5IAD->value);
- if(MODL.IsLoaded() && MODL->MODS.IsLoaded())
- op.Accept(MODL->MODS->value);
- //if(SNAM.IsLoaded()) //FILL IN MANUALLY
- // op.Accept(SNAM->value);
+ if(_0IAD.IsLoaded())
+ op.Accept(_0IAD.value);
+ if(_1IAD.IsLoaded())
+ op.Accept(_1IAD.value);
+ if(_2IAD.IsLoaded())
+ op.Accept(_2IAD.value);
+ if(_3IAD.IsLoaded())
+ op.Accept(_3IAD.value);
+ if(_4IAD.IsLoaded())
+ op.Accept(_4IAD.value);
+ if(_5IAD.IsLoaded())
+ op.Accept(_5IAD.value);
+ if(MODL.IsLoaded())
+ {
+ for(UINT32 x = 0; x < MODL->Textures.MODS.size(); x++)
+ op.Accept(MODL->Textures.MODS[x]->texture);
+ }
+ for(UINT32 x = 0; x < Sounds.value.size(); x++)
+ op.Accept(Sounds.value[x]->sound);
return op.Stop();
}
@@ -262,7 +502,7 @@ void WTHRRecord::SetFlagMask(UINT8 Mask)
UINT32 WTHRRecord::GetType()
{
- return 'RHTW';
+ return REV32(WTHR);
}
STRING WTHRRecord::GetStrType()
@@ -292,82 +532,85 @@ SINT32 WTHRRecord::ParseRecord(unsigned char *buffer, const UINT32 &recSize)
}
switch(subType)
{
- case 'DIDE':
+ case REV32(EDID):
EDID.Read(buffer, subSize, curPos);
break;
- case 'DAI0':
- 0IAD.Read(buffer, subSize, curPos);
+ case REV32(_IAD) & 0xFFFFFF00 | 0x00:
+ //Unlike all other sigs, IAD's use 0x00, 0x01, etc instead of the character 0, 1, etc
+ //So this oddity has to be compensated for
+ //The above nonsense gets optimized away, so there's no runtime cost
+ _0IAD.Read(buffer, subSize, curPos);
break;
- case 'DAI1':
- 1IAD.Read(buffer, subSize, curPos);
+ case REV32(_IAD) & 0xFFFFFF00 | 0x01:
+ _1IAD.Read(buffer, subSize, curPos);
break;
- case 'DAI2':
- 2IAD.Read(buffer, subSize, curPos);
+ case REV32(_IAD) & 0xFFFFFF00 | 0x02:
+ _2IAD.Read(buffer, subSize, curPos);
break;
- case 'DAI3':
- 3IAD.Read(buffer, subSize, curPos);
+ case REV32(_IAD) & 0xFFFFFF00 | 0x03:
+ _3IAD.Read(buffer, subSize, curPos);
break;
- case 'DAI4':
- 4IAD.Read(buffer, subSize, curPos);
+ case REV32(_IAD) & 0xFFFFFF00 | 0x04:
+ _4IAD.Read(buffer, subSize, curPos);
break;
- case 'DAI5':
- 5IAD.Read(buffer, subSize, curPos);
+ case REV32(_IAD) & 0xFFFFFF00 | 0x05:
+ _5IAD.Read(buffer, subSize, curPos);
break;
- case 'MAND':
+ case REV32(DNAM):
DNAM.Read(buffer, subSize, curPos);
break;
- case 'MANC':
+ case REV32(CNAM):
CNAM.Read(buffer, subSize, curPos);
break;
- case 'MANA':
+ case REV32(ANAM):
ANAM.Read(buffer, subSize, curPos);
break;
- case 'MANB':
+ case REV32(BNAM):
BNAM.Read(buffer, subSize, curPos);
break;
- case 'LDOM':
+ case REV32(MODL):
MODL.Load();
MODL->MODL.Read(buffer, subSize, curPos);
break;
- case 'BDOM':
+ case REV32(MODB):
MODL.Load();
MODL->MODB.Read(buffer, subSize, curPos);
break;
- case 'TDOM':
+ case REV32(MODT):
MODL.Load();
MODL->MODT.Read(buffer, subSize, curPos);
break;
- case 'SDOM':
+ case REV32(MODS):
MODL.Load();
MODL->Textures.Read(buffer, subSize, curPos);
break;
- case 'DDOM':
+ case REV32(MODD):
MODL.Load();
MODL->MODD.Read(buffer, subSize, curPos);
break;
- case 'MANL':
+ case REV32(LNAM):
LNAM.Read(buffer, subSize, curPos);
break;
- case 'MANO':
+ case REV32(ONAM):
ONAM.Read(buffer, subSize, curPos);
break;
- case 'MANP':
+ case REV32(PNAM):
PNAM.Read(buffer, subSize, curPos);
break;
- case '0MAN':
+ case REV32(NAM0):
NAM0.Read(buffer, subSize, curPos);
break;
- case 'MANF':
+ case REV32(FNAM):
FNAM.Read(buffer, subSize, curPos);
break;
- case 'MANI':
+ case REV32(INAM):
INAM.Read(buffer, subSize, curPos);
break;
- case 'ATAD':
+ case REV32(DATA):
DATA.Read(buffer, subSize, curPos);
break;
- case 'MANS':
- SNAM.Read(buffer, subSize, curPos);
+ case REV32(SNAM):
+ Sounds.Read(buffer, subSize, curPos);
break;
default:
//printf("FileName = %s\n", FileName);
@@ -386,12 +629,12 @@ SINT32 WTHRRecord::Unload()
IsChanged(false);
IsLoaded(false);
EDID.Unload();
- 0IAD.Unload();
- 1IAD.Unload();
- 2IAD.Unload();
- 3IAD.Unload();
- 4IAD.Unload();
- 5IAD.Unload();
+ _0IAD.Unload();
+ _1IAD.Unload();
+ _2IAD.Unload();
+ _3IAD.Unload();
+ _4IAD.Unload();
+ _5IAD.Unload();
DNAM.Unload();
CNAM.Unload();
ANAM.Unload();
@@ -404,26 +647,24 @@ SINT32 WTHRRecord::Unload()
FNAM.Unload();
INAM.Unload();
DATA.Unload();
- SNAM.Unload();
+ Sounds.Unload();
return 1;
}
SINT32 WTHRRecord::WriteRecord(FileWriter &writer)
{
WRITE(EDID);
- WRITE(0IAD);
- WRITE(1IAD);
- WRITE(2IAD);
- WRITE(3IAD);
- WRITE(4IAD);
- WRITE(5IAD);
+ _0IAD.Write(REV32(_IAD) & 0xFFFFFF00 | 0x00, writer);
+ _1IAD.Write(REV32(_IAD) & 0xFFFFFF00 | 0x01, writer);
+ _2IAD.Write(REV32(_IAD) & 0xFFFFFF00 | 0x02, writer);
+ _3IAD.Write(REV32(_IAD) & 0xFFFFFF00 | 0x03, writer);
+ _4IAD.Write(REV32(_IAD) & 0xFFFFFF00 | 0x04, writer);
+ _5IAD.Write(REV32(_IAD) & 0xFFFFFF00 | 0x05, writer);
WRITE(DNAM);
WRITE(CNAM);
WRITE(ANAM);
WRITE(BNAM);
-
MODL.Write(writer);
-
WRITE(LNAM);
WRITE(ONAM);
WRITE(PNAM);
@@ -431,33 +672,32 @@ SINT32 WTHRRecord::WriteRecord(FileWriter &writer)
WRITE(FNAM);
WRITE(INAM);
WRITE(DATA);
- WRITE(SNAM);
-
+ WRITEAS(Sounds, SNAM);
return -1;
}
bool WTHRRecord::operator ==(const WTHRRecord &other) const
{
- return (EDID.equalsi(other.EDID) &&
- 0IAD == other.0IAD &&
- 1IAD == other.1IAD &&
- 2IAD == other.2IAD &&
- 3IAD == other.3IAD &&
- 4IAD == other.4IAD &&
- 5IAD == other.5IAD &&
- DNAM.equalsi(other.DNAM) &&
- CNAM.equalsi(other.CNAM) &&
- ANAM.equalsi(other.ANAM) &&
- BNAM.equalsi(other.BNAM) &&
+ return (_0IAD == other._0IAD &&
+ _1IAD == other._1IAD &&
+ _2IAD == other._2IAD &&
+ _3IAD == other._3IAD &&
+ _4IAD == other._4IAD &&
+ _5IAD == other._5IAD &&
MODL == other.MODL &&
LNAM == other.LNAM &&
ONAM == other.ONAM &&
- PNAM == other.PNAM &&
NAM0 == other.NAM0 &&
- FNAM == other.FNAM &&
- INAM == other.INAM &&
DATA == other.DATA &&
- SNAM == other.SNAM);
+ INAM == other.INAM &&
+ PNAM == other.PNAM &&
+ EDID.equalsi(other.EDID) &&
+ DNAM.equalsi(other.DNAM) &&
+ CNAM.equalsi(other.CNAM) &&
+ ANAM.equalsi(other.ANAM) &&
+ BNAM.equalsi(other.BNAM) &&
+ FNAM == other.FNAM &&
+ Sounds == other.Sounds);
}
bool WTHRRecord::operator !=(const WTHRRecord &other) const
diff --git a/CBash/FalloutNewVegas/Records/WTHRRecord.h b/CBash/FalloutNewVegas/Records/WTHRRecord.h
index 619bf4b..8a23f14 100644
--- a/CBash/FalloutNewVegas/Records/WTHRRecord.h
+++ b/CBash/FalloutNewVegas/Records/WTHRRecord.h
@@ -141,25 +141,25 @@ class WTHRRecord : public FNVRecord //Weather
public:
StringRecord EDID; //Editor ID
- OptSimpleSubRecord 0IAD; //Sunrise Image Space Modifier
- OptSimpleSubRecord 1IAD; //Day Image Space Modifier
- OptSimpleSubRecord 2IAD; //Sunset Image Space Modifier
- OptSimpleSubRecord 3IAD; //Night Image Space Modifier
- OptSimpleSubRecord 4IAD; //Unknown
- OptSimpleSubRecord 5IAD; //Unknown
+ OptSimpleSubRecord _0IAD; //Sunrise Image Space Modifier
+ OptSimpleSubRecord _1IAD; //Day Image Space Modifier
+ OptSimpleSubRecord _2IAD; //Sunset Image Space Modifier
+ OptSimpleSubRecord _3IAD; //Night Image Space Modifier
+ OptSimpleSubRecord _4IAD; //Unknown
+ OptSimpleSubRecord _5IAD; //Unknown
StringRecord DNAM; //Cloud Textures - Layer 0
StringRecord CNAM; //Cloud Textures - Layer 1
StringRecord ANAM; //Cloud Textures - Layer 2
StringRecord BNAM; //Cloud Textures - Layer 3
OptSubRecord MODL; //Model
- RawRecord LNAM; //Unknown
+ ReqSimpleSubRecord LNAM; //Unknown
OptSubRecord ONAM; //Cloud Speeds
RawRecord PNAM; //Unused
ReqSubRecord NAM0; //Colors by Types/Times
- OptSubRecord FNAM; //Fog Distance
+ ReqSubRecord FNAM; //Fog Distance
RawRecord INAM; //Unused
- OptSubRecord DATA; //Data
- std::vector *> Sounds; // Sounds
+ ReqSubRecord DATA; //Data
+ UnorderedSparseArray Sounds; // Sounds
WTHRRecord(unsigned char *_recData=NULL);
WTHRRecord(WTHRRecord *srcRecord);
diff --git a/CBash/Oblivion/Records/API/WTHRRecordAPI.cpp b/CBash/Oblivion/Records/API/WTHRRecordAPI.cpp
index 143c533..2c42653 100644
--- a/CBash/Oblivion/Records/API/WTHRRecordAPI.cpp
+++ b/CBash/Oblivion/Records/API/WTHRRecordAPI.cpp
@@ -2550,7 +2550,6 @@ void WTHRRecord::DeleteField(FIELD_IDENTIFIERS)
case 169: //upperClouds.night.unused1
NAM0.value.upperClouds.night.unused1 = defaultCLR.unused1;
return;
-
case 170: //fogDayNear
FNAM.value.fogDayNear = defaultFNAM.fogDayNear;
return;
@@ -2563,7 +2562,6 @@ void WTHRRecord::DeleteField(FIELD_IDENTIFIERS)
case 173: //fogNightFar
FNAM.value.fogNightFar = defaultFNAM.fogNightFar;
return;
-
case 174: //eyeAdaptSpeed
HNAM.value.eyeAdaptSpeed = defaultHNAM.eyeAdaptSpeed;
return;
@@ -2606,7 +2604,6 @@ void WTHRRecord::DeleteField(FIELD_IDENTIFIERS)
case 187: //treeDimmer
HNAM.value.treeDimmer = defaultHNAM.treeDimmer;
return;
-
case 188: //windSpeed
DATA.value.windSpeed = defaultDATA.windSpeed;
return;
diff --git a/release/CBash.dll b/release/CBash.dll
index c946677..1f90695 100644
Binary files a/release/CBash.dll and b/release/CBash.dll differ
diff --git a/release/FNVTest.py b/release/FNVTest.py
index 97535a1..b5647b4 100644
--- a/release/FNVTest.py
+++ b/release/FNVTest.py
@@ -145,14 +145,14 @@ def TestRegressions():
#### assertKEYM(Current, newMod)
#### assertALCH(Current, newMod)
#### newMod.save()
- assertIDLM(Current, newMod)
- assertNOTE(Current, newMod)
- assertCOBJ(Current, newMod)
- assertPROJ(Current, newMod)
- assertLVLI(Current, newMod)
- ## assertWTHR(Current, newMod)
- ## assertCLMT(Current, newMod)
- ## assertREGN(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)
## assertWRLD(Current, newMod)
diff --git a/release/cint-template.py b/release/cint-template.py
index 7b3777f..dd2ee84 100644
--- a/release/cint-template.py
+++ b/release/cint-template.py
@@ -5428,18 +5428,330 @@ class Entry(ListComponent):
class FnvWTHRRecord(FnvBaseRecord):
_Type = 'WTHR'
+ class WTHRColor(BaseComponent):
+ UINT8_GROUPEDMACRO(riseRed, 0)
+ UINT8_GROUPEDMACRO(riseGreen, 1)
+ UINT8_GROUPEDMACRO(riseBlue, 2)
+ UINT8_ARRAY_GROUPEDMACRO(unused1, 3, 1)
+ UINT8_GROUPEDMACRO(dayRed, 4)
+ UINT8_GROUPEDMACRO(dayGreen, 5)
+ UINT8_GROUPEDMACRO(dayBlue, 6)
+ UINT8_ARRAY_GROUPEDMACRO(unused2, 7, 1)
+ UINT8_GROUPEDMACRO(setRed, 8)
+ UINT8_GROUPEDMACRO(setGreen, 9)
+ UINT8_GROUPEDMACRO(setBlue, 10)
+ UINT8_ARRAY_GROUPEDMACRO(unused3, 11, 1)
+ UINT8_GROUPEDMACRO(nightRed, 12)
+ UINT8_GROUPEDMACRO(nightGreen, 13)
+ UINT8_GROUPEDMACRO(nightBlue, 14)
+ UINT8_ARRAY_GROUPEDMACRO(unused4, 15, 1)
+
+ UINT8_GROUPEDMACRO(noonRed, 16)
+ UINT8_GROUPEDMACRO(noonGreen, 17)
+ UINT8_GROUPEDMACRO(noonBlue, 18)
+ UINT8_ARRAY_GROUPEDMACRO(unused5, 19, 1)
+
+ UINT8_GROUPEDMACRO(midnightRed, 20)
+ UINT8_GROUPEDMACRO(midnightGreen, 21)
+ UINT8_GROUPEDMACRO(midnightBlue, 22)
+ UINT8_ARRAY_GROUPEDMACRO(unused6, 23, 1)
+ exportattrs = copyattrs = ['riseRed', 'riseGreen', 'riseBlue',
+ 'dayRed', 'dayGreen', 'dayBlue',
+ 'setRed', 'setGreen', 'setBlue',
+ 'nightRed', 'nightGreen', 'nightBlue',
+ 'noonRed', 'noonGreen', 'noonBlue',
+ 'midnightRed', 'midnightGreen', 'midnightBlue']
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ class Sound(ListComponent):
+ FORMID_LISTMACRO(sound, 1)
+ UINT32_TYPE_LISTMACRO(type, 2)
+ BasicTypeMACRO(IsDefault, type, 0, IsPrecip)
+ BasicTypeMACRO(IsPrecipitation, type, 1, IsDefault)
+ BasicAliasMACRO(IsPrecip, IsPrecipitation)
+ BasicTypeMACRO(IsWind, type, 2, IsDefault)
+ BasicTypeMACRO(IsThunder, type, 3, IsDefault)
+ exportattrs = copyattrs = ['sound', 'type']
+
+ FORMID_MACRO(sunriseImageSpace, 7)
+ FORMID_MACRO(dayImageSpace, 8)
+ FORMID_MACRO(sunsetImageSpace, 9)
+ FORMID_MACRO(nightImageSpace, 10)
+ FORMID_MACRO(unknown1ImageSpace, 11)
+ FORMID_MACRO(unknown2ImageSpace, 12)
+ ISTRING_MACRO(cloudLayer0Path, 13)
+ ISTRING_MACRO(cloudLayer1Path, 14)
+ ISTRING_MACRO(cloudLayer2Path, 15)
+ ISTRING_MACRO(cloudLayer3Path, 16)
+ ISTRING_MACRO(modPath, 17)
+ FLOAT32_MACRO(modb, 18)
+ UINT8_ARRAY_MACRO(modt_p, 19)
+
+ LIST_MACRO(altTextures, 20, FNVAltTexture)
+ UINT8_FLAG_MACRO(modelFlags, 21)
+ UINT32_MACRO(unknown1, 22)
+ UINT8_MACRO(layer0Speed, 23)
+ UINT8_MACRO(layer1Speed, 24)
+ UINT8_MACRO(layer2Speed, 25)
+ UINT8_MACRO(layer3Speed, 26)
+ UINT8_ARRAY_MACRO(pnam_p, 27)
+ GroupedValuesMACRO(upperSky, 28, WTHRColor)
+ GroupedValuesMACRO(fog, 52, WTHRColor)
+ GroupedValuesMACRO(lowerClouds, 76, WTHRColor)
+ GroupedValuesMACRO(ambient, 100, WTHRColor)
+ GroupedValuesMACRO(sunlight, 124, WTHRColor)
+ GroupedValuesMACRO(sun, 148, WTHRColor)
+ GroupedValuesMACRO(stars, 172, WTHRColor)
+ GroupedValuesMACRO(lowerSky, 196, WTHRColor)
+ GroupedValuesMACRO(horizon, 220, WTHRColor)
+ GroupedValuesMACRO(upperClouds, 244, WTHRColor)
+ FLOAT32_MACRO(fogDayNear, 268)
+ FLOAT32_MACRO(fogDayFar, 269)
+ FLOAT32_MACRO(fogNightNear, 270)
+ FLOAT32_MACRO(fogNightFar, 271)
+ FLOAT32_MACRO(fogDayPower, 272)
+ FLOAT32_MACRO(fogNightPower, 273)
+ UINT8_ARRAY_MACRO(inam_p, 274)
+ UINT8_MACRO(windSpeed, 275)
+ UINT8_MACRO(lowerCloudSpeed, 276)
+ UINT8_MACRO(upperCloudSpeed, 277)
+ UINT8_MACRO(transDelta, 278)
+ UINT8_MACRO(sunGlare, 279)
+ UINT8_MACRO(sunDamage, 280)
+ UINT8_MACRO(rainFadeIn, 281)
+ UINT8_MACRO(rainFadeOut, 282)
+ UINT8_MACRO(boltFadeIn, 283)
+ UINT8_MACRO(boltFadeOut, 284)
+ UINT8_MACRO(boltFrequency, 285)
+ UINT8_TYPE_MACRO(weatherType, 286)
+ UINT8_MACRO(boltRed, 287)
+ UINT8_MACRO(boltGreen, 288)
+ UINT8_MACRO(boltBlue, 289)
+
+ LIST_MACRO(sounds, 290, self.Sound)
+ ##actually flags, but all are exclusive(except unknowns)...so like a Type
+ ##Manual hackery will make the CS think it is multiple types. It isn't known how the game would react.
+ MaskedTypeMACRO(IsNone, weatherType, 0x0F, 0x00, IsPleasant)
+ MaskedTypeMACRO(IsPleasant, weatherType, 0x0F, 0x01, IsNone)
+ MaskedTypeMACRO(IsCloudy, weatherType, 0x0F, 0x02, IsNone)
+ MaskedTypeMACRO(IsRainy, weatherType, 0x0F, 0x04, IsNone)
+ MaskedTypeMACRO(IsSnow, weatherType, 0x0F, 0x08, IsNone)
+ BasicFlagMACRO(IsUnk1, weatherType, 0x40)
+ BasicFlagMACRO(IsUnk2, weatherType, 0x80)
+ copyattrs = FnvBaseRecord.baseattrs + ['sunriseImageSpace', 'dayImageSpace',
+ 'sunsetImageSpace', 'nightImageSpace',
+ 'unknown1ImageSpace', 'unknown2ImageSpace',
+ 'cloudLayer0Path', 'cloudLayer1Path',
+ 'cloudLayer2Path', 'cloudLayer3Path',
+ 'modPath', 'modb', 'modt_p',
+ 'altTextures_list', 'modelFlags',
+ 'unknown1', 'layer0Speed', 'layer1Speed',
+ 'layer2Speed', 'layer3Speed', 'pnam_p',
+ 'upperSky_list', 'fog_list',
+ 'lowerClouds_list', 'ambient_list',
+ 'sunlight_list', 'sun_list', 'stars_list',
+ 'lowerSky_list', 'horizon_list',
+ 'upperClouds_list', 'fogDayNear',
+ 'fogDayFar', 'fogNightNear',
+ 'fogNightFar', 'fogDayPower',
+ 'fogNightPower', 'inam_p', 'windSpeed',
+ 'lowerCloudSpeed', 'upperCloudSpeed',
+ 'transDelta', 'sunGlare', 'sunDamage',
+ 'rainFadeIn', 'rainFadeOut',
+ 'boltFadeIn', 'boltFadeOut',
+ 'boltFrequency', 'weatherType',
+ 'boltRed', 'boltGreen', 'boltBlue',
+ 'sounds_list']
+ exportattrs = FnvBaseRecord.baseattrs + ['sunriseImageSpace', 'dayImageSpace',
+ 'sunsetImageSpace', 'nightImageSpace',
+ 'unknown1ImageSpace', 'unknown2ImageSpace',
+ 'cloudLayer0Path', 'cloudLayer1Path',
+ 'cloudLayer2Path', 'cloudLayer3Path',
+ 'modPath', 'modb',
+ 'altTextures_list', 'modelFlags',
+ 'unknown1', 'layer0Speed', 'layer1Speed',
+ 'layer2Speed', 'layer3Speed',
+ 'upperSky_list', 'fog_list',
+ 'lowerClouds_list', 'ambient_list',
+ 'sunlight_list', 'sun_list', 'stars_list',
+ 'lowerSky_list', 'horizon_list',
+ 'upperClouds_list', 'fogDayNear',
+ 'fogDayFar', 'fogNightNear',
+ 'fogNightFar', 'fogDayPower',
+ 'fogNightPower', 'windSpeed',
+ 'lowerCloudSpeed', 'upperCloudSpeed',
+ 'transDelta', 'sunGlare', 'sunDamage',
+ 'rainFadeIn', 'rainFadeOut',
+ 'boltFadeIn', 'boltFadeOut',
+ 'boltFrequency', 'weatherType',
+ 'boltRed', 'boltGreen', 'boltBlue',
+ 'sounds_list']# 'modt_p', 'pnam_p', 'inam_p',
class FnvCLMTRecord(FnvBaseRecord):
_Type = 'CLMT'
+ class Weather(ListComponent):
+ FORMID_LISTMACRO(weather, 1)
+ SINT32_LISTMACRO(chance, 2)
+ FORMID_LISTMACRO(globalId, 3)
+ copyattrs = ['weather', 'chance', 'globalId']
+
+ LIST_MACRO(weathers, 7, self.Weather)
+ ISTRING_MACRO(sunPath, 8)
+ ISTRING_MACRO(glarePath, 9)
+ ISTRING_MACRO(modPath, 10)
+ FLOAT32_MACRO(modb, 11)
+ UINT8_ARRAY_MACRO(modt_p, 12)
+
+ LIST_MACRO(altTextures, 13, FNVAltTexture)
+ UINT8_FLAG_MACRO(modelFlags, 14)
+ UINT8_MACRO(riseBegin, 15)
+ UINT8_MACRO(riseEnd, 16)
+ UINT8_MACRO(setBegin, 17)
+ UINT8_MACRO(setEnd, 18)
+ UINT8_MACRO(volatility, 19)
+ UINT8_MACRO(phaseLength, 20)
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ BasicFlagMACRO(IsHead, modelFlags, 0x01)
+ BasicFlagMACRO(IsTorso, modelFlags, 0x02)
+ BasicFlagMACRO(IsRightHand, modelFlags, 0x04)
+ BasicFlagMACRO(IsLeftHand, modelFlags, 0x08)
+ copyattrs = FnvBaseRecord.baseattrs + ['weathers_list', 'sunPath',
+ 'glarePath', 'modPath',
+ 'modb', 'modt_p',
+ 'altTextures_list',
+ 'modelFlags', 'riseBegin',
+ 'riseEnd', 'setBegin',
+ 'setEnd', 'volatility',
+ 'phaseLength']
+ exportattrs = FnvBaseRecord.baseattrs + ['weathers_list', 'sunPath',
+ 'glarePath', 'modPath',
+ 'modb',
+ 'altTextures_list',
+ 'modelFlags', 'riseBegin',
+ 'riseEnd', 'setBegin',
+ 'setEnd', 'volatility',
+ 'phaseLength']# 'modt_p',
class FnvREGNRecord(FnvBaseRecord):
_Type = 'REGN'
+ class Area(ListComponent):
+ class Point(ListX2Component):
+ FLOAT32_LISTX2MACRO(posX, 1)
+ FLOAT32_LISTX2MACRO(posY, 2)
+ exportattrs = copyattrs = ['posX', 'posY']
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ FORMID_LISTMACRO(edgeFalloff, 1)
+
+ LIST_LISTMACRO(points, 2, self.Point)
+ exportattrs = copyattrs = ['edgeFalloff', 'points_list']
+
+ class Entry(ListComponent):
+ class Object(ListX2Component):
+ FORMID_LISTX2MACRO(objectId, 1)
+ UINT16_LISTX2MACRO(parentIndex, 2)
+ UINT8_ARRAY_LISTX2MACRO(unused1, 3, 2)
+ FLOAT32_LISTX2MACRO(density, 4)
+ UINT8_LISTX2MACRO(clustering, 5)
+ UINT8_LISTX2MACRO(minSlope, 6)
+ UINT8_LISTX2MACRO(maxSlope, 7)
+ UINT8_FLAG_LISTX2MACRO(flags, 8)
+ UINT16_LISTX2MACRO(radiusWRTParent, 9)
+ UINT16_LISTX2MACRO(radius, 10)
+ UINT8_ARRAY_LISTX2MACRO(unk1, 11, 4)
+ FLOAT32_LISTX2MACRO(maxHeight, 12)
+ FLOAT32_LISTX2MACRO(sink, 13)
+ FLOAT32_LISTX2MACRO(sinkVar, 14)
+ FLOAT32_LISTX2MACRO(sizeVar, 15)
+ UINT16_LISTX2MACRO(angleVarX, 16)
+ UINT16_LISTX2MACRO(angleVarY, 17)
+ UINT16_LISTX2MACRO(angleVarZ, 18)
+ UINT8_ARRAY_LISTX2MACRO(unused2, 19, 1)
+ UINT8_ARRAY_LISTX2MACRO(unk2, 20, 4)
+ BasicFlagMACRO(IsConformToSlope, flags, 0x00000001)
+ BasicFlagMACRO(IsPaintVertices, flags, 0x00000002)
+ BasicFlagMACRO(IsSizeVariance, flags, 0x00000004)
+ BasicFlagMACRO(IsXVariance, flags, 0x00000008)
+ BasicFlagMACRO(IsYVariance, flags, 0x00000010)
+ BasicFlagMACRO(IsZVariance, flags, 0x00000020)
+ BasicFlagMACRO(IsTree, flags, 0x00000040)
+ BasicFlagMACRO(IsHugeRock, flags, 0x00000080)
+ exportattrs = copyattrs = ['objectId', 'parentIndex', 'density', 'clustering',
+ 'minSlope', 'maxSlope', 'flags', 'radiusWRTParent',
+ 'radius', 'unk1', 'maxHeight', 'sink', 'sinkVar',
+ 'sizeVar', 'angleVarX', 'angleVarY', 'angleVarZ',
+ 'unk2']
+
+ class Grass(ListX2Component):
+ FORMID_LISTX2MACRO(grass, 1)
+ UINT8_ARRAY_LISTX2MACRO(unk1, 2, 4)
+ exportattrs = copyattrs = ['grass', 'unk1']
+
+ class Sound(ListX2Component):
+ FORMID_LISTX2MACRO(sound, 1)
+ UINT32_FLAG_LISTX2MACRO(flags, 2)
+ UINT32_LISTX2MACRO(chance, 3)
+ BasicFlagMACRO(IsPleasant, flags, 0x00000001)
+ BasicFlagMACRO(IsCloudy, flags, 0x00000002)
+ BasicFlagMACRO(IsRainy, flags, 0x00000004)
+ BasicFlagMACRO(IsSnowy, flags, 0x00000008)
+ exportattrs = copyattrs = ['sound', 'flags', 'chance']
+
+ class Weather(ListX2Component):
+ FORMID_LISTX2MACRO(weather, 1)
+ UINT32_LISTX2MACRO(chance, 2)
+ FORMID_LISTX2MACRO(globalId, 1)
+ exportattrs = copyattrs = ['weather', 'chance', 'globalId']
+
+ UINT32_TYPE_LISTMACRO(entryType, 1)
+ UINT8_FLAG_LISTMACRO(flags, 2)
+ UINT8_LISTMACRO(priority, 3)
+ UINT8_ARRAY_LISTMACRO(unused1, 4, 4)
+
+ LIST_LISTMACRO(objects, 5, self.Object)
+ STRING_LISTMACRO(mapName, 6)
+ STRING_LISTMACRO(iconPath, 7)
+
+ LIST_LISTMACRO(grasses, 8, self.Grass)
+ UINT32_TYPE_LISTMACRO(musicType, 9)
+ FORMID_LISTMACRO(music, 10)
+ FORMID_LISTMACRO(incidentalMedia, 11)
+ FORMID_ARRAY_LISTMACRO(battleMedias, 12)
+
+ LIST_LISTMACRO(sounds, 13, self.Sound)
+
+ LIST_LISTMACRO(weathers, 14, self.Weather)
+ FORMID_ARRAY_LISTMACRO(imposters, 15)
+
+ BasicFlagMACRO(IsOverride, flags, 0x00000001)
+
+ BasicTypeMACRO(IsObject, entryType, 2, IsWeather)
+ BasicTypeMACRO(IsWeather, entryType, 3, IsObject)
+ BasicTypeMACRO(IsMap, entryType, 4, IsObject)
+ BasicTypeMACRO(IsLand, entryType, 5, IsObject)
+ BasicTypeMACRO(IsGrass, entryType, 6, IsObject)
+ BasicTypeMACRO(IsSound, entryType, 7, IsObject)
+ BasicTypeMACRO(IsImposter, entryType, 8, IsObject)
+ BasicTypeMACRO(IsDefault, musicType, 0, IsPublic)
+ BasicTypeMACRO(IsPublic, musicType, 1, IsDefault)
+ BasicTypeMACRO(IsDungeon, musicType, 2, IsDefault)
+ exportattrs = copyattrs = ['entryType', 'flags', 'priority', 'objects_list',
+ 'mapName', 'iconPath', 'grasses_list', 'musicType',
+ 'music', 'incidentalMedia', 'battleMedias',
+ 'sounds_list', 'weathers_list', 'imposters']
+
+ ISTRING_MACRO(iconPath, 7)
+ ISTRING_MACRO(smallIconPath, 8)
+ UINT8_MACRO(mapRed, 9)
+ UINT8_MACRO(mapGreen, 10)
+ UINT8_MACRO(mapBlue, 11)
+ UINT8_ARRAY_MACRO(unused1, 12, 1)
+ FORMID_MACRO(worldspace, 13)
+
+ LIST_MACRO(areas, 14, self.Area)
+ LIST_MACRO(entries, 15, self.Entry)
+ exportattrs = copyattrs = FnvBaseRecord.baseattrs + ['iconPath', 'smallIconPath',
+ 'mapRed', 'mapGreen', 'mapBlue',
+ 'worldspace', 'areas_list',
+ 'entries_list']
class FnvNAVIRecord(FnvBaseRecord):
_Type = 'NAVI'
diff --git a/release/cint.py b/release/cint.py
index 5fc3de7..4774e43 100644
--- a/release/cint.py
+++ b/release/cint.py
@@ -5885,18 +5885,416 @@ def create_altTexture(self):
class FnvWTHRRecord(FnvBaseRecord):
_Type = 'WTHR'
+ class WTHRColor(BaseComponent):
+ riseRed = CBashGeneric_GROUP(0, c_ubyte)
+ riseGreen = CBashGeneric_GROUP(1, c_ubyte)
+ riseBlue = CBashGeneric_GROUP(2, c_ubyte)
+ unused1 = CBashUINT8ARRAY_GROUP(3, 1)
+ dayRed = CBashGeneric_GROUP(4, c_ubyte)
+ dayGreen = CBashGeneric_GROUP(5, c_ubyte)
+ dayBlue = CBashGeneric_GROUP(6, c_ubyte)
+ unused2 = CBashUINT8ARRAY_GROUP(7, 1)
+ setRed = CBashGeneric_GROUP(8, c_ubyte)
+ setGreen = CBashGeneric_GROUP(9, c_ubyte)
+ setBlue = CBashGeneric_GROUP(10, c_ubyte)
+ unused3 = CBashUINT8ARRAY_GROUP(11, 1)
+ nightRed = CBashGeneric_GROUP(12, c_ubyte)
+ nightGreen = CBashGeneric_GROUP(13, c_ubyte)
+ nightBlue = CBashGeneric_GROUP(14, c_ubyte)
+ unused4 = CBashUINT8ARRAY_GROUP(15, 1)
+
+ noonRed = CBashGeneric_GROUP(16, c_ubyte)
+ noonGreen = CBashGeneric_GROUP(17, c_ubyte)
+ noonBlue = CBashGeneric_GROUP(18, c_ubyte)
+ unused5 = CBashUINT8ARRAY_GROUP(19, 1)
+
+ midnightRed = CBashGeneric_GROUP(20, c_ubyte)
+ midnightGreen = CBashGeneric_GROUP(21, c_ubyte)
+ midnightBlue = CBashGeneric_GROUP(22, c_ubyte)
+ unused6 = CBashUINT8ARRAY_GROUP(23, 1)
+ exportattrs = copyattrs = ['riseRed', 'riseGreen', 'riseBlue',
+ 'dayRed', 'dayGreen', 'dayBlue',
+ 'setRed', 'setGreen', 'setBlue',
+ 'nightRed', 'nightGreen', 'nightBlue',
+ 'noonRed', 'noonGreen', 'noonBlue',
+ 'midnightRed', 'midnightGreen', 'midnightBlue']
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ class Sound(ListComponent):
+ sound = CBashFORMID_LIST(1)
+ type = CBashGeneric_LIST(2, c_ulong)
+ IsDefault = CBashBasicType('type', 0, 'IsPrecip')
+ IsPrecipitation = CBashBasicType('type', 1, 'IsDefault')
+ IsPrecip = CBashAlias('IsPrecipitation')
+ IsWind = CBashBasicType('type', 2, 'IsDefault')
+ IsThunder = CBashBasicType('type', 3, 'IsDefault')
+ exportattrs = copyattrs = ['sound', 'type']
+
+ sunriseImageSpace = CBashFORMID(7)
+ dayImageSpace = CBashFORMID(8)
+ sunsetImageSpace = CBashFORMID(9)
+ nightImageSpace = CBashFORMID(10)
+ unknown1ImageSpace = CBashFORMID(11)
+ unknown2ImageSpace = CBashFORMID(12)
+ cloudLayer0Path = CBashISTRING(13)
+ cloudLayer1Path = CBashISTRING(14)
+ cloudLayer2Path = CBashISTRING(15)
+ cloudLayer3Path = CBashISTRING(16)
+ modPath = CBashISTRING(17)
+ modb = CBashFLOAT32(18)
+ modt_p = CBashUINT8ARRAY(19)
+
+ def create_altTexture(self):
+ length = CBash.GetFieldAttribute(self._CollectionID, self._ModID, self._RecordID, 20, 0, 0, 0, 0, 0, 0, 1)
+ CBash.SetField(self._CollectionID, self._ModID, self._RecordID, 20, 0, 0, 0, 0, 0, 0, 0, c_ulong(length + 1))
+ return FNVAltTexture(self._CollectionID, self._ModID, self._RecordID, 20, length)
+ altTextures = CBashLIST(20, FNVAltTexture)
+ altTextures_list = CBashLIST(20, FNVAltTexture, True)
+
+ modelFlags = CBashGeneric(21, c_ubyte)
+ unknown1 = CBashGeneric(22, c_ulong)
+ layer0Speed = CBashGeneric(23, c_ubyte)
+ layer1Speed = CBashGeneric(24, c_ubyte)
+ layer2Speed = CBashGeneric(25, c_ubyte)
+ layer3Speed = CBashGeneric(26, c_ubyte)
+ pnam_p = CBashUINT8ARRAY(27)
+ upperSky = CBashGrouped(28, WTHRColor)
+ upperSky_list = CBashGrouped(28, WTHRColor, True)
+
+ fog = CBashGrouped(52, WTHRColor)
+ fog_list = CBashGrouped(52, WTHRColor, True)
+
+ lowerClouds = CBashGrouped(76, WTHRColor)
+ lowerClouds_list = CBashGrouped(76, WTHRColor, True)
+
+ ambient = CBashGrouped(100, WTHRColor)
+ ambient_list = CBashGrouped(100, WTHRColor, True)
+
+ sunlight = CBashGrouped(124, WTHRColor)
+ sunlight_list = CBashGrouped(124, WTHRColor, True)
+
+ sun = CBashGrouped(148, WTHRColor)
+ sun_list = CBashGrouped(148, WTHRColor, True)
+
+ stars = CBashGrouped(172, WTHRColor)
+ stars_list = CBashGrouped(172, WTHRColor, True)
+
+ lowerSky = CBashGrouped(196, WTHRColor)
+ lowerSky_list = CBashGrouped(196, WTHRColor, True)
+
+ horizon = CBashGrouped(220, WTHRColor)
+ horizon_list = CBashGrouped(220, WTHRColor, True)
+
+ upperClouds = CBashGrouped(244, WTHRColor)
+ upperClouds_list = CBashGrouped(244, WTHRColor, True)
+
+ fogDayNear = CBashFLOAT32(268)
+ fogDayFar = CBashFLOAT32(269)
+ fogNightNear = CBashFLOAT32(270)
+ fogNightFar = CBashFLOAT32(271)
+ fogDayPower = CBashFLOAT32(272)
+ fogNightPower = CBashFLOAT32(273)
+ inam_p = CBashUINT8ARRAY(274)
+ windSpeed = CBashGeneric(275, c_ubyte)
+ lowerCloudSpeed = CBashGeneric(276, c_ubyte)
+ upperCloudSpeed = CBashGeneric(277, c_ubyte)
+ transDelta = CBashGeneric(278, c_ubyte)
+ sunGlare = CBashGeneric(279, c_ubyte)
+ sunDamage = CBashGeneric(280, c_ubyte)
+ rainFadeIn = CBashGeneric(281, c_ubyte)
+ rainFadeOut = CBashGeneric(282, c_ubyte)
+ boltFadeIn = CBashGeneric(283, c_ubyte)
+ boltFadeOut = CBashGeneric(284, c_ubyte)
+ boltFrequency = CBashGeneric(285, c_ubyte)
+ weatherType = CBashGeneric(286, c_ubyte)
+ boltRed = CBashGeneric(287, c_ubyte)
+ boltGreen = CBashGeneric(288, c_ubyte)
+ boltBlue = CBashGeneric(289, c_ubyte)
+
+ def create_sound(self):
+ length = CBash.GetFieldAttribute(self._CollectionID, self._ModID, self._RecordID, 290, 0, 0, 0, 0, 0, 0, 1)
+ CBash.SetField(self._CollectionID, self._ModID, self._RecordID, 290, 0, 0, 0, 0, 0, 0, 0, c_ulong(length + 1))
+ return self.Sound(self._CollectionID, self._ModID, self._RecordID, 290, length)
+ sounds = CBashLIST(290, Sound)
+ sounds_list = CBashLIST(290, Sound, True)
+
+ ##actually flags, but all are exclusive(except unknowns)...so like a Type
+ ##Manual hackery will make the CS think it is multiple types. It isn't known how the game would react.
+ IsNone = CBashMaskedType('weatherType', 0x0F, 0x00, 'IsPleasant')
+ IsPleasant = CBashMaskedType('weatherType', 0x0F, 0x01, 'IsNone')
+ IsCloudy = CBashMaskedType('weatherType', 0x0F, 0x02, 'IsNone')
+ IsRainy = CBashMaskedType('weatherType', 0x0F, 0x04, 'IsNone')
+ IsSnow = CBashMaskedType('weatherType', 0x0F, 0x08, 'IsNone')
+ IsUnk1 = CBashBasicFlag('weatherType', 0x40)
+ IsUnk2 = CBashBasicFlag('weatherType', 0x80)
+ copyattrs = FnvBaseRecord.baseattrs + ['sunriseImageSpace', 'dayImageSpace',
+ 'sunsetImageSpace', 'nightImageSpace',
+ 'unknown1ImageSpace', 'unknown2ImageSpace',
+ 'cloudLayer0Path', 'cloudLayer1Path',
+ 'cloudLayer2Path', 'cloudLayer3Path',
+ 'modPath', 'modb', 'modt_p',
+ 'altTextures_list', 'modelFlags',
+ 'unknown1', 'layer0Speed', 'layer1Speed',
+ 'layer2Speed', 'layer3Speed', 'pnam_p',
+ 'upperSky_list', 'fog_list',
+ 'lowerClouds_list', 'ambient_list',
+ 'sunlight_list', 'sun_list', 'stars_list',
+ 'lowerSky_list', 'horizon_list',
+ 'upperClouds_list', 'fogDayNear',
+ 'fogDayFar', 'fogNightNear',
+ 'fogNightFar', 'fogDayPower',
+ 'fogNightPower', 'inam_p', 'windSpeed',
+ 'lowerCloudSpeed', 'upperCloudSpeed',
+ 'transDelta', 'sunGlare', 'sunDamage',
+ 'rainFadeIn', 'rainFadeOut',
+ 'boltFadeIn', 'boltFadeOut',
+ 'boltFrequency', 'weatherType',
+ 'boltRed', 'boltGreen', 'boltBlue',
+ 'sounds_list']
+ exportattrs = FnvBaseRecord.baseattrs + ['sunriseImageSpace', 'dayImageSpace',
+ 'sunsetImageSpace', 'nightImageSpace',
+ 'unknown1ImageSpace', 'unknown2ImageSpace',
+ 'cloudLayer0Path', 'cloudLayer1Path',
+ 'cloudLayer2Path', 'cloudLayer3Path',
+ 'modPath', 'modb',
+ 'altTextures_list', 'modelFlags',
+ 'unknown1', 'layer0Speed', 'layer1Speed',
+ 'layer2Speed', 'layer3Speed',
+ 'upperSky_list', 'fog_list',
+ 'lowerClouds_list', 'ambient_list',
+ 'sunlight_list', 'sun_list', 'stars_list',
+ 'lowerSky_list', 'horizon_list',
+ 'upperClouds_list', 'fogDayNear',
+ 'fogDayFar', 'fogNightNear',
+ 'fogNightFar', 'fogDayPower',
+ 'fogNightPower', 'windSpeed',
+ 'lowerCloudSpeed', 'upperCloudSpeed',
+ 'transDelta', 'sunGlare', 'sunDamage',
+ 'rainFadeIn', 'rainFadeOut',
+ 'boltFadeIn', 'boltFadeOut',
+ 'boltFrequency', 'weatherType',
+ 'boltRed', 'boltGreen', 'boltBlue',
+ 'sounds_list']# 'modt_p', 'pnam_p', 'inam_p',
class FnvCLMTRecord(FnvBaseRecord):
_Type = 'CLMT'
+ class Weather(ListComponent):
+ weather = CBashFORMID_LIST(1)
+ chance = CBashGeneric_LIST(2, c_long)
+ globalId = CBashFORMID_LIST(3)
+ copyattrs = ['weather', 'chance', 'globalId']
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ def create_weather(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.Weather(self._CollectionID, self._ModID, self._RecordID, 7, length)
+ weathers = CBashLIST(7, Weather)
+ weathers_list = CBashLIST(7, Weather, True)
+
+ sunPath = CBashISTRING(8)
+ glarePath = CBashISTRING(9)
+ modPath = CBashISTRING(10)
+ modb = CBashFLOAT32(11)
+ modt_p = CBashUINT8ARRAY(12)
+
+ def create_altTexture(self):
+ length = CBash.GetFieldAttribute(self._CollectionID, self._ModID, self._RecordID, 13, 0, 0, 0, 0, 0, 0, 1)
+ CBash.SetField(self._CollectionID, self._ModID, self._RecordID, 13, 0, 0, 0, 0, 0, 0, 0, c_ulong(length + 1))
+ return FNVAltTexture(self._CollectionID, self._ModID, self._RecordID, 13, length)
+ altTextures = CBashLIST(13, FNVAltTexture)
+ altTextures_list = CBashLIST(13, FNVAltTexture, True)
+
+ modelFlags = CBashGeneric(14, c_ubyte)
+ riseBegin = CBashGeneric(15, c_ubyte)
+ riseEnd = CBashGeneric(16, c_ubyte)
+ setBegin = CBashGeneric(17, c_ubyte)
+ setEnd = CBashGeneric(18, c_ubyte)
+ volatility = CBashGeneric(19, c_ubyte)
+ phaseLength = CBashGeneric(20, c_ubyte)
+
+ IsHead = CBashBasicFlag('modelFlags', 0x01)
+ IsTorso = CBashBasicFlag('modelFlags', 0x02)
+ IsRightHand = CBashBasicFlag('modelFlags', 0x04)
+ IsLeftHand = CBashBasicFlag('modelFlags', 0x08)
+ copyattrs = FnvBaseRecord.baseattrs + ['weathers_list', 'sunPath',
+ 'glarePath', 'modPath',
+ 'modb', 'modt_p',
+ 'altTextures_list',
+ 'modelFlags', 'riseBegin',
+ 'riseEnd', 'setBegin',
+ 'setEnd', 'volatility',
+ 'phaseLength']
+ exportattrs = FnvBaseRecord.baseattrs + ['weathers_list', 'sunPath',
+ 'glarePath', 'modPath',
+ 'modb',
+ 'altTextures_list',
+ 'modelFlags', 'riseBegin',
+ 'riseEnd', 'setBegin',
+ 'setEnd', 'volatility',
+ 'phaseLength']# 'modt_p',
class FnvREGNRecord(FnvBaseRecord):
_Type = 'REGN'
+ class Area(ListComponent):
+ class Point(ListX2Component):
+ posX = CBashFLOAT32_LISTX2(1)
+ posY = CBashFLOAT32_LISTX2(2)
+ exportattrs = copyattrs = ['posX', 'posY']
- exportattrs = copyattrs = FnvBaseRecord.baseattrs + []
+ edgeFalloff = CBashFORMID_LIST(1)
+
+ def create_point(self):
+ length = CBash.GetFieldAttribute(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 2, 0, 0, 0, 0, 1)
+ CBash.SetField(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 2, 0, 0, 0, 0, 0, c_ulong(length + 1))
+ return self.Point(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 2, length)
+ points = CBashLIST_LIST(2, Point)
+ points_list = CBashLIST_LIST(2, Point, True)
+
+ exportattrs = copyattrs = ['edgeFalloff', 'points_list']
+
+ class Entry(ListComponent):
+ class Object(ListX2Component):
+ objectId = CBashFORMID_LISTX2(1)
+ parentIndex = CBashGeneric_LISTX2(2, c_ushort)
+ unused1 = CBashUINT8ARRAY_LISTX2(3, 2)
+ density = CBashFLOAT32_LISTX2(4)
+ clustering = CBashGeneric_LISTX2(5, c_ubyte)
+ minSlope = CBashGeneric_LISTX2(6, c_ubyte)
+ maxSlope = CBashGeneric_LISTX2(7, c_ubyte)
+ flags = CBashGeneric_LISTX2(8, c_ubyte)
+ radiusWRTParent = CBashGeneric_LISTX2(9, c_ushort)
+ radius = CBashGeneric_LISTX2(10, c_ushort)
+ unk1 = CBashUINT8ARRAY_LISTX2(11, 4)
+ maxHeight = CBashFLOAT32_LISTX2(12)
+ sink = CBashFLOAT32_LISTX2(13)
+ sinkVar = CBashFLOAT32_LISTX2(14)
+ sizeVar = CBashFLOAT32_LISTX2(15)
+ angleVarX = CBashGeneric_LISTX2(16, c_ushort)
+ angleVarY = CBashGeneric_LISTX2(17, c_ushort)
+ angleVarZ = CBashGeneric_LISTX2(18, c_ushort)
+ unused2 = CBashUINT8ARRAY_LISTX2(19, 1)
+ unk2 = CBashUINT8ARRAY_LISTX2(20, 4)
+ IsConformToSlope = CBashBasicFlag('flags', 0x00000001)
+ IsPaintVertices = CBashBasicFlag('flags', 0x00000002)
+ IsSizeVariance = CBashBasicFlag('flags', 0x00000004)
+ IsXVariance = CBashBasicFlag('flags', 0x00000008)
+ IsYVariance = CBashBasicFlag('flags', 0x00000010)
+ IsZVariance = CBashBasicFlag('flags', 0x00000020)
+ IsTree = CBashBasicFlag('flags', 0x00000040)
+ IsHugeRock = CBashBasicFlag('flags', 0x00000080)
+ exportattrs = copyattrs = ['objectId', 'parentIndex', 'density', 'clustering',
+ 'minSlope', 'maxSlope', 'flags', 'radiusWRTParent',
+ 'radius', 'unk1', 'maxHeight', 'sink', 'sinkVar',
+ 'sizeVar', 'angleVarX', 'angleVarY', 'angleVarZ',
+ 'unk2']
+
+ class Grass(ListX2Component):
+ grass = CBashFORMID_LISTX2(1)
+ unk1 = CBashUINT8ARRAY_LISTX2(2, 4)
+ exportattrs = copyattrs = ['grass', 'unk1']
+
+ class Sound(ListX2Component):
+ sound = CBashFORMID_LISTX2(1)
+ flags = CBashGeneric_LISTX2(2, c_ulong)
+ chance = CBashGeneric_LISTX2(3, c_ulong)
+ IsPleasant = CBashBasicFlag('flags', 0x00000001)
+ IsCloudy = CBashBasicFlag('flags', 0x00000002)
+ IsRainy = CBashBasicFlag('flags', 0x00000004)
+ IsSnowy = CBashBasicFlag('flags', 0x00000008)
+ exportattrs = copyattrs = ['sound', 'flags', 'chance']
+
+ class Weather(ListX2Component):
+ weather = CBashFORMID_LISTX2(1)
+ chance = CBashGeneric_LISTX2(2, c_ulong)
+ globalId = CBashFORMID_LISTX2(1)
+ exportattrs = copyattrs = ['weather', 'chance', 'globalId']
+
+ entryType = CBashGeneric_LIST(1, c_ulong)
+ flags = CBashGeneric_LIST(2, c_ubyte)
+ priority = CBashGeneric_LIST(3, c_ubyte)
+ unused1 = CBashUINT8ARRAY_LIST(4, 4)
+
+ def create_object(self):
+ length = CBash.GetFieldAttribute(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 5, 0, 0, 0, 0, 1)
+ CBash.SetField(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 5, 0, 0, 0, 0, 0, c_ulong(length + 1))
+ return self.Object(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 5, length)
+ objects = CBashLIST_LIST(5, Object)
+ objects_list = CBashLIST_LIST(5, Object, True)
+
+ mapName = CBashSTRING_LIST(6)
+ iconPath = CBashSTRING_LIST(7)
+
+ def create_grass(self):
+ length = CBash.GetFieldAttribute(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 8, 0, 0, 0, 0, 1)
+ CBash.SetField(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 8, 0, 0, 0, 0, 0, c_ulong(length + 1))
+ return self.Grass(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 8, length)
+ grasses = CBashLIST_LIST(8, Grass)
+ grasses_list = CBashLIST_LIST(8, Grass, True)
+
+ musicType = CBashGeneric_LIST(9, c_ulong)
+ music = CBashFORMID_LIST(10)
+ incidentalMedia = CBashFORMID_LIST(11)
+ battleMedias = CBashFORMIDARRAY_LIST(12)
+
+ def create_sound(self):
+ length = CBash.GetFieldAttribute(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 13, 0, 0, 0, 0, 1)
+ CBash.SetField(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 13, 0, 0, 0, 0, 0, c_ulong(length + 1))
+ return self.Sound(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 13, length)
+ sounds = CBashLIST_LIST(13, Sound)
+ sounds_list = CBashLIST_LIST(13, Sound, True)
+
+
+ def create_weather(self):
+ length = CBash.GetFieldAttribute(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 14, 0, 0, 0, 0, 1)
+ CBash.SetField(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 14, 0, 0, 0, 0, 0, c_ulong(length + 1))
+ return self.Weather(self._CollectionID, self._ModID, self._RecordID, self._FieldID, self._ListIndex, 14, length)
+ weathers = CBashLIST_LIST(14, Weather)
+ weathers_list = CBashLIST_LIST(14, Weather, True)
+
+ imposters = CBashFORMIDARRAY_LIST(15)
+
+ IsOverride = CBashBasicFlag('flags', 0x00000001)
+
+ IsObject = CBashBasicType('entryType', 2, 'IsWeather')
+ IsWeather = CBashBasicType('entryType', 3, 'IsObject')
+ IsMap = CBashBasicType('entryType', 4, 'IsObject')
+ IsLand = CBashBasicType('entryType', 5, 'IsObject')
+ IsGrass = CBashBasicType('entryType', 6, 'IsObject')
+ IsSound = CBashBasicType('entryType', 7, 'IsObject')
+ IsImposter = CBashBasicType('entryType', 8, 'IsObject')
+ IsDefault = CBashBasicType('musicType', 0, 'IsPublic')
+ IsPublic = CBashBasicType('musicType', 1, 'IsDefault')
+ IsDungeon = CBashBasicType('musicType', 2, 'IsDefault')
+ exportattrs = copyattrs = ['entryType', 'flags', 'priority', 'objects_list',
+ 'mapName', 'iconPath', 'grasses_list', 'musicType',
+ 'music', 'incidentalMedia', 'battleMedias',
+ 'sounds_list', 'weathers_list', 'imposters']
+
+ iconPath = CBashISTRING(7)
+ smallIconPath = CBashISTRING(8)
+ mapRed = CBashGeneric(9, c_ubyte)
+ mapGreen = CBashGeneric(10, c_ubyte)
+ mapBlue = CBashGeneric(11, c_ubyte)
+ unused1 = CBashUINT8ARRAY(12, 1)
+ worldspace = CBashFORMID(13)
+
+ def create_area(self):
+ length = CBash.GetFieldAttribute(self._CollectionID, self._ModID, self._RecordID, 14, 0, 0, 0, 0, 0, 0, 1)
+ CBash.SetField(self._CollectionID, self._ModID, self._RecordID, 14, 0, 0, 0, 0, 0, 0, 0, c_ulong(length + 1))
+ return self.Area(self._CollectionID, self._ModID, self._RecordID, 14, length)
+ areas = CBashLIST(14, Area)
+ areas_list = CBashLIST(14, Area, True)
+
+ def create_entry(self):
+ length = CBash.GetFieldAttribute(self._CollectionID, self._ModID, self._RecordID, 15, 0, 0, 0, 0, 0, 0, 1)
+ CBash.SetField(self._CollectionID, self._ModID, self._RecordID, 15, 0, 0, 0, 0, 0, 0, 0, c_ulong(length + 1))
+ return self.Entry(self._CollectionID, self._ModID, self._RecordID, 15, length)
+ entries = CBashLIST(15, Entry)
+ entries_list = CBashLIST(15, Entry, True)
+
+ exportattrs = copyattrs = FnvBaseRecord.baseattrs + ['iconPath', 'smallIconPath',
+ 'mapRed', 'mapGreen', 'mapBlue',
+ 'worldspace', 'areas_list',
+ 'entries_list']
class FnvNAVIRecord(FnvBaseRecord):
_Type = 'NAVI'