aboutsummaryrefslogtreecommitdiff
path: root/engines/cruise/script.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/cruise/script.cpp')
-rw-r--r--engines/cruise/script.cpp85
1 files changed, 41 insertions, 44 deletions
diff --git a/engines/cruise/script.cpp b/engines/cruise/script.cpp
index 5606d637a2..e83f1d2722 100644
--- a/engines/cruise/script.cpp
+++ b/engines/cruise/script.cpp
@@ -188,9 +188,7 @@ int32 opcodeType1(void) {
}
if (var_6 == 5) {
- ptr =
- overlayTable[byte2].ovlData->
- data4Ptr + var_C;
+ ptr = overlayTable[byte2].ovlData->data4Ptr + var_C;
} else {
ASSERT(0);
}
@@ -203,8 +201,7 @@ int32 opcodeType1(void) {
switch (type2) {
case 1:
{
- saveShort(ptr + var_A + offset * 2,
- var);
+ saveShort(ptr + var_A + offset * 2, var);
return 0;
}
case 2:
@@ -214,8 +211,7 @@ int32 opcodeType1(void) {
}
default:
{
- printf
- ("Unsupported code in opcodeType1 case 1!\n");
+ printf("Unsupported code in opcodeType1 case 1!\n");
exit(1);
}
}
@@ -258,49 +254,49 @@ int32 opcodeType1(void) {
}
int32 opcodeType2(void) {
- int offset = saveOpcodeVar;
- int byte1 = getByteFromScript();
- int byte2 = getByteFromScript();
- short int short1 = getShortFromScript();
-
- ASSERT(currentScriptOpcodeType == 1 || currentScriptOpcodeType == 5);
-
- if (currentScriptOpcodeType == 5)
- short1 += saveOpcodeVar;
-
- ASSERT(byte1 & 7);
-
- if (!(byte1 & 7)) {
- return (-10);
- }
-
- if (!byte2) {
- int type2;
- uint8 *ptr = scriptDataPtrTable[byte1 & 7] + short1;
-
- type2 = ((byte1 & 0x18) >> 3);
+ int index = 0;
+ switch(currentScriptOpcodeType)
+ {
+ case 5:
+ index = saveOpcodeVar;
+ case 1:
+ {
+ uint8* adresse = NULL;
+ int type = getByteFromScript();
+ int overlay = getByteFromScript();
- ASSERT(type2 == 1 || type2 == 2);
+ int firstOffset;
+ int offset;
+ firstOffset = offset = getShortFromScript();
+ offset += index;
- switch (type2) {
- case 1:
- {
- pushPtr(ptr + offset);
- return (0);
+ int typ7 = type&7;
+ if(!typ7) {
+ return (-10);
}
- case 2:
- {
- pushPtr(ptr);
- return (0);
+ if(!overlay) {
+ adresse = scriptDataPtrTable[typ7];
+ } else {
+ if (!overlayTable[overlay].alreadyLoaded) {
+ return (-7);
+ }
+ if (!overlayTable[overlay].ovlData) {
+ return (-4);
+ }
+ ASSERT(0);
}
- default:
- {
- return (-10);
+
+ adresse += offset;
+ int size = (type>>3)&3;
+
+ if(size == 1) {
+ adresse += index;
+ pushPtr(adresse);
+ } else if(size == 2) {
+ pushPtr(adresse);
}
+
}
- } else {
- printf("Unsupported code in opcodeType2 case 1!\n");
- exit(1);
}
return 0;
@@ -452,6 +448,7 @@ int32 opcodeType5(void) {
case 7:
{
currentScriptPtr->var4 = newSi; //always
+ break;
}
}