From eeef4158096a2fe59274b2b86eaf7693bf64cde6 Mon Sep 17 00:00:00 2001 From: a/ Date: Sun, 18 Jul 2021 15:37:57 +0900 Subject: [PATCH] SAGA2: Fix global constructor warnings in tile.cpp --- engines/saga2/floating.cpp | 5 ++-- engines/saga2/idtypes.h | 4 --- engines/saga2/modal.cpp | 2 -- engines/saga2/playmode.cpp | 25 +++++++--------- engines/saga2/saga2.cpp | 2 ++ engines/saga2/saga2.h | 4 +++ engines/saga2/sprite.cpp | 6 ---- engines/saga2/tile.cpp | 60 +++++++++++--------------------------- engines/saga2/tile.h | 3 -- engines/saga2/tileload.cpp | 7 ++--- 10 files changed, 39 insertions(+), 79 deletions(-) diff --git a/engines/saga2/floating.cpp b/engines/saga2/floating.cpp index 6ee205e0ed0..b4b2d9a18e8 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 c5b3be24159..0edf8a26eb4 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 1695f58a5a2..d7ac63dd6f5 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 ee470a2e6c4..d209c463c47 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 83293e9eb82..73b6331c8af 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 3b6a10596e3..b766d1a3146 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 20466ff7cf9..0b40572e7da 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 3a33b350b28..d1da5f36e7a 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::iterator it = aTaskList._list.begin(); it != aTaskList._list.end();) { + for (Common::List::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::iterator it = aTaskList._list.begin(); it != aTaskList._list.end(); ++it) { + for (Common::List::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 d55dfb2f121..d272ee670b4 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 9436fcb5f90..698c95cd258 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); } } }