aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/inter_v2.cpp
diff options
context:
space:
mode:
authorSven Hesse2006-05-01 16:04:53 +0000
committerSven Hesse2006-05-01 16:04:53 +0000
commit61a0266a926208bd45e1c378f6062921b03f8724 (patch)
treee5a091069549e80492a98822d8aa6f50017605ef /engines/gob/inter_v2.cpp
parent49dd5402139a0d4dfcce3ff7464adf4e8771da10 (diff)
downloadscummvm-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.cpp51
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