SAGA: Fixed memory leaks in the SAGA engine
svn-id: r32673
This commit is contained in:
parent
e86a422e25
commit
dd423f803b
10 changed files with 37 additions and 4 deletions
|
@ -55,6 +55,7 @@ Anim::Anim(SagaEngine *vm) : _vm(vm) {
|
||||||
|
|
||||||
Anim::~Anim(void) {
|
Anim::~Anim(void) {
|
||||||
reset();
|
reset();
|
||||||
|
freeCutawayList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Anim::loadCutawayList(const byte *resourcePointer, size_t resourceLength) {
|
void Anim::loadCutawayList(const byte *resourcePointer, size_t resourceLength) {
|
||||||
|
|
|
@ -63,6 +63,8 @@ Font::~Font(void) {
|
||||||
|
|
||||||
free(_fonts[i]);
|
free(_fonts[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(_fonts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -334,7 +334,21 @@ Interface::Interface(SagaEngine *vm) : _vm(vm) {
|
||||||
Interface::~Interface(void) {
|
Interface::~Interface(void) {
|
||||||
free(_inventory);
|
free(_inventory);
|
||||||
|
|
||||||
|
free(_mainPanel.image);
|
||||||
|
free(_conversePanel.image);
|
||||||
|
free(_optionPanel.image);
|
||||||
|
free(_quitPanel.image);
|
||||||
|
free(_loadPanel.image);
|
||||||
|
free(_savePanel.image);
|
||||||
|
|
||||||
_mainPanel.sprites.freeMem();
|
_mainPanel.sprites.freeMem();
|
||||||
|
_conversePanel.sprites.freeMem();
|
||||||
|
_optionPanel.sprites.freeMem();
|
||||||
|
_quitPanel.sprites.freeMem();
|
||||||
|
_loadPanel.sprites.freeMem();
|
||||||
|
_savePanel.sprites.freeMem();
|
||||||
|
_protectPanel.sprites.freeMem();
|
||||||
|
|
||||||
_defPortraits.freeMem();
|
_defPortraits.freeMem();
|
||||||
_scenePortraits.freeMem();
|
_scenePortraits.freeMem();
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,7 +112,11 @@ struct InterfacePanel {
|
||||||
buttonsCount = 0;
|
buttonsCount = 0;
|
||||||
buttons = NULL;
|
buttons = NULL;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
~InterfacePanel() {
|
||||||
|
sprites.freeMem();
|
||||||
|
}
|
||||||
|
*/
|
||||||
PanelButton *getButton(int index) {
|
PanelButton *getButton(int index) {
|
||||||
if ((index >= 0) && (index < buttonsCount)) {
|
if ((index >= 0) && (index < buttonsCount)) {
|
||||||
return &buttons[index];
|
return &buttons[index];
|
||||||
|
|
|
@ -132,6 +132,8 @@ void Scene::IHNMLoadCutaways() {
|
||||||
|
|
||||||
// Load the cutaways for the title screens
|
// Load the cutaways for the title screens
|
||||||
_vm->_anim->loadCutawayList(resourcePointer, resourceLength);
|
_vm->_anim->loadCutawayList(resourcePointer, resourceLength);
|
||||||
|
|
||||||
|
free(resourcePointer);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Scene::checkKey() {
|
bool Scene::checkKey() {
|
||||||
|
|
|
@ -769,6 +769,7 @@ void Resource::loadGlobalResources(int chapter, int actorsEntrance) {
|
||||||
_vm->_sprite->_mainSprites.freeMem();
|
_vm->_sprite->_mainSprites.freeMem();
|
||||||
_vm->_sprite->loadList(_metaResource.mainSpritesID, _vm->_sprite->_mainSprites);
|
_vm->_sprite->loadList(_metaResource.mainSpritesID, _vm->_sprite->_mainSprites);
|
||||||
|
|
||||||
|
|
||||||
_vm->_actor->loadObjList(_metaResource.objectCount, _metaResource.objectsResourceID);
|
_vm->_actor->loadObjList(_metaResource.objectCount, _metaResource.objectsResourceID);
|
||||||
|
|
||||||
_vm->_resource->loadResource(resourceContext, _metaResource.cutawayListResourceID, resourcePointer, resourceLength);
|
_vm->_resource->loadResource(resourceContext, _metaResource.cutawayListResourceID, resourcePointer, resourceLength);
|
||||||
|
@ -806,6 +807,7 @@ void Resource::loadGlobalResources(int chapter, int actorsEntrance) {
|
||||||
// The IHNM demo has a fixed music track and doesn't load a song table
|
// The IHNM demo has a fixed music track and doesn't load a song table
|
||||||
_vm->_music->setVolume(_vm->_musicVolume == 10 ? -1 : _vm->_musicVolume * 25, 1);
|
_vm->_music->setVolume(_vm->_musicVolume == 10 ? -1 : _vm->_musicVolume * 25, 1);
|
||||||
_vm->_music->play(3, MUSIC_LOOP);
|
_vm->_music->play(3, MUSIC_LOOP);
|
||||||
|
free(resourcePointer);
|
||||||
}
|
}
|
||||||
|
|
||||||
int voiceLUTResourceID = 0;
|
int voiceLUTResourceID = 0;
|
||||||
|
|
|
@ -79,6 +79,7 @@ SagaEngine::SagaEngine(OSystem *syst, const SAGAGameDescription *gameDesc)
|
||||||
_scene = NULL;
|
_scene = NULL;
|
||||||
_isoMap = NULL;
|
_isoMap = NULL;
|
||||||
_gfx = NULL;
|
_gfx = NULL;
|
||||||
|
_driver = NULL;
|
||||||
_console = NULL;
|
_console = NULL;
|
||||||
_render = NULL;
|
_render = NULL;
|
||||||
_music = NULL;
|
_music = NULL;
|
||||||
|
@ -133,6 +134,7 @@ SagaEngine::~SagaEngine() {
|
||||||
delete _render;
|
delete _render;
|
||||||
delete _music;
|
delete _music;
|
||||||
delete _sound;
|
delete _sound;
|
||||||
|
delete _driver;
|
||||||
delete _gfx;
|
delete _gfx;
|
||||||
delete _console;
|
delete _console;
|
||||||
|
|
||||||
|
@ -188,11 +190,11 @@ int SagaEngine::init() {
|
||||||
bool native_mt32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));
|
bool native_mt32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));
|
||||||
bool adlib = (midiDriver == MD_ADLIB);
|
bool adlib = (midiDriver == MD_ADLIB);
|
||||||
|
|
||||||
MidiDriver *driver = MidiDriver::createMidi(midiDriver);
|
_driver = MidiDriver::createMidi(midiDriver);
|
||||||
if (native_mt32)
|
if (native_mt32)
|
||||||
driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
|
_driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
|
||||||
|
|
||||||
_music = new Music(this, _mixer, driver, _musicVolume);
|
_music = new Music(this, _mixer, _driver, _musicVolume);
|
||||||
_music->setNativeMT32(native_mt32);
|
_music->setNativeMT32(native_mt32);
|
||||||
_music->setAdlib(adlib);
|
_music->setAdlib(adlib);
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "engines/engine.h"
|
#include "engines/engine.h"
|
||||||
|
|
||||||
#include "common/stream.h"
|
#include "common/stream.h"
|
||||||
|
#include "sound/mididrv.h"
|
||||||
|
|
||||||
#include "saga/gfx.h"
|
#include "saga/gfx.h"
|
||||||
#include "saga/list.h"
|
#include "saga/list.h"
|
||||||
|
@ -531,6 +532,7 @@ public:
|
||||||
SndRes *_sndRes;
|
SndRes *_sndRes;
|
||||||
Sound *_sound;
|
Sound *_sound;
|
||||||
Music *_music;
|
Music *_music;
|
||||||
|
MidiDriver *_driver;
|
||||||
Anim *_anim;
|
Anim *_anim;
|
||||||
Render *_render;
|
Render *_render;
|
||||||
IsoMap *_isoMap;
|
IsoMap *_isoMap;
|
||||||
|
|
|
@ -150,6 +150,7 @@ Script::~Script() {
|
||||||
debug(8, "Shutting down scripting subsystem.");
|
debug(8, "Shutting down scripting subsystem.");
|
||||||
|
|
||||||
_mainStrings.freeMem();
|
_mainStrings.freeMem();
|
||||||
|
_globalVoiceLUT.freeMem();
|
||||||
|
|
||||||
freeModules();
|
freeModules();
|
||||||
free(_modules);
|
free(_modules);
|
||||||
|
|
|
@ -74,6 +74,9 @@ Sprite::Sprite(SagaEngine *vm) : _vm(vm) {
|
||||||
Sprite::~Sprite(void) {
|
Sprite::~Sprite(void) {
|
||||||
debug(8, "Shutting down sprite subsystem...");
|
debug(8, "Shutting down sprite subsystem...");
|
||||||
_mainSprites.freeMem();
|
_mainSprites.freeMem();
|
||||||
|
_inventorySprites.freeMem();
|
||||||
|
_arrowSprites.freeMem();
|
||||||
|
_saveReminderSprites.freeMem();
|
||||||
free(_decodeBuf);
|
free(_decodeBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue