aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/parse_v2.cpp
diff options
context:
space:
mode:
authorSven Hesse2006-08-12 09:16:08 +0000
committerSven Hesse2006-08-12 09:16:08 +0000
commit1c4715b71f79acede6b3758cfd16881bad14e23e (patch)
treecf69fad6a6ab92b973405b058f035f3c00223033 /engines/gob/parse_v2.cpp
parentde9ba3adeec3a89a1155685d8e3fc589962f1d11 (diff)
downloadscummvm-rg350-1c4715b71f79acede6b3758cfd16881bad14e23e.tar.gz
scummvm-rg350-1c4715b71f79acede6b3758cfd16881bad14e23e.tar.bz2
scummvm-rg350-1c4715b71f79acede6b3758cfd16881bad14e23e.zip
- Some more goblins-handling functions
- Fixed some mistakes I made in the Parse_v2 functions. Now the goblins (finally) move. Also, the correct music is played in the first screen. - Found the hook for the menu - On freeing a sound slot, only stop the playing music if it's in the slot to free svn-id: r23700
Diffstat (limited to 'engines/gob/parse_v2.cpp')
-rw-r--r--engines/gob/parse_v2.cpp57
1 files changed, 30 insertions, 27 deletions
diff --git a/engines/gob/parse_v2.cpp b/engines/gob/parse_v2.cpp
index 982b6d09a2..d56d390ffc 100644
--- a/engines/gob/parse_v2.cpp
+++ b/engines/gob/parse_v2.cpp
@@ -148,24 +148,24 @@ int16 Parse_v2::parseValExpr(unsigned stopToken) {
offset = arrDesc[dim] * offset + temp2;
}
if (operation == 16)
- *valPtr = *(_vm->_global->_inter_variables + temp + offset);
+ *valPtr = *(int8 *)(_vm->_global->_inter_variables + temp + offset);
else if (operation == 26)
- *valPtr = *(uint16*)(_vm->_global->_inter_variables + temp * 4 + offset * 4);
+ *valPtr = *(uint16 *)(_vm->_global->_inter_variables + temp * 4 + offset * 4);
else if (operation == 27)
- *valPtr = *(uint16*)(_vm->_global->_inter_variables + temp * 2 + offset * 2);
+ *valPtr = *(uint16 *)(_vm->_global->_inter_variables + temp * 2 + offset * 2);
else if (operation == 28) {
_vm->_global->_inter_execPtr++;
temp2 = parseValExpr(12);
- *valPtr = (uint8)*(_vm->_global->_inter_variables + temp * 4 + offset * 4 * _vm->_global->_inter_animDataSize + temp2);
+ *valPtr = *(uint8 *)(_vm->_global->_inter_variables + temp * 4 + offset * 4 * _vm->_global->_inter_animDataSize + temp2);
}
break;
case 17:
- *valPtr = *(uint16*)(_vm->_global->_inter_variables + _vm->_inter->load16() * 2);
+ *valPtr = *(uint16 *)(_vm->_global->_inter_variables + _vm->_inter->load16() * 2);
break;
case 18:
- *valPtr = *(_vm->_global->_inter_variables + _vm->_inter->load16());
+ *valPtr = *(int8 *)(_vm->_global->_inter_variables + _vm->_inter->load16());
break;
case 19:
@@ -183,14 +183,14 @@ int16 Parse_v2::parseValExpr(unsigned stopToken) {
case 23:
case 24:
- *valPtr = VAR(_vm->_inter->load16());
+ *valPtr = *(uint16 *)(_vm->_global->_inter_variables + _vm->_inter->load16() * 4);
break;
case 25:
temp = _vm->_inter->load16() * 4;
_vm->_global->_inter_execPtr++;
temp += parseValExpr(12);
- *valPtr = *(_vm->_global->_inter_variables + temp);
+ *valPtr = *(uint8 *)(_vm->_global->_inter_variables + temp);
break;
case 29:
@@ -257,7 +257,7 @@ int16 Parse_v2::parseValExpr(unsigned stopToken) {
operPtr[-1] = operPtr[0];
valPtr[-1] = valPtr[0];
if (stkPos > 1 && operPtr[-2] == 1) {
- valPtr[-2] = 20;
+ operPtr[-2] = 20;
valPtr[-2] = -valPtr[-1];
stkPos--;
@@ -265,26 +265,25 @@ int16 Parse_v2::parseValExpr(unsigned stopToken) {
valPtr--;
}
- if (stkPos > 2 && operPtr[-2] > 4
- && operPtr[-2] < 9) {
+ if (stkPos > 2 && operPtr[-2] > 4 && operPtr[-2] < 9) {
stkPos -= 2;
operPtr -= 2;
valPtr -= 2;
switch (operPtr[0]) {
case 5:
- operPtr[-1] *= operPtr[1];
+ valPtr[-1] *= valPtr[1];
break;
case 6:
- operPtr[-1] /= operPtr[1];
+ valPtr[-1] /= valPtr[1];
break;
case 7:
- operPtr[-1] %= operPtr[1];
+ valPtr[-1] %= valPtr[1];
break;
case 8:
- operPtr[-1] &= operPtr[1];
+ valPtr[-1] &= valPtr[1];
break;
}
}
@@ -352,7 +351,7 @@ int16 Parse_v2::parseExpr(char stopToken, byte *arg_2) {
int32 prevVal;
int32 curVal;
int32 *valPtr;
- char *operPtr;
+ byte *operPtr;
byte *arrDescPtr;
char var_C;
byte operation;
@@ -368,7 +367,7 @@ int16 Parse_v2::parseExpr(char stopToken, byte *arg_2) {
memset(operStack, 0, 20);
stkPos = -1;
- operPtr = (char *)(operStack - 1);
+ operPtr = operStack - 1;
valPtr = values - 1;
while (1) {
@@ -376,7 +375,7 @@ int16 Parse_v2::parseExpr(char stopToken, byte *arg_2) {
operPtr++;
valPtr++;
operation = *_vm->_global->_inter_execPtr++;
- if (operation >= 19 && operation <= 29) {
+ if (operation >= 16 && operation <= 29) {
switch (operation) {
case 16:
case 26:
@@ -396,30 +395,30 @@ int16 Parse_v2::parseExpr(char stopToken, byte *arg_2) {
offset = offset * arrDescPtr[dim] + temp2;
}
if (operation == 16)
- *valPtr = *(_vm->_global->_inter_variables + temp + offset);
+ *valPtr = *(int8 *)(_vm->_global->_inter_variables + temp + offset);
else if (operation == 26)
- *valPtr = *(uint32*)(_vm->_global->_inter_variables + temp * 4 + offset * 4);
+ *valPtr = *(uint32 *)(_vm->_global->_inter_variables + temp * 4 + offset * 4);
else if (operation == 27)
- *valPtr = *(uint16*)(_vm->_global->_inter_variables + temp * 2 + offset * 2);
+ *valPtr = *(int16 *)(_vm->_global->_inter_variables + temp * 2 + offset * 2);
else if (operation == 28) {
*valPtr = encodePtr(_vm->_global->_inter_variables + temp * 4 + offset * _vm->_global->_inter_animDataSize * 4, kInterVar);
if (*_vm->_global->_inter_execPtr == 13) {
_vm->_global->_inter_execPtr++;
temp2 = parseValExpr(12);
*operPtr = 20;
- *valPtr = (uint8)*(_vm->_global->_inter_variables + temp * 4 + offset * 4 * _vm->_global->_inter_animDataSize + temp2);
+ *valPtr = *(uint8 *)(_vm->_global->_inter_variables + temp * 4 + offset * 4 * _vm->_global->_inter_animDataSize + temp2);
}
}
break;
case 17:
*operPtr = 20;
- *valPtr = *(uint16*)(_vm->_global->_inter_variables + _vm->_inter->load16() * 2);
+ *valPtr = *(int16 *)(_vm->_global->_inter_variables + _vm->_inter->load16() * 2);
break;
case 18:
*operPtr = 20;
- *valPtr = *(_vm->_global->_inter_variables + _vm->_inter->load16());
+ *valPtr = *(int8 *)(_vm->_global->_inter_variables + _vm->_inter->load16());
break;
case 19:
@@ -445,11 +444,15 @@ int16 Parse_v2::parseExpr(char stopToken, byte *arg_2) {
break;
case 23:
- case 24:
*operPtr = 20;
*valPtr = VAR(_vm->_inter->load16());
break;
+ case 24:
+ *operPtr = 20;
+ *valPtr = *(int16 *)(_vm->_global->_inter_variables + _vm->_inter->load16() * 4);
+ break;
+
case 25:
*operPtr = 22;
temp = _vm->_inter->load16() * 4;
@@ -458,7 +461,7 @@ int16 Parse_v2::parseExpr(char stopToken, byte *arg_2) {
_vm->_global->_inter_execPtr++;
temp += parseValExpr(12);
*operPtr = 20;
- *valPtr = (uint8)*(_vm->_global->_inter_variables + temp);
+ *valPtr = *(uint8 *)(_vm->_global->_inter_variables + temp);
}
break;
@@ -560,7 +563,7 @@ int16 Parse_v2::parseExpr(char stopToken, byte *arg_2) {
break;
}
continue;
- } // op>= 19 && op <= 29
+ } // op >= 16 && op <= 29
if (operation == stopToken || operation == 30 || operation == 31 || operation == 10) {
while (stkPos >= 2) {