diff options
author | Vincent Hamm | 2007-04-28 22:31:55 +0000 |
---|---|---|
committer | Vincent Hamm | 2007-04-28 22:31:55 +0000 |
commit | fe8d2a8e7f899858784464550423f0deb5470f6c (patch) | |
tree | 7483ffa768fa6271cf9263253673588815315b74 /engines | |
parent | 339c39f8b7dcc2d245ba936f332592490f0bac3d (diff) | |
download | scummvm-rg350-fe8d2a8e7f899858784464550423f0deb5470f6c.tar.gz scummvm-rg350-fe8d2a8e7f899858784464550423f0deb5470f6c.tar.bz2 scummvm-rg350-fe8d2a8e7f899858784464550423f0deb5470f6c.zip |
More cleanup
Few bug fix
svn-id: r26666
Diffstat (limited to 'engines')
-rw-r--r-- | engines/cruise/actor.cpp | 36 | ||||
-rw-r--r-- | engines/cruise/actor.h | 11 | ||||
-rw-r--r-- | engines/cruise/cell.cpp | 257 | ||||
-rw-r--r-- | engines/cruise/cell.h | 32 | ||||
-rw-r--r-- | engines/cruise/cruise_main.cpp | 25 | ||||
-rw-r--r-- | engines/cruise/dataLoader.cpp | 9 | ||||
-rw-r--r-- | engines/cruise/decompiler.cpp | 2 | ||||
-rw-r--r-- | engines/cruise/detection.cpp | 2 | ||||
-rw-r--r-- | engines/cruise/function.cpp | 153 | ||||
-rw-r--r-- | engines/cruise/mainDraw.cpp | 209 | ||||
-rw-r--r-- | engines/cruise/object.cpp | 169 | ||||
-rw-r--r-- | engines/cruise/object.h | 6 | ||||
-rw-r--r-- | engines/cruise/overlay.cpp | 18 | ||||
-rw-r--r-- | engines/cruise/overlay.h | 17 | ||||
-rw-r--r-- | engines/cruise/saveload.cpp | 4 | ||||
-rw-r--r-- | engines/cruise/script.cpp | 4 | ||||
-rw-r--r-- | engines/cruise/script.h | 10 | ||||
-rw-r--r-- | engines/cruise/various.cpp | 115 | ||||
-rw-r--r-- | engines/cruise/various.h | 9 |
19 files changed, 469 insertions, 619 deletions
diff --git a/engines/cruise/actor.cpp b/engines/cruise/actor.cpp index 505817282f..3d8e856d49 100644 --- a/engines/cruise/actor.cpp +++ b/engines/cruise/actor.cpp @@ -774,11 +774,7 @@ void processAnimation(void) { getMultipleObjectParam(currentActor->overlayNumber, currentActor->idx, ¶ms); - if (((animationStart && !currentActor->flag) - || (!animationStart - && currentActor->x_dest != -1 - && currentActor->y_dest != -1)) - && (currentActor->type == 0)) { + if (((animationStart && !currentActor->flag) || (!animationStart && currentActor->x_dest != -1 && currentActor->y_dest != -1)) && (currentActor->type == 0)) { // mouse animation if (!animationStart) { var34 = currentActor->x_dest; @@ -790,11 +786,7 @@ void processAnimation(void) { currentActor->flag = 1; } - currentActor->pathId = - computePathfinding(returnVar2, params.X, - params.Y, var34, var35, - currentActor->stepX, currentActor->stepY, - currentActor->pathId); + currentActor->pathId = computePathfinding(returnVar2, params.X, params.Y, var34, var35, currentActor->stepX, currentActor->stepY, currentActor->pathId); if (currentActor->pathId == -1) { if ((currentActor->endDirection != -1) @@ -1136,31 +1128,19 @@ void processAnimation(void) { } case ANIM_PHASE_END: { - int newA = - raoul_end[currentActor-> - startDirection][0]; - - set_anim(currentActor-> - overlayNumber, - currentActor->idx, - currentActor->start, - currentActor->x, - currentActor->y, newA, - currentActor->poly); + int newA = raoul_end[currentActor->startDirection][0]; + + set_anim(currentActor->overlayNumber, currentActor->idx, currentActor->start, currentActor->x, currentActor->y, newA, currentActor->poly); currentActor->pathId = -2; - currentActor->phase = - ANIM_PHASE_WAIT; + currentActor->phase = ANIM_PHASE_WAIT; currentActor->flag = 0; - currentActor->endDirection = - -1; + currentActor->endDirection = -1; break; } default: { - printf - ("Unimplemented currentActor->phase=%d in processAnimation()\n", - currentActor->phase); + printf("Unimplemented currentActor->phase=%d in processAnimation()\n", currentActor->phase); // exit(1); } } diff --git a/engines/cruise/actor.h b/engines/cruise/actor.h index 7b8a5752dd..8df405f32e 100644 --- a/engines/cruise/actor.h +++ b/engines/cruise/actor.h @@ -64,10 +64,13 @@ struct actorStruct { typedef struct actorStruct actorStruct; -int16 mainProc13(int overlayIdx, int param1, actorStruct * pStartEntry, - int param2); -actorStruct *findActor(int overlayIdx, int param1, actorStruct * pStartEntry, - int param2); +extern int raoul_move[][13]; +extern int raoul_end[][13]; +extern int raoul_stat[][13]; +extern int raoul_invstat[][13]; + +int16 mainProc13(int overlayIdx, int param1, actorStruct * pStartEntry, int param2); +actorStruct *findActor(int overlayIdx, int param1, actorStruct * pStartEntry, int param2); void processAnimation(void); void getPixel(int x, int y); diff --git a/engines/cruise/cell.cpp b/engines/cruise/cell.cpp index c2a4f66d38..ff0570f194 100644 --- a/engines/cruise/cell.cpp +++ b/engines/cruise/cell.cpp @@ -32,6 +32,15 @@ void resetPtr(cellStruct *ptr) { ptr->prev = NULL; } +void freeMessageList(cellStruct *objPtr) { +/* if (objPtr) { + if(objPtr->next) + free(objPtr->next); + + free(objPtr); + } */ +} + void loadSavegameDataSub2(FILE *f) { unsigned short int n_chunks; int i; @@ -60,9 +69,7 @@ void loadSavegameDataSub2(FILE *f) { } } -cellStruct *addCell(int16 overlayIdx, int16 param2, cellStruct *pHead, - int16 scriptType, int16 scriptNumber, int16 scriptOverlay, int16 param3, - int16 param4) { +cellStruct *addCell(cellStruct *pHead, int16 overlayIdx, int16 objIdx, int16 type, int16 backgroundPlane, int16 scriptOverlay, int16 scriptNumber, int16 scriptType) { int16 var; cellStruct *newElement; @@ -70,7 +77,7 @@ cellStruct *addCell(int16 overlayIdx, int16 param2, cellStruct *pHead, cellStruct *currentHead2; cellStruct *currentHead3; - if (getSingleObjectParam(overlayIdx, param2, 2, &var) < 0) { + if (getSingleObjectParam(overlayIdx, objIdx, 2, &var) < 0) { return 0; } @@ -85,8 +92,7 @@ cellStruct *addCell(int16 overlayIdx, int16 param2, cellStruct *pHead, if (currentHead2->type != 5) { int16 lvar2; - getSingleObjectParam(currentHead2->overlay, - currentHead2->idx, 2, &lvar2); + getSingleObjectParam(currentHead2->overlay, currentHead2->idx, 2, &lvar2); if (lvar2 > var) break; @@ -98,9 +104,9 @@ cellStruct *addCell(int16 overlayIdx, int16 param2, cellStruct *pHead, if (currentHead2) { if ((currentHead2->overlay == overlayIdx) && - (currentHead2->backgroundPlane == param3) && - (currentHead2->idx == param2) && - (currentHead2->type == param4)) + (currentHead2->backgroundPlane == backgroundPlane) && + (currentHead2->idx == objIdx) && + (currentHead2->type == type)) return NULL; } @@ -115,25 +121,26 @@ cellStruct *addCell(int16 overlayIdx, int16 param2, cellStruct *pHead, newElement->next = currentHead3->next; currentHead3->next = newElement; - newElement->idx = param2; - newElement->type = param4; - newElement->backgroundPlane = param3; + newElement->idx = objIdx; + newElement->type = type; + newElement->backgroundPlane = backgroundPlane; newElement->overlay = overlayIdx; newElement->freeze = 0; - newElement->field_16 = scriptNumber; - newElement->field_18 = scriptOverlay; + newElement->parent = scriptNumber; + newElement->parentOverlay = scriptOverlay; newElement->gfxPtr = NULL; - newElement->followObjectIdx = param2; + newElement->followObjectIdx = objIdx; newElement->followObjectOverlayIdx = overlayIdx; - newElement->field_1A = scriptType; - newElement->field_20 = 0; - newElement->field_22 = 0; - newElement->nextAnimDelay = 0; - newElement->field_2C = 0; - newElement->currentAnimDelay = 0; - newElement->field_2A = 0; + newElement->parentType = scriptType; + + newElement->animStart = 0; + newElement->animEnd = 0; + newElement->animWait = 0; + newElement->animSignal = 0; + newElement->animCounter = 0; + newElement->animType = 0; newElement->animStep = 0; - newElement->field_30 = 0; + newElement->animLoop = 0; if (currentHead) { newElement->prev = currentHead->prev; @@ -146,4 +153,208 @@ cellStruct *addCell(int16 overlayIdx, int16 param2, cellStruct *pHead, return newElement; } +void createTextObject(int overlayIdx, int oldVar8, cellStruct *pObject, int scriptNumber, int scriptOverlayNumber, int backgroundPlane, int16 color, int oldVar2, int oldVar4, int oldVar6) { + + char *ax; + cellStruct *savePObject = pObject; + cellStruct *cx; + + cellStruct *pNewElement; + cellStruct *si = pObject->next; + cellStruct *var_2; + + while (si) { + pObject = si; + si = si->next; + } + + var_2 = si; + + pNewElement = (cellStruct *) malloc(sizeof(cellStruct)); + + pNewElement->next = pObject->next; + pObject->next = pNewElement; + + pNewElement->idx = oldVar8; + pNewElement->type = 5; + pNewElement->backgroundPlane = backgroundPlane; + pNewElement->overlay = overlayIdx; + pNewElement->x = oldVar6; + pNewElement->field_C = oldVar4; + pNewElement->spriteIdx = oldVar2; + pNewElement->color = color; + pNewElement->freeze = 0; + pNewElement->parent = scriptNumber; + pNewElement->parentOverlay = scriptOverlayNumber; + pNewElement->gfxPtr = NULL; + + if (var_2) { + cx = var_2; + } else { + cx = savePObject; + } + + pNewElement->prev = cx->prev; + cx->prev = pNewElement; + + ax = getText(oldVar8, overlayIdx); + + if (ax) { + pNewElement->gfxPtr = renderText(oldVar2, (uint8 *) ax); + } +} + +void removeCell(cellStruct *objPtr, int ovlNumber, int objectIdx, int objType, int backgroundPlane ) { + cellStruct *currentObj = objPtr->next; + cellStruct *previous; + + while (currentObj) { + if (((currentObj->overlay == ovlNumber) || (ovlNumber == -1)) && + ((currentObj->idx == objectIdx) || (objectIdx == -1)) && + ((currentObj->type == objType) || (objType == -1)) && + ((currentObj->backgroundPlane == backgroundPlane) || (backgroundPlane == -1))) { + currentObj->type = -1; + } + + currentObj = currentObj->next; + } + + previous = objPtr; + currentObj = objPtr->next; + + while (currentObj) { + cellStruct *si; + + si = currentObj; + + if (si->type == -1) { + cellStruct *dx; + previous->next = si->next; + + dx = si->next; + + if (!si->next) { + dx = objPtr; + } + + dx->prev = si->prev; + + // TODO: complelty wrong + //freeMessageList(si); + + free(si); + + currentObj = dx; + } else { + currentObj = si->next; + previous = si; + } + } +} + +void freezeCell(cellStruct * pObject, int overlayIdx, int objIdx, int objType, int backgroundPlane, int oldFreeze, int newFreeze ) { + while (pObject) { + if ((pObject->overlay == overlayIdx) || (overlayIdx == -1)) { + if ((pObject->idx == objIdx) || (objIdx == -1)) { + if ((pObject->type == objType) || (objType == -1)) { + if ((pObject->backgroundPlane == backgroundPlane) || (backgroundPlane == -1)) { + if ((pObject->freeze == oldFreeze) || (oldFreeze == -1)) { + pObject->freeze = newFreeze; + } + } + } + } + } + + pObject = pObject->next; + } +} + +void sortCells(int16 param1, int16 param2, cellStruct *objPtr) { + int16 var; + cellStruct *var8_; + cellStruct *var40; + cellStruct *var3E; + cellStruct *currentObjPtrPrevious; + cellStruct *currentObjPtr2; + cellStruct *match; + + getSingleObjectParam(param1, param2, 2, &var); + + currentObjPtrPrevious = objPtr; + currentObjPtr2 = objPtr->next; + + match = NULL; + var40 = NULL; + var3E = NULL; + var8_ = objPtr; + + while (currentObjPtr2) { + if ((currentObjPtr2->overlay == param1) && (currentObjPtr2->idx == param2)) {// found + currentObjPtrPrevious->next = currentObjPtr2->next; + + if (currentObjPtr2->next) { + currentObjPtr2->next->prev = + currentObjPtr2->prev; + } else { + objPtr->prev = currentObjPtr2->prev; + } + + if (var40) { + var40->prev = currentObjPtr2; + } else { + var3E = currentObjPtr2; + } + + currentObjPtr2->prev = NULL; + + currentObjPtr2->next = var40; + + var40 = currentObjPtr2; + + if (match == NULL) { + match = currentObjPtr2; + } + } else { + if (currentObjPtr2->type == 5) { + var2 = 32000; + } else { + int16 varC; + + getSingleObjectParam(currentObjPtr2->overlay, + currentObjPtr2->idx, 2, &varC); + + var2 = varC; + } + + if (var > var2) { + var8_ = currentObjPtr2; + } + + currentObjPtrPrevious = currentObjPtrPrevious->next; + } + + currentObjPtr2 = currentObjPtr2->next; + } + + if (match) { + cellStruct *temp; + + temp = var8_->next; + + var8_->next = var40; + match->next = temp; + + if (objPtr != var8_) { + var40->prev = var8_; + } + + if (!temp) { + temp = match; + } + + temp->prev = match; + } +} + } // End of namespace Cruise diff --git a/engines/cruise/cell.h b/engines/cruise/cell.h index 305df76561..2664d3421f 100644 --- a/engines/cruise/cell.h +++ b/engines/cruise/cell.h @@ -38,26 +38,26 @@ struct cellStruct { int16 idx; int16 type; int16 overlay; - int16 field_A; + int16 x; int16 field_C; int16 spriteIdx; int16 color; int16 backgroundPlane; int16 freeze; - int16 field_16; - int16 field_18; - int16 field_1A; + int16 parent; + int16 parentOverlay; + int16 parentType; int16 followObjectOverlayIdx; int16 followObjectIdx; - int16 field_20; - int16 field_22; - int16 nextAnimDelay; + int16 animStart; + int16 animEnd; + int16 animWait; int16 animStep; - int16 field_28; - int16 field_2A; - int16 field_2C; - int16 currentAnimDelay; - int16 field_30; + int16 animChange; + int16 animType; + int16 animSignal; + int16 animCounter; + int16 animLoop; gfxEntryStruct *gfxPtr; }; @@ -65,9 +65,11 @@ extern cellStruct cellHead; void resetPtr(cellStruct * ptr); void loadSavegameDataSub2(FILE * f); -cellStruct *addCell(int16 overlayIdx, int16 param2, cellStruct * pHead, - int16 scriptType, int16 scriptNumber, int16 scriptOverlay, int16 param3, - int16 param4); +cellStruct *addCell(cellStruct *pHead, int16 overlayIdx, int16 objIdx, int16 type, int16 backgroundPlane, int16 scriptOverlay, int16 scriptNumber, int16 scriptType); +void createTextObject(int overlayIdx, int oldVar8, cellStruct * pObject, int scriptNumber, int scriptOverlayNumber, int backgroundPlane, int16 color, int oldVar2, int oldVar4, int oldVar6); +void removeCell(cellStruct *objPtr, int ovlNumber, int objectIdx, int objType, int backgroundPlane ); +void freezeCell(cellStruct * pObject, int overlayIdx, int objIdx, int objType, int backgroundPlane, int oldFreeze, int newFreeze ); +void sortCells(int16 param1, int16 param2, cellStruct *objPtr); } // End of namespace Cruise diff --git a/engines/cruise/cruise_main.cpp b/engines/cruise/cruise_main.cpp index 9784963315..f24e1f1cd7 100644 --- a/engines/cruise/cruise_main.cpp +++ b/engines/cruise/cruise_main.cpp @@ -480,8 +480,8 @@ int initAllData(void) { initBigVar3(); - resetPtr2(&scriptHandle2); - resetPtr2(&scriptHandle1); + resetPtr2(&procHead); + resetPtr2(&relHead); resetPtr(&cellHead); @@ -579,9 +579,8 @@ int initAllData(void) { if (bootOverlayNumber) { positionInStack = 0; - attacheNewScriptToTail(bootOverlayNumber, &scriptHandle2, 0, - 20, 0, 0, scriptType_20); - scriptFunc2(bootOverlayNumber, &scriptHandle2, 1, 0); + attacheNewScriptToTail(bootOverlayNumber, &procHead, 0, 20, 0, 0, scriptType_PROC); + scriptFunc2(bootOverlayNumber, &procHead, 1, 0); } strcpyuint8(systemStrings.bootScriptName, "AUTO00"); @@ -878,7 +877,7 @@ int buildInventorySub1(int overlayIdx, int objIdx) { getObjectDataFromOverlay(overlayIdx, objIdx); if (pObjectData) { - return pObjectData->var1; + return pObjectData->type; } else { return -11; } @@ -1029,7 +1028,7 @@ int callInventoryObject(int param0, int param1, int x, int y) { var_34->stringNameOffset) { if (pObject) { if (pObject-> - var1 != + type != 3) { char var_214[80]; char var_1C4[80]; @@ -1163,7 +1162,7 @@ int callInventoryObject(int param0, int param1, int x, int y) { if (strlen(var_214)) { attacheNewScriptToTail (var_1E, - &scriptHandle1, + &relHead, var_34-> field_2, 30, @@ -1171,7 +1170,7 @@ int callInventoryObject(int param0, int param1, int x, int y) { scriptNumber, currentScriptPtr-> overlayNumber, - scriptType_30); + scriptType_REL); } else { if (var_22->specialString1) { ptr = getObjectName(var_34->varNameOffset, var_22->specialString1); @@ -1531,11 +1530,11 @@ void mainLoop(void) { enableUser = 0; } - manageScripts(&scriptHandle1); - manageScripts(&scriptHandle2); + manageScripts(&relHead); + manageScripts(&procHead); - removeFinishedScripts(&scriptHandle1); - removeFinishedScripts(&scriptHandle2); + removeFinishedScripts(&relHead); + removeFinishedScripts(&procHead); processAnimation(); diff --git a/engines/cruise/dataLoader.cpp b/engines/cruise/dataLoader.cpp index 774262aef0..285279b437 100644 --- a/engines/cruise/dataLoader.cpp +++ b/engines/cruise/dataLoader.cpp @@ -185,8 +185,7 @@ int updateResFileEntry(int height, int width, int entryNumber, int resType) { return (-2); filesDatabase[entryNumber].widthInColumn = width; - filesDatabase[entryNumber].subData.ptr2 = - filesDatabase[entryNumber].subData.ptr + size; + filesDatabase[entryNumber].subData.ptr2 = filesDatabase[entryNumber].subData.ptr + size; filesDatabase[entryNumber].width = width / 8; filesDatabase[entryNumber].resType = resType; filesDatabase[entryNumber].height = height; @@ -225,16 +224,14 @@ int createResFileEntry(int width, int height, int resType) { width = (width * 8) / 5; } - filesDatabase[entryNumber].subData.ptr = - (uint8 *) mallocAndZero(size + div); + filesDatabase[entryNumber].subData.ptr = (uint8 *) mallocAndZero(size + div); if (filesDatabase[entryNumber].subData.ptr) { return (-2); } filesDatabase[entryNumber].widthInColumn = width; - filesDatabase[entryNumber].subData.ptr2 = - filesDatabase[entryNumber].subData.ptr + size; + filesDatabase[entryNumber].subData.ptr2 = filesDatabase[entryNumber].subData.ptr + size; filesDatabase[entryNumber].width = width / 8; filesDatabase[entryNumber].resType = resType; filesDatabase[entryNumber].height = height; diff --git a/engines/cruise/decompiler.cpp b/engines/cruise/decompiler.cpp index a2a554aedf..f902fe4673 100644 --- a/engines/cruise/decompiler.cpp +++ b/engines/cruise/decompiler.cpp @@ -837,7 +837,7 @@ int decompFunction(void) { } case 0x8: { - sprintf(tempbuffer, "_removeObjectFromList(%s,%s,%s)", + sprintf(tempbuffer, "_removeCell(%s,%s,%s)", popDecomp(), popDecomp(), popDecomp()); pushDecomp(tempbuffer); break; diff --git a/engines/cruise/detection.cpp b/engines/cruise/detection.cpp index d40f98f067..d875cc4943 100644 --- a/engines/cruise/detection.cpp +++ b/engines/cruise/detection.cpp @@ -75,7 +75,7 @@ static const CRUISEGameDescription gameDescriptions[] = { { { "cruise", - "", + "256 colors", AD_ENTRY1("D1", "a90d2b9ead6b4d812cd14268672cf178"), Common::EN_ANY, Common::kPlatformPC, diff --git a/engines/cruise/function.cpp b/engines/cruise/function.cpp index 5a996479a3..559cecd189 100644 --- a/engines/cruise/function.cpp +++ b/engines/cruise/function.cpp @@ -30,19 +30,6 @@ namespace Cruise { opcodeFunction opcodeTablePtr[256]; -struct actorTableStruct { - int data[13]; -}; - -typedef struct actorTableStruct actorTableStruct; - -actorTableStruct actorTable1[] = { - { { 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { { 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { { 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { {-38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } -}; - int16 Op_LoadOverlay(void) { uint8 *originalScriptName; uint8 scriptName[38]; @@ -116,9 +103,9 @@ int16 Op_startScript(void) { } ptr = - attacheNewScriptToTail(ovlIdx, &scriptHandle2, scriptIdx, + attacheNewScriptToTail(ovlIdx, &procHead, scriptIdx, currentScriptPtr->type, currentScriptPtr->scriptNumber, - currentScriptPtr->overlayNumber, scriptType_Minus20); + currentScriptPtr->overlayNumber, scriptType_MinusPROC); if (!ptr) return (0); @@ -156,9 +143,7 @@ int16 Op_AddProc(void) { if (!overlay) return (0); - attacheNewScriptToTail(overlay, &scriptHandle2, pop2, - currentScriptPtr->type, currentScriptPtr->scriptNumber, - currentScriptPtr->overlayNumber, scriptType_20); + attacheNewScriptToTail(overlay, &procHead, pop2, currentScriptPtr->type, currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber, scriptType_PROC); if (pop1 > 0) { printf("Unsupported art send in op6!\n"); @@ -287,8 +272,7 @@ int16 Op_RemoveMessage(void) { overlay = currentScriptPtr->overlayNumber; } - removeObjectFromList(overlay, idx, &cellHead, - currentActiveBackgroundPlane, 5); + removeCell(&cellHead, overlay, idx, 5, currentActiveBackgroundPlane); return (0); } @@ -349,7 +333,7 @@ int16 Op_RemoveProc(void) { overlay = currentScriptPtr->overlayNumber; } - removeScript(overlay, idx, &scriptHandle2); + removeScript(overlay, idx, &procHead); return (0); } @@ -423,10 +407,10 @@ int16 Op_changeCutSceneState(void) { int16 Op_62(void) { if (currentScriptPtr->var1A == 20) { changeScriptParamInList(currentScriptPtr->var18, - currentScriptPtr->var16, &scriptHandle2, 9997, -1); + currentScriptPtr->var16, &procHead, 9997, -1); } else if (currentScriptPtr->var1A == 30) { changeScriptParamInList(currentScriptPtr->var18, - currentScriptPtr->var16, &scriptHandle1, 9997, -1); + currentScriptPtr->var16, &relHead, 9997, -1); } return 0; @@ -541,7 +525,7 @@ int16 Op_InitializeState(void) { if (!ovlIdx) ovlIdx = currentScriptPtr->overlayNumber; - Op_InitializeStateSub(ovlIdx, objIdx, param1); + objInit(ovlIdx, objIdx, param1); return (0); } @@ -613,38 +597,34 @@ int16 Op_GetMouseClick3(void) { } int16 Op_AddCell(void) { - int16 param1 = popVar(); - int16 param2 = popVar(); + int16 objType = popVar(); + int16 objIdx = popVar(); int16 overlayIdx = popVar(); if (!overlayIdx) overlayIdx = currentScriptPtr->overlayNumber; - addCell(overlayIdx, param2, &cellHead, currentScriptPtr->type, - currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber, - currentActiveBackgroundPlane, param1); + addCell(&cellHead, overlayIdx, objIdx, objType, currentActiveBackgroundPlane, currentScriptPtr->overlayNumber, currentScriptPtr->scriptNumber, currentScriptPtr->type); return 0; } -int16 Op_2F(void) { - int16 param1 = popVar(); - int16 param2 = popVar(); +int16 Op_AddBackgroundIncrust(void) { + int16 objType = popVar(); + int16 objIdx = popVar(); int16 overlayIdx = popVar(); if (!overlayIdx) overlayIdx = currentScriptPtr->overlayNumber; - addBackgroundIncrust(overlayIdx, param2, &backgroundIncrustHead, - currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber, - currentActiveBackgroundPlane, param1); + addBackgroundIncrust(overlayIdx, objIdx, &backgroundIncrustHead, currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber, currentActiveBackgroundPlane, objType); return 0; } int16 Op_RemoveCell(void) { - var1 = popVar(); + int objType = popVar(); int objectIdx = popVar(); int ovlNumber = popVar(); @@ -652,8 +632,7 @@ int16 Op_RemoveCell(void) { ovlNumber = currentScriptPtr->overlayNumber; } - removeObjectFromList(ovlNumber, objectIdx, &cellHead, - currentActiveBackgroundPlane, var1); + removeCell(&cellHead, ovlNumber, objectIdx, objType, currentActiveBackgroundPlane); return 0; } @@ -669,10 +648,10 @@ int16 Op_SetFontFileIndex(void) { int16 Op_63(void) { if (currentScriptPtr->var1A == 0x14) { changeScriptParamInList(currentScriptPtr->var18, - currentScriptPtr->var16, &scriptHandle2, 0, -1); + currentScriptPtr->var16, &procHead, 0, -1); } else if (currentScriptPtr->var1A == 0x1E) { changeScriptParamInList(currentScriptPtr->var18, - currentScriptPtr->var16, &scriptHandle1, 0, -1); + currentScriptPtr->var16, &relHead, 0, -1); } return 0; @@ -770,47 +749,39 @@ int16 Op_AutoCell(void) { if (!overlay) overlay = currentScriptPtr->overlayNumber; - pObject = - addCell(overlay, obj, &cellHead, currentScriptPtr->type, - currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber, - currentActiveBackgroundPlane, 4); + pObject = addCell(&cellHead, overlay, obj, 4, currentActiveBackgroundPlane, currentScriptPtr->overlayNumber, currentScriptPtr->scriptNumber, currentScriptPtr->type); if (!pObject) return 0; - pObject->field_2C = signal; - pObject->field_30 = loop; - pObject->nextAnimDelay = wait; + pObject->animSignal = signal; + pObject->animLoop = loop; + pObject->animWait = wait; pObject->animStep = animStep; - pObject->field_22 = end; - pObject->field_20 = start; - pObject->field_2A = type; - pObject->field_28 = change; + pObject->animEnd = end; + pObject->animStart = start; + pObject->animType = type; + pObject->animChange = change; if (type) { - if (currentScriptPtr->type == 20) { - changeScriptParamInList(currentScriptPtr-> - overlayNumber, currentScriptPtr->scriptNumber, - &scriptHandle2, 9996, -1); - } else if (currentScriptPtr->type == 30) { - changeScriptParamInList(currentScriptPtr-> - overlayNumber, currentScriptPtr->scriptNumber, - &scriptHandle1, 9996, -1); + if (currentScriptPtr->type == scriptType_PROC) { + changeScriptParamInList(currentScriptPtr->overlayNumber, currentScriptPtr->scriptNumber, &procHead, 9996, -1); + } else if (currentScriptPtr->type == scriptType_REL) { + changeScriptParamInList(currentScriptPtr->overlayNumber, currentScriptPtr->scriptNumber, &relHead, 9996, -1); } } if (change == 5) { - Op_InitializeStateSub(pObject->overlay, pObject->idx, start); + objInit(pObject->overlay, pObject->idx, start); } else { - setObjectPosition(pObject->overlay, pObject->idx, - pObject->field_28, start); + setObjectPosition(pObject->overlay, pObject->idx, pObject->animChange, start); } if (wait < 0) { objectParamsQuery params; getMultipleObjectParam(overlay, obj, ¶ms); - pObject->currentAnimDelay = params.var6 - 1; + pObject->animCounter = params.var6 - 1; } return 0; @@ -927,7 +898,7 @@ void removeBackgroundIncrust(int overlay, int idx, } } -int16 Op_removeBackgroundIncrust(void) { +int16 Op_RemoveBackgroundIncrust(void) { int idx = popVar(); int overlay = popVar(); @@ -1178,11 +1149,11 @@ int16 Op_AddAnimation(void) { si->stepX = stepX; si->stepY = stepY; - int newFrame = ABS(actorTable1[direction].data[0]) - 1; + int newFrame = ABS(raoul_end[direction][0]) - 1; int zoom = computeZoom(params.Y); - if (actorTable1[direction].data[0] < 0) { + if (raoul_end[direction][0] < 0) { zoom = -zoom; } @@ -1332,47 +1303,19 @@ int16 Op_6C(void) { return temp; } -void configureAllObjects(int overlayIdx, cellStruct * pObject, int _var4, - int _var0, int _var1, int _var2, int _var3) { - while (pObject) { - if ((pObject->overlay == overlayIdx) || (overlayIdx == -1)) { - if ((pObject->idx == _var4) || (_var4 == -1)) { - if ((pObject->type == _var3) || (_var3 == -1)) { - if ((pObject->backgroundPlane == _var2) || (_var2 == -1)) { - if ((pObject->freeze == _var1) || (_var1 == -1)) { - pObject->freeze = _var0; - } - } - } - } - } - - pObject = pObject->next; - } -} - int16 Op_FreezeCell(void) { - /* - * int var0; - * int var1; - * int var2; - * int var3; - * int var4; - * int var5; - */ - - var0 = popVar(); - var1 = popVar(); - var2 = popVar(); - var3 = popVar(); - var4 = popVar(); - var5 = popVar(); + int newFreezz = popVar(); + int oldFreeze = popVar(); + int backgroundPlante = popVar(); + int objType = popVar(); + int objIdx = popVar(); + int overlayIdx = popVar(); - if (!var5) { - var5 = currentScriptPtr->overlayNumber; + if (!overlayIdx) { + overlayIdx = currentScriptPtr->overlayNumber; } - configureAllObjects(var5, &cellHead, var4, var0, var1, var2, var3); + freezeCell(&cellHead, overlayIdx, objIdx, objType, backgroundPlante, oldFreeze, newFreezz); return 0; } @@ -1509,8 +1452,8 @@ void setupOpcodeTable(void) { opcodeTablePtr[0x2B] = Op_2B; opcodeTablePtr[0x2C] = Op_2C; opcodeTablePtr[0x2E] = Op_releaseOverlay; - opcodeTablePtr[0x2F] = Op_2F; - opcodeTablePtr[0x30] = Op_removeBackgroundIncrust; + opcodeTablePtr[0x2F] = Op_AddBackgroundIncrust; + opcodeTablePtr[0x30] = Op_RemoveBackgroundIncrust; opcodeTablePtr[0x32] = Op_freeBackgroundInscrustList; opcodeTablePtr[0x37] = Op_37; opcodeTablePtr[0x38] = Op_removeBackground; diff --git a/engines/cruise/mainDraw.cpp b/engines/cruise/mainDraw.cpp index 241905e56d..c1a52814df 100644 --- a/engines/cruise/mainDraw.cpp +++ b/engines/cruise/mainDraw.cpp @@ -29,43 +29,55 @@ namespace Cruise { int currentTransparent; -struct drawVar1Struct { - struct drawVar1Struct *next; - short int field_2; - short int field_4; - short int field_6; - short int field_8; - cellStruct *field_A; +struct autoCellStruct { + struct autoCellStruct *next; + short int ovlIdx; + short int objIdx; + short int type; + short int newValue; + cellStruct *pCell; }; -typedef struct drawVar1Struct drawVar1Struct; +typedef struct autoCellStruct autoCellStruct; -drawVar1Struct drawVar1; +autoCellStruct autoCellHead; -void mainDraw6(void) { - drawVar1Struct *pCurrent = drawVar1.next; +void addAutoCell(int overlayIdx, int idx, int type, int newVal, cellStruct *pObject) { + autoCellStruct *pNewEntry; + + pNewEntry = new autoCellStruct; + + pNewEntry->next = autoCellHead.next; + autoCellHead.next = pNewEntry; + + pNewEntry->ovlIdx = overlayIdx; + pNewEntry->objIdx = idx; + pNewEntry->type = type; + pNewEntry->newValue = newVal; + pNewEntry->pCell = pObject; +} + +void freeAutoCell(void) { + autoCellStruct *pCurrent = autoCellHead.next; while (pCurrent) { - drawVar1Struct *next = pCurrent->next; + autoCellStruct *next = pCurrent->next; - if (pCurrent->field_6 == 5) { - Op_InitializeStateSub(pCurrent->field_2, - pCurrent->field_4, pCurrent->field_8); + if (pCurrent->type == 5) { + objInit(pCurrent->ovlIdx, pCurrent->objIdx, pCurrent->newValue); } else { - setObjectPosition(pCurrent->field_2, pCurrent->field_4, - pCurrent->field_6, pCurrent->field_8); + setObjectPosition(pCurrent->ovlIdx, pCurrent->objIdx, pCurrent->type, pCurrent->newValue); } - if (pCurrent->field_A->nextAnimDelay < 0) { + if (pCurrent->pCell->animWait < 0) { objectParamsQuery params; - getMultipleObjectParam(pCurrent->field_2, - pCurrent->field_4, ¶ms); + getMultipleObjectParam(pCurrent->ovlIdx, pCurrent->objIdx, ¶ms); - pCurrent->field_A->currentAnimDelay = params.var6 - 1; + pCurrent->pCell->animCounter = params.var6 - 1; } - free(pCurrent); + delete pCurrent; pCurrent = next; } @@ -683,22 +695,6 @@ void mainDrawSub4(int objX1, int var_6, cellStruct *currentObjPtr, } } -void mainDraw5(int overlayIdx, int idx, int field_28, cellStruct *pObject, - int newVal) { - drawVar1Struct *pNewEntry; - - pNewEntry = (drawVar1Struct *) malloc(sizeof(drawVar1Struct)); - - pNewEntry->next = drawVar1.next; - drawVar1.next = pNewEntry; - - pNewEntry->field_2 = overlayIdx; - pNewEntry->field_4 = idx; - pNewEntry->field_6 = field_28; - pNewEntry->field_8 = newVal; - pNewEntry->field_A = pObject; -} - #ifdef _DEBUG void drawCtp(void) { int i; @@ -875,7 +871,7 @@ void mainDraw(int16 param) { (char *)gfxModuleData.pPage10); } - drawVar1.next = NULL; + autoCellHead.next = NULL; currentObjPtr = cellHead.next; @@ -926,8 +922,7 @@ void mainDraw(int16 param) { objZ2 += objZ1; } - if ((params.var5 >= 0) && (objZ2 >= 0) - && filesDatabase[objZ2].subData.ptr) { + if ((params.var5 >= 0) && (objZ2 >= 0) && filesDatabase[objZ2].subData.ptr) { if (filesDatabase[objZ2].subData.resourceType == 8) // Poly { mainDrawPolygons(objZ2, currentObjPtr, objX2, params.scale, objY2, (char *)gfxModuleData.pPage10, (char *)filesDatabase[objZ2].subData.ptr); // poly @@ -935,88 +930,44 @@ void mainDraw(int16 param) { { } else if (filesDatabase[objZ2].resType == 1) //(num plan == 1) { - } else if (filesDatabase[objZ2].subData. - resourceType == 4) { + } else if (filesDatabase[objZ2].subData.resourceType == 4) { objX1 = filesDatabase[objZ2].width; // width spriteHeight = filesDatabase[objZ2].height; // height if (filesDatabase[objZ2].subData.ptr) { - currentTransparent = - filesDatabase[objZ2]. - subData.transparency; - - mainDrawSub4(objX1, - spriteHeight, - currentObjPtr, - (char *) - filesDatabase[objZ2]. - subData.ptr, objY2, objX2, - (char *)gfxModuleData. - pPage10, - (char *) - filesDatabase[objZ2]. - subData.ptr); + currentTransparent = filesDatabase[objZ2].subData.transparency; + + mainDrawSub4(objX1, spriteHeight, currentObjPtr, (char *)filesDatabase[objZ2].subData.ptr, objY2, objX2,(char *)gfxModuleData.pPage10,(char *)filesDatabase[objZ2].subData.ptr); } } } if ((currentObjPtr->animStep != 0) && (param == 0)) { - if (currentObjPtr->currentAnimDelay <= 0) { + if (currentObjPtr->animCounter <= 0) { int newVal; bool change = true; - newVal = - getValueFromObjectQuerry(¶ms, - currentObjPtr->field_28) + - currentObjPtr->animStep; + newVal = getValueFromObjectQuerry(¶ms, currentObjPtr->animChange) + currentObjPtr->animStep; if (currentObjPtr->animStep > 0) { - if (newVal > - currentObjPtr->field_22) { - if (currentObjPtr-> - field_30) { - newVal = - currentObjPtr-> - field_20; - currentObjPtr-> - field_30--; + if (newVal > currentObjPtr->animEnd) { + if (currentObjPtr->animLoop) { + newVal = currentObjPtr->animStart; + currentObjPtr->animLoop--; } else { int16 data2; - data2 = - currentObjPtr-> - field_20; + data2 = currentObjPtr->animStart; change = false; - currentObjPtr-> - animStep = - 0; + currentObjPtr->animStep = 0; - if (currentObjPtr->field_2A) // should we resume the script ? + if (currentObjPtr->animType) // should we resume the script ? { - if (currentObjPtr->field_1A == 20) { - changeScriptParamInList - (currentObjPtr-> - field_18, - currentObjPtr-> - field_16, - &scriptHandle2, - 0, - -1); - } else - if - (currentObjPtr-> - field_1A - == - 30) - { - changeScriptParamInList - (currentObjPtr-> - field_18, - currentObjPtr-> - field_16, - &scriptHandle1, - 0, - -1); + if (currentObjPtr->parentType == 20) { + changeScriptParamInList(currentObjPtr->parentOverlay, currentObjPtr->parent, &procHead, 0, -1); + } + else if(currentObjPtr->parentType == 30) { + changeScriptParamInList(currentObjPtr->parentOverlay, currentObjPtr->parent, &relHead, 0, -1); } } newVal = data2; @@ -1029,50 +980,25 @@ void mainDraw(int16 param) { * } */ } - if (currentObjPtr->nextAnimDelay >= 0) { - currentObjPtr-> - currentAnimDelay = - currentObjPtr-> - nextAnimDelay; + if (currentObjPtr->animWait >= 0) { + currentObjPtr->animCounter = currentObjPtr->animWait; } - if ((currentObjPtr->field_2C >= 0) - && (currentObjPtr->field_2C == - newVal) - && (currentObjPtr->field_2A != - 0)) { - if (currentObjPtr->field_1A == - 20) { - changeScriptParamInList - (currentObjPtr-> - field_18, - currentObjPtr-> - field_16, - &scriptHandle2, 0, - -1); - } else if (currentObjPtr-> - field_1A == 30) { - changeScriptParamInList - (currentObjPtr-> - field_18, - currentObjPtr-> - field_16, - &scriptHandle1, 0, - -1); + if ((currentObjPtr->animSignal >= 0) && (currentObjPtr->animSignal == newVal) && (currentObjPtr->animType != 0)) { + if (currentObjPtr->parentType == 20) { + changeScriptParamInList(currentObjPtr->parentOverlay, currentObjPtr->parent, &procHead, 0, -1); + } else if (currentObjPtr->parentType == 30) { + changeScriptParamInList(currentObjPtr->parentOverlay, currentObjPtr->parent, &relHead, 0, -1); } - currentObjPtr->field_2A = 0; + currentObjPtr->animType = 0; } if (change) { - mainDraw5(currentObjPtr-> - overlay, - currentObjPtr->idx, - currentObjPtr->field_28, - currentObjPtr, newVal); + addAutoCell(currentObjPtr->overlay, currentObjPtr->idx, currentObjPtr->animChange, newVal, currentObjPtr); } } else { - currentObjPtr->currentAnimDelay--; + currentObjPtr->animCounter--; } } } @@ -1082,7 +1008,7 @@ void mainDraw(int16 param) { //----------------------------------------------------------------------------------------------------------------// - mainDraw6(); + freeAutoCell(); var20 = 0; //-------------------------------------------------- DRAW OBJECTS TYPE 5 (MSG)-----------------------------------------// @@ -1091,10 +1017,7 @@ void mainDraw(int16 param) { while (currentObjPtr) { if (currentObjPtr->type == 5 && currentObjPtr->freeze == 0) { - mainSprite(currentObjPtr->field_A, - currentObjPtr->field_C, currentObjPtr->gfxPtr, - gfxModuleData.pPage10, currentObjPtr->color, - currentObjPtr->spriteIdx); + mainSprite(currentObjPtr->x, currentObjPtr->field_C, currentObjPtr->gfxPtr, gfxModuleData.pPage10, currentObjPtr->color, currentObjPtr->spriteIdx); var20 = 1; } currentObjPtr = currentObjPtr->next; diff --git a/engines/cruise/object.cpp b/engines/cruise/object.cpp index e4500d9683..2014ab1e4d 100644 --- a/engines/cruise/object.cpp +++ b/engines/cruise/object.cpp @@ -73,14 +73,14 @@ int16 getMultipleObjectParam(int16 overlayIdx, int16 objectIdx, ovlData = overlayTable[overlayIdx].ovlData; - switch (ptr->var1) { + switch (ptr->type) { case 0: { ptr2 = &ovlData->objData2SourceTable[ptr->var5]; - var_14 = globalVars[*(int16 *) (&overlayTable[overlayIdx].field_14 + ptr->var6)]; + var_14 = globalVars[*(int16 *) (&overlayTable[overlayIdx].state + ptr->stateTableIdx)]; - var_A = ptr2->var5; + var_A = ptr2->state; break; } @@ -88,25 +88,25 @@ int16 getMultipleObjectParam(int16 overlayIdx, int16 objectIdx, { ptr2 = &ovlData->objData2WorkTable[ptr->var4]; - var_A = var_14 = ptr2->var5; + var_A = var_14 = ptr2->state; size = var_A + ptr->var5; if (ptr->var5 + var_14 <= ovlData->size8) { - var_A = ovlData->objData2SourceTable[ptr->var5 + var_14].var5; + var_A = ovlData->objData2SourceTable[ptr->var5 + var_14].state; } break; } default: { - printf("unsupported case %d in getMultipleObjectParam\n", ptr->var1); + printf("unsupported case %d in getMultipleObjectParam\n", ptr->type); exit(1); } } returnParam->X = ptr2->X; returnParam->Y = ptr2->Y; - returnParam->baseFileIdx = ptr2->baseFileIdx; - returnParam->fileIdx = ptr2->var3; + returnParam->baseFileIdx = ptr2->Z; + returnParam->fileIdx = ptr2->frame; returnParam->scale = ptr2->scale; returnParam->var5 = var_14; returnParam->var6 = var_A; @@ -115,11 +115,11 @@ int16 getMultipleObjectParam(int16 overlayIdx, int16 objectIdx, return 0; } -void setObjectPosition(int16 param1, int16 objIdx, int16 param3, int16 param4) { +void setObjectPosition(int16 ovlIdx, int16 objIdx, int16 param3, int16 param4) { objDataStruct *ptr; objectParams *ptr2; - ptr = getObjectDataFromOverlay(param1, objIdx); + ptr = getObjectDataFromOverlay(ovlIdx, objIdx); if (!ptr) { return; @@ -127,10 +127,10 @@ void setObjectPosition(int16 param1, int16 objIdx, int16 param3, int16 param4) { } //overlayTable[param1].ovlData - switch (ptr->var1) { + switch (ptr->type) { case 1: { - ptr2 = &overlayTable[param1].ovlData->objData2WorkTable[ptr->var4]; + ptr2 = &overlayTable[ovlIdx].ovlData->objData2WorkTable[ptr->var4]; switch (param3) { case 0: // x @@ -143,14 +143,15 @@ void setObjectPosition(int16 param1, int16 objIdx, int16 param3, int16 param4) { ptr2->Y = param4; break; } - case 2: // base file + case 2: // z { - ptr2->baseFileIdx = param4; + ptr2->Z = param4; + sortCells(ovlIdx, objIdx, &cellHead); break; } case 3: { - ptr2->var3 = param4; + ptr2->frame = param4; break; } case 4: // scale @@ -160,7 +161,7 @@ void setObjectPosition(int16 param1, int16 objIdx, int16 param3, int16 param4) { } case 5: // box colision { - ptr2->var5 = param4; + ptr2->state = param4; break; } default: @@ -178,94 +179,7 @@ void setObjectPosition(int16 param1, int16 objIdx, int16 param3, int16 param4) { } } -void Op_InitializeStateSub1(int16 param1, int16 param2, cellStruct *objPtr) { - int16 var; - cellStruct *var8_; - cellStruct *var40; - cellStruct *var3E; - cellStruct *currentObjPtrPrevious; - cellStruct *currentObjPtr2; - cellStruct *match; - - getSingleObjectParam(param1, param2, 2, &var); - - currentObjPtrPrevious = objPtr; - currentObjPtr2 = objPtr->next; - - match = NULL; - var40 = NULL; - var3E = NULL; - var8_ = objPtr; - - while (currentObjPtr2) { - if ((currentObjPtr2->overlay == param1) && (currentObjPtr2->idx == param2)) {// found - currentObjPtrPrevious->next = currentObjPtr2->next; - - if (currentObjPtr2->next) { - currentObjPtr2->next->prev = - currentObjPtr2->prev; - } else { - objPtr->prev = currentObjPtr2->prev; - } - - if (var40) { - var40->prev = currentObjPtr2; - } else { - var3E = currentObjPtr2; - } - - currentObjPtr2->prev = NULL; - - currentObjPtr2->next = var40; - - var40 = currentObjPtr2; - - if (match == NULL) { - match = currentObjPtr2; - } - } else { - if (currentObjPtr2->type == 5) { - var2 = 32000; - } else { - int16 varC; - - getSingleObjectParam(currentObjPtr2->overlay, - currentObjPtr2->idx, 2, &varC); - - var2 = varC; - } - - if (var > var2) { - var8_ = currentObjPtr2; - } - - currentObjPtrPrevious = currentObjPtrPrevious->next; - } - - currentObjPtr2 = currentObjPtr2->next; - } - - if (match) { - cellStruct *temp; - - temp = var8_->next; - - var8_->next = var40; - match->next = temp; - - if (objPtr != var8_) { - var40->prev = var8_; - } - - if (!temp) { - temp = match; - } - - temp->prev = match; - } -} - -int16 Op_InitializeStateSub(int ovlIdx, int objIdx, int param2) { +int16 objInit(int ovlIdx, int objIdx, int newState) { objDataStruct *ptr; // uint16 param; ovlDataStruct *ovlData; @@ -277,39 +191,38 @@ int16 Op_InitializeStateSub(int ovlIdx, int objIdx, int param2) { ovlData = overlayTable[ovlIdx].ovlData; - switch (ptr->var1) { - case 0: + switch (ptr->type) { + case THEME: + case MULTIPLE: { - globalVars[overlayTable[ovlIdx].field_14 + ptr->var6] = - param2; - Op_InitializeStateSub1(ovlIdx, param2, &cellHead); + globalVars[overlayTable[ovlIdx].state + ptr->stateTableIdx] = newState; + sortCells(ovlIdx, objIdx, &cellHead); break; } - case 1: + case UNIQUE: + break; + case VARIABLE: { objectParams *destEntry; objectParams *sourceEntry; - if (ptr->var5 + param2 > ovlData->size8) { + if (ptr->var5 + newState > ovlData->size8) { return 0; } destEntry = &ovlData->objData2WorkTable[ptr->var4]; - sourceEntry = - &ovlData->objData2SourceTable[ptr->var5 + param2]; + sourceEntry = &ovlData->objData2SourceTable[ptr->var5 + newState]; memcpy(destEntry, sourceEntry, sizeof(objectParams)); - destEntry->var5 = param2; + destEntry->state = newState; - Op_InitializeStateSub1(ovlIdx, param2, &cellHead); + sortCells(ovlIdx, objIdx, &cellHead); break; } default: { - printf - ("Unsupported param = %d in Op_InitializeStateSub\n", - ptr->var1); + printf("Unsupported param = %d in objInit\n", ptr->type); // exit(1); } } @@ -317,8 +230,7 @@ int16 Op_InitializeStateSub(int ovlIdx, int objIdx, int param2) { return 0; } -int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3, - int16 *returnParam) { +int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3, int16 *returnParam) { int var_A = 0; //char* ptr3 = NULL; objDataStruct *ptr; @@ -332,11 +244,11 @@ int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3, ovlData = overlayTable[overlayIdx].ovlData; - switch (ptr->var1) { + switch (ptr->type) { case 0: case 3: { - var_A = globalVars[ptr->var6]; + var_A = globalVars[ptr->stateTableIdx]; ptr2 = &ovlData->objData2SourceTable[ptr->var5]; break; @@ -345,13 +257,12 @@ int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3, { ptr2 = &ovlData->objData2WorkTable[ptr->var4]; - var_A = ptr2->var5; + var_A = ptr2->state; break; } default: { - printf("Unsupported case %d in getSingleObjectParam\n", - ptr->var1); + printf("Unsupported case %d in getSingleObjectParam\n",ptr->type); exit(1); } } @@ -369,12 +280,12 @@ int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3, } case 2: { - *returnParam = ptr2->baseFileIdx; + *returnParam = ptr2->Z; break; } case 3: { - *returnParam = ptr2->var3; + *returnParam = ptr2->frame; break; } case 4: @@ -389,9 +300,7 @@ int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3, } default: { - printf - ("Unsupported case %d in getSingleObjectParam case 1\n", - param3); + printf("Unsupported case %d in getSingleObjectParam case 1\n", param3); exit(1); } } diff --git a/engines/cruise/object.h b/engines/cruise/object.h index 24b8461851..e946d22c66 100644 --- a/engines/cruise/object.h +++ b/engines/cruise/object.h @@ -53,10 +53,8 @@ struct objectParamsQuery { typedef struct objectParamsQuery objectParamsQuery; objDataStruct *getObjectDataFromOverlay(int ovlIdx, int objIdx); -int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3, - int16 * returnParam); -int16 getMultipleObjectParam(int16 overlayIdx, int16 objectIdx, - objectParamsQuery * returnParam); +int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3, int16 * returnParam); +int16 getMultipleObjectParam(int16 overlayIdx, int16 objectIdx, objectParamsQuery * returnParam); } // End of namespace Cruise diff --git a/engines/cruise/overlay.cpp b/engines/cruise/overlay.cpp index c221d07a0b..af52f25e16 100644 --- a/engines/cruise/overlay.cpp +++ b/engines/cruise/overlay.cpp @@ -420,9 +420,9 @@ int loadOverlay(uint8 *scriptName) { scriptPtr += 2; flipShort(&ovlData->objDataTable[i].var0); - ovlData->objDataTable[i].var1 = *(int16 *) scriptPtr; + ovlData->objDataTable[i].type = *(int16 *) scriptPtr; scriptPtr += 2; - flipShort(&ovlData->objDataTable[i].var1); + flipShort(&ovlData->objDataTable[i].type); ovlData->objDataTable[i].var2 = *(int16 *) scriptPtr; scriptPtr += 2; @@ -440,16 +440,16 @@ int loadOverlay(uint8 *scriptName) { scriptPtr += 2; flipShort(&ovlData->objDataTable[i].var5); - ovlData->objDataTable[i].var6 = *(int16 *) scriptPtr; + ovlData->objDataTable[i].stateTableIdx = *(int16 *) scriptPtr; scriptPtr += 2; - flipShort(&ovlData->objDataTable[i].var6); + flipShort(&ovlData->objDataTable[i].stateTableIdx); } if (scriptNotLoadedBefore) { //int var1; //int var2; - overlayTable[scriptIdx].field_14 = (char)setup1; + overlayTable[scriptIdx].state = (char)setup1; var1 = loadScriptSub1(scriptIdx, 3); var2 = loadScriptSub1(scriptIdx, 0); @@ -733,11 +733,11 @@ int releaseOverlay(const char *name) { overlayTable[overlayIdx].var16 = NULL; } */ - removeScript(overlayIdx, -1, &scriptHandle2); - removeScript(overlayIdx, -1, &scriptHandle2); + removeScript(overlayIdx, -1, &procHead); + removeScript(overlayIdx, -1, &procHead); - removeScript(overlayIdx, -1, &scriptHandle1); - removeScript(overlayIdx, -1, &scriptHandle1); + removeScript(overlayIdx, -1, &relHead); + removeScript(overlayIdx, -1, &relHead); printf("releaseOverlay: finish !\n"); diff --git a/engines/cruise/overlay.h b/engines/cruise/overlay.h index d09f79fcd4..1f61087892 100644 --- a/engines/cruise/overlay.h +++ b/engines/cruise/overlay.h @@ -106,14 +106,19 @@ struct importDataStruct { typedef struct importDataStruct importDataStruct; +#define MULTIPLE 0 +#define VARIABLE 1 +#define UNIQUE 2 +#define THEME 3 + struct objDataStruct { int16 var0; - int16 var1; + int16 type; int16 var2; int16 var3; int16 var4; int16 var5; - int16 var6; + int16 stateTableIdx; }; typedef struct objDataStruct objDataStruct; @@ -121,10 +126,10 @@ typedef struct objDataStruct objDataStruct; struct objectParams { int16 X; int16 Y; - int16 baseFileIdx; - int16 var3; + int16 Z; + int16 frame; int16 scale; - int16 var5; + int16 state; }; typedef struct objectParams objectParams; @@ -169,7 +174,7 @@ struct overlayStruct { char overlayName[14]; ovlDataStruct *ovlData; short int alreadyLoaded; - char field_14; + char state; char field_15; char field_16; char field_17; diff --git a/engines/cruise/saveload.cpp b/engines/cruise/saveload.cpp index e80835d1c3..21882a096d 100644 --- a/engines/cruise/saveload.cpp +++ b/engines/cruise/saveload.cpp @@ -264,8 +264,8 @@ int loadSavegameData(int saveGameIdx) { fread(mediumVar, 0x880, 1, fileHandle); loadSavegameDataSub1(fileHandle); - loadScriptsFromSave(fileHandle, &scriptHandle2); - loadScriptsFromSave(fileHandle, &scriptHandle1); + loadScriptsFromSave(fileHandle, &procHead); + loadScriptsFromSave(fileHandle, &relHead); loadSavegameDataSub2(fileHandle); loadBackgroundIncrustFromSave(fileHandle); diff --git a/engines/cruise/script.cpp b/engines/cruise/script.cpp index fbc3a4decc..9751ce4adb 100644 --- a/engines/cruise/script.cpp +++ b/engines/cruise/script.cpp @@ -26,8 +26,8 @@ namespace Cruise { -scriptInstanceStruct scriptHandle1; -scriptInstanceStruct scriptHandle2; +scriptInstanceStruct relHead; +scriptInstanceStruct procHead; scriptInstanceStruct *currentScriptPtr; diff --git a/engines/cruise/script.h b/engines/cruise/script.h index 574eae49bc..671f8d0221 100644 --- a/engines/cruise/script.h +++ b/engines/cruise/script.h @@ -28,10 +28,10 @@ namespace Cruise { enum scriptTypeEnum { - scriptType_Minus20 = -20, + scriptType_MinusPROC = -20, scriptType_Minus30 = -30, - scriptType_20 = 20, - scriptType_30 = 30 + scriptType_PROC = 20, + scriptType_REL = 30 }; typedef enum scriptTypeEnum scriptTypeEnum; @@ -55,8 +55,8 @@ struct scriptInstanceStruct { typedef struct scriptInstanceStruct scriptInstanceStruct; -extern scriptInstanceStruct scriptHandle1; -extern scriptInstanceStruct scriptHandle2; +extern scriptInstanceStruct relHead; +extern scriptInstanceStruct procHead; extern scriptInstanceStruct *currentScriptPtr; void setupFuncArray(void); diff --git a/engines/cruise/various.cpp b/engines/cruise/various.cpp index e6a659c5ec..2b3aa6855f 100644 --- a/engines/cruise/various.cpp +++ b/engines/cruise/various.cpp @@ -39,68 +39,6 @@ int16 readB16(void *ptr) { return temp; } -void freeObject(cellStruct *objPtr) { - if (objPtr) { - /* if(objPtr->next) - * free(objPtr->next); */ - - //free(objPtr); - } -} - -void removeObjectFromList(int ovlNumber, int objectIdx, cellStruct *objPtr, - int backgroundPlane, int arg) { - cellStruct *currentObj = objPtr->next; - cellStruct *previous; - - while (currentObj) { - cellStruct *si; - - si = currentObj; - - if ((si->overlay == ovlNumber || ovlNumber == -1) && - (si->idx == objectIdx || objectIdx == -1) && - (si->type == arg || arg == -1) && - (si->backgroundPlane == backgroundPlane - || backgroundPlane == -1)) { - si->type = -1; - } - - currentObj = si->next; - } - - previous = objPtr; - currentObj = objPtr->next; - - while (currentObj) { - cellStruct *si; - - si = currentObj; - - if (si->type == -1) { - cellStruct *dx; - previous->next = si->next; - - dx = si->next; - - if (!si->next) { - dx = objPtr; - } - - dx->prev = si->prev; - - freeObject(si); - - free(si); - - currentObj = dx; - } else { - currentObj = si->next; - previous = si; - } - } -} - char *getText(int textIndex, int overlayIndex) { if (!overlayTable[overlayIndex].ovlData) { return NULL; @@ -114,57 +52,4 @@ char *getText(int textIndex, int overlayIndex) { string; } -void createTextObject(int overlayIdx, int oldVar8, cellStruct *pObject, - int scriptNumber, int scriptOverlayNumber, int backgroundPlane, - int16 color, int oldVar2, int oldVar4, int oldVar6) { - - char *ax; - cellStruct *savePObject = pObject; - cellStruct *cx; - - cellStruct *pNewElement; - cellStruct *si = pObject->next; - cellStruct *var_2; - - while (si) { - pObject = si; - si = si->next; - } - - var_2 = si; - - pNewElement = (cellStruct *) malloc(sizeof(cellStruct)); - - pNewElement->next = pObject->next; - pObject->next = pNewElement; - - pNewElement->idx = oldVar8; - pNewElement->type = 5; - pNewElement->backgroundPlane = backgroundPlane; - pNewElement->overlay = overlayIdx; - pNewElement->field_A = oldVar6; - pNewElement->field_C = oldVar4; - pNewElement->spriteIdx = oldVar2; - pNewElement->color = color; - pNewElement->freeze = 0; - pNewElement->field_16 = scriptNumber; - pNewElement->field_18 = scriptOverlayNumber; - pNewElement->gfxPtr = NULL; - - if (var_2) { - cx = var_2; - } else { - cx = savePObject; - } - - pNewElement->prev = cx->prev; - cx->prev = pNewElement; - - ax = getText(oldVar8, overlayIdx); - - if (ax) { - pNewElement->gfxPtr = renderText(oldVar2, (uint8 *) ax); - } -} - } // End of namespace Cruise diff --git a/engines/cruise/various.h b/engines/cruise/various.h index 990a21f0c5..6b1e589b54 100644 --- a/engines/cruise/various.h +++ b/engines/cruise/various.h @@ -35,13 +35,8 @@ extern uint16 main15; int16 readB16(void *ptr); -void createTextObject(int overlayIdx, int oldVar8, cellStruct * pObject, - int scriptNumber, int scriptOverlayNumber, int backgroundPlane, - int16 color, int oldVar2, int oldVar4, int oldVar6); -void removeObjectFromList(int ovlNumber, int objectIdx, cellStruct * objPtr, - int backgroundPlane, int arg); -int16 Op_InitializeStateSub(int ovlIdx, int param1, int param2); - +int16 objInit(int ovlIdx, int param1, int param2); +char *getText(int textIndex, int overlayIndex); } // End of namespace Cruise #endif |