[Scummvm-cvs-logs] SF.net SVN: scummvm:[49644] scummvm/trunk/engines/m4

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Mon Jun 14 07:27:54 CEST 2010


Revision: 49644
          http://scummvm.svn.sourceforge.net/scummvm/?rev=49644&view=rev
Author:   dreammaster
Date:     2010-06-14 05:27:54 +0000 (Mon, 14 Jun 2010)

Log Message:
-----------
Further memory leak fixes reported by Valgrind

Modified Paths:
--------------
    scummvm/trunk/engines/m4/animation.cpp
    scummvm/trunk/engines/m4/events.cpp
    scummvm/trunk/engines/m4/events.h
    scummvm/trunk/engines/m4/globals.cpp
    scummvm/trunk/engines/m4/globals.h
    scummvm/trunk/engines/m4/m4.cpp
    scummvm/trunk/engines/m4/m4.h
    scummvm/trunk/engines/m4/mads_menus.cpp
    scummvm/trunk/engines/m4/scene.cpp
    scummvm/trunk/engines/m4/sound.cpp
    scummvm/trunk/engines/m4/sound.h

Modified: scummvm/trunk/engines/m4/animation.cpp
===================================================================
--- scummvm/trunk/engines/m4/animation.cpp	2010-06-14 04:20:57 UTC (rev 49643)
+++ scummvm/trunk/engines/m4/animation.cpp	2010-06-14 05:27:54 UTC (rev 49644)
@@ -328,7 +328,6 @@
 
 	// Handle starting any sound for this frame
 	AnimMiscEntry &misc = _miscEntries[_currentFrame];
-printf("frame %d delay %d\n", _currentFrame, misc.numTicks);
 	if (misc.soundNum)
 		_vm->_sound->playSound(misc.soundNum);
 

Modified: scummvm/trunk/engines/m4/events.cpp
===================================================================
--- scummvm/trunk/engines/m4/events.cpp	2010-06-14 04:20:57 UTC (rev 49643)
+++ scummvm/trunk/engines/m4/events.cpp	2010-06-14 05:27:54 UTC (rev 49644)
@@ -57,6 +57,10 @@
 		_console = new MadsConsole(_madsVm);
 }
 
