diff --git a/docs/SupportedAssetTypes.md b/docs/SupportedAssetTypes.md index fcd3ec1a..5a110ce2 100644 --- a/docs/SupportedAssetTypes.md +++ b/docs/SupportedAssetTypes.md @@ -174,7 +174,7 @@ using `Linker`): | ComWorld | ❌ | ❌ | | | GameWorldSp | ❌ | ❌ | | | GameWorldMp | ❌ | ❌ | | -| MapEnts | ❌ | ❌ | | +| MapEnts | ✅ | ❌ | | | GfxWorld | ❌ | ❌ | | | GfxLightDef | ✅ | ✅ | | | Font_s | ✅ | ✅ | | diff --git a/src/ObjWriting/Game/IW3/Maps/MapEntsDumperIW3.cpp b/src/ObjWriting/Game/IW3/Maps/MapEntsDumperIW3.cpp index 3f9dc67d..930f8415 100644 --- a/src/ObjWriting/Game/IW3/Maps/MapEntsDumperIW3.cpp +++ b/src/ObjWriting/Game/IW3/Maps/MapEntsDumperIW3.cpp @@ -6,7 +6,7 @@ using namespace IW3; namespace map_ents { - void DumperIW3::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + void DumperIW3::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* mapEnts = asset.Asset(); const auto assetFile = context.OpenAssetFile(GetEntsFileNameForAssetName(asset.m_name)); @@ -15,6 +15,6 @@ namespace map_ents return; auto& stream = *assetFile; - stream.write(mapEnts->entityString, mapEnts->numEntityChars); + stream.write(mapEnts->entityString, std::max(mapEnts->numEntityChars - 1, 0)); } } // namespace map_ents diff --git a/src/ObjWriting/Game/T4/Maps/MapEntsDumperT4.cpp b/src/ObjWriting/Game/T4/Maps/MapEntsDumperT4.cpp index 9db55d9e..d4e760d1 100644 --- a/src/ObjWriting/Game/T4/Maps/MapEntsDumperT4.cpp +++ b/src/ObjWriting/Game/T4/Maps/MapEntsDumperT4.cpp @@ -6,7 +6,7 @@ using namespace T4; namespace map_ents { - void DumperT4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + void DumperT4::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) { const auto* mapEnts = asset.Asset(); const auto assetFile = context.OpenAssetFile(GetEntsFileNameForAssetName(asset.m_name)); diff --git a/src/ObjWriting/Game/T5/Maps/MapEntsDumperT5.cpp b/src/ObjWriting/Game/T5/Maps/MapEntsDumperT5.cpp new file mode 100644 index 00000000..db84b9d3 --- /dev/null +++ b/src/ObjWriting/Game/T5/Maps/MapEntsDumperT5.cpp @@ -0,0 +1,20 @@ +#include "MapEntsDumperT5.h" + +#include "Maps/MapEntsCommon.h" + +using namespace T5; + +namespace map_ents +{ + void DumperT5::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + { + const auto* mapEnts = asset.Asset(); + const auto assetFile = context.OpenAssetFile(GetEntsFileNameForAssetName(asset.m_name)); + + if (!assetFile) + return; + + auto& stream = *assetFile; + stream.write(mapEnts->entityString, std::max(mapEnts->numEntityChars - 1, 0)); + } +} // namespace map_ents diff --git a/src/ObjWriting/Game/T5/Maps/MapEntsDumperT5.h b/src/ObjWriting/Game/T5/Maps/MapEntsDumperT5.h new file mode 100644 index 00000000..2af21d5e --- /dev/null +++ b/src/ObjWriting/Game/T5/Maps/MapEntsDumperT5.h @@ -0,0 +1,13 @@ +#pragma once + +#include "Dumping/AbstractAssetDumper.h" +#include "Game/T5/T5.h" + +namespace map_ents +{ + class DumperT5 final : public AbstractAssetDumper + { + protected: + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + }; +} // namespace map_ents diff --git a/src/ObjWriting/Game/T5/ObjWriterT5.cpp b/src/ObjWriting/Game/T5/ObjWriterT5.cpp index 0623274f..d791f91c 100644 --- a/src/ObjWriting/Game/T5/ObjWriterT5.cpp +++ b/src/ObjWriting/Game/T5/ObjWriterT5.cpp @@ -8,6 +8,7 @@ #include "Game/T5/XModel/XModelDumperT5.h" #include "LightDef/LightDefDumperT5.h" #include "Localize/LocalizeDumperT5.h" +#include "Maps/MapEntsDumperT5.h" #include "PhysPreset/PhysPresetInfoStringDumperT5.h" #include "RawFile/RawFileDumperT5.h" #include "StringTable/StringTableDumperT5.h" @@ -37,7 +38,7 @@ void ObjWriter::RegisterAssetDumpers(AssetDumpingContext& context) // REGISTER_DUMPER(AssetDumperComWorld, m_com_world) // REGISTER_DUMPER(AssetDumperGameWorldSp, m_game_world_sp) // REGISTER_DUMPER(AssetDumperGameWorldMp, m_game_world_mp) - // REGISTER_DUMPER(AssetDumperMapEnts, m_map_ents) + RegisterAssetDumper(std::make_unique()); // REGISTER_DUMPER(AssetDumperGfxWorld, m_gfx_world) RegisterAssetDumper(std::make_unique()); RegisterAssetDumper(std::make_unique()); diff --git a/src/ObjWriting/Game/T6/Maps/MapEntsDumperT6.cpp b/src/ObjWriting/Game/T6/Maps/MapEntsDumperT6.cpp index 67978522..aebc69a4 100644 --- a/src/ObjWriting/Game/T6/Maps/MapEntsDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Maps/MapEntsDumperT6.cpp @@ -15,6 +15,6 @@ namespace map_ents return; auto& stream = *assetFile; - stream.write(mapEnts->entityString, mapEnts->numEntityChars - 1); + stream.write(mapEnts->entityString, std::max(mapEnts->numEntityChars - 1, 0)); } } // namespace map_ents