Preliminary save/load support for Urban Runner
svn-id: r35418
This commit is contained in:
parent
3ddbc1211f
commit
4ceecdb25f
12 changed files with 314 additions and 39 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue