aboutsummaryrefslogtreecommitdiff
path: root/engines/toon
diff options
context:
space:
mode:
authorDavid Turner2010-11-09 23:57:56 +0000
committerDavid Turner2010-11-09 23:57:56 +0000
commita74b8ad67f7c334051dce8bdb74a514169f905af (patch)
tree6912b40a2ccc8dd58e096171b6e44d72ff24014a /engines/toon
parent95a58b24712ee0f3801485be1534ade0b733017e (diff)
downloadscummvm-rg350-a74b8ad67f7c334051dce8bdb74a514169f905af.tar.gz
scummvm-rg350-a74b8ad67f7c334051dce8bdb74a514169f905af.tar.bz2
scummvm-rg350-a74b8ad67f7c334051dce8bdb74a514169f905af.zip
TOON: More corrections to close memory leaks.
These corrections close a number of leaks in the Toon engine reported by running Valgrind with --leak-check=full option, but a significant number still remain. svn-id: r54176
Diffstat (limited to 'engines/toon')
-rw-r--r--engines/toon/audio.cpp15
-rw-r--r--engines/toon/audio.h2
-rw-r--r--engines/toon/character.cpp36
-rw-r--r--engines/toon/character.h2
-rw-r--r--engines/toon/toon.cpp31
5 files changed, 55 insertions, 31 deletions
diff --git a/engines/toon/audio.cpp b/engines/toon/audio.cpp
index 386d00ef77..592d1a7388 100644
--- a/engines/toon/audio.cpp
+++ b/engines/toon/audio.cpp
@@ -208,10 +208,8 @@ void AudioManager::stopCurrentVoice() {
void AudioManager::closeAudioPack(int32 id) {
- if(_audioPacks[id]) {
- delete _audioPacks[id];
- _audioPacks[id] = 0;
- }
+ delete _audioPacks[id];
+ _audioPacks[id] = NULL;
}
bool AudioManager::loadAudioPack(int32 id, Common::String indexFile, Common::String packFile) {
@@ -239,10 +237,6 @@ void AudioManager::stopMusic() {
if (_channels[1])
_channels[1]->stop(true);
}
-AudioStreamInstance::~AudioStreamInstance() {
- if (_man)
- _man->removeInstance(this);
-}
AudioStreamInstance::AudioStreamInstance(AudioManager *man, Audio::Mixer *mixer, Common::SeekableReadStream *stream , bool looping) {
_compBufferSize = 0;
@@ -274,6 +268,11 @@ AudioStreamInstance::AudioStreamInstance(AudioManager *man, Audio::Mixer *mixer,
}
}
+AudioStreamInstance::~AudioStreamInstance() {
+ if (_man)
+ _man->removeInstance(this);
+}
+
int AudioStreamInstance::readBuffer(int16 *buffer, const int numSamples) {
debugC(5, kDebugAudio, "readBuffer(buffer, %d)", numSamples);
diff --git a/engines/toon/audio.h b/engines/toon/audio.h
index e0676c2992..dec731e78d 100644
--- a/engines/toon/audio.h
+++ b/engines/toon/audio.h
@@ -124,7 +124,7 @@ public:
void removeInstance(AudioStreamInstance *inst); // called by destructor
AudioManager(ToonEngine *vm, Audio::Mixer *mixer);
- ~AudioManager(void);
+ ~AudioManager();
bool voiceStillPlaying();
diff --git a/engines/toon/character.cpp b/engines/toon/character.cpp
index 65c4135433..113054c1b8 100644
--- a/engines/toon/character.cpp
+++ b/engines/toon/character.cpp
@@ -33,17 +33,19 @@ namespace Toon {
Character::Character(ToonEngine *vm) : _vm(vm) {
_animationInstance = 0;
_shadowAnimationInstance = NULL;
- _shadowAnim = NULL;
_x = 0;
_y = 0;
_z = 0;
_finalX = 0;
_finalY = 0;
- _specialAnim = 0;
_sceneAnimationId = -1;
- _idleAnim = 0;
- _walkAnim = 0;
- _talkAnim = 0;
+
+ _walkAnim = NULL;
+ _idleAnim = NULL;
+ _talkAnim = NULL;
+ _shadowAnim = NULL;
+ _specialAnim = NULL;
+
_facing = 0;
_flags = 0;
_animFlags = 0;
@@ -65,11 +67,15 @@ Character::Character(ToonEngine *vm) : _vm(vm) {
Character::~Character(void) {
delete _shadowAnimationInstance;
+
+ delete _walkAnim;
+ delete _idleAnim;
+ delete _talkAnim;
delete _shadowAnim;
+ delete _specialAnim;
}
void Character::init() {
-
}
void Character::setFacing(int32 facing) {
@@ -204,27 +210,21 @@ int32 Character::getFacing() {
bool Character::loadWalkAnimation(Common::String animName) {
debugC(1, kDebugCharacter, "loadWalkAnimation(%s)", animName.c_str());
- if (_walkAnim)
- delete _walkAnim;
-
+ delete _walkAnim;
_walkAnim = new Animation(_vm);
return _walkAnim->loadAnimation(animName);
}
bool Character::loadIdleAnimation(Common::String animName) {
debugC(1, kDebugCharacter, "loadIdleAnimation(%s)", animName.c_str());
- if (_idleAnim)
- delete _idleAnim;
-
+ delete _idleAnim;
_idleAnim = new Animation(_vm);
return _idleAnim->loadAnimation(animName);
}
bool Character::loadTalkAnimation(Common::String animName) {
debugC(1, kDebugCharacter, "loadTalkAnimation(%s)", animName.c_str());
- if (_talkAnim)
- delete _talkAnim;
-
+ delete _talkAnim;
_talkAnim = new Animation(_vm);
return _talkAnim->loadAnimation(animName);
}
@@ -234,7 +234,6 @@ bool Character::setupPalette() {
}
void Character::playStandingAnim() {
-
}
void Character::updateTimers(int32 relativeAdd) {
@@ -247,7 +246,7 @@ void Character::stopSpecialAnim() {
// Strangerke - Commented (not used)
#if 0
if (_animSpecialId != _animSpecialDefaultId)
- delete anim
+ delete anim;
#endif
if (_animScriptId != -1)
_vm->getSceneAnimationScript(_animScriptId)->_frozenForConversation = false;
@@ -983,8 +982,7 @@ void Character::playAnim(int32 animId, int32 unused, int32 flags) {
_animFlags |= flags;
- if (_specialAnim)
- delete _specialAnim;
+ delete _specialAnim;
_specialAnim = new Animation(_vm);
_specialAnim->loadAnimation(animName);
diff --git a/engines/toon/character.h b/engines/toon/character.h
index 43636b8eb5..9e293875ab 100644
--- a/engines/toon/character.h
+++ b/engines/toon/character.h
@@ -53,7 +53,7 @@ struct SpecialCharacterAnimation {
class Character {
public:
Character(ToonEngine *vm);
- virtual ~Character(void);
+ virtual ~Character();
virtual void init();
virtual int32 getId();
virtual void setId(int32 id);
diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp
index 4221c5da8b..e44d7bc8f2 100644
--- a/engines/toon/toon.cpp
+++ b/engines/toon/toon.cpp
@@ -656,8 +656,6 @@ bool ToonEngine::showMainmenu(bool &loadedGame) {
musicPlaying = false;
}
-
-
switch (clickingOn) {
case MAINMENUHOTSPOT_START:
// Start game (actually exit main menu)
@@ -686,6 +684,11 @@ bool ToonEngine::showMainmenu(bool &loadedGame) {
}
}
+ //delete mainmenuMusic;
+ for (int entryNr = 0; entryNr < MAINMENU_ENTRYCOUNT; entryNr++)
+ delete entries[entryNr].animation;
+ delete mainmenuPicture;
+
return !exitGame;
}
@@ -756,6 +759,17 @@ ToonEngine::ToonEngine(OSystem *syst, const ADGameDescription *gameDescription)
_moviePlayer = NULL;
_mainSurface = NULL;
+
+ _finalPalette = NULL;
+ _backupPalette = NULL;
+ _additionalPalette1 = NULL;
+ _additionalPalette2 = NULL;
+ _cutawayPalette = NULL;
+ _universalPalette = NULL;
+ _fluxPalette = NULL;
+
+ _conversationData = NULL;
+
_fontRenderer = NULL;
_fontToon = NULL;
_fontEZ = NULL;
@@ -764,6 +778,7 @@ ToonEngine::ToonEngine(OSystem *syst, const ADGameDescription *gameDescription)
_roomTexts = NULL;
_script_func = NULL;
_script = NULL;
+ _pathFinding = NULL;
_console = new ToonConsole(this);
switch (_language) {
@@ -795,6 +810,16 @@ ToonEngine::~ToonEngine() {
delete _moviePlayer;
delete _mainSurface;
+ delete[] _finalPalette;
+ delete[] _backupPalette;
+ delete[] _additionalPalette1;
+ delete[] _additionalPalette2;
+ delete[] _cutawayPalette;
+ delete[] _universalPalette;
+ delete[] _fluxPalette;
+
+ delete[] _conversationData;
+
delete _fontRenderer;
delete _fontToon;
delete _fontEZ;
@@ -804,6 +829,8 @@ ToonEngine::~ToonEngine() {
delete _script_func;
delete _script;
+ delete _pathFinding;
+
DebugMan.clearAllDebugChannels();
delete _console;
}