aboutsummaryrefslogtreecommitdiff
path: root/engines/cruise/cruise_main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/cruise/cruise_main.cpp')
-rw-r--r--engines/cruise/cruise_main.cpp92
1 files changed, 61 insertions, 31 deletions
diff --git a/engines/cruise/cruise_main.cpp b/engines/cruise/cruise_main.cpp
index fa596f6855..49d131497f 100644
--- a/engines/cruise/cruise_main.cpp
+++ b/engines/cruise/cruise_main.cpp
@@ -1047,7 +1047,16 @@ bool findRelation(int objOvl, int objIdx, int x, int y) {
if ( (!first) && ((testState==-1) || (testState==objectState))) {
if (!strlen(verbe_name))
- attacheNewScriptToTail(&relHead, j, ptrHead->id, 30, currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber, scriptType_REL);
+ {
+ if(currentScriptPtr)
+ {
+ attacheNewScriptToTail(&relHead, j, ptrHead->id, 30, currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber, scriptType_REL);
+ }
+ else
+ {
+ attacheNewScriptToTail(&relHead, j, ptrHead->id, 30, 0, 0, scriptType_REL);
+ }
+ }
else if (ovl2->nameVerbGlob) {
found = true;
ptr = getObjectName(ptrHead->verbNumber, ovl2->nameVerbGlob);
@@ -1120,39 +1129,46 @@ void callSubRelation(menuElementSubStruct *pMenuElement, int nOvl, int nObj) {
if ((pHeader->obj2OldState == -1) || (params.scale == pHeader->obj2OldState)) {
if (pHeader->type == 30) { // REL
- attacheNewScriptToTail(&relHead, ovlIdx, pHeader->id, 30, currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber, scriptType_REL);
+ if(currentScriptPtr)
+ {
+ attacheNewScriptToTail(&relHead, ovlIdx, pHeader->id, 30, currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber, scriptType_REL);
+ }
+ else
+ {
+ attacheNewScriptToTail(&relHead, ovlIdx, pHeader->id, 30, 0, 0, scriptType_REL);
+ }
- if ((narratorOvl > 0) && (pHeader->trackX != -1) && (pHeader->trackY != -1)) {
- actorStruct* pTrack = findActor(&actorHead, narratorOvl, narratorIdx, 0);
+ if ((narratorOvl > 0) && (pHeader->trackX != -1) && (pHeader->trackY != -1)) {
+ actorStruct* pTrack = findActor(&actorHead, narratorOvl, narratorIdx, 0);
+
+ if (pTrack) {
+ animationStart = false;
+
+ if (pHeader->trackDirection == 9999) {
+ objectParamsQuery naratorParams;
+ getMultipleObjectParam(narratorOvl, narratorIdx, &naratorParams);
+ pTrack->x_dest = naratorParams.X;
+ pTrack->y_dest = naratorParams.Y;
+ pTrack->endDirection = direction(naratorParams.X, naratorParams.Y, pTrack->x_dest, pTrack->y_dest, 0, 0);
+ } else if ((pHeader->trackX == 9999) && (pHeader->trackY == 9999)) {
+ objectParamsQuery naratorParams;
+ getMultipleObjectParam(narratorOvl, narratorIdx, &naratorParams);
+ pTrack->x_dest = naratorParams.X;
+ pTrack->y_dest = naratorParams.Y;
+ pTrack->endDirection = pHeader->trackDirection;
+ } else {
+ pTrack->x_dest = pHeader->trackX;
+ pTrack->y_dest = pHeader->trackY;
+ pTrack->endDirection = pHeader->trackDirection;
+ }
- if (pTrack) {
- animationStart = false;
+ pTrack->flag = 1;
- if (pHeader->trackDirection == 9999) {
- objectParamsQuery naratorParams;
- getMultipleObjectParam(narratorOvl, narratorIdx, &naratorParams);
- pTrack->x_dest = naratorParams.X;
- pTrack->y_dest = naratorParams.Y;
- pTrack->endDirection = direction(naratorParams.X, naratorParams.Y, pTrack->x_dest, pTrack->y_dest, 0, 0);
- } else if ((pHeader->trackX == 9999) && (pHeader->trackY == 9999)) {
- objectParamsQuery naratorParams;
- getMultipleObjectParam(narratorOvl, narratorIdx, &naratorParams);
- pTrack->x_dest = naratorParams.X;
- pTrack->y_dest = naratorParams.Y;
- pTrack->endDirection = pHeader->trackDirection;
- } else {
- pTrack->x_dest = pHeader->trackX;
- pTrack->y_dest = pHeader->trackY;
- pTrack->endDirection = pHeader->trackDirection;
+ autoTrack = true;
+ userEnabled = 0;
+ changeScriptParamInList(ovlIdx, pHeader->id, &relHead, 0, 9998);
}
-
- pTrack->flag = 1;
-
- autoTrack = true;
- userEnabled = 0;
- changeScriptParamInList(ovlIdx, pHeader->id, &relHead, 0, 9998);
}
- }
} else if (pHeader->type == 50) {
ASSERT(0);
}
@@ -1183,7 +1199,14 @@ void callRelation(menuElementSubStruct *pMenuElement, int nObj2) {
if (pHeader->obj2Number == nObj2) {
// REL
if (pHeader->type == 30) {
- attacheNewScriptToTail(&relHead, ovlIdx, pHeader->id, 30, currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber, scriptType_REL);
+ if(currentScriptPtr)
+ {
+ attacheNewScriptToTail(&relHead, ovlIdx, pHeader->id, 30, currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber, scriptType_REL);
+ }
+ else
+ {
+ attacheNewScriptToTail(&relHead, ovlIdx, pHeader->id, 30, 0, 0, scriptType_REL);
+ }
if ((narratorOvl > 0) && (pHeader->trackX != -1) && (pHeader->trackY != -1)) {
actorStruct* pTrack = findActor(&actorHead, narratorOvl, narratorIdx, 0);
@@ -1247,7 +1270,14 @@ void callRelation(menuElementSubStruct *pMenuElement, int nObj2) {
}
}
- createTextObject(&cellHead, ovlIdx, pHeader->id, x, y, 200, findHighColor(), currentActiveBackgroundPlane, currentScriptPtr->overlayNumber, currentScriptPtr->scriptNumber);
+ if(currentScriptPtr)
+ {
+ createTextObject(&cellHead, ovlIdx, pHeader->id, x, y, 200, findHighColor(), currentActiveBackgroundPlane, currentScriptPtr->overlayNumber, currentScriptPtr->scriptNumber);
+ }
+ else
+ {
+ createTextObject(&cellHead, ovlIdx, pHeader->id, x, y, 200, findHighColor(), currentActiveBackgroundPlane, 0, 0);
+ }
userWait = 1;
autoOvl = ovlIdx;