aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Hamm2007-11-04 01:11:39 +0000
committerVincent Hamm2007-11-04 01:11:39 +0000
commit6e4037165d49ed4ba1a6e76656eab2d03851eeda (patch)
treea8f38190adf5b2867d2a4ded717039cd928dfe67
parent034eb920d2e3c869ed16a011886ec1e69d50001c (diff)
downloadscummvm-rg350-6e4037165d49ed4ba1a6e76656eab2d03851eeda.tar.gz
scummvm-rg350-6e4037165d49ed4ba1a6e76656eab2d03851eeda.tar.bz2
scummvm-rg350-6e4037165d49ed4ba1a6e76656eab2d03851eeda.zip
Fix a few script issues
svn-id: r29397
-rw-r--r--engines/cruise/cell.cpp4
-rw-r--r--engines/cruise/ctp.cpp13
-rw-r--r--engines/cruise/ctp.h2
-rw-r--r--engines/cruise/function.cpp22
-rw-r--r--engines/cruise/mainDraw.cpp4
-rw-r--r--engines/cruise/script.cpp7
6 files changed, 42 insertions, 10 deletions
diff --git a/engines/cruise/cell.cpp b/engines/cruise/cell.cpp
index 6b93d3a7af..a608956192 100644
--- a/engines/cruise/cell.cpp
+++ b/engines/cruise/cell.cpp
@@ -275,7 +275,7 @@ void freezeCell(cellStruct * pObject, int overlayIdx, int objIdx, int objType, i
}
void sortCells(int16 param1, int16 param2, cellStruct *objPtr) {
- int16 var;
+/*int16 var;
cellStruct *var8_;
cellStruct *var40;
cellStruct *var3E;
@@ -358,7 +358,7 @@ void sortCells(int16 param1, int16 param2, cellStruct *objPtr) {
}
temp->prev = match;
- }
+ }*/
}
} // End of namespace Cruise
diff --git a/engines/cruise/ctp.cpp b/engines/cruise/ctp.cpp
index 7922d2c720..f6f52f9204 100644
--- a/engines/cruise/ctp.cpp
+++ b/engines/cruise/ctp.cpp
@@ -279,13 +279,22 @@ void loadCtpSub1(int boxIdx, int scale, uint16 *_walkboxTable,
}
}
+int getNode(int nodeResult[2], int nodeId){
+ if(nodeId < 0 || nodeId >= ctp_routeCoordCount)
+ return -1;
+
+ nodeResult[0] = ctp_routeCoords[nodeId][0];
+ nodeResult[1] = ctp_routeCoords[nodeId][1];
+
+ return 0;
+}
+
int loadCtp(uint8 *ctpName) {
int walkboxCounter; // si
uint8 *ptr;
uint8 *dataPointer; // ptr2
char fileType[5]; // string2
short int segementSizeTable[7]; // tempTable
- char string[32];
if (ctpVar1 == 0) {
int i;
@@ -354,7 +363,7 @@ int loadCtp(uint8 *ctpName) {
free(ptr);
- strcpyuint8(string, currentCtpName);
+ strcpyuint8(currentCtpName, ctpName);
numberOfWalkboxes = segementSizeTable[6] / 2; // get the number of walkboxes
diff --git a/engines/cruise/ctp.h b/engines/cruise/ctp.h
index 2ea47ce62e..8fe3987a60 100644
--- a/engines/cruise/ctp.h
+++ b/engines/cruise/ctp.h
@@ -54,6 +54,8 @@ extern ctpVar19Struct *ctpVar19;
int loadCtp(uint8 * ctpName);
int ctpProc2(int varX, int varY, int paramX, int paramY);
+int getNode(int nodeResult[2], int nodeId);
+
} // End of namespace Cruise
#endif
diff --git a/engines/cruise/function.cpp b/engines/cruise/function.cpp
index 128da02890..7225f4040b 100644
--- a/engines/cruise/function.cpp
+++ b/engines/cruise/function.cpp
@@ -1389,6 +1389,27 @@ int16 Op_2A(void) {
return getProcParam(overlayIdx, 40, (uint8 *) var_26);
}
+int16 Op_SetObjectAtNode(void) {
+ int16 node = popVar();
+ int16 obj = popVar();
+ int16 ovl = popVar();
+
+ if(!ovl)
+ ovl = currentScriptPtr->overlayNumber;;
+
+ int nodeInfo[2];
+
+ if(!getNode(nodeInfo, node))
+ {
+ setObjectPosition(ovl, obj, 0, nodeInfo[0]);
+ setObjectPosition(ovl, obj, 1, nodeInfo[1]);
+ setObjectPosition(ovl, obj, 2, nodeInfo[1]);
+ setObjectPosition(ovl, obj, 4, computeZoom(nodeInfo[1]));
+ }
+
+ return 0;
+}
+
void setupOpcodeTable(void) {
int i;
@@ -1422,6 +1443,7 @@ void setupOpcodeTable(void) {
opcodeTablePtr[0x18] = Op_AddAnimation;
opcodeTablePtr[0x19] = Op_RemoveAnimation;
opcodeTablePtr[0x1A] = Op_SetZoom;
+ opcodeTablePtr[0x1B] = Op_SetObjectAtNode;
opcodeTablePtr[0x1E] = Op_1E;
opcodeTablePtr[0x21] = Op_21;
opcodeTablePtr[0x22] = Op_22;
diff --git a/engines/cruise/mainDraw.cpp b/engines/cruise/mainDraw.cpp
index 0b6d1de50c..2cd577547e 100644
--- a/engines/cruise/mainDraw.cpp
+++ b/engines/cruise/mainDraw.cpp
@@ -169,7 +169,7 @@ int16 XMIN_XMAX[404];
int16 polyBuffer4[512];
// this function fills the sizeTable for the poly (OLD: mainDrawSub1Sub2)
-void getPolySize(int positionX, int positionY, int scale, int sizeTable[4], char *dataPtr)
+void getPolySize(int positionX, int positionY, int scale, int sizeTable[4], unsigned char *dataPtr)
{
int upperBorder;
int lowerBorder;
@@ -1036,7 +1036,7 @@ void mainDrawPolygons(int fileIndex, cellStruct *pObject, int X, int scale, int
flipPoly(fileIndex, (int16*)dataPtr, scale, &newFrame, X, Y, &newX, &newY, &newScale);
// this function fills the sizeTable for the poly (OLD: mainDrawSub1Sub2)
- getPolySize(newX, newY, newScale, sizeTable, (char*)newFrame);
+ getPolySize(newX, newY, newScale, sizeTable, (unsigned char*)newFrame);
spriteX2 = sizeTable[0] - 2; // left border
spriteX1 = sizeTable[1] + 18; // right border
diff --git a/engines/cruise/script.cpp b/engines/cruise/script.cpp
index bf54dd17a4..96bd280bb4 100644
--- a/engines/cruise/script.cpp
+++ b/engines/cruise/script.cpp
@@ -276,9 +276,9 @@ int32 opcodeType1(void) {
di = currentScriptPtr->overlayNumber;
}
- if (var == 0x85) // Special case to handle...
+ if ((var == 0x85) && !strcmp((char*)currentCtpName, "S26.CTP") && !di && mode == 1) // patch in bar
{
- ASSERT(0);
+ var= 0x87;
}
setObjectPosition(di, var_4, mode, var);
@@ -732,8 +732,7 @@ int executeScripts(scriptInstanceStruct *ptr) {
currentScriptOpcodeType = opcodeType & 7;
if (!opcodeTypeTable[(opcodeType & 0xFB) >> 3]) {
- printf("Unsupported opcode type %d\n",
- (opcodeType & 0xFB) >> 3);
+ printf("Unsupported opcode type %d\n", (opcodeType & 0xFB) >> 3);
exit(1);
return (-21);
}