Ticket #2952: 2952.7.diff

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

     
     1var panelsData = [
     2    {   // Scores panel
     3        "headings": [   // headings on score panel
     4            { "caption": translate("Player name"),"yStart": 26, "width": 200 },
     5            { "caption": translate("Economy score"),"yStart": 16, "width": 100 },
     6            { "caption": translate("Military score"),"yStart": 16, "width": 100 },
     7            { "caption": translate("Exploration score"),"yStart": 16, "width": 100 },
     8            { "caption": translate("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": translate("Player name"), "yStart": 26, "width": 200 },
     22            { "caption": translate("Total"), "yStart": 34, "width": 105 },
     23            { "caption": translate("Houses"), "yStart": 34, "width": 85 },
     24            { "caption": translate("Economic"), "yStart": 34, "width": 85 },
     25            { "caption": translate("Outposts"), "yStart": 34, "width": 85 },
     26            { "caption": translate("Military"), "yStart": 34, "width": 85 },
     27            { "caption": translate("Fortresses"), "yStart": 34, "width": 85 },
     28            { "caption": translate("Civ centers"), "yStart": 34, "width": 85 },
     29            { "caption": translate("Wonders"), "yStart": 34, "width": 85 }
     30        ],
     31        "titleHeadings": [
     32            { "caption": translate("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": translate("Player name"), "yStart": 26, "width": 200 },
     49            { "caption": translate("Total"), "yStart": 34, "width": 120 },
     50            { "caption": translate("Infantry"), "yStart": 34, "width": 100 },
     51            { "caption": translate("Worker"), "yStart": 34, "width": 100 },
     52            { "caption": translate("Cavalry"), "yStart": 34, "width": 100 },
     53            { "caption": translate("Champion"), "yStart": 34, "width": 100 },
     54            { "caption": translate("Heroes"), "yStart": 34, "width": 100 },
     55            { "caption": translate("Navy"), "yStart": 34, "width": 100 }
     56        ],
     57        "titleHeadings": [
     58            { "caption": translate("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": translate("Player name"), "yStart": 26, "width": 200 },
     74            { "caption": translate("Food"), "yStart": 34, "width": 100 },
     75            { "caption": translate("Wood"), "yStart": 34, "width": 100 },
     76            { "caption": translate("Stone"), "yStart": 34, "width": 100 },
     77            { "caption": translate("Metal"), "yStart": 34, "width": 100 },
     78            { "caption": translate("Total"), "yStart": 34, "width": 110 },
     79            { "caption": translate("Treasures collected"), "yStart": 16, "width": 100 },
     80            { "caption": translate("Tributes (Sent / Received)"), "yStart": 16, "width": 121 }
     81        ],
     82        "titleHeadings": [
     83            { "caption": translate("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": translate("Player name"), "yStart": 26, "width": 200 },
     99            { "caption": translate("Food exchanged"), "yStart": 16, "width": 100 },
     100            { "caption": translate("Wood exchanged"), "yStart": 16, "width": 100 },
     101            { "caption": translate("Stone exchanged"), "yStart": 16, "width": 100 },
     102            { "caption": translate("Metal exchanged"), "yStart": 16, "width": 100 },
     103            { "caption": translate("Barter efficiency"), "yStart": 16, "width": 100 },
     104            { "caption": translate("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": translate("Player name"), "yStart": 26, "width": 200 },
     120            { "caption": translate("Vegetarian\nratio"), "yStart": 16, "width": 100 },
     121            { "caption": translate("Feminisation"), "yStart": 26, "width": 100 },
     122            { "caption": translate("Kill / Death\nratio"), "yStart": 16, "width": 100 },
     123            { "caption": translate("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    for (var h = 0; h < MAX_HEADINGTITLE; ++h)
     139    {
     140        Engine.GetGUIObjectByName("titleHeading["+ h +"]").hidden = true;
     141        Engine.GetGUIObjectByName("Heading[" + h + "]").hidden = true;
     142        for (var p = 0; p < MAX_SLOTS; ++p)
     143        {
     144            Engine.GetGUIObjectByName("valueData[" + p + "][" + h + "]").hidden = true;
     145            for (var t = 0; t < MAX_TEAMS; ++t)
     146            {
     147                Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + h + "]").hidden = true;
     148                Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + h + "]").hidden = true;
     149            }
     150        }
     151    }
     152}
     153
     154function updateGeneralPanelHeadings(headings)
     155{
     156    var left = 50;
     157    for (var h in headings)
     158    {
     159        var headerGUIName = "playerNameHeading";
     160        if (h > 0)
     161            headerGUIName = "Heading[" + (h - 1) + "]";
     162
     163        var headerGUI = Engine.GetGUIObjectByName(headerGUIName);
     164        headerGUI.caption = headings[h].caption;
     165        headerGUI.size = left + " " + headings[h].yStart + " " + (left + headings[h].width) + " 100%";
     166        headerGUI.hidden = false;
     167
     168        if (headings[h].width < LONG_HEADING_WIDTH)
     169            left += headings[h].width;
     170    }
     171}
     172
     173function updateGeneralPanelTitles(titleHeadings)
     174{
     175    var left = 250;
     176    for (var th in titleHeadings)
     177    {
     178        if (th >= MAX_HEADINGTITLE)
     179            break;
     180
     181        var headerGUI = Engine.GetGUIObjectByName("titleHeading["+ th +"]");
     182        headerGUI.caption = titleHeadings[th].caption;
     183        headerGUI.size = left + " " + titleHeadings[th].yStart + " " + (left + titleHeadings[th].width) + " 100%";
     184        headerGUI.hidden = false;
     185    }
     186}
     187
     188function updateGeneralPanelCounter(counters)
     189{
     190    var rowPlayerObjectWidth = 0;
     191    var left = 0;
     192    for (var p = 0; p < MAX_SLOTS; ++p)
     193    {
     194        left = 240;
     195        var counterObject;
     196        for (var w in counters)
     197        {
     198            counterObject = Engine.GetGUIObjectByName("valueData[" + p + "][" + w + "]");
     199            counterObject.size = left + " 6 " + (left + counters[w].width) + " 100%";
     200            counterObject.hidden = false;
     201            left += counters[w].width;
     202        }
     203        if (rowPlayerObjectWidth == 0)
     204            rowPlayerObjectWidth = left;
     205
     206        var counterTotalObject;
     207        for (var t = 0; t < MAX_TEAMS; ++t)
     208        {
     209            left = 240;
     210            for (var w in counters)
     211            {
     212                counterObject = Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + w + "]");
     213                counterObject.size = left + " 6 " + (left + counters[w].width) + " 100%";
     214                counterObject.hidden = false;
     215
     216                if (g_Teams[t])
     217                {
     218                    var yStart = 30 + g_Teams[t] * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP) + 2;
     219                    counterTotalObject = Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + w + "]");
     220                    counterTotalObject.size = (left + 20) + " " + yStart + " " + (left + counters[w].width) + " 100%";
     221                    counterTotalObject.hidden = false;
     222                }
     223
     224                left += counters[w].width;
     225            }
     226        }
     227    }
     228    return rowPlayerObjectWidth;
     229}
     230
     231function updateGeneralPanelTeams()
     232{
     233    if (!g_Teams || g_WithoutTeam > 0)
     234        Engine.GetGUIObjectByName("noTeamsBox").hidden = false;
     235
     236    if (!g_Teams)
     237        return;
     238
     239    var yStart = TEAMS_BOX_Y_START + g_WithoutTeam * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP);
     240    for (var i = 0; i < g_Teams.length; ++i)
     241    {
     242        var teamBox = Engine.GetGUIObjectByName("teamBoxt["+i+"]");
     243        teamBox.hidden = false;
     244        var teamBoxSize = teamBox.size;
     245        teamBoxSize.top = yStart;
     246        teamBox.size = teamBoxSize;
     247
     248        yStart += 30 + g_Teams[i] * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP) + 32;
     249
     250        Engine.GetGUIObjectByName("teamNameHeadingt["+i+"]").caption = "Team "+(i+1);
     251
     252        var teamHeading = Engine.GetGUIObjectByName("teamHeadingt["+i+"]");
     253        var yStartTotal = 30 + g_Teams[i] * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP) + 2;
     254        teamHeading.size = "50 "+yStartTotal+" 100% "+(yStartTotal+20);
     255        teamHeading.caption = translate("Team total");
     256    }
     257    // If there are no players without team, hide "player name" heading
     258    if (!g_WithoutTeam)
     259        Engine.GetGUIObjectByName("playerNameHeading").caption = "";
     260}
     261
     262function updateObjectPlayerPosition()
     263{
     264    for (var h = 0; h < MAX_SLOTS; ++h)
     265    {
     266        var playerBox = Engine.GetGUIObjectByName("playerBox[" + h + "]");
     267        var boxSize = playerBox.size;
     268        boxSize.top += h * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP);
     269        boxSize.bottom = boxSize.top + PLAYER_BOX_Y_SIZE;
     270        playerBox.size = boxSize;
     271
     272        for (var i = 0; i < MAX_TEAMS; ++i)
     273        {
     274            var playerBoxt = Engine.GetGUIObjectByName("playerBoxt[" + i + "][" + h + "]");
     275            boxSize = playerBoxt.size;
     276            boxSize.top += h * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP);
     277            boxSize.bottom = boxSize.top + PLAYER_BOX_Y_SIZE;
     278            playerBoxt.size = boxSize;
     279        };
     280    };
     281}
     282 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 + "][" + positionObject + "]";
     97            playerNameColumn = "playerNamet[" + playerState.team + "][" + positionObject + "]";
     98            playerColourBoxColumn = "playerColourBoxt[" + playerState.team + "][" + positionObject + "]";
     99            playerCivicBoxColumn = "civIcont[" + playerState.team + "][" + positionObject + "]";
     100            playerCounterValue = "valueDataTeam[" + playerState.team + "][" + 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    if (g_Teams && teamCounterFn)
     130        teamCounterFn(panelInfo.counters);
     131}
     132
     133function init(data)
     134{
     135    updateObjectPlayerPosition();
     136    g_GameData = data;
     137
    507138    // Map
    508139    var mapDisplayType = translate("Scenario");
    509140
     
    529160    }
    530161
    531162    Engine.GetGUIObjectByName("mapName").caption = sprintf(translate("%(mapName)s - %(mapType)s"), { mapName: translate(data.mapSettings.Name), mapType: mapDisplayType});
    532    
     163
    533164    // Panels
    534     // Align headers
    535     var left = 50;
    536     for each (var panel in panels)  // for all panels
    537         alignHeaders(panel.headings);
     165    g_MaxPlayers = data.playerStates.length - 1;
    538166
    539     // TODO set maxPlayers as playerCounters.length
    540     var maxPlayers = data.playerStates.length - 1;
    541     var maxTeams = 0;
    542 
    543     var teams = [ ];
    544167    if (data.mapSettings.LockTeams) // teams ARE locked
    545168    {
    546169        // count teams
    547         for(var t = 0; t < maxPlayers; ++t)
     170        for(var t = 0; t < g_MaxPlayers; ++t)
    548171        {
    549             if (!teams[data.playerStates[t+1].team])
     172            if (!g_Teams[data.playerStates[t+1].team])
    550173            {
    551                 teams[data.playerStates[t+1].team] = 1;
     174                g_Teams[data.playerStates[t+1].team] = 1;
    552175                continue;
    553176            }
    554             teams[data.playerStates[t+1].team]++;
     177            g_Teams[data.playerStates[t+1].team]++;
    555178        }
    556        
    557         if (teams.length == maxPlayers)
    558             teams = false;  // Each player has his own team. Displaying teams makes no sense.
     179
     180        if (g_Teams.length == g_MaxPlayers)
     181            g_Teams = false;    // Each player has his own team. Displaying teams makes no sense.
    559182    }
    560183    else                // teams are NOT locked
    561         teams = false;
    562    
     184        g_Teams = false;
     185
    563186    // Erase teams data if teams are not displayed
    564     if (!teams)
     187    if (!g_Teams)
    565188    {
    566         for(var p = 0; p < maxPlayers; ++p)
     189        for(var p = 0; p < g_MaxPlayers; ++p)
    567190            data.playerStates[p+1].team = -1;
    568191    }
    569    
    570     // Count players without team   (or all if teams are not displayed)
    571     var withoutTeam = maxPlayers;
    572     if (teams)
     192
     193    g_WithoutTeam = g_MaxPlayers;
     194    if (g_Teams)
    573195    {
    574196        // 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         }
     197        for (var i = 0; i < g_Teams.length; ++i)
     198            g_WithoutTeam -= g_Teams[i];
    609199    }
    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     }
    617200
    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 
    824201    selectPanel(0);
    825 }
     202}
     203 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/counters.js"/>
     13    <script file="gui/summary/layout.js"/>
    1214    <script file="gui/summary/summary.js"/>
    1315
    1416    <object type="image"
     
    5961                <translatableAttribute id="caption">Score</translatableAttribute>
    6062            </object>
    6163        </object>
    62        
     64
    6365        <object name="buildingsPanelButton" type="button" sprite="BackgroundTab" size="142 92 260 120">
    6466            <action on="Press">selectPanel(1);</action>
    6567            <object type="text" style="TitleText" ghost="true">
     
    8789                <translatableAttribute id="caption">Market</translatableAttribute>
    8890            </object>
    8991        </object>
    90        
     92
    9193        <object name="miscPanelButton" type="button" sprite="BackgroundTab" size="638 92 756 120">
    9294            <action on="Press">selectPanel(5);</action>
    9395            <object type="text" style="TitleText" ghost="true">
     
    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>
    106                 </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"/>
     105                <repeat var="x" count="8">
     106                    <object name="titleHeading[x]" type="text" style="ModernTabLabelText">
    215107                    </object>
    216108                </repeat>
    217             </object>
    218         </object>
    219        
    220         <object name="buildingsPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58" hidden="true">
    221 
    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"/>
     109                <repeat var="x" count="8">
     110                    <object name="Heading[x]" type="text" style="ModernTabLabelText">
     111                        <translatableAttribute id="caption">Demo</translatableAttribute>
    389112                    </object>
    390113                </repeat>
    391114            </object>
    392         </object>
    393        
    394         <object name="unitsPanel" type="image" sprite="ForegroundBody" size="20 120 100%-20 100%-58" hidden="true">
    395115
    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"/>
    441                         </object>
    442                     </repeat>
    443                 </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>
    534 
    535             <object type="image" name="noTeamsBox2" size="0 65 100% 100%-50" hidden="true">
    536                 <repeat count="8">
    537                     <object type="image" name="playerBox2[n]" size="10 0 10 30" hidden="true">
    538                         <object type="image" sprite="ForegroundBox" size="10 4 34 28">
    539                             <object name="playerColourBox2[n]" type="image" size="2 2 22 22"/>
    540                         </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"/>
     116            <repeat count="4" var="i">
     117                <object type="image" name="teamBoxt[i]" size="0 65 100% 100%-50" hidden="true">
     118                    <object type="text" name="teamNameHeadingt[i]" size="15 5 100% 100%" style="ModernLeftTabLabelText"/>
     119                    <object size="0 30 100% 100%">
     120                        <repeat count="8" var="n">
     121                            <object type="image" name="playerBoxt[i][n]" size="10 0 10 30" hidden="true">
     122                                <object name="playerColourBoxt[i][n]" type="image" size="10 4 30 24"/>
     123                                <object name="playerNamet[i][n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText" />
     124                                <object name="civIcont[i][n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     125                                <repeat var="x" count="8">
     126                                    <object name="valueDataTeam[i][n][x]" type="text" style="ModernTabLabelText">
     127                                        <translatableAttribute id="caption">DemoOhsi</translatableAttribute>
     128                                    </object>
     129                                </repeat>
     130                            </object>
     131                        </repeat>
    550132                    </object>
    551                 </repeat>
    552             </object>
    553         </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"/>
     133                    <object name="teamHeadingt[i]"     type="text" style="ModernLeftTabLabelText"/>
     134                    <repeat var="x" count="8">
     135                        <object name="valueDataTeam[i][x]" type="text" style="ModernTabLabelText">
     136                            <translatableAttribute id="caption">DemoNormal</translatableAttribute>
    602137                        </object>
    603138                    </repeat>
    604139                </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">
     140            </repeat>
    717141
    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">
     142            <object type="image" name="noTeamsBox" size="0 65 100% 100%-50" hidden="true">
    844143                <repeat count="8">
    845                     <object type="image" name="playerBox4[n]" size="10 0 10 30" hidden="true">
     144                    <object type="image" name="playerBox[n]" size="10 0 10 30" hidden="true">
    846145                        <object type="image" sprite="ForegroundBox" size="10 4 34 28">
    847                             <object name="playerColourBox4[n]" type="image" size="2 2 22 22"/>
     146                            <object name="playerColourBox[n]" type="image" size="2 2 22 22"/>
    848147                        </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"/>
     148                        <object name="playerName[n]"      type="text"  size="40 2 208 100%" style="ModernLeftLabelText"/>
     149                        <object name="civIcon[n]"         type="image" size="208 0 240 32"  tooltip_style="sessionToolTip"/>
     150                        <repeat var="x" count="8">
     151                            <object name="valueData[n][x]" type="text" style="ModernTabLabelText">
     152                                <translatableAttribute id="caption">DemoValueData</translatableAttribute>
     153                            </object>
     154                        </repeat>
    857155                    </object>
    858156                </repeat>
    859157            </object>
    860158        </object>
    861159
    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        
    984160        <object type="button" style="StoneButton" size="100%-164 100%-52 100%-24 100%-24">
    985161            <translatableAttribute id="caption">Continue</translatableAttribute>
    986162            <action on="Press"><![CDATA[
     
    997173            </action>
    998174        </object>
    999175    </object>
    1000 </objects>
     176</objects>
     177 No newline at end of file