From 010ac3ad3e20aeba7a78769a6ff3d920b10fe138 Mon Sep 17 00:00:00 2001 From: Paging Red Date: Thu, 23 Apr 2026 17:27:34 -0400 Subject: [PATCH] Add IW3 PhysPreset dump logic (#744) * Copied template from font. * Create PhysPreset writer from Font dumper template. * Completely refactor to match previous implementation. * Remove files from previous implementation. * Fix PhysPresetFields. * Add missing fields and correct order. * Add static infinity check as builtin does not work. * Wasn't clang formatted. * Remove unused 'perSurfaceSndAlias' field. * Removed unsupported vals (tracer & vehicle) and un-needed vals (material). * Make order match struct and mark 'tempDefaultToCylinder' as QBOOLEAN. * Make order match struct and clamp vals for 'mass' and 'tempDefaultToCylinder'. * Remove un-needed includes and add limits for float max. * Remove clamping of mass. * Use float max to determine if friction is infinite. * Clang format. * chore: formatting * chore: do not use classes for obj constants --------- Co-authored-by: njohnson Co-authored-by: Jan Laupetin --- src/Common/Game/IW3/IW3_Assets.h | 14 ++ src/ObjCommon/Game/IW3/ObjConstantsIW3.h | 10 ++ .../Game/IW3/PhysPreset/PhysPresetFields.h | 19 +++ src/ObjCommon/Game/IW4/ObjConstantsIW4.h | 24 ++-- src/ObjCommon/Game/IW5/ObjConstantsIW5.h | 22 ++-- src/ObjCommon/Game/T6/ObjConstantsT6.h | 38 +++--- .../Game/IW4/Material/CompilerMaterialIW4.cpp | 2 +- .../IW4/PhysPreset/GdtLoaderPhysPresetIW4.cpp | 2 +- .../IW4/PhysPreset/RawLoaderPhysPresetIW4.cpp | 2 +- .../Game/IW4/Weapon/GdtLoaderWeaponIW4.cpp | 2 +- .../Game/IW4/Weapon/RawLoaderWeaponIW4.cpp | 2 +- .../Game/IW5/Weapon/GdtLoaderWeaponIW5.cpp | 2 +- .../Game/IW5/Weapon/RawLoaderWeaponIW5.cpp | 2 +- .../GdtLoaderPhysConstraintsT6.cpp | 2 +- .../RawLoaderPhysConstraintsT6.cpp | 2 +- .../T6/PhysPreset/GdtLoaderPhysPresetT6.cpp | 2 +- .../T6/PhysPreset/RawLoaderPhysPresetT6.cpp | 2 +- .../Game/T6/Tracer/GdtLoaderTracerT6.cpp | 2 +- .../Game/T6/Tracer/RawLoaderTracerT6.cpp | 2 +- .../Game/T6/Vehicle/GdtLoaderVehicleT6.cpp | 2 +- .../Game/T6/Vehicle/RawLoaderVehicleT6.cpp | 2 +- .../Game/T6/Weapon/AttachmentGdtLoaderT6.cpp | 2 +- .../Game/T6/Weapon/AttachmentRawLoaderT6.cpp | 2 +- .../T6/Weapon/AttachmentUniqueGdtLoaderT6.cpp | 2 +- .../T6/Weapon/AttachmentUniqueRawLoaderT6.cpp | 2 +- .../Game/T6/Weapon/WeaponGdtLoaderT6.cpp | 2 +- .../Game/T6/Weapon/WeaponRawLoaderT6.cpp | 2 +- .../Game/T6/ZBarrier/GdtLoaderZBarrierT6.cpp | 2 +- .../Game/T6/ZBarrier/RawLoaderZBarrierT6.cpp | 2 +- .../InfoStringFromStructConverter.cpp | 123 ++++++++++++++++++ .../InfoStringFromStructConverter.h | 24 ++++ src/ObjWriting/Game/IW3/ObjWriterIW3.cpp | 3 +- .../PhysPresetInfoStringDumperIW3.cpp | 104 +++++++++++++++ .../PhysPresetInfoStringDumperIW3.h | 13 ++ .../Material/MaterialDecompilingDumperIW4.cpp | 2 +- .../PhysPresetInfoStringDumperIW4.cpp | 6 +- .../Game/IW4/Tracer/TracerDumperIW4.cpp | 6 +- .../Game/IW4/Vehicle/VehicleDumperIW4.cpp | 6 +- .../Game/IW4/Weapon/WeaponDumperIW4.cpp | 6 +- .../Game/IW5/Weapon/WeaponDumperIW5.cpp | 6 +- .../PhysConstraintsInfoStringDumperT6.cpp | 6 +- .../PhysPresetInfoStringDumperT6.cpp | 6 +- .../Game/T6/Tracer/TracerDumperT6.cpp | 6 +- .../Game/T6/Vehicle/VehicleDumperT6.cpp | 6 +- .../Game/T6/Weapon/AttachmentDumperT6.cpp | 6 +- .../T6/Weapon/AttachmentUniqueDumperT6.cpp | 6 +- .../Game/T6/Weapon/WeaponDumperT6.cpp | 6 +- .../Game/T6/ZBarrier/ZBarrierDumperT6.cpp | 6 +- 48 files changed, 405 insertions(+), 115 deletions(-) create mode 100644 src/ObjCommon/Game/IW3/ObjConstantsIW3.h create mode 100644 src/ObjCommon/Game/IW3/PhysPreset/PhysPresetFields.h create mode 100644 src/ObjWriting/Game/IW3/PhysPreset/PhysPresetInfoStringDumperIW3.cpp create mode 100644 src/ObjWriting/Game/IW3/PhysPreset/PhysPresetInfoStringDumperIW3.h diff --git a/src/Common/Game/IW3/IW3_Assets.h b/src/Common/Game/IW3/IW3_Assets.h index d654aecb..2208f241 100644 --- a/src/Common/Game/IW3/IW3_Assets.h +++ b/src/Common/Game/IW3/IW3_Assets.h @@ -165,6 +165,20 @@ namespace IW3 bool tempDefaultToCylinder; }; + struct PhysPresetInfo + { + float mass; + float bounce; + float friction; + int isFrictionInfinity; + float bulletForceScale; + float explosiveForceScale; + const char* sndAliasPrefix; + float piecesSpreadFraction; + float piecesUpwardVelocity; + int tempDefaultToCylinder; + }; + union XAnimIndices { char* _1; diff --git a/src/ObjCommon/Game/IW3/ObjConstantsIW3.h b/src/ObjCommon/Game/IW3/ObjConstantsIW3.h new file mode 100644 index 00000000..049a0fd9 --- /dev/null +++ b/src/ObjCommon/Game/IW3/ObjConstantsIW3.h @@ -0,0 +1,10 @@ +#pragma once + +namespace IW3 +{ + static constexpr auto INFO_STRING_PREFIX_PHYS_PRESET = "PHYSIC"; + static constexpr auto INFO_STRING_PREFIX_WEAPON = "WEAPONFILE"; + + static constexpr auto GDF_FILENAME_PHYS_PRESET = "physpreset.gdf"; + static constexpr auto GDF_FILENAME_WEAPON = "weapon.gdf"; +} // namespace IW3 diff --git a/src/ObjCommon/Game/IW3/PhysPreset/PhysPresetFields.h b/src/ObjCommon/Game/IW3/PhysPreset/PhysPresetFields.h new file mode 100644 index 00000000..8fc5f874 --- /dev/null +++ b/src/ObjCommon/Game/IW3/PhysPreset/PhysPresetFields.h @@ -0,0 +1,19 @@ +#pragma once + +#include "Game/IW3/IW3.h" + +namespace IW3 +{ + inline cspField_t phys_preset_fields[]{ + {"mass", offsetof(PhysPresetInfo, mass), CSPFT_FLOAT }, + {"bounce", offsetof(PhysPresetInfo, bounce), CSPFT_FLOAT }, + {"friction", offsetof(PhysPresetInfo, friction), CSPFT_FLOAT }, + {"isFrictionInfinity", offsetof(PhysPresetInfo, isFrictionInfinity), CSPFT_QBOOLEAN}, + {"bulletForceScale", offsetof(PhysPresetInfo, bulletForceScale), CSPFT_FLOAT }, + {"explosiveForceScale", offsetof(PhysPresetInfo, explosiveForceScale), CSPFT_FLOAT }, + {"sndAliasPrefix", offsetof(PhysPresetInfo, sndAliasPrefix), CSPFT_STRING }, + {"piecesSpreadFraction", offsetof(PhysPresetInfo, piecesSpreadFraction), CSPFT_FLOAT }, + {"piecesUpwardVelocity", offsetof(PhysPresetInfo, piecesUpwardVelocity), CSPFT_FLOAT }, + {"tempDefaultToCylinder", offsetof(PhysPresetInfo, tempDefaultToCylinder), CSPFT_QBOOLEAN}, + }; +} diff --git a/src/ObjCommon/Game/IW4/ObjConstantsIW4.h b/src/ObjCommon/Game/IW4/ObjConstantsIW4.h index 5819d7d0..7b73521f 100644 --- a/src/ObjCommon/Game/IW4/ObjConstantsIW4.h +++ b/src/ObjCommon/Game/IW4/ObjConstantsIW4.h @@ -2,20 +2,14 @@ namespace IW4 { - class ObjConstants - { - ObjConstants() = default; + static constexpr auto INFO_STRING_PREFIX_PHYS_PRESET = "PHYSIC"; + static constexpr auto INFO_STRING_PREFIX_TRACER = "TRACER"; + static constexpr auto INFO_STRING_PREFIX_VEHICLE = "VEHICLEFILE"; + static constexpr auto INFO_STRING_PREFIX_WEAPON = "WEAPONFILE"; - public: - static constexpr const char* INFO_STRING_PREFIX_PHYS_PRESET = "PHYSIC"; - static constexpr const char* INFO_STRING_PREFIX_TRACER = "TRACER"; - static constexpr const char* INFO_STRING_PREFIX_VEHICLE = "VEHICLEFILE"; - static constexpr const char* INFO_STRING_PREFIX_WEAPON = "WEAPONFILE"; - - static constexpr const char* GDF_FILENAME_MATERIAL = "material.gdf"; - static constexpr const char* GDF_FILENAME_PHYS_PRESET = "physpreset.gdf"; - static constexpr const char* GDF_FILENAME_TRACER = "tracer.gdf"; - static constexpr const char* GDF_FILENAME_VEHICLE = "vehicle.gdf"; - static constexpr const char* GDF_FILENAME_WEAPON = "weapon.gdf"; - }; + static constexpr auto GDF_FILENAME_MATERIAL = "material.gdf"; + static constexpr auto GDF_FILENAME_PHYS_PRESET = "physpreset.gdf"; + static constexpr auto GDF_FILENAME_TRACER = "tracer.gdf"; + static constexpr auto GDF_FILENAME_VEHICLE = "vehicle.gdf"; + static constexpr auto GDF_FILENAME_WEAPON = "weapon.gdf"; } // namespace IW4 diff --git a/src/ObjCommon/Game/IW5/ObjConstantsIW5.h b/src/ObjCommon/Game/IW5/ObjConstantsIW5.h index d71421bd..c14575ab 100644 --- a/src/ObjCommon/Game/IW5/ObjConstantsIW5.h +++ b/src/ObjCommon/Game/IW5/ObjConstantsIW5.h @@ -2,19 +2,13 @@ namespace IW5 { - class ObjConstants - { - ObjConstants() = default; + static constexpr auto INFO_STRING_PREFIX_PHYS_PRESET = "PHYSIC"; + static constexpr auto INFO_STRING_PREFIX_TRACER = "TRACER"; + static constexpr auto INFO_STRING_PREFIX_VEHICLE = "VEHICLEFILE"; + static constexpr auto INFO_STRING_PREFIX_WEAPON = "WEAPONFILE"; - public: - static constexpr const char* INFO_STRING_PREFIX_PHYS_PRESET = "PHYSIC"; - static constexpr const char* INFO_STRING_PREFIX_TRACER = "TRACER"; - static constexpr const char* INFO_STRING_PREFIX_VEHICLE = "VEHICLEFILE"; - static constexpr const char* INFO_STRING_PREFIX_WEAPON = "WEAPONFILE"; - - static constexpr const char* GDF_FILENAME_PHYS_PRESET = "physpreset.gdf"; - static constexpr const char* GDF_FILENAME_TRACER = "tracer.gdf"; - static constexpr const char* GDF_FILENAME_VEHICLE = "vehicle.gdf"; - static constexpr const char* GDF_FILENAME_WEAPON = "weapon.gdf"; - }; + static constexpr auto GDF_FILENAME_PHYS_PRESET = "physpreset.gdf"; + static constexpr auto GDF_FILENAME_TRACER = "tracer.gdf"; + static constexpr auto GDF_FILENAME_VEHICLE = "vehicle.gdf"; + static constexpr auto GDF_FILENAME_WEAPON = "weapon.gdf"; } // namespace IW5 diff --git a/src/ObjCommon/Game/T6/ObjConstantsT6.h b/src/ObjCommon/Game/T6/ObjConstantsT6.h index 73f1cad3..0c94ec00 100644 --- a/src/ObjCommon/Game/T6/ObjConstantsT6.h +++ b/src/ObjCommon/Game/T6/ObjConstantsT6.h @@ -2,27 +2,21 @@ namespace T6 { - class ObjConstants - { - ObjConstants() = default; + static constexpr auto INFO_STRING_PREFIX_PHYS_CONSTRAINTS = "PHYSCONSTRAINTS"; + static constexpr auto INFO_STRING_PREFIX_PHYS_PRESET = "PHYSIC"; + static constexpr auto INFO_STRING_PREFIX_TRACER = "TRACER"; + static constexpr auto INFO_STRING_PREFIX_VEHICLE = "VEHICLEFILE"; + static constexpr auto INFO_STRING_PREFIX_WEAPON = "WEAPONFILE"; + static constexpr auto INFO_STRING_PREFIX_WEAPON_ATTACHMENT = "ATTACHMENTFILE"; + static constexpr auto INFO_STRING_PREFIX_WEAPON_ATTACHMENT_UNIQUE = "ATTACHMENTUNIQUEFILE"; + static constexpr auto INFO_STRING_PREFIX_ZBARRIER = "ZBARRIER"; - public: - static constexpr const char* INFO_STRING_PREFIX_PHYS_CONSTRAINTS = "PHYSCONSTRAINTS"; - static constexpr const char* INFO_STRING_PREFIX_PHYS_PRESET = "PHYSIC"; - static constexpr const char* INFO_STRING_PREFIX_TRACER = "TRACER"; - static constexpr const char* INFO_STRING_PREFIX_VEHICLE = "VEHICLEFILE"; - static constexpr const char* INFO_STRING_PREFIX_WEAPON = "WEAPONFILE"; - static constexpr const char* INFO_STRING_PREFIX_WEAPON_ATTACHMENT = "ATTACHMENTFILE"; - static constexpr const char* INFO_STRING_PREFIX_WEAPON_ATTACHMENT_UNIQUE = "ATTACHMENTUNIQUEFILE"; - static constexpr const char* INFO_STRING_PREFIX_ZBARRIER = "ZBARRIER"; - - static constexpr const char* GDF_FILENAME_PHYS_CONSTRAINTS = "physconstraints.gdf"; - static constexpr const char* GDF_FILENAME_PHYS_PRESET = "physpreset.gdf"; - static constexpr const char* GDF_FILENAME_TRACER = "tracer.gdf"; - static constexpr const char* GDF_FILENAME_VEHICLE = "vehicle.gdf"; - static constexpr const char* GDF_FILENAME_WEAPON = "weapon.gdf"; - static constexpr const char* GDF_FILENAME_WEAPON_ATTACHMENT = "attachment.gdf"; - static constexpr const char* GDF_FILENAME_WEAPON_ATTACHMENT_UNIQUE = "attachmentunique.gdf"; - static constexpr const char* GDF_FILENAME_ZBARRIER = "zbarrier.gdf"; - }; + static constexpr auto GDF_FILENAME_PHYS_CONSTRAINTS = "physconstraints.gdf"; + static constexpr auto GDF_FILENAME_PHYS_PRESET = "physpreset.gdf"; + static constexpr auto GDF_FILENAME_TRACER = "tracer.gdf"; + static constexpr auto GDF_FILENAME_VEHICLE = "vehicle.gdf"; + static constexpr auto GDF_FILENAME_WEAPON = "weapon.gdf"; + static constexpr auto GDF_FILENAME_WEAPON_ATTACHMENT = "attachment.gdf"; + static constexpr auto GDF_FILENAME_WEAPON_ATTACHMENT_UNIQUE = "attachmentunique.gdf"; + static constexpr auto GDF_FILENAME_ZBARRIER = "zbarrier.gdf"; } // namespace T6 diff --git a/src/ObjCompiling/Game/IW4/Material/CompilerMaterialIW4.cpp b/src/ObjCompiling/Game/IW4/Material/CompilerMaterialIW4.cpp index d2e20bc0..16b164d9 100644 --- a/src/ObjCompiling/Game/IW4/Material/CompilerMaterialIW4.cpp +++ b/src/ObjCompiling/Game/IW4/Material/CompilerMaterialIW4.cpp @@ -1342,7 +1342,7 @@ namespace { return AssetCreationResult::NoAction(); /* - const auto* entry = m_gdt.GetGdtEntryByGdfAndName(ObjConstants::GDF_FILENAME_MATERIAL, assetName); + const auto* entry = m_gdt.GetGdtEntryByGdfAndName(GDF_FILENAME_MATERIAL, assetName); if (!entry) return AssetCreationResult::NoAction(); diff --git a/src/ObjLoading/Game/IW4/PhysPreset/GdtLoaderPhysPresetIW4.cpp b/src/ObjLoading/Game/IW4/PhysPreset/GdtLoaderPhysPresetIW4.cpp index cc5a0525..5aefe7f0 100644 --- a/src/ObjLoading/Game/IW4/PhysPreset/GdtLoaderPhysPresetIW4.cpp +++ b/src/ObjLoading/Game/IW4/PhysPreset/GdtLoaderPhysPresetIW4.cpp @@ -24,7 +24,7 @@ namespace AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override { - const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(ObjConstants::GDF_FILENAME_PHYS_PRESET, assetName); + const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(GDF_FILENAME_PHYS_PRESET, assetName); if (gdtEntry == nullptr) return AssetCreationResult::NoAction(); diff --git a/src/ObjLoading/Game/IW4/PhysPreset/RawLoaderPhysPresetIW4.cpp b/src/ObjLoading/Game/IW4/PhysPreset/RawLoaderPhysPresetIW4.cpp index b9745054..a3a12436 100644 --- a/src/ObjLoading/Game/IW4/PhysPreset/RawLoaderPhysPresetIW4.cpp +++ b/src/ObjLoading/Game/IW4/PhysPreset/RawLoaderPhysPresetIW4.cpp @@ -31,7 +31,7 @@ namespace return AssetCreationResult::NoAction(); InfoString infoString; - if (!infoString.FromStream(ObjConstants::INFO_STRING_PREFIX_PHYS_PRESET, *file.m_stream)) + if (!infoString.FromStream(INFO_STRING_PREFIX_PHYS_PRESET, *file.m_stream)) { con::error("Could not parse as info string file: \"{}\"", fileName); return AssetCreationResult::Failure(); diff --git a/src/ObjLoading/Game/IW4/Weapon/GdtLoaderWeaponIW4.cpp b/src/ObjLoading/Game/IW4/Weapon/GdtLoaderWeaponIW4.cpp index b8fbf7bf..3b8516c1 100644 --- a/src/ObjLoading/Game/IW4/Weapon/GdtLoaderWeaponIW4.cpp +++ b/src/ObjLoading/Game/IW4/Weapon/GdtLoaderWeaponIW4.cpp @@ -25,7 +25,7 @@ namespace AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override { - const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(ObjConstants::GDF_FILENAME_WEAPON, assetName); + const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(GDF_FILENAME_WEAPON, assetName); if (gdtEntry == nullptr) return AssetCreationResult::NoAction(); diff --git a/src/ObjLoading/Game/IW4/Weapon/RawLoaderWeaponIW4.cpp b/src/ObjLoading/Game/IW4/Weapon/RawLoaderWeaponIW4.cpp index a2382743..1528c412 100644 --- a/src/ObjLoading/Game/IW4/Weapon/RawLoaderWeaponIW4.cpp +++ b/src/ObjLoading/Game/IW4/Weapon/RawLoaderWeaponIW4.cpp @@ -32,7 +32,7 @@ namespace return AssetCreationResult::NoAction(); InfoString infoString; - if (!infoString.FromStream(ObjConstants::INFO_STRING_PREFIX_WEAPON, *file.m_stream)) + if (!infoString.FromStream(INFO_STRING_PREFIX_WEAPON, *file.m_stream)) { con::error("Could not parse as info string file: \"{}\"", fileName); return AssetCreationResult::Failure(); diff --git a/src/ObjLoading/Game/IW5/Weapon/GdtLoaderWeaponIW5.cpp b/src/ObjLoading/Game/IW5/Weapon/GdtLoaderWeaponIW5.cpp index a9902318..12afa472 100644 --- a/src/ObjLoading/Game/IW5/Weapon/GdtLoaderWeaponIW5.cpp +++ b/src/ObjLoading/Game/IW5/Weapon/GdtLoaderWeaponIW5.cpp @@ -25,7 +25,7 @@ namespace AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override { - const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(ObjConstants::GDF_FILENAME_WEAPON, assetName); + const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(GDF_FILENAME_WEAPON, assetName); if (gdtEntry == nullptr) return AssetCreationResult::NoAction(); diff --git a/src/ObjLoading/Game/IW5/Weapon/RawLoaderWeaponIW5.cpp b/src/ObjLoading/Game/IW5/Weapon/RawLoaderWeaponIW5.cpp index c2a7c16a..97f7d217 100644 --- a/src/ObjLoading/Game/IW5/Weapon/RawLoaderWeaponIW5.cpp +++ b/src/ObjLoading/Game/IW5/Weapon/RawLoaderWeaponIW5.cpp @@ -33,7 +33,7 @@ namespace return AssetCreationResult::NoAction(); InfoString infoString; - if (!infoString.FromStream(ObjConstants::INFO_STRING_PREFIX_WEAPON, *file.m_stream)) + if (!infoString.FromStream(INFO_STRING_PREFIX_WEAPON, *file.m_stream)) { con::error("Could not parse as info string file: \"{}\"", fileName); return AssetCreationResult::Failure(); diff --git a/src/ObjLoading/Game/T6/PhysConstraints/GdtLoaderPhysConstraintsT6.cpp b/src/ObjLoading/Game/T6/PhysConstraints/GdtLoaderPhysConstraintsT6.cpp index f6aa1df0..99476d00 100644 --- a/src/ObjLoading/Game/T6/PhysConstraints/GdtLoaderPhysConstraintsT6.cpp +++ b/src/ObjLoading/Game/T6/PhysConstraints/GdtLoaderPhysConstraintsT6.cpp @@ -25,7 +25,7 @@ namespace AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override { - const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(ObjConstants::GDF_FILENAME_WEAPON, assetName); + const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(GDF_FILENAME_WEAPON, assetName); if (gdtEntry == nullptr) return AssetCreationResult::NoAction(); diff --git a/src/ObjLoading/Game/T6/PhysConstraints/RawLoaderPhysConstraintsT6.cpp b/src/ObjLoading/Game/T6/PhysConstraints/RawLoaderPhysConstraintsT6.cpp index f26a8f45..dfdcea35 100644 --- a/src/ObjLoading/Game/T6/PhysConstraints/RawLoaderPhysConstraintsT6.cpp +++ b/src/ObjLoading/Game/T6/PhysConstraints/RawLoaderPhysConstraintsT6.cpp @@ -32,7 +32,7 @@ namespace return AssetCreationResult::NoAction(); InfoString infoString; - if (!infoString.FromStream(ObjConstants::INFO_STRING_PREFIX_PHYS_CONSTRAINTS, *file.m_stream)) + if (!infoString.FromStream(INFO_STRING_PREFIX_PHYS_CONSTRAINTS, *file.m_stream)) { con::error("Could not parse as info string file: \"{}\"", fileName); return AssetCreationResult::Failure(); diff --git a/src/ObjLoading/Game/T6/PhysPreset/GdtLoaderPhysPresetT6.cpp b/src/ObjLoading/Game/T6/PhysPreset/GdtLoaderPhysPresetT6.cpp index c8e6493e..6deb7bb3 100644 --- a/src/ObjLoading/Game/T6/PhysPreset/GdtLoaderPhysPresetT6.cpp +++ b/src/ObjLoading/Game/T6/PhysPreset/GdtLoaderPhysPresetT6.cpp @@ -25,7 +25,7 @@ namespace AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override { - const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(ObjConstants::GDF_FILENAME_PHYS_PRESET, assetName); + const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(GDF_FILENAME_PHYS_PRESET, assetName); if (gdtEntry == nullptr) return AssetCreationResult::NoAction(); diff --git a/src/ObjLoading/Game/T6/PhysPreset/RawLoaderPhysPresetT6.cpp b/src/ObjLoading/Game/T6/PhysPreset/RawLoaderPhysPresetT6.cpp index bfd2e12c..3fc14854 100644 --- a/src/ObjLoading/Game/T6/PhysPreset/RawLoaderPhysPresetT6.cpp +++ b/src/ObjLoading/Game/T6/PhysPreset/RawLoaderPhysPresetT6.cpp @@ -32,7 +32,7 @@ namespace return AssetCreationResult::NoAction(); InfoString infoString; - if (!infoString.FromStream(ObjConstants::INFO_STRING_PREFIX_PHYS_PRESET, *file.m_stream)) + if (!infoString.FromStream(INFO_STRING_PREFIX_PHYS_PRESET, *file.m_stream)) { con::error("Could not parse as info string file: \"{}\"", fileName); return AssetCreationResult::Failure(); diff --git a/src/ObjLoading/Game/T6/Tracer/GdtLoaderTracerT6.cpp b/src/ObjLoading/Game/T6/Tracer/GdtLoaderTracerT6.cpp index fa4ba6a4..f8182ea5 100644 --- a/src/ObjLoading/Game/T6/Tracer/GdtLoaderTracerT6.cpp +++ b/src/ObjLoading/Game/T6/Tracer/GdtLoaderTracerT6.cpp @@ -25,7 +25,7 @@ namespace AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override { - const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(ObjConstants::GDF_FILENAME_TRACER, assetName); + const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(GDF_FILENAME_TRACER, assetName); if (gdtEntry == nullptr) return AssetCreationResult::NoAction(); diff --git a/src/ObjLoading/Game/T6/Tracer/RawLoaderTracerT6.cpp b/src/ObjLoading/Game/T6/Tracer/RawLoaderTracerT6.cpp index 7de94228..f453a1ab 100644 --- a/src/ObjLoading/Game/T6/Tracer/RawLoaderTracerT6.cpp +++ b/src/ObjLoading/Game/T6/Tracer/RawLoaderTracerT6.cpp @@ -32,7 +32,7 @@ namespace return AssetCreationResult::NoAction(); InfoString infoString; - if (!infoString.FromStream(ObjConstants::INFO_STRING_PREFIX_TRACER, *file.m_stream)) + if (!infoString.FromStream(INFO_STRING_PREFIX_TRACER, *file.m_stream)) { con::error("Could not parse as info string file: \"{}\"", fileName); return AssetCreationResult::Failure(); diff --git a/src/ObjLoading/Game/T6/Vehicle/GdtLoaderVehicleT6.cpp b/src/ObjLoading/Game/T6/Vehicle/GdtLoaderVehicleT6.cpp index e860a9d3..ab3b230e 100644 --- a/src/ObjLoading/Game/T6/Vehicle/GdtLoaderVehicleT6.cpp +++ b/src/ObjLoading/Game/T6/Vehicle/GdtLoaderVehicleT6.cpp @@ -25,7 +25,7 @@ namespace AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override { - const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(ObjConstants::GDF_FILENAME_VEHICLE, assetName); + const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(GDF_FILENAME_VEHICLE, assetName); if (gdtEntry == nullptr) return AssetCreationResult::NoAction(); diff --git a/src/ObjLoading/Game/T6/Vehicle/RawLoaderVehicleT6.cpp b/src/ObjLoading/Game/T6/Vehicle/RawLoaderVehicleT6.cpp index 9bbd462c..a6ba611f 100644 --- a/src/ObjLoading/Game/T6/Vehicle/RawLoaderVehicleT6.cpp +++ b/src/ObjLoading/Game/T6/Vehicle/RawLoaderVehicleT6.cpp @@ -32,7 +32,7 @@ namespace return AssetCreationResult::NoAction(); InfoString infoString; - if (!infoString.FromStream(ObjConstants::INFO_STRING_PREFIX_VEHICLE, *file.m_stream)) + if (!infoString.FromStream(INFO_STRING_PREFIX_VEHICLE, *file.m_stream)) { con::error("Could not parse as info string file: \"{}\"", fileName); return AssetCreationResult::Failure(); diff --git a/src/ObjLoading/Game/T6/Weapon/AttachmentGdtLoaderT6.cpp b/src/ObjLoading/Game/T6/Weapon/AttachmentGdtLoaderT6.cpp index ac7df117..6a4bf786 100644 --- a/src/ObjLoading/Game/T6/Weapon/AttachmentGdtLoaderT6.cpp +++ b/src/ObjLoading/Game/T6/Weapon/AttachmentGdtLoaderT6.cpp @@ -25,7 +25,7 @@ namespace AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override { - const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(ObjConstants::GDF_FILENAME_WEAPON_ATTACHMENT, assetName); + const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(GDF_FILENAME_WEAPON_ATTACHMENT, assetName); if (gdtEntry == nullptr) return AssetCreationResult::NoAction(); diff --git a/src/ObjLoading/Game/T6/Weapon/AttachmentRawLoaderT6.cpp b/src/ObjLoading/Game/T6/Weapon/AttachmentRawLoaderT6.cpp index dd3da8d2..eb9f0775 100644 --- a/src/ObjLoading/Game/T6/Weapon/AttachmentRawLoaderT6.cpp +++ b/src/ObjLoading/Game/T6/Weapon/AttachmentRawLoaderT6.cpp @@ -33,7 +33,7 @@ namespace return AssetCreationResult::NoAction(); InfoString infoString; - if (!infoString.FromStream(ObjConstants::INFO_STRING_PREFIX_WEAPON_ATTACHMENT, *file.m_stream)) + if (!infoString.FromStream(INFO_STRING_PREFIX_WEAPON_ATTACHMENT, *file.m_stream)) { con::error("Could not parse as info string file: \"{}\"", fileName); return AssetCreationResult::Failure(); diff --git a/src/ObjLoading/Game/T6/Weapon/AttachmentUniqueGdtLoaderT6.cpp b/src/ObjLoading/Game/T6/Weapon/AttachmentUniqueGdtLoaderT6.cpp index 4f505ca1..2262035e 100644 --- a/src/ObjLoading/Game/T6/Weapon/AttachmentUniqueGdtLoaderT6.cpp +++ b/src/ObjLoading/Game/T6/Weapon/AttachmentUniqueGdtLoaderT6.cpp @@ -25,7 +25,7 @@ namespace AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override { - const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(ObjConstants::GDF_FILENAME_WEAPON_ATTACHMENT_UNIQUE, assetName); + const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(GDF_FILENAME_WEAPON_ATTACHMENT_UNIQUE, assetName); if (gdtEntry == nullptr) return AssetCreationResult::NoAction(); diff --git a/src/ObjLoading/Game/T6/Weapon/AttachmentUniqueRawLoaderT6.cpp b/src/ObjLoading/Game/T6/Weapon/AttachmentUniqueRawLoaderT6.cpp index 95fc13e6..ada06c2e 100644 --- a/src/ObjLoading/Game/T6/Weapon/AttachmentUniqueRawLoaderT6.cpp +++ b/src/ObjLoading/Game/T6/Weapon/AttachmentUniqueRawLoaderT6.cpp @@ -32,7 +32,7 @@ namespace return AssetCreationResult::NoAction(); InfoString infoString; - if (!infoString.FromStream(ObjConstants::INFO_STRING_PREFIX_WEAPON_ATTACHMENT_UNIQUE, *file.m_stream)) + if (!infoString.FromStream(INFO_STRING_PREFIX_WEAPON_ATTACHMENT_UNIQUE, *file.m_stream)) { con::error("Could not parse as info string file: \"{}\"", fileName); return AssetCreationResult::Failure(); diff --git a/src/ObjLoading/Game/T6/Weapon/WeaponGdtLoaderT6.cpp b/src/ObjLoading/Game/T6/Weapon/WeaponGdtLoaderT6.cpp index 5b9acf66..286f3d74 100644 --- a/src/ObjLoading/Game/T6/Weapon/WeaponGdtLoaderT6.cpp +++ b/src/ObjLoading/Game/T6/Weapon/WeaponGdtLoaderT6.cpp @@ -25,7 +25,7 @@ namespace AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override { - const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(ObjConstants::GDF_FILENAME_WEAPON, assetName); + const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(GDF_FILENAME_WEAPON, assetName); if (gdtEntry == nullptr) return AssetCreationResult::NoAction(); diff --git a/src/ObjLoading/Game/T6/Weapon/WeaponRawLoaderT6.cpp b/src/ObjLoading/Game/T6/Weapon/WeaponRawLoaderT6.cpp index 2ed85259..7eaa577a 100644 --- a/src/ObjLoading/Game/T6/Weapon/WeaponRawLoaderT6.cpp +++ b/src/ObjLoading/Game/T6/Weapon/WeaponRawLoaderT6.cpp @@ -32,7 +32,7 @@ namespace return AssetCreationResult::NoAction(); InfoString infoString; - if (!infoString.FromStream(ObjConstants::INFO_STRING_PREFIX_WEAPON, *file.m_stream)) + if (!infoString.FromStream(INFO_STRING_PREFIX_WEAPON, *file.m_stream)) { con::error("Could not parse as info string file: \"{}\"", fileName); return AssetCreationResult::Failure(); diff --git a/src/ObjLoading/Game/T6/ZBarrier/GdtLoaderZBarrierT6.cpp b/src/ObjLoading/Game/T6/ZBarrier/GdtLoaderZBarrierT6.cpp index e69244aa..ec676c7e 100644 --- a/src/ObjLoading/Game/T6/ZBarrier/GdtLoaderZBarrierT6.cpp +++ b/src/ObjLoading/Game/T6/ZBarrier/GdtLoaderZBarrierT6.cpp @@ -25,7 +25,7 @@ namespace AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override { - const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(ObjConstants::GDF_FILENAME_ZBARRIER, assetName); + const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(GDF_FILENAME_ZBARRIER, assetName); if (gdtEntry == nullptr) return AssetCreationResult::NoAction(); diff --git a/src/ObjLoading/Game/T6/ZBarrier/RawLoaderZBarrierT6.cpp b/src/ObjLoading/Game/T6/ZBarrier/RawLoaderZBarrierT6.cpp index a1e2cd0f..1822f18c 100644 --- a/src/ObjLoading/Game/T6/ZBarrier/RawLoaderZBarrierT6.cpp +++ b/src/ObjLoading/Game/T6/ZBarrier/RawLoaderZBarrierT6.cpp @@ -32,7 +32,7 @@ namespace return AssetCreationResult::NoAction(); InfoString infoString; - if (!infoString.FromStream(ObjConstants::INFO_STRING_PREFIX_ZBARRIER, *file.m_stream)) + if (!infoString.FromStream(INFO_STRING_PREFIX_ZBARRIER, *file.m_stream)) { con::error("Could not parse as info string file: \"{}\"", fileName); return AssetCreationResult::Failure(); diff --git a/src/ObjWriting/Game/IW3/InfoString/InfoStringFromStructConverter.cpp b/src/ObjWriting/Game/IW3/InfoString/InfoStringFromStructConverter.cpp index e69de29b..b023494c 100644 --- a/src/ObjWriting/Game/IW3/InfoString/InfoStringFromStructConverter.cpp +++ b/src/ObjWriting/Game/IW3/InfoString/InfoStringFromStructConverter.cpp @@ -0,0 +1,123 @@ +#include "InfoStringFromStructConverter.h" + +#include + +using namespace IW3; + +void InfoStringFromStructConverter::FillFromBaseField(const cspField_t& field) +{ + switch (static_cast(field.iFieldType)) + { + case CSPFT_STRING: + FillFromString(std::string(field.szName), field.iOffset); + break; + + case CSPFT_STRING_MAX_STRING_CHARS: + FillFromStringBuffer(std::string(field.szName), field.iOffset, 1024); + break; + + case CSPFT_STRING_MAX_QPATH: + FillFromStringBuffer(std::string(field.szName), field.iOffset, 64); + break; + + case CSPFT_STRING_MAX_OSPATH: + FillFromStringBuffer(std::string(field.szName), field.iOffset, 256); + break; + + case CSPFT_INT: + FillFromInt(std::string(field.szName), field.iOffset); + break; + + case CSPFT_QBOOLEAN: + FillFromQBoolean(std::string(field.szName), field.iOffset); + break; + + case CSPFT_FLOAT: + FillFromFloat(std::string(field.szName), field.iOffset); + break; + + case CSPFT_MILLISECONDS: + FillFromMilliseconds(std::string(field.szName), field.iOffset); + break; + + case CSPFT_FX: + { + const auto* fx = *reinterpret_cast(reinterpret_cast(m_structure) + field.iOffset); + + if (fx) + m_info_string.SetValueForKey(std::string(field.szName), std::string(AssetName(fx->name))); + else + m_info_string.SetValueForKey(std::string(field.szName), ""); + break; + } + + case CSPFT_XMODEL: + { + const auto* model = *reinterpret_cast(reinterpret_cast(m_structure) + field.iOffset); + + if (model) + m_info_string.SetValueForKey(std::string(field.szName), std::string(AssetName(model->name))); + else + m_info_string.SetValueForKey(std::string(field.szName), ""); + break; + } + + case CSPFT_MATERIAL: + { + const auto* material = *reinterpret_cast(reinterpret_cast(m_structure) + field.iOffset); + + if (material) + m_info_string.SetValueForKey(std::string(field.szName), std::string(AssetName(material->info.name))); + else + m_info_string.SetValueForKey(std::string(field.szName), ""); + break; + } + + case CSPFT_SOUND: + { + const auto* sndAlias = reinterpret_cast(reinterpret_cast(m_structure) + field.iOffset); + + if (sndAlias->name) + m_info_string.SetValueForKey(std::string(field.szName), std::string(sndAlias->name->soundName)); + else + m_info_string.SetValueForKey(std::string(field.szName), ""); + break; + } + + case CSPFT_NUM_BASE_FIELD_TYPES: + default: + assert(false); + break; + } +} + +void InfoStringFromStructConverter::FillInfoString() +{ + for (auto fieldIndex = 0u; fieldIndex < m_field_count; fieldIndex++) + { + const auto& field = m_fields[fieldIndex]; + assert(field.iFieldType >= 0); + + if (field.iFieldType < CSPFT_NUM_BASE_FIELD_TYPES) + FillFromBaseField(field); + else + FillFromExtensionField(field); + } +} + +InfoStringFromStructConverter::InfoStringFromStructConverter(const void* structure, const cspField_t* fields, const size_t fieldCount) + : InfoStringFromStructConverterBase(structure), + m_fields(fields), + m_field_count(fieldCount) +{ +} + +InfoStringFromStructConverter::InfoStringFromStructConverter(const void* structure, + const cspField_t* fields, + const size_t fieldCount, + std::function scriptStringValueCallback) + : InfoStringFromStructConverterBase(structure, std::move(scriptStringValueCallback)), + m_fields(fields), + m_field_count(fieldCount) +{ +} diff --git a/src/ObjWriting/Game/IW3/InfoString/InfoStringFromStructConverter.h b/src/ObjWriting/Game/IW3/InfoString/InfoStringFromStructConverter.h index e69de29b..b641cfc2 100644 --- a/src/ObjWriting/Game/IW3/InfoString/InfoStringFromStructConverter.h +++ b/src/ObjWriting/Game/IW3/InfoString/InfoStringFromStructConverter.h @@ -0,0 +1,24 @@ +#pragma once +#include "Game/IW3/IW3.h" +#include "InfoString/InfoStringFromStructConverterBase.h" + +namespace IW3 +{ + class InfoStringFromStructConverter : public InfoStringFromStructConverterBase + { + protected: + const cspField_t* m_fields; + size_t m_field_count; + + virtual void FillFromExtensionField(const cspField_t& field) = 0; + void FillFromBaseField(const cspField_t& field); + void FillInfoString() override; + + public: + InfoStringFromStructConverter(const void* structure, const cspField_t* fields, size_t fieldCount); + InfoStringFromStructConverter(const void* structure, + const cspField_t* fields, + size_t fieldCount, + std::function scriptStringValueCallback); + }; +} // namespace IW3 diff --git a/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp b/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp index 0f3f9e2e..dfaa23c9 100644 --- a/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp +++ b/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp @@ -6,6 +6,7 @@ #include "Image/ImageDumperIW3.h" #include "Localize/LocalizeDumperIW3.h" #include "Maps/MapEntsDumperIW3.h" +#include "PhysPreset/PhysPresetInfoStringDumperIW3.h" #include "RawFile/RawFileDumperIW3.h" #include "Sound/LoadedSoundDumperIW3.h" #include "StringTable/StringTableDumperIW3.h" @@ -14,7 +15,7 @@ using namespace IW3; void ObjWriter::RegisterAssetDumpers(AssetDumpingContext& context) { - // REGISTER_DUMPER(AssetDumperPhysPreset) + RegisterAssetDumper(std::make_unique()); // REGISTER_DUMPER(AssetDumperXAnimParts) RegisterAssetDumper(std::make_unique()); RegisterAssetDumper(std::make_unique()); diff --git a/src/ObjWriting/Game/IW3/PhysPreset/PhysPresetInfoStringDumperIW3.cpp b/src/ObjWriting/Game/IW3/PhysPreset/PhysPresetInfoStringDumperIW3.cpp new file mode 100644 index 00000000..150f57e7 --- /dev/null +++ b/src/ObjWriting/Game/IW3/PhysPreset/PhysPresetInfoStringDumperIW3.cpp @@ -0,0 +1,104 @@ +#include "PhysPresetInfoStringDumperIW3.h" + +#include "Game/IW3/InfoString/InfoStringFromStructConverter.h" +#include "Game/IW3/ObjConstantsIW3.h" +#include "Game/IW3/PhysPreset/PhysPresetFields.h" +#include "PhysPreset/PhysPresetCommon.h" + +#include +#include +#include + +using namespace IW3; + +namespace +{ + class InfoStringFromPhysPresetConverter final : public InfoStringFromStructConverter + { + protected: + void FillFromExtensionField(const cspField_t& field) override + { + assert(false); + } + + public: + InfoStringFromPhysPresetConverter(const PhysPresetInfo* structure, + const cspField_t* fields, + const size_t fieldCount, + std::function scriptStringValueCallback) + : InfoStringFromStructConverter(structure, fields, fieldCount, std::move(scriptStringValueCallback)) + { + } + }; + + void CopyToPhysPresetInfo(const PhysPreset* physPreset, PhysPresetInfo* physPresetInfo) + { + physPresetInfo->mass = physPreset->mass; + physPresetInfo->bounce = physPreset->bounce; + + if (physPreset->friction >= std::numeric_limits::max()) + { + physPresetInfo->isFrictionInfinity = 1; + physPresetInfo->friction = 0; + } + else + { + physPresetInfo->isFrictionInfinity = 0; + physPresetInfo->friction = physPreset->friction; + } + + physPresetInfo->bulletForceScale = physPreset->bulletForceScale; + physPresetInfo->explosiveForceScale = physPreset->explosiveForceScale; + physPresetInfo->sndAliasPrefix = physPreset->sndAliasPrefix; + physPresetInfo->piecesSpreadFraction = physPreset->piecesSpreadFraction; + physPresetInfo->piecesUpwardVelocity = physPreset->piecesUpwardVelocity; + physPresetInfo->tempDefaultToCylinder = physPreset->tempDefaultToCylinder ? 1 : 0; + } + + InfoString CreateInfoString(const XAssetInfo& asset) + { + auto* physPresetInfo = new PhysPresetInfo; + CopyToPhysPresetInfo(asset.Asset(), physPresetInfo); + + InfoStringFromPhysPresetConverter converter(physPresetInfo, + phys_preset_fields, + std::extent_v, + [asset](const scr_string_t scrStr) -> std::string + { + assert(scrStr < asset.m_zone->m_script_strings.Count()); + if (scrStr >= asset.m_zone->m_script_strings.Count()) + return ""; + + return asset.m_zone->m_script_strings[scrStr]; + }); + + return converter.Convert(); + } +} // namespace + +namespace phys_preset +{ + void InfoStringDumperIW3::DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) + { + // Only dump raw when no gdt available + if (context.m_gdt) + { + const auto infoString = CreateInfoString(asset); + GdtEntry gdtEntry(asset.m_name, GDF_FILENAME_PHYS_PRESET); + infoString.ToGdtProperties(INFO_STRING_PREFIX_PHYS_PRESET, gdtEntry); + context.m_gdt->WriteEntry(gdtEntry); + } + else + { + const auto assetFile = context.OpenAssetFile(GetFileNameForAssetName(asset.m_name)); + + if (!assetFile) + return; + + auto& stream = *assetFile; + const auto infoString = CreateInfoString(asset); + const auto stringValue = infoString.ToString(INFO_STRING_PREFIX_PHYS_PRESET); + stream.write(stringValue.c_str(), stringValue.size()); + } + } +} // namespace phys_preset diff --git a/src/ObjWriting/Game/IW3/PhysPreset/PhysPresetInfoStringDumperIW3.h b/src/ObjWriting/Game/IW3/PhysPreset/PhysPresetInfoStringDumperIW3.h new file mode 100644 index 00000000..1236e655 --- /dev/null +++ b/src/ObjWriting/Game/IW3/PhysPreset/PhysPresetInfoStringDumperIW3.h @@ -0,0 +1,13 @@ +#pragma once + +#include "Dumping/AbstractAssetDumper.h" +#include "Game/IW3/IW3.h" + +namespace phys_preset +{ + class InfoStringDumperIW3 final : public AbstractAssetDumper + { + protected: + void DumpAsset(AssetDumpingContext& context, const XAssetInfo& asset) override; + }; +} // namespace phys_preset diff --git a/src/ObjWriting/Game/IW4/Material/MaterialDecompilingDumperIW4.cpp b/src/ObjWriting/Game/IW4/Material/MaterialDecompilingDumperIW4.cpp index 1d37b223..7045be03 100644 --- a/src/ObjWriting/Game/IW4/Material/MaterialDecompilingDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Material/MaterialDecompilingDumperIW4.cpp @@ -168,7 +168,7 @@ namespace GdtEntry& CreateGdtEntry() { m_entry = GdtEntry(); - m_entry.m_gdf_name = ObjConstants::GDF_FILENAME_MATERIAL; + m_entry.m_gdf_name = GDF_FILENAME_MATERIAL; m_entry.m_name = m_material.info.name; SetCommonValues(); diff --git a/src/ObjWriting/Game/IW4/PhysPreset/PhysPresetInfoStringDumperIW4.cpp b/src/ObjWriting/Game/IW4/PhysPreset/PhysPresetInfoStringDumperIW4.cpp index 158ac925..5080d5b9 100644 --- a/src/ObjWriting/Game/IW4/PhysPreset/PhysPresetInfoStringDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/PhysPreset/PhysPresetInfoStringDumperIW4.cpp @@ -86,8 +86,8 @@ namespace phys_preset if (context.m_gdt) { const auto infoString = CreateInfoString(asset); - GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_PHYS_PRESET); - infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_PHYS_PRESET, gdtEntry); + GdtEntry gdtEntry(asset.m_name, GDF_FILENAME_PHYS_PRESET); + infoString.ToGdtProperties(INFO_STRING_PREFIX_PHYS_PRESET, gdtEntry); context.m_gdt->WriteEntry(gdtEntry); } else @@ -99,7 +99,7 @@ namespace phys_preset auto& stream = *assetFile; const auto infoString = CreateInfoString(asset); - const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_PHYS_PRESET); + const auto stringValue = infoString.ToString(INFO_STRING_PREFIX_PHYS_PRESET); stream.write(stringValue.c_str(), stringValue.size()); } } diff --git a/src/ObjWriting/Game/IW4/Tracer/TracerDumperIW4.cpp b/src/ObjWriting/Game/IW4/Tracer/TracerDumperIW4.cpp index 339c26b4..d643fc32 100644 --- a/src/ObjWriting/Game/IW4/Tracer/TracerDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Tracer/TracerDumperIW4.cpp @@ -58,8 +58,8 @@ namespace tracer if (context.m_gdt) { const auto infoString = CreateInfoString(asset); - GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_TRACER); - infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_TRACER, gdtEntry); + GdtEntry gdtEntry(asset.m_name, GDF_FILENAME_TRACER); + infoString.ToGdtProperties(INFO_STRING_PREFIX_TRACER, gdtEntry); context.m_gdt->WriteEntry(gdtEntry); } else @@ -71,7 +71,7 @@ namespace tracer auto& stream = *assetFile; const auto infoString = CreateInfoString(asset); - const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_TRACER); + const auto stringValue = infoString.ToString(INFO_STRING_PREFIX_TRACER); stream.write(stringValue.c_str(), stringValue.size()); } } diff --git a/src/ObjWriting/Game/IW4/Vehicle/VehicleDumperIW4.cpp b/src/ObjWriting/Game/IW4/Vehicle/VehicleDumperIW4.cpp index 0561b43a..6c85bd96 100644 --- a/src/ObjWriting/Game/IW4/Vehicle/VehicleDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Vehicle/VehicleDumperIW4.cpp @@ -99,8 +99,8 @@ namespace vehicle if (context.m_gdt) { const auto infoString = CreateInfoString(asset); - GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_VEHICLE); - infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_VEHICLE, gdtEntry); + GdtEntry gdtEntry(asset.m_name, GDF_FILENAME_VEHICLE); + infoString.ToGdtProperties(INFO_STRING_PREFIX_VEHICLE, gdtEntry); context.m_gdt->WriteEntry(gdtEntry); } else @@ -112,7 +112,7 @@ namespace vehicle auto& stream = *assetFile; const auto infoString = CreateInfoString(asset); - const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_VEHICLE); + const auto stringValue = infoString.ToString(INFO_STRING_PREFIX_VEHICLE); stream.write(stringValue.c_str(), stringValue.size()); } } diff --git a/src/ObjWriting/Game/IW4/Weapon/WeaponDumperIW4.cpp b/src/ObjWriting/Game/IW4/Weapon/WeaponDumperIW4.cpp index 8c5c9ebc..86cc6479 100644 --- a/src/ObjWriting/Game/IW4/Weapon/WeaponDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Weapon/WeaponDumperIW4.cpp @@ -411,8 +411,8 @@ namespace weapon if (context.m_gdt) { const auto infoString = CreateInfoString(asset); - GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_WEAPON); - infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_WEAPON, gdtEntry); + GdtEntry gdtEntry(asset.m_name, GDF_FILENAME_WEAPON); + infoString.ToGdtProperties(INFO_STRING_PREFIX_WEAPON, gdtEntry); context.m_gdt->WriteEntry(gdtEntry); } else @@ -424,7 +424,7 @@ namespace weapon auto& stream = *assetFile; const auto infoString = CreateInfoString(asset); - const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_WEAPON); + const auto stringValue = infoString.ToString(INFO_STRING_PREFIX_WEAPON); stream.write(stringValue.c_str(), stringValue.size()); } diff --git a/src/ObjWriting/Game/IW5/Weapon/WeaponDumperIW5.cpp b/src/ObjWriting/Game/IW5/Weapon/WeaponDumperIW5.cpp index 322eff0a..7221ff70 100644 --- a/src/ObjWriting/Game/IW5/Weapon/WeaponDumperIW5.cpp +++ b/src/ObjWriting/Game/IW5/Weapon/WeaponDumperIW5.cpp @@ -741,8 +741,8 @@ namespace weapon if (context.m_gdt) { const auto infoString = CreateInfoString(asset); - GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_WEAPON); - infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_WEAPON, gdtEntry); + GdtEntry gdtEntry(asset.m_name, GDF_FILENAME_WEAPON); + infoString.ToGdtProperties(INFO_STRING_PREFIX_WEAPON, gdtEntry); context.m_gdt->WriteEntry(gdtEntry); } else @@ -754,7 +754,7 @@ namespace weapon auto& stream = *assetFile; const auto infoString = CreateInfoString(asset); - const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_WEAPON); + const auto stringValue = infoString.ToString(INFO_STRING_PREFIX_WEAPON); stream.write(stringValue.c_str(), stringValue.size()); } diff --git a/src/ObjWriting/Game/T6/PhysConstraints/PhysConstraintsInfoStringDumperT6.cpp b/src/ObjWriting/Game/T6/PhysConstraints/PhysConstraintsInfoStringDumperT6.cpp index 4be90fa5..3c19c97b 100644 --- a/src/ObjWriting/Game/T6/PhysConstraints/PhysConstraintsInfoStringDumperT6.cpp +++ b/src/ObjWriting/Game/T6/PhysConstraints/PhysConstraintsInfoStringDumperT6.cpp @@ -67,8 +67,8 @@ namespace phys_constraints if (context.m_gdt) { const auto infoString = CreateInfoString(asset); - GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_PHYS_CONSTRAINTS); - infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_PHYS_CONSTRAINTS, gdtEntry); + GdtEntry gdtEntry(asset.m_name, GDF_FILENAME_PHYS_CONSTRAINTS); + infoString.ToGdtProperties(INFO_STRING_PREFIX_PHYS_CONSTRAINTS, gdtEntry); context.m_gdt->WriteEntry(gdtEntry); } else @@ -80,7 +80,7 @@ namespace phys_constraints auto& stream = *assetFile; const auto infoString = CreateInfoString(asset); - const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_PHYS_CONSTRAINTS); + const auto stringValue = infoString.ToString(INFO_STRING_PREFIX_PHYS_CONSTRAINTS); stream.write(stringValue.c_str(), stringValue.size()); } } diff --git a/src/ObjWriting/Game/T6/PhysPreset/PhysPresetInfoStringDumperT6.cpp b/src/ObjWriting/Game/T6/PhysPreset/PhysPresetInfoStringDumperT6.cpp index 3e91aac6..ce939d96 100644 --- a/src/ObjWriting/Game/T6/PhysPreset/PhysPresetInfoStringDumperT6.cpp +++ b/src/ObjWriting/Game/T6/PhysPreset/PhysPresetInfoStringDumperT6.cpp @@ -88,8 +88,8 @@ namespace phys_preset if (context.m_gdt) { const auto infoString = CreateInfoString(asset); - GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_PHYS_PRESET); - infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_PHYS_PRESET, gdtEntry); + GdtEntry gdtEntry(asset.m_name, GDF_FILENAME_PHYS_PRESET); + infoString.ToGdtProperties(INFO_STRING_PREFIX_PHYS_PRESET, gdtEntry); context.m_gdt->WriteEntry(gdtEntry); } else @@ -101,7 +101,7 @@ namespace phys_preset auto& stream = *assetFile; const auto infoString = CreateInfoString(asset); - const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_PHYS_PRESET); + const auto stringValue = infoString.ToString(INFO_STRING_PREFIX_PHYS_PRESET); stream.write(stringValue.c_str(), stringValue.size()); } } diff --git a/src/ObjWriting/Game/T6/Tracer/TracerDumperT6.cpp b/src/ObjWriting/Game/T6/Tracer/TracerDumperT6.cpp index b063065f..cb45d437 100644 --- a/src/ObjWriting/Game/T6/Tracer/TracerDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Tracer/TracerDumperT6.cpp @@ -66,8 +66,8 @@ namespace tracer if (context.m_gdt) { const auto infoString = CreateInfoString(asset); - GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_TRACER); - infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_TRACER, gdtEntry); + GdtEntry gdtEntry(asset.m_name, GDF_FILENAME_TRACER); + infoString.ToGdtProperties(INFO_STRING_PREFIX_TRACER, gdtEntry); context.m_gdt->WriteEntry(gdtEntry); } else @@ -79,7 +79,7 @@ namespace tracer auto& stream = *assetFile; const auto infoString = CreateInfoString(asset); - const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_TRACER); + const auto stringValue = infoString.ToString(INFO_STRING_PREFIX_TRACER); stream.write(stringValue.c_str(), stringValue.size()); } } diff --git a/src/ObjWriting/Game/T6/Vehicle/VehicleDumperT6.cpp b/src/ObjWriting/Game/T6/Vehicle/VehicleDumperT6.cpp index eb2a75d3..14e088cd 100644 --- a/src/ObjWriting/Game/T6/Vehicle/VehicleDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Vehicle/VehicleDumperT6.cpp @@ -117,8 +117,8 @@ namespace vehicle if (context.m_gdt) { const auto infoString = CreateInfoString(asset); - GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_VEHICLE); - infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_VEHICLE, gdtEntry); + GdtEntry gdtEntry(asset.m_name, GDF_FILENAME_VEHICLE); + infoString.ToGdtProperties(INFO_STRING_PREFIX_VEHICLE, gdtEntry); context.m_gdt->WriteEntry(gdtEntry); } else @@ -130,7 +130,7 @@ namespace vehicle auto& stream = *assetFile; const auto infoString = CreateInfoString(asset); - const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_VEHICLE); + const auto stringValue = infoString.ToString(INFO_STRING_PREFIX_VEHICLE); stream.write(stringValue.c_str(), stringValue.size()); } } diff --git a/src/ObjWriting/Game/T6/Weapon/AttachmentDumperT6.cpp b/src/ObjWriting/Game/T6/Weapon/AttachmentDumperT6.cpp index e53c4538..46e91b1e 100644 --- a/src/ObjWriting/Game/T6/Weapon/AttachmentDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Weapon/AttachmentDumperT6.cpp @@ -73,8 +73,8 @@ namespace attachment if (context.m_gdt) { const auto infoString = CreateInfoString(asset); - GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_WEAPON_ATTACHMENT); - infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_WEAPON_ATTACHMENT, gdtEntry); + GdtEntry gdtEntry(asset.m_name, GDF_FILENAME_WEAPON_ATTACHMENT); + infoString.ToGdtProperties(INFO_STRING_PREFIX_WEAPON_ATTACHMENT, gdtEntry); context.m_gdt->WriteEntry(gdtEntry); } else @@ -86,7 +86,7 @@ namespace attachment auto& stream = *assetFile; const auto infoString = CreateInfoString(asset); - const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_WEAPON_ATTACHMENT); + const auto stringValue = infoString.ToString(INFO_STRING_PREFIX_WEAPON_ATTACHMENT); stream.write(stringValue.c_str(), stringValue.size()); } } diff --git a/src/ObjWriting/Game/T6/Weapon/AttachmentUniqueDumperT6.cpp b/src/ObjWriting/Game/T6/Weapon/AttachmentUniqueDumperT6.cpp index 0aacd2eb..a3eeb37e 100644 --- a/src/ObjWriting/Game/T6/Weapon/AttachmentUniqueDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Weapon/AttachmentUniqueDumperT6.cpp @@ -137,8 +137,8 @@ namespace attachment_unique if (context.m_gdt) { const auto infoString = CreateInfoString(asset); - GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_WEAPON_ATTACHMENT_UNIQUE); - infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_WEAPON_ATTACHMENT_UNIQUE, gdtEntry); + GdtEntry gdtEntry(asset.m_name, GDF_FILENAME_WEAPON_ATTACHMENT_UNIQUE); + infoString.ToGdtProperties(INFO_STRING_PREFIX_WEAPON_ATTACHMENT_UNIQUE, gdtEntry); context.m_gdt->WriteEntry(gdtEntry); } else @@ -150,7 +150,7 @@ namespace attachment_unique auto& stream = *assetFile; const auto infoString = CreateInfoString(asset); - const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_WEAPON_ATTACHMENT_UNIQUE); + const auto stringValue = infoString.ToString(INFO_STRING_PREFIX_WEAPON_ATTACHMENT_UNIQUE); stream.write(stringValue.c_str(), stringValue.size()); } } diff --git a/src/ObjWriting/Game/T6/Weapon/WeaponDumperT6.cpp b/src/ObjWriting/Game/T6/Weapon/WeaponDumperT6.cpp index 19c843a6..e4743f69 100644 --- a/src/ObjWriting/Game/T6/Weapon/WeaponDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Weapon/WeaponDumperT6.cpp @@ -467,8 +467,8 @@ namespace weapon if (context.m_gdt) { const auto infoString = CreateInfoString(asset); - GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_WEAPON); - infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_WEAPON, gdtEntry); + GdtEntry gdtEntry(asset.m_name, GDF_FILENAME_WEAPON); + infoString.ToGdtProperties(INFO_STRING_PREFIX_WEAPON, gdtEntry); context.m_gdt->WriteEntry(gdtEntry); } else @@ -480,7 +480,7 @@ namespace weapon auto& stream = *assetFile; const auto infoString = CreateInfoString(asset); - const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_WEAPON); + const auto stringValue = infoString.ToString(INFO_STRING_PREFIX_WEAPON); stream.write(stringValue.c_str(), stringValue.size()); } diff --git a/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.cpp b/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.cpp index bca5a7a2..270fd13b 100644 --- a/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.cpp +++ b/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.cpp @@ -56,8 +56,8 @@ namespace z_barrier if (context.m_gdt) { const auto infoString = CreateInfoString(asset); - GdtEntry gdtEntry(asset.m_name, ObjConstants::GDF_FILENAME_ZBARRIER); - infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_ZBARRIER, gdtEntry); + GdtEntry gdtEntry(asset.m_name, GDF_FILENAME_ZBARRIER); + infoString.ToGdtProperties(INFO_STRING_PREFIX_ZBARRIER, gdtEntry); context.m_gdt->WriteEntry(gdtEntry); } else @@ -69,7 +69,7 @@ namespace z_barrier auto& stream = *assetFile; const auto infoString = CreateInfoString(asset); - const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_ZBARRIER); + const auto stringValue = infoString.ToString(INFO_STRING_PREFIX_ZBARRIER); stream.write(stringValue.c_str(), stringValue.size()); } }