diff options
author | James Brown | 2002-07-30 15:20:30 +0000 |
---|---|---|
committer | James Brown | 2002-07-30 15:20:30 +0000 |
commit | 30cd1e43d2b6b74d56d19b21f114542b961edad5 (patch) | |
tree | aa866fd39fb75506c7bc126cde82af1825ccc6e5 | |
parent | eae0d3910da55d811209e98a386eb9513a212bf0 (diff) | |
download | scummvm-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.cpp | 23 |
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)"); |