Ticket #2952: 2952.4.diff

File 2952.4.diff, 120.7 KB (added by trompetin17, 9 years ago)
  • binaries/data/mods/public/gui/summary/countersHelper.js

     
     1// FUNCTIONS FOR CALCULATING SCORES
     2var teamMiscHelperData = [];
     3
     4function resetDataHelpers()
     5{
     6    teamMiscHelperData = [];
     7}
     8
     9function updateCountersPlayer(playerState, counters, idGUI)
     10{
     11    for (var w in counters)
     12    {
     13        var fn = counters[w].fn;
     14        Engine.GetGUIObjectByName(idGUI + "[" + w + "]").caption = fn && fn(playerState, w);
     15    }
     16}
     17
     18function updateTeamCounters(counters, fn)
     19{
     20    if (g_teams && fn)
     21        fn(counters);
     22}
     23
     24function calculateEconomyScore(playerState, position)
     25{
     26    var total = 0
     27    for each (var res in playerState.statistics.resourcesGathered)
     28        total += res;
     29
     30    return Math.round(total / 10);
     31}
     32
     33function calculateMilitaryScore(playerState, position)
     34{
     35    return Math.round((playerState.statistics.enemyUnitsKilledValue +
     36            playerState.statistics.enemyBuildingsDestroyedValue) / 10);
     37}
     38
     39function calculateExplorationScore(playerState, position)
     40{
     41    return playerState.statistics.percentMapExplored * 10;
     42}
     43
     44function calculateScoreTotal(playerState, position)
     45{
     46    return calculateEconomyScore(playerState) + calculateMilitaryScore(playerState)
     47            + calculateExplorationScore(playerState);
     48}
     49
     50function calculateScoreTeam(counters)
     51{
     52    for (var t in g_teams)
     53    {
     54        if (t == -1)
     55            continue;
     56
     57        for (var w in counters)
     58        {
     59            var total = 0;
     60            for (var p = 0; p < g_teams[t]; ++p)
     61                total += (+Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + w + "]").caption);
     62
     63            Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = total;
     64        }
     65    }
     66}
     67
     68function calculateBuildings(playerState, position)
     69{
     70    var type = BUILDINGS_TYPES[position];
     71    return TRAINED_COLOR + playerState.statistics.buildingsConstructed[type] + '[/color] / ' +
     72                LOST_COLOR + playerState.statistics.buildingsLost[type] + '[/color] / ' +
     73                KILLED_COLOR + playerState.statistics.enemyBuildingsDestroyed[type] + '[/color]';
     74}
     75
     76function calculateColorsTeam(counters)
     77{
     78    for (var t in g_teams)
     79    {
     80        if (t == -1)
     81            continue;
     82
     83        for (var w in counters)
     84        {
     85            var total = {
     86                c : 0,
     87                l : 0,
     88                d : 0
     89            };
     90            for (var p = 0; p < g_teams[t]; ++p)
     91            {
     92                var caption = Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + w + "]").caption;
     93                // clean [Color=""], [/Color] and white space for make the sum more easy
     94                caption = caption.replace(/\[([\w\' \\\"\/\=]*)\]|\s/g, "");
     95
     96                var splitCaption = caption.split("/");
     97
     98                total.c += (+splitCaption[0]);
     99                total.l += (+splitCaption[1]);
     100                total.d += (+splitCaption[2]);
     101            }
     102            var teamTotal = TRAINED_COLOR + total.c + '[/color] / ' +
     103                LOST_COLOR + total.l + '[/color] / ' + KILLED_COLOR + total.d + '[/color]';
     104
     105            Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = teamTotal;
     106        }
     107    }
     108}
     109
     110function calculateUnits(playerState, position)
     111{
     112    var type = UNITS_TYPES[position];
     113    return TRAINED_COLOR + playerState.statistics.unitsTrained[type] + '[/color] / ' +
     114                LOST_COLOR + playerState.statistics.unitsLost[type] + '[/color] / ' +
     115                KILLED_COLOR + playerState.statistics.enemyUnitsKilled[type] + '[/color]';
     116}
     117
     118function calculateResources(playerState, position)
     119{
     120    var type = RESOURCES_TYPES[position];
     121    return INCOME_COLOR + playerState.statistics.resourcesGathered[type] + '[/color] / ' +
     122                OUTCOME_COLOR + (playerState.statistics.resourcesUsed[type] - playerState.statistics.resourcesSold[type]) + '[/color]';
     123}
     124
     125function calculateTotalResources(playerState, position)
     126{
     127    var totalGathered = 0;
     128    var totalUsed = 0;
     129
     130    for each (var type in RESOURCES_TYPES)
     131    {
     132        totalGathered += playerState.statistics.resourcesGathered[type];
     133        totalUsed += playerState.statistics.resourcesUsed[type] - playerState.statistics.resourcesSold[type];
     134    }
     135
     136    return INCOME_COLOR + totalGathered + '[/color] / ' + OUTCOME_COLOR + totalUsed + '[/color]';
     137}
     138
     139function calculateTreasureCollected(playerState, position)
     140{
     141    return playerState.statistics.treasuresCollected;
     142}
     143
     144function calculateTributeSent(playerState, position)
     145{
     146    return INCOME_COLOR + playerState.statistics.tributesSent + "[/color] / " + OUTCOME_COLOR + playerState.statistics.tributesReceived + "[/color]";
     147}
     148
     149function calculateResourcesTeam(counters)
     150{
     151    for (var t in g_teams)
     152    {
     153        if (t == -1)
     154            continue;
     155
     156        for (var w in counters)
     157        {
     158            var teamTotal = "undefined";
     159
     160            var total = {
     161                i : 0,
     162                o : 0
     163            };
     164            for (var p = 0; p < g_teams[t]; ++p)
     165            {
     166                var caption = Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + w + "]").caption;
     167                // clean [Color=""], [/Color] and white space for make the sum more easy
     168                caption = caption.replace(/\[([\w\' \\\"\/\=]*)\]|\s/g, "");
     169
     170                if (w == 5)
     171                    total.i += (+caption);
     172                else
     173                {
     174                    var splitCaption = caption.split("/");
     175
     176                    total.i += (+splitCaption[0]);
     177                    total.o += (+splitCaption[1]);
     178                }
     179            }
     180
     181            if (w == 5)
     182                teamTotal = total.i;
     183            else
     184                teamTotal = INCOME_COLOR + total.i + "[/color] / " + OUTCOME_COLOR + total.o + "[/color]";
     185
     186            Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = teamTotal;
     187        }
     188    }
     189}
     190
     191function calculateResourceExchanged(playerState, position)
     192{
     193    var type = RESOURCES_TYPES[position];
     194    return INCOME_COLOR + '+' + playerState.statistics.resourcesBought[type] + '[/color] ' +
     195                OUTCOME_COLOR + '-' + playerState.statistics.resourcesSold[type] + '[/color]';
     196}
     197
     198function calculateBatteryEfficiency(playerState, position)
     199{
     200    var totalBought = 0;
     201    for each (var boughtAmount in playerState.statistics.resourcesBought)
     202        totalBought += boughtAmount;
     203    var totalSold = 0;
     204    for each (var soldAmount in playerState.statistics.resourcesSold)
     205        totalSold += soldAmount;
     206
     207    return Math.floor(totalSold > 0 ? (totalBought / totalSold) * 100 : 0) + "%";
     208}
     209
     210function calculateTradeIncome(playerState, position)
     211{
     212    return playerState.statistics.tradeIncome;
     213}
     214
     215function calculateMarketTeam(counters)
     216{
     217    for (var t in g_teams)
     218    {
     219        if (t == -1)
     220            continue;
     221
     222        for (var w in counters)
     223        {
     224            var teamTotal = "undefined";
     225
     226            var total = {
     227                i : 0,
     228                o : 0
     229            };
     230            for (var p = 0; p < g_teams[t]; ++p)
     231            {
     232                var caption = Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + w + "]").caption;
     233                // clean [Color=""], [/Color], white space, + and % for make the sum more easy
     234                caption = caption.replace(/\[([\w\' \\\"\/\=]*)\]|\s|\+|\%/g, "");
     235
     236                if (w >= 4)
     237                    total.i += (+caption);
     238                else
     239                {
     240                    var splitCaption = caption.split("-");
     241                    total.i += (+splitCaption[0]);
     242                    total.o += (+splitCaption[1]);
     243                }
     244            }
     245
     246            if (w >= 4)
     247                teamTotal = total.i +(w == 4 ? "%" : "");
     248            else
     249                teamTotal = INCOME_COLOR + '+' + total.i + '[/color] ' + OUTCOME_COLOR + '-' + total.o + '[/color]';
     250
     251            Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = teamTotal;
     252        }
     253    }
     254}
     255
     256function calculateVegetarianRatio(playerState, position)
     257{
     258    if (!teamMiscHelperData[playerState.team])
     259        teamMiscHelperData[playerState.team] = [];
     260    if (!teamMiscHelperData[playerState.team][position])
     261        teamMiscHelperData[playerState.team][position] = {"food": 0, "vegetarianFood": 0};
     262
     263    if (playerState.statistics.resourcesGathered.vegetarianFood && playerState.statistics.resourcesGathered.food)
     264    {
     265        teamMiscHelperData[playerState.team][position].food += playerState.statistics.resourcesGathered.food;
     266        teamMiscHelperData[playerState.team][position].vegetarianFood += playerState.statistics.resourcesGathered.vegetarianFood;
     267        return Math.floor((playerState.statistics.resourcesGathered.vegetarianFood / playerState.statistics.resourcesGathered.food) * 100) + "%";
     268    }
     269    else
     270        return 0 + "%";
     271}
     272
     273function calculateFeminisation(playerState, position)
     274{
     275    if (!teamMiscHelperData[playerState.team])
     276        teamMiscHelperData[playerState.team] = [];
     277    if (!teamMiscHelperData[playerState.team][position])
     278        teamMiscHelperData[playerState.team][position] = {"Female": 0, "Worker": 0};
     279
     280    if (playerState.statistics.unitsTrained.Worker && playerState.statistics.unitsTrained.Female)
     281    {
     282        teamMiscHelperData[playerState.team][position].Female = playerState.statistics.unitsTrained.Female;
     283        teamMiscHelperData[playerState.team][position].Worker = playerState.statistics.unitsTrained.Worker;
     284        return Math.floor((playerState.statistics.unitsTrained.Female / playerState.statistics.unitsTrained.Worker) * 100) + "%";
     285    }
     286    else
     287        return 0 + "%";
     288}
     289
     290function calculateKillDeathRatio(playerState, position)
     291{
     292    if (!teamMiscHelperData[playerState.team])
     293        teamMiscHelperData[playerState.team] = [];
     294    if (!teamMiscHelperData[playerState.team][position])
     295        teamMiscHelperData[playerState.team][position] = {"enemyUnitsKilled": 0, "unitsLost": 0};
     296
     297    teamMiscHelperData[playerState.team][position].enemyUnitsKilled = playerState.statistics.enemyUnitsKilled.total;
     298    teamMiscHelperData[playerState.team][position].unitsLost = playerState.statistics.unitsLost.total;
     299
     300    if (!playerState.statistics.enemyUnitsKilled.total)
     301        return DEFAULT_DECIMAL;
     302    if (!playerState.statistics.unitsLost.total)    // and enemyUnitsKilled.total > 0
     303        return INFINITE_SYMBOL; // infinity symbol
     304
     305    return Math.round((playerState.statistics.enemyUnitsKilled.total / playerState.statistics.unitsLost.total)*100)/100;
     306}
     307
     308function calculateMapExploration(playerState, position)
     309{
     310    if (!teamMiscHelperData[playerState.team])
     311        teamMiscHelperData[playerState.team] = [];
     312
     313    teamMiscHelperData[playerState.team][position] = playerState.statistics.teamPercentMapExplored;
     314    return playerState.statistics.percentMapExplored + "%";
     315}
     316
     317function calculateMiscellaneous(counters)
     318{
     319    for (var t in g_teams)
     320    {
     321        if (t == -1)
     322            continue;
     323
     324        for (var w in counters)
     325        {
     326            var teamTotal = "undefined";
     327
     328            if (w == 0)
     329                teamTotal = (teamMiscHelperData[t][w].food == 0 ? "0" : Math.floor((teamMiscHelperData[t][w].vegetarianFood / teamMiscHelperData[t][w].food) * 100)) + "%";
     330            else if (w == 1)
     331                teamTotal = (teamMiscHelperData[t][w].Worker == 0 ? "0" : Math.floor((teamMiscHelperData[t][w].Female / teamMiscHelperData[t][w].Worker) * 100)) + "%";
     332            else if (w == 2)
     333            {
     334                if (!teamMiscHelperData[t][w].enemyUnitsKilled)
     335                    teamTotal = DEFAULT_DECIMAL;
     336                else if (!teamMiscHelperData[t][w].unitsLost)   // and enemyUnitsKilled.total > 0
     337                    teamTotal = INFINITE_SYMBOL; // infinity symbol
     338                else
     339                    teamTotal = Math.round((teamMiscHelperData[t][w].enemyUnitsKilled / teamMiscHelperData[t][w].unitsLost)*100)/100;
     340            }
     341            else if (w == 3)
     342                teamTotal = teamMiscHelperData[t][w] + "%";
     343
     344            Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]").caption = teamTotal;
     345        }
     346    }
     347}
     348 No newline at end of file
  • binaries/data/mods/public/gui/summary/layoutsHelper.js

     
     1var panelsData = [
     2    {   // Scores panel
     3        "headings": [   // headings on score panel
     4            { "caption": "Player name","yStart": 26, "width": 200 },
     5            { "caption": "Economy score","yStart": 16, "width": 100 },
     6            { "caption": "Military score","yStart": 16, "width": 100 },
     7            { "caption": "Exploration score","yStart": 16, "width": 100 },
     8            { "caption": "Total score","yStart": 16, "width": 100 }
     9        ],
     10        "titleHeadings": [],
     11        "counters": [   // counters on score panel
     12            { "width": 100, "fn": calculateEconomyScore },
     13            { "width": 100, "fn": calculateMilitaryScore },
     14            { "width": 100, "fn": calculateExplorationScore },
     15            { "width": 100, "fn": calculateScoreTotal}
     16        ],
     17        "teamCounterFn": calculateScoreTeam
     18    },
     19    {   // buildings panel
     20        "headings": [   // headings on buildings panel
     21            { "caption": "Player name", "yStart": 26, "width": 200 },
     22            { "caption": "Total", "yStart": 34, "width": 105 },
     23            { "caption": "Houses", "yStart": 34, "width": 85 },
     24            { "caption": "Economic", "yStart": 34, "width": 85 },
     25            { "caption": "Outposts", "yStart": 34, "width": 85 },
     26            { "caption": "Military", "yStart": 34, "width": 85 },
     27            { "caption": "Fortresses", "yStart": 34, "width": 85 },
     28            { "caption": "Civ centers", "yStart": 34, "width": 85 },
     29            { "caption": "Wonders", "yStart": 34, "width": 85 }
     30        ],
     31        "titleHeadings": [
     32            { "caption": "Buildings Statistics (Constructed / Lost / Destroyed)", "yStart": 16, "width": (85 * 7 + 105) },  // width = 735
     33        ],
     34        "counters": [   // counters on buildings panel
     35            {"width": 105, "fn": calculateBuildings},
     36            {"width": 85, "fn": calculateBuildings},
     37            {"width": 85, "fn": calculateBuildings},
     38            {"width": 85, "fn": calculateBuildings},
     39            {"width": 85, "fn": calculateBuildings},
     40            {"width": 85, "fn": calculateBuildings},
     41            {"width": 85, "fn": calculateBuildings},
     42            {"width": 85, "fn": calculateBuildings}
     43        ],
     44        "teamCounterFn": calculateColorsTeam
     45    },
     46    {   // units panel
     47        "headings": [   // headings on units panel
     48            { "caption": "Player name", "yStart": 26, "width": 200 },
     49            { "caption": "Total", "yStart": 34, "width": 120 },
     50            { "caption": "Infantry", "yStart": 34, "width": 100 },
     51            { "caption": "Worker", "yStart": 34, "width": 100 },
     52            { "caption": "Cavalry", "yStart": 34, "width": 100 },
     53            { "caption": "Champion", "yStart": 34, "width": 100 },
     54            { "caption": "Heroes", "yStart": 34, "width": 100 },
     55            { "caption": "Navy", "yStart": 34, "width": 100 }
     56        ],
     57        "titleHeadings": [
     58            { "caption": "Units Statistics (Trained / Lost / Killed)", "yStart": 16, "width": (100 * 6 + 120) },    // width = 720
     59        ],
     60        "counters": [   // counters on units panel
     61            {"width": 120, "fn": calculateUnits},
     62            {"width": 100, "fn": calculateUnits},
     63            {"width": 100, "fn": calculateUnits},
     64            {"width": 100, "fn": calculateUnits},
     65            {"width": 100, "fn": calculateUnits},
     66            {"width": 100, "fn": calculateUnits},
     67            {"width": 100, "fn": calculateUnits}
     68        ],
     69        "teamCounterFn": calculateColorsTeam
     70    },
     71    {   // resources panel
     72        "headings": [   // headings on resources panel
     73            { "caption": "Player name", "yStart": 26, "width": 200 },
     74            { "caption": "Food", "yStart": 34, "width": 100 },
     75            { "caption": "Wood", "yStart": 34, "width": 100 },
     76            { "caption": "Stone", "yStart": 34, "width": 100 },
     77            { "caption": "Metal", "yStart": 34, "width": 100 },
     78            { "caption": "Total", "yStart": 34, "width": 110 },
     79            { "caption": "Treasures collected", "yStart": 16, "width": 100 },
     80            { "caption": "Tributes (Sent / Received)", "yStart": 16, "width": 121 }
     81        ],
     82        "titleHeadings": [
     83            { "caption": "Resource Statistics (Gathered / Used)", "yStart": 16, "width": (100 * 4 + 110) }, // width = 510
     84        ],
     85        "counters": [   // counters on resources panel
     86            {"width": 100, "fn": calculateResources},
     87            {"width": 100, "fn": calculateResources},
     88            {"width": 100, "fn": calculateResources},
     89            {"width": 100, "fn": calculateResources},
     90            {"width": 110, "fn": calculateTotalResources},
     91            {"width": 100, "fn": calculateTreasureCollected},
     92            {"width": 121, "fn": calculateTributeSent}
     93        ],
     94        "teamCounterFn": calculateResourcesTeam
     95    },
     96    {   // market panel
     97        "headings": [   // headings on market panel
     98            { "caption": "Player name", "yStart": 26, "width": 200 },
     99            { "caption": "Food exchanged", "yStart": 16, "width": 100 },
     100            { "caption": "Wood exchanged", "yStart": 16, "width": 100 },
     101            { "caption": "Stone exchanged", "yStart": 16, "width": 100 },
     102            { "caption": "Metal exchanged", "yStart": 16, "width": 100 },
     103            { "caption": "Barter efficiency", "yStart": 16, "width": 100 },
     104            { "caption": "Trade income", "yStart": 16, "width": 100 }
     105        ],
     106        "titleHeadings": [],
     107        "counters": [   // counters on market panel
     108            {"width": 100, "fn": calculateResourceExchanged},
     109            {"width": 100, "fn": calculateResourceExchanged},
     110            {"width": 100, "fn": calculateResourceExchanged},
     111            {"width": 100, "fn": calculateResourceExchanged},
     112            {"width": 100, "fn": calculateBatteryEfficiency},
     113            {"width": 100, "fn": calculateTradeIncome}
     114        ],
     115        "teamCounterFn": calculateMarketTeam
     116    },
     117    {   // miscelanous panel
     118        "headings": [   // headings on miscelanous panel
     119            { "caption": "Player name", "yStart": 26, "width": 200 },
     120            { "caption": "Vegetarian\nratio", "yStart": 16, "width": 100 },
     121            { "caption": "Feminisation", "yStart": 26, "width": 100 },
     122            { "caption": "Kill / Death\nratio", "yStart": 16, "width": 100 },
     123            { "caption": "Map\nexploration", "yStart": 16, "width": 100 }
     124        ],
     125        "titleHeadings": [],
     126        "counters": [   // counters on miscelanous panel
     127            {"width": 100, "fn": calculateVegetarianRatio},
     128            {"width": 100, "fn": calculateFeminisation},
     129            {"width": 100, "fn": calculateKillDeathRatio},
     130            {"width": 100, "fn": calculateMapExploration}
     131        ],
     132        "teamCounterFn": calculateMiscellaneous
     133    }
     134];
     135
     136function resetGeneralPanel()
     137{
     138    Engine.GetGUIObjectByName("titleHeading").hidden = true;
     139    for (var h = 0; h < MAX_HEADINGTITLE; ++h)
     140    {
     141        var headerGUIName = "Heading[" + h + "]";
     142        Engine.GetGUIObjectByName(headerGUIName).hidden = true;
     143        for (var p = 0; p < MAX_SLOTS; ++p)
     144        {
     145            Engine.GetGUIObjectByName("valueData[" + p + "][" + h + "]").hidden = true;
     146            for (var t = 0; t < MAX_TEAMS; ++t)
     147            {
     148                Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + h + "]").hidden = true;
     149                Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + h + "]").hidden = true;
     150            }
     151        }
     152    }
     153}
     154
     155function updateGeneralPanelHeadings(headings)
     156{
     157    var left = 50;
     158    for (var h in headings)
     159    {
     160        var headerGUIName = "playerNameHeading";
     161        if (h > 0)
     162            headerGUIName = "Heading[" + (h - 1) + "]";
     163
     164        var headerGUI = Engine.GetGUIObjectByName(headerGUIName);
     165        headerGUI.caption = translate(headings[h].caption);
     166        headerGUI.size = left + " " + headings[h].yStart + " " + (left + headings[h].width) + " 100%";
     167        headerGUI.hidden = false;
     168
     169        if (headings[h].width < LONG_HEADING_WIDTH)
     170            left += headings[h].width;
     171    }
     172}
     173
     174function updateGeneralPanelTitles(titleHeadings)
     175{
     176    var left = 250;
     177    // for this implementation only one titleHeadings is going to support
     178    // TODO: Expand for more titleHeadings in summary.xml
     179    for (var th in titleHeadings)
     180    {
     181        var headerGUI = Engine.GetGUIObjectByName("titleHeading");
     182        headerGUI.caption = translate(titleHeadings[th].caption);
     183        headerGUI.size = left + " " + titleHeadings[th].yStart + " " + (left + titleHeadings[th].width) + " 100%";
     184        headerGUI.hidden = false;
     185        break;
     186    }
     187}
     188
     189function updateGeneralPanelCounter(counters)
     190{
     191    var rowPlayerObjectWidth = 0;
     192    var left = 0;
     193    for (var p = 0; p < MAX_SLOTS; ++p)
     194    {
     195        left = 240;
     196        var counterObject;
     197        for (var w in counters)
     198        {
     199            counterObject = Engine.GetGUIObjectByName("valueData[" + p + "][" + w + "]");
     200            counterObject.size = left + " 6 " + (left + counters[w].width) + " 100%";
     201            counterObject.hidden = false;
     202            left += counters[w].width;
     203        }
     204        if (rowPlayerObjectWidth == 0)
     205            rowPlayerObjectWidth = left;
     206
     207        var counterTotalObject;
     208        for (var t = 0; t < MAX_TEAMS; ++t)
     209        {
     210            left = 240;
     211            for (var w in counters)
     212            {
     213                counterObject = Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + w + "]");
     214                counterObject.size = left + " 6 " + (left + counters[w].width) + " 100%";
     215                counterObject.hidden = false;
     216
     217                if (g_teams[t])
     218                {
     219                    var yStart = 30 + teams[t] * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP) + 2;
     220                    counterTotalObject = Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]");
     221                    counterTotalObject.size = (left + 20) + " " + yStart + " " + (left + counters[w].width) + " 100%";
     222                    counterTotalObject.hidden = false;
     223                }
     224
     225                left += counters[w].width;
     226            }
     227        }
     228    }
     229    return rowPlayerObjectWidth;
     230}
     231
     232function updateGeneralPanelTeams()
     233{
     234    if (!g_teams || g_withoutTeam > 0)
     235        Engine.GetGUIObjectByName("noTeamsBox").hidden = false;
     236
     237    if (!g_teams)
     238        return;
     239
     240    var yStart = TEAMS_BOX_Y_START + g_withoutTeam * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP);
     241    for (var i = 0; i < g_teams.length; ++i)
     242    {
     243        var teamBox = Engine.GetGUIObjectByName("teamBoxt["+i+"]");
     244        teamBox.hidden = false;
     245        var teamBoxSize = teamBox.size;
     246        teamBoxSize.top = yStart;
     247        teamBox.size = teamBoxSize;
     248
     249        yStart += 30 + g_teams[i] * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP) + 32;
     250
     251        Engine.GetGUIObjectByName("teamNameHeadingt["+i+"]").caption = "Team "+(i+1);
     252
     253        var teamHeading = Engine.GetGUIObjectByName("teamHeadingt["+i+"]");
     254        var yStartTotal = 30 + teams[i] * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP) + 2;
     255        teamHeading.size = "50 "+yStartTotal+" 100% "+(yStartTotal+20);
     256        teamHeading.caption = translate("Team total");
     257    }
     258    // If there are no players without team, hide "player name" heading
     259    if (!g_withoutTeam)
     260        Engine.GetGUIObjectByName("playerNameHeading").caption = "";
     261}
     262
     263function updateObjectPlayerPosition()
     264{
     265    for (var h = 0; h < MAX_SLOTS; ++h)
     266    {
     267        var playerBox = Engine.GetGUIObjectByName("playerBox[" + h + "]");
     268        var boxSize = playerBox.size;
     269        boxSize.top += h * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP);
     270        boxSize.bottom = boxSize.top + PLAYER_BOX_Y_SIZE;
     271        playerBox.size = boxSize;
     272
     273        for (var i = 0; i < MAX_TEAMS; ++i)
     274        {
     275            var playerBoxt = Engine.GetGUIObjectByName("playerBoxt[" + i + "][" + h + "]");
     276            boxSize = playerBoxt.size;
     277            boxSize.top += h * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP);
     278            boxSize.bottom = boxSize.top + PLAYER_BOX_Y_SIZE;
     279            playerBoxt.size = boxSize;
     280        };
     281    };
     282}
     283 No newline at end of file
  • binaries/data/mods/public/gui/summary/summary.js

     
    11// Max player slots for any map (should read from config)
    22const MAX_SLOTS = 8;
     3const MAX_TEAMS = 4;
     4const MAX_HEADINGTITLE = 8;
    35
     6// const for filtering long collective headings
     7const LONG_HEADING_WIDTH = 250;
     8// vertical size of player box
     9const PLAYER_BOX_Y_SIZE = 30;
     10// gap between players boxes
     11const PLAYER_BOX_GAP = 2;
     12// alpha for player box
     13const PLAYER_BOX_ALPHA = " 32";
     14// alpha for player colour box
     15const PLAYER_COLOUR_BOX_ALPHA = " 255";
     16// yStart value for spaceing teams boxes (and noTeamsBox)
     17const TEAMS_BOX_Y_START = 65;
     18// colours used for units and buildings
     19const TRAINED_COLOR = '[color="201 255 200"]';
     20const LOST_COLOR = '[color="255 213 213"]';
     21const KILLED_COLOR = '[color="196 198 255"]';
     22
     23const BUILDINGS_TYPES = [ "total", "House", "Economic", "Outpost", "Military", "Fortress", "CivCentre", "Wonder" ];
     24const UNITS_TYPES = [ "total", "Infantry", "Worker", "Cavalry", "Champion", "Hero", "Ship" ];
     25const RESOURCES_TYPES = [ "food", "wood", "stone", "metal" ];
     26
     27// colours used for gathered and traded resources
     28const INCOME_COLOR = '[color="201 255 200"]';
     29const OUTCOME_COLOR = '[color="255 213 213"]';
     30
     31const DEFAULT_DECIMAL = "0.00";
     32const INFINITE_SYMBOL = "\u221E";
     33// Load data
     34var g_civData = loadCivData();
     35var g_teams = [ ];
     36// TODO set g_maxPlayers as playerCounters.length
     37var g_maxPlayers = 0;
     38// Count players without team   (or all if teams are not displayed)
     39var g_withoutTeam = 0;
     40var g_gameData;
     41
    442/**
    543 * Select active panel
    644 * @param panelNumber Number of panel, which should get active state (integer)
     
    745 */
    846function selectPanel(panelNumber)
    947{
    10     var panelNames = [ 'scorePanel', 'buildingsPanel', 'unitsPanel', 'resourcesPanel', 'marketPanel', 'miscPanel' ];
    11    
     48    var panelNames = [ 'scorePanel', 'buildingsPanel', 'unitsPanel', 'resourcesPanel', 'marketPanel', 'miscPanel'];
     49
    1250    function adjustTabDividers(tabSize)
    1351    {
    1452        var leftSpacer = Engine.GetGUIObjectByName("tabDividerLeft");
     
    1654        leftSpacer.size = "20 " + leftSpacer.size.top + " " + (tabSize.left + 2) + " " + leftSpacer.size.bottom;
    1755        rightSpacer.size = (tabSize.right - 2) + " " + rightSpacer.size.top + " 100%-20 " + rightSpacer.size.bottom;
    1856    }
    19    
    20     for (var i = 0; i < panelNames.length; i++)
     57
     58    for (var i = 0; i < panelNames.length; ++i)
    2159    {
    22         if (i != panelNumber)
    23         {
    24             Engine.GetGUIObjectByName(panelNames[i]).hidden = true;
    25             Engine.GetGUIObjectByName(panelNames[i] + 'Button').sprite = "BackgroundTab";
    26         }
    27         else
    28         {
    29             Engine.GetGUIObjectByName(panelNames[i]).hidden = false;
    30             Engine.GetGUIObjectByName(panelNames[i] + 'Button').sprite = "ForegroundTab";
    31             adjustTabDividers(Engine.GetGUIObjectByName(panelNames[i] + 'Button').size);
    32         }
     60        Engine.GetGUIObjectByName(panelNames[i] + 'Button').sprite = "BackgroundTab";
    3361    }
     62
     63    Engine.GetGUIObjectByName(panelNames[panelNumber] + 'Button').sprite = "ForegroundTab";
     64    adjustTabDividers(Engine.GetGUIObjectByName(panelNames[panelNumber] + 'Button').size);
     65
     66    updatePanelData(panelsData[panelNumber]);
    3467}
    3568
    36 function init(data)
     69function updatePanelData(panelInfo)
    3770{
    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"]';
     71    resetGeneralPanel();
     72    resetDataHelpers();
     73    updateGeneralPanelHeadings(panelInfo.headings);
     74    updateGeneralPanelTitles(panelInfo.titleHeadings);
     75    var rowPlayerObjectWidth = updateGeneralPanelCounter(panelInfo.counters);
     76    updateGeneralPanelTeams();
    5877
    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             Engine.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)
     78    var playerBoxesCounts = [ ];
     79    for (var i = 0; i < g_maxPlayers; ++i)
    19980    {
    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) + "%";
     81        var playerState = g_gameData.playerStates[i+1];
     82
     83        if (!playerBoxesCounts[playerState.team+1])
     84            playerBoxesCounts[playerState.team+1] = 1;
    28185        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         }
     86            playerBoxesCounts[playerState.team+1] += 1;
    31187
    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)
     88        var positionObject = playerBoxesCounts[playerState.team+1] - 1;
     89        var rowPlayer = "playerBox[" + positionObject + "]";
     90        var playerNameColumn = "playerName[" + positionObject + "]";
     91        var playerColourBoxColumn = "playerColourBox[" + positionObject + "]";
     92        var playerCivicBoxColumn = "civIcon[" + positionObject + "]";
     93        var playerCounterValue = "valueData[" + positionObject + "]";
     94        if (playerState.team != -1)
    32495        {
    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;
     96            rowPlayer = "playerBoxt[" + playerState.team + "]p[" + positionObject + "]";
     97            playerNameColumn = "playerNamet[" + playerState.team + "]p[" + positionObject + "]";
     98            playerColourBoxColumn = "playerColourBoxt[" + playerState.team + "]p[" + positionObject + "]";
     99            playerCivicBoxColumn = "civIcont[" + playerState.team + "]p[" + positionObject + "]";
     100            playerCounterValue = "valueDataTeam[" + playerState.team + "]p[" + positionObject + "]";
    329101        }
    330102
    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]';
     103        var colourString = "colour: "
     104                + Math.floor(playerState.colour.r * 255) + " "
     105                + Math.floor(playerState.colour.g * 255) + " "
     106                + Math.floor(playerState.colour.b * 255);
     107
     108        var rowPlayerObject = Engine.GetGUIObjectByName(rowPlayer);
     109        rowPlayerObject.hidden = false;
     110        rowPlayerObject.sprite = colourString + PLAYER_BOX_ALPHA;
     111        var boxSize = rowPlayerObject.size;
     112        boxSize.right = rowPlayerObjectWidth;
     113        rowPlayerObject.size = boxSize;
     114
     115        var playerColourBox = Engine.GetGUIObjectByName(playerColourBoxColumn);
     116        playerColourBox.sprite = colourString + PLAYER_COLOUR_BOX_ALPHA;
     117
     118        Engine.GetGUIObjectByName(playerNameColumn).caption = g_gameData.players[i+1].name;
     119
     120        var civIcon = Engine.GetGUIObjectByName(playerCivicBoxColumn);
     121        civIcon.sprite = "stretched:"+g_civData[playerState.civ].Emblem;
     122        civIcon.tooltip = g_civData[playerState.civ].Name;
     123
     124        // update counters
     125        updateCountersPlayer(playerState, panelInfo.counters, playerCounterValue);
    338126    }
    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
    506     var civData = loadCivData();
     127    // update team counters
     128    var teamCounterFn = panelInfo.teamCounterFn
     129    updateTeamCounters(panelInfo.counters, teamCounterFn);
     130}
     131
     132function init(data)
     133{
     134    updateObjectPlayerPosition();
     135    g_gameData = data;
     136
    507137    // Map
    508138    var mapDisplayType = translate("Scenario");
    509139
     
    529159    }
    530160
    531161    Engine.GetGUIObjectByName("mapName").caption = sprintf(translate("%(mapName)s - %(mapType)s"), { mapName: translate(data.mapSettings.Name), mapType: mapDisplayType});
    532    
     162
    533163    // Panels
    534     // Align headers
    535     var left = 50;
    536     for each (var panel in panels)  // for all panels
    537         alignHeaders(panel.headings);
     164    g_maxPlayers = data.playerStates.length - 1;
    538165
    539     // TODO set maxPlayers as playerCounters.length
    540     var maxPlayers = data.playerStates.length - 1;
    541     var maxTeams = 0;
    542 
    543     var teams = [ ];
    544166    if (data.mapSettings.LockTeams) // teams ARE locked
    545167    {
    546168        // count teams
    547         for(var t = 0; t < maxPlayers; ++t)
     169        for(var t = 0; t < g_maxPlayers; ++t)
    548170        {
    549             if (!teams[data.playerStates[t+1].team])
     171            if (!g_teams[data.playerStates[t+1].team])
    550172            {
    551                 teams[data.playerStates[t+1].team] = 1;
     173                g_teams[data.playerStates[t+1].team] = 1;
    552174                continue;
    553175            }
    554             teams[data.playerStates[t+1].team]++;
     176            g_teams[data.playerStates[t+1].team]++;
    555177        }
    556        
    557         if (teams.length == maxPlayers)
    558             teams = false;  // Each player has his own team. Displaying teams makes no sense.
     178
     179        if (g_teams.length == g_maxPlayers)
     180            g_teams = false;    // Each player has his own team. Displaying teams makes no sense.
    559181    }
    560182    else                // teams are NOT locked
    561         teams = false;
    562    
     183        g_teams = false;
     184
    563185    // Erase teams data if teams are not displayed
    564     if (!teams)
     186    if (!g_teams)
    565187    {
    566         for(var p = 0; p < maxPlayers; ++p)
     188        for(var p = 0; p < g_maxPlayers; ++p)
    567189            data.playerStates[p+1].team = -1;
    568190    }
    569    
    570     // Count players without team   (or all if teams are not displayed)
    571     var withoutTeam = maxPlayers;
    572     if (teams)
     191
     192    g_withoutTeam = g_maxPlayers;
     193    if (g_teams)
    573194    {
    574195        // 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)
    581         {
    582             var yStart = TEAMS_BOX_Y_START + withoutTeam * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP);
    583             for (var i = 0; i < teams.length; ++i)
    584             {
    585                 var teamBox = Engine.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                 Engine.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                 }
    601             }
    602            
    603             // If there are no players without team, hide "player name" heading
    604             if (!withoutTeam)
    605                 Engine.GetGUIObjectByName("playerName"+p+"Heading").caption = "";   
    606            
    607             p++;
    608         }
     196        for (var i = 0; i < g_teams.length; ++i)
     197            g_withoutTeam -= g_teams[i];
    609198    }
    610    
    611     if (withoutTeam)
    612     {
    613         // Show boxes for no teams
    614         for (var b = 0; b < PANELS_COUNT; ++b)
    615             Engine.GetGUIObjectByName("noTeamsBox"+b).hidden = false;
    616     }
    617199
    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;
    628 
    629         if (playerState.team != -1)
    630             tn = "t"+playerState.team+"p";
    631 
    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 = Engine.GetGUIObjectByName("playerBox"+j+playerIdentityString);
    638             playerBox.hidden = false;
    639            
    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 = Engine.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 = Engine.GetGUIObjectByName("playerName"+j+playerIdentityString);
    658             playerName.caption = data.players[i+1].name;
    659 
    660             var civIcon = Engine.GetGUIObjectByName("civIcon"+j+playerIdentityString);
    661             civIcon.sprite = "stretched:"+civData[playerState.civ].Emblem;
    662             civIcon.tooltip = civData[playerState.civ].Name;
    663            
    664             // Get counters
    665             for (var c in panel.counters)
    666             {
    667                 panel.counters[c].objects[i] = Engine.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++;
    676         }
    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)
    690         {
    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         panels.miscelanous.counters.mapExploration.teamsScores[playerState.team] = playerState.statistics.teamPercentMapExplored;
    791         panels.miscelanous.counters.mapExploration.teamsScoresCaption[playerState.team] = panels.miscelanous.counters.mapExploration.teamsScores[playerState.team] + "%";
    792     }
    793    
    794     if (!teams)
    795     {
    796         selectPanel(0);
    797         return;
    798     }
    799    
    800     // Display teams totals counters
    801     for (var i = 0; i < teams.length; ++i)
    802     {
    803         var pn = 0;
    804         for each (var panel in panels)
    805         {
    806             var teamHeading = Engine.GetGUIObjectByName("teamHeading"+pn+"t"+i);
    807             var yStart = 30 + teams[i] * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP) + 2;
    808             teamHeading.size = "50 "+yStart+" 100% "+(yStart+20);
    809             teamHeading.caption = translate("Team total");
    810            
    811             var left = 250;
    812             for (var c in panel.counters)
    813             {
    814                 var counter = Engine.GetGUIObjectByName(c+"t"+i);
    815                 counter.size = left + " " + yStart + " " + (left + panel.counters[c].width) + " " + (yStart+20);
    816                 counter.caption = panel.counters[c].teamsScoresCaption[i];
    817                
    818                 left += panel.counters[c].width;
    819             }
    820             pn++;
    821         }
    822     }
    823 
    824200    selectPanel(0);
    825 }
     201}
     202 No newline at end of file
  • binaries/data/mods/public/gui/summary/summary.xml

     
    99<objects>
    1010    <script file="gui/common/functions_civinfo.js"/>
    1111    <script file="gui/common/functions_utility.js"/>
     12    <script file="gui/summary/countersHelper.js"/>
     13    <script file="gui/summary/layoutsHelper.js"/>
    1214    <script file="gui/summary/summary.js"/>
    1315
    1416    <object type="image"
     
    9496                <translatableAttribute id="caption">Miscellaneous</translatableAttribute>
    9597            </object>
    9698        </object>
    97        
    98         <object name="scorePanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58">
    9999
     100        <object name="generalPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58">
    100101            <object size="0 0 100% 100%-50">
    101                 <object name="playerName0Heading" type="text" style="ModernLeftTabLabelText">
     102                <object name="playerNameHeading" type="text" style="ModernLeftTabLabelText">
    102103                    <translatableAttribute id="caption">Player name</translatableAttribute>
    103104                </object>
    104                 <object name="economyScoreHeading" type="text" style="ModernTabLabelText">
    105                     <translatableAttribute id="caption">Economy score</translatableAttribute>
     105                <object name="titleHeading" type="text" style="ModernTabLabelText">
    106106                </object>
    107                 <object name="militaryScoreHeading" type="text" style="ModernTabLabelText">
    108                     <translatableAttribute id="caption">Military score</translatableAttribute>
    109                 </object>
    110                 <object name="explorationScoreHeading" type="text" style="ModernTabLabelText">
    111                     <translatableAttribute id="caption">Exploration score</translatableAttribute>
    112                 </object>
    113                 <object name="totalScoreHeading" type="text" style="ModernTabLabelText">
    114                     <translatableAttribute id="caption">Total score</translatableAttribute>
    115                 </object>
    116             </object>
    117 
    118             <object type="image" name="teamBox0t0" size="0 65 100% 100%-50" hidden="true">
    119                 <object type="text" name="teamNameHeading0t0" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    120                 <object size="0 30 100% 100%">
    121                     <repeat count="8">
    122                         <object type="image" name="playerBox0t0p[n]" size="10 0 10 30" hidden="true">
    123                             <object name="playerColourBox0t0p[n]" type="image" size="10 4 30 24"/>
    124                             <object name="playerName0t0p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText" />
    125                             <object name="civIcon0t0p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    126                             <object name="economyScoret0p[n]"     type="text"  style="ModernLabelText"/>
    127                             <object name="militaryScoret0p[n]"    type="text"  style="ModernLabelText"/>
    128                             <object name="explorationScoret0p[n]" type="text"  style="ModernLabelText"/>
    129                             <object name="totalScoret0p[n]"       type="text"  style="ModernLabelText"/>
    130                         </object>
    131                     </repeat>
    132                 </object>
    133                 <object name="teamHeading0t0"     type="text" style="ModernLeftTabLabelText"/>
    134                 <object name="economyScoret0"     type="text" style="ModernLabelText"/>
    135                 <object name="militaryScoret0"    type="text" style="ModernLabelText"/>
    136                 <object name="explorationScoret0" type="text" style="ModernLabelText"/>
    137                 <object name="totalScoret0"       type="text" style="ModernLabelText"/>
    138             </object>
    139             <object type="image" name="teamBox0t1" size="0 65 100% 100%-50" hidden="true">
    140                 <object type="text" name="teamNameHeading0t1" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    141                 <object size="0 30 100% 100%">
    142                     <repeat count="8">
    143                         <object type="image" name="playerBox0t1p[n]" size="10 0 10 30" hidden="true">
    144                             <object name="playerColourBox0t1p[n]" type="image" size="10 4 30 24"/>
    145                             <object name="playerName0t1p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    146                             <object name="civIcon0t1p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    147                             <object name="economyScoret1p[n]"     type="text"  style="ModernLabelText"/>
    148                             <object name="militaryScoret1p[n]"    type="text"  style="ModernLabelText"/>
    149                             <object name="explorationScoret1p[n]" type="text"  style="ModernLabelText"/>
    150                             <object name="totalScoret1p[n]"       type="text"  style="ModernLabelText"/>
    151                         </object>
    152                     </repeat>
    153                 </object>
    154                 <object name="teamHeading0t1"     type="text" style="ModernLeftTabLabelText"/>
    155                 <object name="economyScoret1"     type="text" style="ModernLabelText"/>
    156                 <object name="militaryScoret1"    type="text" style="ModernLabelText"/>
    157                 <object name="explorationScoret1" type="text" style="ModernLabelText"/>
    158                 <object name="totalScoret1"       type="text" style="ModernLabelText"/>
    159             </object>
    160             <object type="image" name="teamBox0t2" size="0 65 100% 100%-50" hidden="true">
    161                 <object type="text" name="teamNameHeading0t2" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    162                 <object size="0 30 100% 100%">
    163                     <repeat count="8">
    164                         <object type="image" name="playerBox0t2p[n]" size="10 0 10 30" hidden="true">
    165                             <object name="playerColourBox0t2p[n]" type="image" size="10 4 30 24"/>
    166                             <object name="playerName0t2p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    167                             <object name="civIcon0t2p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    168                             <object name="economyScoret2p[n]"     type="text"  style="ModernLabelText"/>
    169                             <object name="militaryScoret2p[n]"    type="text"  style="ModernLabelText"/>
    170                             <object name="explorationScoret2p[n]" type="text"  style="ModernLabelText"/>
    171                             <object name="totalScoret2p[n]"       type="text"  style="ModernLabelText"/>
    172                         </object>
    173                     </repeat>
    174                 </object>
    175                 <object name="teamHeading0t2"     type="text" style="ModernLeftTabLabelText"/>
    176                 <object name="economyScoret2"     type="text" style="ModernLabelText"/>
    177                 <object name="militaryScoret2"    type="text" style="ModernLabelText"/>
    178                 <object name="explorationScoret2" type="text" style="ModernLabelText"/>
    179                 <object name="totalScoret2"       type="text" style="ModernLabelText"/>
    180             </object>
    181             <object type="image" name="teamBox0t3" size="0 65 100% 100%-50" hidden="true">
    182                 <object type="text" name="teamNameHeading0t3" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    183                 <object size="0 30 100% 100%">
    184                     <repeat count="8">
    185                         <object type="image" name="playerBox0t3p[n]" size="10 0 10 30" hidden="true">
    186                             <object name="playerColourBox0t3p[n]" type="image" size="10 4 30 24"/>
    187                             <object name="playerName0t3p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    188                             <object name="civIcon0t3p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    189                             <object name="economyScoret3p[n]"     type="text"  style="ModernLabelText"/>
    190                             <object name="militaryScoret3p[n]"    type="text"  style="ModernLabelText"/>
    191                             <object name="explorationScoret3p[n]" type="text"  style="ModernLabelText"/>
    192                             <object name="totalScoret3p[n]"       type="text"  style="ModernLabelText"/>
    193                         </object>
    194                     </repeat>
    195                 </object>
    196                 <object name="teamHeading0t3"     type="text" style="ModernLeftTabLabelText"/>
    197                 <object name="economyScoret3"     type="text" style="ModernLabelText"/>
    198                 <object name="militaryScoret3"    type="text" style="ModernLabelText"/>
    199                 <object name="explorationScoret3" type="text" style="ModernLabelText"/>
    200                 <object name="totalScoret3"       type="text" style="ModernLabelText"/>
    201             </object>
    202            
    203             <object type="image" name="noTeamsBox0" size="0 65 100% 100%-50" hidden="true">
    204                 <repeat count="8">
    205                     <object type="image" name="playerBox0[n]" size="10 0 10 30" hidden="true">
    206                         <object type="image" sprite="ForegroundBox" size="10 4 34 28">
    207                             <object name="playerColourBox0[n]" type="image" size="2 2 22 22"/>
    208                         </object>
    209                         <object name="playerName0[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    210                         <object name="civIcon0[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    211                         <object name="economyScore[n]"     type="text"  style="ModernLabelText"/>
    212                         <object name="militaryScore[n]"    type="text"  style="ModernLabelText"/>
    213                         <object name="explorationScore[n]" type="text"  style="ModernLabelText"/>
    214                         <object name="totalScore[n]"       type="text"  style="ModernLabelText"/>
     107                <repeat var="x" count="8">
     108                    <object name="Heading[x]" type="text" style="ModernTabLabelText">
     109                        <translatableAttribute id="caption">Demo</translatableAttribute>
    215110                    </object>
    216111                </repeat>
    217112            </object>
    218         </object>
    219        
    220         <object name="buildingsPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58" hidden="true">
    221113
    222             <object size="0 0 100% 100%-50">
    223                 <object name="playerName1Heading" type="text" style="ModernLeftTabLabelText">
    224                     <translatableAttribute id="caption">Player name</translatableAttribute>
    225                 </object>
    226                 <object name="buildingsHeading" type="text" style="ModernTabLabelText">
    227                     <translatableAttribute id="caption">Buildings Statistics (Constructed / Lost / Destroyed)</translatableAttribute>
    228                 </object>
    229                 <object name="totalBuildingsHeading" type="text" style="ModernTabLabelText">
    230                     <translatableAttribute id="caption">Total</translatableAttribute>
    231                 </object>
    232                 <object name="houseBuildingsHeading" type="text" style="ModernTabLabelText">
    233                     <translatableAttribute id="caption">Houses</translatableAttribute>
    234                 </object>
    235                 <object name="economicBuildingsHeading" type="text" style="ModernTabLabelText">
    236                     <translatableAttribute id="caption">Economic</translatableAttribute>
    237                 </object>
    238                 <object name="outpostBuildingsHeading" type="text" style="ModernTabLabelText">
    239                     <translatableAttribute id="caption">Outposts</translatableAttribute>
    240                 </object>
    241                 <object name="militaryBuildingsHeading" type="text" style="ModernTabLabelText">
    242                     <translatableAttribute id="caption">Military</translatableAttribute>
    243                 </object>
    244                 <object name="fortressBuildingsHeading" type="text" style="ModernTabLabelText">
    245                     <translatableAttribute id="caption">Fortresses</translatableAttribute>
    246                 </object>
    247                 <object name="civCentreBuildingsHeading" type="text" style="ModernTabLabelText">
    248                     <translatableAttribute id="caption">Civ Centers</translatableAttribute>
    249                 </object>
    250                 <object name="wonderBuildingsHeading" type="text" style="ModernTabLabelText">
    251                     <translatableAttribute id="caption">Wonders</translatableAttribute>
    252                 </object>
    253 
    254             </object>
    255            
    256             <object type="image" name="teamBox1t0" size="0 65 100% 100%-50" hidden="true">
    257                 <object type="text" name="teamNameHeading1t0" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    258                 <object size="0 30 100% 100%">
    259                     <repeat count="8">
    260                         <object type="image" name="playerBox1t0p[n]" size="10 0 10 30" hidden="true">
    261                             <object name="playerColourBox1t0p[n]"   type="image" size="10 4 30 24"/>
    262                             <object name="playerName1t0p[n]"        type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    263                             <object name="civIcon1t0p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    264                             <object name="totalBuildingst0p[n]"     type="text"  style="ModernLabelText"/>
    265                             <object name="houseBuildingst0p[n]"     type="text"  style="ModernLabelText"/>
    266                             <object name="economicBuildingst0p[n]"  type="text"  style="ModernLabelText"/>
    267                             <object name="outpostBuildingst0p[n]"   type="text"  style="ModernLabelText"/>
    268                             <object name="militaryBuildingst0p[n]"  type="text"  style="ModernLabelText"/>
    269                             <object name="fortressBuildingst0p[n]"  type="text"  style="ModernLabelText"/>
    270                             <object name="civCentreBuildingst0p[n]" type="text"  style="ModernLabelText"/>
    271                             <object name="wonderBuildingst0p[n]"    type="text"  style="ModernLabelText"/>
    272                         </object>
    273                     </repeat>
    274                 </object>
    275                 <object name="teamHeading1t0"       type="text" style="ModernLeftTabLabelText"/>
    276                 <object name="totalBuildingst0"     type="text" style="ModernLabelText"/>
    277                 <object name="houseBuildingst0"     type="text" style="ModernLabelText"/>
    278                 <object name="economicBuildingst0"  type="text" style="ModernLabelText"/>
    279                 <object name="outpostBuildingst0"   type="text" style="ModernLabelText"/>
    280                 <object name="militaryBuildingst0"  type="text" style="ModernLabelText"/>
    281                 <object name="fortressBuildingst0"  type="text" style="ModernLabelText"/>
    282                 <object name="civCentreBuildingst0" type="text" style="ModernLabelText"/>
    283                 <object name="wonderBuildingst0"    type="text" style="ModernLabelText"/>
    284             </object>
    285             <object type="image" name="teamBox1t1" size="0 65 100% 100%-50" hidden="true">
    286                 <object type="text" name="teamNameHeading1t1" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    287                 <object size="0 30 100% 100%">
    288                     <repeat count="8">
    289                         <object type="image" name="playerBox1t1p[n]" size="10 0 10 30" hidden="true">
    290                             <object name="playerColourBox1t1p[n]"   type="image" size="10 4 30 24"/>
    291                             <object name="playerName1t1p[n]"        type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    292                             <object name="civIcon1t1p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    293                             <object name="totalBuildingst1p[n]"     type="text"  style="ModernLabelText"/>
    294                             <object name="houseBuildingst1p[n]"     type="text"  style="ModernLabelText"/>
    295                             <object name="economicBuildingst1p[n]"  type="text"  style="ModernLabelText"/>
    296                             <object name="outpostBuildingst1p[n]"   type="text"  style="ModernLabelText"/>
    297                             <object name="militaryBuildingst1p[n]"  type="text"  style="ModernLabelText"/>
    298                             <object name="fortressBuildingst1p[n]"  type="text"  style="ModernLabelText"/>
    299                             <object name="civCentreBuildingst1p[n]" type="text"  style="ModernLabelText"/>
    300                             <object name="wonderBuildingst1p[n]"    type="text"  style="ModernLabelText"/>
    301                         </object>
    302                     </repeat>
    303                 </object>
    304                 <object name="teamHeading1t1"       type="text" style="ModernLeftTabLabelText"/>
    305                 <object name="totalBuildingst1"     type="text" style="ModernLabelText"/>
    306                 <object name="houseBuildingst1"     type="text" style="ModernLabelText"/>
    307                 <object name="economicBuildingst1"  type="text" style="ModernLabelText"/>
    308                 <object name="outpostBuildingst1"   type="text" style="ModernLabelText"/>
    309                 <object name="militaryBuildingst1"  type="text" style="ModernLabelText"/>
    310                 <object name="fortressBuildingst1"  type="text" style="ModernLabelText"/>
    311                 <object name="civCentreBuildingst1" type="text" style="ModernLabelText"/>
    312                 <object name="wonderBuildingst1"    type="text" style="ModernLabelText"/>
    313             </object>
    314             <object type="image" name="teamBox1t2" size="0 65 100% 100%-50" hidden="true">
    315                 <object type="text" name="teamNameHeading1t2" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    316                 <object size="0 30 100% 100%">
    317                     <repeat count="8">
    318                         <object type="image" name="playerBox1t2p[n]" size="10 0 10 30" hidden="true">
    319                             <object name="playerColourBox1t2p[n]"   type="image" size="10 4 30 24"/>
    320                             <object name="playerName1t2p[n]"        type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    321                             <object name="civIcon1t2p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    322                             <object name="totalBuildingst2p[n]"     type="text"  style="ModernLabelText"/>
    323                             <object name="houseBuildingst2p[n]"     type="text"  style="ModernLabelText"/>
    324                             <object name="economicBuildingst2p[n]"  type="text"  style="ModernLabelText"/>
    325                             <object name="outpostBuildingst2p[n]"   type="text"  style="ModernLabelText"/>
    326                             <object name="militaryBuildingst2p[n]"  type="text"  style="ModernLabelText"/>
    327                             <object name="fortressBuildingst2p[n]"  type="text"  style="ModernLabelText"/>
    328                             <object name="civCentreBuildingst2p[n]" type="text"  style="ModernLabelText"/>
    329                             <object name="wonderBuildingst2p[n]"    type="text"  style="ModernLabelText"/>
    330                         </object>
    331                     </repeat>
    332                 </object>
    333                 <object name="teamHeading1t2"       type="text" style="ModernLeftTabLabelText"/>
    334                 <object name="totalBuildingst2"     type="text" style="ModernLabelText"/>
    335                 <object name="houseBuildingst2"     type="text" style="ModernLabelText"/>
    336                 <object name="economicBuildingst2"  type="text" style="ModernLabelText"/>
    337                 <object name="outpostBuildingst2"   type="text" style="ModernLabelText"/>
    338                 <object name="militaryBuildingst2"  type="text" style="ModernLabelText"/>
    339                 <object name="fortressBuildingst2"  type="text" style="ModernLabelText"/>
    340                 <object name="civCentreBuildingst2" type="text" style="ModernLabelText"/>
    341                 <object name="wonderBuildingst2"    type="text" style="ModernLabelText"/>
    342             </object>
    343             <object type="image" name="teamBox1t3" size="0 65 100% 100%-50" hidden="true">
    344                 <object type="text" name="teamNameHeading1t3" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    345                 <object size="0 30 100% 100%">
    346                     <repeat count="8">
    347                         <object type="image" name="playerBox1t3p[n]" size="10 0 10 30" hidden="true">
    348                             <object name="playerColourBox1t3p[n]"   type="image" size="10 4 30 24"/>
    349                             <object name="playerName1t3p[n]"        type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    350                             <object name="civIcon1t3p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    351                             <object name="totalBuildingst3p[n]"     type="text"  style="ModernLabelText"/>
    352                             <object name="houseBuildingst3p[n]"     type="text"  style="ModernLabelText"/>
    353                             <object name="economicBuildingst3p[n]"  type="text"  style="ModernLabelText"/>
    354                             <object name="outpostBuildingst3p[n]"   type="text"  style="ModernLabelText"/>
    355                             <object name="militaryBuildingst3p[n]"  type="text"  style="ModernLabelText"/>
    356                             <object name="fortressBuildingst3p[n]"  type="text"  style="ModernLabelText"/>
    357                             <object name="civCentreBuildingst3p[n]" type="text"  style="ModernLabelText"/>
    358                             <object name="wonderBuildingst3p[n]"    type="text"  style="ModernLabelText"/>
    359                         </object>
    360                     </repeat>
    361                 </object>
    362                 <object name="teamHeading1t3"       type="text" style="ModernLeftTabLabelText"/>
    363                 <object name="totalBuildingst3"     type="text" style="ModernLabelText"/>
    364                 <object name="houseBuildingst3"     type="text" style="ModernLabelText"/>
    365                 <object name="economicBuildingst3"  type="text" style="ModernLabelText"/>
    366                 <object name="outpostBuildingst3"   type="text" style="ModernLabelText"/>
    367                 <object name="militaryBuildingst3"  type="text" style="ModernLabelText"/>
    368                 <object name="fortressBuildingst3"  type="text" style="ModernLabelText"/>
    369                 <object name="civCentreBuildingst3" type="text" style="ModernLabelText"/>
    370                 <object name="wonderBuildingst3"    type="text" style="ModernLabelText"/>
    371             </object>
    372            
    373             <object type="image" name="noTeamsBox1" size="0 65 100% 100%-50" hidden="true">
    374                 <repeat count="8">
    375                     <object type="image" name="playerBox1[n]" size="10 0 10 30" hidden="true">
    376                         <object type="image" sprite="ForegroundBox" size="10 4 34 28">
    377                             <object name="playerColourBox1[n]" type="image" size="2 2 22 22"/>
    378                         </object>
    379                         <object name="playerName1[n]"        type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    380                         <object name="civIcon1[n]"           type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
    381                         <object name="totalBuildings[n]"     type="text"  style="ModernLabelText"/>
    382                         <object name="houseBuildings[n]"     type="text"  style="ModernLabelText"/>
    383                         <object name="economicBuildings[n]"  type="text"  style="ModernLabelText"/>
    384                         <object name="outpostBuildings[n]"   type="text"  style="ModernLabelText"/>
    385                         <object name="militaryBuildings[n]"  type="text"  style="ModernLabelText"/>
    386                         <object name="fortressBuildings[n]"  type="text"  style="ModernLabelText"/>
    387                         <object name="civCentreBuildings[n]" type="text"  style="ModernLabelText"/>
    388                         <object name="wonderBuildings[n]"    type="text"  style="ModernLabelText"/>
     114            <repeat count="4" var="i">
     115                <object type="image" name="teamBoxt[i]" size="0 65 100% 100%-50" hidden="true">
     116                    <object type="text" name="teamNameHeadingt[i]" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
     117                    <object size="0 30 100% 100%">
     118                        <repeat count="8" var="n">
     119                            <object type="image" name="playerBoxt[i][n]" size="10 0 10 30" hidden="true">
     120                                <object name="playerColourBoxt[i][n]" type="image" size="10 4 30 24"/>
     121                                <object name="playerNamet[i][n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText" />
     122                                <object name="civIcont[i][n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     123                                <repeat var="x" count="8">
     124                                    <object name="valueDataTeam[i][n][x]" type="text" style="ModernTabLabelText">
     125                                        <translatableAttribute id="caption">DemoOhsi</translatableAttribute>
     126                                    </object>
     127                                </repeat>
     128                            </object>
     129                        </repeat>
    389130                    </object>
    390                 </repeat>
    391             </object>
    392         </object>
    393        
    394         <object name="unitsPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58" hidden="true">
    395 
    396             <object size="0 0 100% 100%-50">
    397                 <object name="playerName2Heading" type="text" style="ModernLeftTabLabelText">
    398                     <translatableAttribute id="caption">Player name</translatableAttribute>
    399                 </object>
    400                 <object name="unitsHeading" type="text" style="ModernTabLabelText">
    401                     <translatableAttribute id="caption">Units Statistics (Trained / Lost / Killed)</translatableAttribute>
    402                 </object>
    403                 <object name="totalUnitsHeading" type="text" style="ModernTabLabelText">
    404                     <translatableAttribute id="caption">Total</translatableAttribute>
    405                 </object>
    406                 <object name="infantryUnitsHeading" type="text" style="ModernTabLabelText">
    407                     <translatableAttribute id="caption">Infantry</translatableAttribute>
    408                 </object>
    409                 <object name="workerUnitsHeading" type="text" style="ModernTabLabelText">
    410                     <translatableAttribute id="caption">Worker</translatableAttribute>
    411                 </object>
    412                 <object name="cavalryUnitsHeading" type="text" style="ModernTabLabelText">
    413                     <translatableAttribute id="caption">Cavalry</translatableAttribute>
    414                 </object>
    415                 <object name="championUnitsHeading" type="text" style="ModernTabLabelText">
    416                     <translatableAttribute id="caption">Champion</translatableAttribute>
    417                 </object>
    418                 <object name="heroesUnitsHeading" type="text" style="ModernTabLabelText">
    419                     <translatableAttribute id="caption">Heroes</translatableAttribute>
    420                 </object>
    421                 <object name="navyUnitsHeading" type="text" style="ModernTabLabelText">
    422                     <translatableAttribute id="caption">Navy</translatableAttribute>
    423                 </object>
    424             </object>
    425            
    426             <object type="image" name="teamBox2t0" size="0 65 100% 100%-50" hidden="true">
    427                 <object type="text" name="teamNameHeading2t0" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    428                 <object size="0 30 100% 100%">
    429                     <repeat count="8">
    430                         <object type="image" name="playerBox2t0p[n]" size="10 0 10 30" hidden="true">
    431                             <object name="playerColourBox2t0p[n]" type="image" size="10 4 30 24"/>
    432                             <object name="playerName2t0p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    433                             <object name="civIcon2t0p[n]"         type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
    434                             <object name="totalUnitst0p[n]"       type="text"  style="ModernLabelText"/>
    435                             <object name="infantryUnitst0p[n]"    type="text"  style="ModernLabelText"/>
    436                             <object name="workerUnitst0p[n]"      type="text"  style="ModernLabelText"/>
    437                             <object name="cavalryUnitst0p[n]"     type="text"  style="ModernLabelText"/>
    438                             <object name="championUnitst0p[n]"    type="text"  style="ModernLabelText"/>
    439                             <object name="heroesUnitst0p[n]"      type="text"  style="ModernLabelText"/>
    440                             <object name="navyUnitst0p[n]"        type="text"  style="ModernLabelText"/>
     131                    <object name="teamHeadingt[i]"     type="text" style="ModernLeftTabLabelText"/>
     132                    <repeat var="x" count="8">
     133                        <object name="valueDataTeam[i][x]" type="text" style="ModernTabLabelText">
     134                            <translatableAttribute id="caption">DemoNormal</translatableAttribute>
    441135                        </object>
    442136                    </repeat>
    443137                </object>
    444                 <object name="teamHeading2t0"  type="text" style="ModernLeftTabLabelText"/>
    445                 <object name="totalUnitst0"    type="text" style="ModernLabelText"/>
    446                 <object name="infantryUnitst0" type="text" style="ModernLabelText"/>
    447                 <object name="workerUnitst0"   type="text" style="ModernLabelText"/>
    448                 <object name="cavalryUnitst0"  type="text" style="ModernLabelText"/>
    449                 <object name="championUnitst0" type="text" style="ModernLabelText"/>
    450                 <object name="heroesUnitst0"   type="text" style="ModernLabelText"/>
    451                 <object name="navyUnitst0"     type="text" style="ModernLabelText"/>
    452             </object>
    453             <object type="image" name="teamBox2t1" size="0 65 100% 100%-50" hidden="true">
    454                 <object type="text" name="teamNameHeading2t1" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    455                 <object size="0 30 100% 100%">
    456                     <repeat count="8">
    457                         <object type="image" name="playerBox2t1p[n]" size="10 0 10 30" hidden="true">
    458                             <object name="playerColourBox2t1p[n]" type="image" size="10 4 30 24"/>
    459                             <object name="playerName2t1p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    460                             <object name="civIcon2t1p[n]"         type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
    461                             <object name="totalUnitst1p[n]"       type="text"  style="ModernLabelText"/>
    462                             <object name="infantryUnitst1p[n]"    type="text"  style="ModernLabelText"/>
    463                             <object name="workerUnitst1p[n]"      type="text"  style="ModernLabelText"/>
    464                             <object name="cavalryUnitst1p[n]"     type="text"  style="ModernLabelText"/>
    465                             <object name="championUnitst1p[n]"    type="text"  style="ModernLabelText"/>
    466                             <object name="heroesUnitst1p[n]"      type="text"  style="ModernLabelText"/>
    467                             <object name="navyUnitst1p[n]"        type="text"  style="ModernLabelText"/>
    468                         </object>
    469                     </repeat>
    470                 </object>
    471                 <object name="teamHeading2t1"  type="text" style="ModernLeftTabLabelText"/>
    472                 <object name="totalUnitst1"    type="text" style="ModernLabelText"/>
    473                 <object name="infantryUnitst1" type="text" style="ModernLabelText"/>
    474                 <object name="workerUnitst1"   type="text" style="ModernLabelText"/>
    475                 <object name="cavalryUnitst1"  type="text" style="ModernLabelText"/>
    476                 <object name="championUnitst1" type="text" style="ModernLabelText"/>
    477                 <object name="heroesUnitst1"   type="text" style="ModernLabelText"/>
    478                 <object name="navyUnitst1"     type="text" style="ModernLabelText"/>
    479             </object>
    480             <object type="image" name="teamBox2t2" size="0 65 100% 100%-50" hidden="true">
    481                 <object type="text" name="teamNameHeading2t2" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    482                 <object size="0 30 100% 100%">
    483                     <repeat count="8">
    484                         <object type="image" name="playerBox2t2p[n]" size="10 0 10 30" hidden="true">
    485                             <object name="playerColourBox2t2p[n]" type="image" size="10 4 30 24"/>
    486                             <object name="playerName2t2p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    487                             <object name="civIcon2t2p[n]"         type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
    488                             <object name="totalUnitst2p[n]"       type="text"  style="ModernLabelText"/>
    489                             <object name="infantryUnitst2p[n]"    type="text"  style="ModernLabelText"/>
    490                             <object name="workerUnitst2p[n]"      type="text"  style="ModernLabelText"/>
    491                             <object name="cavalryUnitst2p[n]"     type="text"  style="ModernLabelText"/>
    492                             <object name="championUnitst2p[n]"    type="text"  style="ModernLabelText"/>
    493                             <object name="heroesUnitst2p[n]"      type="text"  style="ModernLabelText"/>
    494                             <object name="navyUnitst2p[n]"        type="text"  style="ModernLabelText"/>
    495                         </object>
    496                     </repeat>
    497                 </object>
    498                 <object name="teamHeading2t2"  type="text" style="ModernLeftTabLabelText"/>
    499                 <object name="totalUnitst2"    type="text" style="ModernLabelText"/>
    500                 <object name="infantryUnitst2" type="text" style="ModernLabelText"/>
    501                 <object name="workerUnitst2"   type="text" style="ModernLabelText"/>
    502                 <object name="cavalryUnitst2"  type="text" style="ModernLabelText"/>
    503                 <object name="championUnitst2" type="text" style="ModernLabelText"/>
    504                 <object name="heroesUnitst2"   type="text" style="ModernLabelText"/>
    505                 <object name="navyUnitst2"     type="text" style="ModernLabelText"/>
    506             </object>
    507             <object type="image" name="teamBox2t3" size="0 65 100% 100%-50" hidden="true">
    508                 <object type="text" name="teamNameHeading2t3" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    509                 <object size="0 30 100% 100%">
    510                     <repeat count="8">
    511                         <object type="image" name="playerBox2t3p[n]" size="10 0 10 30" hidden="true">
    512                             <object name="playerColourBox2t3p[n]" type="image" size="10 4 30 24"/>
    513                             <object name="playerName2t3p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    514                             <object name="civIcon2t3p[n]"         type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
    515                             <object name="totalUnitst3p[n]"       type="text"  style="ModernLabelText"/>
    516                             <object name="infantryUnitst3p[n]"    type="text"  style="ModernLabelText"/>
    517                             <object name="workerUnitst3p[n]"      type="text"  style="ModernLabelText"/>
    518                             <object name="cavalryUnitst3p[n]"     type="text"  style="ModernLabelText"/>
    519                             <object name="championUnitst3p[n]"    type="text"  style="ModernLabelText"/>
    520                             <object name="heroesUnitst3p[n]"      type="text"  style="ModernLabelText"/>
    521                             <object name="navyUnitst3p[n]"        type="text"  style="ModernLabelText"/>
    522                         </object>
    523                     </repeat>
    524                 </object>
    525                 <object name="teamHeading2t3"  type="text" style="ModernLeftTabLabelText"/>
    526                 <object name="totalUnitst3"    type="text" style="ModernLabelText"/>
    527                 <object name="infantryUnitst3" type="text" style="ModernLabelText"/>
    528                 <object name="workerUnitst3"   type="text" style="ModernLabelText"/>
    529                 <object name="cavalryUnitst3"  type="text" style="ModernLabelText"/>
    530                 <object name="championUnitst3" type="text" style="ModernLabelText"/>
    531                 <object name="heroesUnitst3"   type="text" style="ModernLabelText"/>
    532                 <object name="navyUnitst3"     type="text" style="ModernLabelText"/>
    533             </object>
     138            </repeat>
    534139
    535             <object type="image" name="noTeamsBox2" size="0 65 100% 100%-50" hidden="true">
     140            <object type="image" name="noTeamsBox" size="0 65 100% 100%-50" hidden="true">
    536141                <repeat count="8">
    537                     <object type="image" name="playerBox2[n]" size="10 0 10 30" hidden="true">
     142                    <object type="image" name="playerBox[n]" size="10 0 10 30" hidden="true">
    538143                        <object type="image" sprite="ForegroundBox" size="10 4 34 28">
    539                             <object name="playerColourBox2[n]" type="image" size="2 2 22 22"/>
     144                            <object name="playerColourBox[n]" type="image" size="2 2 22 22"/>
    540145                        </object>
    541                         <object name="playerName2[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    542                         <object name="civIcon2[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    543                         <object name="totalUnits[n]"       type="text"  style="ModernLabelText"/>
    544                         <object name="infantryUnits[n]"    type="text"  style="ModernLabelText"/>
    545                         <object name="workerUnits[n]"      type="text"  style="ModernLabelText"/>
    546                         <object name="cavalryUnits[n]"     type="text"  style="ModernLabelText"/>
    547                         <object name="championUnits[n]"    type="text"  style="ModernLabelText"/>
    548                         <object name="heroesUnits[n]"      type="text"  style="ModernLabelText"/>
    549                         <object name="navyUnits[n]"        type="text"  style="ModernLabelText"/>
     146                        <object name="playerName[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
     147                        <object name="civIcon[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     148                        <repeat var="x" count="8">
     149                            <object name="valueData[n][x]" type="text" style="ModernTabLabelText">
     150                                <translatableAttribute id="caption">DemoValueData</translatableAttribute>
     151                            </object>
     152                        </repeat>
    550153                    </object>
    551154                </repeat>
    552155            </object>
    553156        </object>
    554        
    555         <object name="resourcesPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58" hidden="true">
    556 
    557             <object size="0 0 100% 100%-50">
    558                 <object name="playerName3Heading" type="text" style="ModernLeftTabLabelText">
    559                     <translatableAttribute id="caption">Player name</translatableAttribute>
    560                 </object>
    561                 <object name="resourceHeading" type="text" style="ModernTabLabelText">
    562                     <translatableAttribute id="caption">Resource Statistics (Gathered / Used)</translatableAttribute>
    563                 </object>
    564                 <object name="foodGatheredHeading" type="text" style="ModernTabLabelText">
    565                     <translatableAttribute id="caption">Food</translatableAttribute>
    566                 </object>
    567                 <object name="woodGatheredHeading" type="text" style="ModernTabLabelText">
    568                     <translatableAttribute id="caption">Wood</translatableAttribute>
    569                 </object>
    570                 <object name="stoneGatheredHeading" type="text" style="ModernTabLabelText">
    571                     <translatableAttribute id="caption">Stone</translatableAttribute>
    572                 </object>
    573                 <object name="metalGatheredHeading" type="text" style="ModernTabLabelText">
    574                     <translatableAttribute id="caption">Metal</translatableAttribute>
    575                 </object>
    576                 <object name="totalGatheredHeading" type="text" style="ModernTabLabelText">
    577                     <translatableAttribute id="caption">Total</translatableAttribute>
    578                 </object>
    579                 <object name="treasuresCollectedHeading" type="text" style="ModernTabLabelText">
    580                     <translatableAttribute id="caption">Treasures collected</translatableAttribute>
    581                 </object>
    582                 <object name="resourcesTributedHeading" type="text" style="ModernTabLabelText">
    583                     <translatableAttribute id="caption">Tributes (Sent / Received)</translatableAttribute>
    584                 </object>
    585             </object>
    586 
    587             <object type="image" name="teamBox3t0" size="0 65 100% 100%-50" hidden="true">
    588                 <object type="text" name="teamNameHeading3t0" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    589                 <object size="0 30 100% 100%">
    590                     <repeat count="8">
    591                         <object type="image" name="playerBox3t0p[n]" size="10 0 10 30" hidden="true">
    592                             <object name="playerColourBox3t0p[n]"   type="image" size="10 4 30 24"/>
    593                             <object name="playerName3t0p[n]"        type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    594                             <object name="civIcon3t0p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    595                             <object name="foodGatheredt0p[n]"       type="text"  style="ModernLabelText"/>
    596                             <object name="woodGatheredt0p[n]"       type="text"  style="ModernLabelText"/>
    597                             <object name="stoneGatheredt0p[n]"      type="text"  style="ModernLabelText"/>
    598                             <object name="metalGatheredt0p[n]"      type="text"  style="ModernLabelText"/>
    599                             <object name="totalGatheredt0p[n]"      type="text"  style="ModernLabelText"/>
    600                             <object name="treasuresCollectedt0p[n]" type="text"  style="ModernLabelText"/>
    601                             <object name="resourcesTributedt0p[n]"  type="text"  style="ModernLabelText"/>
    602                         </object>
    603                     </repeat>
    604                 </object>
    605                 <object name="teamHeading3t0"       type="text" style="ModernLeftTabLabelText"/>
    606                 <object name="foodGatheredt0"       type="text" style="ModernLabelText"/>
    607                 <object name="woodGatheredt0"       type="text" style="ModernLabelText"/>
    608                 <object name="stoneGatheredt0"      type="text" style="ModernLabelText"/>
    609                 <object name="metalGatheredt0"      type="text" style="ModernLabelText"/>
    610                 <object name="totalGatheredt0"      type="text" style="ModernLabelText"/>
    611                 <object name="treasuresCollectedt0" type="text" style="ModernLabelText"/>
    612                 <object name="resourcesTributedt0"  type="text" style="ModernLabelText"/>
    613             </object>
    614             <object type="image" name="teamBox3t1" size="0 65 100% 100%-50" hidden="true">
    615                 <object type="text" name="teamNameHeading3t1" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    616                 <object size="0 30 100% 100%">
    617                     <repeat count="8">
    618                         <object type="image" name="playerBox3t1p[n]" size="10 0 10 30" hidden="true">
    619                             <object name="playerColourBox3t1p[n]"   type="image" size="10 4 30 24"/>
    620                             <object name="playerName3t1p[n]"        type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    621                             <object name="civIcon3t1p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    622                             <object name="foodGatheredt1p[n]"       type="text"  style="ModernLabelText"/>
    623                             <object name="woodGatheredt1p[n]"       type="text"  style="ModernLabelText"/>
    624                             <object name="stoneGatheredt1p[n]"      type="text"  style="ModernLabelText"/>
    625                             <object name="metalGatheredt1p[n]"      type="text"  style="ModernLabelText"/>
    626                             <object name="totalGatheredt1p[n]"      type="text"  style="ModernLabelText"/>
    627                             <object name="treasuresCollectedt1p[n]" type="text"  style="ModernLabelText"/>
    628                             <object name="resourcesTributedt1p[n]"  type="text"  style="ModernLabelText"/>
    629                         </object>
    630                     </repeat>
    631                 </object>
    632                 <object name="teamHeading3t1"       type="text" style="ModernLeftTabLabelText"/>
    633                 <object name="foodGatheredt1"       type="text" style="ModernLabelText"/>
    634                 <object name="woodGatheredt1"       type="text" style="ModernLabelText"/>
    635                 <object name="stoneGatheredt1"      type="text" style="ModernLabelText"/>
    636                 <object name="metalGatheredt1"      type="text" style="ModernLabelText"/>
    637                 <object name="totalGatheredt1"      type="text" style="ModernLabelText"/>
    638                 <object name="treasuresCollectedt1" type="text" style="ModernLabelText"/>
    639                 <object name="resourcesTributedt1"  type="text" style="ModernLabelText"/>
    640             </object>
    641             <object type="image" name="teamBox3t2" size="0 65 100% 100%-50" hidden="true">
    642                 <object type="text" name="teamNameHeading3t2" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    643                 <object size="0 30 100% 100%">
    644                     <repeat count="8">
    645                         <object type="image" name="playerBox3t2p[n]" size="10 0 10 30" hidden="true">
    646                             <object name="playerColourBox3t2p[n]"   type="image" size="10 4 30 24"/>
    647                             <object name="playerName3t2p[n]"        type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    648                             <object name="civIcon3t2p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    649                             <object name="foodGatheredt2p[n]"       type="text"  style="ModernLabelText"/>
    650                             <object name="woodGatheredt2p[n]"       type="text"  style="ModernLabelText"/>
    651                             <object name="stoneGatheredt2p[n]"      type="text"  style="ModernLabelText"/>
    652                             <object name="metalGatheredt2p[n]"      type="text"  style="ModernLabelText"/>
    653                             <object name="totalGatheredt2p[n]"      type="text"  style="ModernLabelText"/>
    654                             <object name="treasuresCollectedt2p[n]" type="text"  style="ModernLabelText"/>
    655                             <object name="resourcesTributedt2p[n]"  type="text"  style="ModernLabelText"/>
    656                         </object>
    657                     </repeat>
    658                 </object>
    659                 <object name="teamHeading3t2"       type="text" style="ModernLeftTabLabelText"/>
    660                 <object name="foodGatheredt2"       type="text" style="ModernLabelText"/>
    661                 <object name="woodGatheredt2"       type="text" style="ModernLabelText"/>
    662                 <object name="stoneGatheredt2"      type="text" style="ModernLabelText"/>
    663                 <object name="metalGatheredt2"      type="text" style="ModernLabelText"/>
    664                 <object name="totalGatheredt2"      type="text" style="ModernLabelText"/>
    665                 <object name="treasuresCollectedt2" type="text" style="ModernLabelText"/>
    666                 <object name="resourcesTributedt2"  type="text" style="ModernLabelText"/>
    667             </object>
    668             <object type="image" name="teamBox3t3" size="0 65 100% 100%-50" hidden="true">
    669                 <object type="text" name="teamNameHeading3t3" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    670                 <object size="0 30 100% 100%">
    671                     <repeat count="8">
    672                         <object type="image" name="playerBox3t3p[n]" size="10 0 10 30" hidden="true">
    673                             <object name="playerColourBox3t3p[n]"   type="image" size="10 4 30 24"/>
    674                             <object name="playerName3t3p[n]"        type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    675                             <object name="civIcon3t3p[n]"           type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    676                             <object name="foodGatheredt3p[n]"       type="text"  style="ModernLabelText"/>
    677                             <object name="woodGatheredt3p[n]"       type="text"  style="ModernLabelText"/>
    678                             <object name="stoneGatheredt3p[n]"      type="text"  style="ModernLabelText"/>
    679                             <object name="metalGatheredt3p[n]"      type="text"  style="ModernLabelText"/>
    680                             <object name="totalGatheredt3p[n]"      type="text"  style="ModernLabelText"/>
    681                             <object name="treasuresCollectedt3p[n]" type="text"  style="ModernLabelText"/>
    682                             <object name="resourcesTributedt3p[n]"  type="text"  style="ModernLabelText"/>
    683                         </object>
    684                     </repeat>
    685                 </object>
    686                 <object name="teamHeading3t3"       type="text" style="ModernLeftTabLabelText"/>
    687                 <object name="foodGatheredt3"       type="text" style="ModernLabelText"/>
    688                 <object name="woodGatheredt3"       type="text" style="ModernLabelText"/>
    689                 <object name="stoneGatheredt3"      type="text" style="ModernLabelText"/>
    690                 <object name="metalGatheredt3"      type="text" style="ModernLabelText"/>
    691                 <object name="totalGatheredt3"      type="text" style="ModernLabelText"/>
    692                 <object name="treasuresCollectedt3" type="text" style="ModernLabelText"/>
    693                 <object name="resourcesTributedt3"  type="text" style="ModernLabelText"/>
    694             </object>
    695            
    696             <object type="image" name="noTeamsBox3" size="0 65 100% 100%-50" hidden="true">
    697                 <repeat count="8">
    698                     <object type="image" name="playerBox3[n]" size="10 0 10 30" hidden="true">
    699                         <object type="image" sprite="ForegroundBox" size="10 4 34 28">
    700                             <object name="playerColourBox3[n]" type="image" size="2 2 22 22"/>
    701                         </object>
    702                         <object name="playerName3[n]"        type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    703                         <object name="civIcon3[n]"           type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
    704                         <object name="foodGathered[n]"       type="text"  style="ModernLabelText"/>
    705                         <object name="woodGathered[n]"       type="text"  style="ModernLabelText"/>
    706                         <object name="stoneGathered[n]"      type="text"  style="ModernLabelText" />
    707                         <object name="metalGathered[n]"      type="text"  style="ModernLabelText"/>
    708                         <object name="totalGathered[n]"      type="text"  style="ModernLabelText"/>
    709                         <object name="treasuresCollected[n]" type="text"  style="ModernLabelText"/>
    710                         <object name="resourcesTributed[n]"  type="text"  style="ModernLabelText"/>
    711                     </object>
    712                 </repeat>
    713             </object>
    714         </object>
    715        
    716         <object name="marketPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58" hidden="true">
    717 
    718             <object size="0 0 100% 100%-50">
    719                 <object name="playerName4Heading" type="text" style="ModernLeftTabLabelText">
    720                     <translatableAttribute id="caption">Player name</translatableAttribute>
    721                 </object>
    722                 <object name="exchangedFoodHeading" type="text" style="ModernTabLabelText">
    723                     <translatableAttribute id="caption">Food exchanged</translatableAttribute>
    724                 </object>
    725                 <object name="exchangedWoodHeading" type="text" style="ModernTabLabelText">
    726                     <translatableAttribute id="caption">Wood exchanged</translatableAttribute>
    727                 </object>
    728                 <object name="exchangedStoneHeading" type="text" style="ModernTabLabelText">
    729                     <translatableAttribute id="caption">Stone exchanged</translatableAttribute>
    730                 </object>
    731                 <object name="exchangedMetalHeading" type="text" style="ModernTabLabelText">
    732                     <translatableAttribute id="caption">Metal exchanged</translatableAttribute>
    733                 </object>
    734                 <object name="barterEfficiencyHeading" type="text" style="ModernTabLabelText">
    735                     <translatableAttribute id="caption">Barter efficiency</translatableAttribute>
    736                 </object>
    737                 <object name="tradeIncomeHeading" type="text" style="ModernTabLabelText">
    738                     <translatableAttribute id="caption">Trade income</translatableAttribute>
    739                 </object>
    740             </object>
    741            
    742             <object type="image" name="teamBox4t0" size="0 65 100% 100%-50" hidden="true">
    743                 <object type="text" name="teamNameHeading4t0" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    744                 <object size="0 30 100% 100%">
    745                     <repeat count="8">
    746                         <object type="image" name="playerBox4t0p[n]" size="10 0 10 30" hidden="true">
    747                             <object name="playerColourBox4t0p[n]" type="image" size="10 4 30 24"/>
    748                             <object name="playerName4t0p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    749                             <object name="civIcon4t0p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    750                             <object name="exchangedFoodt0p[n]"    type="text"  style="ModernLabelText"/>
    751                             <object name="exchangedWoodt0p[n]"    type="text"  style="ModernLabelText"/>
    752                             <object name="exchangedStonet0p[n]"   type="text"  style="ModernLabelText"/>
    753                             <object name="exchangedMetalt0p[n]"   type="text"  style="ModernLabelText"/>
    754                             <object name="barterEfficiencyt0p[n]" type="text"  style="ModernLabelText"/>
    755                             <object name="tradeIncomet0p[n]"      type="text"  style="ModernLabelText"/>
    756                         </object>
    757                     </repeat>
    758                 </object>
    759                 <object name="teamHeading4t0"     type="text" style="ModernLeftTabLabelText"/>
    760                 <object name="exchangedFoodt0"    type="text" style="ModernLabelText"/>
    761                 <object name="exchangedWoodt0"    type="text" style="ModernLabelText"/>
    762                 <object name="exchangedStonet0"   type="text" style="ModernLabelText"/>
    763                 <object name="exchangedMetalt0"   type="text" style="ModernLabelText"/>
    764                 <object name="barterEfficiencyt0" type="text" style="ModernLabelText"/>
    765                 <object name="tradeIncomet0"      type="text" style="ModernLabelText"/>
    766             </object>
    767             <object type="image" name="teamBox4t1" size="0 65 100% 100%-50" hidden="true">
    768                 <object type="text" name="teamNameHeading4t1" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    769                 <object size="0 30 100% 100%">
    770                     <repeat count="8">
    771                         <object type="image" name="playerBox4t1p[n]" size="10 0 10 30" hidden="true">
    772                             <object name="playerColourBox4t1p[n]" type="image" size="10 4 30 24"/>
    773                             <object name="playerName4t1p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    774                             <object name="civIcon4t1p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    775                             <object name="exchangedFoodt1p[n]"    type="text"  style="ModernLabelText"/>
    776                             <object name="exchangedWoodt1p[n]"    type="text"  style="ModernLabelText"/>
    777                             <object name="exchangedStonet1p[n]"   type="text"  style="ModernLabelText"/>
    778                             <object name="exchangedMetalt1p[n]"   type="text"  style="ModernLabelText"/>
    779                             <object name="barterEfficiencyt1p[n]" type="text"  style="ModernLabelText"/>
    780                             <object name="tradeIncomet1p[n]"      type="text"  style="ModernLabelText"/>
    781                         </object>
    782                     </repeat>
    783                 </object>
    784                 <object name="teamHeading4t1"     type="text" style="ModernLeftTabLabelText"/>
    785                 <object name="exchangedFoodt1"    type="text" style="ModernLabelText"/>
    786                 <object name="exchangedWoodt1"    type="text" style="ModernLabelText"/>
    787                 <object name="exchangedStonet1"   type="text" style="ModernLabelText"/>
    788                 <object name="exchangedMetalt1"   type="text" style="ModernLabelText"/>
    789                 <object name="barterEfficiencyt1" type="text" style="ModernLabelText"/>
    790                 <object name="tradeIncomet1"      type="text" style="ModernLabelText"/>
    791             </object>
    792             <object type="image" name="teamBox4t2" size="0 65 100% 100%-50" hidden="true">
    793                 <object type="text" name="teamNameHeading4t2" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    794                 <object size="0 30 100% 100%">
    795                     <repeat count="8">
    796                         <object type="image" name="playerBox4t2p[n]" size="10 0 10 30" hidden="true">
    797                             <object name="playerColourBox4t2p[n]" type="image" size="10 4 30 24"/>
    798                             <object name="playerName4t2p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    799                             <object name="civIcon4t2p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    800                             <object name="exchangedFoodt2p[n]"    type="text"  style="ModernLabelText"/>
    801                             <object name="exchangedWoodt2p[n]"    type="text"  style="ModernLabelText"/>
    802                             <object name="exchangedStonet2p[n]"   type="text"  style="ModernLabelText"/>
    803                             <object name="exchangedMetalt2p[n]"   type="text"  style="ModernLabelText"/>
    804                             <object name="barterEfficiencyt2p[n]" type="text"  style="ModernLabelText"/>
    805                             <object name="tradeIncomet2p[n]"      type="text"  style="ModernLabelText"/>
    806                         </object>
    807                     </repeat>
    808                 </object>
    809                 <object name="teamHeading4t2"     type="text" style="ModernLeftTabLabelText"/>
    810                 <object name="exchangedFoodt2"    type="text" style="ModernLabelText"/>
    811                 <object name="exchangedWoodt2"    type="text" style="ModernLabelText"/>
    812                 <object name="exchangedStonet2"   type="text" style="ModernLabelText"/>
    813                 <object name="exchangedMetalt2"   type="text" style="ModernLabelText"/>
    814                 <object name="barterEfficiencyt2" type="text" style="ModernLabelText"/>
    815                 <object name="tradeIncomet2"      type="text" style="ModernLabelText"/>
    816             </object>
    817             <object type="image" name="teamBox4t3" size="0 65 100% 100%-50" hidden="true">
    818                 <object type="text" name="teamNameHeading4t3" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    819                 <object size="0 30 100% 100%">
    820                     <repeat count="8">
    821                         <object type="image" name="playerBox4t3p[n]" size="10 0 10 30" hidden="true">
    822                             <object name="playerColourBox4t3p[n]" type="image" size="10 4 30 24"/>
    823                             <object name="playerName4t3p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    824                             <object name="civIcon4t3p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    825                             <object name="exchangedFoodt3p[n]"    type="text"  style="ModernLabelText"/>
    826                             <object name="exchangedWoodt3p[n]"    type="text"  style="ModernLabelText"/>
    827                             <object name="exchangedStonet3p[n]"   type="text"  style="ModernLabelText"/>
    828                             <object name="exchangedMetalt3p[n]"   type="text"  style="ModernLabelText"/>
    829                             <object name="barterEfficiencyt3p[n]" type="text"  style="ModernLabelText"/>
    830                             <object name="tradeIncomet3p[n]"      type="text"  style="ModernLabelText"/>
    831                         </object>
    832                     </repeat>
    833                 </object>
    834                 <object name="teamHeading4t3"     type="text" style="ModernLeftTabLabelText"/>
    835                 <object name="exchangedFoodt3"    type="text" style="ModernLabelText"/>
    836                 <object name="exchangedWoodt3"    type="text" style="ModernLabelText"/>
    837                 <object name="exchangedStonet3"   type="text" style="ModernLabelText"/>
    838                 <object name="exchangedMetalt3"   type="text" style="ModernLabelText"/>
    839                 <object name="barterEfficiencyt3" type="text" style="ModernLabelText"/>
    840                 <object name="tradeIncomet3"      type="text" style="ModernLabelText"/>
    841             </object>
    842            
    843             <object type="image" name="noTeamsBox4" size="0 65 100% 100%-50" hidden="true">
    844                 <repeat count="8">
    845                     <object type="image" name="playerBox4[n]" size="10 0 10 30" hidden="true">
    846                         <object type="image" sprite="ForegroundBox" size="10 4 34 28">
    847                             <object name="playerColourBox4[n]" type="image" size="2 2 22 22"/>
    848                         </object>
    849                         <object name="playerName4[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    850                         <object name="civIcon4[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    851                         <object name="exchangedFood[n]"    type="text"  style="ModernLabelText"/>
    852                         <object name="exchangedWood[n]"    type="text"  style="ModernLabelText"/>
    853                         <object name="exchangedStone[n]"   type="text"  style="ModernLabelText"/>
    854                         <object name="exchangedMetal[n]"   type="text"  style="ModernLabelText"/>
    855                         <object name="barterEfficiency[n]" type="text"  style="ModernLabelText"/>
    856                         <object name="tradeIncome[n]"      type="text"  style="ModernLabelText"/>
    857                     </object>
    858                 </repeat>
    859             </object>
    860         </object>
    861 
    862         <object name="miscPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58" hidden="true">
    863 
    864             <object size="0 0 100% 100%-50">
    865                 <object name="playerName5Heading" type="text" style="ModernLeftTabLabelText">
    866                     <translatableAttribute id="caption">Player name</translatableAttribute>
    867                 </object>
    868                 <object name="vegetarianRatioHeading" type="text" style="ModernTabLabelText">
    869                     <translatableAttribute id="caption">Vegetarian\nratio</translatableAttribute>
    870                 </object>
    871                 <object name="feminisationHeading" type="text" style="ModernTabLabelText">
    872                     <translatableAttribute id="caption">Feminisation</translatableAttribute>
    873                 </object>
    874                 <object name="killDeathRatioHeading" type="text" style="ModernTabLabelText">
    875                     <translatableAttribute id="caption">Kill / Death\nratio</translatableAttribute>
    876                 </object>
    877                 <object name="mapExplorationHeading" type="text" style="ModernTabLabelText">
    878                     <translatableAttribute id="caption">Map\nexploration</translatableAttribute>
    879                 </object>
    880             </object>
    881            
    882             <object type="image" name="teamBox5t0" size="0 65 100% 100%-50" hidden="true">
    883                 <object type="text" name="teamNameHeading5t0" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    884                 <object size="0 30 100% 100%">
    885                     <repeat count="8">
    886                         <object type="image" name="playerBox5t0p[n]" size="10 0 10 30" hidden="true">
    887                             <object name="playerColourBox5t0p[n]" type="image" size="10 4 30 24"/>
    888                             <object name="playerName5t0p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    889                             <object name="civIcon5t0p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    890                             <object name="vegetarianRatiot0p[n]"  type="text"  style="ModernLabelText"/>
    891                             <object name="feminisationt0p[n]"     type="text"  style="ModernLabelText"/>
    892                             <object name="killDeathRatiot0p[n]"   type="text"  style="ModernLabelText"/>
    893                             <object name="mapExplorationt0p[n]"   type="text"  style="ModernLabelText"/>
    894                         </object>   
    895                     </repeat>
    896                 </object>
    897                 <object name="teamHeading5t0"    type="text" style="ModernLeftTabLabelText"/>
    898                 <object name="vegetarianRatiot0" type="text" style="ModernLabelText"/>
    899                 <object name="feminisationt0"    type="text" style="ModernLabelText"/>
    900                 <object name="killDeathRatiot0"  type="text" style="ModernLabelText"/>
    901                 <object name="mapExplorationt0"  type="text" style="ModernLabelText"/>
    902             </object>
    903             <object type="image" name="teamBox5t1" size="0 65 100% 100%-50" hidden="true">
    904                 <object type="text" name="teamNameHeading5t1" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    905                 <object size="0 30 100% 100%">
    906                     <repeat count="8">
    907                         <object type="image" name="playerBox5t1p[n]" size="10 0 10 30" hidden="true">
    908                             <object name="playerColourBox5t1p[n]" type="image" size="10 4 30 24"/>
    909                             <object name="playerName5t1p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    910                             <object name="civIcon5t1p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    911                             <object name="vegetarianRatiot1p[n]"  type="text"  style="ModernLabelText"/>
    912                             <object name="feminisationt1p[n]"     type="text"  style="ModernLabelText"/>
    913                             <object name="killDeathRatiot1p[n]"   type="text"  style="ModernLabelText"/>
    914                             <object name="mapExplorationt1p[n]"   type="text"  style="ModernLabelText"/>
    915                         </object>   
    916                     </repeat>
    917                 </object>
    918                 <object name="teamHeading5t1"    type="text" style="ModernLeftTabLabelText"/>
    919                 <object name="vegetarianRatiot1" type="text" style="ModernLabelText"/>
    920                 <object name="feminisationt1"    type="text" style="ModernLabelText"/>
    921                 <object name="killDeathRatiot1"  type="text" style="ModernLabelText"/>
    922                 <object name="mapExplorationt1"  type="text" style="ModernLabelText"/>
    923             </object>
    924             <object type="image" name="teamBox5t2" size="0 65 100% 100%-50" hidden="true">
    925                 <object type="text" name="teamNameHeading5t2" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    926                 <object size="0 30 100% 100%">
    927                     <repeat count="8">
    928                         <object type="image" name="playerBox5t2p[n]" size="10 0 10 30" hidden="true">
    929                             <object name="playerColourBox5t2p[n]" type="image" size="10 4 30 24"/>
    930                             <object name="playerName5t2p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    931                             <object name="civIcon5t2p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    932                             <object name="vegetarianRatiot2p[n]"  type="text"  style="ModernLabelText"/>
    933                             <object name="feminisationt2p[n]"     type="text"  style="ModernLabelText"/>
    934                             <object name="killDeathRatiot2p[n]"   type="text"  style="ModernLabelText"/>
    935                             <object name="mapExplorationt2p[n]"   type="text"  style="ModernLabelText"/>
    936                         </object>   
    937                     </repeat>
    938                 </object>
    939                 <object name="teamHeading5t2"    type="text" style="ModernLeftTabLabelText"/>
    940                 <object name="vegetarianRatiot2" type="text" style="ModernLabelText"/>
    941                 <object name="feminisationt2"    type="text" style="ModernLabelText"/>
    942                 <object name="killDeathRatiot2"  type="text" style="ModernLabelText"/>
    943                 <object name="mapExplorationt2"  type="text" style="ModernLabelText"/>
    944             </object>
    945             <object type="image" name="teamBox5t3" size="0 65 100% 100%-50" hidden="true">
    946                 <object type="text" name="teamNameHeading5t3" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
    947                 <object size="0 30 100% 100%">
    948                     <repeat count="8">
    949                         <object type="image" name="playerBox5t3p[n]" size="10 0 10 30" hidden="true">
    950                             <object name="playerColourBox5t3p[n]" type="image" size="10 4 30 24"/>
    951                             <object name="playerName5t3p[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    952                             <object name="civIcon5t3p[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
    953                             <object name="vegetarianRatiot3p[n]"  type="text"  style="ModernLabelText"/>
    954                             <object name="feminisationt3p[n]"     type="text"  style="ModernLabelText"/>
    955                             <object name="killDeathRatiot3p[n]"   type="text"  style="ModernLabelText"/>
    956                             <object name="mapExplorationt3p[n]"   type="text"  style="ModernLabelText"/>
    957                         </object>   
    958                     </repeat>
    959                 </object>
    960                 <object name="teamHeading5t3"    type="text" style="ModernLeftTabLabelText"/>
    961                 <object name="vegetarianRatiot3" type="text" style="ModernLabelText"/>
    962                 <object name="feminisationt3"    type="text" style="ModernLabelText"/>
    963                 <object name="killDeathRatiot3"  type="text" style="ModernLabelText"/>
    964                 <object name="mapExplorationt3"  type="text" style="ModernLabelText"/>
    965             </object>
    966            
    967             <object type="image" name="noTeamsBox5" size="0 65 100% 100%-50" hidden="true">
    968                 <repeat count="8">
    969                     <object type="image" name="playerBox5[n]" size="10 0 10 30" hidden="true">
    970                         <object type="image" sprite="ForegroundBox" size="10 4 34 28">
    971                             <object name="playerColourBox5[n]" type="image" size="2 2 22 22"/>
    972                         </object>
    973                         <object name="playerName5[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
    974                         <object name="civIcon5[n]"         type="image" size="208 0 240 32" tooltip_style="sessionToolTip"/>
    975                         <object name="vegetarianRatio[n]"  type="text"  style="ModernLabelText"/>
    976                         <object name="feminisation[n]"     type="text"  style="ModernLabelText"/>
    977                         <object name="killDeathRatio[n]"   type="text"  style="ModernLabelText"/>
    978                         <object name="mapExploration[n]"   type="text"  style="ModernLabelText"/>
    979                     </object>   
    980                 </repeat>
    981             </object>
    982         </object>
    983        
     157   
    984158        <object type="button" style="StoneButton" size="100%-164 100%-52 100%-24 100%-24">
    985159            <translatableAttribute id="caption">Continue</translatableAttribute>
    986160            <action on="Press"><![CDATA[
     
    997171            </action>
    998172        </object>
    999173    </object>
    1000 </objects>
     174</objects>
     175 No newline at end of file