From 0023e99621ba91ba87e4241e2a1ef6f97da4e7c0 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 4 May 2014 03:54:54 +0300 Subject: MADS: Fix bugs in SpriteSets::remove() This fixes several crashes when sprites get erased, like for example in death animations --- engines/mads/sprites.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/engines/mads/sprites.cpp b/engines/mads/sprites.cpp index f187295b00..36cbdbea12 100644 --- a/engines/mads/sprites.cpp +++ b/engines/mads/sprites.cpp @@ -399,17 +399,21 @@ void SpriteSets::clear() { void SpriteSets::remove(int idx) { if (idx >= 0) { - delete (*this)[idx]; - if (idx < ((int)size() - 1)) { + delete (*this)[idx]; (*this)[idx] = nullptr; } else { - do { + while (size() > 0 && (*this)[size() - 1] == nullptr) { + delete (*this)[size() - 1]; remove_at(size() - 1); - } while (size() > 0 && (*this)[size() - 1] == nullptr); + } } - --_assetCount; + if (_assetCount > 0) + --_assetCount; + else + // FIXME: This is needed, otherwise scene sprites are not cleared in this case + clear(); } } -- cgit v1.2.3