From 5984c4f4328f138247c0447d660e3ec7fdecd8ec Mon Sep 17 00:00:00 2001 From: Stefanos Kornilios Mitsis Poiitidis Date: Sun, 23 Mar 2025 09:03:25 +0200 Subject: [PATCH] CutsceneHead: Don't leak RpHAnimAnimations --- src/liberty/objects/CutsceneHead.cpp | 4 ++++ vendor/librw/src/anim.cpp | 1 + 2 files changed, 5 insertions(+) diff --git a/src/liberty/objects/CutsceneHead.cpp b/src/liberty/objects/CutsceneHead.cpp index 1ef52036..ef9e991c 100644 --- a/src/liberty/objects/CutsceneHead.cpp +++ b/src/liberty/objects/CutsceneHead.cpp @@ -197,6 +197,10 @@ CCutsceneHead::PlayAnimation(const char *animName) RwStreamSkip(stream, offset*2048); if(RwStreamFindChunk(stream, rwID_HANIMANIMATION, nil, nil)){ anim = RpHAnimAnimationStreamRead(stream); + if (hier->interpolator->currentAnim) { + RpHAnimAnimationDestroy(hier->interpolator->currentAnim); + hier->interpolator->currentAnim = nil; + } RpHAnimHierarchySetCurrentAnim(hier, anim); } diff --git a/vendor/librw/src/anim.cpp b/vendor/librw/src/anim.cpp index 2003f1b3..cc4d7f2c 100644 --- a/vendor/librw/src/anim.cpp +++ b/vendor/librw/src/anim.cpp @@ -221,6 +221,7 @@ AnimInterpolator::setCurrentAnim(Animation *anim) { int32 i; AnimInterpolatorInfo *interpInfo = anim->interpInfo; + assert(this->currentAnim == nil); this->currentAnim = anim; this->currentTime = 0.0f; int32 maxkf = this->maxInterpKeyFrameSize;