+Events::~Events() {
+	delete _console;
+}
+
 M4EventType Events::handleEvents() {
 	static int oldX = -1, oldY = -1;
 	static uint32 dclickTime = 0;

Modified: scummvm/trunk/engines/m4/events.h
===================================================================
--- scummvm/trunk/engines/m4/events.h	2010-06-14 04:20:57 UTC (rev 49643)
+++ scummvm/trunk/engines/m4/events.h	2010-06-14 05:27:54 UTC (rev 49644)
@@ -78,6 +78,7 @@
 public:
 	bool quitFlag;
 	Events(MadsM4Engine *vm);
+	virtual ~Events();
 
 	Common::Event &event() { return _event; }
 	Common::EventType type() { return _event.type; }

Modified: scummvm/trunk/engines/m4/globals.cpp
===================================================================
--- scummvm/trunk/engines/m4/globals.cpp	2010-06-14 04:20:57 UTC (rev 49643)
+++ scummvm/trunk/engines/m4/globals.cpp	2010-06-14 05:27:54 UTC (rev 49644)
@@ -351,16 +351,16 @@
 	//printf("%i messages\n", count);
 
 	for (int i = 0; i < count; i++) {
-		MessageItem *curMessage = new MessageItem();
-		curMessage->id = messageS->readUint32LE();
-		curMessage->offset = messageS->readUint32LE();
-		curMessage->uncompSize = messageS->readUint16LE();
+		MessageItem curMessage;
+		curMessage.id = messageS->readUint32LE();
+		curMessage.offset = messageS->readUint32LE();
+		curMessage.uncompSize = messageS->readUint16LE();
 
 		if (i > 0)
-			_madsMessages[i - 1]->compSize = curMessage->offset - _madsMessages[i - 1]->offset;
+			_madsMessages[i - 1].compSize = curMessage.offset - _madsMessages[i - 1].offset;
 
 		if (i == count - 1)
-			curMessage->compSize = messageS->size() - curMessage->offset;
+			curMessage.compSize = messageS->size() - curMessage.offset;
 
 		//printf("id: %i, offset: %i, uncomp size: %i\n", curMessage->id, curMessage->offset, curMessage->uncompSize);
 		_madsMessages.push_back(curMessage);
@@ -382,7 +382,7 @@
 int MadsGlobals::messageIndexOf(uint32 messageId) {
 	for (uint i = 0; i < _madsMessages.size(); ++i)
 	{
-		if (_madsMessages[i]->id == messageId)
+		if (_madsMessages[i].id == messageId)
 			return i;
 	}
 	return -1;
@@ -395,15 +395,15 @@
 	}
 
 	FabDecompressor fab;
-	byte *compData = new byte[_madsMessages[index]->compSize];
-	byte *buffer = new byte[_madsMessages[index]->uncompSize];
+	byte *compData = new byte[_madsMessages[index].compSize];
+	byte *buffer = new byte[_madsMessages[index].uncompSize];
 
 	Common::SeekableReadStream *messageS = _vm->res()->get("messages.dat");
-	messageS->seek(_madsMessages[index]->offset, SEEK_SET);
-	messageS->read(compData, _madsMessages[index]->compSize);
-	fab.decompress(compData, _madsMessages[index]->compSize, buffer, _madsMessages[index]->uncompSize);
+	messageS->seek(_madsMessages[index].offset, SEEK_SET);
+	messageS->read(compData, _madsMessages[index].compSize);
+	fab.decompress(compData, _madsMessages[index].compSize, buffer, _madsMessages[index].uncompSize);
 
-	for (int i = 0; i < _madsMessages[index]->uncompSize - 1; i++)
+	for (int i = 0; i < _madsMessages[index].uncompSize - 1; i++)
 		if (buffer[i] == '\0') buffer[i] = '\n';
 
 	_vm->res()->toss("messages.dat");

Modified: scummvm/trunk/engines/m4/globals.h
===================================================================
--- scummvm/trunk/engines/m4/globals.h	2010-06-14 04:20:57 UTC (rev 49643)
+++ scummvm/trunk/engines/m4/globals.h	2010-06-14 05:27:54 UTC (rev 49644)
@@ -235,7 +235,7 @@
 	MadsEngine *_vm;
 	Common::Array<char* > _madsVocab;
 	Common::Array<char* > _madsQuotes;
-	Common::Array<MessageItem* > _madsMessages;
+	Common::Array<MessageItem> _madsMessages;
 	MadsObjectArray _madsObjects;
 	Common::List<int> _visitedScenes;
 public:

Modified: scummvm/trunk/engines/m4/m4.cpp
===================================================================
--- scummvm/trunk/engines/m4/m4.cpp	2010-06-14 04:20:57 UTC (rev 49643)
+++ scummvm/trunk/engines/m4/m4.cpp	2010-06-14 05:27:54 UTC (rev 49644)
@@ -148,6 +148,7 @@
 	delete _palette;
 	delete _globals;
 	delete _sound;
+	delete _driver;
 	delete _resourceManager;
 }
 
@@ -158,11 +159,11 @@
 	MidiDriverType midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);
 	bool native_mt32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));
 
-	MidiDriver *driver = MidiDriver::createMidi(midiDriver);
+	_driver = MidiDriver::createMidi(midiDriver);
 	if (native_mt32)
-		driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
+		_driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
 
-	_midi = new MidiPlayer(this, driver);
+	_midi = new MidiPlayer(this, _driver);
 	_midi->setGM(true);
 	_midi->setNativeMT32(native_mt32);
 
@@ -513,7 +514,6 @@
 	// Set up needed common functionality
 	MadsM4Engine::run();
 
-	_scene = new MadsScene(this);
 	_palette->setMadsSystemPalette();
 
 	_mouse->init("cursor.ss", NULL);
