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; } } } } }