aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Kołodziejski2003-04-21 10:20:12 +0000
committerPaweł Kołodziejski2003-04-21 10:20:12 +0000
commitd7deee507a8a08283ecc1e7d195923e88d213ae7 (patch)
treedd7f9cc2c2498c22aa4b63d8e44542102c165810
parent39aa43dc8393283cda534fa1dfd5d7a68eecefde (diff)
downloadscummvm-rg350-d7deee507a8a08283ecc1e7d195923e88d213ae7.tar.gz
scummvm-rg350-d7deee507a8a08283ecc1e7d195923e88d213ae7.tar.bz2
scummvm-rg350-d7deee507a8a08283ecc1e7d195923e88d213ae7.zip
some changes in v2 variables
svn-id: r7052
-rw-r--r--scumm/intern.h3
-rw-r--r--scumm/script_v2.cpp25
2 files changed, 25 insertions, 3 deletions
diff --git a/scumm/intern.h b/scumm/intern.h
index 3abe5a9373..911c69a381 100644
--- a/scumm/intern.h
+++ b/scumm/intern.h
@@ -194,6 +194,9 @@ protected:
virtual const char *getOpcodeDesc(int i);
virtual void getResultPos();
virtual void getResultPosDirect();
+ virtual int getVar();
+ virtual int getVarOrDirectByte(byte mask);
+ virtual int getVarOrDirectWord(byte mask);
virtual void ifStateCommon(byte type);
virtual void ifNotStateCommon(byte type);
virtual void setStateCommon(byte type);
diff --git a/scumm/script_v2.cpp b/scumm/script_v2.cpp
index b75f49a942..47c0bec11f 100644
--- a/scumm/script_v2.cpp
+++ b/scumm/script_v2.cpp
@@ -366,6 +366,25 @@ const char *Scumm_v2::getOpcodeDesc(int i) {
return _opcodesV2[i].desc;
}
+int Scumm_v2::getVar() {
+ int var_id = fetchScriptByte();
+ if ((var_id >= 14) && (var_id <= 16))
+ return _vars[_vars[var_id]];
+ return _vars[var_id];
+}
+
+int Scumm_v2::getVarOrDirectByte(byte mask) {
+ if (_opcode & mask)
+ return getVar();
+ return fetchScriptByte();
+}
+
+int Scumm_v2::getVarOrDirectWord(byte mask) {
+ if (_opcode & mask)
+ return getVar();
+ return fetchScriptWord();
+}
+
void Scumm_v2::setStateCommon(byte type) {
int obj = getVarOrDirectWord(0x80);
putState(obj, getState(obj) | type);
@@ -473,9 +492,9 @@ void Scumm_v2::o2_setBitVar() {
bit_var >>= 4;
if (getVarOrDirectByte(0x80))
- _bitVars[bit_var >> 3] |= (1 << bit_offset);
+ _vars[bit_var] |= (1 << bit_offset);
else
- _bitVars[bit_var >> 3] &= ~(1 << bit_offset);
+ _vars[bit_var] &= ~(1 << bit_offset);
}
void Scumm_v2::o2_getBitVar() {
@@ -488,7 +507,7 @@ void Scumm_v2::o2_getBitVar() {
int bit_offset = bit_var & 0x0f;
bit_var >>= 4;
- _vars[_resultVarNumber] = (_bitVars[bit_var >> 3] & (1 << bit_offset)) ? 1 : 0;
+ _vars[_resultVarNumber] = (_vars[bit_var] & (1 << bit_offset)) ? 1 : 0;
}
void Scumm_v2::ifStateCommon(byte type) {