<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -20,3 +20,11 @@ sensitivity = 5
 
 # If this flag is true, all sound for the game will be disabled. This should fix all AllocateFormatAndData crashes.
 nosound = false
+
+#Sets colours and names for teams - SignpostMarv's idea
+#Default red = 222, 24, 24 #240,240,240
+red_name = Red
+red = 222, 24, 24
+#Default blue = 80,150,255 #56, 195, 65
+blue_name = Blue
+blue = 80,150,255</diff>
      <filename>bin/client.config.txt</filename>
    </modified>
    <modified>
      <diff>@@ -252,9 +252,9 @@ namespace Infiniminer
             {
                 Color chatColor = Color.White;
                 if (messages[i].type == ChatMessageType.SayRedTeam)
-                    chatColor = Defines.IM_RED;
+                    chatColor = _P.red;// Defines.IM_RED;
                 if (messages[i].type == ChatMessageType.SayBlueTeam)
-                    chatColor = Defines.IM_BLUE;
+                    chatColor = _P.blue;// Defines.IM_BLUE;
 
                 int y = graphicsDevice.Viewport.Height - 114;
                 newlines += messages[i].newlines;
@@ -282,7 +282,7 @@ namespace Infiniminer
                                                             texCrosshairs.Width,
                                                             texCrosshairs.Height), Color.White);
 
-            // If equipped, draw the detonator.
+            // If equipped, draw the tool.
             switch (_P.playerTools[_P.playerToolSelected])
             {
                 case PlayerTools.Detonator:
@@ -319,15 +319,15 @@ namespace Infiniminer
 
             // Show the altimeter.
             int altitude = (int)(_P.playerPosition.Y - 64 + Defines.GROUND_LEVEL);
-            RenderMessageCenter(spriteBatch, String.Format(&quot;ALTITUDE: {0:00}&quot;, altitude), new Vector2(graphicsDevice.Viewport.Width - 90, graphicsDevice.Viewport.Height - 40), altitude &gt;= 0 ? Color.Gray : Defines.IM_RED, Color.Black);
+            RenderMessageCenter(spriteBatch, String.Format(&quot;ALTITUDE: {0:00}&quot;, altitude), new Vector2(graphicsDevice.Viewport.Width - 90, graphicsDevice.Viewport.Height - 20), altitude &gt;= 0 ? Color.Gray : Defines.IM_RED, Color.Black);
 
             // Draw bank instructions.
             if (_P.AtBankTerminal())
                 RenderMessageCenter(spriteBatch, &quot;8: DEPOSIT 50 ORE  9: WITHDRAW 50 ORE&quot;, new Vector2(graphicsDevice.Viewport.Width / 2, graphicsDevice.Viewport.Height / 2 + 60), Color.White, Color.Black);
 
             // Are they trying to change class when they cannot?
-            if (Keyboard.GetState().IsKeyDown(Keys.M) &amp;&amp; _P.playerPosition.Y &lt;= 64 - Defines.GROUND_LEVEL &amp;&amp; _P.chatMode == ChatMessageType.None)
-                RenderMessageCenter(spriteBatch, &quot;YOU CANNOT CHANGE YOUR CLASS BELOW THE SURFACE&quot;, new Vector2(graphicsDevice.Viewport.Width / 2, graphicsDevice.Viewport.Height / 2 + 90), Color.White, Color.Black);
+            //if (Keyboard.GetState().IsKeyDown(Keys.M) &amp;&amp; _P.playerPosition.Y &lt;= 64 - Defines.GROUND_LEVEL &amp;&amp; _P.chatMode == ChatMessageType.None)
+            //    RenderMessageCenter(spriteBatch, &quot;YOU CANNOT CHANGE YOUR CLASS BELOW THE SURFACE&quot;, new Vector2(graphicsDevice.Viewport.Width / 2, graphicsDevice.Viewport.Height / 2 + 90), Color.White, Color.Black);
 
             // Draw the text-based information panel.
             int textStart = (graphicsDevice.Viewport.Width - 1024) / 2;
@@ -336,8 +336,8 @@ namespace Infiniminer
             spriteBatch.DrawString(uiFont, &quot;LOOT: $&quot; + _P.playerCash, new Vector2(textStart + 170, 2), Color.White);
             spriteBatch.DrawString(uiFont, &quot;WEIGHT: &quot; + _P.playerWeight + &quot;/&quot; + _P.playerWeightMax, new Vector2(textStart + 340, 2), Color.White);
             spriteBatch.DrawString(uiFont, &quot;TEAM ORE: &quot; + _P.teamOre, new Vector2(textStart + 515, 2), Color.White);
-            spriteBatch.DrawString(uiFont, &quot;RED: $&quot; + _P.teamRedCash, new Vector2(textStart + 700, 2), Defines.IM_RED);
-            spriteBatch.DrawString(uiFont, &quot;BLUE: $&quot; + _P.teamBlueCash, new Vector2(textStart + 860, 2), Defines.IM_BLUE);
+            spriteBatch.DrawString(uiFont, _P.redName + &quot;: $&quot; + _P.teamRedCash, new Vector2(textStart + 700, 2), _P.red);// Defines.IM_RED);
+            spriteBatch.DrawString(uiFont, _P.blueName + &quot;: $&quot; + _P.teamBlueCash, new Vector2(textStart + 860, 2), _P.blue);// Defines.IM_BLUE);
 
             // Draw player information.
             if ((Keyboard.GetState().IsKeyDown(Keys.Tab) &amp;&amp; _P.screenEffect == ScreenEffect.None) || _P.teamWinners != PlayerTeam.None)
@@ -345,12 +345,12 @@ namespace Infiniminer
                 spriteBatch.Draw(texBlank, new Rectangle(0, 0, graphicsDevice.Viewport.Width, graphicsDevice.Viewport.Height), new Color(Color.Black, 0.7f));
 
                 //Server name
-                RenderMessageCenter(spriteBatch, _P.serverName, new Vector2(graphicsDevice.Viewport.Width / 2, 32), _P.playerTeam == PlayerTeam.Blue ? Defines.IM_BLUE : Defines.IM_RED, Color.Black);
+                RenderMessageCenter(spriteBatch, _P.serverName, new Vector2(graphicsDevice.Viewport.Width / 2, 32), _P.playerTeam == PlayerTeam.Blue ? _P.blue : _P.red, Color.Black);//Defines.IM_BLUE : Defines.IM_RED, Color.Black);
                 
                 if (_P.teamWinners != PlayerTeam.None)
                 {
                     string teamName = _P.teamWinners == PlayerTeam.Red ? &quot;RED&quot; : &quot;BLUE&quot;;
-                    Color teamColor = _P.teamWinners == PlayerTeam.Red ? Defines.IM_RED : Defines.IM_BLUE;
+                    Color teamColor = _P.teamWinners == PlayerTeam.Red ? _P.red : _P.blue;//Defines.IM_RED : Defines.IM_BLUE;
                     string gameOverMessage = &quot;GAME OVER - &quot; + teamName + &quot; TEAM WINS!&quot;;
                     RenderMessageCenter(spriteBatch, gameOverMessage, new Vector2(graphicsDevice.Viewport.Width / 2, 150), teamColor, new Color(0, 0, 0, 0));
                 }
@@ -360,7 +360,7 @@ namespace Infiniminer
                 {
                     if (p.Team != PlayerTeam.Red)
                         continue;
-                    RenderMessageCenter(spriteBatch, p.Handle + &quot; ( $&quot; + p.Score + &quot; )&quot;, new Vector2(graphicsDevice.Viewport.Width / 4, drawY), Defines.IM_RED, new Color(0, 0, 0, 0));
+                    RenderMessageCenter(spriteBatch, p.Handle + &quot; ( $&quot; + p.Score + &quot; )&quot;, new Vector2(graphicsDevice.Viewport.Width / 4, drawY), _P.red, new Color(0, 0, 0, 0));//Defines.IM_RED
                     drawY += 35;
                 }
                 drawY = 200;
@@ -368,7 +368,7 @@ namespace Infiniminer
                 {
                     if (p.Team != PlayerTeam.Blue)
                         continue;
-                    RenderMessageCenter(spriteBatch, p.Handle + &quot; ( $&quot; + p.Score + &quot; )&quot;, new Vector2(graphicsDevice.Viewport.Width * 3 / 4, drawY), Defines.IM_BLUE, new Color(0, 0, 0, 0));
+                    RenderMessageCenter(spriteBatch, p.Handle + &quot; ( $&quot; + p.Score + &quot; )&quot;, new Vector2(graphicsDevice.Viewport.Width * 3 / 4, drawY), _P.blue, new Color(0, 0, 0, 0)); //Defines.IM_BLUE
                     drawY += 35;
                 }
             }
@@ -405,7 +405,7 @@ namespace Infiniminer
             spriteBatch.Draw(texRadarBackground, new Vector2(10, 30), Color.White);
             foreach (Player p in _P.playerList.Values)
                 if (p.Team == _P.playerTeam &amp;&amp; p.Alive)
-                    RenderRadarBlip(spriteBatch, p.ID == _P.playerMyId ? _P.playerPosition : p.Position, p.Team == PlayerTeam.Red ? Defines.IM_RED : Defines.IM_BLUE, p.Ping &gt; 0, &quot;&quot;);
+                    RenderRadarBlip(spriteBatch, p.ID == _P.playerMyId ? _P.playerPosition : p.Position, p.Team == PlayerTeam.Red ? _P.red : _P.blue, p.Ping &gt; 0, &quot;&quot;); //Defines.IM_RED : Defines.IM_BLUE, p.Ping &gt; 0, &quot;&quot;);
             foreach (KeyValuePair&lt;Vector3, Beacon&gt; bPair in _P.beaconList)
                 if (bPair.Value.Team == _P.playerTeam)
                     RenderRadarBlip(spriteBatch, bPair.Key, Color.White, false, bPair.Value.ID);</diff>
      <filename>code/InfiniminerClient/Engines/InterfaceEngine.cs</filename>
    </modified>
    <modified>
      <diff>@@ -99,11 +99,11 @@ namespace Infiniminer
                         playerText = p.Handle;
                         if (p.Ping &gt; 0)
                             playerText = &quot;*** &quot; + playerText + &quot; ***&quot;;
-                        
+
                         p.SpriteModel.DrawText(_P.playerCamera.ViewMatrix,
                                                _P.playerCamera.ProjectionMatrix,
                                                p.Position - Vector3.UnitY * 1.5f,
-                                               playerText, p.Team == PlayerTeam.Blue ? Defines.IM_BLUE : Defines.IM_RED);
+                                               playerText, p.Team == PlayerTeam.Blue ? _P.blue : _P.red);//Defines.IM_BLUE : Defines.IM_RED);
                     }
                 }
             }</diff>
      <filename>code/InfiniminerClient/Engines/PlayerEngine.cs</filename>
    </modified>
    <modified>
      <diff>@@ -30,6 +30,11 @@ namespace Infiniminer
         public bool InvertMouseYAxis = false;
         public bool NoSound = false;
         public float mouseSensitivity = 0.005f;
+        public bool customColours = false;
+        public Color red=Defines.IM_RED;
+        public string redName = &quot;Red&quot;;
+        public Color blue = Defines.IM_BLUE;
+        public string blueName = &quot;Blue&quot;;
 
         public KeyBindHandler keyBinds = new KeyBindHandler();
 
@@ -310,6 +315,9 @@ namespace Infiniminer
                                             propertyBag.playerList[playerId].Handle = playerName;
                                             propertyBag.playerList[playerId].ID = playerId;
                                             propertyBag.playerList[playerId].Alive = playerAlive;
+                                            propertyBag.playerList[playerId].AltColours = customColours;
+                                            propertyBag.playerList[playerId].redTeam = red;
+                                            propertyBag.playerList[playerId].blueTeam = blue;
                                             if (thisIsMe)
                                                 propertyBag.playerMyId = playerId;
                                         }
@@ -462,7 +470,54 @@ namespace Infiniminer
                 volumeLevel = Math.Max(0,Math.Min(1,float.Parse(dataFile.Data[&quot;volume&quot;], System.Globalization.CultureInfo.InvariantCulture)));
             if (dataFile.Data.ContainsKey(&quot;sensitivity&quot;))
                 mouseSensitivity=Math.Max(0.001f,Math.Min(0.05f,float.Parse(dataFile.Data[&quot;sensitivity&quot;], System.Globalization.CultureInfo.InvariantCulture)/1000f));
