Index: binaries/data/mods/public/gui/common/settings.js
===================================================================
--- binaries/data/mods/public/gui/common/settings.js	(revision 17019)
+++ binaries/data/mods/public/gui/common/settings.js	(working copy)
@@ -32,6 +32,7 @@
 	var settings = {
 		"Ceasefire": loadCeasefire(),
 		"GameSpeeds": loadSettingValuesFile("game_speeds.json"),
+		"PlayerColors": loadPlayerColors(),
 		"PopulationCapacities": loadPopulationCapacities(),
 		"StartingResources": loadSettingValuesFile("starting_resources.json")
 	};
@@ -89,6 +90,24 @@
 }
 
 /**
+* Loads available colors settings.
+*
+* @returns {Array|undefined}
+*/
+function loadPlayerColors()
+{
+    var json = Engine.ReadJSONFile("simulation/data/player_defaults.json");
+
+    if (!json || !json.PlayerData || !Array.isArray(json.PlayerData))
+    {
+        error("Could not load player_defaults.json");
+        return undefined;
+    }
+
+    return json.PlayerData.map(player => player.Color);
+}
+
+/**
  * Loads available population capacities.
  *
  * @returns {Array|undefined}
Index: binaries/data/mods/public/gui/gamesetup/gamesetup.js
===================================================================
--- binaries/data/mods/public/gui/gamesetup/gamesetup.js	(revision 17019)
+++ binaries/data/mods/public/gui/gamesetup/gamesetup.js	(working copy)
@@ -7,6 +7,7 @@
 
 const g_Ceasefire = prepareForDropdown(g_Settings ? g_Settings.Ceasefire : undefined);
 const g_GameSpeeds = prepareForDropdown(g_Settings ? g_Settings.GameSpeeds.filter(speed => !speed.ReplayOnly) : undefined);
+const g_PlayerColors = prepareForDropdown(g_Settings ? g_Settings.PlayerColors : undefined);
 const g_PopulationCapacities = prepareForDropdown(g_Settings ? g_Settings.PopulationCapacities : undefined);
 const g_StartingResources = prepareForDropdown(g_Settings ? g_Settings.StartingResources : undefined);
 
@@ -50,6 +51,10 @@
 
 var g_AIs = [];
 
+var g_PlayerColorIds = [];
+var g_PlayerColorNames = [];
+var g_PlayerColorValues = [];
+
 var g_ChatMessages = [];
 
 // Data caches
@@ -380,6 +385,21 @@
 			updateGameAttributes();
 		};
 
+		// Populate color drop-down lists.
+		var colorPicker = Engine.GetGUIObjectByName("playerColorPicker["+i+"]");
+		colorPicker.list = getPlayerColorNames();
+		colorPicker.list_data = getPlayerColorIds();
+		colorPicker.selected = -1;
+		// Update color
+		colorPicker.onSelectionChange = function()
+		{
+			if (this.selected !== -1)
+			{
+				var numPlayers = g_GameAttributes.settings.PlayerData.length;
+
+			}
+		}
+
 		// Set events
 		var civ = Engine.GetGUIObjectByName("playerCiv["+i+"]");
 		civ.onSelectionChange = function() {
@@ -413,6 +433,32 @@
 	}
 }
 
+function getPlayerColorIds()
+{
+	for(let i = 0; i < g_PlayerColors.r.length;++i)
+		g_PlayerColorIds[i] = i;
+
+	return g_PlayerColorIds;
+}
+function getPlayerColorNames()
+{
+	for(let i = 0; i < g_PlayerColors.r.length;++i)
+		g_PlayerColorNames[i] = "[color=\"" + g_PlayerColors.r[i] + " " + g_PlayerColors.g[i] + " " + g_PlayerColors.b[i] + " 255\"]" + "■";
+
+		return g_PlayerColorNames;
+}
+function getPlayerColorValues()
+{
+	for(let i = 0; i < g_PlayerColors.r.length;++i)
+	{
+		g_PlayerColorValues[i].r = g_PlayerColors.r[i];
+		g_PlayerColorValues[i].g = g_PlayerColors.g[i];
+		g_PlayerColorValues[i].b = g_PlayerColors.b[i];
+	}
+
+	return g_PlayerColorValues;
+}
+
 function handleNetMessage(message)
 {
 	log("Net message: " + uneval(message));
Index: binaries/data/mods/public/gui/gamesetup/gamesetup.xml
===================================================================
--- binaries/data/mods/public/gui/gamesetup/gamesetup.xml	(revision 17019)
+++ binaries/data/mods/public/gui/gamesetup/gamesetup.xml	(working copy)
@@ -42,9 +42,12 @@
 			<!-- Player assignments -->
 			<object size="24 49 100%-440 345" type="image" sprite="ModernDarkBoxGold" name="playerAssignmentsPanel">
 				<object size="0 6 100% 30">
-					<object name="playerNameHeading" type="text" style="ModernLabelText" size="0 0 22% 100%">
+					<object name="playerNameHeading" type="text" style="ModernLabelText" size="0 0 16% 100%">
 						<translatableAttribute id="caption">Player Name</translatableAttribute>
 					</object>
+					<object name="playerColorHeading" type="text" style="ModernLabelText" size="-2% 0 40% 100%">
+						<translatableAttribute id="caption">Color</translatableAttribute>
+					</object>
 					<object name="playerPlacementHeading" type="text" style="ModernLabelText" size="22%+5 0 50%+35 100%">
 						<translatableAttribute id="caption">Player Placement</translatableAttribute>
 					</object>
@@ -71,7 +74,10 @@
 					<repeat count="8">
 						<object name="playerBox[n]" size="0 0 100% 32" hidden="true">
 							<object name="playerColor[n]" type="image" size="0 0 100% 100%"/>
-							<object name="playerName[n]" type="text" style="ModernLabelText" size="0 2 22% 30"/>
+							<object name="playerName[n]" type="text" style="ModernLabelText" size="0 0 16% 100%"/>
+							<object name="playerColorPicker[n]" type="dropdown" style="ModernDropDown" size="16%+5 2 20%+5 30" tooltip_style="onscreenToolTip">
+								<translatableAttribute id="tooltip">Pick Color.</translatableAttribute>
+							</object>
 							<object name="playerAssignment[n]" type="dropdown" style="ModernDropDown" size="22%+5 2 50%+35 30" tooltip_style="onscreenToolTip">
 								<translatableAttribute id="tooltip">Select player.</translatableAttribute>
 							</object>
@@ -152,7 +158,7 @@
 					tooltip_style="onscreenToolTip">
 					<translatableAttribute id="tooltip">Select a map to play on.</translatableAttribute>
 					<action on="SelectionChange">
-						if (this.list_data[this.selected]) 
+						if (this.list_data[this.selected])
 							selectMap(this.list_data[this.selected]);
 					</action>
 				</object>
@@ -179,7 +185,7 @@
 
 			<!-- Map Description -->
 			<object size="100%-425 529 100%-25 100%-60">
-				<object name="mapInfoName" type="text" style="ModernLeftLabelText" size="0 0 100%-120 30"/> 
+				<object name="mapInfoName" type="text" style="ModernLeftLabelText" size="0 0 100%-120 30"/>
 				<object type="image" sprite="ModernDarkBoxGold" size="0 30 100% 100%">
 					<object name="mapInfoDescription" type="text" style="MapDescription" size="0 0 100% 100%"/>
 				</object>
