[Scummvm-cvs-logs] SF.net SVN: scummvm: [29469] scummvm/trunk/engines/cruise
yazoo at users.sourceforge.net
yazoo at users.sourceforge.net
Sat Nov 10 20:47:08 CET 2007
Revision: 29469
http://scummvm.svn.sourceforge.net/scummvm/?rev=29469&view=rev
Author: yazoo
Date: 2007-11-10 11:47:07 -0800 (Sat, 10 Nov 2007)
Log Message:
-----------
Fix boggus object state
Modified Paths:
--------------
scummvm/trunk/engines/cruise/cruise_main.cpp
scummvm/trunk/engines/cruise/object.cpp
scummvm/trunk/engines/cruise/overlay.cpp
scummvm/trunk/engines/cruise/overlay.h
scummvm/trunk/engines/cruise/saveload.cpp
scummvm/trunk/engines/cruise/vars.cpp
scummvm/trunk/engines/cruise/vars.h
Modified: scummvm/trunk/engines/cruise/cruise_main.cpp
===================================================================
--- scummvm/trunk/engines/cruise/cruise_main.cpp 2007-11-10 18:24:23 UTC (rev 29468)
+++ scummvm/trunk/engines/cruise/cruise_main.cpp 2007-11-10 19:47:07 UTC (rev 29469)
@@ -98,7 +98,7 @@
counter = 0;
for (i = 0; i < overlayTable[scriptIdx].ovlData->numObj; i++) {
- if (ptr2[i].var0 == param) {
+ if (ptr2[i]._type == param) {
counter++;
}
}
@@ -764,45 +764,49 @@
}
const char *getObjectName(int index, const char *string) {
- int i;
const char *ptr = string;
if (!string)
return NULL;
- for (i = 0; i < index; i++) {
- while (*ptr) {
- ptr++;
- }
- ptr++;
+ int i = 0;
+ int j = 0;
+
+ while (i < index)
+ {
+ ptr += strlen(ptr)+1;
+ i++;
}
return ptr;
}
-int buildInventorySub1(int overlayIdx, int objIdx) {
+int getObjectClass(int overlayIdx, int objIdx) {
objDataStruct *pObjectData = getObjectDataFromOverlay(overlayIdx, objIdx);
if (pObjectData) {
- return pObjectData->type;
+ return pObjectData->_class;
} else {
return -11;
}
}
void buildInventory(int X, int Y) {
- int numObjectInInventory = 0;
menuStruct *pMenu;
pMenu = createMenu(X, Y, "Inventaire");
menuTable[1] = pMenu;
- if (pMenu && numOfLoadedOverlay > 1) {
- for (int i = 1; i < numOfLoadedOverlay; i++) {
- ovlDataStruct *pOvlData = overlayTable[i].ovlData;
+ if(pMenu == NULL)
+ return;
- if (pOvlData && pOvlData->arrayObject && pOvlData->numObj) {
+ int numObjectInInventory = 0;
+ for (int i = 1; i < numOfLoadedOverlay; i++) {
+ ovlDataStruct *pOvlData = overlayTable[i].ovlData;
+
+ if (overlayTable[i].alreadyLoaded) {
+ if(overlayTable[i].ovlData->arrayObject) {
for (int j = 0; j < pOvlData->numObj; j++) {
- if (buildInventorySub1(i, j) != 3) {
+ if (getObjectClass(i, j) != 3) {
int16 returnVar;
getSingleObjectParam(i, j, 5, &returnVar);
@@ -879,7 +883,7 @@
objDataStruct* pObject = getObjectDataFromOverlay(thisOvl, ptrHead->obj1Number);
- if ((thisOvl == objOvl) && (objIdx ==ptrHead->obj1Number) && pObject && pObject->type != 3) {
+ if ((thisOvl == objOvl) && (objIdx ==ptrHead->obj1Number) && pObject && pObject->_class != 3) {
int verbeOvl = ptrHead->verbOverlay;
int obj1Ovl = ptrHead->obj1Overlay;
int obj2Ovl = ptrHead->obj2Overlay;
Modified: scummvm/trunk/engines/cruise/object.cpp
===================================================================
--- scummvm/trunk/engines/cruise/object.cpp 2007-11-10 18:24:23 UTC (rev 29468)
+++ scummvm/trunk/engines/cruise/object.cpp 2007-11-10 19:47:07 UTC (rev 29469)
@@ -58,14 +58,14 @@
}
int16 getMultipleObjectParam(int16 overlayIdx, int16 objectIdx, objectParamsQuery *returnParam) {
- int16 size;
- int16 var_A;
- int16 var_14;
objectParams *ptr2;
objDataStruct *ptr;
ovlDataStruct *ovlData;
// int16 type;
+ int state = 0;
+ int state2 = 0;
+
ptr = getObjectDataFromOverlay(overlayIdx, objectIdx);
if (!ptr)
@@ -73,32 +73,32 @@
ovlData = overlayTable[overlayIdx].ovlData;
- switch (ptr->type) {
- case 0:
+ switch (ptr->_class) {
+ case THEME:
+ case MULTIPLE:
{
- ptr2 = &ovlData->arrayStates[ptr->var5];
+ state = globalVars[overlayTable[overlayIdx].state + ptr->_stateTableIdx];
- var_14 = globalVars[*(int16 *) (&overlayTable[overlayIdx].state + ptr->stateTableIdx)];
-
- var_A = ptr2->state;
-
+ ptr2 = &ovlData->arrayStates[ptr->_firstStateIdx + state];
+ state2 = ptr2->state;
break;
}
- case 1:
+ case VARIABLE:
{
- ptr2 = &ovlData->arrayObjVar[ptr->var4];
+ ptr2 = &ovlData->arrayObjVar[ptr->_varTableIdx];
- var_A = var_14 = ptr2->state;
- size = var_A + ptr->var5;
-
- if (ptr->var5 + var_14 <= ovlData->size8) {
- var_A = ovlData->arrayStates[ptr->var5 + var_14].state;
+ state = ptr2->state;
+ state2 = state;
+ if(ptr->_firstStateIdx + state < ovlData->size8)
+ {
+ objectParams *ptr3 = &ovlData->arrayStates[ptr->_firstStateIdx + state];
+ state2 = ptr3->state;
}
break;
}
default:
{
- printf("unsupported case %d in getMultipleObjectParam\n", ptr->type);
+ printf("Unsupported case %d in getMultipleObjectParam\n",ptr->_class);
exit(1);
}
}
@@ -108,9 +108,9 @@
returnParam->baseFileIdx = ptr2->Z;
returnParam->fileIdx = ptr2->frame;
returnParam->scale = ptr2->scale;
- returnParam->var5 = var_14;
- returnParam->var6 = var_A;
- returnParam->var7 = ptr->var3;
+ returnParam->var5 = state;
+ returnParam->var6 = state2;
+ returnParam->var7 = ptr->_numStates;
return 0;
}
@@ -127,10 +127,10 @@
}
//overlayTable[param1].ovlData
- switch (ptr->type) {
+ switch (ptr->_class) {
case 1:
{
- ptr2 = &overlayTable[ovlIdx].ovlData->arrayObjVar[ptr->var4];
+ ptr2 = &overlayTable[ovlIdx].ovlData->arrayObjVar[ptr->_varTableIdx];
switch (param3) {
case 0: // x
@@ -159,7 +159,7 @@
ptr2->scale = param4;
break;
}
- case 5: // box colision
+ case 5: // state
{
ptr2->state = param4;
break;
@@ -191,11 +191,11 @@
ovlData = overlayTable[ovlIdx].ovlData;
- switch (ptr->type) {
+ switch (ptr->_class) {
case THEME:
case MULTIPLE:
{
- globalVars[overlayTable[ovlIdx].state + ptr->stateTableIdx] = newState;
+ globalVars[overlayTable[ovlIdx].state + ptr->_stateTableIdx] = newState;
sortCells(ovlIdx, objIdx, &cellHead);
break;
}
@@ -206,12 +206,12 @@
objectParams *destEntry;
objectParams *sourceEntry;
- if (ptr->var5 + newState > ovlData->size8) {
+ if (ptr->_firstStateIdx + newState > ovlData->size8) {
return 0;
}
- destEntry = &ovlData->arrayObjVar[ptr->var4];
- sourceEntry = &ovlData->arrayStates[ptr->var5 + newState];
+ destEntry = &ovlData->arrayObjVar[ptr->_varTableIdx];
+ sourceEntry = &ovlData->arrayStates[ptr->_firstStateIdx + newState];
memcpy(destEntry, sourceEntry, sizeof(objectParams));
@@ -222,7 +222,7 @@
}
default:
{
- printf("Unsupported param = %d in objInit\n", ptr->type);
+ printf("Unsupported param = %d in objInit\n", ptr->_class);
// exit(1);
}
}
@@ -231,7 +231,7 @@
}
int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3, int16 *returnParam) {
- int var_A = 0;
+ int state = 0;
//char* ptr3 = NULL;
objDataStruct *ptr;
ovlDataStruct *ovlData;
@@ -244,25 +244,25 @@
ovlData = overlayTable[overlayIdx].ovlData;
- switch (ptr->type) {
- case 0:
- case 3:
+ switch (ptr->_class) {
+ case THEME:
+ case MULTIPLE:
{
- var_A = globalVars[ptr->stateTableIdx];
+ state = globalVars[overlayTable[overlayIdx].state + ptr->_stateTableIdx];
- ptr2 = &ovlData->arrayStates[ptr->var5];
+ ptr2 = &ovlData->arrayStates[ptr->_firstStateIdx + state];
break;
}
- case 1:
+ case VARIABLE:
{
- ptr2 = &ovlData->arrayObjVar[ptr->var4];
+ ptr2 = &ovlData->arrayObjVar[ptr->_varTableIdx];
- var_A = ptr2->state;
+ state = ptr2->state;
break;
}
default:
{
- printf("Unsupported case %d in getSingleObjectParam\n",ptr->type);
+ printf("Unsupported case %d in getSingleObjectParam\n",ptr->_class);
exit(1);
}
}
@@ -295,7 +295,7 @@
}
case 5:
{
- *returnParam = var_A;
+ *returnParam = state;
break;
}
default:
Modified: scummvm/trunk/engines/cruise/overlay.cpp
===================================================================
--- scummvm/trunk/engines/cruise/overlay.cpp 2007-11-10 18:24:23 UTC (rev 29468)
+++ scummvm/trunk/engines/cruise/overlay.cpp 2007-11-10 19:47:07 UTC (rev 29469)
@@ -400,33 +400,34 @@
}
for (i = 0; i < ovlData->numObj; i++) {
- ovlData->arrayObject[i].var0 = *(int16 *) scriptPtr;
+ ovlData->arrayObject[i]._type = *(int16 *) scriptPtr;
scriptPtr += 2;
- flipShort(&ovlData->arrayObject[i].var0);
+ flipShort(&ovlData->arrayObject[i]._type);
- ovlData->arrayObject[i].type = *(int16 *) scriptPtr;
+ int16 tempClass = *(int16 *) scriptPtr;
+ flipShort(&tempClass);
+ ovlData->arrayObject[i]._class = (eClass)tempClass;
scriptPtr += 2;
- flipShort(&ovlData->arrayObject[i].type);
- ovlData->arrayObject[i].var2 = *(int16 *) scriptPtr;
+ ovlData->arrayObject[i]._nameOffset = *(int16 *) scriptPtr;
scriptPtr += 2;
- flipShort(&ovlData->arrayObject[i].var2);
+ flipShort(&ovlData->arrayObject[i]._nameOffset);
- ovlData->arrayObject[i].var3 = *(int16 *) scriptPtr;
+ ovlData->arrayObject[i]._numStates = *(int16 *) scriptPtr;
scriptPtr += 2;
- flipShort(&ovlData->arrayObject[i].var3);
+ flipShort(&ovlData->arrayObject[i]._numStates);
- ovlData->arrayObject[i].var4 = *(int16 *) scriptPtr;
+ ovlData->arrayObject[i]._varTableIdx = *(int16 *) scriptPtr;
scriptPtr += 2;
- flipShort(&ovlData->arrayObject[i].var4);
+ flipShort(&ovlData->arrayObject[i]._varTableIdx);
- ovlData->arrayObject[i].var5 = *(int16 *) scriptPtr;
+ ovlData->arrayObject[i]._firstStateIdx = *(int16 *) scriptPtr;
scriptPtr += 2;
- flipShort(&ovlData->arrayObject[i].var5);
+ flipShort(&ovlData->arrayObject[i]._firstStateIdx);
- ovlData->arrayObject[i].stateTableIdx = *(int16 *) scriptPtr;
+ ovlData->arrayObject[i]._stateTableIdx = *(int16 *) scriptPtr;
scriptPtr += 2;
- flipShort(&ovlData->arrayObject[i].stateTableIdx);
+ flipShort(&ovlData->arrayObject[i]._stateTableIdx);
}
if (scriptNotLoadedBefore) {
Modified: scummvm/trunk/engines/cruise/overlay.h
===================================================================
--- scummvm/trunk/engines/cruise/overlay.h 2007-11-10 18:24:23 UTC (rev 29468)
+++ scummvm/trunk/engines/cruise/overlay.h 2007-11-10 19:47:07 UTC (rev 29469)
@@ -99,19 +99,22 @@
uint16 nameOffset;
};
-#define MULTIPLE 0
-#define VARIABLE 1
-#define UNIQUE 2
-#define THEME 3
+enum eClass
+{
+ MULTIPLE = 0,
+ VARIABLE = 1,
+ UNIQUE = 2,
+ THEME = 3,
+};
struct objDataStruct {
- int16 var0;
- int16 type;
- int16 var2;
- int16 var3;
- int16 var4;
- int16 var5;
- int16 stateTableIdx;
+ int16 _type;
+ eClass _class;
+ int16 _nameOffset;
+ int16 _numStates;
+ int16 _varTableIdx;
+ int16 _firstStateIdx;
+ int16 _stateTableIdx;
};
struct objectParams {
Modified: scummvm/trunk/engines/cruise/saveload.cpp
===================================================================
--- scummvm/trunk/engines/cruise/saveload.cpp 2007-11-10 18:24:23 UTC (rev 29468)
+++ scummvm/trunk/engines/cruise/saveload.cpp 2007-11-10 19:47:07 UTC (rev 29469)
@@ -27,30 +27,47 @@
namespace Cruise {
+struct overlayRestoreTemporary {
+ int _sBssSize;
+ uint8* _pBss;
+ int _sNumObj;
+ objectParams* _pObj;
+};
+
+overlayRestoreTemporary ovlRestoreData[90];
+
void loadSavegameDataSub1(Common::File& currentSaveFile) {
int i;
for (i = 1; i < numOfLoadedOverlay; i++) {
- filesData[i].field_4 = NULL;
- filesData[i].field_0 = NULL;
- filesData2[i].field_0 = 0;
+ ovlRestoreData[i]._sBssSize = ovlRestoreData[i]._sNumObj = 0;
+ ovlRestoreData[i]._pBss = NULL;
+ ovlRestoreData[i]._pObj = NULL;
if (overlayTable[i].alreadyLoaded) {
- filesData2[i].field_0 = currentSaveFile.readSint16LE();
+ ovlRestoreData[i]._sBssSize = currentSaveFile.readSint16LE();
- if (filesData2[i].field_0) {
- filesData[i].field_0 = (uint8 *) mallocAndZero(filesData2[i].field_0);
- if (filesData[i].field_0) {
- currentSaveFile.read(filesData[i].field_0, filesData2[i].field_0);
- }
+ if (ovlRestoreData[i]._sBssSize) {
+ ovlRestoreData[i]._pBss = (uint8 *) mallocAndZero(ovlRestoreData[i]._sBssSize);
+ ASSERT(ovlRestoreData[i]._pBss);
+
+ currentSaveFile.read(ovlRestoreData[i]._pBss, ovlRestoreData[i]._sBssSize);
}
- filesData2[i].field_2 = currentSaveFile.readSint16LE();
+ ovlRestoreData[i]._sNumObj = currentSaveFile.readSint16LE();
- if (filesData2[i].field_2) {
- filesData[i].field_4 = (uint8 *) mallocAndZero(filesData2[i].field_2 * 12);
- if (filesData[i].field_4) {
- currentSaveFile.read(filesData[i].field_4, filesData2[i].field_2 * 12);
+ if (ovlRestoreData[i]._sNumObj) {
+ ovlRestoreData[i]._pObj = (objectParams *) mallocAndZero(ovlRestoreData[i]._sNumObj * sizeof(objectParams));
+ ASSERT(ovlRestoreData[i]._pObj);
+
+ for(int j=0; j<ovlRestoreData[i]._sNumObj; j++)
+ {
+ ovlRestoreData[i]._pObj[j].X = currentSaveFile.readSint16LE();
+ ovlRestoreData[i]._pObj[j].Y = currentSaveFile.readSint16LE();
+ ovlRestoreData[i]._pObj[j].Z = currentSaveFile.readSint16LE();
+ ovlRestoreData[i]._pObj[j].frame = currentSaveFile.readSint16LE();
+ ovlRestoreData[i]._pObj[j].scale = currentSaveFile.readSint16LE();
+ ovlRestoreData[i]._pObj[j].state = currentSaveFile.readSint16LE();
}
}
}
@@ -355,22 +372,26 @@
if (overlayTable[j].alreadyLoaded) {
ovlDataStruct *ovlData = overlayTable[j].ovlData;
- if (filesData[j].field_0) {
+ // overlay BSS
+
+ if (ovlRestoreData[j]._sBssSize) {
if (ovlData->data4Ptr) {
free(ovlData->data4Ptr);
}
- ovlData->data4Ptr = (uint8 *) filesData[j].field_0;
- ovlData->sizeOfData4 = filesData2[j].field_0;
+ ovlData->data4Ptr = ovlRestoreData[j]._pBss;
+ ovlData->sizeOfData4 = ovlRestoreData[j]._sBssSize;
}
- if (filesData[j].field_4) {
+ // overlay object data
+
+ if (ovlRestoreData[j]._sNumObj) {
if (ovlData->arrayObjVar) {
free(ovlData->arrayObjVar);
}
- ovlData->arrayObjVar = (objectParams *) filesData[j].field_4; // TODO: fix !
- ovlData->size9 = filesData2[j].field_2;
+ ovlData->arrayObjVar = ovlRestoreData[j]._pObj;
+ ovlData->size9 = ovlRestoreData[j]._sNumObj;
}
}
Modified: scummvm/trunk/engines/cruise/vars.cpp
===================================================================
--- scummvm/trunk/engines/cruise/vars.cpp 2007-11-10 18:24:23 UTC (rev 29468)
+++ scummvm/trunk/engines/cruise/vars.cpp 2007-11-10 19:47:07 UTC (rev 29469)
@@ -43,9 +43,6 @@
int16 main5;
int16 var22 = 0;
-filesDataStruct filesData[90];
-filesData2Struct filesData2[90];
-
mediumVarStruct mediumVar[64];
volumeDataStruct volumeData[20];
Modified: scummvm/trunk/engines/cruise/vars.h
===================================================================
--- scummvm/trunk/engines/cruise/vars.h 2007-11-10 18:24:23 UTC (rev 29468)
+++ scummvm/trunk/engines/cruise/vars.h 2007-11-10 19:47:07 UTC (rev 29469)
@@ -78,11 +78,6 @@
int16 ovl;
};
-struct filesDataStruct {
- uint8 *field_0;
- uint8 *field_4;
-};
-
struct filesData2Struct {
int16 field_0;
int16 field_2;
@@ -142,9 +137,6 @@
char bootScriptName[8];
};
-extern filesDataStruct filesData[90];
-extern filesData2Struct filesData2[90];
-
extern mediumVarStruct mediumVar[64];
extern volumeDataStruct volumeData[20];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list