aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/tinsel/drives.h2
-rw-r--r--engines/tinsel/multiobj.cpp37
-rw-r--r--engines/tinsel/object.cpp14
-rw-r--r--engines/tinsel/object.h2
-rw-r--r--engines/tinsel/savescn.cpp15
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