diff options
author | Benjamin Haisch | 2008-05-06 11:45:23 +0000 |
---|---|---|
committer | Benjamin Haisch | 2008-05-06 11:45:23 +0000 |
commit | 9df82055f0dff7c242f889c5d776ad0cca2d5bc8 (patch) | |
tree | 5748f4f80aad87ae23478d8eea4beb7e7eef2013 /engines/made/script.cpp | |
parent | 397e04d0b1ff6d96502c4eca42c1ab4a31b2dbcd (diff) | |
download | scummvm-rg350-9df82055f0dff7c242f889c5d776ad0cca2d5bc8.tar.gz scummvm-rg350-9df82055f0dff7c242f889c5d776ad0cca2d5bc8.tar.bz2 scummvm-rg350-9df82055f0dff7c242f889c5d776ad0cca2d5bc8.zip |
- The Manhole: New and Enhanced is now (partially) playable
- Implemented cmd_objectp
- Changed how the script externals array is set up
- Cleanup
svn-id: r31895
Diffstat (limited to 'engines/made/script.cpp')
-rw-r--r-- | engines/made/script.cpp | 60 |
1 files changed, 32 insertions, 28 deletions
diff --git a/engines/made/script.cpp b/engines/made/script.cpp index 74dc9e0d9f..86bd9f42e4 100644 --- a/engines/made/script.cpp +++ b/engines/made/script.cpp @@ -203,10 +203,10 @@ void ScriptInterpreter::runScript(int16 scriptObjectIndex) { while (!_terminated) { byte opcode = readByte(); if (opcode >= 1 && opcode <= _commandsMax) { - debug(4, "opcode = %s\n", _commands[opcode - 1].desc); + debug(4, "[%04X:%04X] opcode = %s", _runningScriptObjectIndex, _codeIp - _codeBase, _commands[opcode - 1].desc); (this->*_commands[opcode - 1].proc)(); } else { - warning("ScriptInterpreter::runScript(%d) Unknown opcode %02X\n", _runningScriptObjectIndex, opcode); + warning("ScriptInterpreter::runScript(%d) Unknown opcode %02X", _runningScriptObjectIndex, opcode); } } @@ -219,7 +219,7 @@ byte ScriptInterpreter::readByte() { int16 ScriptInterpreter::readInt16() { int16 temp = (int16)READ_LE_UINT16(_codeIp); _codeIp += 2; - debug(4, "readInt16() value = %04X\n", temp); + debug(4, "readInt16() value = %04X", temp); return temp; } @@ -330,14 +330,14 @@ void ScriptInterpreter::cmd_gt() { void ScriptInterpreter::cmd_loadConstant() { int16 value = readInt16(); - debug(4, "value = %04X (%d)\n", value, value); + debug(4, "value = %04X (%d)", value, value); _stack.setTop(value); } void ScriptInterpreter::cmd_loadVariable() { int16 variable = readInt16(); int16 value = _vm->_dat->getVar(variable); - debug(4, "variable = %d; value = %d (%04X)\n", variable, value, value); fflush(stdout); + debug(4, "variable = %d; value = %d (%04X)", variable, value, value); _stack.setTop(value); } @@ -345,7 +345,7 @@ void ScriptInterpreter::cmd_getObjectProperty() { int16 propertyId = _stack.pop(); int16 objectIndex = _stack.top(); int16 value = _vm->_dat->getObjectProperty(objectIndex, propertyId); - debug(4, "value = %04X(%d)\n", value, value); + debug(4, "value = %04X(%d)", value, value); _stack.setTop(value); } @@ -359,7 +359,7 @@ void ScriptInterpreter::cmd_setObjectProperty() { void ScriptInterpreter::cmd_set() { int16 variable = readInt16(); - debug(4, "var(%d) = %04d (%d)\n", variable, _stack.top(), _stack.top()); + debug(4, "var(%d) = %04d (%d)", variable, _stack.top(), _stack.top()); _vm->_dat->setVar(variable, _stack.top()); } @@ -367,7 +367,7 @@ void ScriptInterpreter::cmd_print() { // TODO: This opcode was used for printing debug messages Object *obj = _vm->_dat->getObject(_stack.top()); const char *text = obj->getString(); - debug(4, "%s", text); fflush(stdout); + debug(4, "%s", text); _stack.setTop(0); } @@ -386,20 +386,20 @@ void ScriptInterpreter::cmd_vref() { int16 value = 0; int16 index = _stack.pop(); int16 objectIndex = _stack.top(); - debug(4, "index = %d; objectIndex = %d\n", index, objectIndex); fflush(stdout); + debug(4, "index = %d; objectIndex = %d", index, objectIndex); if (objectIndex > 0) { Object *obj = _vm->_dat->getObject(objectIndex); value = obj->getVectorItem(index); } _stack.setTop(value); - debug(4, "--> value = %d\n", value); fflush(stdout); + debug(4, "--> value = %d", value); } void ScriptInterpreter::cmd_vset() { int16 value = _stack.pop(); int16 index = _stack.pop(); int16 objectIndex = _stack.top(); - debug(4, "index = %d; objectIndex = %d; value = %d\n", index, objectIndex, value); fflush(stdout); + debug(4, "index = %d; objectIndex = %d; value = %d", index, objectIndex, value); if (objectIndex > 0) { Object *obj = _vm->_dat->getObject(objectIndex); obj->setVectorItem(index, value); @@ -432,11 +432,11 @@ void ScriptInterpreter::cmd_return() { byte argc = _stack.pop(); _stack.free(argc); _stack.setTop(funcResult); - debug(4, "LEAVE: stackPtr = %d; _localStackPos = %d\n\n\n", _stack.getStackPos(), _localStackPos); + debug(4, "LEAVE: stackPtr = %d; _localStackPos = %d\n", _stack.getStackPos(), _localStackPos); } void ScriptInterpreter::cmd_call() { - debug(4, "\n\n\nENTER: stackPtr = %d; _localStackPos = %d\n", _stack.getStackPos(), _localStackPos); + debug(4, "\nENTER: stackPtr = %d; _localStackPos = %d", _stack.getStackPos(), _localStackPos); byte argc = readByte(); _stack.push(argc); _stack.push(_codeIp - _codeBase); @@ -444,7 +444,7 @@ void ScriptInterpreter::cmd_call() { _stack.push(kScriptStackLimit - _localStackPos); _localStackPos = _stack.getStackPos(); _runningScriptObjectIndex = _stack.peek(_localStackPos + argc + 4); - debug(4, "argc = %d; _runningScriptObjectIndex = %04X\n", argc, _runningScriptObjectIndex); fflush(stdout); + debug(4, "argc = %d; _runningScriptObjectIndex = %04X", argc, _runningScriptObjectIndex); _codeBase = _vm->_dat->getObject(_runningScriptObjectIndex)->getData(); _codeIp = _codeBase; } @@ -480,31 +480,31 @@ void ScriptInterpreter::cmd_restore() { void ScriptInterpreter::cmd_arg() { int16 argIndex = readByte(); - debug(4, "argIndex = %d; value = %04X (%d)\n", argIndex, _stack.peek(_localStackPos + 4 + argIndex), _stack.peek(_localStackPos + 4 + argIndex)); + debug(4, "argIndex = %d; value = %04X (%d)", argIndex, _stack.peek(_localStackPos + 4 + argIndex), _stack.peek(_localStackPos + 4 + argIndex)); _stack.setTop(_stack.peek(_localStackPos + 4 + argIndex)); } void ScriptInterpreter::cmd_aset() { int16 argIndex = readByte(); - debug(4, "argIndex = %d; value = %d\n", argIndex, _stack.peek(_localStackPos + 4 + argIndex)); + debug(4, "argIndex = %d; value = %d", argIndex, _stack.peek(_localStackPos + 4 + argIndex)); _stack.poke(_localStackPos + 4 + argIndex, _stack.top()); } void ScriptInterpreter::cmd_tmp() { int16 tempIndex = readByte(); - debug(4, "tempIndex = %d; value = %d\n", tempIndex, _stack.peek(_localStackPos - tempIndex - 1)); + debug(4, "tempIndex = %d; value = %d", tempIndex, _stack.peek(_localStackPos - tempIndex - 1)); _stack.setTop(_stack.peek(_localStackPos - tempIndex - 1)); } void ScriptInterpreter::cmd_tset() { int16 tempIndex = readByte(); - debug(4, "tempIndex = %d; value = %d\n", tempIndex, _stack.top()); + debug(4, "tempIndex = %d; value = %d", tempIndex, _stack.top()); _stack.poke(_localStackPos - tempIndex - 1, _stack.top()); } void ScriptInterpreter::cmd_tspace() { int16 tempCount = readByte(); - debug(4, "tempCount = %d\n", tempCount); + debug(4, "tempCount = %d", tempCount); _stack.alloc(tempCount); } @@ -513,7 +513,11 @@ void ScriptInterpreter::cmd_class() { } void ScriptInterpreter::cmd_objectp() { - warning("Unimplemented command: cmd_objectp"); + Object *obj = _vm->_dat->getObject(_stack.top()); + if (obj->isObject()) + _stack.setTop(-1); + else + _stack.setTop(0); } void ScriptInterpreter::cmd_vectorp() { @@ -535,11 +539,11 @@ void ScriptInterpreter::cmd_randomize() { void ScriptInterpreter::cmd_send() { - debug(4, "\n\n\nENTER: stackPtr = %d; _localStackPos = %d\n", _stack.getStackPos(), _localStackPos); + debug(4, "\nENTER: stackPtr = %d; _localStackPos = %d", _stack.getStackPos(), _localStackPos); byte argc = readByte(); - debug(4, "argc = %d\n", argc); + debug(4, "argc = %d", argc); _stack.push(argc); _stack.push(_codeIp - _codeBase); @@ -550,7 +554,7 @@ void ScriptInterpreter::cmd_send() { int16 propertyId = _stack.peek(_localStackPos + argc + 2); int16 objectIndex = _stack.peek(_localStackPos + argc + 4); - debug(4, "objectIndex = %d (%04X); propertyId = %d(%04X)\n", objectIndex, objectIndex, propertyId, propertyId); fflush(stdout); + debug(4, "objectIndex = %d (%04X); propertyId = %d(%04X)", objectIndex, objectIndex, propertyId, propertyId); if (objectIndex != 0) { objectIndex = _vm->_dat->getObject(objectIndex)->getClass(); @@ -558,7 +562,7 @@ void ScriptInterpreter::cmd_send() { objectIndex = _stack.peek(_localStackPos + argc + 3); } - debug(4, "--> objectIndex = %d(%04X)\n", objectIndex, objectIndex); fflush(stdout); + debug(4, "--> objectIndex = %d(%04X)", objectIndex, objectIndex); if (objectIndex != 0) { _runningScriptObjectIndex = _vm->_dat->getObjectProperty(objectIndex, propertyId); @@ -583,13 +587,13 @@ void ScriptInterpreter::cmd_extend() { byte argc = readByte(); int16 *argv = _stack.getStackPtr(); - //debug(4, "func = %d (%s); argc = %d\n", func, extendFuncNames[func], argc); - debug(4, "func = %d; argc = %d\n", func, argc); + //debug(4, "func = %d (%s); argc = %d", func, extendFuncNames[func], argc); + debug(4, "func = %d; argc = %d", func, argc); for (int i = 0; i < argc; i++) - debug(4, "argv[%02d] = %04X (%d)\n", i, argv[i], argv[i]); + debug(4, "argv[%02d] = %04X (%d)", i, argv[i], argv[i]); int16 result = _functions->callFunction(func, argc, argv); - debug(4, "result = %04X (%d)\n", result, result); + debug(4, "result = %04X (%d)", result, result); _stack.free(argc); |