diff --git a/src/ObjWriting/Dumping/StructuredDataDef/StructuredDataDefDumper.cpp b/src/ObjWriting/Dumping/StructuredDataDef/StructuredDataDefDumper.cpp index 3b055b09..f618f3b6 100644 --- a/src/ObjWriting/Dumping/StructuredDataDef/StructuredDataDefDumper.cpp +++ b/src/ObjWriting/Dumping/StructuredDataDef/StructuredDataDefDumper.cpp @@ -53,6 +53,12 @@ void StructuredDataDefDumper::EndVersion() m_flags.m_empty_line_before_block = false; } +void StructuredDataDefDumper::WriteLineComment(const std::string& comment) const +{ + Indent(); + m_stream << "// " << comment << "\n"; +} + void StructuredDataDefDumper::BeginEnum(const std::string& enumName, const size_t enumEntryCount, size_t enumReservedEntryCount) { assert(m_flags.m_in_version); @@ -214,6 +220,12 @@ void StructuredDataDefDumper::EndProperty() ss << "[" << arraySpecifierName << "]"; } + ss << " /* Offset: " << m_current_property_offset / 8; + + if (m_current_property_offset % 8 > 0) + ss << " + " << m_current_property_offset % 8 << "bit"; + + ss << " */ "; m_struct_properties.emplace_back(ss.str(), m_current_property_offset); m_block = Block::BLOCK_STRUCT; diff --git a/src/ObjWriting/Dumping/StructuredDataDef/StructuredDataDefDumper.h b/src/ObjWriting/Dumping/StructuredDataDef/StructuredDataDefDumper.h index dc76bffd..4ff9134a 100644 --- a/src/ObjWriting/Dumping/StructuredDataDef/StructuredDataDefDumper.h +++ b/src/ObjWriting/Dumping/StructuredDataDef/StructuredDataDefDumper.h @@ -45,6 +45,8 @@ public: void BeginVersion(int version); void EndVersion(); + void WriteLineComment(const std::string& comment) const; + void BeginEnum(const std::string& enumName, size_t enumEntryCount, size_t enumReservedEntryCount); void EndEnum(); void WriteEnumEntry(const std::string& entryName, size_t entryValue); diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStructuredDataDefSet.cpp b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStructuredDataDefSet.cpp index b85a2501..5f235904 100644 --- a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStructuredDataDefSet.cpp +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperStructuredDataDefSet.cpp @@ -7,6 +7,7 @@ #include "Dumping/StructuredDataDef/StructuredDataDefDumper.h" using namespace IW4; +using namespace std::string_literals; bool AssetDumperStructuredDataDefSet::GetNextHeadValue(const StructuredDataDef* def, const bool isFirstStruct, const std::vector& structsIncludedInOrder, size_t& nextHeadValue) { @@ -134,7 +135,7 @@ void AssetDumperStructuredDataDefSet::DumpEnum(StructuredDataDefDumper& dumper, void AssetDumperStructuredDataDefSet::DumpProperty(StructuredDataDefDumper& dumper, const StructuredDataStructProperty& property, const StructuredDataDef* def, const int rootStructIndex) { - dumper.BeginProperty(property.name, property.offset); + dumper.BeginProperty(property.name, property.type.type == DATA_BOOL ? property.offset : property.offset * 8); auto currentType = property.type; auto stopTypeIteration = false; @@ -258,6 +259,8 @@ void AssetDumperStructuredDataDefSet::DumpStruct(StructuredDataDefDumper& dumper structName = ss.str(); } + dumper.WriteLineComment("BitOffset: "s + std::to_string(_struct->bitOffset)); + dumper.WriteLineComment("Size: "s + std::to_string(_struct->size)); dumper.BeginStruct(structName, static_cast(_struct->propertyCount)); for (auto i = 0; i < _struct->propertyCount; i++) @@ -284,6 +287,8 @@ void AssetDumperStructuredDataDefSet::DumpAsset(AssetDumpingContext& context, XA { const auto& def = set->defs[defIndex]; + dumper.WriteLineComment("Size: "s + std::to_string(def.size)); + dumper.WriteLineComment("Checksum: "s + std::to_string(def.formatChecksum)); dumper.BeginVersion(def.version); for (auto enumIndex = 0; enumIndex < def.enumCount; enumIndex++)