diff options
Diffstat (limited to 'engines/agi/console.cpp')
-rw-r--r-- | engines/agi/console.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/engines/agi/console.cpp b/engines/agi/console.cpp index 09abb47525..37e9258136 100644 --- a/engines/agi/console.cpp +++ b/engines/agi/console.cpp @@ -52,6 +52,8 @@ Console::Console(AgiEngine *vm) : GUI::Debugger() { DCmd_Register("setvar", WRAP_METHOD(Console, Cmd_SetVar)); DCmd_Register("setflag", WRAP_METHOD(Console, Cmd_SetFlag)); DCmd_Register("setobj", WRAP_METHOD(Console, Cmd_SetObj)); + DCmd_Register("room", WRAP_METHOD(Console, Cmd_Room)); + DCmd_Register("bt", WRAP_METHOD(Console, Cmd_BT)); } Console::~Console() { @@ -243,6 +245,39 @@ bool Console::Cmd_Cont(int argc, const char **argv) { return true; } +bool Console::Cmd_Room(int argc, const char **argv) { + DebugPrintf("Current room: %d\n", _vm->getvar(0)); + + return true; +} + +bool Console::Cmd_BT(int argc, const char **argv) { + DebugPrintf("Current script: %d\nStack depth: %d\n", _vm->_game.lognum, _vm->_game.execStack.size()); + + uint8 *code = NULL; + uint8 op = 0; + uint8 p[CMD_BSIZE] = { 0 }; + int num; + Common::Array<ScriptPos>::iterator it; + + for (it = _vm->_game.execStack.begin(); it != _vm->_game.execStack.end(); it++) { + code = _vm->_game.logics[it->script].data; + op = code[it->curIP]; + num = logicNamesCmd[op].numArgs; + memmove(p, &code[it->curIP], num); + memset(p + num, 0, CMD_BSIZE - num); + + DebugPrintf("%d(%d): %s(", it->script, it->curIP, logicNamesCmd[op].name); + + for (int i = 0; i < num; i++) + DebugPrintf("%d, ", p[i]); + + DebugPrintf(")\n"); + } + + return true; +} + PreAGI_Console::PreAGI_Console(PreAgiEngine *vm) { _vm = vm; } |