diff options
Diffstat (limited to 'engines/gob/inter_v2.cpp')
-rw-r--r-- | engines/gob/inter_v2.cpp | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp index 2b780f96b1..7aa17b33ab 100644 --- a/engines/gob/inter_v2.cpp +++ b/engines/gob/inter_v2.cpp @@ -212,8 +212,8 @@ void Inter_v2::setupOpcodes() { /* 40 */ OPCODE(o2_totSub), OPCODE(o2_switchTotSub), - OPCODE(o2_copyVars), - OPCODE(o2_pasteVars), + OPCODE(o2_pushVars), + OPCODE(o2_popVars), /* 44 */ {NULL, ""}, {NULL, ""}, @@ -1178,39 +1178,40 @@ void Inter_v2::o2_switchTotSub() { _vm->_game->switchTotSub(index, skipPlay); } -void Inter_v2::o2_copyVars() { +void Inter_v2::o2_pushVars() { byte count; int16 varOff; count = *_vm->_global->_inter_execPtr++; - for (int i = 0; i < count; i++, _pastePos++) { + for (int i = 0; i < count; i++, _varStackPos++) { if ((*_vm->_global->_inter_execPtr == 25) || (*_vm->_global->_inter_execPtr == 28)) { varOff = _vm->_parse->parseVarIndex(); _vm->_global->_inter_execPtr++; - _variables->copyTo(varOff, _pasteBuf + _pastePos, _pasteSizeBuf + _pastePos, + _variables->copyTo(varOff, _varStack + _varStackPos, + _varSizesStack + _varStackPos, _vm->_global->_inter_animDataSize * 4); - _pastePos += _vm->_global->_inter_animDataSize * 4; - _pasteBuf[_pastePos] = _vm->_global->_inter_animDataSize * 4; - _pasteSizeBuf[_pastePos] = _vm->_global->_inter_animDataSize * 4; + _varStackPos += _vm->_global->_inter_animDataSize * 4; + _varStack[_varStackPos] = _vm->_global->_inter_animDataSize * 4; + _varSizesStack[_varStackPos] = _vm->_global->_inter_animDataSize * 4; } else { - if (evalExpr(&varOff) == 20) + if (!evalExpr(&varOff) == 20) _vm->_global->_inter_resVal = 0; - memcpy(_pasteBuf + _pastePos, &_vm->_global->_inter_resVal, 4); - memcpy(_pasteSizeBuf + _pastePos, &_vm->_global->_inter_resVal, 4); - _pastePos += 4; - _pasteBuf[_pastePos] = 4; - _pasteSizeBuf[_pastePos] = 4; + memcpy(_varStack + _varStackPos, &_vm->_global->_inter_resVal, 4); + memcpy(_varSizesStack + _varStackPos, &_vm->_global->_inter_resVal, 4); + _varStackPos += 4; + _varStack[_varStackPos] = 4; + _varSizesStack[_varStackPos] = 4; } } } -void Inter_v2::o2_pasteVars() { +void Inter_v2::o2_popVars() { byte count; int16 varOff; int16 sizeV; @@ -1219,12 +1220,13 @@ void Inter_v2::o2_pasteVars() { count = *_vm->_global->_inter_execPtr++; for (int i = 0; i < count; i++) { varOff = _vm->_parse->parseVarIndex(); - sizeV = _pasteBuf[--_pastePos]; - sizeS = _pasteSizeBuf[_pastePos]; + sizeV = _varStack[--_varStackPos]; + sizeS = _varSizesStack[_varStackPos]; assert(sizeV == sizeS); - _pastePos -= sizeV; - _variables->copyFrom(varOff, _pasteBuf + _pastePos, _pasteSizeBuf + _pastePos, sizeV); + _varStackPos -= sizeV; + _variables->copyFrom(varOff, _varStack + _varStackPos, + _varSizesStack + _varStackPos, sizeV); } } |