@@ -538,9 +538,12 @@
 	//printf("%s\n----------\n", _globals->loadMessage(i));
 
 	if ((getGameType() == GType_RexNebular) || (getGameType() == GType_DragonSphere)) {
+		_scene = NULL;
 		loadMenu(MAIN_MENU);
 
 	} else {
+		_scene = new MadsScene(this);
+
 		if (getGameType() == GType_DragonSphere) {
 			_scene->loadScene(FIRST_SCENE);
 		} else if (getGameType() == GType_Phantom) {

Modified: scummvm/trunk/engines/m4/m4.h
===================================================================
--- scummvm/trunk/engines/m4/m4.h	2010-06-14 04:20:57 UTC (rev 49643)
+++ scummvm/trunk/engines/m4/m4.h	2010-06-14 05:27:54 UTC (rev 49644)
@@ -29,6 +29,7 @@
 #include "common/scummsys.h"
 #include "common/util.h"
 #include "common/random.h"
+#include "sound/mididrv.h"
 
 #include "engines/engine.h"
 
@@ -123,7 +124,7 @@
 
 struct M4GameDescription;
 
-#define GAME_FRAME_DELAY 50
+#define GAME_FRAME_DELAY 20
 
 #define VALIDATE_MADS assert(!_vm->isM4())
 
@@ -144,6 +145,7 @@
 
 	void shutdown();
 
+	MidiDriver *_driver;
 	MidiPlayer *_midi;
 
 public:
@@ -219,6 +221,12 @@
 
 	MadsGlobals *globals() { return (MadsGlobals *)_globals; }
 	MadsScene *scene() { return (MadsScene *)_scene; }
+	void startScene(int sceneNum) {
+		if (!_scene)
+			_scene = new MadsScene(this);
+		_scene->show();
+		_scene->loadScene(101);
+	}
 };
 
 class M4Engine : public MadsM4Engine {

Modified: scummvm/trunk/engines/m4/mads_menus.cpp
===================================================================
--- scummvm/trunk/engines/m4/mads_menus.cpp	2010-06-14 04:20:57 UTC (rev 49643)
+++ scummvm/trunk/engines/m4/mads_menus.cpp	2010-06-14 05:27:54 UTC (rev 49644)
@@ -293,7 +293,7 @@
 }
 
 void RexMainMenuView::handleAction(MadsGameAction action) {
-	MadsM4Engine *vm = _vm;
+	MadsEngine *vm = (MadsEngine *)_vm;
 	vm->_mouse->cursorOff();
 	vm->_viewManager->deleteView(this);
 
@@ -303,8 +303,7 @@
 		// Load a sample starting scene - note that, currently, calling loadScene automatically
 		// removes this menu screen from being displayed
 		vm->_mouse->cursorOn();
-		vm->_scene->show();
-		vm->_scene->loadScene(101);
+		vm->startScene(101);
 		return;
 
 	case SHOW_INTRO:
@@ -325,7 +324,7 @@
 
 			// Activate the scene display with the specified scene
 			bool altAdvert = vm->_random->getRandomNumber(1000) >= 500;
-			vm->_scene->loadScene(altAdvert ? 995 : 996);
+			vm->startScene(altAdvert ? 995 : 996);
 			vm->_viewManager->addView(vm->_scene);
 
 			vm->_viewManager->refreshAll();

Modified: scummvm/trunk/engines/m4/scene.cpp
===================================================================
--- scummvm/trunk/engines/m4/scene.cpp	2010-06-14 04:20:57 UTC (rev 49643)
+++ scummvm/trunk/engines/m4/scene.cpp	2010-06-14 05:27:54 UTC (rev 49644)
@@ -55,6 +55,7 @@
 
 Scene::~Scene() {
 	leaveScene();
+	_vm->_scene = NULL;
 }
 
 void Scene::loadScene(int sceneNumber) {

Modified: scummvm/trunk/engines/m4/sound.cpp
===================================================================
--- scummvm/trunk/engines/m4/sound.cpp	2010-06-14 04:20:57 UTC (rev 49643)
+++ scummvm/trunk/engines/m4/sound.cpp	2010-06-14 05:27:54 UTC (rev 49644)
@@ -197,20 +197,20 @@
 	//printf("DSR has %i entries\n", _dsrFile.entryCount);
 
 	for (int i = 0; i < _dsrFile.entryCount; i++) {
-		DSREntry* newEntry = new DSREntry();
-		newEntry->frequency = fileStream->readUint16LE();
-		newEntry->channels = fileStream->readUint32LE();
-		newEntry->compSize = fileStream->readUint32LE();
-		newEntry->uncompSize = fileStream->readUint32LE();
-		newEntry->offset = fileStream->readUint32LE();
+		DSREntry newEntry;
+		newEntry.frequency = fileStream->readUint16LE();
+		newEntry.channels = fileStream->readUint32LE();
+		newEntry.compSize = fileStream->readUint32LE();
+		newEntry.uncompSize = fileStream->readUint32LE();
+		newEntry.offset = fileStream->readUint32LE();
 		_dsrFile.dsrEntries.push_back(newEntry);
 
 		/*
 		printf("%i: ", i);
 		printf("frequency: %i ", newEntry->frequency);
 		printf("channels: %i ", newEntry->channels);
-		printf("comp: %i ", newEntry->compSize);
-		printf("uncomp: %i ", newEntry->uncompSize);
+		printf("comp: %i ", newEntry.compSize);
+		printf("uncomp: %i ", newEntry.uncompSize);
 		printf("offset: %i ", newEntry->offset);
 		printf("\n");
 		*/
@@ -225,9 +225,7 @@
 	if (!_dsrFileLoaded)
 		return;
 
-	for (int i = 0; i < _dsrFile.entryCount; i++) {
-		_dsrFile.dsrEntries.remove_at(0);
-	}
+	_dsrFile.dsrEntries.clear();
 
 	_dsrFile.entryCount = 0;
 	strcpy(_dsrFile.fileName, "");
@@ -251,28 +249,28 @@
 
 	// Get sound data
 	FabDecompressor fab;
-	byte *compData = new byte[_dsrFile.dsrEntries[soundIndex]->compSize];
-	byte *buffer = new byte[_dsrFile.dsrEntries[soundIndex]->uncompSize];
+	byte *compData = new byte[_dsrFile.dsrEntries[soundIndex].compSize];
+	byte *buffer = new byte[_dsrFile.dsrEntries[soundIndex].uncompSize];
 	Common::SeekableReadStream *fileStream = _vm->res()->get(_dsrFile.fileName);
-	fileStream->seek(_dsrFile.dsrEntries[soundIndex]->offset, SEEK_SET);
-	fileStream->read(compData, _dsrFile.dsrEntries[soundIndex]->compSize);
+	fileStream->seek(_dsrFile.dsrEntries[soundIndex].offset, SEEK_SET);
+	fileStream->read(compData, _dsrFile.dsrEntries[soundIndex].compSize);
 	_vm->res()->toss(_dsrFile.fileName);
 
-	fab.decompress(compData, _dsrFile.dsrEntries[soundIndex]->compSize,
-				   buffer, _dsrFile.dsrEntries[soundIndex]->uncompSize);
+	fab.decompress(compData, _dsrFile.dsrEntries[soundIndex].compSize,
+				   buffer, _dsrFile.dsrEntries[soundIndex].uncompSize);
 
 	// Play sound
 	Audio::AudioStream *stream = Audio::makeLoopingAudioStream(
 				Audio::makeRawStream(buffer,
-					_dsrFile.dsrEntries[soundIndex]->uncompSize,
-					_dsrFile.dsrEntries[soundIndex]->frequency, Audio::FLAG_UNSIGNED),
+					_dsrFile.dsrEntries[soundIndex].uncompSize,
+					_dsrFile.dsrEntries[soundIndex].frequency, Audio::FLAG_UNSIGNED),
 				loop ? 0 : 1);
 	_mixer->playStream(Audio::Mixer::kSFXSoundType, &handle->handle, stream, -1, volume);
 
 	/*
 	// Dump the sound file
 	FILE *destFile = fopen("sound.raw", "wb");
-	fwrite(_dsrFile.dsrEntries[soundIndex]->data, _dsrFile.dsrEntries[soundIndex]->uncompSize, 1, destFile);
+	fwrite(_dsrFile.dsrEntries[soundIndex]->data, _dsrFile.dsrEntries[soundIndex].uncompSize, 1, destFile);
 	fclose(destFile);
 	*/
 }

Modified: scummvm/trunk/engines/m4/sound.h
===================================================================
--- scummvm/trunk/engines/m4/sound.h	2010-06-14 04:20:57 UTC (rev 49643)
+++ scummvm/trunk/engines/m4/sound.h	2010-06-14 05:27:54 UTC (rev 49644)
@@ -65,7 +65,7 @@
 struct DSRFile {
 	char fileName[20];
 	int entryCount;
-	Common::Array<DSREntry *> dsrEntries;
+	Common::Array<DSREntry> dsrEntries;
 };
 
 class MadsM4Engine;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list