public static void MovePlayer(Enums.Direction dir, bool lastMoved)
        {
            if (!Globals.GettingMap && !PlayerManager.MyPlayer.MovementLocked && !Stories.StoryProcessor.loadingStory && !PlayerManager.MyPlayer.Dead)
            {
                if (PlayerManager.MyPlayer.Confused)
                {
                    dir = (Enums.Direction)(Logic.MathFunctions.Random.Next(0, 4));
                }
                //dir = Enums.Direction.Up;
                //if (SdlInput.Keyboard.IsKeyPressed(IO.ControlLoader.TurnKey)) {
                //    Players.PlayerManager.MyPlayer.Direction = dir;
                //    Messenger.SendPlayerDir();
                //} else
                if (GameProcessor.CanMove(dir))
                {
                    MyPlayer player = PlayerManager.MyPlayer;

                    if (Globals.RefreshLock == false)
                    {
                        if (SdlInput.Keyboard.IsKeyPressed(IO.ControlLoader.RunKey) || SdlInput.Keyboard.IsKeyPressed(SdlInput.Key.RightShift))
                        {
                            player.MovementSpeed = PlayerManager.MyPlayer.SpeedLimit;
                        }
                        else
                        {
                            player.MovementSpeed = Enums.MovementSpeed.Walking;

                            if (player.MovementSpeed > PlayerManager.MyPlayer.SpeedLimit)
                            {
                                player.MovementSpeed = PlayerManager.MyPlayer.SpeedLimit;
                            }
                        }

                        if (Maps.MapHelper.ActiveMap.Tile[player.Location.X, player.Location.Y].Type == Enums.TileType.Slippery && lastMoved)
                        {
                            player.MovementSpeed = Enums.MovementSpeed.Slip;
                        }
                        if (Maps.MapHelper.ActiveMap.Tile[player.Location.X, player.Location.Y].Type == Enums.TileType.Slow)
                        {
                            int  mobilityList = Maps.MapHelper.ActiveMap.Tile[player.Location.X, player.Location.Y].Data1;
                            bool slow         = false;
                            for (int i = 0; i < 16; i++)
                            {
                                if (mobilityList % 2 == 1 && !PlayerManager.MyPlayer.Mobility[i])
                                {
                                    slow = true;
                                    break;
                                }
                                mobilityList /= 2;
                            }
                            if (slow && player.MovementSpeed > (Enums.MovementSpeed)Maps.MapHelper.ActiveMap.Tile[player.Location.X, player.Location.Y].Data2)
                            {
                                player.MovementSpeed = (Enums.MovementSpeed)Maps.MapHelper.ActiveMap.Tile[player.Location.X, player.Location.Y].Data2;
                            }
                        }

                        int x = player.X;
                        int y = player.Y;
                        switch (player.Direction)
                        {
                        case Enums.Direction.Up:
                            if (GameProcessor.CheckLocked(dir))
                            {
                                Messenger.SendPlayerCriticalMove();
                                player.MovementLocked = true;
                            }
                            else
                            {
                                Messenger.SendPlayerMove();
                            }
                            y -= 1;

                            if (y < 0 && Logic.Graphics.Renderers.Maps.SeamlessWorldHelper.IsMapSeamless(Enums.MapID.Up))
                            {
                                Maps.Map oldActive = Maps.MapHelper.Maps[Enums.MapID.Active];
                                Maps.MapHelper.Maps[Enums.MapID.Active] = Maps.MapHelper.Maps[Enums.MapID.Up];
                                Maps.MapHelper.Maps[Enums.MapID.Down]   = oldActive;
                                player.MapID = Maps.MapHelper.Maps[Enums.MapID.Active].MapID;
                                player.Y     = Maps.MapHelper.Maps[Enums.MapID.Active].MaxY + 1;

                                Maps.MapHelper.Maps[Enums.MapID.BottomLeft] = Maps.MapHelper.Maps[Enums.MapID.Left];
                                Maps.MapHelper.Maps[Enums.MapID.Left]       = Maps.MapHelper.Maps[Enums.MapID.TopLeft];

                                Maps.MapHelper.Maps[Enums.MapID.BottomRight] = Maps.MapHelper.Maps[Enums.MapID.Right];
                                Maps.MapHelper.Maps[Enums.MapID.Right]       = Maps.MapHelper.Maps[Enums.MapID.TopRight];



                                Maps.MapHelper.HandleMapDone();
                            }

                            if (Maps.MapHelper.ActiveMap.Tile[player.X, player.Y - 1].Type == Enums.TileType.Warp)
                            {
                                Globals.GettingMap = true;
                            }
                            if (Globals.GettingMap == false)
                            {
                                player.Offset = new System.Drawing.Point(player.Offset.X, Constants.TILE_HEIGHT);
                                player.Y     -= 1;
                            }
                            else
                            {
                                player.MovementSpeed = Enums.MovementSpeed.Standing;
                            }
                            break;

                        case Enums.Direction.Down:
                            if (GameProcessor.CheckLocked(dir))
                            {
                                Messenger.SendPlayerCriticalMove();
                                player.MovementLocked = true;
                            }
                            else
                            {
                                Messenger.SendPlayerMove();
                            }
                            y += 1;

                            if (y > Maps.MapHelper.Maps[Enums.MapID.Active].MaxY && Logic.Graphics.Renderers.Maps.SeamlessWorldHelper.IsMapSeamless(Enums.MapID.Down))
                            {
                                Maps.Map oldActive = Maps.MapHelper.Maps[Enums.MapID.Active];

                                Maps.MapHelper.Maps[Enums.MapID.Active] = Maps.MapHelper.Maps[Enums.MapID.Down];
                                Maps.MapHelper.Maps[Enums.MapID.Up]     = oldActive;
                                player.MapID = Maps.MapHelper.Maps[Enums.MapID.Active].MapID;
                                player.Y     = -1;

                                Maps.MapHelper.Maps[Enums.MapID.TopLeft] = Maps.MapHelper.Maps[Enums.MapID.Left];
                                Maps.MapHelper.Maps[Enums.MapID.Left]    = Maps.MapHelper.Maps[Enums.MapID.BottomLeft];

                                Maps.MapHelper.Maps[Enums.MapID.TopRight] = Maps.MapHelper.Maps[Enums.MapID.Right];
                                Maps.MapHelper.Maps[Enums.MapID.Right]    = Maps.MapHelper.Maps[Enums.MapID.BottomRight];



                                Maps.MapHelper.HandleMapDone();
                            }

                            if (Maps.MapHelper.ActiveMap.Tile[player.X, player.Y + 1].Type == Enums.TileType.Warp)
                            {
                                Globals.GettingMap = true;
                            }
                            if (Globals.GettingMap == false)
                            {
                                player.Offset = new System.Drawing.Point(player.Offset.X, Constants.TILE_HEIGHT * -1);
                                player.Y     += 1;
                            }
                            else
                            {
                                player.MovementSpeed = Enums.MovementSpeed.Standing;
                            }
                            break;

                        case Enums.Direction.Left:
                            if (GameProcessor.CheckLocked(dir))
                            {
                                Messenger.SendPlayerCriticalMove();
                                player.MovementLocked = true;
                            }
                            else
                            {
                                Messenger.SendPlayerMove();
                            }
                            x -= 1;

                            if (x < 0 && Logic.Graphics.Renderers.Maps.SeamlessWorldHelper.IsMapSeamless(Enums.MapID.Left))
                            {
                                Maps.Map oldActive = Maps.MapHelper.Maps[Enums.MapID.Active];
                                Maps.MapHelper.Maps[Enums.MapID.Active] = Maps.MapHelper.Maps[Enums.MapID.Left];

                                player.MapID = Maps.MapHelper.Maps[Enums.MapID.Active].MapID;

                                Maps.MapHelper.Maps[Enums.MapID.TopRight]    = Maps.MapHelper.Maps[Enums.MapID.Up];
                                Maps.MapHelper.Maps[Enums.MapID.BottomRight] = Maps.MapHelper.Maps[Enums.MapID.Down];

                                Maps.MapHelper.Maps[Enums.MapID.Up]   = Maps.MapHelper.Maps[Enums.MapID.TopLeft];
                                Maps.MapHelper.Maps[Enums.MapID.Down] = Maps.MapHelper.Maps[Enums.MapID.BottomLeft];

                                Maps.MapHelper.Maps[Enums.MapID.Right] = oldActive;

                                player.X = Maps.MapHelper.Maps[Enums.MapID.Active].MaxX + 1;


                                Maps.MapHelper.HandleMapDone();
                            }

                            if (Maps.MapHelper.ActiveMap.Tile[player.X - 1, player.Y].Type == Enums.TileType.Warp)
                            {
                                Globals.GettingMap = true;
                            }
                            if (Globals.GettingMap == false)
                            {
                                player.Offset = new System.Drawing.Point(Constants.TILE_WIDTH, player.Offset.Y);
                                player.X     -= 1;
                            }
                            else
                            {
                                player.MovementSpeed = Enums.MovementSpeed.Standing;
                            }
                            break;

                        case Enums.Direction.Right:
                            if (GameProcessor.CheckLocked(dir))
                            {
                                Messenger.SendPlayerCriticalMove();
                                player.MovementLocked = true;
                            }
                            else
                            {
                                Messenger.SendPlayerMove();
                            }
                            x += 1;

                            if (x > Maps.MapHelper.Maps[Enums.MapID.Active].MaxX && Logic.Graphics.Renderers.Maps.SeamlessWorldHelper.IsMapSeamless(Enums.MapID.Right))
                            {
                                Maps.Map oldActive = Maps.MapHelper.Maps[Enums.MapID.Active];

                                Maps.MapHelper.Maps[Enums.MapID.Active] = Maps.MapHelper.Maps[Enums.MapID.Right];

                                player.MapID = Maps.MapHelper.Maps[Enums.MapID.Active].MapID;

                                Maps.MapHelper.Maps[Enums.MapID.TopLeft]    = Maps.MapHelper.Maps[Enums.MapID.Up];
                                Maps.MapHelper.Maps[Enums.MapID.BottomLeft] = Maps.MapHelper.Maps[Enums.MapID.Down];

                                Maps.MapHelper.Maps[Enums.MapID.Up]   = Maps.MapHelper.Maps[Enums.MapID.TopRight];
                                Maps.MapHelper.Maps[Enums.MapID.Down] = Maps.MapHelper.Maps[Enums.MapID.BottomRight];

                                Maps.MapHelper.Maps[Enums.MapID.Left] = oldActive;

                                player.X = -1;

                                Maps.MapHelper.HandleMapDone();
                            }

                            if (Maps.MapHelper.ActiveMap.Tile[player.X + 1, player.Y].Type == Enums.TileType.Warp)
                            {
                                Globals.GettingMap = true;
                            }
                            if (Globals.GettingMap == false)
                            {
                                player.Offset = new System.Drawing.Point(Constants.TILE_WIDTH * -1, player.Offset.Y);
                                player.X     += 1;
                            }
                            else
                            {
                                player.MovementSpeed = Enums.MovementSpeed.Standing;
                            }
                            break;
                        }

                        Logic.Graphics.Renderers.Screen.ScreenRenderer.DeactivateOffscreenSprites();

                        if (player.ID == PlayerManager.MyPlayer.ID)
                        {
                            //PlayerManager.MyPlayer.SetCurrentRoom();
                        }
                        if (player.MovementSpeed > Enums.MovementSpeed.Standing && player.WalkingFrame == -1)
                        {
                            player.WalkingFrame = 0;
                            player.LastWalkTime = Globals.Tick;
                        }
                    }
                }
            }
        }