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)");  | 
