Patch by yot to fix Zak256 markings.
svn-id: r4682
This commit is contained in:
parent
eae0d3910d
commit
30cd1e43d2
1 changed files with 23 additions and 0 deletions
23
script.cpp
23
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)");
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue