From 380141ba2ecb9641e1c839bdfd7d8c42f0a02e1d Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 18:44:54 +0000 Subject: [PATCH] bugfix(htree): Handle null parent pivots and correct animation data indexing --- Core/Libraries/Source/WWVegas/WW3D2/htree.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Core/Libraries/Source/WWVegas/WW3D2/htree.cpp b/Core/Libraries/Source/WWVegas/WW3D2/htree.cpp index 5388a05929..4dbd6dc76e 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/htree.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/htree.cpp @@ -643,10 +643,15 @@ void HTreeClass::Anim_Update_Without_Interpolation(const Matrix3D & root,HRawAni endpivot=pivot+(NumPivots-1); lastAnimPivot = &Pivot[num_anim_pivots]; - for (int piv_idx=1; pivot < endpivot; pivot++,nodeMotion++) { + for (int piv_idx=1; pivot < endpivot; pivot++) { // base pose - assert(pivot->Parent != nullptr); + if (pivot->Parent == nullptr) + { + if (pivot < lastAnimPivot) + nodeMotion++; + continue; + } Matrix3D::Multiply(pivot->Parent->Transform, pivot->BaseTransform, &(pivot->Transform)); // Don't update this pivot if the HTree doesn't have animation data for it... @@ -683,6 +688,8 @@ void HTreeClass::Anim_Update_Without_Interpolation(const Matrix3D & root,HRawAni pivot->IsVisible=(nodeMotion->Vis->Get_Bit(iframe) == 1); else pivot->IsVisible=1; + + nodeMotion++; } if (pivot->Is_Captured())