aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/inter_v2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/gob/inter_v2.cpp')
-rw-r--r--engines/gob/inter_v2.cpp40
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);
}
}