From f235798cf6ca22747cfba22ed5485cc43911fe87 Mon Sep 17 00:00:00 2001 From: Simon Ickler Date: Mon, 7 Apr 2025 12:05:03 +0200 Subject: [PATCH] Added MapEnts dumping for T6 --- .../T6/AssetDumpers/AssetDumperMapEnts.cpp | 27 +++++++++++++++++++ .../Game/T6/AssetDumpers/AssetDumperMapEnts.h | 14 ++++++++++ src/ObjWriting/Game/T6/ObjWriterT6.cpp | 3 ++- 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 src/ObjWriting/Game/T6/AssetDumpers/AssetDumperMapEnts.cpp create mode 100644 src/ObjWriting/Game/T6/AssetDumpers/AssetDumperMapEnts.h diff --git a/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperMapEnts.cpp b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperMapEnts.cpp new file mode 100644 index 00000000..7c35ede4 --- /dev/null +++ b/src/ObjWriting/Game/T6/AssetDumpers/AssetDumperMapEnts.cpp @@ -0,0 +1,27 @@ +#include "AssetDumperMapEnts.h" + +#include +#include + +using namespace T6; + +bool AssetDumperMapEnts::ShouldDump(XAssetInfo* asset) +{ + return true; +} + +void AssetDumperMapEnts::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) +{ + const auto* mapEnts = asset->Asset(); + + std::filesystem::path mapEntsPath(mapEnts->name); + mapEntsPath.replace_extension("map"); + + const auto mapEntsFile = context.OpenAssetFile(std::format("maps/{}", mapEntsPath.filename().string())); + + if (!mapEntsFile) + return; + + auto& stream = *mapEntsFile; + stream.write(mapEnts->entityString, mapEnts->numEntityChars); +} 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..a5c2b0f4 100644 --- a/src/ObjWriting/Game/T6/ObjWriterT6.cpp +++ b/src/ObjWriting/Game/T6/ObjWriterT6.cpp @@ -12,6 +12,7 @@ #include "AssetDumpers/AssetDumperScriptParseTree.h" #include "AssetDumpers/AssetDumperSlug.h" #include "AssetDumpers/AssetDumperSndBank.h" +#include "AssetDumpers/AssetDumperMapEnts.h" #include "AssetDumpers/AssetDumperSndDriverGlobals.h" #include "AssetDumpers/AssetDumperStringTable.h" #include "AssetDumpers/AssetDumperTechniqueSet.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)