[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