[Scummvm-cvs-logs] SF.net SVN: scummvm:[41055] scummvm/trunk/engines/kyra

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Sun May 31 03:24:08 CEST 2009


Revision: 41055
          http://scummvm.svn.sourceforge.net/scummvm/?rev=41055&view=rev
Author:   athrxx
Date:     2009-05-31 01:24:08 +0000 (Sun, 31 May 2009)

Log Message:
-----------
LOL: - fix shape memory allocation/release issue

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/lol.cpp
    scummvm/trunk/engines/kyra/sprites_lol.cpp

Modified: scummvm/trunk/engines/kyra/lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/lol.cpp	2009-05-31 01:11:06 UTC (rev 41054)
+++ scummvm/trunk/engines/kyra/lol.cpp	2009-05-31 01:24:08 UTC (rev 41055)
@@ -314,22 +314,13 @@
 		delete[] _healiShapes;
 	}
 
-	if (_monsterShapes) {
-		for (int i = 0; i < 48; i++)
-			delete[]  _monsterShapes[i];
-		delete[] _monsterShapes;
-	}
-	if (_monsterPalettes) {
-		for (int i = 0; i < 48; i++)
-			delete[]  _monsterPalettes[i];
-		delete[] _monsterPalettes;
-	}
-	if (_monsterShapesEx) {
-		for (int i = 0; i < 576; i++)
-			delete[]  _monsterShapesEx[i];
-		delete[] _monsterShapesEx;
-	}
+	for (int i = 0; i < 3; i++)
+		releaseMonsterShapes(i);
 
+	delete[] _monsterShapes;
+	delete[] _monsterPalettes;	
+	delete[] _monsterShapesEx;
+
 	if (_automapShapes)
 		delete[] _automapShapes;
 

Modified: scummvm/trunk/engines/kyra/sprites_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sprites_lol.cpp	2009-05-31 01:11:06 UTC (rev 41054)
+++ scummvm/trunk/engines/kyra/sprites_lol.cpp	2009-05-31 01:24:08 UTC (rev 41055)
@@ -123,9 +123,14 @@
 void LoLEngine::releaseMonsterShapes(int monsterIndex) {
 	for (int i = 0; i < 16; i++) {
 		int pos = (monsterIndex << 4) + i;
+		int pos2 = (monsterIndex << 4) + 16;
 		if (_monsterShapes[pos]) {
+			uint8 *t = _monsterShapes[pos];
 			delete[] _monsterShapes[pos];
-			_monsterShapes[pos] = 0;
+			for (int ii = pos; ii < pos2; ii++) {
+				if (_monsterShapes[ii] == t)
+					_monsterShapes[ii] = 0;
+			}			
 		}
 
 		if (_monsterPalettes[pos]) {
@@ -133,6 +138,14 @@
 			_monsterPalettes[pos] = 0;
 		}
 	}
+
+	for (int i = 0; i < 192; i++) {
+		int pos = (monsterIndex * 192) + i;
+		if (_monsterShapesEx[pos]) {
+			delete[] _monsterShapesEx[pos];
+			_monsterShapesEx[pos] = 0;			
+		}
+	}
 }
 
 int LoLEngine::deleteMonstersFromBlock(int block) {


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