Index: binaries/data/mods/public/gui/session/session.js =================================================================== --- binaries/data/mods/public/gui/session/session.js +++ binaries/data/mods/public/gui/session/session.js @@ -1136,23 +1136,31 @@ function getAllyStatTooltip(resource) { let playersState = GetSimState().players; - let ret = ""; + let tooltip = []; for (let player in playersState) if (player != 0 && - player != g_ViewedPlayer && - g_Players[player].state != "defeated" && - (g_IsObserver || - playersState[g_ViewedPlayer].hasSharedLos && - g_Players[player].isMutualAlly[g_ViewedPlayer])) - ret += "\n" + sprintf(translate("%(playername)s: %(statValue)s"), { - "playername": colorizePlayernameHelper("■", player) + " " + g_Players[player].name, - "statValue": resource == "pop" ? - sprintf(translate("%(popCount)s/%(popLimit)s/%(popMax)s"), playersState[player]) : - Math.round(playersState[player].resourceCounts[resource]) + player != g_ViewedPlayer && + g_Players[player].state != "defeated" && + (g_IsObserver || + playersState[g_ViewedPlayer].hasSharedLos && + g_Players[player].isMutualAlly[g_ViewedPlayer])) + { + let statValue = resource == "pop" ? + sprintf(translate("%(popCount)s/%(popLimit)s/%(popMax)s"), playersState[player]) : + Math.round(playersState[player].resourceCounts[resource]); + tooltip.push({ + "playercolor": colorizePlayernameHelper("■", player), + "text": g_Players[player].name + ": " + statValue, + "value": resource == "pop" ? playersState[player].popCount : statValue }); + } - return ret; + return "\n" + tooltip.sort((a,b) => { + if (a.value > b.value) return -1; + if (a.value < b.value) return +1; + return 0; + }).map(stat => stat.playercolor + " " + stat.text).join("\n"); } function updatePlayerDisplay()