diff options
author | Sven Hesse | 2007-02-06 14:42:05 +0000 |
---|---|---|
committer | Sven Hesse | 2007-02-06 14:42:05 +0000 |
commit | d706d8e4c0fdcda0c3644fe8e8d266031b22c67a (patch) | |
tree | cc40969b7c77e2c4b36b304b65c79f1a06edc971 /engines/gob/inter_v1.cpp | |
parent | 56ff44633f1d7a153cd1db39da85be4bffd948d7 (diff) | |
download | scummvm-rg350-d706d8e4c0fdcda0c3644fe8e8d266031b22c67a.tar.gz scummvm-rg350-d706d8e4c0fdcda0c3644fe8e8d266031b22c67a.tar.bz2 scummvm-rg350-d706d8e4c0fdcda0c3644fe8e8d266031b22c67a.zip |
Implemented vertical scrolling
svn-id: r25401
Diffstat (limited to 'engines/gob/inter_v1.cpp')
-rw-r--r-- | engines/gob/inter_v1.cpp | 179 |
1 files changed, 112 insertions, 67 deletions
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp index 1e8084febb..0a2468a4c8 100644 --- a/engines/gob/inter_v1.cpp +++ b/engines/gob/inter_v1.cpp @@ -646,6 +646,117 @@ void Inter_v1::setupOpcodes(void) { _opcodesGoblinV1 = opcodesGoblin; } +void Inter_v1::executeDrawOpcode(byte i) { + debugC(1, kDebugDrawOp, "opcodeDraw %d [0x%x] (%s)", i, i, getOpcodeDrawDesc(i)); + + OpcodeDrawProcV1 op = _opcodesDrawV1[i].proc; + + if (op == NULL) + warning("unimplemented opcodeDraw: %d", i); + else + (this->*op) (); +} + +bool Inter_v1::executeFuncOpcode(byte i, byte j, char &cmdCount, int16 &counter, int16 &retFlag) { + debugC(1, kDebugFuncOp, "opcodeFunc %d.%d [0x%x.0x%x] (%s)", i, j, i, j, getOpcodeFuncDesc(i, j)); + + if ((i > 4) || (j > 15)) { + warning("unimplemented opcodeFunc: %d.%d", i, j); + return false; + } + + OpcodeFuncProcV1 op = _opcodesFuncV1[i*16 + j].proc; + + if (op == NULL) + warning("unimplemented opcodeFunc: %d.%d", i, j); + else + return (this->*op) (cmdCount, counter, retFlag); + return false; +} + +void Inter_v1::executeGoblinOpcode(int i, int16 &extraData, int32 *retVarPtr, Goblin::Gob_Object *objDesc) { + debugC(1, kDebugGobOp, "opcodeGoblin %d [0x%x] (%s)", i, i, getOpcodeGoblinDesc(i)); + + OpcodeGoblinProcV1 op = NULL; + + for (int j = 0; j < ARRAYSIZE(_goblinFuncLookUp); j++) + if (_goblinFuncLookUp[j][0] == i) { + op = _opcodesGoblinV1[_goblinFuncLookUp[j][1]].proc; + break; + } + + if (op == NULL) { + warning("unimplemented opcodeGoblin: %d", i); + _vm->_global->_inter_execPtr -= 2; + int16 cmd = load16(); + _vm->_global->_inter_execPtr += cmd * 2; + } + else + (this->*op) (extraData, retVarPtr, objDesc); +} + +const char *Inter_v1::getOpcodeDrawDesc(byte i) { + return _opcodesDrawV1[i].desc; +} + +const char *Inter_v1::getOpcodeFuncDesc(byte i, byte j) { + if ((i > 4) || (j > 15)) + return ""; + + return _opcodesFuncV1[i*16 + j].desc; +} + +const char *Inter_v1::getOpcodeGoblinDesc(int i) { + for (int j = 0; j < ARRAYSIZE(_goblinFuncLookUp); j++) + if (_goblinFuncLookUp[j][0] == i) + return _opcodesGoblinV1[_goblinFuncLookUp[j][1]].desc; + return ""; +} + +void Inter_v1::checkSwitchTable(char **ppExec) { + int i; + int16 len; + int32 value; + bool found; + bool notFound; + + found = false; + notFound = true; + *ppExec = 0; + value = VAR_OFFSET(_vm->_parse->parseVarIndex()); + + len = (int8) *_vm->_global->_inter_execPtr++; + while (len != -5) { + for (i = 0; i < len; i++) { + evalExpr(0); + + if (_terminate) + return; + + if (_vm->_global->_inter_resVal == value) { + found = true; + notFound = false; + } + } + + if (found) + *ppExec = _vm->_global->_inter_execPtr; + + _vm->_global->_inter_execPtr += READ_LE_UINT16(_vm->_global->_inter_execPtr + 2) + 2; + found = false; + len = (int8) *_vm->_global->_inter_execPtr++; + } + + if ((*_vm->_global->_inter_execPtr >> 4) != 4) + return; + + _vm->_global->_inter_execPtr++; + if (notFound) + *ppExec = _vm->_global->_inter_execPtr; + + _vm->_global->_inter_execPtr += READ_LE_UINT16(_vm->_global->_inter_execPtr + 2) + 2; +} + bool Inter_v1::o1_setMousePos(char &cmdCount, int16 &counter, int16 &retFlag) { _vm->_global->_inter_mouseX = _vm->_parse->parseValExpr(); _vm->_global->_inter_mouseY = _vm->_parse->parseValExpr(); @@ -1303,6 +1414,7 @@ bool Inter_v1::o1_loadSpriteToPos(char &cmdCount, int16 &counter, int16 &retFlag _vm->_draw->_destSurface = 101; _vm->_draw->_transparency &= 1; _vm->_global->_inter_execPtr += 2; + _vm->_draw->spriteOperation(DRAW_LOADSPRITE); return false; @@ -1696,73 +1808,6 @@ void Inter_v1::o1_freeFontToSprite(void) { _vm->_draw->_fontToSprite[i].height = -1; } -void Inter_v1::executeDrawOpcode(byte i) { - debugC(1, kDebugDrawOp, "opcodeDraw %d [0x%x] (%s)", i, i, getOpcodeDrawDesc(i)); - - OpcodeDrawProcV1 op = _opcodesDrawV1[i].proc; - - if (op == NULL) - warning("unimplemented opcodeDraw: %d", i); - else - (this->*op) (); -} - -bool Inter_v1::executeFuncOpcode(byte i, byte j, char &cmdCount, int16 &counter, int16 &retFlag) { - debugC(1, kDebugFuncOp, "opcodeFunc %d.%d [0x%x.0x%x] (%s)", i, j, i, j, getOpcodeFuncDesc(i, j)); - - if ((i > 4) || (j > 15)) { - warning("unimplemented opcodeFunc: %d.%d", i, j); - return false; - } - - OpcodeFuncProcV1 op = _opcodesFuncV1[i*16 + j].proc; - - if (op == NULL) - warning("unimplemented opcodeFunc: %d.%d", i, j); - else - return (this->*op) (cmdCount, counter, retFlag); - return false; -} - -void Inter_v1::executeGoblinOpcode(int i, int16 &extraData, int32 *retVarPtr, Goblin::Gob_Object *objDesc) { - debugC(1, kDebugGobOp, "opcodeGoblin %d [0x%x] (%s)", i, i, getOpcodeGoblinDesc(i)); - - OpcodeGoblinProcV1 op = NULL; - - for (int j = 0; j < ARRAYSIZE(_goblinFuncLookUp); j++) - if (_goblinFuncLookUp[j][0] == i) { - op = _opcodesGoblinV1[_goblinFuncLookUp[j][1]].proc; - break; - } - - if (op == NULL) { - warning("unimplemented opcodeGoblin: %d", i); - _vm->_global->_inter_execPtr -= 2; - int16 cmd = load16(); - _vm->_global->_inter_execPtr += cmd * 2; - } - else - (this->*op) (extraData, retVarPtr, objDesc); -} - -const char *Inter_v1::getOpcodeDrawDesc(byte i) { - return _opcodesDrawV1[i].desc; -} - -const char *Inter_v1::getOpcodeFuncDesc(byte i, byte j) { - if ((i > 4) || (j > 15)) - return ""; - - return _opcodesFuncV1[i*16 + j].desc; -} - -const char *Inter_v1::getOpcodeGoblinDesc(int i) { - for (int j = 0; j < ARRAYSIZE(_goblinFuncLookUp); j++) - if (_goblinFuncLookUp[j][0] == i) - return _opcodesGoblinV1[_goblinFuncLookUp[j][1]].desc; - return ""; -} - bool Inter_v1::o1_callSub(char &cmdCount, int16 &counter, int16 &retFlag) { char *storedIP = _vm->_global->_inter_execPtr; |