diff --git a/docs/SupportedAssetTypes.md b/docs/SupportedAssetTypes.md index 25d4120f..a9c9e375 100644 --- a/docs/SupportedAssetTypes.md +++ b/docs/SupportedAssetTypes.md @@ -177,7 +177,7 @@ The following section specify which assets are supported to be dumped to disk (u | ComWorld | ❌ | ❌ | | | GameWorldSp | ❌ | ❌ | | | GameWorldMp | ❌ | ❌ | | -| MapEnts | ❌ | ❌ | | +| MapEnts | ✅ | ❌ | | | GfxWorld | ❌ | ❌ | | | GfxLightDef | ❌ | ❌ | | | Font_s | ❌ | ❌ | | diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperMapEnts.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperMapEnts.cpp new file mode 100644 index 00000000..cd4a8165 --- /dev/null +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperMapEnts.cpp @@ -0,0 +1,23 @@ +#include "AssetDumperMapEnts.h" + +#include + +using namespace T6; + +bool AssetDumperMapEnts::ShouldDump(XAssetInfo* asset) +{ + return true; +} + +void AssetDumperMapEnts::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) +{ + const auto* mapEnts = asset->Asset(); + + const auto mapEntsFile = context.OpenAssetFile(std::format("{}.ents", mapEnts->name)); + + if (!mapEntsFile) + return; + + auto& stream = *mapEntsFile; + stream.write(mapEnts->entityString, mapEnts->numEntityChars - 1); +} diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperMapEnts.h b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperMapEnts.h new file mode 100644 index 00000000..98b0301a --- /dev/null +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperMapEnts.h @@ -0,0 +1,14 @@ +#pragma once + +#include "Dumping/AbstractAssetDumper.h" +#include "Game/T6/T6.h" + +namespace T6 +{ + class AssetDumperMapEnts final : public AbstractAssetDumper + { + protected: + bool ShouldDump(XAssetInfo* asset) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) override; + }; +} // namespace T6 diff --git a/src/ObjWriting/Game/T6/ObjWriterT6.cpp b/src/ObjWriting/Game/T6/ObjWriterT6.cpp index 815ee519..88df25d8 100644 --- a/src/ObjWriting/Game/T6/ObjWriterT6.cpp +++ b/src/ObjWriting/Game/T6/ObjWriterT6.cpp @@ -4,6 +4,7 @@ #include "AssetDumpers/AssetDumperGfxImage.h" #include "AssetDumpers/AssetDumperLeaderboardDef.h" #include "AssetDumpers/AssetDumperLocalizeEntry.h" +#include "AssetDumpers/AssetDumperMapEnts.h" #include "AssetDumpers/AssetDumperMaterial.h" #include "AssetDumpers/AssetDumperPhysConstraints.h" #include "AssetDumpers/AssetDumperPhysPreset.h" @@ -53,7 +54,7 @@ bool ObjWriter::DumpZone(AssetDumpingContext& context) const // DUMP_ASSET_POOL(AssetDumperComWorld, m_com_world, ASSET_TYPE_COMWORLD) // DUMP_ASSET_POOL(AssetDumperGameWorldSp, m_game_world_sp, ASSET_TYPE_GAMEWORLD_SP) // DUMP_ASSET_POOL(AssetDumperGameWorldMp, m_game_world_mp, ASSET_TYPE_GAMEWORLD_MP) - // DUMP_ASSET_POOL(AssetDumperMapEnts, m_map_ents, ASSET_TYPE_MAP_ENTS) + DUMP_ASSET_POOL(AssetDumperMapEnts, m_map_ents, ASSET_TYPE_MAP_ENTS) // DUMP_ASSET_POOL(AssetDumperGfxWorld, m_gfx_world, ASSET_TYPE_GFXWORLD) // DUMP_ASSET_POOL(AssetDumperGfxLightDef, m_gfx_light_def, ASSET_TYPE_LIGHT_DEF) // DUMP_ASSET_POOL(AssetDumperFont, m_font, ASSET_TYPE_FONT)