aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/inter_v2.cpp
diff options
context:
space:
mode:
authorSven Hesse2011-01-17 13:37:14 +0000
committerSven Hesse2011-01-17 13:37:14 +0000
commitdb13af5337e06472c82684cbf362598598d158d3 (patch)
treecfc6fec7fe251bb8591c321127aeca8f4da9f249 /engines/gob/inter_v2.cpp
parent6c6d85908fd475eb6c32031f3fdfa16bd5bae3d9 (diff)
downloadscummvm-rg350-db13af5337e06472c82684cbf362598598d158d3.tar.gz
scummvm-rg350-db13af5337e06472c82684cbf362598598d158d3.tar.bz2
scummvm-rg350-db13af5337e06472c82684cbf362598598d158d3.zip
GOB: Make the variable stack endianness-independent
Since Urban Runner casts int16s to uint32 before pushing them onto the stack and after popping assumes it's little endian, we have explicitely preserve the variable space endianness while pushing/popping. svn-id: r55277
Diffstat (limited to 'engines/gob/inter_v2.cpp')
-rw-r--r--engines/gob/inter_v2.cpp32
1 files changed, 8 insertions, 24 deletions
diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp
index 1707e614ce..3e8a4903ca 100644
--- a/engines/gob/inter_v2.cpp
+++ b/engines/gob/inter_v2.cpp
@@ -609,21 +609,15 @@ void Inter_v2::o2_switchTotSub() {
}
void Inter_v2::o2_pushVars() {
- byte count;
- int16 varOff;
-
- count = _vm->_game->_script->readByte();
- for (int i = 0; i < count; i++, _varStackPos++) {
+ uint8 count = _vm->_game->_script->readByte();
+ for (int i = 0; i < count; i++) {
if ((_vm->_game->_script->peekByte() == 25) ||
(_vm->_game->_script->peekByte() == 28)) {
- varOff = _vm->_game->_script->readVarIndex();
+ int16 varOff = _vm->_game->_script->readVarIndex();
_vm->_game->_script->skip(1);
- _variables->copyTo(varOff, _varStack + _varStackPos, _vm->_global->_inter_animDataSize * 4);
-
- _varStackPos += _vm->_global->_inter_animDataSize * 4;
- _varStack[_varStackPos] = _vm->_global->_inter_animDataSize * 4;
+ _varStack.pushData(*_variables, varOff, _vm->_global->_inter_animDataSize * 4);
} else {
int16 value;
@@ -631,27 +625,17 @@ void Inter_v2::o2_pushVars() {
if (_vm->_game->_script->evalExpr(&value) != 20)
value = 0;
- uint32 value32 = ((uint16) value);
-
- memcpy(_varStack + _varStackPos, &value32, 4);
- _varStackPos += 4;
- _varStack[_varStackPos] = 4;
+ _varStack.pushInt((uint16)value);
}
}
}
void Inter_v2::o2_popVars() {
- byte count;
- int16 varOff;
- int16 size;
-
- count = _vm->_game->_script->readByte();
+ uint8 count = _vm->_game->_script->readByte();
for (int i = 0; i < count; i++) {
- varOff = _vm->_game->_script->readVarIndex();
- size = _varStack[--_varStackPos];
+ int16 varOff = _vm->_game->_script->readVarIndex();
- _varStackPos -= size;
- _variables->copyFrom(varOff, _varStack + _varStackPos, size);
+ _varStack.pop(*_variables, varOff);
}
}