From 78cf4f029190d9807aea540c1ff986d69c978bb8 Mon Sep 17 00:00:00 2001 From: Archez Date: Tue, 26 Mar 2024 23:28:16 -0400 Subject: handle null lists in animated texture color params (#16) --- OTRExporter/TextureAnimationExporter.cpp | 47 +++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/OTRExporter/TextureAnimationExporter.cpp b/OTRExporter/TextureAnimationExporter.cpp index ba4376c..b5acf89 100644 --- a/OTRExporter/TextureAnimationExporter.cpp +++ b/OTRExporter/TextureAnimationExporter.cpp @@ -43,25 +43,40 @@ void OTRExporter_TextureAnimation::Save(ZResource* res, const fs::path& outPath, writer->Write(colorParams->animLength); writer->Write(colorParams->colorListCount); - writer->Write((uint32_t)colorParams->frameDataList.size()); - for (const auto f : colorParams->frameDataList) { - writer->Write(f); + if (colorParams->frameDataListAddress != 0) { // NULL + writer->Write((uint16_t)colorParams->frameDataList.size()); + for (const auto f : colorParams->frameDataList) { + writer->Write(f); + } + } else { + writer->Write((uint16_t)0); } - writer->Write((uint32_t)colorParams->primColorList.size()); - for (const auto prim : colorParams->primColorList) { - writer->Write(prim.r); - writer->Write(prim.g); - writer->Write(prim.b); - writer->Write(prim.a); - writer->Write(prim.lodFrac); + + if (colorParams->primColorListAddress != 0) { // NULL + writer->Write((uint16_t)colorParams->primColorList.size()); + for (const auto prim : colorParams->primColorList) { + writer->Write(prim.r); + writer->Write(prim.g); + writer->Write(prim.b); + writer->Write(prim.a); + writer->Write(prim.lodFrac); + } + } else { + writer->Write((uint16_t)0); } - writer->Write((uint16_t)colorParams->envColorList.size()); - for (const auto env : colorParams->envColorList) { - writer->Write(env.r); - writer->Write(env.g); - writer->Write(env.b); - writer->Write(env.a); + + if (colorParams->envColorListAddress != 0) { // NULL + writer->Write((uint16_t)colorParams->envColorList.size()); + for (const auto env : colorParams->envColorList) { + writer->Write(env.r); + writer->Write(env.g); + writer->Write(env.b); + writer->Write(env.a); + } + } else { + writer->Write((uint16_t)0); } + break; } case TextureAnimationParamsType::TextureCycle: { -- cgit v1.2.3