[Scummvm-git-logs] scummvm master -> eeef4158096a2fe59274b2b86eaf7693bf64cde6

a-yyg 76591232+a-yyg at users.noreply.github.com
Sun Jul 18 06:38:51 UTC 2021


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
bd93759120 SAGA2: Fix memory leak in Saga2Engine
eeef415809 SAGA2: Fix global constructor warnings in tile.cpp


Commit: bd93759120e4e4a8e0de4ece06d821240a6b0bfc
    https://github.com/scummvm/scummvm/commit/bd93759120e4e4a8e0de4ece06d821240a6b0bfc
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-18T14:49:07+09:00

Commit Message:
SAGA2: Fix memory leak in Saga2Engine

Changed paths:
    engines/saga2/saga2.cpp


diff --git a/engines/saga2/saga2.cpp b/engines/saga2/saga2.cpp
index 9fdff1f1f2..83293e9eb8 100644
--- a/engines/saga2/saga2.cpp
+++ b/engines/saga2/saga2.cpp
@@ -108,6 +108,7 @@ Saga2Engine::~Saga2Engine() {
 	delete _pointer;
 	delete[] _activeRegionList;
 	delete _toolBase;
+	delete _properties;
 }
 
 Common::Error Saga2Engine::run() {


Commit: eeef4158096a2fe59274b2b86eaf7693bf64cde6
    https://github.com/scummvm/scummvm/commit/eeef4158096a2fe59274b2b86eaf7693bf64cde6
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-18T15:37:57+09:00

Commit Message:
SAGA2: Fix global constructor warnings in tile.cpp

Changed paths:
    engines/saga2/floating.cpp
    engines/saga2/idtypes.h
    engines/saga2/modal.cpp
    engines/saga2/playmode.cpp
    engines/saga2/saga2.cpp
    engines/saga2/saga2.h
    engines/saga2/sprite.cpp
    engines/saga2/tile.cpp
    engines/saga2/tile.h
    engines/saga2/tileload.cpp


diff --git a/engines/saga2/floating.cpp b/engines/saga2/floating.cpp
index 6ee205e0ed..b4b2d9a18e 100644
--- a/engines/saga2/floating.cpp
+++ b/engines/saga2/floating.cpp
@@ -55,7 +55,6 @@ void updateWindowSection(const Rect16 &r);
 //  These externs are imported because the window update routines
 //  need to know about the scrolling tile area.
 
-extern gPixelMap    tileDrawMap;
 extern StaticPoint16 fineScroll;
 extern gFont        *mainFont;
 extern bool         allPlayerActorsDead;
@@ -618,7 +617,7 @@ void updateWindowSection(const Rect16 &r) {
 	Point16         animOffset(kTileRectX - fineScroll.x, kTileRectY);
 
 	//  Detects that program is shutting down and aborts the blit
-	if (tileDrawMap.data == nullptr)
+	if (g_vm->_tileDrawMap.data == nullptr)
 		return;
 
 	if (!checkTileAreaPort()) return;
@@ -664,7 +663,7 @@ void updateWindowSection(const Rect16 &r) {
 
 		//  Blit the animated pixels into the temp map.
 
-		tempPort.bltPixels(tileDrawMap,
+		tempPort.bltPixels(g_vm->_tileDrawMap,
 		                   localOrg.x,
 		                   localOrg.y,
 		                   animClip.x, animClip.y,
diff --git a/engines/saga2/idtypes.h b/engines/saga2/idtypes.h
index c5b3be2415..0edf8a26eb 100644
--- a/engines/saga2/idtypes.h
+++ b/engines/saga2/idtypes.h
@@ -156,10 +156,6 @@ struct ActiveItemID {
 		return *this;
 	}
 
-	static int16 getVal(int16 m, int16 i) {
-		return (m << activeItemMapShift) | (i & activeItemIndexMask);
-	}
-
 	bool operator == (const ActiveItemID &id) const {
 		return val == id.val;
 	}
diff --git a/engines/saga2/modal.cpp b/engines/saga2/modal.cpp
index 1695f58a5a..d7ac63dd6f 100644
--- a/engines/saga2/modal.cpp
+++ b/engines/saga2/modal.cpp
@@ -33,8 +33,6 @@ namespace Saga2 {
 
 ModalWindow *mWinPtr;
 
-extern gPixelMap    tileDrawMap;
-
 APPFUNC(cmdModalWindow);
 
 void ModalModeSetup(void) {}
diff --git a/engines/saga2/playmode.cpp b/engines/saga2/playmode.cpp
index ee470a2e6c..d209c463c4 100644
--- a/engines/saga2/playmode.cpp
+++ b/engines/saga2/playmode.cpp
@@ -45,10 +45,7 @@ const int defaultStatusWait = 15;
    Imports
  * ===================================================================== */
 
-extern gPixelMap    tileDrawMap;
-extern gPort        tileDrawPort;
 extern BackWindow   *mainWindow;
-extern SpriteSet    *objectSprites;        // object sprites
 
 extern APPFUNC(cmdClickSpeech);
 extern StaticTextPallete genericTextPal;
@@ -139,19 +136,19 @@ extern bool gameRunning;
 //	Initialize the Play mode
 
 bool checkTileAreaPort(void) {
-	if (gameRunning && tileDrawMap.data == nullptr) {
+	if (gameRunning && g_vm->_tileDrawMap.data == nullptr) {
 		//  Allocate back buffer for tile rendering
-		tileDrawMap.size.x = (kTileRectWidth + kTileWidth - 1) & ~kTileDXMask;
-		tileDrawMap.size.y = (kTileRectHeight + kTileWidth - 1) & ~kTileDXMask;
-		tileDrawMap.data = new uint8[tileDrawMap.bytes()]();
+		g_vm->_tileDrawMap.size.x = (kTileRectWidth + kTileWidth - 1) & ~kTileDXMask;
+		g_vm->_tileDrawMap.size.y = (kTileRectHeight + kTileWidth - 1) & ~kTileDXMask;
+		g_vm->_tileDrawMap.data = new uint8[g_vm->_tileDrawMap.bytes()]();
 	}
 
-	return tileDrawMap.data != nullptr;
+	return g_vm->_tileDrawMap.data != nullptr;
 }
 
 void clearTileAreaPort(void) {
-	if (gameRunning && tileDrawMap.data != nullptr) {
-		_FillRect(tileDrawMap.data, tileDrawMap.size.x, tileDrawMap.size.x, tileDrawMap.size.y, 0);
+	if (gameRunning && g_vm->_tileDrawMap.data != nullptr) {
+		_FillRect(g_vm->_tileDrawMap.data, g_vm->_tileDrawMap.size.x, g_vm->_tileDrawMap.size.x, g_vm->_tileDrawMap.size.y, 0);
 	}
 
 	Rect16 rect(0, 0, 640, 480);
@@ -172,7 +169,7 @@ void PlayModeSetup(void) {
 	}
 
 	//  Setup the drawing port for the background map
-	g_vm->_backPort.setMap(&tileDrawMap);
+	g_vm->_backPort.setMap(&g_vm->_tileDrawMap);
 
 	//  Allocate bitmap for drag & drop mouse pointer
 	objPointerMap.size.x = objPointerMap.size.y = 32;
@@ -273,9 +270,9 @@ void PlayModeCleanup(void) {
 	CleanupUserControls();
 
 	//  Deallocate back buffer for tile rendering
-	if (tileDrawMap.data) {
-		delete[] tileDrawMap.data;
-		tileDrawMap.data = nullptr;
+	if (g_vm->_tileDrawMap.data) {
+		delete[] g_vm->_tileDrawMap.data;
+		g_vm->_tileDrawMap.data = nullptr;
 	}
 
 	if (objPointerMap.data) {
diff --git a/engines/saga2/saga2.cpp b/engines/saga2/saga2.cpp
index 83293e9eb8..73b6331c8a 100644
--- a/engines/saga2/saga2.cpp
+++ b/engines/saga2/saga2.cpp
@@ -86,6 +86,7 @@ Saga2Engine::Saga2Engine(OSystem *syst)
 	_activeRegionList = new ActiveRegion[kPlayerActors];
 	_toolBase = new gToolBase;
 	_properties = new Properties;
+	_aTaskList = new TileActivityTaskList;
 
 	_edpList = nullptr;
 	_sdpList = nullptr;
@@ -109,6 +110,7 @@ Saga2Engine::~Saga2Engine() {
 	delete[] _activeRegionList;
 	delete _toolBase;
 	delete _properties;
+	delete _aTaskList;
 }
 
 Common::Error Saga2Engine::run() {
diff --git a/engines/saga2/saga2.h b/engines/saga2/saga2.h
index 3b6a10596e..b766d1a314 100644
--- a/engines/saga2/saga2.h
+++ b/engines/saga2/saga2.h
@@ -69,6 +69,7 @@ class PlayerActor;
 class ProtoObj;
 class ActorProto;
 class HandleArray;
+class TileActivityTaskList;
 
 enum {
 	kDebugResources = 1 << 0,
@@ -152,9 +153,12 @@ public:
 	gToolBase *_toolBase;
 	Properties *_properties;
 	HandleArray *_tileImageBanks;
+	TileActivityTaskList *_aTaskList;
+
 
 	gDisplayPort _mainPort;
 	gPort _backPort;
+	gPixelMap _tileDrawMap;
 
 	bool _autoAggression;
 	bool _autoWeapon;
diff --git a/engines/saga2/sprite.cpp b/engines/saga2/sprite.cpp
index 20466ff7cf..0b40572e7d 100644
--- a/engines/saga2/sprite.cpp
+++ b/engines/saga2/sprite.cpp
@@ -51,12 +51,6 @@ extern void drawTileMask(
     TilePoint loc,
     uint16 roofID = rippedRoofID);
 
-/* ===================================================================== *
-   Imports
- * ===================================================================== */
-
-extern gPixelMap    tileDrawMap;
-
 //  Color map ranges
 extern uint8        *ColorMapRanges;
 
diff --git a/engines/saga2/tile.cpp b/engines/saga2/tile.cpp
index 3a33b350b2..d1da5f36e7 100644
--- a/engines/saga2/tile.cpp
+++ b/engines/saga2/tile.cpp
@@ -79,7 +79,7 @@ const int           slowScrollSpeed = 6,
 const StaticTilePoint Nowhere = {(int16)minint16, (int16)minint16, (int16)minint16};
 
 const StaticMetaTileID NoMetaTile = {nullID, nullID};
-const StaticActiveItemID  NoActiveItem = {ActiveItemID::getVal(0, activeItemIndexNullID)};
+const StaticActiveItemID  NoActiveItem = {activeItemIndexNullID};
 
 enum SurfaceType {
 	surfaceHoriz,               //  Level surface
@@ -160,12 +160,6 @@ extern int16        worldCount;     //  Used as map count as well
 
 extern ObjectID     viewCenterObject;       // ID of object that view tracks
 
-/* ===================================================================== *
-   Exports
- * ===================================================================== */
-
-gPixelMap           tileDrawMap;
-
 /* ===================================================================== *
    Tile structure management
  * ===================================================================== */
@@ -202,24 +196,16 @@ StaticTilePoint viewCenter = {0, 0, 0};             // coordinates of view on ma
 
 //  These two variables define which sectors overlap the view rect.
 
-TilePoint           minSector,
-                    maxSector;
-
 int16               currentMapNum;          // which map is in use
 int16               lastMapNum;
 
 int32               lastUpdateTime;         // time of last display update
 
-gPort               mouseSavePort;          // for tweaking mouse backsave
-
-
 /* also:
     -- height of center character
     -- what map we are on.
  */
 
-BankBits LoadedBanks;                // what banks are loaded?
-
 /* ===================================================================== *
    ActiveItemID member functions
  * ===================================================================== */
@@ -885,11 +871,6 @@ void cleanupActiveItemStates(void) {
    TileActivityTaskList member functions
  * ===================================================================== */
 
-//-----------------------------------------------------------------------
-//	The list of active tile activity tasks
-
-static TileActivityTaskList aTaskList;
-
 //-----------------------------------------------------------------------
 //	Constructor
 
@@ -1017,7 +998,7 @@ TileActivityTask *TileActivityTaskList::newTask(ActiveItem *activeInstance) {
 void TileActivityTask::remove(void) {
 	debugC(3, kDebugTasks, "Removing TAT");
 
-	aTaskList._list.remove(this);
+	g_vm->_aTaskList->_list.remove(this);
 }
 
 //-----------------------------------------------------------------------
@@ -1027,7 +1008,7 @@ void TileActivityTask::openDoor(ActiveItem &activeInstance) {
 	debugC(3, kDebugTasks, "TAT Open Door");
 
 	TileActivityTask *tat;
-	if ((tat = aTaskList.newTask(&activeInstance)) != nullptr)
+	if ((tat = g_vm->_aTaskList->newTask(&activeInstance)) != nullptr)
 		tat->activityType = activityTypeOpen;
 }
 
@@ -1038,7 +1019,7 @@ void TileActivityTask::closeDoor(ActiveItem &activeInstance) {
 	debugC(3, kDebugTasks, "TAT Close Door");
 
 	TileActivityTask *tat;
-	if ((tat = aTaskList.newTask(&activeInstance)) != nullptr)
+	if ((tat = g_vm->_aTaskList->newTask(&activeInstance)) != nullptr)
 		tat->activityType = activityTypeClose;
 }
 
@@ -1049,7 +1030,7 @@ void TileActivityTask::doScript(ActiveItem &activeInstance, uint8 finalState, Th
 	debugC(3, kDebugTasks, "TAT Do Script");
 
 	TileActivityTask *tat;
-	if ((tat = aTaskList.newTask(&activeInstance)) != nullptr) {
+	if ((tat = g_vm->_aTaskList->newTask(&activeInstance)) != nullptr) {
 		if (scr)
 			debugC(3, kDebugTasks, "TAT Assign Script!");
 
@@ -1069,7 +1050,7 @@ void TileActivityTask::doScript(ActiveItem &activeInstance, uint8 finalState, Th
 void TileActivityTask::updateActiveItems(void) {
 	int count = 0, scriptCount = 0;
 
-	for (Common::List<TileActivityTask *>::iterator it = aTaskList._list.begin(); it != aTaskList._list.end();) {
+	for (Common::List<TileActivityTask *>::iterator it = g_vm->_aTaskList->_list.begin(); it != g_vm->_aTaskList->_list.end();) {
 		TileActivityTask *tat = *it;
 		ActiveItem *activityInstance = tat->tai;
 		bool activityTaskDone = false;
@@ -1132,7 +1113,7 @@ void TileActivityTask::updateActiveItems(void) {
 //	Search for tile activity task matching an item
 
 TileActivityTask *TileActivityTask::find(ActiveItem *tai) {
-	for (Common::List<TileActivityTask *>::iterator it = aTaskList._list.begin(); it != aTaskList._list.end(); ++it) {
+	for (Common::List<TileActivityTask *>::iterator it = g_vm->_aTaskList->_list.begin(); it != g_vm->_aTaskList->_list.end(); ++it) {
 		if (tai == (*it)->tai)
 			return *it;
 	}
@@ -1182,7 +1163,7 @@ void saveTileTasks(Common::OutSaveFile *outS) {
 
 	outS->write("TACT", 4);
 	CHUNK_BEGIN;
-	aTaskList.write(out);
+	g_vm->_aTaskList->write(out);
 	CHUNK_END;
 }
 
@@ -1194,7 +1175,7 @@ void loadTileTasks(Common::InSaveFile *in, int32 chunkSize) {
 		return;
 
 	//  Reconstruct aTaskList from archived data
-	aTaskList.read(in);
+	g_vm->_aTaskList->read(in);
 }
 
 
@@ -1203,7 +1184,7 @@ void loadTileTasks(Common::InSaveFile *in, int32 chunkSize) {
 
 void cleanupTileTasks(void) {
 	//  Simply call the aTaskList's cleanup
-	aTaskList.cleanup();
+	g_vm->_aTaskList->cleanup();
 }
 
 /* ===================================================================== *
@@ -2519,7 +2500,7 @@ inline void drawMetaRow(TilePoint coords, Point16 pos) {
 	int16           layerLimit;
 
 	for (;
-	        pos.x < tileDrawMap.size.x + kMetaDX;
+	        pos.x < g_vm->_tileDrawMap.size.x + kMetaDX;
 	        coords.u++,
 	        coords.v--,
 	        uOrg += kPlatformWidth,
@@ -2586,7 +2567,7 @@ inline void drawMetaRow(TilePoint coords, Point16 pos) {
 				p->highestPixel = kTileHeight * (kPlatformWidth - 1) + kMaxTileHeight * 2 + 64;
 
 				if (pos.y <= 0
-				        || pos.y - p->highestPixel >= tileDrawMap.size.y)
+				        || pos.y - p->highestPixel >= g_vm->_tileDrawMap.size.y)
 					continue;
 
 				*put++ = p;
@@ -2822,7 +2803,7 @@ inline void drawMetaTiles(void) {
 	//      (replace 256 constant with better value)
 
 	for (;
-	        metaPos.y < tileDrawMap.size.y + kMetaTileHeight * 4 ;
+	        metaPos.y < g_vm->_tileDrawMap.size.y + kMetaTileHeight * 4 ;
 	        baseCoords.u--,
 	        baseCoords.v--
 	    ) {
@@ -4332,8 +4313,6 @@ void updateMainDisplay(void) {
 	int32           scrollSpeed = defaultScrollSpeed,
 	                scrollDistance;
 
-	int16           viewSize = kTileRectHeight;
-	int16           mapSectors = curMap->mapSize * 8 * 16 / kSectorSize;
 	TilePoint       trackPos,
 	                mCoords;
 
@@ -4396,11 +4375,6 @@ void updateMainDisplay(void) {
 
 	//  Compute the largest U/V rectangle which completely
 	//  encloses the view area, and convert to sector coords.
-	minSector.u = clamp(0, (viewCenter.u - viewSize) / kSectorSize, mapSectors - 1);
-	minSector.v = clamp(0, (viewCenter.v - viewSize) / kSectorSize, mapSectors - 1);
-	maxSector.u = clamp(0, (viewCenter.u + viewSize) / kSectorSize, mapSectors - 1);
-	maxSector.v = clamp(0, (viewCenter.v + viewSize) / kSectorSize, mapSectors - 1);
-
 	buildRoofTable();
 
 	mCoords.u = trackPos.u >> (kTileUVShift + kPlatShift);
@@ -4427,7 +4401,7 @@ void updateMainDisplay(void) {
 void drawMainDisplay(void) {
 
 
-	// draws tiles to tileDrawMap.data
+	// draws tiles to g_vm->_tileDrawMap.data
 	drawMetaTiles();
 
 	//  Draw sprites onto back buffer
@@ -4445,10 +4419,10 @@ void drawMainDisplay(void) {
 	//  Blit it all onto the screen
 	drawPage->writePixels(
 	    rect,
-	    tileDrawMap.data
+	    g_vm->_tileDrawMap.data
 	    + fineScroll.x
-	    + fineScroll.y * tileDrawMap.size.x,
-	    tileDrawMap.size.x);
+	    + fineScroll.y * g_vm->_tileDrawMap.size.x,
+	    g_vm->_tileDrawMap.size.x);
 
 	updateFrameCount();
 }
diff --git a/engines/saga2/tile.h b/engines/saga2/tile.h
index d55dfb2f12..d272ee670b 100644
--- a/engines/saga2/tile.h
+++ b/engines/saga2/tile.h
@@ -973,9 +973,6 @@ extern StaticTilePoint viewCenter;             // coordinates of view on map
 
 //  These two variables define which sectors overlap the view rect.
 
-extern TilePoint    minSector,
-       maxSector;
-
 extern uint16       rippedRoofID;
 
 /* ===================================================================== *
diff --git a/engines/saga2/tileload.cpp b/engines/saga2/tileload.cpp
index 9436fcb5f9..698c95cd25 100644
--- a/engines/saga2/tileload.cpp
+++ b/engines/saga2/tileload.cpp
@@ -40,7 +40,6 @@ const uint16 tileBankCount = 64;
 const uint32 tileImageID = MKTAG('T', 'I', 'L',  0);
 
 
-extern gPixelMap            tileDrawMap;
 extern int16                currentMapNum;
 extern hResource           *objResFile;
 extern hResContext          *tileRes;       // tile resource handle
@@ -70,8 +69,8 @@ void drawPlatform(
     int16           uOrg,                   // for TAG search
     int16           vOrg) {                 // for TAG search
 
-	int16           right = tileDrawMap.size.x,
-	                bottom = tileDrawMap.size.y;
+	int16           right = g_vm->_tileDrawMap.size.x,
+	                bottom = g_vm->_tileDrawMap.size.y;
 
 	Point16         tilePos;
 
@@ -128,7 +127,7 @@ void drawPlatform(
 					int16 y = tilePos.y - h;
 
 					if (ti->attrs.height > 0 && y < bottom + ti->attrs.height - 1) {
-						drawTile(&tileDrawMap, tilePos.x, y, ti->attrs.height, imageData);
+						drawTile(&g_vm->_tileDrawMap, tilePos.x, y, ti->attrs.height, imageData);
 					}
 				}
 			}




More information about the Scummvm-git-logs mailing list