diff --git a/OpenRA.Server/Server.cs b/OpenRA.Server/Server.cs index 5f95cddc0f..4c2f7e89d7 100644 --- a/OpenRA.Server/Server.cs +++ b/OpenRA.Server/Server.cs @@ -57,6 +57,15 @@ namespace OpenRA.Server throw new InvalidOperationException("Already got 8 players"); } + static int ChooseFreePalette() + { + for (var i = 0; i < 8; i++) + if (lobbyInfo.Clients.All(c => c.Palette != i)) + return i; + + throw new InvalidOperationException("No free palettes"); + } + static void AcceptConnection() { var newConn = new Connection { socket = listener.AcceptSocket() }; @@ -74,7 +83,7 @@ namespace OpenRA.Server new Session.Client() { Index = newConn.PlayerIndex, - Palette = newConn.PlayerIndex, + Palette = ChooseFreePalette(), Name = "Player {0}".F(1 + newConn.PlayerIndex), Race = 1, State = Session.ClientState.NotReady @@ -303,6 +312,14 @@ namespace OpenRA.Server return false; } + if (lobbyInfo.Clients.Where( c => c != GetClient(conn) ).Any( c => c.Palette == pal )) + { + DispatchOrdersToClient(conn, 0, + new ServerOrder( conn.PlayerIndex, "Chat", + "You can't be the same color as another player" ).Serialize() ); + return true; + } + GetClient(conn).Palette = pal; SyncLobbyInfo(); return true; diff --git a/OpenRa.Game/Chrome.cs b/OpenRa.Game/Chrome.cs index 276fee4b33..0ffc71272b 100644 --- a/OpenRa.Game/Chrome.cs +++ b/OpenRa.Game/Chrome.cs @@ -305,8 +305,6 @@ namespace OpenRa.Game hasRadar = hasNewRadar; - var isJammed = false; // todo: MRJ can do this - rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, radarCollection, "left"), radarOrigin, PaletteType.Chrome); rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, radarCollection, "right"), radarOrigin + new float2(201, 0), PaletteType.Chrome); rgbaRenderer.DrawSprite(SequenceProvider.GetImageFromCollection(renderer, radarCollection, "bottom"), radarOrigin + new float2(0, 192), PaletteType.Chrome);