-            
+            if (dataFile.Data.ContainsKey(&quot;red_name&quot;))
+                redName = dataFile.Data[&quot;red_name&quot;].Trim();
+            if (dataFile.Data.ContainsKey(&quot;blue_name&quot;))
+                blueName = dataFile.Data[&quot;blue_name&quot;].Trim();
+
+
+            if (dataFile.Data.ContainsKey(&quot;red&quot;))
+            {
+                Color temp = new Color();
+                string[] data = dataFile.Data[&quot;red&quot;].Split(',');
+                try
+                {
+                    temp.R = byte.Parse(data[0].Trim());
+                    temp.G = byte.Parse(data[1].Trim());
+                    temp.B = byte.Parse(data[2].Trim());
+                    temp.A = (byte)255;
+                }
+                catch {
+                    Console.WriteLine(&quot;Invalid colour values for red&quot;);
+                }
+                if (temp.A != 0)
+                {
+                    red = temp;
+                    customColours = true;
+                }
+            }
+
+            if (dataFile.Data.ContainsKey(&quot;blue&quot;))
+            {
+                Color temp = new Color();
+                string[] data = dataFile.Data[&quot;blue&quot;].Split(',');
+                try
+                {
+                    temp.R = byte.Parse(data[0].Trim());
+                    temp.G = byte.Parse(data[1].Trim());
+                    temp.B = byte.Parse(data[2].Trim());
+                    temp.A = (byte)255;
+                }
+                catch {
+                    Console.WriteLine(&quot;Invalid colour values for blue&quot;);
+                }
+                if (temp.A != 0)
+                {
+                    blue = temp;
+                    customColours = true;
+                }
+            }
+
             //Now to read the key bindings
             if (!File.Exists(&quot;keymap.txt&quot;))
             {
@@ -524,6 +579,10 @@ namespace Infiniminer
             propertyBag.volumeLevel = volumeLevel;
             propertyBag.mouseSensitivity = mouseSensitivity;
             propertyBag.keyBinds = keyBinds;
+            propertyBag.blue = blue;
+            propertyBag.red = red;
+            propertyBag.blueName = blueName;
+            propertyBag.redName = redName;
             msgBuffer = propertyBag.netClient.CreateBuffer();
         }
 </diff>
      <filename>code/InfiniminerClient/InfiniminerGame.cs</filename>
    </modified>
    <modified>
      <diff>@@ -74,6 +74,13 @@ namespace Infiniminer
         public ScreenEffect screenEffect = ScreenEffect.None;
         public double screenEffectCounter = 0;
 
+        //Team colour stuff
+        public bool customColours = false;
+        public Color red = Defines.IM_RED;
+        public Color blue = Defines.IM_BLUE;
+        public string redName = &quot;Red&quot;;
+        public string blueName = &quot;Blue&quot;;
+
         // Sound stuff.
         public Dictionary&lt;InfiniminerSound, SoundEffect&gt; soundList = new Dictionary&lt;InfiniminerSound, SoundEffect&gt;();
 </diff>
      <filename>code/InfiniminerClient/PropertyBag.cs</filename>
    </modified>
    <modified>
      <diff>@@ -83,8 +83,8 @@ namespace Infiniminer.States
             SpriteBatch spriteBatch = new SpriteBatch(graphicsDevice);
             spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Deferred, SaveStateMode.SaveState);
             spriteBatch.Draw(texMenu, drawRect, Color.White);
-            QuickDrawText(spriteBatch, &quot;&quot; + redTeamCount + &quot; PLAYERS&quot;, 360, Defines.IM_RED);
-            QuickDrawText(spriteBatch, &quot;&quot; + blueTeamCount + &quot; PLAYERS&quot;, 620, Defines.IM_BLUE);
+            QuickDrawText(spriteBatch, &quot;&quot; + redTeamCount + &quot; PLAYERS&quot;, 360, _P.red);//Defines.IM_RED);
+            QuickDrawText(spriteBatch, &quot;&quot; + blueTeamCount + &quot; PLAYERS&quot;, 620, _P.blue);//Defines.IM_BLUE);
             spriteBatch.End();
         }
 </diff>
      <filename>code/InfiniminerClient/States/TeamSelectionState.cs</filename>
    </modified>
    <modified>
      <diff>@@ -52,6 +52,9 @@ namespace Infiniminer
                 return false;
             }
         }
+        public bool AltColours = false;
+        public Color redTeam = new Color();
+        public Color blueTeam = new Color();
         public string Handle = &quot;&quot;;
         public uint OreMax = 0;
         public uint WeightMax = 0;
@@ -216,9 +219,9 @@ namespace Infiniminer
                 return;
 
             string textureName = &quot;sprites/tex_sprite_&quot;;
