diff options
author | Sven Hesse | 2011-01-17 13:37:14 +0000 |
---|---|---|
committer | Sven Hesse | 2011-01-17 13:37:14 +0000 |
commit | db13af5337e06472c82684cbf362598598d158d3 (patch) | |
tree | cfc6fec7fe251bb8591c321127aeca8f4da9f249 /engines/gob/inter_v2.cpp | |
parent | 6c6d85908fd475eb6c32031f3fdfa16bd5bae3d9 (diff) | |
download | scummvm-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.cpp | 32 |
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); } } |