From f57be08d6d24ce196098f39296b5796e6a86ea92 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 1 Jun 2009 22:03:27 +0000 Subject: - Add some basic debugger for Lands of Lore. - Allow the "flags" command in all Kyra games to be working properly with 320x200 GUI. svn-id: r41113 --- engines/kyra/debugger.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++++--- engines/kyra/debugger.h | 20 +++++++++++++--- engines/kyra/lol.cpp | 4 ++++ engines/kyra/lol.h | 1 + 4 files changed, 80 insertions(+), 6 deletions(-) diff --git a/engines/kyra/debugger.cpp b/engines/kyra/debugger.cpp index dc8dfb0a2c..186696edc9 100644 --- a/engines/kyra/debugger.cpp +++ b/engines/kyra/debugger.cpp @@ -33,6 +33,7 @@ #include "kyra/screen.h" #include "kyra/timer.h" #include "kyra/resource.h" +#include "kyra/lol.h" namespace Kyra { @@ -132,10 +133,12 @@ bool Debugger::cmd_gameSpeed(int argc, const char **argv) { } bool Debugger::cmd_listFlags(int argc, const char **argv) { - for (int i = 0; i < (int)sizeof(_vm->_flagsTable)*8; i++) { - DebugPrintf("(%-3i): %-5i", i, _vm->queryGameFlag(i)); - if (!(i % 10)) + for (int i = 0, p = 0; i < (int)sizeof(_vm->_flagsTable)*8; i++, ++p) { + DebugPrintf("(%-3i): %-2i", i, _vm->queryGameFlag(i)); + if (p == 5) { DebugPrintf("\n"); + p -= 6; + } } DebugPrintf("\n"); return true; @@ -457,5 +460,57 @@ bool Debugger_HoF::cmd_passcodes(int argc, const char **argv) { return true; } +#pragma mark - + +Debugger_LoL::Debugger_LoL(LoLEngine *vm) : Debugger(vm), _vm(vm) { +} + +bool Debugger_LoL::cmd_listFlags(int argc, const char **argv) { + for (int i = 0, p = 0; i < (int)sizeof(_vm->_gameFlags)*8; ++i, ++p) { + const uint8 index = (i >> 4); + const uint8 offset = i & 0xF; + + DebugPrintf("(%-3i): %-2i", i, (_vm->_gameFlags[index] >> offset) & 1); + if (p == 5) { + DebugPrintf("\n"); + p -= 6; + } + } + DebugPrintf("\n"); + return true; +} + +bool Debugger_LoL::cmd_toggleFlag(int argc, const char **argv) { + if (argc > 1) { + uint flag = atoi(argv[1]); + + const uint8 index = (flag >> 4); + const uint8 offset = flag & 0xF; + + _vm->_gameFlags[index] ^= _vm->_gameFlags[index] & (1 << offset); + + DebugPrintf("Flag %i is now %i\n", flag, (_vm->_gameFlags[index] >> offset) & 1); + } else { + DebugPrintf("Syntax: toggleflag \n"); + } + + return true; +} + +bool Debugger_LoL::cmd_queryFlag(int argc, const char **argv) { + if (argc > 1) { + uint flag = atoi(argv[1]); + + const uint8 index = (flag >> 4); + const uint8 offset = flag & 0xF; + + DebugPrintf("Flag %i is %i\n", flag, (_vm->_gameFlags[index] >> offset) & 1); + } else { + DebugPrintf("Syntax: queryflag \n"); + } + + return true; +} + } // End of namespace Kyra diff --git a/engines/kyra/debugger.h b/engines/kyra/debugger.h index 601d12018e..04f138b491 100644 --- a/engines/kyra/debugger.h +++ b/engines/kyra/debugger.h @@ -47,9 +47,9 @@ protected: bool cmd_loadPalette(int argc, const char **argv); bool cmd_showFacings(int argc, const char **argv); bool cmd_gameSpeed(int argc, const char **argv); - bool cmd_listFlags(int argc, const char **argv); - bool cmd_toggleFlag(int argc, const char **argv); - bool cmd_queryFlag(int argc, const char **argv); + virtual bool cmd_listFlags(int argc, const char **argv); + virtual bool cmd_toggleFlag(int argc, const char **argv); + virtual bool cmd_queryFlag(int argc, const char **argv); bool cmd_listTimers(int argc, const char **argv); bool cmd_setTimerCountdown(int argc, const char **argv); }; @@ -97,6 +97,20 @@ protected: bool cmd_passcodes(int argc, const char **argv); }; +class LoLEngine; + +class Debugger_LoL : public Debugger { +public: + Debugger_LoL(LoLEngine *vm); + +protected: + LoLEngine *_vm; + + bool cmd_listFlags(int argc, const char **argv); + bool cmd_toggleFlag(int argc, const char **argv); + bool cmd_queryFlag(int argc, const char **argv); +}; + } // End of namespace Kyra #endif diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp index e504fc5bad..d4a7289a95 100644 --- a/engines/kyra/lol.cpp +++ b/engines/kyra/lol.cpp @@ -32,6 +32,7 @@ #include "kyra/sound.h" #include "kyra/timer.h" #include "kyra/util.h" +#include "kyra/debugger.h" #include "sound/voc.h" #include "sound/audiostream.h" @@ -541,6 +542,9 @@ Common::Error LoLEngine::init() { _spellProcs.push_back(new SpellProc(this, 0)); _spellProcs.push_back(new SpellProc(this, &LoLEngine::castGuardian)); + _debugger = new Debugger_LoL(this); + assert(_debugger); + return Common::kNoError; } diff --git a/engines/kyra/lol.h b/engines/kyra/lol.h index 682060c52d..53671fd837 100644 --- a/engines/kyra/lol.h +++ b/engines/kyra/lol.h @@ -292,6 +292,7 @@ class LoLEngine : public KyraEngine_v1 { friend class GUI_LoL; friend class TextDisplayer_LoL; friend class TIMInterpreter_LoL; +friend class Debugger_LoL; public: LoLEngine(OSystem *system, const GameFlags &flags); ~LoLEngine(); -- cgit v1.2.3