-            if (team == PlayerTeam.Red)
+            /*if (team == PlayerTeam.Red&amp;&amp;(!AltColours||redTeam==Defines.IM_RED))
                 textureName += &quot;red_&quot;;
-            else
+            else*/
                 textureName += &quot;blue_&quot;;
             switch (tool)
             {
@@ -239,7 +242,19 @@ namespace Infiniminer
                     textureName += &quot;pickaxe&quot;;
                     break;
             }
-            this.SpriteModel.SetSpriteTexture(gameInstance.Content.Load&lt;Texture2D&gt;(textureName));
+            Texture2D orig = gameInstance.Content.Load&lt;Texture2D&gt;(textureName);
+            if (AltColours)// &amp;&amp; ((team == PlayerTeam.Blue &amp;&amp; blueTeam != Defines.IM_BLUE) || (team == PlayerTeam.Red &amp;&amp; redTeam != Defines.IM_RED)))
+            {
+                Color[] data = new Color[orig.Width * orig.Height];
+                orig.GetData&lt;Color&gt;(data);
+                Texture2D temp = new Texture2D(orig.GraphicsDevice,orig.Width,orig.Height);
+                temp.SetData&lt;Color&gt;(data);
+                Defines.generateShadedTexture(team == PlayerTeam.Blue ? blueTeam : redTeam, orig, ref temp);
+                Console.WriteLine(&quot;Team: &quot; + team.ToString() + &quot;; Red col: &quot; + redTeam.ToString() + &quot;; Blue col: &quot; + blueTeam.ToString());
+                this.SpriteModel.SetSpriteTexture(temp);
+            }
+            else
+                this.SpriteModel.SetSpriteTexture(orig);
         }
 
         static uint uniqueId = 0;</diff>
      <filename>code/InfiniminerShared/Player.cs</filename>
    </modified>
    <modified>
      <diff>@@ -23,6 +23,118 @@ namespace Infiniminer
         public static Color IM_BLUE = new Color(80, 150, 255);
         public static Color IM_RED = new Color(222, 24, 24);
 
