diff options
Diffstat (limited to 'engines/mads/sprites.cpp')
-rw-r--r-- | engines/mads/sprites.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/engines/mads/sprites.cpp b/engines/mads/sprites.cpp index 442125e929..0dd640bca0 100644 --- a/engines/mads/sprites.cpp +++ b/engines/mads/sprites.cpp @@ -372,14 +372,18 @@ int SpriteSets::add(SpriteAsset *asset, int idx) { if (idx >= (int)size()) resize(idx + 1); - delete (*this)[idx]; - (*this)[idx] = asset; + if ((*this)[idx]) { + delete (*this)[idx]; + } else { + ++_assetCount; + } + + (*this)[idx] = asset; return idx; } int SpriteSets::addSprites(const Common::String &resName, int flags) { - ++_assetCount; return add(new SpriteAsset(_vm, resName, flags)); } @@ -394,7 +398,14 @@ void SpriteSets::clear() { void SpriteSets::remove(int idx) { if (idx >= 0) { delete (*this)[idx]; - (*this)[idx] = nullptr; + + if (idx < ((int)size() - 1)) + (*this)[idx] = nullptr; + else { + do { + remove_at(size() - 1); + } while (size() > 0 && (*this)[size() - 1] == nullptr); + } --_assetCount; } |