diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/prince/debugger.cpp | 34 | ||||
-rw-r--r-- | engines/prince/debugger.h | 5 | ||||
-rw-r--r-- | engines/prince/object.cpp | 2 | ||||
-rw-r--r-- | engines/prince/prince.cpp | 3 | ||||
-rw-r--r-- | engines/prince/script.cpp | 22 |
5 files changed, 47 insertions, 19 deletions
diff --git a/engines/prince/debugger.cpp b/engines/prince/debugger.cpp index 95df1ec4bf..445d5ecfc4 100644 --- a/engines/prince/debugger.cpp +++ b/engines/prince/debugger.cpp @@ -22,10 +22,12 @@ #include "prince/debugger.h" #include "prince/prince.h" +#include "prince/flags.h" +#include "prince/script.h" namespace Prince { -Debugger::Debugger(PrinceEngine *vm) : GUI::Debugger(), _vm(vm), _locationNr(0) { +Debugger::Debugger(PrinceEngine *vm, InterpreterFlags *flags) : GUI::Debugger(), _vm(vm), _locationNr(0), _flags(flags) { DCmd_Register("continue", WRAP_METHOD(Debugger, Cmd_Exit)); DCmd_Register("level", WRAP_METHOD(Debugger, Cmd_DebugLevel)); DCmd_Register("setflag", WRAP_METHOD(Debugger, Cmd_SetFlag)); @@ -34,6 +36,7 @@ Debugger::Debugger(PrinceEngine *vm) : GUI::Debugger(), _vm(vm), _locationNr(0) DCmd_Register("viewflc", WRAP_METHOD(Debugger, Cmd_ViewFlc)); DCmd_Register("initroom", WRAP_METHOD(Debugger, Cmd_InitRoom)); DCmd_Register("changecursor", WRAP_METHOD(Debugger, Cmd_ChangeCursor)); + DCmd_Register("additem", WRAP_METHOD(Debugger, Cmd_AddItem)); } static int strToInt(const char *s) { @@ -73,13 +76,14 @@ bool Debugger::Cmd_DebugLevel(int argc, const char **argv) { */ bool Debugger::Cmd_SetFlag(int argc, const char **argv) { // Check for a flag to set - if (argc != 2) { - DebugPrintf("Usage: %s <flag number>\n", argv[0]); + if (argc != 3) { + DebugPrintf("Usage: %s <flag number> <value>\n", argv[0]); return true; } - //int flagNum = strToInt(argv[1]); - //g_globals->setFlag(flagNum); + int flagNum = strToInt(argv[1]); + uint16 value = strToInt(argv[2]); + _flags->setFlagValue((Flags::Id)flagNum, value); return true; } @@ -93,8 +97,8 @@ bool Debugger::Cmd_GetFlag(int argc, const char **argv) { return true; } - //int flagNum = strToInt(argv[1]); - //DebugPrintf("Value: %d\n", g_globals->getFlag(flagNum)); + int flagNum = strToInt(argv[1]); + DebugPrintf("Value: %d\n", _flags->getFlagValue((Flags::Id)flagNum)); return true; } @@ -108,8 +112,8 @@ bool Debugger::Cmd_ClearFlag(int argc, const char **argv) { return true; } - //int flagNum = strToInt(argv[1]); - //g_globals->clearFlag(flagNum); + int flagNum = strToInt(argv[1]); + _flags->setFlagValue((Flags::Id)flagNum, 0); return true; } @@ -151,6 +155,18 @@ bool Debugger::Cmd_ChangeCursor(int argc, const char **argv) { return true; } +bool Debugger::Cmd_AddItem(int argc, const char **argv) { + if (argc != 2) { + DebugPrintf("Usage: %s <itemId>\n", argv[0]); + return true; + } + + int itemId = strToInt(argv[1]); + _vm->addInv(0, itemId, true); + + return true; +} + } /* vim: set tabstop=4 noexpandtab: */ diff --git a/engines/prince/debugger.h b/engines/prince/debugger.h index f3608af81d..10c82d5282 100644 --- a/engines/prince/debugger.h +++ b/engines/prince/debugger.h @@ -29,10 +29,11 @@ namespace Prince { class PrinceEngine; +class InterpreterFlags; class Debugger : public GUI::Debugger { public: - Debugger(PrinceEngine *vm); + Debugger(PrinceEngine *vm, InterpreterFlags *flags); virtual ~Debugger() {} // we need this for __SYMBIAN32__ archaic gcc/UIQ uint8 _locationNr; @@ -46,8 +47,10 @@ private: bool Cmd_ViewFlc(int argc, const char **argv); bool Cmd_InitRoom(int argc, const char **argv); bool Cmd_ChangeCursor(int argc, const char **argv); + bool Cmd_AddItem(int argc, const char **argv); PrinceEngine *_vm; + InterpreterFlags *_flags; }; } diff --git a/engines/prince/object.cpp b/engines/prince/object.cpp index 22ed0a7656..b7ff18c46c 100644 --- a/engines/prince/object.cpp +++ b/engines/prince/object.cpp @@ -68,7 +68,7 @@ bool Object::loadFromStream(Common::SeekableReadStream &stream) { const Common::String obStreamName = Common::String::format("OB%02d", stream.readUint16LE()); Common::SeekableReadStream *obStream = SearchMan.createReadStreamForMember(obStreamName); if (!obStream) { - error("Can't load %s", obStreamName.c_str()); + //error("Can't load %s", obStreamName.c_str()); return false; } diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp index 29cd43c079..7e447376d9 100644 --- a/engines/prince/prince.cpp +++ b/engines/prince/prince.cpp @@ -205,7 +205,6 @@ void PrinceEngine::init() { _graph = new GraphicsMan(this); _rnd = new Common::RandomSource("prince"); - _debugger = new Debugger(this); _midiPlayer = new MusicPlayer(this); @@ -226,6 +225,8 @@ void PrinceEngine::init() { _flags = new InterpreterFlags(); _interpreter = new Interpreter(this, _script, _flags); + _debugger = new Debugger(this, _flags); + _variaTxt = new VariaTxt(); Resource::loadResource(_variaTxt, "variatxt.dat", true); diff --git a/engines/prince/script.cpp b/engines/prince/script.cpp index 93a4b9621e..2ca18746de 100644 --- a/engines/prince/script.cpp +++ b/engines/prince/script.cpp @@ -419,7 +419,7 @@ bool Script::loadAllMasks(Common::Array<Mask> &maskList, int offset) { const Common::String msStreamName = Common::String::format("MS%02d", tempMask._number); Common::SeekableReadStream *msStream = SearchMan.createReadStreamForMember(msStreamName); if (!msStream) { - error("Can't load %s", msStreamName.c_str()); + //error("Can't load %s", msStreamName.c_str()); delete msStream; return false; } @@ -1154,17 +1154,25 @@ void Interpreter::O_RUNACTION() { void Interpreter::O_COMPAREHI() { Flags::Id flag = readScriptFlagId(); uint16 value = readScriptFlagValue(); - - debugInterpreter("O_COMPAREHI flag %d, value %d", flag, value); - _result = value < _flags->getFlagValue(flag); + uint16 flagValue = _flags->getFlagValue(flag); + if (flagValue > value) { + _result = 0; + } else { + _result = 1; + } + debugInterpreter("O_COMPAREHI flag %04x - (%s), value %d, flagValue %d, result %d", flag, Flags::getFlagName(flag), value, flagValue, _result); } void Interpreter::O_COMPARELO() { Flags::Id flag = readScriptFlagId(); uint16 value = readScriptFlagValue(); - - debugInterpreter("O_COMPARELO flag %d, value %d", flag, value); - _result = value > _flags->getFlagValue(flag); + uint16 flagValue = _flags->getFlagValue(flag); + if (flagValue < value) { + _result = 0; + } else { + _result = 1; + } + debugInterpreter("O_COMPARELO flag %04x - (%s), value %d, flagValue %d, result %d", flag, Flags::getFlagName(flag), value, flagValue, _result); } void Interpreter::O_PRELOADSET() { |