aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/prince/debugger.cpp34
-rw-r--r--engines/prince/debugger.h5
-rw-r--r--engines/prince/object.cpp2
-rw-r--r--engines/prince/prince.cpp3
-rw-r--r--engines/prince/script.cpp22
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() {