Ticket #686: summary_screen_better_lobby_reporting.diff

File summary_screen_better_lobby_reporting.diff, 132.5 KB (added by sanderd17, 10 years ago)
  • binaries/data/mods/public/gui/session/session.js

     
    777777{
    778778    if (!Engine.HasXmppClient())
    779779        return;
     780    // units
     781    unitsClasses = [
     782        "total",
     783        "Infantry",
     784        "Worker",
     785        "Female",
     786        "Cavalry",
     787        "Champion",
     788        "Hero",
     789        "Ship"
     790    ];
     791    unitsCountersTypes = [
     792        "unitsTrained",
     793        "unitsLost",
     794        "enemyUnitsKilled"
     795    ];
     796    // buildings
     797    buildingsClasses = [
     798        "total",
     799        "CivCentre",
     800        "House",
     801        "Economic",
     802        "Outpost",
     803        "Military",
     804        "Fortress",
     805        "Wonder"
     806    ];
     807    buildingsCountersTypes = [
     808        "buildingsConstructed",
     809        "buildingsLost",
     810        "enemyBuildingsDestroyed"
     811    ];
     812    // resources
     813    resourcesTypes = [
     814        "wood",
     815        "food",
     816        "stone",
     817        "metal"
     818    ];
     819    resourcesCounterTypes = [
     820        "resourcesGathered",
     821        "resourcesUsed",
     822        "resourcesSold",
     823        "resourcesBought"
     824    ];
     825   
    780826
    781     // Resources gathered and used
    782     var playerFoodGatheredString = "";
    783     var playerWoodGatheredString  = "";
    784     var playerStoneGatheredString = "";
    785     var playerMetalGatheredString = "";
    786     var playerFoodUsedString = "";
    787     var playerWoodUsedString  = "";
    788     var playerStoneUsedString = "";
    789     var playerMetalUsedString = "";
    790     // Resources exchanged
    791     var playerFoodBoughtString = "";
    792     var playerWoodBoughtString = "";
    793     var playerStoneBoughtString = "";
    794     var playerMetalBoughtString = "";
    795     var playerFoodSoldString = "";
    796     var playerWoodSoldString = "";
    797     var playerStoneSoldString = "";
    798     var playerMetalSoldString = "";
    799     var playerTradeIncomeString = "";
     827    var playerStatistics = { };
     828   
    800829    // Unit Stats
    801     var playerUnitsLostString = "";
    802     var playerUnitsTrainedString = "";
    803     var playerEnemyUnitsKilledString = "";
     830    for each (var unitCounterType in unitsCountersTypes)
     831    {
     832        if (!playerStatistics[unitCounterType])
     833            playerStatistics[unitCounterType] = { };
     834        for each (var unitsClass in unitsClasses)
     835            playerStatistics[unitCounterType][unitsClass] = "";
     836    }
     837           
     838    playerStatistics.unitsLostValue = "";
     839    playerStatistics.unitsKilledValue = "";
    804840    // Building stats
    805     var playerBuildingsConstructedString = "";
    806     var playerBuildingsLostString = "";
    807     var playerEnemyBuildingsDestroyedString = "";
    808     var playerCivCentersBuiltString = "";
    809     var playerEnemyCivCentersDestroyedString = "";
     841    for each (var buildingCounterType in buildingsCountersTypes)
     842    {
     843        if (!playerStatistics[buildingCounterType])
     844            playerStatistics[buildingCounterType] = { };
     845        for each (var buildingsClass in buildingsClasses)
     846            playerStatistics[buildingCounterType][buildingsClass] = "";
     847    }
     848           
     849    playerStatistics.buildingsLostValue = "";
     850    playerStatistics.enemyBuildingsDestroyedValue = "";
     851    // Resources
     852    for each (var resourcesCounterType in resourcesCounterTypes)
     853    {
     854        if (!playerStatistics[resourcesCounterType])
     855            playerStatistics[resourcesCounterType] = { };
     856        for each (var resourcesType in resourcesTypes)
     857            playerStatistics[resourcesCounterType][resourcesType] = "";
     858    }
     859    playerStatistics.resourcesGathered.vegetarianFood = "";
     860           
     861    playerStatistics.tradeIncome = "";
    810862    // Tribute
    811     var playerTributeSentString = "";
    812     var playerTributeReceivedString = "";
     863    playerStatistics.tributesSent = "";
     864    playerStatistics.tributesReceived = "";
    813865    // Various
     866    playerStatistics.treasuresCollected = "";
     867    playerStatistics.feminisation = "";
     868    playerStatistics.percentMapExplored = "";
    814869    var mapName = Engine.GetMapSettings().Name;
    815     var playerStatesString = "";
    816     var playerCivsString = "";
    817     var playerPercentMapExploredString = "";
    818     var playerTreasuresCollectedString = "";
     870    var playerStates = "";
     871    var playerCivs = "";
    819872
    820873    // Serialize the statistics for each player into a comma-separated list.
    821874    for each (var player in extendedSimState.players)
    822875    {
    823         playerStatesString += player.state + ",";
    824         playerCivsString += player.civ + ",";
    825         playerFoodGatheredString += player.statistics.resourcesGathered.food + ",";
    826         playerWoodGatheredString += player.statistics.resourcesGathered.wood + ",";
    827         playerStoneGatheredString += player.statistics.resourcesGathered.stone + ",";
    828         playerMetalGatheredString += player.statistics.resourcesGathered.metal + ",";
    829         playerFoodUsedString += player.statistics.resourcesUsed.food + ",";
    830         playerWoodUsedString += player.statistics.resourcesUsed.wood + ",";
    831         playerStoneUsedString += player.statistics.resourcesUsed.stone + ",";
    832         playerMetalUsedString += player.statistics.resourcesUsed.metal + ",";
    833         playerUnitsLostString += player.statistics.unitsLost + ",";
    834         playerUnitsTrainedString += player.statistics.unitsTrained + ",";
    835         playerEnemyUnitsKilledString += player.statistics.enemyUnitsKilled + ",";
    836         playerBuildingsConstructedString += player.statistics.buildingsConstructed + ",";
    837         playerBuildingsLostString += player.statistics.buildingsLost + ",";
    838         playerEnemyBuildingsDestroyedString += player.statistics.enemyBuildingsDestroyed + ",";
    839         playerFoodBoughtString += player.statistics.resourcesBought.food + ",";
    840         playerWoodBoughtString += player.statistics.resourcesBought.wood + ",";
    841         playerStoneBoughtString += player.statistics.resourcesBought.stone + ",";
    842         playerMetalBoughtString += player.statistics.resourcesBought.metal + ",";
    843         playerFoodSoldString += player.statistics.resourcesSold.food + ",";
    844         playerWoodSoldString += player.statistics.resourcesSold.wood + ",";
    845         playerStoneSoldString += player.statistics.resourcesSold.stone + ",";
    846         playerMetalSoldString += player.statistics.resourcesSold.metal + ",";
    847         playerTributeSentString += player.statistics.tributesSent + ",";
    848         playerTributeReceivedString += player.statistics.tributesReceived + ",";
    849         playerPercentMapExploredString += player.statistics.precentMapExplored = ",";
    850         playerCivCentersBuiltString += player.statistics.civCentresBuilt + ",";
    851         playerEnemyCivCentersDestroyedString += player.statistics.enemyCivCentresDestroyed + ",";
    852         playerTreasuresCollectedString += player.statistics.treasuresCollected + ",";
    853         playerTradeIncomeString += player.statistics.tradeIncome + ",";
     876        playerStates += player.state + ",";
     877        playerCivs += player.civ + ",";
     878        for each (var resourcesCounterType in resourcesCounterTypes)
     879            for each (var resourcesType in resourcesTypes)
     880                playerStatistics[resourcesCounterType][resourcesType] += player.statistics[resourcesCounterType][resourcesType] + ",";
     881        playerStatistics.resourcesGathered.vegetarianFood += player.statistics.resourcesGathered.vegetarianFood + ",";
     882               
     883        for each (var unitCounterType in unitsCountersTypes)
     884            for each (var unitsClass in unitsClasses)
     885                playerStatistics[unitCounterType][unitsClass] += player.statistics[unitCounterType][unitsClass] + ",";
     886               
     887        for each (var buildingCounterType in buildingsCountersTypes)
     888            for each (var buildingsClass in buildingsClasses)
     889                playerStatistics[buildingCounterType][buildingsClass] += player.statistics[buildingCounterType][buildingsClass] + ",";
     890               
     891        playerStatistics.tradeIncome += player.statistics.tradeIncome + ",";
     892        playerStatistics.tributesSent += player.statistics.tributesSent + ",";
     893        playerStatistics.tributesReceived += player.statistics.tributesReceived + ",";
     894        playerStatistics.percentMapExplored += player.statistics.percentMapExplored + ",";
     895        playerStatistics.treasuresCollected += player.statistics.treasuresCollected + ",";
    854896    }
    855897
    856898    // Send the report with serialized data
    857     Engine.SendGameReport({
    858             "timeElapsed" : extendedSimState.timeElapsed,
    859             "playerStates" : playerStatesString,
    860             "playerID": Engine.GetPlayerID(),
    861             "matchID": g_MatchID,
    862             "civs" : playerCivsString,
    863             "mapName" : mapName,
    864             "foodGathered": playerFoodGatheredString,
    865             "woodGathered": playerWoodGatheredString,
    866             "stoneGathered": playerStoneGatheredString,
    867             "metalGathered": playerMetalGatheredString,
    868             "foodUsed": playerFoodUsedString,
    869             "woodUsed": playerWoodUsedString,
    870             "stoneUsed": playerStoneUsedString,
    871             "metalUsed": playerMetalUsedString,
    872             "unitsLost": playerUnitsLostString,
    873             "unitsTrained": playerUnitsTrainedString,
    874             "enemyUnitsKilled": playerEnemyUnitsKilledString,
    875             "buildingsLost": playerBuildingsLostString,
    876             "buildingsConstructed": playerBuildingsConstructedString,
    877             "enemyBuildingsDestroyed": playerEnemyBuildingsDestroyedString,
    878             "foodBought": playerFoodBoughtString,
    879             "woodBought": playerWoodBoughtString,
    880             "stoneBought": playerStoneBoughtString,
    881             "metalBought": playerMetalBoughtString,
    882             "foodSold": playerFoodSoldString,
    883             "woodSold": playerWoodSoldString,
    884             "stoneSold": playerStoneSoldString,
    885             "metalSold": playerMetalSoldString,
    886             "tributeSent": playerTributeSentString,
    887             "tributeReceived": playerTributeReceivedString,
    888             "precentMapExplored": playerPercentMapExploredString,
    889             "civCentersBuilt": playerCivCentersBuiltString,
    890             "enemyCivCentersDestroyed": playerEnemyCivCentersDestroyedString,
    891             "treasuresCollected": playerTreasuresCollectedString,
    892             "tradeIncome": playerTradeIncomeString
    893         });
     899    var reportObject = { };
     900    reportObject.timeElapsed = extendedSimState.timeElapsed;
     901    reportObject.playerStates = playerStates;
     902    reportObject.playerID = Engine.GetPlayerID();
     903    reportObject.matchID = g_MatchID;
     904    reportObject.civs = playerCivs;
     905    reportObject.mapName = mapName;
     906    for each (var rct in resourcesCounterTypes)
     907    {
     908        for each (var rt in resourcesTypes)
     909            reportObject[rt+rct.substr(9)] = playerStatistics[rct][rt];
     910            // eg. rt = food rct.substr = Gathered rct = resourcesGathered
     911    }
     912    reportObject.vegetarianFoodGathered = playerStatistics.resourcesGathered.vegetarianFood;
     913    for each (var type in unitsClasses)
     914    {
     915        // eg. type = Infantry (type.substr(0,1)).toLowerCase()+type.substr(1) = infantry
     916        reportObject[(type.substr(0,1)).toLowerCase()+type.substr(1)+"UnitsTrained"] = playerStatistics.unitsTrained[type];
     917        reportObject[(type.substr(0,1)).toLowerCase()+type.substr(1)+"UnitsLost"] = playerStatistics.unitsLost[type];
     918        reportObject["enemy"+type+"UnitsKilled"] = playerStatistics.enemyUnitsKilled[type];
     919    }
     920    for each (var type in buildingsClasses)
     921    {
     922        reportObject[(type.substr(0,1)).toLowerCase()+type.substr(1)+"BuildingsConstructed"] = playerStatistics.buildingsConstructed[type];
     923        reportObject[(type.substr(0,1)).toLowerCase()+type.substr(1)+"BuildingsLost"] = playerStatistics.buildingsLost[type];
     924        reportObject["enemy"+type+"BuildingsDestroyed"] = playerStatistics.enemyBuildingsDestroyed[type];
     925    }   
     926    reportObject.tributesSent = playerStatistics.tributesSent;
     927    reportObject.tributesReceived = playerStatistics.tributesReceived;
     928    reportObject.precentMapExplored = playerStatistics.percentMapExplored;
     929    reportObject.treasuresCollected = playerStatistics.treasuresCollected;
     930    reportObject.tradeIncome = playerStatistics.tradeIncome;
     931   
     932    Engine.SendGameReport(reportObject);
    894933}
  • binaries/data/mods/public/gui/summary/summary.js

     
    11// Max player slots for any map (should read from config)
    22const MAX_SLOTS = 8;
    33
    4 var panelNames = [ 'scorePanel', 'unitsBuildingsPanel', 'conquestPanel', 'resourcesPanel', 'marketPanel' ];
    5 var panelButtonNames = [ 'scorePanelButton', 'unitsBuildingsPanelButton', 'conquestPanelButton', 'resourcesPanelButton', 'marketPanelButton' ];
    6 
    74/**
    85 * Select active panel
    96 * @param panelNumber Number of panel, which should get active state (integer)
     
    107 */
    118function selectPanel(panelNumber)
    129{
     10    var panelNames = [ 'scorePanel', 'buildingsPanel', 'unitsPanel', 'resourcesPanel', 'marketPanel', 'miscPanel' ];
     11   
     12    function adjustTabDividers(tabSize)
     13    {
     14        var leftSpacer = getGUIObjectByName("tabDividerLeft");
     15        var rightSpacer = getGUIObjectByName("tabDividerRight");
     16        leftSpacer.size = "20 " + leftSpacer.size.top + " " + (tabSize.left + 2) + " " + leftSpacer.size.bottom;
     17        rightSpacer.size = (tabSize.right - 2) + " " + rightSpacer.size.top + " 100%-20 " + rightSpacer.size.bottom;
     18    }
     19   
    1320    for (var i = 0; i < panelNames.length; i++)
    1421    {
    1522        if (i != panelNumber)
    1623        {
    1724            getGUIObjectByName(panelNames[i]).hidden = true;
    18             getGUIObjectByName(panelButtonNames[i]).sprite = "BackgroundTab";
     25            getGUIObjectByName(panelNames[i] + 'Button').sprite = "BackgroundTab";
    1926        }
    2027        else
    2128        {
    2229            getGUIObjectByName(panelNames[i]).hidden = false;
    23             getGUIObjectByName(panelButtonNames[i]).sprite = "ForegroundTab";
    24             adjustTabDividers(getGUIObjectByName(panelButtonNames[i]).size);
     30            getGUIObjectByName(panelNames[i] + 'Button').sprite = "ForegroundTab";
     31            adjustTabDividers(getGUIObjectByName(panelNames[i] + 'Button').size);
    2532        }
    2633    }
    2734}
    2835
    29 function adjustTabDividers(tabSize)
     36function init(data)
    3037{
    31     var leftSpacer = getGUIObjectByName("tabDividerLeft");
    32     var rightSpacer = getGUIObjectByName("tabDividerRight");
    33     leftSpacer.size = "20 " + leftSpacer.size.top + " " + (tabSize.left + 2) + " " + leftSpacer.size.bottom;
    34     rightSpacer.size = (tabSize.right - 2) + " " + rightSpacer.size.top + " 100%-20 " + rightSpacer.size.bottom;
    35 }
     38    // LOCAL CONSTS, VARIABLES & FUNCTIONS
     39    // const for filtering long collective headings
     40    const LONG_HEADING_WIDTH = 250;
     41    // number of panels
     42    const PANELS_COUNT = 6;
     43    // alpha for player box
     44    const PLAYER_BOX_ALPHA = " 32";
     45    // alpha for player colour box
     46    const PLAYER_COLOUR_BOX_ALPHA = " 255";
     47    // yStart value for spaceing teams boxes (and noTeamsBox)
     48    const TEAMS_BOX_Y_START = 65;
     49    // vertical size of player box
     50    const PLAYER_BOX_Y_SIZE = 30;
     51    // gap between players boxes
     52    const PLAYER_BOX_GAP = 2;
     53   
     54    // colours used for units and buildings
     55    const TRAINED_COLOR = '[color="201 255 200"]';
     56    const LOST_COLOR = '[color="255 213 213"]';
     57    const KILLED_COLOR = '[color="196 198 255"]';
    3658
    37 function init(data)
    38 {
     59    // colours used for gathered and traded resources
     60    const INCOME_COLOR = '[color="201 255 200"]';
     61    const OUTCOME_COLOR = '[color="255 213 213"]';
     62   
     63    const BUILDINGS_TYPES = [ "total", "House", "Economic", "Outpost", "Military", "Fortress", "CivCentre", "Wonder" ];
     64    const UNITS_TYPES = [ "total", "Infantry", "Worker", "Cavalry", "Champion", "Hero", "Ship" ];
     65    const RESOURCES_TYPES = [ "food", "wood", "stone", "metal" ];
     66   
     67    var panels = {
     68        "score": {      // score panel
     69            "headings": {   // headings on score panel
     70                "playerName0Heading":      { "yStart": 26, "width": 200 },
     71                "economyScoreHeading":     { "yStart": 16, "width": 100 },
     72                "militaryScoreHeading":    { "yStart": 16, "width": 100 },
     73                "explorationScoreHeading": { "yStart": 16, "width": 100 },
     74                "totalScoreHeading":       { "yStart": 16, "width": 100 }
     75            },
     76            "counters": {   // counters on score panel
     77                "economyScore":     {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     78                "militaryScore":    {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     79                "explorationScore": {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     80                "totalScore":       {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] }
     81            }
     82        },
     83        "buildings": {      // buildings panel
     84            "headings": {   // headings on buildings panel
     85                "playerName1Heading":        {"yStart": 26, "width": 200 },
     86                "buildingsHeading":          {"yStart": 16, "width": (85 * 7 + 105) },  // width = 735
     87                "totalBuildingsHeading":     {"yStart": 34, "width": 105 },
     88                "houseBuildingsHeading":     {"yStart": 34, "width": 85 },
     89                "economicBuildingsHeading":  {"yStart": 34, "width": 85 },
     90                "outpostBuildingsHeading":   {"yStart": 34, "width": 85 },
     91                "militaryBuildingsHeading":  {"yStart": 34, "width": 85 },
     92                "fortressBuildingsHeading":  {"yStart": 34, "width": 85 },
     93                "civCentreBuildingsHeading": {"yStart": 34, "width": 85 },
     94                "wonderBuildingsHeading":    {"yStart": 34, "width": 85 }
     95            },
     96            "counters": {   // counters on buildings panel
     97                "totalBuildings":     {"width": 105, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     98                "houseBuildings":     {"width": 85,  "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     99                "economicBuildings":  {"width": 85,  "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     100                "outpostBuildings":   {"width": 85,  "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     101                "militaryBuildings":  {"width": 85,  "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     102                "fortressBuildings":  {"width": 85,  "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     103                "civCentreBuildings": {"width": 85,  "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     104                "wonderBuildings":    {"width": 85,  "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] }
     105            }
     106        },
     107        "units": {      // units panel
     108            "headings": {   // headings on units panel
     109                "playerName2Heading":   {"yStart": 26, "width": 200 },
     110                "unitsHeading":         {"yStart": 16, "width": (100 * 6 + 120) },  // width = 720
     111                "totalUnitsHeading":    {"yStart": 34, "width": 120 },
     112                "infantryUnitsHeading": {"yStart": 34, "width": 100 },
     113                "workerUnitsHeading":   {"yStart": 34, "width": 100 },
     114                "cavalryUnitsHeading":  {"yStart": 34, "width": 100 },
     115                "championUnitsHeading": {"yStart": 34, "width": 100 },
     116                "heroesUnitsHeading":   {"yStart": 34, "width": 100 },
     117                "navyUnitsHeading":     {"yStart": 34, "width": 100 }
     118            },
     119            "counters": {   // counters on units panel
     120                "totalUnits":    {"width": 120, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     121                "infantryUnits": {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     122                "workerUnits":   {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     123                "cavalryUnits":  {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     124                "championUnits": {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     125                "heroesUnits":   {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     126                "navyUnits":     {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] }
     127            }
     128        },
     129        "resources": {      // resources panel
     130            "headings": {   // headings on resources panel
     131                "playerName3Heading":        {"yStart": 26, "width": 200 },
     132                "resourceHeading":           {"yStart": 16, "width": (100 * 4 + 110) },//width = 510
     133                "foodGatheredHeading":       {"yStart": 34, "width": 100 },
     134                "woodGatheredHeading":       {"yStart": 34, "width": 100 },
     135                "stoneGatheredHeading":      {"yStart": 34, "width": 100 },
     136                "metalGatheredHeading":      {"yStart": 34, "width": 100 },
     137                "totalGatheredHeading":      {"yStart": 34, "width": 110 },
     138                "treasuresCollectedHeading": {"yStart": 16, "width": 100 },
     139                "resourcesTributedHeading":  {"yStart": 16, "width": 121 }
     140            },
     141            "counters": {   // counters on resources panel
     142                "foodGathered":       {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     143                "woodGathered":       {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     144                "stoneGathered":      {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     145                "metalGathered":      {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     146                "totalGathered":      {"width": 110, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     147                "treasuresCollected": {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     148                "resourcesTributed":  {"width": 121, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] }
     149            }
     150        },
     151        "market": {     // market panel
     152            "headings": {   // headings on market panel
     153                "playerName4Heading":      {"yStart": 26, "width": 200 },
     154                "exchangedFoodHeading":    {"yStart": 16, "width": 100 },
     155                "exchangedWoodHeading":    {"yStart": 16, "width": 100 },
     156                "exchangedStoneHeading":   {"yStart": 16, "width": 100 },
     157                "exchangedMetalHeading":   {"yStart": 16, "width": 100 },
     158                "barterEfficiencyHeading": {"yStart": 16, "width": 100 },
     159                "tradeIncomeHeading":      {"yStart": 16, "width": 100 }
     160            },
     161            "counters": {   // counters on market panel
     162                "exchangedFood":    {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     163                "exchangedWood":    {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     164                "exchangedStone":   {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     165                "exchangedMetal":   {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     166                "barterEfficiency": {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     167                "tradeIncome":      {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] }
     168            }
     169        },
     170        "miscelanous": {    // miscelanous panel
     171            "headings": {   // headings on miscelanous panel
     172                "playerName5Heading":     {"yStart": 26, "width": 200 },
     173                "vegetarianRatioHeading": {"yStart": 16, "width": 100 },
     174                "feminisationHeading":    {"yStart": 26, "width": 100 },
     175                "killDeathRatioHeading":  {"yStart": 16, "width": 100 },
     176                "mapExplorationHeading":  {"yStart": 16, "width": 100 }
     177            },
     178            "counters": {   // counters on miscelanous panel
     179                "vegetarianRatio": {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     180                "feminisation":    {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     181                "killDeathRatio":  {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] },
     182                "mapExploration":  {"width": 100, "objects": [ ], "teamsScores": [ ], "teamsScoresCaption": [ ] }
     183            }
     184        }
     185    };
     186   
     187    function alignHeaders(headings)
     188    {       
     189        left = 50;
     190        for (var h in headings)
     191        {
     192            getGUIObjectByName(h).size = left + " " + headings[h].yStart + " " + (left + headings[h].width) + " 100%";
     193            if (headings[h].width < LONG_HEADING_WIDTH)
     194                left += headings[h].width;         
     195        }
     196    }
     197   
     198    function alignCounters(counters, player)
     199    {
     200        left = 240;
     201        for each (var counter in counters)
     202        {
     203            counter.objects[player].size = left + " 2 " + (left + counter.width) + " 100%";
     204            left += counter.width;
     205        }
     206       
     207        return left;
     208    }
     209   
     210    // caption counters functions
     211    function captionEconomyScore()
     212    {
     213        var total = 0;
     214        for each (var res in playerState.statistics.resourcesGathered)
     215            total += res;
     216           
     217        return Math.round(total / 10);
     218    }
     219   
     220    function captionBuildings(object, type)
     221    {       
     222        object.caption = TRAINED_COLOR + playerState.statistics.buildingsConstructed[type] + '[/color] / ' +
     223                LOST_COLOR + playerState.statistics.buildingsLost[type] + '[/color] / ' +
     224                KILLED_COLOR + playerState.statistics.enemyBuildingsDestroyed[type] + '[/color]';
     225    }
     226   
     227    function captionUnits(object, type)
     228    {
     229        object.caption = TRAINED_COLOR + playerState.statistics.unitsTrained[type] + '[/color] / ' +
     230                LOST_COLOR + playerState.statistics.unitsLost[type] + '[/color] / ' +
     231                KILLED_COLOR + playerState.statistics.enemyUnitsKilled[type] + '[/color]';
     232    }
     233   
     234    function captionResourcesGathered(object, type)
     235    {
     236        object.caption = INCOME_COLOR + playerState.statistics.resourcesGathered[type] + '[/color] / ' +
     237                OUTCOME_COLOR + (playerState.statistics.resourcesUsed[type] - playerState.statistics.resourcesSold[type]) + '[/color]';
     238    }
     239   
     240    function captionTotalResourcesGathered()
     241    {
     242        var totalGathered = 0;
     243        var totalUsed = 0;
     244       
     245        for each (var type in RESOURCES_TYPES)
     246        {
     247            totalGathered += playerState.statistics.resourcesGathered[type];
     248            totalUsed += playerState.statistics.resourcesUsed[type] - playerState.statistics.resourcesSold[type];
     249        }
     250           
     251        return INCOME_COLOR + totalGathered + '[/color] / ' + OUTCOME_COLOR + totalUsed + '[/color]';
     252    }
     253   
     254    function captionResourcesTributed()
     255    {
     256        return INCOME_COLOR + playerState.statistics.tributesSent + "[/color] / " + OUTCOME_COLOR + playerState.statistics.tributesReceived + "[/color]";
     257    }
     258   
     259    function captionResourcesExchanged(object, type)
     260    {   
     261        object.caption = INCOME_COLOR + '+' + playerState.statistics.resourcesBought[type] + '[/color] ' +
     262                OUTCOME_COLOR + '-' + playerState.statistics.resourcesSold[type] + '[/color]';     
     263    }
     264   
     265    function captionBarterEfficiency()
     266    {
     267        var totalBought = 0;
     268        for each (var boughtAmount in playerState.statistics.resourcesBought)
     269            totalBought += boughtAmount;
     270        var totalSold = 0;
     271        for each (var soldAmount in playerState.statistics.resourcesSold)
     272            totalSold += soldAmount;
     273           
     274        return Math.floor(totalSold > 0 ? (totalBought / totalSold) * 100 : 0) + "%";
     275    }
     276   
     277    function captionVegetarianRatio()
     278    {
     279        if (playerState.statistics.resourcesGathered.vegetarianFood && playerState.statistics.resourcesGathered.food)
     280            return Math.floor((playerState.statistics.resourcesGathered.vegetarianFood / playerState.statistics.resourcesGathered.food) * 100) + "%";
     281        else
     282            return 0 + "%";
     283    }
     284   
     285    function captionFeminisation()
     286    {
     287        if (playerState.statistics.unitsTrained.Worker && playerState.statistics.unitsTrained.Female)
     288            return Math.floor((playerState.statistics.unitsTrained.Female / playerState.statistics.unitsTrained.Worker) * 100) + "%";
     289        else
     290            return 0 + "%";
     291    }
     292   
     293    function captionKillDeathRatio()
     294    {
     295        if (!playerState.statistics.enemyUnitsKilled.total)
     296            return "0.00";
     297        if (!playerState.statistics.unitsLost.total)    // and enemyUnitsKilled.total > 0
     298            return "\u221E"; // infinity symbol
     299        return Math.round((playerState.statistics.enemyUnitsKilled.total / playerState.statistics.unitsLost.total)*100)/100;
     300    }
     301   
     302    function sumTeamBuildings(counter, type)
     303    {       
     304        if (counter.teamsScores[playerState.team] == 0)
     305        {           
     306            counter.teamsScores[playerState.team] = { };
     307            counter.teamsScores[playerState.team].buildingsConstructed = 0;
     308            counter.teamsScores[playerState.team].buildingsLost = 0;
     309            counter.teamsScores[playerState.team].enemyBuildingsDestroyed = 0;
     310        }
     311
     312        counter.teamsScores[playerState.team].buildingsConstructed += playerState.statistics.buildingsConstructed[type];
     313        counter.teamsScores[playerState.team].buildingsLost += playerState.statistics.buildingsLost[type];
     314        counter.teamsScores[playerState.team].enemyBuildingsDestroyed += playerState.statistics.enemyBuildingsDestroyed[type];
     315       
     316        counter.teamsScoresCaption[playerState.team] = TRAINED_COLOR + counter.teamsScores[playerState.team].buildingsConstructed + '[/color] / ' +
     317            LOST_COLOR + counter.teamsScores[playerState.team].buildingsLost + '[/color] / ' +
     318            KILLED_COLOR + counter.teamsScores[playerState.team].enemyBuildingsDestroyed + '[/color]';
     319    }
     320   
     321    function sumTeamUnits(counter, type)
     322    {       
     323        if (counter.teamsScores[playerState.team] == 0)
     324        {
     325            counter.teamsScores[playerState.team] = { };
     326            counter.teamsScores[playerState.team].unitsTrained = 0;
     327            counter.teamsScores[playerState.team].unitsLost = 0;
     328            counter.teamsScores[playerState.team].enemyUnitsKilled = 0;
     329        }
     330
     331        counter.teamsScores[playerState.team].unitsTrained += playerState.statistics.unitsTrained[type];
     332        counter.teamsScores[playerState.team].unitsLost += playerState.statistics.unitsLost[type];
     333        counter.teamsScores[playerState.team].enemyUnitsKilled += playerState.statistics.enemyUnitsKilled[type];
     334       
     335        counter.teamsScoresCaption[playerState.team] = TRAINED_COLOR + counter.teamsScores[playerState.team].unitsTrained + '[/color] / ' +
     336            LOST_COLOR + counter.teamsScores[playerState.team].unitsLost + '[/color] / ' +
     337            KILLED_COLOR + counter.teamsScores[playerState.team].enemyUnitsKilled + '[/color]';
     338    }
     339   
     340    function sumResourcesGathered(counter, type)
     341    {       
     342        if (counter.teamsScores[playerState.team] == 0)
     343        {
     344            counter.teamsScores[playerState.team] = { };
     345            counter.teamsScores[playerState.team].resourcesGathered = 0;
     346            counter.teamsScores[playerState.team].resourcesUsed = 0;
     347        }
     348       
     349        counter.teamsScores[playerState.team].resourcesGathered += playerState.statistics.resourcesGathered[type];
     350        counter.teamsScores[playerState.team].resourcesUsed += playerState.statistics.resourcesUsed[type] - playerState.statistics.resourcesSold[type];
     351       
     352        counter.teamsScoresCaption[playerState.team] = INCOME_COLOR + counter.teamsScores[playerState.team].resourcesGathered + '[/color] / ' +
     353            OUTCOME_COLOR + counter.teamsScores[playerState.team].resourcesUsed + '[/color]';
     354    }
     355   
     356    function sumTotalResourcesGathered()
     357    {
     358        if (panels.resources.counters.totalGathered.teamsScores[playerState.team] == 0)
     359        {
     360            panels.resources.counters.totalGathered.teamsScores[playerState.team] = { };
     361            panels.resources.counters.totalGathered.teamsScores[playerState.team].resourcesGathered = 0;
     362            panels.resources.counters.totalGathered.teamsScores[playerState.team].resourcesUsed = 0;
     363        }
     364       
     365        for each (var type in RESOURCES_TYPES)
     366        {
     367            panels.resources.counters.totalGathered.teamsScores[playerState.team].resourcesGathered += playerState.statistics.resourcesGathered[type];
     368            panels.resources.counters.totalGathered.teamsScores[playerState.team].resourcesUsed +=
     369                playerState.statistics.resourcesUsed[type] - playerState.statistics.resourcesSold[type];
     370        }
     371       
     372        panels.resources.counters.totalGathered.teamsScoresCaption[playerState.team] =
     373            INCOME_COLOR + panels.resources.counters.totalGathered.teamsScores[playerState.team].resourcesGathered + '[/color] / ' +
     374            OUTCOME_COLOR + panels.resources.counters.totalGathered.teamsScores[playerState.team].resourcesUsed + '[/color]';
     375    }
     376   
     377    function sumResourcesTributed()
     378    {
     379        if (panels.resources.counters.resourcesTributed.teamsScores[playerState.team] == 0)
     380        {
     381            panels.resources.counters.resourcesTributed.teamsScores[playerState.team] = { };
     382            panels.resources.counters.resourcesTributed.teamsScores[playerState.team].tributesSent = 0;
     383            panels.resources.counters.resourcesTributed.teamsScores[playerState.team].tributesReceived = 0;
     384        }
     385       
     386        panels.resources.counters.resourcesTributed.teamsScores[playerState.team].tributesSent += playerState.statistics.tributesSent;
     387        panels.resources.counters.resourcesTributed.teamsScores[playerState.team].tributesReceived += playerState.statistics.tributesReceived;
     388       
     389        panels.resources.counters.resourcesTributed.teamsScoresCaption[playerState.team] =
     390            INCOME_COLOR + panels.resources.counters.resourcesTributed.teamsScores[playerState.team].tributesSent + "[/color] / " +
     391            OUTCOME_COLOR + panels.resources.counters.resourcesTributed.teamsScores[playerState.team].tributesReceived + "[/color]";
     392    }
     393   
     394    function sumResourcesExchanged(counter, type)
     395    {       
     396        if (counter.teamsScores[playerState.team] == 0)
     397        {
     398            counter.teamsScores[playerState.team] = { };
     399            counter.teamsScores[playerState.team].resourcesBought = 0;
     400            counter.teamsScores[playerState.team].resourcesSold = 0;
     401        }
     402       
     403        counter.teamsScores[playerState.team].resourcesBought += playerState.statistics.resourcesBought[type];
     404        counter.teamsScores[playerState.team].resourcesSold += playerState.statistics.resourcesSold[type];
     405       
     406        counter.teamsScoresCaption[playerState.team] =
     407            INCOME_COLOR + '+' + counter.teamsScores[playerState.team].resourcesBought + '[/color] ' +
     408            OUTCOME_COLOR + '-' + counter.teamsScores[playerState.team].resourcesSold + '[/color]';
     409    }
     410   
     411    function sumBarterEfficiency()
     412    {
     413        if (panels.market.counters.barterEfficiency.teamsScores[playerState.team] == 0)
     414        {
     415            panels.market.counters.barterEfficiency.teamsScores[playerState.team] = { };
     416            panels.market.counters.barterEfficiency.teamsScores[playerState.team].resourcesBought = 0;
     417            panels.market.counters.barterEfficiency.teamsScores[playerState.team].resourcesSold = 0;
     418        }
     419       
     420        for each (var boughtAmount in playerState.statistics.resourcesBought)
     421            panels.market.counters.barterEfficiency.teamsScores[playerState.team].resourcesBought += boughtAmount;
     422        for each (var soldAmount in playerState.statistics.resourcesSold)
     423            panels.market.counters.barterEfficiency.teamsScores[playerState.team].resourcesSold += soldAmount;
     424           
     425        panels.market.counters.barterEfficiency.teamsScoresCaption[playerState.team] =
     426            Math.floor(panels.market.counters.barterEfficiency.teamsScores[playerState.team].resourcesSold > 0 ?
     427            (panels.market.counters.barterEfficiency.teamsScores[playerState.team].resourcesBought /
     428             panels.market.counters.barterEfficiency.teamsScores[playerState.team].resourcesSold) * 100 : 0) + "%";
     429    }
     430   
     431    function sumVegetarianRatio()
     432    {
     433        if (panels.miscelanous.counters.vegetarianRatio.teamsScores[playerState.team] == 0)
     434        {
     435            panels.miscelanous.counters.vegetarianRatio.teamsScores[playerState.team] = { };
     436            panels.miscelanous.counters.vegetarianRatio.teamsScores[playerState.team].vegetarianFood = 0;
     437            panels.miscelanous.counters.vegetarianRatio.teamsScores[playerState.team].food = 0;
     438        }
     439       
     440        panels.miscelanous.counters.vegetarianRatio.teamsScores[playerState.team].vegetarianFood += playerState.statistics.resourcesGathered.vegetarianFood;
     441        panels.miscelanous.counters.vegetarianRatio.teamsScores[playerState.team].food += playerState.statistics.resourcesGathered.food;
     442       
     443        if (panels.miscelanous.counters.vegetarianRatio.teamsScores[playerState.team].food &&
     444            panels.miscelanous.counters.vegetarianRatio.teamsScores[playerState.team].vegetarianFood)
     445        {
     446            panels.miscelanous.counters.vegetarianRatio.teamsScoresCaption[playerState.team] =
     447                Math.floor((panels.miscelanous.counters.vegetarianRatio.teamsScores[playerState.team].vegetarianFood /
     448                       panels.miscelanous.counters.vegetarianRatio.teamsScores[playerState.team].food) * 100) + "%";
     449            return;
     450        }
     451        panels.miscelanous.counters.vegetarianRatio.teamsScoresCaption[playerState.team] = 0 + "%";
     452    }
     453   
     454    function sumFeminisation()
     455    {
     456        if (panels.miscelanous.counters.feminisation.teamsScores[playerState.team] == 0)
     457        {
     458            panels.miscelanous.counters.feminisation.teamsScores[playerState.team] = { };
     459            panels.miscelanous.counters.feminisation.teamsScores[playerState.team].femalesTrained = 0;
     460            panels.miscelanous.counters.feminisation.teamsScores[playerState.team].workersTrained = 0;
     461        }
     462       
     463        panels.miscelanous.counters.feminisation.teamsScores[playerState.team].femalesTrained += playerState.statistics.unitsTrained.Female;
     464        panels.miscelanous.counters.feminisation.teamsScores[playerState.team].workersTrained += playerState.statistics.unitsTrained.Worker;
     465       
     466        if (panels.miscelanous.counters.feminisation.teamsScores[playerState.team].femalesTrained &&
     467            panels.miscelanous.counters.feminisation.teamsScores[playerState.team].workersTrained)
     468        {
     469            panels.miscelanous.counters.feminisation.teamsScoresCaption[playerState.team] =
     470                Math.floor((panels.miscelanous.counters.feminisation.teamsScores[playerState.team].femalesTrained /
     471                        panels.miscelanous.counters.feminisation.teamsScores[playerState.team].workersTrained) * 100) + "%";
     472                return;
     473        }
     474        panels.miscelanous.counters.feminisation.teamsScoresCaption[playerState.team] = 0 + "%";
     475    }
     476   
     477    function sumKillDeathRatio()
     478    {
     479        if (panels.miscelanous.counters.killDeathRatio.teamsScores[playerState.team] == 0)
     480        {
     481            panels.miscelanous.counters.killDeathRatio.teamsScores[playerState.team] = { };
     482            panels.miscelanous.counters.killDeathRatio.teamsScores[playerState.team].enemyUnitsKilled = 0;
     483            panels.miscelanous.counters.killDeathRatio.teamsScores[playerState.team].unitsLost = 0;
     484        }
     485       
     486        panels.miscelanous.counters.killDeathRatio.teamsScores[playerState.team].enemyUnitsKilled += playerState.statistics.enemyUnitsKilled.total;
     487        panels.miscelanous.counters.killDeathRatio.teamsScores[playerState.team].unitsLost += playerState.statistics.unitsLost.total;
     488       
     489        if (!panels.miscelanous.counters.killDeathRatio.teamsScores[playerState.team].enemyUnitsKilled)
     490        {
     491            panels.miscelanous.counters.killDeathRatio.teamsScoresCaption[playerState.team] = "0.00";
     492            return;
     493        }
     494        if (!panels.miscelanous.counters.killDeathRatio.teamsScores[playerState.team].unitsLost)
     495        {
     496            panels.miscelanous.counters.killDeathRatio.teamsScoresCaption[playerState.team] = "\u221E"; // infinity symbol
     497            return;
     498        }
     499        panels.miscelanous.counters.killDeathRatio.teamsScoresCaption[playerState.team] =
     500            Math.round((panels.miscelanous.counters.killDeathRatio.teamsScores[playerState.team].enemyUnitsKilled /
     501                    panels.miscelanous.counters.killDeathRatio.teamsScores[playerState.team].unitsLost) * 100)/100;
     502    }
     503   
     504    // FUNCTION BODY
     505    // Load data
    39506    var civData = loadCivData();
     507    // Map
    40508    var mapSize = "Scenario";
    41509
    42510    getGUIObjectByName("timeElapsed").caption = "Time elapsed: " + timeToString(data.timeElapsed);
     
    61529    }
    62530
    63531    getGUIObjectByName("mapName").caption = data.mapSettings.Name + " - " + mapSize;
     532   
     533    // Panels
     534    // Align headers
     535    var left = 50;
     536    for each (var panel in panels)  // for all panels
     537        alignHeaders(panel.headings);
    64538
    65     // Space player boxes
    66     var boxSpacing = 32;
    67     for (var i = 0; i < panelNames.length; ++i)
     539    // TODO set maxPlayers as playerCounters.length
     540    var maxPlayers = data.playerStates.length - 1;
     541    var maxTeams = 0;
     542
     543    var teams = [ ];
     544    if (data.mapSettings.LockTeams) // teams ARE locked
    68545    {
    69         for (var j = 0; j < MAX_SLOTS; ++j)
     546        // count teams
     547        for(var t = 0; t < maxPlayers; ++t)
    70548        {
    71             var box = getGUIObjectByName("playerBox"+i+"["+j+"]");
    72             var boxSize = box.size;
    73             var h = boxSize.bottom - boxSize.top;
    74             boxSize.top = j * boxSpacing;
    75             boxSize.bottom = j * boxSpacing + h;
    76             box.size = boxSize;
     549            if (!teams[data.playerStates[t+1].team])
     550            {
     551                teams[data.playerStates[t+1].team] = 1;
     552                continue;
     553            }
     554            teams[data.playerStates[t+1].team]++;
    77555        }
     556       
     557        if (teams.length == maxPlayers)
     558            teams = false;  // Each player has his own team. Displaying teams makes no sense.
    78559    }
    79 
    80     // TODO set maxPlayers as playerCounters.length
    81     var maxPlayers = data.playerStates.length - 1;
    82 
    83     // Align headers
    84     var left = 50;
    85     var width = 100;
    86     var playerNameHeadingWidth = 200;
    87     // Special cased to make the (Sent / Received) part fit
    88     var tributesWidth = 121;
    89     getGUIObjectByName("playerName0Heading").size = left + " 26 " + (left + playerNameHeadingWidth) + " 100%"; left += playerNameHeadingWidth;
    90     getGUIObjectByName("economyScoreHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    91     getGUIObjectByName("militaryScoreHeading").size = left +  " 16 " + (left + width) + " 100%"; left += width;
    92     getGUIObjectByName("explorationScoreHeading").size = left +  " 16 " + (left + width) + " 100%"; left += width;
    93     getGUIObjectByName("totalScoreHeading").size = left +  " 16 " + (left + width) + " 100%"; left += width;
     560    else                // teams are NOT locked
     561        teams = false;
    94562   
    95     left = 50;
    96     getGUIObjectByName("playerName1Heading").size = left + " 26 " + (left + playerNameHeadingWidth) + " 100%"; left += playerNameHeadingWidth;
    97     getGUIObjectByName("unitsTrainedHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    98     getGUIObjectByName("unitsLostHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    99     getGUIObjectByName("enemyUnitsKilledHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    100     getGUIObjectByName("buildingsConstructedHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    101     getGUIObjectByName("buildingsLostHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    102     getGUIObjectByName("enemyBuildingsDestroyedHeading").size = left + " 6 " + (left + width) + " 100%"; left += width;
    103 
    104     left = 50;
    105     getGUIObjectByName("playerName2Heading").size = left + " 26 " + (left + playerNameHeadingWidth) + " 100%"; left += playerNameHeadingWidth;
    106     getGUIObjectByName("civCentresBuiltHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    107     getGUIObjectByName("enemyCivCentresDestroyedHeading").size = left +  " 6 " + (left + width) + " 100%"; left += width;
    108     getGUIObjectByName("mapExplorationHeading").size = left +  " 6 " + (left + width) + " 100%"; left += width;
    109 
    110     left = 50;
    111     getGUIObjectByName("playerName3Heading").size = left + " 26 " + (left + playerNameHeadingWidth) + " 100%"; left += playerNameHeadingWidth;
    112     getGUIObjectByName("resourceHeading").size = left + " 16 " + (left + width * 4) + " 100%";
    113     getGUIObjectByName("foodGatheredHeading").size = left + " 34 " + (left + width) + " 100%"; left += width;
    114     getGUIObjectByName("woodGatheredHeading").size = left + " 34 " + (left + width) + " 100%"; left += width;
    115     getGUIObjectByName("stoneGatheredHeading").size = left + " 34 " + (left + width) + " 100%"; left += width;
    116     getGUIObjectByName("metalGatheredHeading").size = left + " 34 " + (left + width) + " 100%"; left += width;
    117     getGUIObjectByName("vegetarianRatioHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    118     getGUIObjectByName("treasuresCollectedHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    119     getGUIObjectByName("resourcesTributedHeading").size = left + " 16 " + (left + tributesWidth) + " 100%"; left += tributesWidth;
    120 
    121     left = 50;
    122     getGUIObjectByName("playerName4Heading").size = left + " 26 " + (left + playerNameHeadingWidth) + " 100%"; left += playerNameHeadingWidth;
    123     getGUIObjectByName("exchangedFoodHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    124     getGUIObjectByName("exchangedWoodHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    125     getGUIObjectByName("exchangedStoneHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    126     getGUIObjectByName("exchangedMetalHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    127     getGUIObjectByName("barterEfficiencyHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    128     getGUIObjectByName("tradeIncomeHeading").size = left + " 16 " + (left + width) + " 100%"; left += width;
    129 
    130     // Show counters
    131     for (var i = 0; i < MAX_SLOTS; ++i)
     563    // Erase teams data if teams are not displayed
     564    if (!teams)
    132565    {
    133         if (i < maxPlayers)
     566        for(var p = 0; p < maxPlayers; ++p)
     567            data.playerStates[p+1].team = -1;
     568    }
     569   
     570    // Count players without team   (or all if teams are not displayed)
     571    var withoutTeam = maxPlayers;
     572    if (teams)
     573    {
     574        // count players without team   (or all if teams are not displayed)
     575        for (var i = 0; i < teams.length; ++i)
     576            withoutTeam -= teams[i];
     577       
     578        // Display teams boxes
     579        var p = 0;
     580        for each (var panel in panels)
    134581        {
    135             var playerState = data.playerStates[i+1];
    136 
    137             for (var k = 0; k < panelNames.length; ++k)
     582            var yStart = TEAMS_BOX_Y_START + withoutTeam * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP);
     583            for (var i = 0; i < teams.length; ++i)
    138584            {
    139                 var playerBox = getGUIObjectByName("playerBox"+k+"["+i+"]");
    140                 playerBox.hidden = false;
    141 
    142                 var colourString = "colour: "
    143                     + Math.floor(playerState.colour.r * 255) + " "
    144                     + Math.floor(playerState.colour.g * 255) + " "
    145                     + Math.floor(playerState.colour.b * 255);
    146                 playerBox.sprite = colourString + " 32";
    147                 var playerColourBox = getGUIObjectByName("playerColourBox"+k+"["+i+"]");
    148                 playerColourBox.sprite = colourString + " 255";
    149 
    150                 // Show the multiplayer name, e.g. "Foobar" rather than "Player 1".
    151                 // TODO: Perhaps show both the multiplayer and map-specific name?
    152                 var playerName = getGUIObjectByName("playerName"+k+"["+i+"]");
    153                 playerName.caption = data.players[i+1].name;
    154 
    155                 getGUIObjectByName("civIcon"+k+"["+i+"]").sprite = "stretched:"+civData[playerState.civ].Emblem;
    156                 getGUIObjectByName("civIcon"+k+"["+i+"]").tooltip = civData[playerState.civ].Name;
     585                var teamBox = getGUIObjectByName("teamBox"+p+"t"+i);
     586                teamBox.hidden = false;
     587                var teamBoxSize = teamBox.size;
     588                teamBoxSize.top = yStart;
     589                teamBox.size = teamBoxSize;
     590               
     591                yStart += 30 + teams[i] * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP) + 32;
     592               
     593                getGUIObjectByName("teamNameHeading"+p+"t"+i).caption = "Team "+(i+1);
     594               
     595                // Make place to store team scores
     596                for each (var counter in panel.counters)
     597                {
     598                    counter.teamsScores[i] = 0;
     599                    counter.teamsScoresCaption[i] = "0";
     600                }
    157601            }
     602           
     603            // If there are no players without team, hide "player name" heading
     604            if (!withoutTeam)
     605                getGUIObjectByName("playerName"+p+"Heading").caption = ""; 
     606           
     607            p++;
     608        }
     609    }
     610   
     611    if (withoutTeam)
     612    {
     613        // Show boxes for no teams
     614        for (var b = 0; b < PANELS_COUNT; ++b)
     615            getGUIObjectByName("noTeamsBox"+b).hidden = false;
     616    }
    158617
    159             var economyScore = getGUIObjectByName("economyScore["+i+"]");
    160             var militaryScore = getGUIObjectByName("militaryScore["+i+"]");
    161             var explorationScore = getGUIObjectByName("explorationScore["+i+"]");
    162             var totalScore = getGUIObjectByName("totalScore["+i+"]");
     618    var playerBoxesCounts = [ ];
     619    for (var i = 0; i < maxPlayers; ++i)
     620    {
     621        var tn = "";
     622        var playerState = data.playerStates[i+1];
     623       
     624        if (!playerBoxesCounts[playerState.team+1])
     625            playerBoxesCounts[playerState.team+1] = 1;
     626        else
     627            playerBoxesCounts[playerState.team+1] += 1;
    163628
    164             var unitsTrained = getGUIObjectByName("unitsTrained["+i+"]");
    165             var unitsLost = getGUIObjectByName("unitsLost["+i+"]");
    166             var enemyUnitsKilled = getGUIObjectByName("enemyUnitsKilled["+i+"]");
    167             var buildingsConstructed = getGUIObjectByName("buildingsConstructed["+i+"]");
    168             var buildingsLost = getGUIObjectByName("buildingsLost["+i+"]");
    169             var enemyBuildingsDestroyed = getGUIObjectByName("enemyBuildingsDestroyed["+i+"]");
     629        if (playerState.team != -1)
     630            tn = "t"+playerState.team+"p";
    170631
    171             var civCentresBuilt = getGUIObjectByName("civCentresBuilt["+i+"]");
    172             var enemyCivCentresDestroyed = getGUIObjectByName("enemyCivCentresDestroyed["+i+"]");
    173             var mapExploration = getGUIObjectByName("mapExploration["+i+"]");
    174 
    175             var foodGathered = getGUIObjectByName("foodGathered["+i+"]");
    176             var woodGathered = getGUIObjectByName("woodGathered["+i+"]");
    177             var stoneGathered = getGUIObjectByName("stoneGathered["+i+"]");
    178             var metalGathered = getGUIObjectByName("metalGathered["+i+"]");
    179             var vegetarianRatio = getGUIObjectByName("vegetarianRatio["+i+"]");
    180             var treasuresCollected = getGUIObjectByName("treasuresCollected["+i+"]");
    181             var resourcesTributed = getGUIObjectByName("resourcesTributed["+i+"]");
    182 
    183             var exchangedFood = getGUIObjectByName("exchangedFood["+i+"]");
    184             var exchangedWood = getGUIObjectByName("exchangedWood["+i+"]");
    185             var exchangedStone = getGUIObjectByName("exchangedStone["+i+"]");
    186             var exchangedMetal = getGUIObjectByName("exchangedMetal["+i+"]");
    187             var barterEfficiency = getGUIObjectByName("barterEfficiency["+i+"]");
    188             var tradeIncome = getGUIObjectByName("tradeIncome["+i+"]");
    189 
    190             // align counters
    191 
    192             left = 240;
    193             width = 100;
    194             economyScore.size = left + " 2 " + (left + width) + " 100%"; left += width;
    195             militaryScore.size = left + " 2 " + (left + width) + " 100%"; left += width;
    196             explorationScore.size = left + " 2 " + (left + width) + " 100%"; left += width;
    197             totalScore.size = left + " 2 " + (left + width) + " 100%"; left += width;
    198             var size = getGUIObjectByName("playerBox0["+i+"]").size;
    199             size.right = left + 10;
    200             getGUIObjectByName("playerBox0["+i+"]").size = size;
     632        var j = 0;
     633        for each (var panel in panels)
     634        {
     635            var playerIdentityString = tn+"["+(playerBoxesCounts[playerState.team+1]-1)+"]";
     636            // Display boxes for players
     637            var playerBox = getGUIObjectByName("playerBox"+j+playerIdentityString);
     638            playerBox.hidden = false;
    201639           
    202             left = 240;
    203             unitsTrained.size = left + " 2 " + (left + width) + " 100%"; left += width;
    204             unitsLost.size = left + " 2 " + (left + width) + " 100%"; left += width;
    205             enemyUnitsKilled.size = left + " 2 " + (left + width) + " 100%"; left += width;
    206             buildingsConstructed.size = left + " 2 " + (left + width) + " 100%"; left += width;
    207             buildingsLost.size = left + " 2 " + (left + width) + " 100%"; left += width;
    208             enemyBuildingsDestroyed.size = left + " 2 " + (left + width) + " 100%"; left += width;
    209             size = getGUIObjectByName("playerBox1["+i+"]").size;
    210             size.right = left + 10;
    211             getGUIObjectByName("playerBox1["+i+"]").size = size;
     640            var boxSize = playerBox.size;
     641            boxSize.top += (playerBoxesCounts[playerState.team+1] - 1) * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP);
     642            boxSize.bottom = boxSize.top + PLAYER_BOX_Y_SIZE;
     643            playerBox.size = boxSize;
     644           
     645            var colourString = "colour: "
     646                + Math.floor(playerState.colour.r * 255) + " "
     647                + Math.floor(playerState.colour.g * 255) + " "
     648                + Math.floor(playerState.colour.b * 255);
     649           
     650            playerBox.sprite = colourString + PLAYER_BOX_ALPHA;
     651           
     652            var playerColourBox = getGUIObjectByName("playerColourBox"+j+playerIdentityString);
     653            playerColourBox.sprite = colourString + PLAYER_COLOUR_BOX_ALPHA;
     654           
     655            // Show the multiplayer name, e.g. "Foobar" rather than "Player 1".
     656            // TODO: Perhaps show both the multiplayer and map-specific name?
     657            var playerName = getGUIObjectByName("playerName"+j+playerIdentityString);
     658            playerName.caption = data.players[i+1].name;
    212659
    213             left = 240;
    214             civCentresBuilt.size = left + " 2 " + (left + width) + " 100%"; left += width;
    215             enemyCivCentresDestroyed.size = left + " 2 " + (left + width) + " 100%"; left += width;
    216             mapExploration.size = left + " 2 " + (left + width) + " 100%"; left += width;
    217             size = getGUIObjectByName("playerBox2["+i+"]").size;
    218             size.right = left + 10;
    219             getGUIObjectByName("playerBox2["+i+"]").size = size;
    220 
    221             left = 240;
    222             foodGathered.size = left + " 2 " + (left + width) + " 100%"; left += width;
    223             woodGathered.size = left + " 2 " + (left + width) + " 100%"; left += width;
    224             stoneGathered.size = left + " 2 " + (left + width) + " 100%"; left += width;
    225             metalGathered.size = left + " 2 " + (left + width) + " 100%"; left += width;
    226             vegetarianRatio.size = left + " 2 " + (left + width) + " 100%"; left += width;
    227             treasuresCollected.size = left + " 2 " + (left + width) + " 100%"; left += width;
    228             resourcesTributed.size = left + " 2 " + (left + tributesWidth) + " 100%"; left += tributesWidth;
    229             size = getGUIObjectByName("playerBox3["+i+"]").size;
    230             size.right = left + 10;
    231             getGUIObjectByName("playerBox3["+i+"]").size = size;
    232 
    233             left = 240;
    234             exchangedFood.size = left + " 2 " + (left + width) + " 100%"; left += width;
    235             exchangedWood.size = left + " 2 " + (left + width) + " 100%"; left += width;
    236             exchangedStone.size = left + " 2 " + (left + width) + " 100%"; left += width;
    237             exchangedMetal.size = left + " 2 " + (left + width) + " 100%"; left += width;
    238             barterEfficiency.size = left + " 2 " + (left + width) + " 100%"; left += width;
    239             tradeIncome.size = left + " 2 " + (left + width) + " 100%"; left += width;
    240             size = getGUIObjectByName("playerBox4["+i+"]").size;
    241             size.right = left + 10;
    242             getGUIObjectByName("playerBox4["+i+"]").size = size;
    243 
    244             // display counters
    245             economyScore.caption = Math.round((playerState.statistics.resourcesGathered.food + playerState.statistics.resourcesGathered.wood +
    246                 playerState.statistics.resourcesGathered.stone + playerState.statistics.resourcesGathered.metal) / 10);
    247             militaryScore.caption = Math.round((playerState.statistics.enemyUnitsKilledValue + playerState.statistics.enemyBuildingsDestroyedValue) / 10);
    248             explorationScore.caption = playerState.statistics.percentMapExplored * 10;
    249             totalScore.caption = Number(economyScore.caption) + Number(militaryScore.caption) + Number(explorationScore.caption);
     660            var civIcon = getGUIObjectByName("civIcon"+j+playerIdentityString);
     661            civIcon.sprite = "stretched:"+civData[playerState.civ].Emblem;
     662            civIcon.tooltip = civData[playerState.civ].Name;
    250663           
    251             unitsTrained.caption = playerState.statistics.unitsTrained;
    252             unitsLost.caption = playerState.statistics.unitsLost;
    253             enemyUnitsKilled.caption = playerState.statistics.enemyUnitsKilled;
    254             buildingsConstructed.caption = playerState.statistics.buildingsConstructed;
    255             buildingsLost.caption = playerState.statistics.buildingsLost;
    256             enemyBuildingsDestroyed.caption = playerState.statistics.enemyBuildingsDestroyed;
    257 
    258             civCentresBuilt.caption = playerState.statistics.civCentresBuilt;
    259             enemyCivCentresDestroyed.caption = playerState.statistics.enemyCivCentresDestroyed;
    260             mapExploration.caption = playerState.statistics.percentMapExplored + "%";
    261 
    262             const SOLD_COLOR = '[color="201 255 200"]';
    263             const BOUGHT_COLOR = '[color="255 213 213"]';
    264             foodGathered.caption = SOLD_COLOR + playerState.statistics.resourcesGathered.food + "[/color] / " +
    265                 BOUGHT_COLOR + (playerState.statistics.resourcesUsed.food - playerState.statistics.resourcesSold.food) + "[/color]";
    266             woodGathered.caption = SOLD_COLOR + playerState.statistics.resourcesGathered.wood + "[/color] / " +
    267                 BOUGHT_COLOR + (playerState.statistics.resourcesUsed.wood - playerState.statistics.resourcesSold.wood) + "[/color]";
    268             stoneGathered.caption = SOLD_COLOR + playerState.statistics.resourcesGathered.stone + "[/color] / " +
    269                 BOUGHT_COLOR + (playerState.statistics.resourcesUsed.stone - playerState.statistics.resourcesSold.stone) + "[/color]";
    270             metalGathered.caption = SOLD_COLOR + playerState.statistics.resourcesGathered.metal + "[/color] / " +
    271                 BOUGHT_COLOR + (playerState.statistics.resourcesUsed.metal - playerState.statistics.resourcesSold.metal) + "[/color]";
    272             vegetarianRatio.caption = Math.floor(playerState.statistics.resourcesGathered.food > 0 ?
    273                 (playerState.statistics.resourcesGathered.vegetarianFood / playerState.statistics.resourcesGathered.food) * 100 : 0) + "%";
    274             treasuresCollected.caption = playerState.statistics.treasuresCollected;
    275             resourcesTributed.caption = SOLD_COLOR + playerState.statistics.tributesSent + "[/color] / " +
    276                 BOUGHT_COLOR + playerState.statistics.tributesReceived + "[/color]";
    277 
    278             exchangedFood.caption = SOLD_COLOR + '+' + playerState.statistics.resourcesBought.food
    279                 + '[/color] ' + BOUGHT_COLOR + '-' + playerState.statistics.resourcesSold.food + '[/color]';
    280             exchangedWood.caption = SOLD_COLOR + '+' + playerState.statistics.resourcesBought.wood
    281                 + '[/color] ' + BOUGHT_COLOR + '-' + playerState.statistics.resourcesSold.wood + '[/color]';
    282             exchangedStone.caption = SOLD_COLOR + '+' + playerState.statistics.resourcesBought.stone
    283                 + '[/color] ' + BOUGHT_COLOR + '-' + playerState.statistics.resourcesSold.stone + '[/color]';
    284             exchangedMetal.caption = SOLD_COLOR + '+' + playerState.statistics.resourcesBought.metal
    285                 + '[/color] ' + BOUGHT_COLOR + '-' + playerState.statistics.resourcesSold.metal + '[/color]';
    286             var totalBought = 0;
    287             for each (var boughtAmount in playerState.statistics.resourcesBought)
    288                 totalBought += boughtAmount;
    289             var totalSold = 0;
    290             for each (var soldAmount in playerState.statistics.resourcesSold)
    291                 totalSold += soldAmount;
    292             barterEfficiency.caption = Math.floor(totalSold > 0 ? (totalBought / totalSold) * 100 : 0) + "%";
    293             tradeIncome.caption = playerState.statistics.tradeIncome;
     664            // Get counters
     665            for (var c in panel.counters)
     666            {
     667                panel.counters[c].objects[i] = getGUIObjectByName(c+playerIdentityString);
     668            }
     669           
     670            // Align counters
     671            var right = alignCounters(panel.counters, i);
     672            boxSize.right = right;
     673            playerBox.size = boxSize;
     674           
     675            j++;
    294676        }
    295         else
     677       
     678        // Assign counters
     679        // score panel
     680        panels.score.counters.economyScore.objects[i].caption = captionEconomyScore();
     681        panels.score.counters.militaryScore.objects[i].caption = Math.round((playerState.statistics.enemyUnitsKilledValue +
     682            playerState.statistics.enemyBuildingsDestroyedValue) / 10);
     683        panels.score.counters.explorationScore.objects[i].caption = playerState.statistics.percentMapExplored * 10;
     684        panels.score.counters.totalScore.objects[i].caption = (+panels.score.counters.economyScore.objects[i].caption) +
     685            (+panels.score.counters.militaryScore.objects[i].caption) +
     686            (+panels.score.counters.explorationScore.objects[i].caption);
     687        // buildings panel
     688        var t = 0;
     689        for each (var counter in panels.buildings.counters)
    296690        {
    297             // hide player boxes
    298             for (var k = 0; k < panelNames.length; ++k)
     691            captionBuildings(counter.objects[i], BUILDINGS_TYPES[t]);
     692            t++;
     693        }
     694        // units panel
     695        t = 0;
     696        for each (var counter in panels.units.counters)
     697        {
     698            captionUnits(counter.objects[i], UNITS_TYPES[t]);
     699            t++;
     700        }
     701        // resources panel
     702        t = 0;
     703        for each (var counter in panels.resources.counters)
     704        {
     705            if (t >= 4) // only 4 first counters
     706                break;
     707           
     708            captionResourcesGathered(counter.objects[i], RESOURCES_TYPES[t]);
     709            t++;
     710        }
     711        panels.resources.counters.totalGathered.objects[i].caption = captionTotalResourcesGathered();
     712        panels.resources.counters.treasuresCollected.objects[i].caption = playerState.statistics.treasuresCollected;
     713        panels.resources.counters.resourcesTributed.objects[i].caption = captionResourcesTributed();
     714        // market panel
     715        t = 0;
     716        for (var c in panels.market.counters)
     717        {
     718            if (t >= 4) // only 4 first counters
     719                break;
     720           
     721            captionResourcesExchanged(panels.market.counters[c].objects[i], RESOURCES_TYPES[t]);
     722            t++;
     723        }
     724        panels.market.counters.barterEfficiency.objects[i].caption = captionBarterEfficiency();
     725        panels.market.counters.tradeIncome.objects[i].caption = playerState.statistics.tradeIncome;
     726        // miscelanous panel
     727        panels.miscelanous.counters.vegetarianRatio.objects[i].caption = captionVegetarianRatio();
     728        panels.miscelanous.counters.feminisation.objects[i].caption = captionFeminisation();
     729        panels.miscelanous.counters.killDeathRatio.objects[i].caption = captionKillDeathRatio();
     730        panels.miscelanous.counters.mapExploration.objects[i].caption = playerState.statistics.percentMapExplored + "%";
     731       
     732        if (!teams)
     733            continue;
     734       
     735        if (playerState.team == -1)
     736            continue;
     737       
     738        // Evaluate team total score
     739        // score panel
     740        for (var c in panels.score.counters)
     741        {
     742            panels.score.counters[c].teamsScores[playerState.team] += (+panels.score.counters[c].objects[i].caption);
     743            panels.score.counters[c].teamsScoresCaption[playerState.team] = panels.score.counters[c].teamsScores[playerState.team];
     744        }
     745        // buildings panel
     746        var t = 0;
     747        for each (var counter in panels.buildings.counters)
     748        {
     749            sumTeamBuildings(counter, BUILDINGS_TYPES[t]);
     750            t++;
     751        }
     752        // units panel
     753        t = 0;
     754        for each (var counter in panels.units.counters)
     755        {
     756            sumTeamUnits(counter, UNITS_TYPES[t]);
     757            t++;
     758        }
     759        // resources panel
     760        t = 0;
     761        for each (var counter in panels.resources.counters)
     762        {
     763            if (t >= 4) // only 4 first counters
     764                break;
     765           
     766            sumResourcesGathered(counter, RESOURCES_TYPES[t]);
     767            t++;
     768        }
     769        sumTotalResourcesGathered();
     770        panels.resources.counters.treasuresCollected.teamsScores[playerState.team] += playerState.statistics.treasuresCollected;
     771        panels.resources.counters.treasuresCollected.teamsScoresCaption[playerState.team] = panels.resources.counters.treasuresCollected.teamsScores[playerState.team];
     772        sumResourcesTributed();
     773        // market panel
     774        t = 0;
     775        for (var c in panels.market.counters)
     776        {
     777            if (t >= 4) // only 4 first counters
     778                break;
     779           
     780            sumResourcesExchanged(panels.market.counters[c], RESOURCES_TYPES[t]);
     781            t++;
     782        }
     783        sumBarterEfficiency();
     784        panels.market.counters.tradeIncome.teamsScores[playerState.team] += playerState.statistics.tradeIncome;
     785        panels.market.counters.tradeIncome.teamsScoresCaption[playerState.team] = panels.market.counters.tradeIncome.teamsScores[playerState.team];
     786        // miscelanous panel
     787        sumVegetarianRatio();
     788        sumFeminisation();
     789        sumKillDeathRatio();
     790        // TODO: probably change from simple sum to union from range manager
     791        panels.miscelanous.counters.mapExploration.teamsScores[playerState.team] += playerState.statistics.percentMapExplored;
     792        panels.miscelanous.counters.mapExploration.teamsScoresCaption[playerState.team] = panels.miscelanous.counters.mapExploration.teamsScores[playerState.team] + "%";
     793    }
     794   
     795    if (!teams)
     796    {
     797        selectPanel(0);
     798        return;
     799    }
     800   
     801    // Display teams totals counters
     802    for (var i = 0; i < teams.length; ++i)
     803    {
     804        var pn = 0;
     805        for each (var panel in panels)
     806        {
     807            var teamHeading = getGUIObjectByName("teamHeading"+pn+"t"+i);
     808            var yStart = 30 + teams[i] * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP) + 2;
     809            teamHeading.size = "50 "+yStart+" 100% "+(yStart+20);
     810            teamHeading.caption = "Team total";
     811           
     812            var left = 250;
     813            for (var c in panel.counters)
    299814            {
    300                 var playerBox = getGUIObjectByName("playerBox"+k+"["+i+"]");
    301                 playerBox.hidden = true;
     815                var counter = getGUIObjectByName(c+"t"+i);
     816                counter.size = left + " " + yStart + " " + (left + panel.counters[c].width) + " " + (yStart+20);
     817                counter.caption = panel.counters[c].teamsScoresCaption[i];
     818               
     819                left += panel.counters[c].width;
    302820            }
     821            pn++;
    303822        }
    304823    }
    305824
  • binaries/data/mods/public/gui/summary/summary.xml

     
    5757        <object name="tabDividerLeft" type="image" sprite="TabSpacer" size="172 120 174 122"/>
    5858        <object name="tabDividerRight" type="image" sprite="TabSpacer" size="328 120 330 122"/>
    5959
    60         <object name="scorePanelButton" type="button" sprite="ForegroundTab" size="20 95 170 120">
     60        <object name="scorePanelButton" type="button" sprite="ForegroundTab" size="20 82 136 120">
    6161            <action on="Press">selectPanel(0);</action>
    6262            <object type="text" style="TitleText" ghost="true">Score</object>
    6363        </object>
    6464       
    65         <object name="unitsBuildingsPanelButton" type="button" sprite="BackgroundTab" size="176 95 326 120">
     65        <object name="buildingsPanelButton" type="button" sprite="BackgroundTab" size="142 82 260 120">
    6666            <action on="Press">selectPanel(1);</action>
    67             <object type="text" style="TitleText" ghost="true">Units/buildings</object>
     67            <object type="text" style="TitleText" ghost="true">Buildings</object>
    6868        </object>
    6969
    70         <object name="conquestPanelButton" type="button" sprite="BackgroundTab" size="332 95 480 120">
     70        <object name="unitsPanelButton" type="button" sprite="BackgroundTab" size="266 82 384 120">
    7171            <action on="Press">selectPanel(2);</action>
    72             <object type="text" style="TitleText" ghost="true">Conquest</object>
     72            <object type="text" style="TitleText" ghost="true">Units</object>
    7373        </object>
    7474
    75         <object name="resourcesPanelButton" type="button" sprite="BackgroundTab" size="486 95 636 120">
     75        <object name="resourcesPanelButton" type="button" sprite="BackgroundTab" size="390 82 508 120">
    7676            <action on="Press">selectPanel(3);</action>
    7777            <object type="text" style="TitleText" ghost="true">Resources</object>
    7878        </object>
    7979
    80         <object name="marketPanelButton" type="button" sprite="BackgroundTab" size="642 95 792 120">
     80        <object name="marketPanelButton" type="button" sprite="BackgroundTab" size="514 82 632 120">
    8181            <action on="Press">selectPanel(4);</action>
    8282            <object type="text" style="TitleText" ghost="true">Market</object>
    8383        </object>
    84 
     84       
     85        <object name="miscPanelButton" type="button" sprite="BackgroundTab" size="638 82 756 120">
     86            <action on="Press">selectPanel(5);</action>
     87            <object type="text" style="TitleText" ghost="true">Miscellaneous</object>
     88        </object>
     89       
    8590        <object name="scorePanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58">
    8691
    8792            <object size="0 0 100% 100%-50">
     
    102107                </object>
    103108            </object>
    104109
    105             <object size="0 65 100% 100%-50">
     110            <object type="image" name="teamBox0t0" size="0 65 100% 100%-50" hidden="true">
     111                <object type="text" name="teamNameHeading0t0" size="15 5 100% 100%" style="LeftTabLabelText"/>
     112                <object size="0 30 100% 100%">
     113                    <repeat count="8">
     114                        <object type="image" name="playerBox0t0p[n]" size="10 0 10 30" hidden="true">
     115                            <object name="playerColourBox0t0p[n]" type="image" size="10 4 30 24"/>
     116                            <object name="playerName0t0p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText" />
     117                            <object name="civIcon0t0p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     118                            <object name="economyScoret0p[n]"     type="text"  style="CenteredLabelText"/>
     119                            <object name="militaryScoret0p[n]"    type="text"  style="CenteredLabelText"/>
     120                            <object name="explorationScoret0p[n]" type="text"  style="CenteredLabelText"/>
     121                            <object name="totalScoret0p[n]"       type="text"  style="CenteredLabelText"/>
     122                        </object>
     123                    </repeat>
     124                </object>
     125                <object name="teamHeading0t0"     type="text" style="LeftTabLabelText"/>
     126                <object name="economyScoret0"     type="text" style="CenteredLabelText"/>
     127                <object name="militaryScoret0"    type="text" style="CenteredLabelText"/>
     128                <object name="explorationScoret0" type="text" style="CenteredLabelText"/>
     129                <object name="totalScoret0"       type="text" style="CenteredLabelText"/>
     130            </object>
     131            <object type="image" name="teamBox0t1" size="0 65 100% 100%-50" hidden="true">
     132                <object type="text" name="teamNameHeading0t1" size="15 5 100% 100%" style="LeftTabLabelText"/>
     133                <object size="0 30 100% 100%">
     134                    <repeat count="8">
     135                        <object type="image" name="playerBox0t1p[n]" size="10 0 10 30" hidden="true">
     136                            <object name="playerColourBox0t1p[n]" type="image" size="10 4 30 24"/>
     137                            <object name="playerName0t1p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     138                            <object name="civIcon0t1p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     139                            <object name="economyScoret1p[n]"     type="text"  style="CenteredLabelText"/>
     140                            <object name="militaryScoret1p[n]"    type="text"  style="CenteredLabelText"/>
     141                            <object name="explorationScoret1p[n]" type="text"  style="CenteredLabelText"/>
     142                            <object name="totalScoret1p[n]"       type="text"  style="CenteredLabelText"/>
     143                        </object>
     144                    </repeat>
     145                </object>
     146                <object name="teamHeading0t1"     type="text" style="LeftTabLabelText"/>
     147                <object name="economyScoret1"     type="text" style="CenteredLabelText"/>
     148                <object name="militaryScoret1"    type="text" style="CenteredLabelText"/>
     149                <object name="explorationScoret1" type="text" style="CenteredLabelText"/>
     150                <object name="totalScoret1"       type="text" style="CenteredLabelText"/>
     151            </object>
     152            <object type="image" name="teamBox0t2" size="0 65 100% 100%-50" hidden="true">
     153                <object type="text" name="teamNameHeading0t2" size="15 5 100% 100%" style="LeftTabLabelText"/>
     154                <object size="0 30 100% 100%">
     155                    <repeat count="8">
     156                        <object type="image" name="playerBox0t2p[n]" size="10 0 10 30" hidden="true">
     157                            <object name="playerColourBox0t2p[n]" type="image" size="10 4 30 24"/>
     158                            <object name="playerName0t2p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     159                            <object name="civIcon0t2p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     160                            <object name="economyScoret2p[n]"     type="text"  style="CenteredLabelText"/>
     161                            <object name="militaryScoret2p[n]"    type="text"  style="CenteredLabelText"/>
     162                            <object name="explorationScoret2p[n]" type="text"  style="CenteredLabelText"/>
     163                            <object name="totalScoret2p[n]"       type="text"  style="CenteredLabelText"/>
     164                        </object>
     165                    </repeat>
     166                </object>
     167                <object name="teamHeading0t2"     type="text" style="LeftTabLabelText"/>
     168                <object name="economyScoret2"     type="text" style="CenteredLabelText"/>
     169                <object name="militaryScoret2"    type="text" style="CenteredLabelText"/>
     170                <object name="explorationScoret2" type="text" style="CenteredLabelText"/>
     171                <object name="totalScoret2"       type="text" style="CenteredLabelText"/>
     172            </object>
     173            <object type="image" name="teamBox0t3" size="0 65 100% 100%-50" hidden="true">
     174                <object type="text" name="teamNameHeading0t3" size="15 5 100% 100%" style="LeftTabLabelText"/>
     175                <object size="0 30 100% 100%">
     176                    <repeat count="8">
     177                        <object type="image" name="playerBox0t3p[n]" size="10 0 10 30" hidden="true">
     178                            <object name="playerColourBox0t3p[n]" type="image" size="10 4 30 24"/>
     179                            <object name="playerName0t3p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     180                            <object name="civIcon0t3p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     181                            <object name="economyScoret3p[n]"     type="text"  style="CenteredLabelText"/>
     182                            <object name="militaryScoret3p[n]"    type="text"  style="CenteredLabelText"/>
     183                            <object name="explorationScoret3p[n]" type="text"  style="CenteredLabelText"/>
     184                            <object name="totalScoret3p[n]"       type="text"  style="CenteredLabelText"/>
     185                        </object>
     186                    </repeat>
     187                </object>
     188                <object name="teamHeading0t3"     type="text" style="LeftTabLabelText"/>
     189                <object name="economyScoret3"     type="text" style="CenteredLabelText"/>
     190                <object name="militaryScoret3"    type="text" style="CenteredLabelText"/>
     191                <object name="explorationScoret3" type="text" style="CenteredLabelText"/>
     192                <object name="totalScoret3"       type="text" style="CenteredLabelText"/>
     193            </object>yy
     194           
     195            <object type="image" name="noTeamsBox0" size="0 65 100% 100%-50" hidden="true">
    106196                <repeat count="8">
    107197                    <object type="image" name="playerBox0[n]" size="10 0 10 30" hidden="true">
    108                         <object name="playerColourBox0[n]"          type="image" size="10 4 30 24" />
    109                         <object name="playerName0[n]"               type="text"  style="LeftLabelText" size="40 2 208 100%" />
    110                         <object name="civIcon0[n]"                  type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
    111                         <object name="economyScore[n]"              type="text" style="CenteredLabelText"/>
    112                         <object name="militaryScore[n]"             type="text" style="CenteredLabelText"/>
    113                         <object name="explorationScore[n]"          type="text" style="CenteredLabelText"/>
    114                         <object name="totalScore[n]"                type="text" style="CenteredLabelText"/>
     198                        <object name="playerColourBox0[n]" type="image" size="10 4 30 24"/>
     199                        <object name="playerName0[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     200                        <object name="civIcon0[n]"         type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
     201                        <object name="economyScore[n]"     type="text" style="CenteredLabelText"/>
     202                        <object name="militaryScore[n]"    type="text" style="CenteredLabelText"/>
     203                        <object name="explorationScore[n]" type="text" style="CenteredLabelText"/>
     204                        <object name="totalScore[n]"       type="text" style="CenteredLabelText"/>
    115205                    </object>
    116206                </repeat>
    117207            </object>
    118 
    119208        </object>
    120         <object name="unitsBuildingsPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58" hidden="true">
     209       
     210        <object name="buildingsPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58" hidden="true">
    121211
    122212            <object size="0 0 100% 100%-50">
    123213                <object name="playerName1Heading" type="text" style="LeftTabLabelText">
    124214                    Player name
    125215                </object>
    126                 <object name="unitsTrainedHeading" type="text" style="CenteredTabLabelText">
    127                     Units&#10;trained
     216                <object name="buildingsHeading" type="text" style="CenteredTabLabelText">
     217                    Buildings Statistics (Constructed / Lost / Destroyed)
    128218                </object>
    129                 <object name="unitsLostHeading" type="text" style="CenteredTabLabelText">
    130                     Units&#10;lost
     219                <object name="totalBuildingsHeading" type="text" style="CenteredTabLabelText">
     220                    Total
    131221                </object>
    132                 <object name="enemyUnitsKilledHeading" type="text" style="CenteredTabLabelText">
    133                     Enemy units&#10;killed
     222                <object name="houseBuildingsHeading" type="text" style="CenteredTabLabelText">
     223                    Houses
    134224                </object>
    135                 <object name="buildingsConstructedHeading" type="text" style="CenteredTabLabelText">
    136                     Buildings&#10;constructed
     225                <object name="economicBuildingsHeading" type="text" style="CenteredTabLabelText">
     226                    Economic
    137227                </object>
    138                 <object name="buildingsLostHeading" type="text" style="CenteredTabLabelText">
    139                     Buildings&#10;lost
     228                <object name="outpostBuildingsHeading" type="text" style="CenteredTabLabelText">
     229                    Outposts
    140230                </object>
    141                 <object name="enemyBuildingsDestroyedHeading" type="text" style="CenteredTabLabelText">
    142                     Enemy&#10;buildings&#10;destroyed
     231                <object name="militaryBuildingsHeading" type="text" style="CenteredTabLabelText">
     232                    Military
     233                </object>
     234                <object name="fortressBuildingsHeading" type="text" style="CenteredTabLabelText">
     235                    Fortresses
    143236                </object>
     237                <object name="civCentreBuildingsHeading" type="text" style="CenteredTabLabelText">
     238                    Civ&#160;Centers
     239                </object>
     240                <object name="wonderBuildingsHeading" type="text" style="CenteredTabLabelText">
     241                    Wonders
     242                </object>
     243
    144244            </object>
    145 
    146             <object size="0 65 100% 100%-50">
     245           
     246            <object type="image" name="teamBox1t0" size="0 65 100% 100%-50" hidden="true">
     247                <object type="text" name="teamNameHeading1t0" size="15 5 100% 100%" style="LeftTabLabelText"/>
     248                <object size="0 30 100% 100%">
     249                    <repeat count="8">
     250                        <object type="image" name="playerBox1t0p[n]" size="10 0 10 30" hidden="true">
     251                            <object name="playerColourBox1t0p[n]"   type="image" size="10 4 30 24"/>
     252                            <object name="playerName1t0p[n]"        type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     253                            <object name="civIcon1t0p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     254                            <object name="totalBuildingst0p[n]"     type="text"  style="CenteredLabelText"/>
     255                            <object name="houseBuildingst0p[n]"     type="text"  style="CenteredLabelText"/>
     256                            <object name="economicBuildingst0p[n]"  type="text"  style="CenteredLabelText"/>
     257                            <object name="outpostBuildingst0p[n]"   type="text"  style="CenteredLabelText"/>
     258                            <object name="militaryBuildingst0p[n]"  type="text"  style="CenteredLabelText"/>
     259                            <object name="fortressBuildingst0p[n]"  type="text"  style="CenteredLabelText"/>
     260                            <object name="civCentreBuildingst0p[n]" type="text"  style="CenteredLabelText"/>
     261                            <object name="wonderBuildingst0p[n]"    type="text"  style="CenteredLabelText"/>
     262                        </object>
     263                    </repeat>
     264                </object>
     265                <object name="teamHeading1t0"       type="text" style="LeftTabLabelText"/>
     266                <object name="totalBuildingst0"     type="text" style="CenteredLabelText"/>
     267                <object name="houseBuildingst0"     type="text" style="CenteredLabelText"/>
     268                <object name="economicBuildingst0"  type="text" style="CenteredLabelText"/>
     269                <object name="outpostBuildingst0"   type="text" style="CenteredLabelText"/>
     270                <object name="militaryBuildingst0"  type="text" style="CenteredLabelText"/>
     271                <object name="fortressBuildingst0"  type="text" style="CenteredLabelText"/>
     272                <object name="civCentreBuildingst0" type="text" style="CenteredLabelText"/>
     273                <object name="wonderBuildingst0"    type="text" style="CenteredLabelText"/>
     274            </object>
     275            <object type="image" name="teamBox1t1" size="0 65 100% 100%-50" hidden="true">
     276                <object type="text" name="teamNameHeading1t1" size="15 5 100% 100%" style="LeftTabLabelText"/>
     277                <object size="0 30 100% 100%">
     278                    <repeat count="8">
     279                        <object type="image" name="playerBox1t1p[n]" size="10 0 10 30" hidden="true">
     280                            <object name="playerColourBox1t1p[n]"   type="image" size="10 4 30 24"/>
     281                            <object name="playerName1t1p[n]"        type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     282                            <object name="civIcon1t1p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     283                            <object name="totalBuildingst1p[n]"     type="text"  style="CenteredLabelText"/>
     284                            <object name="houseBuildingst1p[n]"     type="text"  style="CenteredLabelText"/>
     285                            <object name="economicBuildingst1p[n]"  type="text"  style="CenteredLabelText"/>
     286                            <object name="outpostBuildingst1p[n]"   type="text"  style="CenteredLabelText"/>
     287                            <object name="militaryBuildingst1p[n]"  type="text"  style="CenteredLabelText"/>
     288                            <object name="fortressBuildingst1p[n]"  type="text"  style="CenteredLabelText"/>
     289                            <object name="civCentreBuildingst1p[n]" type="text"  style="CenteredLabelText"/>
     290                            <object name="wonderBuildingst1p[n]"    type="text"  style="CenteredLabelText"/>
     291                        </object>
     292                    </repeat>
     293                </object>
     294                <object name="teamHeading1t1"       type="text" style="LeftTabLabelText"/>
     295                <object name="totalBuildingst1"     type="text" style="CenteredLabelText"/>
     296                <object name="houseBuildingst1"     type="text" style="CenteredLabelText"/>
     297                <object name="economicBuildingst1"  type="text" style="CenteredLabelText"/>
     298                <object name="outpostBuildingst1"   type="text" style="CenteredLabelText"/>
     299                <object name="militaryBuildingst1"  type="text" style="CenteredLabelText"/>
     300                <object name="fortressBuildingst1"  type="text" style="CenteredLabelText"/>
     301                <object name="civCentreBuildingst1" type="text" style="CenteredLabelText"/>
     302                <object name="wonderBuildingst1"    type="text" style="CenteredLabelText"/>
     303            </object>
     304            <object type="image" name="teamBox1t2" size="0 65 100% 100%-50" hidden="true">
     305                <object type="text" name="teamNameHeading1t2" size="15 5 100% 100%" style="LeftTabLabelText"/>
     306                <object size="0 30 100% 100%">
     307                    <repeat count="8">
     308                        <object type="image" name="playerBox1t2p[n]" size="10 0 10 30" hidden="true">
     309                            <object name="playerColourBox1t2p[n]"   type="image" size="10 4 30 24"/>
     310                            <object name="playerName1t2p[n]"        type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     311                            <object name="civIcon1t2p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     312                            <object name="totalBuildingst2p[n]"     type="text"  style="CenteredLabelText"/>
     313                            <object name="houseBuildingst2p[n]"     type="text"  style="CenteredLabelText"/>
     314                            <object name="economicBuildingst2p[n]"  type="text"  style="CenteredLabelText"/>
     315                            <object name="outpostBuildingst2p[n]"   type="text"  style="CenteredLabelText"/>
     316                            <object name="militaryBuildingst2p[n]"  type="text"  style="CenteredLabelText"/>
     317                            <object name="fortressBuildingst2p[n]"  type="text"  style="CenteredLabelText"/>
     318                            <object name="civCentreBuildingst2p[n]" type="text"  style="CenteredLabelText"/>
     319                            <object name="wonderBuildingst2p[n]"    type="text"  style="CenteredLabelText"/>
     320                        </object>
     321                    </repeat>
     322                </object>
     323                <object name="teamHeading1t2"       type="text" style="LeftTabLabelText"/>
     324                <object name="totalBuildingst2"     type="text" style="CenteredLabelText"/>
     325                <object name="houseBuildingst2"     type="text" style="CenteredLabelText"/>
     326                <object name="economicBuildingst2"  type="text" style="CenteredLabelText"/>
     327                <object name="outpostBuildingst2"   type="text" style="CenteredLabelText"/>
     328                <object name="militaryBuildingst2"  type="text" style="CenteredLabelText"/>
     329                <object name="fortressBuildingst2"  type="text" style="CenteredLabelText"/>
     330                <object name="civCentreBuildingst2" type="text" style="CenteredLabelText"/>
     331                <object name="wonderBuildingst2"    type="text" style="CenteredLabelText"/>
     332            </object>
     333            <object type="image" name="teamBox1t3" size="0 65 100% 100%-50" hidden="true">
     334                <object type="text" name="teamNameHeading1t3" size="15 5 100% 100%" style="LeftTabLabelText"/>
     335                <object size="0 30 100% 100%">
     336                    <repeat count="8">
     337                        <object type="image" name="playerBox1t3p[n]" size="10 0 10 30" hidden="true">
     338                            <object name="playerColourBox1t3p[n]"   type="image" size="10 4 30 24"/>
     339                            <object name="playerName1t3p[n]"        type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     340                            <object name="civIcon1t3p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     341                            <object name="totalBuildingst3p[n]"     type="text"  style="CenteredLabelText"/>
     342                            <object name="houseBuildingst3p[n]"     type="text"  style="CenteredLabelText"/>
     343                            <object name="economicBuildingst3p[n]"  type="text"  style="CenteredLabelText"/>
     344                            <object name="outpostBuildingst3p[n]"   type="text"  style="CenteredLabelText"/>
     345                            <object name="militaryBuildingst3p[n]"  type="text"  style="CenteredLabelText"/>
     346                            <object name="fortressBuildingst3p[n]"  type="text"  style="CenteredLabelText"/>
     347                            <object name="civCentreBuildingst3p[n]" type="text"  style="CenteredLabelText"/>
     348                            <object name="wonderBuildingst3p[n]"    type="text"  style="CenteredLabelText"/>
     349                        </object>
     350                    </repeat>
     351                </object>
     352                <object name="teamHeading1t3"       type="text" style="LeftTabLabelText"/>
     353                <object name="totalBuildingst3"     type="text" style="CenteredLabelText"/>
     354                <object name="houseBuildingst3"     type="text" style="CenteredLabelText"/>
     355                <object name="economicBuildingst3"  type="text" style="CenteredLabelText"/>
     356                <object name="outpostBuildingst3"   type="text" style="CenteredLabelText"/>
     357                <object name="militaryBuildingst3"  type="text" style="CenteredLabelText"/>
     358                <object name="fortressBuildingst3"  type="text" style="CenteredLabelText"/>
     359                <object name="civCentreBuildingst3" type="text" style="CenteredLabelText"/>
     360                <object name="wonderBuildingst3"    type="text" style="CenteredLabelText"/>
     361            </object>
     362           
     363            <object type="image" name="noTeamsBox1" size="0 65 100% 100%-50" hidden="true">
    147364                <repeat count="8">
    148365                    <object type="image" name="playerBox1[n]" size="10 0 10 30" hidden="true">
    149                         <object name="playerColourBox1[n]"          type="image" size="10 4 30 24" />
    150                         <object name="playerName1[n]"               type="text" style="LeftLabelText" size="40 2 208 100%" />
    151                         <object name="civIcon1[n]"                  type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
    152                         <object name="unitsTrained[n]"              type="text" style="CenteredLabelText"/>
    153                         <object name="unitsLost[n]"                 type="text" style="CenteredLabelText"/>
    154                         <object name="enemyUnitsKilled[n]"          type="text" style="CenteredLabelText"/>
    155                         <object name="buildingsConstructed[n]"      type="text" style="CenteredLabelText"/>
    156                         <object name="buildingsLost[n]"             type="text" style="CenteredLabelText"/>
    157                         <object name="enemyBuildingsDestroyed[n]"       type="text" style="CenteredLabelText"/>
     366                        <object name="playerColourBox1[n]"   type="image" size="10 4 30 24"/>
     367                        <object name="playerName1[n]"        type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     368                        <object name="civIcon1[n]"           type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
     369                        <object name="totalBuildings[n]"     type="text"  style="CenteredLabelText"/>
     370                        <object name="houseBuildings[n]"     type="text"  style="CenteredLabelText"/>
     371                        <object name="economicBuildings[n]"  type="text"  style="CenteredLabelText"/>
     372                        <object name="outpostBuildings[n]"   type="text"  style="CenteredLabelText"/>
     373                        <object name="militaryBuildings[n]"  type="text"  style="CenteredLabelText"/>
     374                        <object name="fortressBuildings[n]"  type="text"  style="CenteredLabelText"/>
     375                        <object name="civCentreBuildings[n]" type="text"  style="CenteredLabelText"/>
     376                        <object name="wonderBuildings[n]"    type="text"  style="CenteredLabelText"/>
    158377                    </object>
    159378                </repeat>
    160379            </object>
    161 
    162380        </object>
    163         <object name="conquestPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58" hidden="true">
     381       
     382        <object name="unitsPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58" hidden="true">
    164383
    165384            <object size="0 0 100% 100%-50">
    166385                <object name="playerName2Heading" type="text" style="LeftTabLabelText">
    167386                    Player name
    168387                </object>
    169                 <object name="civCentresBuiltHeading" type="text" style="CenteredTabLabelText">
    170                     Civ centres&#10;built
     388                <object name="unitsHeading" type="text" style="CenteredTabLabelText">
     389                    Units Statistics (Trained / Lost / Killed)
    171390                </object>
    172                 <object name="enemyCivCentresDestroyedHeading" type="text" style="CenteredTabLabelText">
    173                     Enemy&#10;civ centres&#10;destroyed
     391                <object name="totalUnitsHeading" type="text" style="CenteredTabLabelText">
     392                    Total
    174393                </object>
    175                 <object name="mapExplorationHeading" type="text" style="CenteredTabLabelText">
    176                     Map&#10;exploration
     394                <object name="infantryUnitsHeading" type="text" style="CenteredTabLabelText">
     395                    Infantry
    177396                </object>
     397                <object name="workerUnitsHeading" type="text" style="CenteredTabLabelText">
     398                    Worker
     399                </object>
     400                <object name="cavalryUnitsHeading" type="text" style="CenteredTabLabelText">
     401                    Cavalry
     402                </object>
     403                <object name="championUnitsHeading" type="text" style="CenteredTabLabelText">
     404                    Champion
     405                </object>
     406                <object name="heroesUnitsHeading" type="text" style="CenteredTabLabelText">
     407                    Heroes
     408                </object>
     409                <object name="navyUnitsHeading" type="text" style="CenteredTabLabelText">
     410                    Navy
     411                </object>
    178412            </object>
     413           
     414            <object type="image" name="teamBox2t0" size="0 65 100% 100%-50" hidden="true">
     415                <object type="text" name="teamNameHeading2t0" size="15 5 100% 100%" style="LeftTabLabelText"/>
     416                <object size="0 30 100% 100%">
     417                    <repeat count="8">
     418                        <object type="image" name="playerBox2t0p[n]" size="10 0 10 30" hidden="true">
     419                            <object name="playerColourBox2t0p[n]" type="image" size="10 4 30 24"/>
     420                            <object name="playerName2t0p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     421                            <object name="civIcon2t0p[n]"         type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
     422                            <object name="totalUnitst0p[n]"       type="text"  style="CenteredLabelText"/>
     423                            <object name="infantryUnitst0p[n]"    type="text"  style="CenteredLabelText"/>
     424                            <object name="workerUnitst0p[n]"      type="text"  style="CenteredLabelText"/>
     425                            <object name="cavalryUnitst0p[n]"     type="text"  style="CenteredLabelText"/>
     426                            <object name="championUnitst0p[n]"    type="text"  style="CenteredLabelText"/>
     427                            <object name="heroesUnitst0p[n]"      type="text"  style="CenteredLabelText"/>
     428                            <object name="navyUnitst0p[n]"        type="text"  style="CenteredLabelText"/>
     429                        </object>
     430                    </repeat>
     431                </object>
     432                <object name="teamHeading2t0"  type="text" style="LeftTabLabelText"/>
     433                <object name="totalUnitst0"    type="text" style="CenteredLabelText"/>
     434                <object name="infantryUnitst0" type="text" style="CenteredLabelText"/>
     435                <object name="workerUnitst0"   type="text" style="CenteredLabelText"/>
     436                <object name="cavalryUnitst0"  type="text" style="CenteredLabelText"/>
     437                <object name="championUnitst0" type="text" style="CenteredLabelText"/>
     438                <object name="heroesUnitst0"   type="text" style="CenteredLabelText"/>
     439                <object name="navyUnitst0"     type="text" style="CenteredLabelText"/>
     440            </object>
     441            <object type="image" name="teamBox2t1" size="0 65 100% 100%-50" hidden="true">
     442                <object type="text" name="teamNameHeading2t1" size="15 5 100% 100%" style="LeftTabLabelText"/>
     443                <object size="0 30 100% 100%">
     444                    <repeat count="8">
     445                        <object type="image" name="playerBox2t1p[n]" size="10 0 10 30" hidden="true">
     446                            <object name="playerColourBox2t1p[n]" type="image" size="10 4 30 24"/>
     447                            <object name="playerName2t1p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     448                            <object name="civIcon2t1p[n]"         type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
     449                            <object name="totalUnitst1p[n]"       type="text"  style="CenteredLabelText"/>
     450                            <object name="infantryUnitst1p[n]"    type="text"  style="CenteredLabelText"/>
     451                            <object name="workerUnitst1p[n]"      type="text"  style="CenteredLabelText"/>
     452                            <object name="cavalryUnitst1p[n]"     type="text"  style="CenteredLabelText"/>
     453                            <object name="championUnitst1p[n]"    type="text"  style="CenteredLabelText"/>
     454                            <object name="heroesUnitst1p[n]"      type="text"  style="CenteredLabelText"/>
     455                            <object name="navyUnitst1p[n]"        type="text"  style="CenteredLabelText"/>
     456                        </object>
     457                    </repeat>
     458                </object>
     459                <object name="teamHeading2t1"  type="text" style="LeftTabLabelText"/>
     460                <object name="totalUnitst1"    type="text" style="CenteredLabelText"/>
     461                <object name="infantryUnitst1" type="text" style="CenteredLabelText"/>
     462                <object name="workerUnitst1"   type="text" style="CenteredLabelText"/>
     463                <object name="cavalryUnitst1"  type="text" style="CenteredLabelText"/>
     464                <object name="championUnitst1" type="text" style="CenteredLabelText"/>
     465                <object name="heroesUnitst1"   type="text" style="CenteredLabelText"/>
     466                <object name="navyUnitst1"     type="text" style="CenteredLabelText"/>
     467            </object>
     468            <object type="image" name="teamBox2t2" size="0 65 100% 100%-50" hidden="true">
     469                <object type="text" name="teamNameHeading2t2" size="15 5 100% 100%" style="LeftTabLabelText"/>
     470                <object size="0 30 100% 100%">
     471                    <repeat count="8">
     472                        <object type="image" name="playerBox2t2p[n]" size="10 0 10 30" hidden="true">
     473                            <object name="playerColourBox2t2p[n]" type="image" size="10 4 30 24"/>
     474                            <object name="playerName2t2p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     475                            <object name="civIcon2t2p[n]"         type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
     476                            <object name="totalUnitst2p[n]"       type="text"  style="CenteredLabelText"/>
     477                            <object name="infantryUnitst2p[n]"    type="text"  style="CenteredLabelText"/>
     478                            <object name="workerUnitst2p[n]"      type="text"  style="CenteredLabelText"/>
     479                            <object name="cavalryUnitst2p[n]"     type="text"  style="CenteredLabelText"/>
     480                            <object name="championUnitst2p[n]"    type="text"  style="CenteredLabelText"/>
     481                            <object name="heroesUnitst2p[n]"      type="text"  style="CenteredLabelText"/>
     482                            <object name="navyUnitst2p[n]"        type="text"  style="CenteredLabelText"/>
     483                        </object>
     484                    </repeat>
     485                </object>
     486                <object name="teamHeading2t2"  type="text" style="LeftTabLabelText"/>
     487                <object name="totalUnitst2"    type="text" style="CenteredLabelText"/>
     488                <object name="infantryUnitst2" type="text" style="CenteredLabelText"/>
     489                <object name="workerUnitst2"   type="text" style="CenteredLabelText"/>
     490                <object name="cavalryUnitst2"  type="text" style="CenteredLabelText"/>
     491                <object name="championUnitst2" type="text" style="CenteredLabelText"/>
     492                <object name="heroesUnitst2"   type="text" style="CenteredLabelText"/>
     493                <object name="navyUnitst2"     type="text" style="CenteredLabelText"/>
     494            </object>
     495            <object type="image" name="teamBox2t3" size="0 65 100% 100%-50" hidden="true">
     496                <object type="text" name="teamNameHeading2t3" size="15 5 100% 100%" style="LeftTabLabelText"/>
     497                <object size="0 30 100% 100%">
     498                    <repeat count="8">
     499                        <object type="image" name="playerBox2t3p[n]" size="10 0 10 30" hidden="true">
     500                            <object name="playerColourBox2t3p[n]" type="image" size="10 4 30 24"/>
     501                            <object name="playerName2t3p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     502                            <object name="civIcon2t3p[n]"         type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
     503                            <object name="totalUnitst3p[n]"       type="text"  style="CenteredLabelText"/>
     504                            <object name="infantryUnitst3p[n]"    type="text"  style="CenteredLabelText"/>
     505                            <object name="workerUnitst3p[n]"      type="text"  style="CenteredLabelText"/>
     506                            <object name="cavalryUnitst3p[n]"     type="text"  style="CenteredLabelText"/>
     507                            <object name="championUnitst3p[n]"    type="text"  style="CenteredLabelText"/>
     508                            <object name="heroesUnitst3p[n]"      type="text"  style="CenteredLabelText"/>
     509                            <object name="navyUnitst3p[n]"        type="text"  style="CenteredLabelText"/>
     510                        </object>
     511                    </repeat>
     512                </object>
     513                <object name="teamHeading2t3"  type="text" style="LeftTabLabelText"/>
     514                <object name="totalUnitst3"    type="text" style="CenteredLabelText"/>
     515                <object name="infantryUnitst3" type="text" style="CenteredLabelText"/>
     516                <object name="workerUnitst3"   type="text" style="CenteredLabelText"/>
     517                <object name="cavalryUnitst3"  type="text" style="CenteredLabelText"/>
     518                <object name="championUnitst3" type="text" style="CenteredLabelText"/>
     519                <object name="heroesUnitst3"   type="text" style="CenteredLabelText"/>
     520                <object name="navyUnitst3"     type="text" style="CenteredLabelText"/>
     521            </object>
    179522
    180             <object size="0 65 100% 100%-50">
     523            <object type="image" name="noTeamsBox2" size="0 65 100% 100%-50" hidden="true">
    181524                <repeat count="8">
    182525                    <object type="image" name="playerBox2[n]" size="10 0 10 30" hidden="true">
    183                         <object name="playerColourBox2[n]"          type="image" size="10 4 30 24" />
    184                         <object name="playerName2[n]"               type="text"  style="LeftLabelText" size="40 2 208 100%" />
    185                         <object name="civIcon2[n]"                  type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
    186                         <object name="civCentresBuilt[n]"           type="text" style="CenteredLabelText"/>
    187                         <object name="enemyCivCentresDestroyed[n]"  type="text" style="CenteredLabelText"/>
    188                         <object name="mapExploration[n]"        type="text" style="CenteredLabelText"/>
     526                        <object name="playerColourBox2[n]" type="image" size="10 4 30 24" />
     527                        <object name="playerName2[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     528                        <object name="civIcon2[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     529                        <object name="totalUnits[n]"       type="text"  style="CenteredLabelText"/>
     530                        <object name="infantryUnits[n]"    type="text"  style="CenteredLabelText"/>
     531                        <object name="workerUnits[n]"      type="text"  style="CenteredLabelText"/>
     532                        <object name="cavalryUnits[n]"     type="text"  style="CenteredLabelText"/>
     533                        <object name="championUnits[n]"    type="text"  style="CenteredLabelText"/>
     534                        <object name="heroesUnits[n]"      type="text"  style="CenteredLabelText"/>
     535                        <object name="navyUnits[n]"        type="text"  style="CenteredLabelText"/>
    189536                    </object>
    190537                </repeat>
    191538            </object>
    192 
    193539        </object>
     540       
    194541        <object name="resourcesPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58" hidden="true">
    195542
    196543            <object size="0 0 100% 100%-50">
     
    212559                <object name="metalGatheredHeading" type="text" style="CenteredTabLabelText">
    213560                    Metal
    214561                </object>
    215                 <object name="vegetarianRatioHeading" type="text" style="CenteredTabLabelText">
    216                     Vegetarian&#10;ratio
     562                <object name="totalGatheredHeading" type="text" style="CenteredTabLabelText">
     563                    Total
    217564                </object>
    218565                <object name="treasuresCollectedHeading" type="text" style="CenteredTabLabelText">
    219566                    Treasures&#10;collected
     
    223570                </object>
    224571            </object>
    225572
    226             <object size="0 65 100% 100%-50">
     573            <object type="image" name="teamBox3t0" size="0 65 100% 100%-50" hidden="true">
     574                <object type="text" name="teamNameHeading3t0" size="15 5 100% 100%" style="LeftTabLabelText"/>
     575                <object size="0 30 100% 100%">
     576                    <repeat count="8">
     577                        <object type="image" name="playerBox3t0p[n]" size="10 0 10 30" hidden="true">
     578                            <object name="playerColourBox3t0p[n]"   type="image" size="10 4 30 24"/>
     579                            <object name="playerName3t0p[n]"        type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     580                            <object name="civIcon3t0p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     581                            <object name="foodGatheredt0p[n]"       type="text"  style="CenteredLabelText"/>
     582                            <object name="woodGatheredt0p[n]"       type="text"  style="CenteredLabelText"/>
     583                            <object name="stoneGatheredt0p[n]"      type="text"  style="CenteredLabelText"/>
     584                            <object name="metalGatheredt0p[n]"      type="text"  style="CenteredLabelText"/>
     585                            <object name="totalGatheredt0p[n]"      type="text"  style="CenteredLabelText"/>
     586                            <object name="treasuresCollectedt0p[n]" type="text"  style="CenteredLabelText"/>
     587                            <object name="resourcesTributedt0p[n]"  type="text"  style="CenteredLabelText"/>
     588                        </object>
     589                    </repeat>
     590                </object>
     591                <object name="teamHeading3t0"       type="text" style="LeftTabLabelText"/>
     592                <object name="foodGatheredt0"       type="text" style="CenteredLabelText"/>
     593                <object name="woodGatheredt0"       type="text" style="CenteredLabelText"/>
     594                <object name="stoneGatheredt0"      type="text" style="CenteredLabelText"/>
     595                <object name="metalGatheredt0"      type="text" style="CenteredLabelText"/>
     596                <object name="totalGatheredt0"      type="text" style="CenteredLabelText"/>
     597                <object name="treasuresCollectedt0" type="text" style="CenteredLabelText"/>
     598                <object name="resourcesTributedt0"  type="text" style="CenteredLabelText"/>
     599            </object>
     600            <object type="image" name="teamBox3t1" size="0 65 100% 100%-50" hidden="true">
     601                <object type="text" name="teamNameHeading3t1" size="15 5 100% 100%" style="LeftTabLabelText"/>
     602                <object size="0 30 100% 100%">
     603                    <repeat count="8">
     604                        <object type="image" name="playerBox3t1p[n]" size="10 0 10 30" hidden="true">
     605                            <object name="playerColourBox3t1p[n]"   type="image" size="10 4 30 24"/>
     606                            <object name="playerName3t1p[n]"        type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     607                            <object name="civIcon3t1p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     608                            <object name="foodGatheredt1p[n]"       type="text"  style="CenteredLabelText"/>
     609                            <object name="woodGatheredt1p[n]"       type="text"  style="CenteredLabelText"/>
     610                            <object name="stoneGatheredt1p[n]"      type="text"  style="CenteredLabelText"/>
     611                            <object name="metalGatheredt1p[n]"      type="text"  style="CenteredLabelText"/>
     612                            <object name="totalGatheredt1p[n]"      type="text"  style="CenteredLabelText"/>
     613                            <object name="treasuresCollectedt1p[n]" type="text"  style="CenteredLabelText"/>
     614                            <object name="resourcesTributedt1p[n]"  type="text"  style="CenteredLabelText"/>
     615                        </object>
     616                    </repeat>
     617                </object>
     618                <object name="teamHeading3t1"       type="text" style="LeftTabLabelText"/>
     619                <object name="foodGatheredt1"       type="text" style="CenteredLabelText"/>
     620                <object name="woodGatheredt1"       type="text" style="CenteredLabelText"/>
     621                <object name="stoneGatheredt1"      type="text" style="CenteredLabelText"/>
     622                <object name="metalGatheredt1"      type="text" style="CenteredLabelText"/>
     623                <object name="totalGatheredt1"      type="text" style="CenteredLabelText"/>
     624                <object name="treasuresCollectedt1" type="text" style="CenteredLabelText"/>
     625                <object name="resourcesTributedt1"  type="text" style="CenteredLabelText"/>
     626            </object>
     627            <object type="image" name="teamBox3t2" size="0 65 100% 100%-50" hidden="true">
     628                <object type="text" name="teamNameHeading3t2" size="15 5 100% 100%" style="LeftTabLabelText"/>
     629                <object size="0 30 100% 100%">
     630                    <repeat count="8">
     631                        <object type="image" name="playerBox3t2p[n]" size="10 0 10 30" hidden="true">
     632                            <object name="playerColourBox3t2p[n]"   type="image" size="10 4 30 24"/>
     633                            <object name="playerName3t2p[n]"        type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     634                            <object name="civIcon3t2p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     635                            <object name="foodGatheredt2p[n]"       type="text"  style="CenteredLabelText"/>
     636                            <object name="woodGatheredt2p[n]"       type="text"  style="CenteredLabelText"/>
     637                            <object name="stoneGatheredt2p[n]"      type="text"  style="CenteredLabelText"/>
     638                            <object name="metalGatheredt2p[n]"      type="text"  style="CenteredLabelText"/>
     639                            <object name="totalGatheredt2p[n]"      type="text"  style="CenteredLabelText"/>
     640                            <object name="treasuresCollectedt2p[n]" type="text"  style="CenteredLabelText"/>
     641                            <object name="resourcesTributedt2p[n]"  type="text"  style="CenteredLabelText"/>
     642                        </object>
     643                    </repeat>
     644                </object>
     645                <object name="teamHeading3t2"       type="text" style="LeftTabLabelText"/>
     646                <object name="foodGatheredt2"       type="text" style="CenteredLabelText"/>
     647                <object name="woodGatheredt2"       type="text" style="CenteredLabelText"/>
     648                <object name="stoneGatheredt2"      type="text" style="CenteredLabelText"/>
     649                <object name="metalGatheredt2"      type="text" style="CenteredLabelText"/>
     650                <object name="totalGatheredt2"      type="text" style="CenteredLabelText"/>
     651                <object name="treasuresCollectedt2" type="text" style="CenteredLabelText"/>
     652                <object name="resourcesTributedt2"  type="text" style="CenteredLabelText"/>
     653            </object>
     654            <object type="image" name="teamBox3t3" size="0 65 100% 100%-50" hidden="true">
     655                <object type="text" name="teamNameHeading3t3" size="15 5 100% 100%" style="LeftTabLabelText"/>
     656                <object size="0 30 100% 100%">
     657                    <repeat count="8">
     658                        <object type="image" name="playerBox3t3p[n]" size="10 0 10 30" hidden="true">
     659                            <object name="playerColourBox3t3p[n]"   type="image" size="10 4 30 24"/>
     660                            <object name="playerName3t3p[n]"        type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     661                            <object name="civIcon3t3p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     662                            <object name="foodGatheredt3p[n]"       type="text"  style="CenteredLabelText"/>
     663                            <object name="woodGatheredt3p[n]"       type="text"  style="CenteredLabelText"/>
     664                            <object name="stoneGatheredt3p[n]"      type="text"  style="CenteredLabelText"/>
     665                            <object name="metalGatheredt3p[n]"      type="text"  style="CenteredLabelText"/>
     666                            <object name="totalGatheredt3p[n]"      type="text"  style="CenteredLabelText"/>
     667                            <object name="treasuresCollectedt3p[n]" type="text"  style="CenteredLabelText"/>
     668                            <object name="resourcesTributedt3p[n]"  type="text"  style="CenteredLabelText"/>
     669                        </object>
     670                    </repeat>
     671                </object>
     672                <object name="teamHeading3t3"       type="text" style="LeftTabLabelText"/>
     673                <object name="foodGatheredt3"       type="text" style="CenteredLabelText"/>
     674                <object name="woodGatheredt3"       type="text" style="CenteredLabelText"/>
     675                <object name="stoneGatheredt3"      type="text" style="CenteredLabelText"/>
     676                <object name="metalGatheredt3"      type="text" style="CenteredLabelText"/>
     677                <object name="totalGatheredt3"      type="text" style="CenteredLabelText"/>
     678                <object name="treasuresCollectedt3" type="text" style="CenteredLabelText"/>
     679                <object name="resourcesTributedt3"  type="text" style="CenteredLabelText"/>
     680            </object>
     681           
     682            <object type="image" name="noTeamsBox3" size="0 65 100% 100%-50" hidden="true">
    227683                <repeat count="8">
    228684                    <object type="image" name="playerBox3[n]" size="10 0 10 30" hidden="true">
    229                         <object name="playerColourBox3[n]"      type="image" size="10 4 30 24" />
    230                         <object name="playerName3[n]"           type="text"  style="LeftLabelText" size="40 2 208 100%" />
    231                         <object name="civIcon3[n]"              type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
    232                         <object name="foodGathered[n]"          type="text" style="CenteredLabelText"/>
    233                         <object name="woodGathered[n]"          type="text" style="CenteredLabelText"/>
    234                         <object name="stoneGathered[n]"         type="text" style="CenteredLabelText" />
    235                         <object name="metalGathered[n]"         type="text" style="CenteredLabelText"/>
    236                         <object name="vegetarianRatio[n]"       type="text" style="CenteredLabelText"/>
    237                         <object name="treasuresCollected[n]"        type="text" style="CenteredLabelText"/>
    238                         <object name="resourcesTributed[n]"     type="text" style="CenteredLabelText"/>
     685                        <object name="playerColourBox3[n]"   type="image" size="10 4 30 24" />
     686                        <object name="playerName3[n]"        type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     687                        <object name="civIcon3[n]"           type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
     688                        <object name="foodGathered[n]"       type="text" style="CenteredLabelText"/>
     689                        <object name="woodGathered[n]"       type="text" style="CenteredLabelText"/>
     690                        <object name="stoneGathered[n]"      type="text" style="CenteredLabelText" />
     691                        <object name="metalGathered[n]"      type="text" style="CenteredLabelText"/>
     692                        <object name="totalGathered[n]"      type="text" style="CenteredLabelText"/>
     693                        <object name="treasuresCollected[n]" type="text" style="CenteredLabelText"/>
     694                        <object name="resourcesTributed[n]"  type="text" style="CenteredLabelText"/>
    239695                    </object>
    240696                </repeat>
    241697            </object>
    242 
    243698        </object>
     699       
    244700        <object name="marketPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58" hidden="true">
    245701
    246702            <object size="0 0 100% 100%-50">
     
    266722                    Trade&#10;income
    267723                </object>
    268724            </object>
    269 
    270             <object size="0 65 100% 100%-50">
     725           
     726            <object type="image" name="teamBox4t0" size="0 65 100% 100%-50" hidden="true">
     727                <object type="text" name="teamNameHeading4t0" size="15 5 100% 100%" style="LeftTabLabelText"/>
     728                <object size="0 30 100% 100%">
     729                    <repeat count="8">
     730                        <object type="image" name="playerBox4t0p[n]" size="10 0 10 30" hidden="true">
     731                            <object name="playerColourBox4t0p[n]" type="image" size="10 4 30 24"/>
     732                            <object name="playerName4t0p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     733                            <object name="civIcon4t0p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     734                            <object name="exchangedFoodt0p[n]"    type="text"  style="CenteredLabelText"/>
     735                            <object name="exchangedWoodt0p[n]"    type="text"  style="CenteredLabelText"/>
     736                            <object name="exchangedStonet0p[n]"   type="text"  style="CenteredLabelText"/>
     737                            <object name="exchangedMetalt0p[n]"   type="text"  style="CenteredLabelText"/>
     738                            <object name="barterEfficiencyt0p[n]" type="text"  style="CenteredLabelText"/>
     739                            <object name="tradeIncomet0p[n]"      type="text"  style="CenteredLabelText"/>
     740                        </object>
     741                    </repeat>
     742                </object>
     743                <object name="teamHeading4t0"     type="text" style="LeftTabLabelText"/>
     744                <object name="exchangedFoodt0"    type="text" style="CenteredLabelText"/>
     745                <object name="exchangedWoodt0"    type="text" style="CenteredLabelText"/>
     746                <object name="exchangedStonet0"   type="text" style="CenteredLabelText"/>
     747                <object name="exchangedMetalt0"   type="text" style="CenteredLabelText"/>
     748                <object name="barterEfficiencyt0" type="text" style="CenteredLabelText"/>
     749                <object name="tradeIncomet0"      type="text" style="CenteredLabelText"/>
     750            </object>
     751            <object type="image" name="teamBox4t1" size="0 65 100% 100%-50" hidden="true">
     752                <object type="text" name="teamNameHeading4t1" size="15 5 100% 100%" style="LeftTabLabelText"/>
     753                <object size="0 30 100% 100%">
     754                    <repeat count="8">
     755                        <object type="image" name="playerBox4t1p[n]" size="10 0 10 30" hidden="true">
     756                            <object name="playerColourBox4t1p[n]" type="image" size="10 4 30 24"/>
     757                            <object name="playerName4t1p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     758                            <object name="civIcon4t1p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     759                            <object name="exchangedFoodt1p[n]"    type="text"  style="CenteredLabelText"/>
     760                            <object name="exchangedWoodt1p[n]"    type="text"  style="CenteredLabelText"/>
     761                            <object name="exchangedStonet1p[n]"   type="text"  style="CenteredLabelText"/>
     762                            <object name="exchangedMetalt1p[n]"   type="text"  style="CenteredLabelText"/>
     763                            <object name="barterEfficiencyt1p[n]" type="text"  style="CenteredLabelText"/>
     764                            <object name="tradeIncomet1p[n]"      type="text"  style="CenteredLabelText"/>
     765                        </object>
     766                    </repeat>
     767                </object>
     768                <object name="teamHeading4t1"     type="text" style="LeftTabLabelText"/>
     769                <object name="exchangedFoodt1"    type="text" style="CenteredLabelText"/>
     770                <object name="exchangedWoodt1"    type="text" style="CenteredLabelText"/>
     771                <object name="exchangedStonet1"   type="text" style="CenteredLabelText"/>
     772                <object name="exchangedMetalt1"   type="text" style="CenteredLabelText"/>
     773                <object name="barterEfficiencyt1" type="text" style="CenteredLabelText"/>
     774                <object name="tradeIncomet1"      type="text" style="CenteredLabelText"/>
     775            </object>
     776            <object type="image" name="teamBox4t2" size="0 65 100% 100%-50" hidden="true">
     777                <object type="text" name="teamNameHeading4t2" size="15 5 100% 100%" style="LeftTabLabelText"/>
     778                <object size="0 30 100% 100%">
     779                    <repeat count="8">
     780                        <object type="image" name="playerBox4t2p[n]" size="10 0 10 30" hidden="true">
     781                            <object name="playerColourBox4t2p[n]" type="image" size="10 4 30 24"/>
     782                            <object name="playerName4t2p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     783                            <object name="civIcon4t2p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     784                            <object name="exchangedFoodt2p[n]"    type="text"  style="CenteredLabelText"/>
     785                            <object name="exchangedWoodt2p[n]"    type="text"  style="CenteredLabelText"/>
     786                            <object name="exchangedStonet2p[n]"   type="text"  style="CenteredLabelText"/>
     787                            <object name="exchangedMetalt2p[n]"   type="text"  style="CenteredLabelText"/>
     788                            <object name="barterEfficiencyt2p[n]" type="text"  style="CenteredLabelText"/>
     789                            <object name="tradeIncomet2p[n]"      type="text"  style="CenteredLabelText"/>
     790                        </object>
     791                    </repeat>
     792                </object>
     793                <object name="teamHeading4t2"     type="text" style="LeftTabLabelText"/>
     794                <object name="exchangedFoodt2"    type="text" style="CenteredLabelText"/>
     795                <object name="exchangedWoodt2"    type="text" style="CenteredLabelText"/>
     796                <object name="exchangedStonet2"   type="text" style="CenteredLabelText"/>
     797                <object name="exchangedMetalt2"   type="text" style="CenteredLabelText"/>
     798                <object name="barterEfficiencyt2" type="text" style="CenteredLabelText"/>
     799                <object name="tradeIncomet2"      type="text" style="CenteredLabelText"/>
     800            </object>
     801            <object type="image" name="teamBox4t3" size="0 65 100% 100%-50" hidden="true">
     802                <object type="text" name="teamNameHeading4t3" size="15 5 100% 100%" style="LeftTabLabelText"/>
     803                <object size="0 30 100% 100%">
     804                    <repeat count="8">
     805                        <object type="image" name="playerBox4t3p[n]" size="10 0 10 30" hidden="true">
     806                            <object name="playerColourBox4t3p[n]" type="image" size="10 4 30 24"/>
     807                            <object name="playerName4t3p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     808                            <object name="civIcon4t3p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     809                            <object name="exchangedFoodt3p[n]"    type="text"  style="CenteredLabelText"/>
     810                            <object name="exchangedWoodt3p[n]"    type="text"  style="CenteredLabelText"/>
     811                            <object name="exchangedStonet3p[n]"   type="text"  style="CenteredLabelText"/>
     812                            <object name="exchangedMetalt3p[n]"   type="text"  style="CenteredLabelText"/>
     813                            <object name="barterEfficiencyt3p[n]" type="text"  style="CenteredLabelText"/>
     814                            <object name="tradeIncomet3p[n]"      type="text"  style="CenteredLabelText"/>
     815                        </object>
     816                    </repeat>
     817                </object>
     818                <object name="teamHeading4t3"     type="text" style="LeftTabLabelText"/>
     819                <object name="exchangedFoodt3"    type="text" style="CenteredLabelText"/>
     820                <object name="exchangedWoodt3"    type="text" style="CenteredLabelText"/>
     821                <object name="exchangedStonet3"   type="text" style="CenteredLabelText"/>
     822                <object name="exchangedMetalt3"   type="text" style="CenteredLabelText"/>
     823                <object name="barterEfficiencyt3" type="text" style="CenteredLabelText"/>
     824                <object name="tradeIncomet3"      type="text" style="CenteredLabelText"/>
     825            </object>
     826           
     827            <object type="image" name="noTeamsBox4" size="0 65 100% 100%-50" hidden="true">
    271828                <repeat count="8">
    272829                    <object type="image" name="playerBox4[n]" size="10 0 10 30" hidden="true">
    273                         <object name="playerColourBox4[n]"      type="image" size="10 4 30 24" />
    274                         <object name="playerName4[n]"           type="text"  style="LeftLabelText" size="40 2 208 100%" />
    275                         <object name="civIcon4[n]"              type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
    276                         <object name="exchangedFood[n]"         type="text" style="CenteredLabelText"/>
    277                         <object name="exchangedWood[n]"         type="text" style="CenteredLabelText"/>
    278                         <object name="exchangedStone[n]"         type="text" style="CenteredLabelText"/>
    279                         <object name="exchangedMetal[n]"         type="text" style="CenteredLabelText"/>
    280                         <object name="barterEfficiency[n]"      type="text" style="CenteredLabelText"/>
    281                         <object name="tradeIncome[n]"           type="text" style="CenteredLabelText"/>
     830                        <object name="playerColourBox4[n]" type="image" size="10 4 30 24"/>
     831                        <object name="playerName4[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     832                        <object name="civIcon4[n]"         type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
     833                        <object name="exchangedFood[n]"    type="text" style="CenteredLabelText"/>
     834                        <object name="exchangedWood[n]"    type="text" style="CenteredLabelText"/>
     835                        <object name="exchangedStone[n]"   type="text" style="CenteredLabelText"/>
     836                        <object name="exchangedMetal[n]"   type="text" style="CenteredLabelText"/>
     837                        <object name="barterEfficiency[n]" type="text" style="CenteredLabelText"/>
     838                        <object name="tradeIncome[n]"      type="text" style="CenteredLabelText"/>
    282839                    </object>
    283840                </repeat>
    284841            </object>
     842        </object>
    285843
     844        <object name="miscPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58" hidden="true">
     845
     846            <object size="0 0 100% 100%-50">
     847                <object name="playerName5Heading" type="text" style="LeftTabLabelText">
     848                    Player name
     849                </object>
     850                <object name="vegetarianRatioHeading" type="text" style="CenteredTabLabelText">
     851                    Vegetarian&#10;ratio
     852                </object>
     853                <object name="feminisationHeading" type="text" style="CenteredTabLabelText">
     854                    Feminisation
     855                </object>
     856                <object name="killDeathRatioHeading" type="text" style="CenteredTabLabelText">
     857                    Kill / Death&#10;ratio
     858                </object>
     859                <object name="mapExplorationHeading" type="text" style="CenteredTabLabelText">
     860                    Map&#10;exploration
     861                </object>
     862            </object>
     863           
     864            <object type="image" name="teamBox5t0" size="0 65 100% 100%-50" hidden="true">
     865                <object type="text" name="teamNameHeading5t0" size="15 5 100% 100%" style="LeftTabLabelText"/>
     866                <object size="0 30 100% 100%">
     867                    <repeat count="8">
     868                        <object type="image" name="playerBox5t0p[n]" size="10 0 10 30" hidden="true">
     869                            <object name="playerColourBox5t0p[n]" type="image" size="10 4 30 24"/>
     870                            <object name="playerName5t0p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     871                            <object name="civIcon5t0p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     872                            <object name="vegetarianRatiot0p[n]"  type="text"  style="CenteredLabelText"/>
     873                            <object name="feminisationt0p[n]"     type="text"  style="CenteredLabelText"/>
     874                            <object name="killDeathRatiot0p[n]"   type="text"  style="CenteredLabelText"/>
     875                            <object name="mapExplorationt0p[n]"   type="text"  style="CenteredLabelText"/>
     876                        </object>   
     877                    </repeat>
     878                </object>
     879                <object name="teamHeading5t0"    type="text" style="LeftTabLabelText"/>
     880                <object name="vegetarianRatiot0" type="text" style="CenteredLabelText"/>
     881                <object name="feminisationt0"    type="text" style="CenteredLabelText"/>
     882                <object name="killDeathRatiot0"  type="text" style="CenteredLabelText"/>
     883                <object name="mapExplorationt0"  type="text" style="CenteredLabelText"/>
     884            </object>
     885            <object type="image" name="teamBox5t1" size="0 65 100% 100%-50" hidden="true">
     886                <object type="text" name="teamNameHeading5t1" size="15 5 100% 100%" style="LeftTabLabelText"/>
     887                <object size="0 30 100% 100%">
     888                    <repeat count="8">
     889                        <object type="image" name="playerBox5t1p[n]" size="10 0 10 30" hidden="true">
     890                            <object name="playerColourBox5t1p[n]" type="image" size="10 4 30 24"/>
     891                            <object name="playerName5t1p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     892                            <object name="civIcon5t1p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     893                            <object name="vegetarianRatiot1p[n]"  type="text"  style="CenteredLabelText"/>
     894                            <object name="feminisationt1p[n]"     type="text"  style="CenteredLabelText"/>
     895                            <object name="killDeathRatiot1p[n]"   type="text"  style="CenteredLabelText"/>
     896                            <object name="mapExplorationt1p[n]"   type="text"  style="CenteredLabelText"/>
     897                        </object>   
     898                    </repeat>
     899                </object>
     900                <object name="teamHeading5t1"    type="text" style="LeftTabLabelText"/>
     901                <object name="vegetarianRatiot1" type="text" style="CenteredLabelText"/>
     902                <object name="feminisationt1"    type="text" style="CenteredLabelText"/>
     903                <object name="killDeathRatiot1"  type="text" style="CenteredLabelText"/>
     904                <object name="mapExplorationt1"  type="text" style="CenteredLabelText"/>
     905            </object>
     906            <object type="image" name="teamBox5t2" size="0 65 100% 100%-50" hidden="true">
     907                <object type="text" name="teamNameHeading5t2" size="15 5 100% 100%" style="LeftTabLabelText"/>
     908                <object size="0 30 100% 100%">
     909                    <repeat count="8">
     910                        <object type="image" name="playerBox5t2p[n]" size="10 0 10 30" hidden="true">
     911                            <object name="playerColourBox5t2p[n]" type="image" size="10 4 30 24"/>
     912                            <object name="playerName5t2p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     913                            <object name="civIcon5t2p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     914                            <object name="vegetarianRatiot2p[n]"  type="text"  style="CenteredLabelText"/>
     915                            <object name="feminisationt2p[n]"     type="text"  style="CenteredLabelText"/>
     916                            <object name="killDeathRatiot2p[n]"   type="text"  style="CenteredLabelText"/>
     917                            <object name="mapExplorationt2p[n]"   type="text"  style="CenteredLabelText"/>
     918                        </object>   
     919                    </repeat>
     920                </object>
     921                <object name="teamHeading5t2"    type="text" style="LeftTabLabelText"/>
     922                <object name="vegetarianRatiot2" type="text" style="CenteredLabelText"/>
     923                <object name="feminisationt2"    type="text" style="CenteredLabelText"/>
     924                <object name="killDeathRatiot2"  type="text" style="CenteredLabelText"/>
     925                <object name="mapExplorationt2"  type="text" style="CenteredLabelText"/>
     926            </object>
     927            <object type="image" name="teamBox5t3" size="0 65 100% 100%-50" hidden="true">
     928                <object type="text" name="teamNameHeading5t3" size="15 5 100% 100%" style="LeftTabLabelText"/>
     929                <object size="0 30 100% 100%">
     930                    <repeat count="8">
     931                        <object type="image" name="playerBox5t3p[n]" size="10 0 10 30" hidden="true">
     932                            <object name="playerColourBox5t3p[n]" type="image" size="10 4 30 24"/>
     933                            <object name="playerName5t3p[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     934                            <object name="civIcon5t3p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     935                            <object name="vegetarianRatiot3p[n]"  type="text"  style="CenteredLabelText"/>
     936                            <object name="feminisationt3p[n]"     type="text"  style="CenteredLabelText"/>
     937                            <object name="killDeathRatiot3p[n]"   type="text"  style="CenteredLabelText"/>
     938                            <object name="mapExplorationt3p[n]"   type="text"  style="CenteredLabelText"/>
     939                        </object>   
     940                    </repeat>
     941                </object>
     942                <object name="teamHeading5t3"    type="text" style="LeftTabLabelText"/>
     943                <object name="vegetarianRatiot3" type="text" style="CenteredLabelText"/>
     944                <object name="feminisationt3"    type="text" style="CenteredLabelText"/>
     945                <object name="killDeathRatiot3"  type="text" style="CenteredLabelText"/>
     946                <object name="mapExplorationt3"  type="text" style="CenteredLabelText"/>
     947            </object>
     948           
     949            <object type="image" name="noTeamsBox5" size="0 65 100% 100%-50" hidden="true">
     950                <repeat count="8">
     951                    <object type="image" name="playerBox5[n]" size="10 0 10 30" hidden="true">
     952                        <object name="playerColourBox5[n]" type="image" size="10 4 30 24"/>
     953                        <object name="playerName5[n]"      type="text"  size="40 2 208 100%" style="LeftLabelText"/>
     954                        <object name="civIcon5[n]"         type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
     955                        <object name="vegetarianRatio[n]"  type="text"  style="CenteredLabelText"/>
     956                        <object name="feminisation[n]"     type="text"  style="CenteredLabelText"/>
     957                        <object name="killDeathRatio[n]"   type="text"  style="CenteredLabelText"/>
     958                        <object name="mapExploration[n]"   type="text"  style="CenteredLabelText"/>
     959                    </object>   
     960                </repeat>
     961            </object>
    286962        </object>
    287 
     963       
    288964        <object type="button" style="StoneButton" size="100%-164 100%-52 100%-24 100%-24">
    289965            Continue
    290966            <action on="Press"><![CDATA[
  • binaries/data/mods/public/simulation/components/Foundation.js

     
    312312        // ----------------------------------------------------------------------
    313313       
    314314        var cmpPlayerStatisticsTracker = QueryOwnerInterface(this.entity, IID_StatisticsTracker);
    315         cmpPlayerStatisticsTracker.IncreaseConstructedBuildingsCounter();
    316 
    317         var cmpIdentity = Engine.QueryInterface(building, IID_Identity);
    318         if (cmpIdentity.GetClassesList().indexOf("CivCentre") != -1)
    319             cmpPlayerStatisticsTracker.IncreaseBuiltCivCentresCounter();
     315        cmpPlayerStatisticsTracker.IncreaseConstructedBuildingsCounter(building);
    320316       
    321317        var cmpHealth = Engine.QueryInterface(this.entity, IID_Health);
    322318        var cmpBuildingHealth = Engine.QueryInterface(building, IID_Health);
  • binaries/data/mods/public/simulation/components/ProductionQueue.js

     
    559559        }
    560560
    561561        var cmpPlayerStatisticsTracker = QueryOwnerInterface(this.entity, IID_StatisticsTracker);
    562         cmpPlayerStatisticsTracker.IncreaseTrainedUnitsCounter();
     562        cmpPlayerStatisticsTracker.IncreaseTrainedUnitsCounter(ent);
    563563
    564564        // Play a sound, but only for the first in the batch (to avoid nasty phasing effects)
    565565        if (createdEnts.length == 0)
  • binaries/data/mods/public/simulation/components/StatisticsTracker.js

     
    66StatisticsTracker.prototype.Init = function()
    77{
    88    // units
    9     this.unitsTrained = 0;
    10     this.unitsLost = 0;
     9    this.unitsClasses = [
     10        "Infantry",
     11        "Worker",
     12        "Female",
     13        "Cavalry",
     14        "Champion",
     15        "Hero",
     16        "Ship"
     17    ]; 
     18    this.unitsTrained = {
     19        "Infantry": 0,
     20        "Worker": 0,
     21        "Female": 0,
     22        "Cavalry": 0,
     23        "Champion": 0,
     24        "Hero": 0,
     25        "Ship": 0,
     26        "total": 0
     27    };
     28    this.unitsLost = {
     29        "Infantry": 0,
     30        "Worker": 0,
     31        "Female": 0,
     32        "Cavalry": 0,
     33        "Champion": 0,
     34        "Hero": 0,
     35        "Ship": 0,
     36        "total": 0
     37    };
    1138    this.unitsLostValue = 0;
    12     this.enemyUnitsKilled = 0;
     39    this.enemyUnitsKilled = {
     40        "Infantry": 0,
     41        "Worker": 0,
     42        "Female": 0,
     43        "Cavalry": 0,
     44        "Champion": 0,
     45        "Hero": 0,
     46        "Ship": 0,
     47        "total": 0
     48    };
    1349    this.enemyUnitsKilledValue = 0;
    14     //buildings
    15     this.buildingsConstructed = 0;
    16     this.buildingsLost = 0;
     50    // buildings
     51    this.buildingsClasses = [
     52        "House",
     53        "Economic",
     54        "Outpost",
     55        "Military",
     56        "Fortress",
     57        "CivCentre",
     58        "Wonder"
     59    ];
     60    this.buildingsConstructed = {
     61        "House": 0,
     62        "Economic": 0,
     63        "Outpost": 0,
     64        "Military": 0,
     65        "Fortress": 0,
     66        "CivCentre": 0,
     67        "Wonder": 0,
     68        "total": 0 
     69    };
     70    this.buildingsLost = {
     71        "House": 0,
     72        "Economic": 0,
     73        "Outpost": 0,
     74        "Military": 0,
     75        "Fortress": 0,
     76        "CivCentre": 0,
     77        "Wonder": 0,
     78        "total": 0
     79        };
    1780    this.buildingsLostValue = 0;
    18     this.enemyBuildingsDestroyed = 0;
     81    this.enemyBuildingsDestroyed = {
     82        "House": 0,
     83        "Economic": 0,
     84        "Outpost": 0,
     85        "Military": 0,
     86        "Fortress": 0,
     87        "CivCentre": 0,
     88        "Wonder": 0,
     89        "total": 0
     90        };
    1991    this.enemyBuildingsDestroyedValue = 0;
    20     // civ centres
    21     this.civCentresBuilt = 0;
    22     this.enemyCivCentresDestroyed = 0;
    2392    // resources
    2493    this.resourcesGathered = {
    25             "food": 0,
    26             "wood": 0,
    27             "metal": 0,
    28             "stone": 0,
    29             "vegetarianFood": 0
     94        "food": 0,
     95        "wood": 0,
     96        "metal": 0,
     97        "stone": 0,
     98        "vegetarianFood": 0
    3099    };
    31100    this.resourcesUsed = {
    32             "food": 0,
    33             "wood": 0,
    34             "metal": 0,
    35             "stone": 0
     101        "food": 0,
     102        "wood": 0,
     103        "metal": 0,
     104        "stone": 0
    36105    };
    37106    this.resourcesSold = {
    38             "food": 0,
    39             "wood": 0,
    40             "metal": 0,
    41             "stone": 0
     107        "food": 0,
     108        "wood": 0,
     109        "metal": 0,
     110        "stone": 0
    42111    };
    43112    this.resourcesBought = {
    44             "food": 0,
    45             "wood": 0,
    46             "metal": 0,
    47             "stone": 0
     113        "food": 0,
     114        "wood": 0,
     115        "metal": 0,
     116        "stone": 0
    48117    };
    49118    this.tributesSent = 0;
    50119    this.tributesReceived = 0;
     
    65134        "buildingsLostValue": this.buildingsLostValue,
    66135        "enemyBuildingsDestroyed": this.enemyBuildingsDestroyed,
    67136        "enemyBuildingsDestroyedValue": this.enemyBuildingsDestroyedValue,
    68         "civCentresBuilt": this.civCentresBuilt,
    69         "enemyCivCentresDestroyed": this.enemyCivCentresDestroyed,
    70137        "resourcesGathered": this.resourcesGathered,
    71138        "resourcesUsed": this.resourcesUsed,
    72139        "resourcesSold": this.resourcesSold,
     
    79146    };
    80147};
    81148
    82 StatisticsTracker.prototype.IncreaseTrainedUnitsCounter = function()
     149/**
     150 * Increments counter associated with certain entity/counter and type of given entity.
     151 * @param entity The entity id
     152 * @param counter The name of the counter to increment (e.g. "unitsTrained")
     153 * @param type The type of the counter (e.g. "workers")
     154 */
     155StatisticsTracker.prototype.CounterIncrement = function(entity, counter, type)
    83156{
    84     return this.unitsTrained++;
     157    var classes = entity.GetClassesList();
     158    if (!classes)
     159        return;
     160    if (classes.indexOf(type) != -1)
     161        this[counter][type]++;
    85162};
    86163
    87 StatisticsTracker.prototype.IncreaseConstructedBuildingsCounter = function()
     164/**
     165 * Counts the total number of units trained as well as an individual count for
     166 * each unit type. Based on templates.
     167 * @param trainedUnit The unit that has been trained
     168 */
     169StatisticsTracker.prototype.IncreaseTrainedUnitsCounter = function(trainedUnit)
    88170{
    89     return this.buildingsConstructed++;
     171    var cmpUnitEntityIdentity = Engine.QueryInterface(trainedUnit, IID_Identity);
     172
     173    if (!cmpUnitEntityIdentity)
     174        return;
     175
     176    for each (var type in this.unitsClasses)
     177        this.CounterIncrement(cmpUnitEntityIdentity, "unitsTrained", type);
     178
     179    this.unitsTrained.total++;
    90180};
    91181
    92 StatisticsTracker.prototype.IncreaseBuiltCivCentresCounter = function()
     182/**
     183 * Counts the total number of buildings constructed as well as an individual count for
     184 * each building type. Based on templates.
     185 * @param constructedBuilding The building that has been constructed
     186 */
     187StatisticsTracker.prototype.IncreaseConstructedBuildingsCounter = function(constructedBuilding)
    93188{
    94     return this.civCentresBuilt++;
     189    var cmpBuildingEntityIdentity = Engine.QueryInterface(constructedBuilding, IID_Identity);
     190       
     191    if (!cmpBuildingEntityIdentity)
     192        return;
     193
     194    for each(var type in this.buildingsClasses)
     195        this.CounterIncrement(cmpBuildingEntityIdentity, "buildingsConstructed", type);
     196
     197    this.buildingsConstructed.total++;
    95198};
    96199
    97200StatisticsTracker.prototype.KilledEntity = function(targetEntity)
     
    99202    var cmpTargetEntityIdentity = Engine.QueryInterface(targetEntity, IID_Identity);
    100203    var cmpCost = Engine.QueryInterface(targetEntity, IID_Cost);
    101204    var costs = cmpCost.GetResourceCosts();
    102     if (cmpTargetEntityIdentity)
     205    if (!cmpTargetEntityIdentity)
     206        return;
     207
     208    var cmpFoundation = Engine.QueryInterface(targetEntity, IID_Foundation);
     209    // We want to deal only with real structures, not foundations
     210    var targetIsStructure = cmpTargetEntityIdentity.HasClass("Structure") && cmpFoundation == null;
     211    var targetIsDomesticAnimal = cmpTargetEntityIdentity.HasClass("Animal") && cmpTargetEntityIdentity.HasClass("Domestic");
     212    // Don't count domestic animals as units
     213    var targetIsUnit = cmpTargetEntityIdentity.HasClass("Unit") && !targetIsDomesticAnimal;
     214
     215    var cmpTargetOwnership = Engine.QueryInterface(targetEntity, IID_Ownership);
     216   
     217    // Don't increase counters if target player is gaia (player 0)
     218    if (cmpTargetOwnership.GetOwner() == 0)
     219        return;
     220
     221    if (targetIsUnit)
    103222    {
    104         var cmpFoundation = Engine.QueryInterface(targetEntity, IID_Foundation);
    105         // We want to deal only with real structures, not foundations
    106         var targetIsStructure = cmpTargetEntityIdentity.HasClass("Structure") && cmpFoundation == null;
    107         var targetIsDomesticAnimal = cmpTargetEntityIdentity.HasClass("Animal") && cmpTargetEntityIdentity.HasClass("Domestic");
    108         // Don't count domestic animals as units
    109         var targetIsUnit = cmpTargetEntityIdentity.HasClass("Unit") && !targetIsDomesticAnimal;
    110         var targetIsCivCentre = cmpTargetEntityIdentity.HasClass("CivCentre");
     223        for each (var type in this.unitsClasses)
     224            this.CounterIncrement(cmpTargetEntityIdentity, "enemyUnitsKilled", type);
    111225
    112         var cmpTargetOwnership = Engine.QueryInterface(targetEntity, IID_Ownership);
    113        
    114         // Don't increase counters if target player is gaia (player 0)
    115         if (cmpTargetOwnership.GetOwner() != 0)
    116         {
    117             if (targetIsUnit)
    118             {
    119                 this.enemyUnitsKilled++;
    120                 for (var r in costs)
    121                 {
    122                     this.enemyUnitsKilledValue += costs[r];
    123                 }
    124             }   
    125             if (targetIsStructure)
    126             {
    127                 this.enemyBuildingsDestroyed++;
    128                 for (var r in costs)
    129                 {
    130                     this.enemyBuildingsDestroyedValue += costs[r];
    131                 }
    132             }
    133             if (targetIsCivCentre && targetIsStructure)
    134                 this.enemyCivCentresDestroyed++;
    135         }
     226        this.enemyUnitsKilled.total++;
     227       
     228        for each (var cost in costs)
     229            this.enemyUnitsKilledValue += cost;
     230    }   
     231    if (targetIsStructure)
     232    {
     233        for each (var type in this.buildingsClasses)
     234            this.CounterIncrement(cmpTargetEntityIdentity, "enemyBuildingsDestroyed", type);
     235
     236        this.enemyBuildingsDestroyed.total++;
     237       
     238        for each (var cost in costs)
     239            this.enemyBuildingsDestroyedValue += cost;
    136240    }
    137241};
    138242
     
    141245    var cmpLostEntityIdentity = Engine.QueryInterface(lostEntity, IID_Identity);
    142246    var cmpCost = Engine.QueryInterface(lostEntity, IID_Cost);
    143247    var costs = cmpCost.GetResourceCosts();
    144     if (cmpLostEntityIdentity)
     248    if (!cmpLostEntityIdentity)
     249        return;
     250   
     251    var cmpFoundation = Engine.QueryInterface(lostEntity, IID_Foundation);
     252    // We want to deal only with real structures, not foundations
     253    var lostEntityIsStructure = cmpLostEntityIdentity.HasClass("Structure") && cmpFoundation == null;
     254    var lostEntityIsDomesticAnimal = cmpLostEntityIdentity.HasClass("Animal") && cmpLostEntityIdentity.HasClass("Domestic");
     255    // Don't count domestic animals as units
     256    var lostEntityIsUnit = cmpLostEntityIdentity.HasClass("Unit") && !lostEntityIsDomesticAnimal;
     257
     258    if (lostEntityIsUnit)
    145259    {
    146         var cmpFoundation = Engine.QueryInterface(lostEntity, IID_Foundation);
    147         // We want to deal only with real structures, not foundations
    148         var lostEntityIsStructure = cmpLostEntityIdentity.HasClass("Structure") && cmpFoundation == null;
    149         var lostEntityIsDomesticAnimal = cmpLostEntityIdentity.HasClass("Animal") && cmpLostEntityIdentity.HasClass("Domestic");
    150         // Don't count domestic animals as units
    151         var lostEntityIsUnit = cmpLostEntityIdentity.HasClass("Unit") && !lostEntityIsDomesticAnimal;
     260        for each (var type in this.unitsClasses)
     261            this.CounterIncrement(cmpLostEntityIdentity, "unitsLost", type);
    152262
    153         if (lostEntityIsUnit)
    154         {
    155             this.unitsLost++;
    156             for (var r in costs)
    157             {
    158                 this.unitsLostValue += costs[r];
    159             }   
    160         }   
    161         if (lostEntityIsStructure)
    162         {
    163             this.buildingsLost++;
    164             for (var r in costs)
    165             {
    166                 this.buildingsLostValue += costs[r];
    167             }
    168         }
     263        this.unitsLost.total++;
     264       
     265        for each (var cost in costs)
     266            this.unitsLostValue += cost;   
     267    }   
     268    if (lostEntityIsStructure)
     269    {
     270        for each (var type in this.buildingsClasses)
     271            this.CounterIncrement(cmpLostEntityIdentity, "buildingsLost", type);
     272
     273        this.buildingsLost.total++;
     274       
     275        for each (var cost in costs)
     276            this.buildingsLostValue += cost;
    169277    }
    170278};
    171279
     
    179287    this.resourcesGathered[type] += amount;
    180288   
    181289    if (type == "food" && (specificType == "fruit" || specificType == "grain"))
    182         this.resourcesGathered["vegetarianFood"] += amount;
     290        this.resourcesGathered.vegetarianFood += amount;
    183291};
    184292
    185293/**
     
    193301
    194302StatisticsTracker.prototype.IncreaseTreasuresCollectedCounter = function()
    195303{
    196     return this.treasuresCollected++;
     304    this.treasuresCollected++;
    197305};
    198306
    199307StatisticsTracker.prototype.IncreaseResourcesSoldCounter = function(type, amount)
    200308{
    201309    this.resourcesSold[type] += amount;
    202 }
     310};
    203311
    204312StatisticsTracker.prototype.IncreaseResourcesBoughtCounter = function(type, amount)
    205313{
    206314    this.resourcesBought[type] += amount;
    207 }
     315};
    208316
    209317StatisticsTracker.prototype.IncreaseTributesSentCounter = function(amount)
    210318{
    211319    this.tributesSent += amount;
    212 }
     320};
    213321
    214322StatisticsTracker.prototype.IncreaseTributesReceivedCounter = function(amount)
    215323{
    216324    this.tributesReceived += amount;
    217 }
     325};
    218326
    219327StatisticsTracker.prototype.IncreaseTradeIncomeCounter = function(amount)
    220328{
    221329    this.tradeIncome += amount;
    222 }
     330};
    223331
    224332StatisticsTracker.prototype.GetPercentMapExplored = function()
    225333{