[Scummvm-cvs-logs] SF.net SVN: scummvm: [31948] scummvm/trunk/engines/made

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Thu May 8 15:23:03 CEST 2008


Revision: 31948
          http://scummvm.svn.sourceforge.net/scummvm/?rev=31948&view=rev
Author:   thebluegr
Date:     2008-05-08 06:23:02 -0700 (Thu, 08 May 2008)

Log Message:
-----------
Fixed some game crashes which occurred when ProjectReader::purgeCache() got called:
- MIDI music data is marked to be deleted in o1_STOPMUS now, instead of o1_PLAYMUS. 
- Added a FIXME to Screen::setFont() - purgeCache crashes the game if the active font is deleted

Modified Paths:
--------------
    scummvm/trunk/engines/made/screen.cpp
    scummvm/trunk/engines/made/scriptfuncs.h
    scummvm/trunk/engines/made/scriptfuncs_lgop2.cpp
    scummvm/trunk/engines/made/scriptfuncs_mhne.cpp
    scummvm/trunk/engines/made/scriptfuncs_rtz.cpp

Modified: scummvm/trunk/engines/made/screen.cpp
===================================================================
--- scummvm/trunk/engines/made/screen.cpp	2008-05-08 13:17:18 UTC (rev 31947)
+++ scummvm/trunk/engines/made/screen.cpp	2008-05-08 13:23:02 UTC (rev 31948)
@@ -599,8 +599,10 @@
 void Screen::setFont(int16 fontNum) {
 	if (fontNum == _currentFontNum)
 		return;
-	if (_font)
-		_vm->_res->freeResource(_font);
+	// FIXME: this causes crashes when
+	// ProjectReader::purgeCache() is called
+	//if (_font)
+	//	_vm->_res->freeResource(_font);
 	_font = _vm->_res->getFont(fontNum);
 	_currentFontNum = fontNum;
 }

Modified: scummvm/trunk/engines/made/scriptfuncs.h
===================================================================
--- scummvm/trunk/engines/made/scriptfuncs.h	2008-05-08 13:17:18 UTC (rev 31947)
+++ scummvm/trunk/engines/made/scriptfuncs.h	2008-05-08 13:23:02 UTC (rev 31948)
@@ -31,6 +31,8 @@
 #include "common/func.h"
 #include "common/stream.h"
 
+#include "made/resource.h"
+
 namespace Made {
 
 class MadeEngine;
@@ -60,7 +62,7 @@
 
 	Common::Array<const ExternalFunc*> _externalFuncs;
 	Common::Array<const char *> _externalFuncNames;
-
+	GenericResource *_xmidiRes;
 };
 
 class ScriptFunctionsLgop2 : public ScriptFunctions {

Modified: scummvm/trunk/engines/made/scriptfuncs_lgop2.cpp
===================================================================
--- scummvm/trunk/engines/made/scriptfuncs_lgop2.cpp	2008-05-08 13:17:18 UTC (rev 31947)
+++ scummvm/trunk/engines/made/scriptfuncs_lgop2.cpp	2008-05-08 13:23:02 UTC (rev 31948)
@@ -233,16 +233,18 @@
 	
 	int16 musicNum = argv[0];
 	if (musicNum > 0) {
-		GenericResource *midi = _vm->_res->getMidi(musicNum);
-		_vm->_music->playSMF(midi);
-		_vm->_res->freeResource(midi);
+		_xmidiRes = _vm->_res->getXmidi(musicNum);
+		_vm->_music->playXMIDI(_xmidiRes);
 	}
 	*/
 	return 0;
 }
 
 int16 ScriptFunctionsLgop2::o1_STOPMUS(int16 argc, int16 *argv) {
-	_vm->_music->stop();
+	if (_vm->_music->isPlaying()) {
+		_vm->_music->stop();
+		_vm->_res->freeResource(_xmidiRes);
+	}
 	return 0;
 }
 

Modified: scummvm/trunk/engines/made/scriptfuncs_mhne.cpp
===================================================================
--- scummvm/trunk/engines/made/scriptfuncs_mhne.cpp	2008-05-08 13:17:18 UTC (rev 31947)
+++ scummvm/trunk/engines/made/scriptfuncs_mhne.cpp	2008-05-08 13:23:02 UTC (rev 31948)
@@ -233,15 +233,17 @@
 int16 ScriptFunctionsMhne::o1_PLAYMUS(int16 argc, int16 *argv) {
 	int16 musicNum = argv[0];
 	if (musicNum > 0) {
-		GenericResource *xmidi = _vm->_res->getXmidi(musicNum);
-		_vm->_music->playXMIDI(xmidi);
-		_vm->_res->freeResource(xmidi);
+		_xmidiRes = _vm->_res->getXmidi(musicNum);
+		_vm->_music->playXMIDI(_xmidiRes);
 	}
 	return 0;
 }
 
 int16 ScriptFunctionsMhne::o1_STOPMUS(int16 argc, int16 *argv) {
-	_vm->_music->stop();
+	if (_vm->_music->isPlaying()) {
+		_vm->_music->stop();
+		_vm->_res->freeResource(_xmidiRes);
+	}
 	return 0;
 }
 

Modified: scummvm/trunk/engines/made/scriptfuncs_rtz.cpp
===================================================================
--- scummvm/trunk/engines/made/scriptfuncs_rtz.cpp	2008-05-08 13:17:18 UTC (rev 31947)
+++ scummvm/trunk/engines/made/scriptfuncs_rtz.cpp	2008-05-08 13:23:02 UTC (rev 31948)
@@ -276,15 +276,17 @@
 int16 ScriptFunctionsRtz::o1_PLAYMUS(int16 argc, int16 *argv) {
 	int16 musicNum = argv[0];
 	if (musicNum > 0) {
-		GenericResource *xmidi = _vm->_res->getXmidi(musicNum);
-		_vm->_music->playXMIDI(xmidi);
-		_vm->_res->freeResource(xmidi);
+		_xmidiRes = _vm->_res->getXmidi(musicNum);
+		_vm->_music->playXMIDI(_xmidiRes);		
 	}
 	return 0;
 }
 
 int16 ScriptFunctionsRtz::o1_STOPMUS(int16 argc, int16 *argv) {
-	_vm->_music->stop();
+	if (_vm->_music->isPlaying()) {
+		_vm->_music->stop();
+		_vm->_res->freeResource(_xmidiRes);
+	}
 	return 0;
 }
 


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