diff options
| author | Archez <Archez@users.noreply.github.com> | 2024-03-26 23:28:16 -0400 |
|---|---|---|
| committer | louist103 <35883445+louist103@users.noreply.github.com> | 2025-03-29 13:50:21 -0400 |
| commit | 78cf4f029190d9807aea540c1ff986d69c978bb8 (patch) | |
| tree | 265a688d126b4fbea4c8aff6edbe21c4e3950859 | |
| parent | 90d9bc3614636685817e9c2beceb86d760128e56 (diff) | |
handle null lists in animated texture color params (#16)
| -rw-r--r-- | OTRExporter/TextureAnimationExporter.cpp | 47 |
1 files 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: {
|
