protected override void WriteVariable(uint index, int value)
{
// Console.WriteLine("SetResult({0},{1})", index, value);
if ((index & 0xF000) == 0)
{
ScummHelper.AssertRange(0, index, _resManager.NumVariables - 1, "variable (writing)");
Variables[index] = value;
return;
}
if ((index & 0x8000) != 0)
{
if (Game.Version <= 3 && !(Game.GameId == GameId.Indy3 && Game.Platform == Platform.FMTowns) &&
!(Game.GameId == GameId.Loom && Game.Platform == Platform.PCEngine))
{
var bit = (int)(index & 0xF);
index = (index >> 4) & 0xFF;
ScummHelper.AssertRange(0, index, _resManager.NumVariables - 1, "variable (writing)");
if (value > 0)
Variables[index] |= (1 << bit);
else
Variables[index] &= ~(1 << bit);
}
else
{
index &= 0x7FFF;
ScummHelper.AssertRange(0, index, _bitVars.Length - 1, "bit variable (writing)");
_bitVars[(int)index] = value != 0;
}
return;
}
if ((index & 0x4000) != 0)
{
if (Game.Features.HasFlag(GameFeatures.FewLocals))
{
index &= 0xF;
}
else
{
index &= 0xFFF;
}
ScummHelper.AssertRange(0, index, 20, "local variable (writing)");
//Console.WriteLine ("SetLocalVariables(script={0},var={1},value={2})", CurrentScript, index, value);
Slots[CurrentScript].LocalVariables[index] = value;
return;
}
}