+        public static Color[] BLUE_SHADES = { //Darkest to lightest
+                                                new Color(0,28,57),
+                                                new Color(0,58,117),
+                                                new Color(0,91,183),
+                                                new Color(0,107,215),
+                                                new Color(0,127,255)
+                                            };
+        public static Color[] generateShades(Color col)
+        {
+            Color temp = col;//new Color(80, 150, 255);
+            //How do we get temp from that to BLUE_SHADES?
+            //First let's order which colours are most dominant
+            int[] dominance = new int[]{ 0, 1, 2 }; //2 most dominant
+            byte[] values = new byte[]{temp.R, temp.B, temp.G};
+
+            bool changed = true;
+            while (changed)
+            {
+                changed = false;
+                for (int i = 0; i &lt; 2; i++)
+                {
+                    if (values[i] &gt; values[i + 1])
+                    {
+                        byte onesec = values[i + 1];
+                        values[i + 1] = values[i];
+                        values[i] = onesec;
+                        int onesec2 = dominance[i + 1];
+                        dominance[i + 1] = dominance[i];
+                        dominance[i] = onesec2;
+                        changed = true;
+                    }
+                }
+            }
+
+            //...Well, first I guess we remove the least dominant colour - threshold of 80, decrease of 30?
+            byte min = (temp.R &lt; temp.G ? temp.R : temp.G);
+            min = min &lt; temp.B ? min : temp.B;
+            byte max = (temp.R &gt; temp.G ? temp.R : temp.G);
+            max = max &gt; temp.B ? max : temp.B;
+            //byte adjusted = (byte)(min - 80 &lt; 0 ? 0 : min - 30); //The -30 is intentional
+            //temp = new Color(temp.R == min ? adjusted : temp.R, temp.G == min ? adjusted : temp.G, temp.B == min ? adjusted : temp.B);
+
+            //Ok, now we have the least dominant colour removed or at the very least subdued
+            //Now we need to scale the remaining colours
+            //The input colour for blue is closest to the brightest blue colour, so we'll use that for comparison
+            //Thus it's 255/255, 215,255, etc. for dominant
+            //And 127/150, 107/150, etc. for second most dominant
+            //What's the scaled diff from the first dominant to second dominant though?
+            //{ 2, 2, 2, 2, 2 } !
+            //What are the dominant percentages for the original colour?
+            //{ .313, .588, 1 }
+            //Huh...
+            //And the dominant percentages for the adjusted color to the second is 2
+            //Seems accurate enough. Might as well give this a try!
+            float[] dominantMultipliers = new float[] { 0.223529f, 0.4588235f, 0.717647f, 0.843137f, 1f };
+            float[] secondDominantMultipliers = new float[] { 0.1866667f, 0.3866667f, 0.6066667f, 0.713333f, 0.8466667f };
+            //float[] multipliers = new float[] { 1.197477f, 1.1866124f, 1.1829346f, 1.181968f, 1.1811f };
+            float[] dominantPercentages = new float[] { temp.R/max, temp.G/max, temp.B/max };
+            float[] leastDominantMultipliers = new float[] { 1f, 1f, 1f, 1f, 1f }; //No info to compare yet
+            float[][] multipliers = new float[][] { dominantMultipliers, secondDominantMultipliers, leastDominantMultipliers };
+
+            //Everything set? Then let's calculate!
+            Color[] shades = new Color[5];
+            //Loop through each shade, going from darkest to lightest
+            for (int i = 0; i &lt; dominantMultipliers.Length; i++)
+            {
+                //Go through the colour channels
+                shades[i] = new Color();
+                shades[i].R = (byte)(temp.R*(multipliers[0][i]/dominantPercentages[0]));//(byte)(multipliers[dominance[0]][i] * temp.R);
+                shades[i].G = (byte)(temp.G * (multipliers[0][i] / dominantPercentages[1]));//(byte)(multipliers[dominance[1]][i] * temp.G);
+                shades[i].B = (byte)(temp.B * (multipliers[0][i] / dominantPercentages[2]));//(byte)(multipliers[dominance[2]][i] * temp.B);
+                shades[i].A = (byte)255;
+            }
+            return shades;
+        }
+
+        public static void generateShadedTexture(Color col, Texture2D bsprite, ref Texture2D target)
+        {
+            System.Console.WriteLine(&quot;Input colour: &quot; + col.ToString());
+            try
+            {
+                Color[] shades = generateShades(col);
+                System.Console.WriteLine(&quot;Output colours: &quot; + shades[0]);
+                System.Console.WriteLine(&quot;\t&quot; + shades[1]);
+                System.Console.WriteLine(&quot;\t&quot; + shades[2]);
+                System.Console.WriteLine(&quot;\t&quot; + shades[3]);
+                System.Console.WriteLine(&quot;\t&quot; + shades[4]);
+                Color[] colArray = new Color[bsprite.Width * bsprite.Height];
+                bsprite.GetData&lt;Color&gt;(colArray);
+                for (int c = 0; c &lt; colArray.Length; c++)
+                {
+                    for (int i = 0; i &lt; 5; i++)
+                    {
+                        if (colArray[c] == BLUE_SHADES[i])
+                        {
+                            colArray[c] = shades[i];
+                            break;
+                        }
+                    }
+                }
+                target.SetData&lt;Color&gt;(colArray);
+            }
+            catch (System.Exception e)
+            {
+                System.Console.OpenStandardError();
+                System.Console.WriteLine(e.Message);
+                System.Console.WriteLine(e.StackTrace);
+                System.Console.Error.Close();
+            }
+            System.Console.WriteLine(&quot;Finished texture shading!&quot;);
+        }
+
         public static string Sanitize(string input)
         {
             string output = &quot;&quot;;</diff>
      <filename>code/InfiniminerShared/SharedConstants.cs</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>d2ca5d07a3e0ad1272a627c0f7de9cacf64197fb</id>
    </parent>
  </parents>
  <author>
    <name>Metroid48</name>
    <email>metroid48@gmail.com</email>
  </author>
  <url>http://github.com/Metroid48/Infiniminer/commit/64432b0506025ccdf5b358e5358b7a6ac4603b3b</url>
  <id>64432b0506025ccdf5b358e5358b7a6ac4603b3b</id>
  <committed-date>2009-06-15T17:21:20-07:00</committed-date>
  <authored-date>2009-06-05T16:23:09-07:00</authored-date>
  <message>Just a neat change for clients. I've added two options per team that define their colour and name - change these to change the ingame player sprites, chat / ui text, etc. If you remove the options completely it will use the original sprites.

Signed-off-by: Zach Barth &lt;zachbarth@gmail.com&gt;</message>
  <tree>caa525c8fadb5ae958adbc371794105c0c96e3be</tree>
  <committer>
    <name>Zach Barth</name>
    <email>zachbarth@gmail.com</email>
  </committer>
</commit>
