aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Brown2002-07-30 15:20:30 +0000
committerJames Brown2002-07-30 15:20:30 +0000
commit30cd1e43d2b6b74d56d19b21f114542b961edad5 (patch)
treeaa866fd39fb75506c7bc126cde82af1825ccc6e5
parenteae0d3910da55d811209e98a386eb9513a212bf0 (diff)
downloadscummvm-rg350-30cd1e43d2b6b74d56d19b21f114542b961edad5.tar.gz
scummvm-rg350-30cd1e43d2b6b74d56d19b21f114542b961edad5.tar.bz2
scummvm-rg350-30cd1e43d2b6b74d56d19b21f114542b961edad5.zip
Patch by yot to fix Zak256 markings.
svn-id: r4682
-rw-r--r--script.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/script.cpp b/script.cpp
index 8afbbd4135..51ca883e27 100644
--- a/script.cpp
+++ b/script.cpp
@@ -343,6 +343,16 @@ int Scumm::readVar(uint var)
return _vars[var];
if (var & 0x8000) {
+ if (_gameId == GID_ZAK256) {
+ // Emulate a wierd hack in Zak256 to read individual
+ // bits of a normal global
+ int b = (var & 0x000F);
+ var &= 0x0FFF;
+ var >>= 4;
+ checkRange(_numVariables - 1, 0, var, "Variable %d out of range(rzb)");
+ return (_vars[ var ] & ( 1 << b ) ) ? 1 : 0;
+ }
+
var &= 0x7FFF;
checkRange(_numBitVariables - 1, 0, var, "Bit variable %d out of range(r)");
return (_bitVars[var >> 3] & (1 << (var & 7))) ? 1 : 0;
@@ -380,6 +390,19 @@ void Scumm::writeVar(uint var, int value)
}
if (var & 0x8000) {
+ if (_gameId == GID_ZAK256) {
+ // Emulate a wierd hack in Zak256 to read individual
+ // bits of a normal global
+ int b = (var & 0x000F);
+ var &= 0x7FFF;
+ var >>= 4;
+ checkRange(_numVariables - 1, 0, var, "Variable %d out of range(wzb)");
+ if(value)
+ _vars[ var ] |= ( 1 << b );
+ else
+ _vars[ var ] &= ~( 1 << b );
+ return;
+ }
var &= 0x7FFF;
checkRange(_numBitVariables - 1, 0, var, "Bit variable %d out of range(w)");