aboutsummaryrefslogtreecommitdiff
path: root/engines/made/script.cpp
diff options
context:
space:
mode:
authorBenjamin Haisch2008-05-06 11:45:23 +0000
committerBenjamin Haisch2008-05-06 11:45:23 +0000
commit9df82055f0dff7c242f889c5d776ad0cca2d5bc8 (patch)
tree5748f4f80aad87ae23478d8eea4beb7e7eef2013 /engines/made/script.cpp
parent397e04d0b1ff6d96502c4eca42c1ab4a31b2dbcd (diff)
downloadscummvm-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.cpp60
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);