void LoadRoomWithEgo()
{
int obj = GetVarOrDirectWord(OpCodeParameter.Param1);
int room = GetVarOrDirectByte(OpCodeParameter.Param2);
var a = Actors[Variables[VariableEgo.Value]];
a.PutActor((byte)room);
int oldDir = a.Facing;
EgoPositioned = false;
var x = ReadWordSigned();
var y = ReadWordSigned();
Variables[VariableWalkToObject.Value] = obj;
StartScene(a.Room, a, obj);
Variables[VariableWalkToObject.Value] = 0;
if (Game.Version <= 4)
{
if (!EgoPositioned)
{
int dir;
Point p;
GetObjectXYPos(obj, out p, out dir);
a.PutActor(p, CurrentRoom);
if (a.Facing == oldDir)
a.SetDirection(dir + 180);
}
a.Moving = 0;
}
// This is based on disassembly
Camera.CurrentPosition.X = Camera.DestinationPosition.X = a.Position.X;
if ((Game.GameId == GameId.Zak || Game.GameId == GameId.Loom) && (Game.Platform == Platform.FMTowns))
{
SetCameraAt(a.Position);
}
SetCameraFollows(a, false);
_fullRedraw = true;
if (x != -1)
{
a.StartWalk(new Point(x, y), -1);
}
}