aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/agos/agos.cpp1
-rw-r--r--engines/agos/agos.h2
-rw-r--r--engines/agos/script.cpp30
-rw-r--r--engines/agos/script_e1.cpp2
4 files changed, 16 insertions, 19 deletions
diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp
index ce22b3c424..3bb984f199 100644
--- a/engines/agos/agos.cpp
+++ b/engines/agos/agos.cpp
@@ -112,6 +112,7 @@ AGOSEngine::AGOSEngine(OSystem *syst)
_keyPressed = 0;
_gameFile = 0;
+ _opcode = 0;
_itemMemSize = 0;
_tableMemSize = 0;
diff --git a/engines/agos/agos.h b/engines/agos/agos.h
index 31df6d86a8..fc9b179fd7 100644
--- a/engines/agos/agos.h
+++ b/engines/agos/agos.h
@@ -141,7 +141,7 @@ class AGOSEngine : public Engine {
public:
virtual void setupOpcodes();
- int _numOpcodes;
+ int _numOpcodes, _opcode;
typedef void (AGOSEngine::*VgaOpcodeProc) ();
diff --git a/engines/agos/script.cpp b/engines/agos/script.cpp
index 3ba88524d9..ecc43038c1 100644
--- a/engines/agos/script.cpp
+++ b/engines/agos/script.cpp
@@ -61,8 +61,7 @@ int AGOSEngine::getScriptReturn() {
// -----------------------------------------------------------------------
void AGOSEngine::o_invalid() {
- // TODO: Better error reporting
- error("Invalid opcode");
+ error("Invalid opcode %d", _opcode);
}
void AGOSEngine::o_at() {
@@ -883,7 +882,6 @@ void AGOSEngine::writeVariable(uint variable, uint16 contents) {
}
int AGOSEngine::runScript() {
- int opcode;
bool flag;
do {
@@ -891,12 +889,12 @@ int AGOSEngine::runScript() {
dumpOpcode(_codePtr);
if (getGameType() == GType_ELVIRA1) {
- opcode = getVarOrWord();
- if (opcode == 10000)
+ _opcode = getVarOrWord();
+ if (_opcode == 10000)
return 0;
} else {
- opcode = getByte();
- if (opcode == 0xFF)
+ _opcode = getByte();
+ if (_opcode == 0xFF)
return 0;
}
@@ -906,17 +904,17 @@ int AGOSEngine::runScript() {
/* Invert condition? */
flag = false;
if (getGameType() == GType_ELVIRA1) {
- if (opcode == 203) {
+ if (_opcode == 203) {
flag = true;
- opcode = getVarOrWord();
- if (opcode == 10000)
+ _opcode = getVarOrWord();
+ if (_opcode == 10000)
return 0;
}
} else {
- if (opcode == 0) {
+ if (_opcode == 0) {
flag = true;
- opcode = getByte();
- if (opcode == 0xFF)
+ _opcode = getByte();
+ if (_opcode == 0xFF)
return 0;
}
}
@@ -924,10 +922,10 @@ int AGOSEngine::runScript() {
setScriptCondition(true);
setScriptReturn(0);
- if (opcode > _numOpcodes)
- error("Invalid opcode '%d' encountered", opcode);
+ if (_opcode > _numOpcodes)
+ error("Invalid opcode '%d' encountered", _opcode);
- executeOpcode(opcode);
+ executeOpcode(_opcode);
} while (getScriptCondition() != flag && !getScriptReturn());
return getScriptReturn();
diff --git a/engines/agos/script_e1.cpp b/engines/agos/script_e1.cpp
index ba778b8d2e..4196cd9567 100644
--- a/engines/agos/script_e1.cpp
+++ b/engines/agos/script_e1.cpp
@@ -394,8 +394,6 @@ void AGOSEngine_Elvira1::setupOpcodes() {
}
void AGOSEngine_Elvira1::executeOpcode(int opcode) {
- printf("opcode %d\n", opcode);
-
OpcodeProcElvira1 op = _opcodesElvira1[opcode].proc;
(this->*op) ();
}