diff options
author | Sven Hesse | 2006-05-01 16:04:53 +0000 |
---|---|---|
committer | Sven Hesse | 2006-05-01 16:04:53 +0000 |
commit | 61a0266a926208bd45e1c378f6062921b03f8724 (patch) | |
tree | e5a091069549e80492a98822d8aa6f50017605ef /engines/gob/inter_v2.cpp | |
parent | 49dd5402139a0d4dfcce3ff7464adf4e8771da10 (diff) | |
download | scummvm-rg350-61a0266a926208bd45e1c378f6062921b03f8724.tar.gz scummvm-rg350-61a0266a926208bd45e1c378f6062921b03f8724.tar.bz2 scummvm-rg350-61a0266a926208bd45e1c378f6062921b03f8724.zip |
More stubs; GOB2 goes in-game for a second, then segfaults in the
Global-constructor; valgrind shows invalid reads in parseValExpr()
and parseExpr() while accessing _inter_variables and _inter_execPtr
svn-id: r22262
Diffstat (limited to 'engines/gob/inter_v2.cpp')
-rw-r--r-- | engines/gob/inter_v2.cpp | 51 |
1 files changed, 43 insertions, 8 deletions
diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp index 93529a2257..4879b8006a 100644 --- a/engines/gob/inter_v2.cpp +++ b/engines/gob/inter_v2.cpp @@ -146,7 +146,7 @@ void Inter_v2::setupOpcodes(void) { OPCODE(o1_loadAnim), OPCODE(o1_freeAnim), OPCODE(o1_updateAnim), - OPCODE(o2_drawStub), + OPCODE(o2_multSub), /* 14 */ OPCODE(o2_initMult), OPCODE(o1_multFreeMult), @@ -225,10 +225,10 @@ void Inter_v2::setupOpcodes(void) { /* 50 */ OPCODE(o2_drawStub), OPCODE(o2_drawStub), - OPCODE(o2_drawStub), - OPCODE(o2_drawStub), + OPCODE(o2_stub0x52), + OPCODE(o2_stub0x53), /* 54 */ - OPCODE(o2_drawStub), + OPCODE(o2_stub0x54), OPCODE(o2_drawStub), OPCODE(o2_stub0x56), {NULL, ""}, @@ -560,7 +560,7 @@ void Inter_v2::setupOpcodes(void) { OPCODE(o1_setType), /* 08 */ OPCODE(o1_setNoTick), - OPCODE(o1_setPickable), + OPCODE(o2_setPickable), OPCODE(o1_setXPos), OPCODE(o1_setYPos), /* 0C */ @@ -645,7 +645,7 @@ void Inter_v2::setupOpcodes(void) { } void Inter_v2::executeDrawOpcode(byte i) { - debugC(1, DEBUG_DRAWOP, "opcodeDraw %d (%s)", i, getOpcodeDrawDesc(i)); + debugC(1, DEBUG_DRAWOP, "opcodeDraw %d [0x%x] (%s)", i, i, getOpcodeDrawDesc(i)); OpcodeDrawProcV2 op = _opcodesDrawV2[i].proc; @@ -656,7 +656,7 @@ void Inter_v2::executeDrawOpcode(byte i) { } bool Inter_v2::executeFuncOpcode(byte i, byte j, char &cmdCount, int16 &counter, int16 &retFlag) { - debugC(1, DEBUG_FUNCOP, "opcodeFunc %d.%d (%s)", i, j, getOpcodeFuncDesc(i, j)); + debugC(1, DEBUG_FUNCOP, "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); @@ -673,7 +673,7 @@ bool Inter_v2::executeFuncOpcode(byte i, byte j, char &cmdCount, int16 &counter, } void Inter_v2::executeGoblinOpcode(int i, int16 &extraData, int32 *retVarPtr, Goblin::Gob_Object *objDesc) { - debugC(1, DEBUG_GOBOP, "opcodeGoblin %d (%s)", i, getOpcodeGoblinDesc(i)); + debugC(1, DEBUG_GOBOP, "opcodeGoblin %d [0x%x] (%s)", i, i, getOpcodeGoblinDesc(i)); OpcodeGoblinProcV2 op = NULL; @@ -710,6 +710,33 @@ const char *Inter_v2::getOpcodeGoblinDesc(int i) { return ""; } +void Inter_v2::o2_stub0x52(void) { + int16 expr1 = _vm->_parse->parseValExpr(); + int16 expr2 = _vm->_parse->parseValExpr(); + int16 expr3 = _vm->_parse->parseValExpr(); + + warning("STUB: Gob2 drawOperation 0x52 (%d %d %d)", expr1, expr2, expr3); +} + +void Inter_v2::o2_stub0x53(void) { + int16 var1 = _vm->_parse->parseVarIndex() >> 2; + int16 var2 = _vm->_parse->parseVarIndex() >> 2; + int16 index = _vm->_parse->parseValExpr(); + + warning("STUB: Gob2 drawOperation 0x53 (%d %d %d)", var1, var2, index); + +// WRITE_VAR(var1, _vm->_mult->_objects[index].field_1A); +// WRITE_VAR(var2, _vm->_mult->_objects[index].field_1B); +} + +void Inter_v2::o2_stub0x54(void) { + int16 index = _vm->_parse->parseValExpr(); + + warning("STUB: Gob2 drawOperation 0x54 (%d)", index); + +// _vm->_mult->_objects[index].pAnimData->field_12 = 4; +} + void Inter_v2::o2_stub0x56(void) { int16 expr1 = _vm->_parse->parseValExpr(); int16 expr2 = _vm->_parse->parseValExpr(); @@ -942,6 +969,10 @@ int16 Inter_v2::loadSound(int16 search) { _vm->_game->loadSound(slot, dataPtr);*/ } +void Inter_v2::o2_multSub(void) { + _vm->_mult->multSub(_vm->_parse->parseValExpr()); +} + void Inter_v2::o2_renderStatic(void) { int16 layer; int16 index; @@ -1522,4 +1553,8 @@ void Inter_v2::storeMouse(void) { WRITE_VAR(4, _vm->_game->_mouseButtons); } +void Inter_v2::o2_setPickable(int16 &extraData, int32 *retVarPtr, Goblin::Gob_Object *objDesc) { + warning("GOB2 Stub! o2_setPickable"); +} + } // End of namespace Gob |