protected void GetObjectXYPos(int obj, out Point p, out int dir)
{
var idx = GetObjectIndex(obj);
var od = _objs[idx];
if (Game.Version >= 6)
{
var state = GetStateCore(obj) - 1;
if (state < 0)
state = 0;
var x = od.Position.X + od.Hotspots[state].X;
var y = od.Position.Y + od.Hotspots[state].Y;
p = new Point(x, y);
}
else if (Game.Version <= 2)
{
var x = od.Walk.X;
var y = od.Walk.Y;
// Adjust x, y when no actor direction is set, but only perform this
// adjustment for V0 games (e.g. MM C64), otherwise certain scenes in
// newer games are affected as well (e.g. the interior of the Shuttle
// Bus scene in Zak V2, where no actor is present). Refer to bug #3526089.
if (od.ActorDir == 0 && Game.Version == 0)
{
x = od.Position.X + od.Width / 2;
y = od.Position.Y + od.Height / 2;
}
x = x >> V12_X_SHIFT;
y = y >> V12_Y_SHIFT;
p = new Point(x, y);
}
else
{
p = od.Walk;
}
if (_game.Version == 8)
dir = ScummHelper.FromSimpleDir(1, od.ActorDir);
else
dir = ScummHelper.OldDirToNewDir(od.ActorDir & 3);
}