diff options
author | Max Horn | 2009-11-02 21:57:16 +0000 |
---|---|---|
committer | Max Horn | 2009-11-02 21:57:16 +0000 |
commit | 26981a5ffc7ab7ab8c0d201ad9e9f6f77d4c3e8b (patch) | |
tree | a4b331ebb61566243e0cee61fdefc31b57344736 | |
parent | 5cf868b75711c69736d3b2eb6f1068bdc48349ae (diff) | |
download | scummvm-rg350-26981a5ffc7ab7ab8c0d201ad9e9f6f77d4c3e8b.tar.gz scummvm-rg350-26981a5ffc7ab7ab8c0d201ad9e9f6f77d4c3e8b.tar.bz2 scummvm-rg350-26981a5ffc7ab7ab8c0d201ad9e9f6f77d4c3e8b.zip |
TINSEL: Add isValidObject(OBJECT *obj) function; make objectList & currentCD static vars; merge two logic blocks ('ifs') in DoRestoreSceneFrame
svn-id: r45618
-rw-r--r-- | engines/tinsel/drives.h | 2 | ||||
-rw-r--r-- | engines/tinsel/multiobj.cpp | 37 | ||||
-rw-r--r-- | engines/tinsel/object.cpp | 14 | ||||
-rw-r--r-- | engines/tinsel/object.h | 2 | ||||
-rw-r--r-- | engines/tinsel/savescn.cpp | 15 |
5 files changed, 36 insertions, 34 deletions
diff --git a/engines/tinsel/drives.h b/engines/tinsel/drives.h index d2c161fa75..81111265fa 100644 --- a/engines/tinsel/drives.h +++ b/engines/tinsel/drives.h @@ -45,8 +45,6 @@ namespace Tinsel { #define fAllCds (fCd1|fCd2|fCd3|fCd4|fCd5|fCd6|fCd7|fCd8) -extern char currentCD; - void DoCdChange(); void CdCD(CORO_PARAM); diff --git a/engines/tinsel/multiobj.cpp b/engines/tinsel/multiobj.cpp index fad6fa2951..9a7dac5929 100644 --- a/engines/tinsel/multiobj.cpp +++ b/engines/tinsel/multiobj.cpp @@ -31,9 +31,6 @@ namespace Tinsel { -// from object.c -extern OBJECT *objectList; - /** * Initialise a multi-part object using a list of images to init * each object piece. One object is created for each image in the list. @@ -98,7 +95,7 @@ OBJECT *MultiInitObject(const MULTI_INIT *pInitTbl) { void MultiInsertObject(OBJECT *pObjList, OBJECT *pInsObj) { // validate object pointer - assert(pInsObj >= objectList && pInsObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pInsObj)); // for all the objects that make up this multi-part do { @@ -119,7 +116,7 @@ void MultiInsertObject(OBJECT *pObjList, OBJECT *pInsObj) { void MultiDeleteObject(OBJECT *pObjList, OBJECT *pMultiObj) { // validate object pointer - assert(pMultiObj >= objectList && pMultiObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pMultiObj)); // for all the objects that make up this multi-part do { @@ -140,7 +137,7 @@ void MultiDeleteObject(OBJECT *pObjList, OBJECT *pMultiObj) { void MultiHideObject(OBJECT *pMultiObj) { // validate object pointer - assert(pMultiObj >= objectList && pMultiObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pMultiObj)); // set master shape to null animation frame pMultiObj->hShape = 0; @@ -156,7 +153,7 @@ void MultiHideObject(OBJECT *pMultiObj) { void MultiHorizontalFlip(OBJECT *pFlipObj) { // validate object pointer - assert(pFlipObj >= objectList && pFlipObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pFlipObj)); // for all the objects that make up this multi-part do { @@ -176,7 +173,7 @@ void MultiHorizontalFlip(OBJECT *pFlipObj) { void MultiVerticalFlip(OBJECT *pFlipObj) { // validate object pointer - assert(pFlipObj >= objectList && pFlipObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pFlipObj)); // for all the objects that make up this multi-part do { @@ -200,7 +197,7 @@ void MultiVerticalFlip(OBJECT *pFlipObj) { void MultiAdjustXY(OBJECT *pMultiObj, int deltaX, int deltaY) { // validate object pointer - assert(pMultiObj >= objectList && pMultiObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pMultiObj)); if (deltaX == 0 && deltaY == 0) return; // ignore no change @@ -245,7 +242,7 @@ void MultiAdjustXY(OBJECT *pMultiObj, int deltaX, int deltaY) { void MultiMoveRelXY(OBJECT *pMultiObj, int deltaX, int deltaY) { // validate object pointer - assert(pMultiObj >= objectList && pMultiObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pMultiObj)); if (deltaX == 0 && deltaY == 0) return; // ignore no change @@ -278,7 +275,7 @@ void MultiSetAniXY(OBJECT *pMultiObj, int newAniX, int newAniY) { int curAniX, curAniY; // objects current animation position // validate object pointer - assert(pMultiObj >= objectList && pMultiObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pMultiObj)); // get master objects current animation position GetAniPosition(pMultiObj, &curAniX, &curAniY); @@ -301,7 +298,7 @@ void MultiSetAniX(OBJECT *pMultiObj, int newAniX) { int curAniX, curAniY; // objects current animation position // validate object pointer - assert(pMultiObj >= objectList && pMultiObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pMultiObj)); // get master objects current animation position GetAniPosition(pMultiObj, &curAniX, &curAniY); @@ -324,7 +321,7 @@ void MultiSetAniY(OBJECT *pMultiObj, int newAniY) { int curAniX, curAniY; // objects current animation position // validate object pointer - assert(pMultiObj >= objectList && pMultiObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pMultiObj)); // get master objects current animation position GetAniPosition(pMultiObj, &curAniX, &curAniY); @@ -345,7 +342,7 @@ void MultiSetAniY(OBJECT *pMultiObj, int newAniY) { void MultiSetZPosition(OBJECT *pMultiObj, int newZ) { // validate object pointer - assert(pMultiObj >= objectList && pMultiObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pMultiObj)); // for all the objects that make up this multi-part do { @@ -370,7 +367,7 @@ void MultiReshape(OBJECT *pMultiObj) { SCNHANDLE hFrame; // validate object pointer - assert(pMultiObj >= objectList && pMultiObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pMultiObj)); // get objects current anim frame hFrame = pMultiObj->hShape; @@ -427,7 +424,7 @@ int MultiLeftmost(OBJECT *pMulti) { int left; // validate object pointer - assert(pMulti >= objectList && pMulti <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pMulti)); // init leftmost point to first object left = fracToInt(pMulti->xPos); @@ -456,7 +453,7 @@ int MultiRightmost(OBJECT *pMulti) { int right; // validate object pointer - assert(pMulti >= objectList && pMulti <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pMulti)); // init right-most point to first object right = fracToInt(pMulti->xPos) + pMulti->width; @@ -485,7 +482,7 @@ int MultiHighest(OBJECT *pMulti) { int highest; // validate object pointer - assert(pMulti >= objectList && pMulti <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pMulti)); // init highest point to first object highest = fracToInt(pMulti->yPos); @@ -514,7 +511,7 @@ int MultiLowest(OBJECT *pMulti) { int lowest; // validate object pointer - assert(pMulti >= objectList && pMulti <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pMulti)); // init lowest point to first object lowest = fracToInt(pMulti->yPos) + pMulti->height; @@ -550,7 +547,7 @@ bool MultiHasShape(POBJECT pMulti) { void MultiForceRedraw(POBJECT pMultiObj) { // validate object pointer - assert(pMultiObj >= objectList && pMultiObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pMultiObj)); // for all the objects that make up this multi-part do { diff --git a/engines/tinsel/object.cpp b/engines/tinsel/object.cpp index 9de8202795..f91e37a063 100644 --- a/engines/tinsel/object.cpp +++ b/engines/tinsel/object.cpp @@ -37,7 +37,7 @@ namespace Tinsel { // list of all objects -OBJECT *objectList = 0; +static OBJECT *objectList = 0; // pointer to free object list static OBJECT *pFreeObjects = 0; @@ -130,6 +130,10 @@ OBJECT *AllocObject() { return pObj; } +bool isValidObject(OBJECT *obj) { + return (obj >= objectList && obj <= objectList + NUM_OBJECTS - 1); +} + /** * Copy one object to another. * @param pDest Destination object @@ -163,7 +167,7 @@ void InsertObject(OBJECT *pObjList, OBJECT *pInsObj) { OBJECT *pPrev, *pObj; // object list traversal pointers // validate object pointer - assert(pInsObj >= objectList && pInsObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pInsObj)); for (pPrev = pObjList, pObj = pObjList->pNext; pObj != NULL; pPrev = pObj, pObj = pObj->pNext) { // check Z order @@ -196,7 +200,7 @@ void DelObject(OBJECT *pObjList, OBJECT *pDelObj) { const Common::Rect rcScreen(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); // validate object pointer - assert(pDelObj >= objectList && pDelObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pDelObj)); #ifdef DEBUG // one less object in use @@ -331,7 +335,7 @@ void GetAniOffset(SCNHANDLE hImg, int flags, int *pAniX, int *pAniY) { */ void GetAniPosition(OBJECT *pObj, int *pPosX, int *pPosY) { // validate object pointer - assert(pObj >= objectList && pObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pObj)); // get the animation offset of the object GetAniOffset(pObj->hImg, pObj->flags, pPosX, pPosY); @@ -419,7 +423,7 @@ OBJECT *InitObject(const OBJ_INIT *pInitTbl) { */ void AnimateObjectFlags(OBJECT *pAniObj, int newflags, SCNHANDLE hNewImg) { // validate object pointer - assert(pAniObj >= objectList && pAniObj <= objectList + NUM_OBJECTS - 1); + assert(isValidObject(pAniObj)); if (pAniObj->hImg != hNewImg || (pAniObj->flags & DMA_HARDFLAGS) != (newflags & DMA_HARDFLAGS)) { diff --git a/engines/tinsel/object.h b/engines/tinsel/object.h index 5725445b62..a000dee72c 100644 --- a/engines/tinsel/object.h +++ b/engines/tinsel/object.h @@ -130,6 +130,8 @@ OBJECT *AllocObject(); // allocate a object from the free list void FreeObject( // place a object back on the free list OBJECT *pFreeObj); // object to free +bool isValidObject(OBJECT *obj); + void CopyObject( // copy one object to another OBJECT *pDest, // destination object OBJECT *pSrc); // source object diff --git a/engines/tinsel/savescn.cpp b/engines/tinsel/savescn.cpp index cbbfe8572a..50231d34bb 100644 --- a/engines/tinsel/savescn.cpp +++ b/engines/tinsel/savescn.cpp @@ -311,14 +311,15 @@ static int DoRestoreSceneFrame(SAVED_DATA *sd, int n) { _vm->_sound->stopAllSamples(); ClearScreen(); - // Master script only affected on restore game, not restore scene - if (TinselV2 && (sd == &sgData)) { - g_scheduler->killMatchingProcess(PID_MASTER_SCR); - KillGlobalProcesses(); - FreeMasterInterpretContext(); - } - if (TinselV2) { + + // Master script only affected on restore game, not restore scene + if (sd == &sgData) { + g_scheduler->killMatchingProcess(PID_MASTER_SCR); + KillGlobalProcesses(); + FreeMasterInterpretContext(); + } + RestorePolygonStuff(sd->SavedPolygonStuff); // Abandon temporarily if different CD |