feat: add support for t4 materials (#891)

* feat: add support for t4 materials

* fix: t4 material struct
This commit is contained in:
Jan Laupetin
2026-07-08 22:50:22 +02:00
committed by GitHub
parent a4229788d7
commit c385f50a0e
13 changed files with 402 additions and 45 deletions
+15 -12
View File
@@ -1,4 +1,4 @@
#options GAME (IW3, IW4, IW5, T5, T6)
#options GAME (IW3, IW4, IW5, T4, T5, T6)
#filename "Game/" + GAME + "/Material/JsonMaterial" + GAME + ".h"
@@ -11,6 +11,9 @@
#elif GAME == "IW5"
#define FEATURE_IW5
#define HAS_WATER
#elif GAME == "T4"
#define FEATURE_T4
#define HAS_WATER
#elif GAME == "T5"
#define FEATURE_T5
#define HAS_WATER
@@ -81,7 +84,7 @@ namespace GAME
INVALID,
DISABLED,
GT0,
#if defined(FEATURE_IW3) || defined(FEATURE_IW4) || defined(FEATURE_IW5)
#if defined(FEATURE_IW3) || defined(FEATURE_IW4) || defined(FEATURE_IW5) || defined(FEATURE_T4)
LT128,
#elif defined(FEATURE_T5)
GE255,
@@ -93,7 +96,7 @@ namespace GAME
{JsonAlphaTest::INVALID, nullptr },
{JsonAlphaTest::DISABLED, "disabled"},
{JsonAlphaTest::GT0, "gt0" },
#if defined(FEATURE_IW3) || defined(FEATURE_IW4) || defined(FEATURE_IW5)
#if defined(FEATURE_IW3) || defined(FEATURE_IW4) || defined(FEATURE_IW5) || defined(FEATURE_T4)
{JsonAlphaTest::LT128, "lt128" },
#elif defined(FEATURE_T5)
{JsonAlphaTest::GE255, "ge255" },
@@ -328,7 +331,7 @@ namespace GAME
{TS_2D, "2D" },
{TS_FUNCTION, "function" },
{TS_COLOR_MAP, "colorMap" },
#if defined(FEATURE_IW3) || defined(FEATURE_T5) || defined(FEATURE_T6)
#if defined(FEATURE_IW3) || defined(FEATURE_T4) || defined(FEATURE_T5) || defined(FEATURE_T6)
{TS_UNUSED_1, "unused1" },
#else
{TS_DETAIL_MAP, "detailMap" },
@@ -343,7 +346,7 @@ namespace GAME
{TS_OCCLUSION_MAP, "occlusionMap" },
#endif
{TS_UNUSED_6, "unused6" },
#if defined(FEATURE_IW3) || defined(FEATURE_IW4) || defined(FEATURE_IW5) || defined(FEATURE_T5)
#if defined(FEATURE_IW3) || defined(FEATURE_IW4) || defined(FEATURE_IW5) || defined(FEATURE_T4) || defined(FEATURE_T5)
{TS_WATER_MAP, "waterMap" },
#endif
#ifdef FEATURE_IW5
@@ -378,7 +381,7 @@ namespace GAME
std::optional<std::string> nameStart;
std::optional<std::string> nameEnd;
TextureSemantic semantic;
#if defined(FEATURE_T5) || defined(FEATURE_T6)
#if defined(FEATURE_T4) || defined(FEATURE_T5) || defined(FEATURE_T6)
bool isMatureContent;
#endif
JsonSamplerState samplerState;
@@ -402,7 +405,7 @@ namespace GAME
}
out["semantic"] = in.semantic;
#if defined(FEATURE_T5) || defined(FEATURE_T6)
#if defined(FEATURE_T4) || defined(FEATURE_T5) || defined(FEATURE_T6)
out["isMatureContent"] = in.isMatureContent;
#endif
out["samplerState"] = in.samplerState;
@@ -419,7 +422,7 @@ namespace GAME
optional_from_json(in, "nameStart", out.nameStart);
optional_from_json(in, "nameEnd", out.nameEnd);
in.at("semantic").get_to(out.semantic);
#if defined(FEATURE_T5) || defined(FEATURE_T6)
#if defined(FEATURE_T4) || defined(FEATURE_T5) || defined(FEATURE_T6)
in.at("isMatureContent").get_to(out.isMatureContent);
#endif
in.at("samplerState").get_to(out.samplerState);
@@ -454,14 +457,14 @@ namespace GAME
{MTL_GAMEFLAG_8, "8" },
{MTL_GAMEFLAG_10, "10" },
{MTL_GAMEFLAG_20, "20" },
#if defined(FEATURE_IW3) || defined(FEATURE_T5) || defined(FEATURE_T6)
#if defined(FEATURE_IW3) || defined(FEATURE_T4) || defined(FEATURE_T5) || defined(FEATURE_T6)
{MTL_GAMEFLAG_CASTS_SHADOW, "CASTS_SHADOW"},
{MTL_GAMEFLAG_CASTS_SHADOW, "40" },
#else
{MTL_GAMEFLAG_40, "40" },
#endif
{MTL_GAMEFLAG_80, "80" },
#if defined(FEATURE_T5) || defined(FEATURE_T6)
#if defined(FEATURE_T4) || defined(FEATURE_T5) || defined(FEATURE_T6)
{MTL_GAMEFLAG_100, "100" },
{MTL_GAMEFLAG_200, "200" },
#if defined(FEATURE_T6)
@@ -475,7 +478,7 @@ namespace GAME
});
NLOHMANN_JSON_SERIALIZE_ENUM(GfxCameraRegionType, {
#if defined(FEATURE_IW3) || defined(FEATURE_T5)
#if defined(FEATURE_IW3) || defined(FEATURE_T4) || defined(FEATURE_T5)
{CAMERA_REGION_LIT, "lit" },
{CAMERA_REGION_DECAL, "decal" },
{CAMERA_REGION_EMISSIVE, "emissive" },
@@ -506,7 +509,7 @@ namespace GAME
class JsonMaterial
{
public:
#if defined(FEATURE_T5) || defined(FEATURE_T6)
#if defined(FEATURE_T4) || defined(FEATURE_T5) || defined(FEATURE_T6)
unsigned layeredSurfaceTypes;
#if defined(FEATURE_T6)
unsigned surfaceFlags;