';
document.getElementById("TableDisplay").innerHTML = results;
convertTrees();
document.getElementById('StatsDisplay').style.display="none";
document.getElementById('TableDisplay').style.display="block";
document.getElementById('LeftChartDiv').innerHTML = "";
document.getElementById('RightChartDiv').innerHTML = "";
}
function drawMarksChart(itemTotalPerDay)
{
var graphData = new google.visualization.DataTable();
graphData.addColumn('string', 'Date');
graphData.addColumn('number', 'Triumph');
graphData.addColumn('number', 'Distinction');
graphData.addColumn('number', 'Krypton');
graphData.addColumn('number', 'War');
graphData.addColumn('number', 'Conquest');
graphData.addColumn('number', 'Legend');
graphData.addColumn('number', 'Momentum');
graphData.addColumn('number', 'Allegiance');
graphData.addColumn('number', 'Victory');
graphData.addColumn('number', 'Strategy');
graphData.addColumn('number', 'Tactics');
graphData.addColumn('number', 'Lore');
var sortedArray = arraySortByKeysDate(itemTotalPerDay);
for (var index in sortedArray) {
var dateStr = sortedArray[index];
var triumph = itemTotalPerDay[sortedArray[index]].triumph;
var distinction = itemTotalPerDay[sortedArray[index]].distinction;
var krypton = itemTotalPerDay[sortedArray[index]].krypton;
var war = itemTotalPerDay[sortedArray[index]].war;
var conquest = itemTotalPerDay[sortedArray[index]].conquest;
var legend = itemTotalPerDay[sortedArray[index]].legend;
var momentum = itemTotalPerDay[sortedArray[index]].momentum;
var allegiance = itemTotalPerDay[sortedArray[index]].allegiance;
var victory = itemTotalPerDay[sortedArray[index]].victory;
var strategy = itemTotalPerDay[sortedArray[index]].strategy;
var tactics = itemTotalPerDay[sortedArray[index]].tactics;
var lore = itemTotalPerDay[sortedArray[index]].lore;
graphData.addRow([dateStr, triumph, distinction, krypton, war, conquest, legend, momentum, allegiance, victory, strategy, tactics, lore]);
}
var options = {
title: 'Marks gained per day',
titleTextStyle:
{
italics: false,
fontName: "Times",
fontStyle: "normal" //or bold, italic, etc.
}
};
var chart = new google.visualization.LineChart(document.getElementById('RightChartDiv'));
chart.draw(graphData, options);
}
function drawMarksPieChart(triumph, distinction, krypton, war, conquest, legend, momentum, allegiance, victory, tactics, strategy, lore)
{
var graph_data = new google.visualization.DataTable();
graph_data.addColumn('string', 'Marks Type');
graph_data.addColumn('number', 'Count');
graph_data.addRow(["Triumph", triumph]);
graph_data.addRow(["Distinction", distinction]);
graph_data.addRow(["Krypton", krypton]);
graph_data.addRow(["War", war]);
graph_data.addRow(["Conquest", conquest]);
graph_data.addRow(["Legend", legend]);
graph_data.addRow(["Momentum", momentum]);
graph_data.addRow(["Allegiance", allegiance]);
graph_data.addRow(["Victory", victory]);
graph_data.addRow(["Tactics", tactics]);
graph_data.addRow(["Strategy", strategy]);
graph_data.addRow(["Lore", lore]);
var options = {
title: 'Marks Distribution',
'chartArea':{left:15,top:65,width:"100%"}
};
var chart = new google.visualization.PieChart(document.getElementById('LeftChartDiv'));
chart.draw(graph_data, options);
}
// ********************************************************************
// * calculateMarks
// * Go through all of log lines and count up how
// * many of each type of mark the character received
// * For example: 1335707427: ClassicFumbles received 2 x Mark of War
// ********************************************************************
function calculateMarks(character, startDateString, endDateString)
{
// Example of JSON entry for mark:
// "Mark":[{"time":"1335027727","item":"1 x Mark of Krypton"}]},
var totalMarks = 0;
var marksKrypton = 0;
var marksTriumph = 0;
var marksDistinction = 0;
var marksAllegiance = 0;
var marksLegend = 0;
var marksVictory = 0;
var marksWar = 0;
var marksConquest = 0;
var marksMomentum = 0;
var marksTactics = 0;
var marksStrategy = 0;
var marksLore = 0;
var maxItemLength = 23;
var itype = "Marks";
var typeOfItem = "";
var timestamp = 0;
var startTS = convertDateStringToTimestamp(startDateString);
var endTS = convertDateStringToTimestamp(endDateString);
var people = [];
var itemTotalPerDay = {};
if (character == "All characters") {
people = Object.keys(allLogLinesJSON);
}
else {
people = [ character ];
}
var earliestTS = 0;
var latestTS = 0;
people.forEach(function(person) {
if (typeof(allLogLinesJSON[person]) != "undefined") {
if (allLogLinesJSON[person].hasOwnProperty(itype)) {
var itemArray = allLogLinesJSON[person][itype];
for (var i=0; i latestTS) {
latestTS = timestamp;
}
}
}
}
});
if (earliestTS < startTS) { earliestTS = startTS; }
if (latestTS > endTS) { latestTS = endTS; }
for (var i=earliestTS; i= startTS) && (timestamp < endTS)) {
typeOfItem = itemArray[i].item;
var marks = parseInt(typeOfItem.charAt(0));
var currentDay = convertTimestampToDateString(timestamp);
if (typeof(itemTotalPerDay[currentDay]) == "undefined") {
itemTotalPerDay[currentDay] = {};
itemTotalPerDay[currentDay].krypton = 0;
itemTotalPerDay[currentDay].triumph = 0;
itemTotalPerDay[currentDay].war = 0;
itemTotalPerDay[currentDay].distinction = 0;
itemTotalPerDay[currentDay].allegiance = 0;
itemTotalPerDay[currentDay].legend = 0;
itemTotalPerDay[currentDay].victory = 0;
itemTotalPerDay[currentDay].conquest = 0;
itemTotalPerDay[currentDay].momentum = 0;
itemTotalPerDay[currentDay].tactics = 0;
itemTotalPerDay[currentDay].strategy = 0;
itemTotalPerDay[currentDay].lore = 0;
}
if (typeOfItem.indexOf("Krypton") >= 0) { marksKrypton += marks; itemTotalPerDay[currentDay].krypton += marks; }
else if (typeOfItem.indexOf("Triumph") >= 0) { marksTriumph += marks; itemTotalPerDay[currentDay].triumph += marks; }
else if (typeOfItem.indexOf("War") >= 0) { marksWar += marks; itemTotalPerDay[currentDay].war += marks; }
else if (typeOfItem.indexOf("Distinction") >= 0) { marksDistinction += marks; itemTotalPerDay[currentDay].distinction += marks; }
else if (typeOfItem.indexOf("Allegiance") >= 0) { marksAllegiance += marks; itemTotalPerDay[currentDay].allegiance += marks; }
else if (typeOfItem.indexOf("Legend") >= 0) { marksLegend += marks; itemTotalPerDay[currentDay].legend += marks; }
else if (typeOfItem.indexOf("Victory") >= 0) { marksVictory += marks; itemTotalPerDay[currentDay].victory += marks; }
else if (typeOfItem.indexOf("Conquest") >= 0) { marksConquest += marks; itemTotalPerDay[currentDay].conquest += marks; }
else if (typeOfItem.indexOf("Momentum") >= 0) { marksMomentum += marks; itemTotalPerDay[currentDay].momentum += marks; }
else if (typeOfItem.indexOf("Tactics") >= 0) { marksTactics += marks; itemTotalPerDay[currentDay].tactics += marks; }
else if (typeOfItem.indexOf("Strategy") >= 0) { marksStrategy += marks; itemTotalPerDay[currentDay].strategy += marks; }
else if (typeOfItem.indexOf("Lore") >= 0) { marksLore += marks; itemTotalPerDay[currentDay].lore += marks; }
else {
console.log("ERROR: unknown type of mark: " + typeOfItem);
}
}
}
}
}
});
totalMarks = (marksStrategy + marksTactics + marksMomentum + marksKrypton + marksTriumph + marksDistinction + marksAllegiance + marksLegend + marksVictory + marksWar + marksConquest + marksLore);
var Message = "";
Message += "Character: " + character + "\r\n";
Message += "Date range: " + startDateString + " through " + endDateString + "\r\n\r\n";
Message += "Total marks: " + totalMarks + "\r\n\r\n";
if (totalMarks > 0) {
if (marksTriumph > 0) { Message += "Marks of Triumph: " + marksTriumph + "\r\n"; }
if (marksDistinction > 0) { Message += "Marks of Distinction: " + marksDistinction + "\r\n"; }
if (marksKrypton > 0) { Message += "Marks of Krypton: " + marksKrypton + "\r\n"; }
if (marksWar > 0) { Message += "Marks of War: " + marksWar + "\r\n"; }
if (marksLegend > 0) { Message += "Marks of Legend: " + marksLegend + "\r\n"; }
if (marksConquest > 0) { Message += "Marks of Conquest: " + marksConquest + "\r\n"; }
if (marksMomentum > 0) { Message += "Marks of Momentum: " + marksMomentum + "\r\n"; }
if (marksAllegiance > 0) { Message += "Marks of Allegiance: " + marksAllegiance + "\r\n"; }
if (marksVictory > 0) { Message += "Marks of Victory: " + marksVictory + "\r\n"; }
if (marksTactics > 0) { Message += "Marks of Tactics: " + marksTactics + "\r\n"; }
if (marksStrategy > 0) { Message += "Marks of Strategy: " + marksStrategy + "\r\n"; }
if (marksLore > 0) { Message += "Marks of Lore: " + marksLore + "\r\n"; }
}
Message += "\r\n";
var sortedArray = arraySortByKeysDate(itemTotalPerDay);
for (var index in sortedArray) {
var triumph = itemTotalPerDay[sortedArray[index]].triumph;
var distinction = itemTotalPerDay[sortedArray[index]].distinction;
var krypton = itemTotalPerDay[sortedArray[index]].krypton;
var war = itemTotalPerDay[sortedArray[index]].war;
var legend = itemTotalPerDay[sortedArray[index]].legend;
var conquest = itemTotalPerDay[sortedArray[index]].conquest;
var momentum = itemTotalPerDay[sortedArray[index]].momentum;
var allegiance = itemTotalPerDay[sortedArray[index]].allegiance;
var victory = itemTotalPerDay[sortedArray[index]].victory;
var tactics = itemTotalPerDay[sortedArray[index]].tactics;
var strategy = itemTotalPerDay[sortedArray[index]].strategy;
var lore = itemTotalPerDay[sortedArray[index]].lore;
if (triumph > 0) { Message += printLineDate("Marks of Triumph", triumph, sortedArray[index], maxItemLength); }
if (distinction > 0) { Message += printLineDate("Marks of Distinction", distinction, sortedArray[index], maxItemLength); }
if (krypton > 0) { Message += printLineDate("Marks of Krypton", krypton, sortedArray[index], maxItemLength); }
if (war > 0) { Message += printLineDate("Marks of War", war, sortedArray[index], maxItemLength); }
if (legend > 0) { Message += printLineDate("Marks of Legend", legend, sortedArray[index], maxItemLength); }
if (conquest > 0) { Message += printLineDate("Marks of Conquest", conquest, sortedArray[index], maxItemLength); }
if (momentum > 0) { Message += printLineDate("Marks of Momentum", momentum, sortedArray[index], maxItemLength); }
if (allegiance > 0) { Message += printLineDate("Marks of Allegiance", allegiance, sortedArray[index], maxItemLength); }
if (victory > 0) { Message += printLineDate("Marks of Victory", victory, sortedArray[index], maxItemLength); }
if (tactics > 0) { Message += printLineDate("Marks of Tactics", tactics, sortedArray[index], maxItemLength); }
if (strategy > 0) { Message += printLineDate("Marks of Strategy", strategy, sortedArray[index], maxItemLength); }
if (lore > 0) { Message += printLineDate("Marks of Lore", lore, sortedArray[index], maxItemLength); }
}
document.getElementById('StatsDisplay').style.display="block";
document.getElementById('TableDisplay').style.display="none";
document.getElementById("StatsDisplay").innerHTML = Message;
drawMarksPieChart(marksTriumph, marksDistinction, marksKrypton, marksWar, marksConquest, marksLegend, marksMomentum, marksAllegiance, marksVictory, marksTactics, marksStrategy, marksLore);
drawMarksChart(itemTotalPerDay);
}
function drawItemChart(itemTotalPerDay, itemStr) {
var graphData = new google.visualization.DataTable();
graphData.addColumn('string', 'Date');
graphData.addColumn('number', itemStr);
var sortedArray = arraySortByKeysDate(itemTotalPerDay);
var counter = 0;
for (var index in sortedArray) {
counter += 1;
}
// If more than a year's worth of days to graph, aggregate into months instead
var titleStr = ' obtained per day';
if (counter > 365) {
titleStr = ' obtained per month';
var previousMonthTotal = 0;
var previousYear = 0;
var previousMonth = 0;
for (var index in sortedArray) {
var dateStr = sortedArray[index];
// Have to include the radix of 10 as second param to parseint for leading 0 numbers like "01"
var month = parseInt(dateStr.substring(0, 2), 10);
var day = parseInt(dateStr.substring(3, 5), 10) - 1; // Day is zero based
var year = parseInt(dateStr.substring(6, 10));
var amount = Math.round(itemTotalPerDay[sortedArray[index]]);
if (previousYear == 0) {
previousYear = year;
}
if (previousMonth == 0) {
previousMonth = month;
}
if ((month == previousMonth) && (year == previousYear)) {
previousMonthTotal += amount;
}
else {
graphData.addRow([monthArrayShort[previousMonth-1] + " " + previousYear, previousMonthTotal]);
previousMonthTotal = amount;
previousYear = year;
previousMonth = month;
}
}
}
else {
for (var index in sortedArray) {
var amount = Math.round(itemTotalPerDay[sortedArray[index]]);
graphData.addRow([sortedArray[index], amount]);
}
}
var options = {
title: itemStr + titleStr
};
var chart = new google.visualization.ColumnChart(document.getElementById('RightChartDiv'));
chart.draw(graphData, options);
}
function drawItemPieChart(itemTotalPerPerson, itemStr)
{
var graphData = new google.visualization.DataTable();
graphData.addColumn('string', 'Person');
graphData.addColumn('number', 'Count');
for (var character in itemTotalPerPerson) {
graphData.addRow([character, itemTotalPerPerson[character]]);
}
var options = {
title: 'Distribution',
'chartArea':{left:15,top:65,width:"100%"}
};
var chart = new google.visualization.PieChart(document.getElementById('LeftChartDiv'));
chart.draw(graphData, options);
}
// ********************************************************************
// * calculateCash
// * Go through the recordset of log lines and count up how
// * much gained cash the character received
// * Log line will look like:
// * 1335027320: ClassicFumbles gained 7499 cash
// * JSON will look like:
// * "Cash":[{"time":"04/21/2012","item":3800}],
// ********************************************************************
function calculateCash(character, startDateString, endDateString)
{
var itype = "Cash";
var totalCash = 0.0;
var maxItemLength = 13;
var startTS = convertDateStringToTimestamp(startDateString);
var endTS = convertDateStringToTimestamp(endDateString);
var people = [];
var itemTotalPerDay = {};
var itemTotalPerPerson = {};
if (character == "All characters") {
people = Object.keys(allLogLinesJSON);
}
else {
people = [ character ];
}
var earliestTS = 0;
var latestTS = 0;
people.forEach(function(person) {
if (typeof(allLogLinesJSON[person]) != "undefined") {
if (allLogLinesJSON[person].hasOwnProperty(itype)) {
var itemArray = allLogLinesJSON[person][itype];
for (var i=0; i latestTS) {
latestTS = timestamp;
}
}
}
}
});
if (earliestTS < startTS) { earliestTS = startTS; }
if (latestTS > endTS) { latestTS = endTS; }
for (var i=earliestTS; i= startTS) && (currentDayTimestamp < endTS)) {
var cash = parseFloat(itemArray[i].item);
if (typeof(itemTotalPerDay[currentDay]) == "undefined") {
itemTotalPerDay[currentDay] = cash;
}
else {
itemTotalPerDay[currentDay] += cash;
}
if (typeof(itemTotalPerPerson[person]) == "undefined") {
itemTotalPerPerson[person] = cash;
}
else {
itemTotalPerPerson[person] += cash;
}
totalCash += cash;
}
}
}
}
});
var Message = "";
Message += "Character: " + character + "\r\n";
Message += "Date range: " + startDateString + " through " + endDateString + "\r\n\r\n";
Message += "Total cash: " + totalCash.formatMoney(0, '.', ',') + "\r\n\r\n";
Message += "Cash".lpad(" ", 12) + "\t Date gained\r\n";
var sortedArray = arraySortByKeysDate(itemTotalPerDay);
for (var index in sortedArray) {
Message += printLineCash(sortedArray[index], itemTotalPerDay[sortedArray[index]], " ", maxItemLength);
}
document.getElementById('StatsDisplay').style.display="block";
document.getElementById('TableDisplay').style.display="none";
document.getElementById("StatsDisplay").innerHTML = Message;
drawItemChart(itemTotalPerDay, itype);
drawItemPieChart(itemTotalPerPerson, itype);
}
function drawDamageChart(damageTotalPerDay, critDamageTotalPerDay, itemStr) {
var graphData = new google.visualization.DataTable();
graphData.addColumn('string', 'Date');
graphData.addColumn('number', "Damage");
graphData.addColumn('number', "Critical Damage");
var sortedArray = arraySortByKeysDate(damageTotalPerDay);
var counter = 0;
for (var index in sortedArray) {
counter += 1;
}
// If more than a year's worth of days to graph, aggregate into months instead
var titleStr = ' dealt per day';
if (counter > 365) {
titleStr = ' dealt per month';
var previousMonthTotal = 0;
var previousMonthTotal2 = 0;
var previousYear = 0;
var previousMonth = 0;
for (var index in sortedArray) {
var dateStr = sortedArray[index];
// Have to include the radix of 10 as second param to parseint for leading 0 numbers like "01"
var month = parseInt(dateStr.substring(0, 2), 10);
var day = parseInt(dateStr.substring(3, 5), 10) - 1; // Day is zero based
var year = parseInt(dateStr.substring(6, 10));
var amount2 = 0;
var amount = Math.round(damageTotalPerDay[sortedArray[index]]);
if (typeof(critDamageTotalPerDay[sortedArray[index]]) != "undefined") {
amount2 = Math.round(critDamageTotalPerDay[sortedArray[index]]);
}
if (previousYear == 0) {
previousYear = year;
}
if (previousMonth == 0) {
previousMonth = month;
}
if ((month == previousMonth) && (year == previousYear)) {
previousMonthTotal += amount;
previousMonthTotal2 += amount2;
}
else {
graphData.addRow([monthArrayShort[previousMonth-1] + " " + previousYear, previousMonthTotal, previousMonthTotal2]);
previousMonthTotal = amount;
previousMonthTotal2 = amount2;
previousYear = year;
previousMonth = month;
}
}
}
else {
for (var index in sortedArray) {
var amount2 = 0;
var amount = Math.round(damageTotalPerDay[sortedArray[index]]);
if (typeof(critDamageTotalPerDay[sortedArray[index]]) != "undefined") {
amount2 = Math.round(critDamageTotalPerDay[sortedArray[index]]);
}
graphData.addRow([sortedArray[index], amount, amount2]);
}
}
var options = {
title: itemStr + titleStr
};
var chart = new google.visualization.ColumnChart(document.getElementById('RightChartDiv'));
chart.draw(graphData, options);
}
function calculateDamage(character, startDateString, endDateString)
{
var itype = "Damage";
var itype2 = "CritDamage";
var totalDamage = 0.0;
var maxItemLength = 13;
var startTS = convertDateStringToTimestamp(startDateString);
var endTS = convertDateStringToTimestamp(endDateString);
var people = [];
var damageTotalPerDay = {};
var damageTotalPerPerson = {};
var critdamageTotalPerDay = {};
var critdamageTotalPerPerson = {};
if (character == "All characters") {
people = Object.keys(allLogLinesJSON);
}
else {
people = [ character ];
}
people.forEach(function(person) {
if (typeof(allLogLinesJSON[person]) != "undefined") {
if (allLogLinesJSON[person].hasOwnProperty(itype)) {
var itemArray = allLogLinesJSON[person][itype];
for (var i=0; i= startTS) && (currentDayTimestamp < endTS)) {
var damage = parseFloat(itemArray[i].item);
if (typeof(damageTotalPerDay[currentDay]) == "undefined") {
damageTotalPerDay[currentDay] = damage;
}
else {
damageTotalPerDay[currentDay] += damage;
}
if (typeof(damageTotalPerPerson[person]) == "undefined") {
damageTotalPerPerson[person] = damage;
}
else {
damageTotalPerPerson[person] += damage;
}
totalDamage += damage;
}
}
}
if (allLogLinesJSON[person].hasOwnProperty(itype2)) {
var itemArray = allLogLinesJSON[person][itype2];
for (var i=0; i= startTS) && (currentDayTimestamp < endTS)) {
var damage = parseFloat(itemArray[i].item);
if (typeof(critdamageTotalPerDay[currentDay]) == "undefined") {
critdamageTotalPerDay[currentDay] = damage;
}
else {
critdamageTotalPerDay[currentDay] += damage;
}
if (typeof(critdamageTotalPerPerson[person]) == "undefined") {
critdamageTotalPerPerson[person] = damage;
}
else {
critdamageTotalPerPerson[person] += damage;
}
totalDamage += damage;
}
}
}
}
});
var Message = "";
Message += "Character: " + character + "\r\n";
Message += "Date range: " + startDateString + " through " + endDateString + "\r\n\r\n";
Message += "Total damage: " + totalDamage + "\r\n\r\n";
Message += "Damage:\r\n\r\n";
var sortedArray = arraySortByKeys(damageTotalPerDay);
for (var index in sortedArray) {
Message += printLineCash(sortedArray[index], damageTotalPerDay[sortedArray[index]], " ", maxItemLength);
}
Message += "\r\nCritical Damage:\r\n\r\n";
var sortedArray = arraySortByKeys(critdamageTotalPerDay);
for (var index in sortedArray) {
Message += printLineCash(sortedArray[index], critdamageTotalPerDay[sortedArray[index]], " ", maxItemLength);
}
document.getElementById('StatsDisplay').style.display="block";
document.getElementById('TableDisplay').style.display="none";
document.getElementById("StatsDisplay").innerHTML = Message;
drawDamageChart(damageTotalPerDay, critdamageTotalPerDay, itype);
// Too many people recording damage to stick them all in a pie chart. Only get top 9
var top9damageTotalPerPerson = {};
var sortedArray = sortByValue(damageTotalPerPerson);
var lastOne = sortedArray.length-9;
if (lastOne < 0) {
lastOne = 0;
}
for (var i = sortedArray.length-1; i > lastOne; i--) {
var key = sortedArray[i][0];
// var value = sortedArray[i][1];
top9damageTotalPerPerson[key] = damageTotalPerPerson[key];
}
drawItemPieChart(top9damageTotalPerPerson, itype);
}
function calculateDamagePowers(character, startDateString, endDateString)
{
var itype = "DamagePowers";
var totalDamage = 0.0;
var maxItemLength = 13;
var listMessage = "";
var startTS = convertDateStringToTimestamp(startDateString);
var endTS = convertDateStringToTimestamp(endDateString);
var people = [];
var damageTotalPerTS = {};
if (character == "All characters") {
people = Object.keys(allLogLinesJSON);
}
else {
people = [ character ];
}
var minTimestamp = 9337652552;
var maxTimestamp = 0;
people.forEach(function(person) {
if (allLogLinesJSON[person].hasOwnProperty(itype)) {
var damageObj = Object.keys(allLogLinesJSON[person][itype]);
damageObj.forEach(function(power) {
var powerArray = allLogLinesJSON[person][itype][power];
for (var i=0; i maxTimestamp) {
maxTimestamp = powerArray[i].time;
}
}
});
}
});
var Message = "";
Message += "Character: " + character + "\r\n";
Message += "Date range: " + startDateString + " through " + endDateString + "\r\n\r\n";
Message += "Total damage: " + totalDamage + "\r\n\r\n";
Message += listMessage;
document.getElementById('StatsDisplay').style.display="block";
document.getElementById('TableDisplay').style.display="none";
document.getElementById("StatsDisplay").innerHTML = Message;
}
function drawLockboxContentsPieChart(consumable, ring, neck, gear) {
var box2_data = new google.visualization.DataTable();
box2_data.addColumn('string', 'Lockboxes');
box2_data.addColumn('number', 'Count');
box2_data.addRow(["Consumables", consumable]);
box2_data.addRow(["Rings", ring]);
box2_data.addRow(["Necks", neck]);
box2_data.addRow(["Gear", gear]);
var options = {
title: 'Lockbox contents',
'chartArea':{left:15,top:65,width:"100%"}
};
var chart = new google.visualization.PieChart(document.getElementById('LeftChartDiv'));
chart.draw(box2_data, options);
}
// ********************************************************************
// * calculateLockboxes
// * Go through all of log lines and count up how
// * many of each type of lockbox the character received
// * For example: 1335712642: ClassicFumbles received Compound ATK-04
// ********************************************************************
function calculateLockboxes(character, startDateString, endDateString)
{
var itype = "Lockbox";
var totalLockboxes = 0;
var totalLockboxesGotten = 0;
var totalLockboxConsumables = 0;
var totalLockboxRings = 0;
var totalLockboxNecks = 0;
var totalLockboxGear = 0;
var timestamp = 0;
var listMessage = "";
var maxItemLength = 50;
var startTS = convertDateStringToTimestamp(startDateString);
var endTS = convertDateStringToTimestamp(endDateString);
var people = [];
var itemTotalPerDay = {};
var lockboxList = new Array();
if (character == "All characters") {
people = Object.keys(allLogLinesJSON);
}
else {
people = [ character ];
}
// Let's figure out the date ranges we will be displaying in the graph
// and zero them all out so we can display dates with 0 lockboxes
// First, lets get the start and end date ranges according to the actual data
// I could just use startTS and endTS but by default that is over two years worth of days
var earliestTS = 0;
var latestTS = 0;
people.forEach(function(person) {
if (typeof(allLogLinesJSON[person]) != "undefined") {
if (allLogLinesJSON[person].hasOwnProperty(itype)) {
var itemArray = allLogLinesJSON[person][itype];
for (var i=0; i latestTS) {
latestTS = timestamp;
}
}
}
}
});
if (earliestTS < startTS) { earliestTS = startTS; }
if (latestTS > endTS) { latestTS = endTS; }
for (var i=earliestTS; i= startTS) && (timestamp < endTS)) {
// Count total lockboxes received even unopened ones
if (itemArray[i].item == "Promethium Lockbox") {
totalLockboxesGotten++;
}
// Now work on opened lockboxes
else {
lockboxList.push({item:itemArray[i].item, time:timestamp, character:person});
if (isLockboxConsumable(itemArray[i].item)) { totalLockboxConsumables += 1; }
else if (isLockboxRing(itemArray[i].item)) { totalLockboxRings += 1; }
else if (isLockboxNeck(itemArray[i].item)) { totalLockboxNecks += 1; }
else if (isLockboxGear(itemArray[i].item)) { totalLockboxGear += 1; }
totalLockboxes += 1;
var currentDay = convertTimestampToDateString(timestamp);
if (typeof(itemTotalPerDay[currentDay]) == "undefined") {
itemTotalPerDay[currentDay] = 1;
}
else {
itemTotalPerDay[currentDay] += 1;
}
}
}
}
}
}
});
var Message = "";
Message += "Character: " + character + "\r\n";
Message += "Date range: " + startDateString + " through " + endDateString + "\r\n\r\n";
Message += "Total Lockboxes obtained: " + totalLockboxesGotten + "\r\n";
Message += "Total Lockboxes opened: " + totalLockboxes + "\r\n\r\n";
Message += "Lockbox contents".rpad(" ", maxItemLength) + "\tDate received\tCharacter\r\n\r\n";
lockboxList.sort(function(x, y){
return x.time - y.time;
})
for (var i = 0; i < lockboxList.length; i++) {
listMessage += printLineDate(lockboxList[i].item, convertTimestampToDateString(lockboxList[i].time), lockboxList[i].character, maxItemLength);
}
Message += listMessage;
document.getElementById('StatsDisplay').style.display="block";
document.getElementById('TableDisplay').style.display="none";
document.getElementById("StatsDisplay").innerHTML = Message;
drawLockboxContentsPieChart(totalLockboxConsumables, totalLockboxRings, totalLockboxNecks, totalLockboxGear);
drawItemChart(itemTotalPerDay, itype);
}
// ********************************************************************
// * calculateKnockouts
// ********************************************************************
function calculateKnockouts(character, startDateString, endDateString)
{
var itype = "Knockouts";
var totalKnockouts = 0;
var timestamp = 0;
var listMessage = "";
var maxItemLength = 50;
var startTS = convertDateStringToTimestamp(startDateString);
var endTS = convertDateStringToTimestamp(endDateString);
var people = [];
var itemTotalPerDay = {};
var itemTotalPerPerson = {};
if (character == "All characters") {
people = Object.keys(allLogLinesJSON);
}
else {
people = [ character ];
}
var earliestTS = 0;
var latestTS = 0;
people.forEach(function(person) {
if (typeof(allLogLinesJSON[person]) != "undefined") {
if (allLogLinesJSON[person].hasOwnProperty(itype)) {
var itemArray = allLogLinesJSON[person][itype];
for (var i=0; i latestTS) {
latestTS = timestamp;
}
}
}
}
});
if (earliestTS < startTS) { earliestTS = startTS; }
if (latestTS > endTS) { latestTS = endTS; }
for (var i=earliestTS; i= startTS) && (timestamp < endTS)) {
var currentDay = convertTimestampToDateString(timestamp);
if (typeof(itemTotalPerDay[currentDay]) == "undefined") {
itemTotalPerDay[currentDay] = 1;
}
else {
itemTotalPerDay[currentDay] += 1;
}
// Here we will keep track of how many times I knocked out a specific thing, like Reaper 100 times
// then use this for pie chart
if (typeof(itemTotalPerPerson[itemArray[i].item]) == "undefined") {
itemTotalPerPerson[itemArray[i].item] = 1;
}
else {
itemTotalPerPerson[itemArray[i].item] += 1;
}
listMessage += printLineDate(itemArray[i].item, convertTimestampToDateString(timestamp), person, maxItemLength);
totalKnockouts += 1;
}
}
}
}
});
var Message = "";
Message += "Character: " + character + "\r\n";
Message += "Date range: " + startDateString + " through " + endDateString + "\r\n\r\n";
Message += "Total Knockouts: " + totalKnockouts + "\r\n\r\n";
Message += listMessage;
document.getElementById('StatsDisplay').style.display="block";
document.getElementById('TableDisplay').style.display="none";
document.getElementById("StatsDisplay").innerHTML = Message;
drawItemChart(itemTotalPerDay, itype);
// Too many knockouts to stick them all in a pie chart. Only get top 9
var top9knockoutsTotalPerPerson = {};
var sortedArray = sortByValue(itemTotalPerPerson);
var lastOne = sortedArray.length-9;
if (lastOne < 0) {
lastOne = 0;
}
for (var i = sortedArray.length-1; i > lastOne; i--) {
var key = sortedArray[i][0];
// var value = sortedArray[i][1];
top9knockoutsTotalPerPerson[key] = itemTotalPerPerson[key];
}
drawItemPieChart(top9knockoutsTotalPerPerson, itype);
}
function isPlanSoder(planStr)
{
if ((planStr.indexOf("Soder") >= 0) ||
(planStr.indexOf("Grenade") >= 0) ||
(planStr.indexOf("Sport Drink") >= 0) ||
(planStr.indexOf("PvP Debuff") >= 0)) {
return true;
}
return false;
}
// ********************************************************************
// * calculatePlans
// * Go through all of log lines and count up how
// * many of each type of Plan the character received
// * For example: 1335707550: LoVeR BaBy received Plans: Energy Soder Mk IV
// ********************************************************************
function calculatePlans(character, startDateString, endDateString)
{
var itype = "Plans";
var totalPlans = 0;
var timestamp = 0;
var listMessage = "";
var maxItemLength = 50;
var startTS = convertDateStringToTimestamp(startDateString);
var endTS = convertDateStringToTimestamp(endDateString);
var people = [];
var itemTotalPerDay = {};
var itemTotalPerPerson = {};
if (character == "All characters") {
people = Object.keys(allLogLinesJSON);
}
else {
people = [ character ];
}
var earliestTS = 0;
var latestTS = 0;
people.forEach(function(person) {
if (typeof(allLogLinesJSON[person]) != "undefined") {
if (allLogLinesJSON[person].hasOwnProperty(itype)) {
var itemArray = allLogLinesJSON[person][itype];
for (var i=0; i latestTS) {
latestTS = timestamp;
}
}
}
}
});
if (earliestTS < startTS) { earliestTS = startTS; }
if (latestTS > endTS) { latestTS = endTS; }
for (var i=earliestTS; i= startTS) && (timestamp < endTS)) {
var currentDay = convertTimestampToDateString(timestamp);
if (typeof(itemTotalPerDay[currentDay]) == "undefined") {
itemTotalPerDay[currentDay] = 1;
}
else {
itemTotalPerDay[currentDay] += 1;
}
// Loop thru plans backwards so we don't see Plan I when it is actually Plan II
if (isPlanSoder(itemArray[i].item)) {
if (typeof(itemTotalPerPerson[planType[6]]) == "undefined") {
itemTotalPerPerson[planType[6]] = 1;
}
else {
itemTotalPerPerson[planType[6]] += 1;
}
}
else {
for (var j=planType.length-2; j>=0; j--) {
if (itemArray[i].item.indexOf(planType[j]) > 0) {
if (typeof(itemTotalPerPerson[planType[j]]) == "undefined") {
itemTotalPerPerson[planType[j]] = 1;
}
else {
itemTotalPerPerson[planType[j]] += 1;
}
// If found, don't check any more plan types for this plan item
break;
}
}
}
listMessage += printLineDate(itemArray[i].item, convertTimestampToDateString(timestamp), person, maxItemLength);
totalPlans += 1;
}
}
}
}
});
var Message = "";
Message += "Character: " + character + "\r\n";
Message += "Date range: " + startDateString + " through " + endDateString + "\r\n\r\n";
Message += "Total Plans: " + totalPlans + "\r\n\r\n";
Message += "Plan".rpad(" ", maxItemLength) + "\tDate received\tCharacter\r\n\r\n";
Message += listMessage;
document.getElementById('StatsDisplay').style.display="block";
document.getElementById('TableDisplay').style.display="none";
document.getElementById("StatsDisplay").innerHTML = Message;
drawItemChart(itemTotalPerDay, itype);
drawItemPieChart(itemTotalPerPerson, itype);
}
// ********************************************************************
// * calculateWeapons
// ********************************************************************
function calculateWeapons(character, startDateString, endDateString)
{
var itype = "Weapon";
var totalWeapons = 0;
var timestamp = 0;
var listMessage = "";
var maxItemLength = 50;
var startTS = convertDateStringToTimestamp(startDateString);
var endTS = convertDateStringToTimestamp(endDateString);
var people = [];
var itemTotalPerDay = {};
var itemTotalPerType = {};
if (character == "All characters") {
people = Object.keys(allLogLinesJSON);
}
else {
people = [ character ];
}
var earliestTS = 0;
var latestTS = 0;
people.forEach(function(person) {
if (typeof(allLogLinesJSON[person]) != "undefined") {
if (allLogLinesJSON[person].hasOwnProperty(itype)) {
var itemArray = allLogLinesJSON[person][itype];
for (var i=0; i latestTS) {
latestTS = timestamp;
}
}
}
}
});
if (earliestTS < startTS) { earliestTS = startTS; }
if (latestTS > endTS) { latestTS = endTS; }
for (var i=earliestTS; i= startTS) && (timestamp < endTS)) {
var currentDay = convertTimestampToDateString(timestamp);
if (typeof(itemTotalPerDay[currentDay]) == "undefined") {
itemTotalPerDay[currentDay] = 1;
}
else {
itemTotalPerDay[currentDay] += 1;
}
var dps = 0;
var foundOne = 0;
for (var j=0; j 365) {
titleStr = 'Hours Spent on DCUO per month';
var previousMonthTotal = 0;
var previousYear = 0;
var previousMonth = 0;
for (var index in sortedArray) {
var dateStr = sortedArray[index];
// Have to include the radix of 10 as second param to parseint for leading 0 numbers like "01"
var month = parseInt(dateStr.substring(0, 2), 10);
var day = parseInt(dateStr.substring(3, 5), 10) - 1; // Day is zero based
var year = parseInt(dateStr.substring(6, 10));
var hours = Math.round(dayCount[sortedArray[index]] / 3600);
if (previousYear == 0) {
previousYear = year;
}
if (previousMonth == 0) {
previousMonth = month;
}
if ((month == previousMonth) && (year == previousYear)) {
previousMonthTotal += hours;
}
else {
graphData.addRow([monthArrayShort[previousMonth-1] + " " + previousYear, previousMonthTotal]);
previousMonthTotal = hours;
previousYear = year;
previousMonth = month;
}
}
}
else {
for (var index in sortedArray) {
var hours = Math.round(dayCount[sortedArray[index]] / 3600);
graphData.addRow([sortedArray[index], hours]);
}
}
var options = {
title: titleStr
};
var chart = new google.visualization.ColumnChart(document.getElementById('RightChartDiv'));
chart.draw(graphData, options);
}
function drawTimePieChart(daysObj) {
var graphData = new google.visualization.DataTable();
graphData.addColumn('string', 'Weekday');
graphData.addColumn('number', 'Count');
graphData.addRow(["Sunday", daysObj["Sunday"]]);
graphData.addRow(["Monday", daysObj["Monday"]]);
graphData.addRow(["Tuesday", daysObj["Tuesday"]]);
graphData.addRow(["Wednesday", daysObj["Wednesday"]]);
graphData.addRow(["Thursday", daysObj["Thursday"]]);
graphData.addRow(["Friday", daysObj["Friday"]]);
graphData.addRow(["Saturday", daysObj["Saturday"]]);
var options = {
title: 'Weekday Time Distribution',
'chartArea':{left:15,top:65,width:"100%"}
};
var chart = new google.visualization.PieChart(document.getElementById('LeftChartDiv'));
chart.draw(graphData, options);
}
// ********************************************************************
// * calculateTime
// * Go through all of log lines and count up how
// * much time the Character was active in DCUO
// ********************************************************************
function calculateTime(character, startDateString, endDateString)
{
var timestamp = 0;
var totalTimeForAll = 0;
var tenMinuteLogTimeout = 600
var timeListMessage = "";
var current_day = ""
var current_hour = ""
var timestamp_start = 0
var hours = 0
var previous_timestamp = 0
var itemTotalPerDay = {};
var startTS = convertDateStringToTimestamp(startDateString);
var endTS = convertDateStringToTimestamp(endDateString);
var people = [];
var maxItemLength = 50;
if (character == "All characters") {
people = Object.keys(allLogLinesJSON);
}
else {
people = [ character ];
}
var earliestTS = 0;
var latestTS = 0;
people.forEach(function(person) {
if (typeof(allLogLinesJSON[person]) != "undefined") {
if (allLogLinesJSON[person].hasOwnProperty(itype)) {
var itemArray = allLogLinesJSON[person][itype];
for (var i=0; i latestTS) {
latestTS = timestamp;
}
}
}
}
});
if (earliestTS < startTS) { earliestTS = startTS; }
if (latestTS > endTS) { latestTS = endTS; }
for (var i=earliestTS; i= startTS) && (timestamp < endTS)) {
associativeArray[person].timestamps.push(timestamp);
}
}
});
});
// Sort + compute per person
people.forEach(function(person) {
var myList = [];
myList.sort(function(x, y){
return x.timestamp - y.timestamp;
})
myList = associativeArray[person].timestamps;
myList.sort();
var current_day = "";
var previous_day = "";
var current_timestamp = 0;
var previous_timestamp = 0;
var timeTotalForThisPersonThisDay = 0;
// Compute daily time for each person
for (var i = 0; i < myList.length; i++) {
current_timestamp = myList[i];
current_day = convertTimestampToDateString(current_timestamp);
if (previous_timestamp != 0) {
if (current_day == previous_day) {
timeDiff = current_timestamp - previous_timestamp;
if (timeDiff < tenMinuteLogTimeout) {
totalTimeForAll += timeDiff;
timeTotalForThisPersonThisDay += timeDiff;
var dayOfWeek = convertTimestampToDayOfWeek(current_timestamp);
dayOfWeekTotal[dayOfWeek] += timeDiff;
}
}
else {
if ((person != "") && (timeTotalForThisPersonThisDay > 0)) {
timeListMessage += printLineTime(person, current_day, Math.round(timeTotalForThisPersonThisDay/3600), maxItemLength);
if (typeof(itemTotalPerDay[current_day]) == "undefined") { itemTotalPerDay[current_day] = timeTotalForThisPersonThisDay; }
else {itemTotalPerDay[current_day] += timeTotalForThisPersonThisDay; }
}
timeTotalForThisPersonThisDay = 0;
}
}
previous_day = current_day;
previous_timestamp = current_timestamp;
}
});
var timeInHours = Math.round(totalTimeForAll / 3600);
var Message = "";
Message += "Character: " + character + "\r\n";
Message += "Date range: " + startDateString + " through " + endDateString + "\r\n\r\n";
Message += "Total time: " + timeInHours + " hours\r\n\r\n";
Message += timeListMessage;
document.getElementById('StatsDisplay').style.display="block";
document.getElementById('TableDisplay').style.display="none";
document.getElementById("StatsDisplay").innerHTML = Message;
drawTimeChart(itemTotalPerDay);
drawTimePieChart(dayOfWeekTotal);
}
var featCollection = [];
featCollection.push({name:"Explore Gotham", category:"Exploration",subcategory:"General", stars:3,points:50,faction:"Both",description:"Explore all Gotham districts"});
featCollection.push({name:"Explore Metropolis", category:"Exploration",subcategory:"General", stars:3,points:50,faction:"Both",description:"Explore all Metropolis districts"});
featCollection.push({name:"Intrepid Explorer", category:"Exploration",subcategory:"General", stars:3,points:50,faction:"Both",description:"Explore every Gotham/Metropolis district and all Alerts/Raids"});
featCollection.push({name:"Explore the Alerts", category:"Exploration",subcategory:"General", stars:3,points:50,faction:"Both",description:"Explore all alerts in the classic game"});
featCollection.push({name:"Donut Delivery", category:"Exploration",subcategory:"General", stars:2,points:25,faction:"Hero",description:"Visit each of the classic police stations"});
featCollection.push({name:"Club Kids", category:"Exploration",subcategory:"General", stars:1,points:10,faction:"Villain",description:"Visit all the villain safehouses"});
featCollection.push({name:"Explore the Hall of Doom", category:"Exploration",subcategory:"General", stars:1,points:10,faction:"Villain",description:"Explore the Hall of Doom"});
featCollection.push({name:"Explore the Watchtower", category:"Exploration",subcategory:"General", stars:1,points:10,faction:"Hero",description:"Explore the JLA Watchtower"});
featCollection.push({name:"Explore Kahndaq", category:"Exploration",subcategory:"Raids", stars:1,points:10,faction:"Both",description:"Explore the area around Black Adam's palace in Kahndaq"});
featCollection.push({name:"Explore the Batcave Outer Caverns", category:"Exploration",subcategory:"Raids", stars:1,points:10,faction:"Both",description:"Explore the outermost reaches of the Batcave"});
featCollection.push({name:"Explore the Inner Sanctum", category:"Exploration",subcategory:"Raids", stars:1,points:10,faction:"Both",description:"Explore the Inner Sanctum of the Batcave"});
featCollection.push({name:"Explore Midtown Metropolis", category:"Exploration",subcategory:"Metropolis",stars:1,points:10,faction:"Both",description:"Explore the Midtown district in Metropolis"});
featCollection.push({name:"Man of Stone", category:"Exploration",subcategory:"Metropolis",stars:1,points:10,faction:"Both",description:"Visit the Superman Memorial Statue in Centennial Park"});
featCollection.push({name:"Visit Stryker's Island", category:"Exploration",subcategory:"Metropolis",stars:1,points:10,faction:"Both",description:"Visit Stryker's Island in Metropolis"});
featCollection.push({name:"Explore Little Bohemia", category:"Exploration",subcategory:"Metropolis",stars:1,points:10,faction:"Both",description:"Explore Little Bohemia in Metropolis"});
featCollection.push({name:"Explore Suicide Slums", category:"Exploration",subcategory:"Metropolis",stars:1,points:10,faction:"Both",description:"Explore the Suicide Slums district in Metropolis"});
featCollection.push({name:"On Top of the World", category:"Exploration",subcategory:"Metropolis",stars:1,points:10,faction:"Both",description:"Visit the highest point of the Daily Planet"});
featCollection.push({name:"View from the Top", category:"Exploration",subcategory:"Metropolis",stars:1,points:10,faction:"Both",description:"Visit the highest point of LexCorp Tower"});
featCollection.push({name:"Explore Metropolis Chinatown", category:"Exploration",subcategory:"Metropolis",stars:1,points:10,faction:"Both",description:"Explore Chinatown Metropolis"});
featCollection.push({name:"Explore Downtown Metropolis", category:"Exploration",subcategory:"Metropolis",stars:1,points:10,faction:"Both",description:"Explore the Downtown district"});
featCollection.push({name:"Explore the Historic District", category:"Exploration",subcategory:"Metropolis",stars:1,points:10,faction:"Both",description:"Explore the Historic District in Metropolis"});
featCollection.push({name:"Explore the Tomorrow District", category:"Exploration",subcategory:"Metropolis",stars:1,points:10,faction:"Both",description:"Explore the Tomorrow District in Metropolis"});
featCollection.push({name:"Find the Bat-Signal", category:"Exploration",subcategory:"Gotham", stars:1,points:10,faction:"Both",description:"Find the Bat-Signal in the East End Gotham"});
featCollection.push({name:"Explore the East End", category:"Exploration",subcategory:"Gotham", stars:1,points:10,faction:"Both",description:"Explore Gotham's East End"});
featCollection.push({name:"Visit the Wayne Memorial", category:"Exploration",subcategory:"Gotham", stars:1,points:10,faction:"Both",description:"Visit the Wayne Memorial in Crime Alley"});
featCollection.push({name:"Explore the Otisburg District", category:"Exploration",subcategory:"Gotham", stars:1,points:10,faction:"Both",description:"Explore the Otisburg district in Gotham"});
featCollection.push({name:"Explore the Burnley District", category:"Exploration",subcategory:"Gotham", stars:1,points:10,faction:"Both",description:"Explore the Burnley district in Gotham"});
featCollection.push({name:"Explore Robinson Park", category:"Exploration",subcategory:"Gotham", stars:1,points:10,faction:"Both",description:"Explore Robinson Park in Gotham"});
featCollection.push({name:"Explore Arkham Island", category:"Exploration",subcategory:"Gotham", stars:1,points:10,faction:"Both",description:"Explore Arkham Island in Gotham"});
featCollection.push({name:"Explore Gotham Chinatown", category:"Exploration",subcategory:"Gotham", stars:1,points:10,faction:"Both",description:"Explore Gotham's Chinatown district"});
featCollection.push({name:"Explore Old Gotham", category:"Exploration",subcategory:"Gotham", stars:1,points:10,faction:"Both",description:"Explore the Old Gotham district"});
featCollection.push({name:"Explore the Diamond District", category:"Exploration",subcategory:"Gotham", stars:1,points:10,faction:"Both",description:"Explore the Diamond district in Gotham"});
featCollection.push({name:"Explore Area 51", category:"Exploration",subcategory:"Alerts", stars:1,points:10,faction:"Both",description:"Explore key areas of the Area 51 complex"});
featCollection.push({name:"Explore Gorilla Island", category:"Exploration",subcategory:"Alerts", stars:1,points:10,faction:"Both",description:"Explore the shipwreck and environs on Gorilla Island"});
featCollection.push({name:"Explore the HIVE Moon Site", category:"Exploration",subcategory:"Alerts", stars:1,points:10,faction:"Both",description:"Explore the HIVE dig site on the moon"});
featCollection.push({name:"Explore Oolong Island", category:"Exploration",subcategory:"Alerts", stars:1,points:10,faction:"Both",description:"Explore the enclave of Oolong Island"});
featCollection.push({name:"Explore Bludhaven", category:"Exploration",subcategory:"Alerts", stars:1,points:10,faction:"Both",description:"Explore toxic-wrecked areas of downtown Bludhaven"});
featCollection.push({name:"Explore Smallville", category:"Exploration",subcategory:"Alerts", stars:1,points:10,faction:"Both",description:"Explore key areas of Smallville, KS"});
featCollection.push({name:"Prepared", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Obtain 1 Mark of Conquest or Mark of Legend"});
featCollection.push({name:"More than You Could Chew", category:"General",subcategory:"General",stars:2,points:25,faction:"Both",description:"Encounter all 5 preoccupied iconic villains"});
featCollection.push({name:"Fanboy", category:"General",subcategory:"General",stars:2,points:25,faction:"Both",description:"Encounter all 6 preoccupied iconic heroes"});
featCollection.push({name:"Bounty Hunter", category:"General",subcategory:"General",stars:3,points:50,faction:"Hero",description:"Complete all of the classic wanted poster missions as a Hero"});
featCollection.push({name:"Hired Gun", category:"General",subcategory:"General",stars:3,points:50,faction:"Villain",description:"Complete all of the classic wanted poster missions as a Villain"});
featCollection.push({name:"Gotham Boost-Tour", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete all of the classic Booster Gold city travel missions in Gotham"});
featCollection.push({name:"Metropolis Boost-Tour", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete all of the classic Booster Gold city travel missions in Metropolis"});
featCollection.push({name:"Everyday Hero", category:"General",subcategory:"General",stars:1,points:10,faction:"Hero",description:"Accomplish 25 everyday heroic acts"});
featCollection.push({name:"Everyday Villain", category:"General",subcategory:"General",stars:2,points:25,faction:"Villain",description:"Perpetrate 25 everyday villainous acts"});
featCollection.push({name:"Red Barrel Buster Rookie", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Break 5 red Explosion Barrels"});
featCollection.push({name:"Red Barrel Buster Expert", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Break 25 red Explosion Barrels"});
featCollection.push({name:"Red Barrel Buster Master", category:"General",subcategory:"General",stars:2,points:25,faction:"Both",description:"Break 100 red Explosion barrels"});
featCollection.push({name:"BOOM!", category:"General",subcategory:"General",stars:3,points:50,faction:"Both",description:"Break 250 red Explosion barrels"});
featCollection.push({name:"Orange Barrel Buster Rookie", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Break 5 orange Restoration barrels"});
featCollection.push({name:"Orange Barrel Buster Expert", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Break 25 orange Restoration barrels"});
featCollection.push({name:"Orange Barrel Buster Master", category:"General",subcategory:"General",stars:2,points:25,faction:"Both",description:"Break 100 orange Restoration barrels"});
featCollection.push({name:"Heals Yeeeah!", category:"General",subcategory:"General",stars:3,points:50,faction:"Both",description:"Break 250 orange Restoration barrels"});
featCollection.push({name:"Barrel of Monkeys", category:"General",subcategory:"General",stars:3,points:50,faction:"Both",description:"Break 500 orange Restoration barrels"});
featCollection.push({name:"Get Your Kong On", category:"General",subcategory:"General",stars:3,points:50,faction:"Both",description:"Break 1000 orange Restoration barrels"});
featCollection.push({name:"Loot!", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Open 5 treasure chests"});
featCollection.push({name:"Jackpot!", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Open 10 treasure chests"});
featCollection.push({name:"Lunch Money", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Open 50 treasure chests"});
featCollection.push({name:"Money in Your Pocket", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Open 100 treasure chests"});
featCollection.push({name:"Cashing Checks", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Open 250 treasure chests"});
featCollection.push({name:"Upcoming Mogul", category:"General",subcategory:"General",stars:2,points:25,faction:"Both",description:"Open 500 treasure chests"});
featCollection.push({name:"Young Billionaire", category:"General",subcategory:"General",stars:3,points:50,faction:"Both",description:"Open 1000 treasure chests"});
featCollection.push({name:"25X Hit!", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Reach 25 hits on the hit counter"});
featCollection.push({name:"50X Hit!", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Reach 50 hits on the hit counter"});
featCollection.push({name:"100X Hit!", category:"General",subcategory:"General",stars:2,points:25,faction:"Both",description:"Reach 100 hits on the hit counter"});
featCollection.push({name:"Jailbird", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Use the Breakout ability 1 times"});
featCollection.push({name:"Escape Artist", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Use the Breakout ability 5 times"});
featCollection.push({name:"Escape Artist Pro", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Use the Breakout ability 25 times"});
featCollection.push({name:"Master Escape Artist", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Use the Breakout ability 100 times"});
featCollection.push({name:"Control Issues", category:"General",subcategory:"General",stars:2,points:25,faction:"Both",description:"Use the Breakout ability 500 times"});
featCollection.push({name:"Under Control", category:"General",subcategory:"General",stars:2,points:25,faction:"Both",description:"Use the Breakout ability 1000 times"});
featCollection.push({name:"Back From the Hack", category:"General",subcategory:"General",stars:3,points:50,faction:"Both",description:"Survived the 2011 network hack!"});
featCollection.push({name:"Domination Unleashed", category:"General",subcategory:"General",stars:1,points:10,faction:"Villain",description:"Become a member of the Society with Circe as your mentor"});
featCollection.push({name:"Masterminds Unleashed", category:"General",subcategory:"General",stars:1,points:10,faction:"Villain",description:"Become a member of the Society with Lex Luthor as your mentor"});
featCollection.push({name:"Insanity Unleashed", category:"General",subcategory:"General",stars:1,points:10,faction:"Villain",description:"Become a member of the Society with the Joker as your mentor"});
featCollection.push({name:"Amazons United", category:"General",subcategory:"General",stars:1,points:10,faction:"Hero",description:"Become a member of the Justice League with Wonder Woman as your mentor"});
featCollection.push({name:"Superman United", category:"General",subcategory:"General",stars:1,points:10,faction:"Hero",description:"Become a member of the Justice League with Superman as your mentor"});
featCollection.push({name:"Dark Knights United", category:"General",subcategory:"General",stars:1,points:10,faction:"Hero",description:"Become a member of the Justice League with Batman as your mentor"});
featCollection.push({name:"Criminal Mastermind", category:"General",subcategory:"General",stars:2,points:25,faction:"Villain",description:"Achieve level 30 as a villain mentored by Lex Luthor"});
featCollection.push({name:"The Queen's Favorite", category:"General",subcategory:"General",stars:2,points:25,faction:"Villain",description:"Achieve level 30 as a villain mentored by Circe"});
featCollection.push({name:"The Joker in the Deck", category:"General",subcategory:"General",stars:2,points:25,faction:"Villain",description:"Achieve level 30 as a villain mentored by the Joker"});
featCollection.push({name:"Champion of Earth", category:"General",subcategory:"General",stars:2,points:25,faction:"Hero",description:"Achieve level 30 as a hero mentored by Superman"});
featCollection.push({name:"Warrior of Truth", category:"General",subcategory:"General",stars:2,points:25,faction:"Hero",description:"Achieve level 30 as a hero mentored by Wonder Woman"});
featCollection.push({name:"Knight for Justice", category:"General",subcategory:"General",stars:2,points:25,faction:"Hero",description:"Achieve level 30 as a hero mentored by Batman"});
featCollection.push({name:"Speedster Supreme", category:"General",subcategory:"General",stars:2,points:25,faction:"Both",description:"Achieve level 30 as a speedster"});
featCollection.push({name:"Fearless Flier", category:"General",subcategory:"General",stars:2,points:25,faction:"Both",description:"Achieve level 30 as a flyer"});
featCollection.push({name:"Acrobatic Ace", category:"General",subcategory:"General",stars:2,points:25,faction:"Both",description:"Achieve level 30 as an acrobat"});
featCollection.push({name:"Tanks Very Much", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Achieve level 10 and gain the Tank Role"});
featCollection.push({name:"Mission Control", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Achieve level 10 and gain the Controller Role"});
featCollection.push({name:"The Healing Touch", category:"General",subcategory:"General",stars:1,points:10,faction:"Both",description:"Achieve level 10 and gain the Healer Role"});
featCollection.push({name:"Villainous Scion", category:"General",subcategory:"General",stars:2,points:25,faction:"Villain",description:"Achieve level 20 as a villain"});
featCollection.push({name:"Heroic Legionnaire", category:"General",subcategory:"General",stars:1,points:10,faction:"Hero",description:"Achieve level 20 as a hero"});
featCollection.push({name:"Insert Token", category:"General",subcategory:"Tokens of Merit",stars:1,points:10,faction:"Both",description:"Add 1 Token of Merit"});
featCollection.push({name:"Tokens of Appreciation", category:"General",subcategory:"Tokens of Merit",stars:1,points:10,faction:"Both",description:"Add 10 Tokens of Merit"});
featCollection.push({name:"A Mark Saved is a Token Earned", category:"General",subcategory:"Tokens of Merit",stars:1,points:10,faction:"Both",description:"Add 25 Tokens of Merit"});
featCollection.push({name:"Emeritus", category:"General",subcategory:"Tokens of Merit",stars:1,points:10,faction:"Both",description:"Add 50 Tokens of Merit"});
featCollection.push({name:"Merit Badge", category:"General",subcategory:"Tokens of Merit",stars:1,points:10,faction:"Both",description:"Add 100 Tokens of Merit"});
featCollection.push({name:"Merit Scholar", category:"General",subcategory:"Tokens of Merit",stars:2,points:25,faction:"Both",description:"Add 250 Tokens of Merit"});
featCollection.push({name:"Mark the Occasion", category:"General",subcategory:"Tokens of Merit",stars:2,points:25,faction:"Both",description:"Add 500 Tokens of Merit"});
featCollection.push({name:"Meritocracy", category:"General",subcategory:"Tokens of Merit",stars:2,points:25,faction:"Both",description:"Add 750 Tokens of Merit"});
featCollection.push({name:"Buy the Same Token", category:"General",subcategory:"Tokens of Merit",stars:2,points:25,faction:"Both",description:"Add 1000 Tokens of Merit"});
featCollection.push({name:"Are You Token to Me?", category:"General",subcategory:"Tokens of Merit",stars:3,points:50,faction:"Both",description:"Add 2500 Tokens of Merit"});
featCollection.push({name:"If I Had a Token for Every Time...", category:"General",subcategory:"Tokens of Merit",stars:3,points:50,faction:"Both",description:"Add 5000 Tokens of Merit"});
featCollection.push({name:"Natural Talent", category:"Races",subcategory:"General",stars:3,points:50,faction:"Both",description:"Win a platinum medal on any expert level race without purchasing movement mode traits"});
featCollection.push({name:"Pro Athlete", category:"Races",subcategory:"General",stars:3,points:50,faction:"Both",description:"Win a platinum medal on any adept level race without purchasing movement mode traits"});
featCollection.push({name:"Platinum Pace", category:"Races",subcategory:"General",stars:1,points:10,faction:"Both",description:"Earn a platinum medal in any race"});
featCollection.push({name:"You Can Be My Wingman Anytime", category:"Races",subcategory:"Flight",stars:2,points:25,faction:"Both",description:"Complete all Flight master-level races in the classic game"});
featCollection.push({name:"Time to Buzz a Tower", category:"Races",subcategory:"Flight",stars:2,points:25,faction:"Both",description:"Complete all Flight expert races in the classic game"});
featCollection.push({name:"Do You Think Your Name Will Be on That Plaque?", category:"Races",subcategory:"Flight",stars:2,points:25,faction:"Both",description:"Complete all Flight adept races in the classic game"});
featCollection.push({name:"More Than Just Fancy Flying", category:"Races",subcategory:"Flight",stars:2,points:25,faction:"Both",description:"Complete all Flight skilled races in the classic game"});
featCollection.push({name:"Gutsiest Move I Ever Saw", category:"Races",subcategory:"Flight",stars:1,points:10,faction:"Hero",description:"Complete all Flight Hero rookie races in the classic game"});
featCollection.push({name:"Pilot's License", category:"Races",subcategory:"Flight",stars:1,points:10,faction:"Hero",description:"Complete all Flight Hero introductory races in the classic game"});
featCollection.push({name:"It's Looking Good So Far", category:"Races",subcategory:"Flight",stars:1,points:10,faction:"Villain",description:"Complete all Flight Villain skilled races in the classic game"});
featCollection.push({name:"I Am Dangerous", category:"Races",subcategory:"Flight",stars:1,points:10,faction:"Villain",description:"Complete all Flight Villain introductory races in the classic game"});
featCollection.push({name:"Gotham Master Flier", category:"Races",subcategory:"Flight",stars:2,points:25,faction:"Both",description:"Complete all Flight Gotham races"});
featCollection.push({name:"Metropolis Master Flier", category:"Races",subcategory:"Flight",stars:2,points:25,faction:"Both",description:"Complete all Flight Metropolis races"});
featCollection.push({name:"Prodigious Performer", category:"Races",subcategory:"Acrobat",stars:2,points:25,faction:"Both",description:"Complete all Acrobatics master-level races in the classic game"});
featCollection.push({name:"Terrific Trapezist", category:"Races",subcategory:"Acrobat",stars:2,points:25,faction:"Both",description:"Complete all Acrobatics expert races in the classic game"});
featCollection.push({name:"Amazing Aerialist", category:"Races",subcategory:"Acrobat",stars:2,points:25,faction:"Both",description:"Complete all Acrobatics adept races in the classic game"});
featCollection.push({name:"Terrific Tumbler", category:"Races",subcategory:"Acrobat",stars:2,points:25,faction:"Both",description:"Complete all Acrobatics skilled races in the classic game"});
featCollection.push({name:"Acrobatic Amateur", category:"Races",subcategory:"Acrobat",stars:1,points:10,faction:"Hero",description:"Complete all Acrobatics Hero rookie races in the classic game"});
featCollection.push({name:"Circus Act", category:"Races",subcategory:"Acrobat",stars:1,points:10,faction:"Hero",description:"Complete all Acrobatics Hero introductory races in the classic game"});
featCollection.push({name:"Fantastic Funambulist", category:"Races",subcategory:"Acrobat",stars:1,points:10,faction:"Villain",description:"Complete all Acrobatics Villain rookie races in the classic game"});
featCollection.push({name:"Acrobat Athlete", category:"Races",subcategory:"Acrobat",stars:1,points:10,faction:"Villain",description:"Complete all Acrobatics Villain introductory races in the classic game"});
featCollection.push({name:"Gotham Master Acrobat: Hero", category:"Races",subcategory:"Acrobat",stars:2,points:25,faction:"Both",description:"Complete all Acrobatics Gotham races"});
featCollection.push({name:"Metropolis Master Acrobat: Hero", category:"Races",subcategory:"Acrobat",stars:2,points:25,faction:"Both",description:"Complete all Acrobatics Metropolis races"});
featCollection.push({name:"If You Ain't First, You're Last", category:"Races",subcategory:"Speedster",stars:2,points:25,faction:"Both",description:"Complete all Speedster master-level races in the classic game"});
featCollection.push({name:"Shake and Bake", category:"Races",subcategory:"Speedster",stars:2,points:25,faction:"Both",description:"Complete all Speedster expert races in the classic game"});
featCollection.push({name:"It Doesn't Matter If You Win By An Inch or a Mile", category:"Races",subcategory:"Speedster",stars:2,points:25,faction:"Both",description:"Complete all Speedster adept races in the classic game"});
featCollection.push({name:"You Almost Had Me? You Never Had a Chance", category:"Races",subcategory:"Speedster",stars:2,points:25,faction:"Both",description:"Complete all Speedster skilled races in the classic game"});
featCollection.push({name:"What Are You, a Wheelman", category:"Races",subcategory:"Speedster",stars:1,points:10,faction:"Hero",description:"Complete all Speedster Hero rookie races in the classic game"});
featCollection.push({name:"Need For Speed", category:"Races",subcategory:"Speedster",stars:1,points:10,faction:"Hero",description:"Complete all Speedster Hero introductory races in the classic game"});
featCollection.push({name:"Watcha Runnin' Under There, Man?", category:"Races",subcategory:"Speedster",stars:1,points:10,faction:"Villain",description:"Complete all Speedster Villain rookie races in the classic game"});
featCollection.push({name:"Nice Wheels", category:"Races",subcategory:"Speedster",stars:1,points:10,faction:"Villain",description:"Complete all Speedster Villain introductory races in the classic game"});
featCollection.push({name:"Gotham Master Speedster", category:"Races",subcategory:"Speedster",stars:2,points:25,faction:"Both",description:"Complete all Speedster Gotham speedster races"});
featCollection.push({name:"Metropolos Master Speedster", category:"Races",subcategory:"Speedster",stars:2,points:25,faction:"Both",description:"Complete all Speedster Metropolis races"});
featCollection.push({name:"Practiced Eye", category:"General",subcategory:"Collectibles",stars:1,points:10,faction:"Both",description:"Complete a collection, briefing, or investigation"});
featCollection.push({name:"Master Detective", category:"General",subcategory:"Collectibles",stars:3,points:50,faction:"Both",description:"Complete all Investigations in the classic game"});
featCollection.push({name:"Fully Briefed", category:"General",subcategory:"Collectibles",stars:3,points:50,faction:"Both",description:"Complete all briefings in the classic game"});
featCollection.push({name:"Collections Agent", category:"General",subcategory:"Collectibles",stars:3,points:50,faction:"Both",description:"Complete all collections and master collections in the classic game"});
featCollection.push({name:"Hotel Detective", category:"General",subcategory:"Collectibles",stars:1,points:10,faction:"Both",description:"Complete 10 collections, briefings, or investigations"});
featCollection.push({name:"Who Questions the Question?", category:"General",subcategory:"Collectibles",stars:2,points:25,faction:"Both",description:"Complete 25 collections, briefings, or investigations"});
featCollection.push({name:"Riddle Me This", category:"General",subcategory:"Collectibles",stars:2,points:25,faction:"Both",description:"Complete 50 collections, briefings, or investigations"});
featCollection.push({name:"Well-Equipped", category:"Styles",subcategory:"General",stars:1,points:10,faction:"Both",description:"Collect 10 Styles"});
featCollection.push({name:"Sharply Dressed", category:"Styles",subcategory:"General",stars:1,points:10,faction:"Both",description:"Collect 25 Styles"});
featCollection.push({name:"Costumed Crusader", category:"Styles",subcategory:"General",stars:1,points:10,faction:"Both",description:"Collect 50 Styles"});
featCollection.push({name:"Enormous Ensemble", category:"Styles",subcategory:"General",stars:1,points:10,faction:"Both",description:"Collect 100 Styles"});
featCollection.push({name:"Mode Model", category:"Styles",subcategory:"General",stars:2,points:25,faction:"Both",description:"Collect 250 Styles"});
featCollection.push({name:"Fight Fire with Fashion", category:"Styles",subcategory:"General",stars:2,points:25,faction:"Both",description:"Collect 500 Styles"});
featCollection.push({name:"Emblematic of Heroism", category:"Styles",subcategory:"General",stars:1,points:10,faction:"Hero",description:"Collect all classic Hero faction emblems"});
featCollection.push({name:"The Signs of Villainy", category:"Styles",subcategory:"General",stars:1,points:10,faction:"Villain",description:"Collect all classic Villain faction emblems"});
featCollection.push({name:"Dressed to Kill", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect a complete Iconic PvP battle suit"});
featCollection.push({name:"True Colors", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect a complete iconic PvE battle suit"});
featCollection.push({name:"Kryptonian Defender", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Hero",description:"Collect all styles in the House of El Warsuit set"});
featCollection.push({name:"LexCorp Warbringer", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Villain",description:"Collect all styles of the LexCorp Salvation set"});
featCollection.push({name:"Thanagarian Vindicator", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles in the Nth - Metal Battlesuit Set"});
featCollection.push({name:"Heart of Kryptonite", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Villain",description:"Collect all styles in the Metallo's Maw set"});
featCollection.push({name:"One with the Speed Force", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles of the Speed - Force Spectrum set"});
featCollection.push({name:"Kneel Before Zod!", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Villain",description:"Collect all styles of the Phantom Zone Reaver set"});
featCollection.push({name:"Steel Soldier", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Hero",description:"Collect all styles in the STEELsuit MK-1 set"});
featCollection.push({name:"Rockin' Robin", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles of the Raptor Infiltrator set"});
featCollection.push({name:"Spear of Themyscira", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Hero",description:"Collect all styles of the Hera's Strength set"});
featCollection.push({name:"Spearbearer of Nabu", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Hero",description:"Collect all styles of the Fate's Faith set"});
featCollection.push({name:"Defender of Gotham", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Hero",description:"Collect all styles in the Dark Specter Batsuit set"});
featCollection.push({name:"Rock of Eternity's Guardian", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles of the Aegis of Eternity set"});
featCollection.push({name:"Walking Rampart", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Villain",description:"Collect all styles of the Sunstone Bulwark set"});
featCollection.push({name:"Cutting Edge of Krypton", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles of the Sunstone's Edge set"});
featCollection.push({name:"Bomber Man", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles of the Avatar Bombardier set"});
featCollection.push({name:"How Many Points Is That?", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles of the Spirit of the Stag set"});
featCollection.push({name:"By the Horns", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles of the Last Aurochs set"});
featCollection.push({name:"That's Using Your Head", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles of the Strength of the Ram set"});
featCollection.push({name:"Lion's Share", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles of the Heart of the Lion set"});
featCollection.push({name:"Make Sparks Fly", category:"Styles",subcategory:"Iconic", stars:2,points:25,faction:"Both",description:"Collect all styles of the High Voltage set"});
featCollection.push({name:"Avatar of Trigon", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Villain",description:"Collect all styles of the Aegis of Azerath set"});
featCollection.push({name:"Gauntlet of the Goddess", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Villain",description:"Collect all styles of the Vengeance of Hecate set"});
featCollection.push({name:"The Fury of Teth-Adam", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Villain",description:"Collect all styles of the Shroud of Anubis set"});
featCollection.push({name:"Heart of Ice", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Villain",description:"Collect all styles of the Frozen Fury set"});
featCollection.push({name:"Mercenary for Hire", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Villain",description:"Collect all styles of the Mercenary's Malice set"});
featCollection.push({name:"Commanding Presence", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles of the Kryptonian Commander set"});
featCollection.push({name:"The Look Of Tomorrow, Today", category:"Styles",subcategory:"Iconic", stars:2,points:25,faction:"Both",description:"Collect all styles of the Reverse set"});
featCollection.push({name:"The Tactleneck", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles of the Checkmate Operative set"});
featCollection.push({name:"Sneaky Service", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles of the Checkmate Informant set"});
featCollection.push({name:"Knight Moves", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles of the Checkmate PvP Battlesuit"});
featCollection.push({name:"The Armor Makes the Man", category:"Styles",subcategory:"Iconic", stars:3,points:50,faction:"Both",description:"Collect all styles of the Knight PvP Battlesuit"});
featCollection.push({name:"Otherworldly", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all Styles in the Fourth World set"});
featCollection.push({name:"Two Sides Of The Same Coin", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Split Personality set"});
featCollection.push({name:"Strength of Voltan", category:"Styles",subcategory:"Theme", stars:1,points:10,faction:"Both",description:"Collect all styles in the Mayan set"});
featCollection.push({name:"Dimensional Traveler", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Zonewalker set"});
featCollection.push({name:"On Metal Wings", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Winged Fury set"});
featCollection.push({name:"Pulsar STAR", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the STAR Ex set"});
featCollection.push({name:"The Immutable", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Villain",description:"Collect all styles in the Eternal set"});
featCollection.push({name:"Anubis Ascendant", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Egyptian Sorcerer set"});
featCollection.push({name:"Incurably Insane", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Villain",description:"Collect all styles in the Bulwark of Madness set"});
featCollection.push({name:"Avian Assassin", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Raptor Tech set"});
featCollection.push({name:"Shards of the Heart", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Heartshard set"});
featCollection.push({name:"Guise of the Enemy", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Hijacked Servitor set"});
featCollection.push({name:"Under the Sea", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Remora set"});
featCollection.push({name:"Shaken, Not Stirred", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Formal set"});
featCollection.push({name:"Go Go Gadgeteer", category:"Styles",subcategory:"Theme", stars:1,points:10,faction:"Both",description:"Collect all styles in the Gadgeteer set"});
featCollection.push({name:"Nobody's Fool", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Jester set"});
featCollection.push({name:"Utterly Divine", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Divine set"});
featCollection.push({name:"Knight of the Round", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Medieval set"});
featCollection.push({name:"Shadows in the Night", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Villain",description:"Collect all styles in the Blood Bat set"});
featCollection.push({name:"Bone Daddy", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Necromancer set"});
featCollection.push({name:"A New Classic", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the New Genesis set"});
featCollection.push({name:"Expeditionary Force Leader", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Paramilitary set"});
featCollection.push({name:"Green Thumb", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Plant set"});
featCollection.push({name:"Difference Engine Designed", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Steam Punk set"});
featCollection.push({name:"Dressed for the Streets", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Streets set"});
featCollection.push({name:"Good Mojo", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Voodoo set"});
featCollection.push({name:"Bug Off", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Insectoid set"});
featCollection.push({name:"God of the North", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Viking set"});
featCollection.push({name:"Boot to the Head", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Tech Ninja set"});
featCollection.push({name:"Merlin's Tailor", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Wizardly set"});
featCollection.push({name:"Mystically Masked", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Kabuki set"});
featCollection.push({name:"Praetorian Elite", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Greco-Roman set"});
featCollection.push({name:"Cyber-Reinforced", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Jah Kir set"});
featCollection.push({name:"Life Is a Big, Dark Room", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Metalhead set"});
featCollection.push({name:"Under the Spotlight", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Dresden 7 set"});
featCollection.push({name:"Bio Booster", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Biomech set"});
featCollection.push({name:"Like an Eagle", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Talon Lord set"});
featCollection.push({name:"Scion of Skartaris", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Barbarian set"});
featCollection.push({name:"Get Out On the Highway", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Biker set"});
featCollection.push({name:"Hellstalker of Dis", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Demonic set"});
featCollection.push({name:"Master of the Henge", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Druid set"});
featCollection.push({name:"Dress Like an Egyptian", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Egyptian set"});
featCollection.push({name:"Man in Tights", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Archer set"});
featCollection.push({name:"Staying Frosty", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Antifreeze set"});
featCollection.push({name:"Galactic Sentinel", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Alien Tech set"});
featCollection.push({name:"Looking like Six Million Bucks", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Contemporary Tech set"});
featCollection.push({name:"Military Grade", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Military Tech set"});
featCollection.push({name:"Am I Here to Amuse You?", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Psycho set"});
featCollection.push({name:"Antique Aviator", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Retro Tech set"});
featCollection.push({name:"Secret Secret, I've Got a Secret", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Robotic set"});
featCollection.push({name:"Ready for Class", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Schoolyard set"});
featCollection.push({name:"Man or Machine?", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Shielded Robot set"});
featCollection.push({name:"Scaled Armor", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Snake set"});
featCollection.push({name:"Send Me An Angel", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Archangel set"});
featCollection.push({name:"Intergalactic Planetary", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Sector Agent set"});
featCollection.push({name:"Planetary Intergalactic", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Sector Incendiary set"});
featCollection.push({name:"Medicine Man", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Shaman set"});
featCollection.push({name:"Astral Projector", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Astral Alloy set"});
featCollection.push({name:"Defender of the Earth", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Brainiac Invader set"});
featCollection.push({name:"Intruder Alert", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Avatar Infiltrator set"});
featCollection.push({name:"Warrior's Way", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Noble Warrior set"});
featCollection.push({name:"Cybernetic Upgrades", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Cybernetic set"});
featCollection.push({name:"Early Adopter", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Oolong set"});
featCollection.push({name:"In Excelsis Deo", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Rapture set"});
featCollection.push({name:"Seraph of Dominance", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Seraph set"});
featCollection.push({name:"Defender of the Universe", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Aerial Defender set"});
featCollection.push({name:"No Mission Is Impossible", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Spec Ops set"});
featCollection.push({name:"Building A Better Tomorrow", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Engineer set"});
featCollection.push({name:"That's Logistics", category:"Styles",subcategory:"Theme", stars:2,points:25,faction:"Both",description:"Collect all styles in the Logistics Officer set"});
featCollection.push({name:"Fight for Right", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Hero",description:"Complete all of the Raids as a hero in the classic game"});
featCollection.push({name:"Raid and Rule", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Villain",description:"Complete all of the Raids as a villain in the classic game"});
featCollection.push({name:"A Speedy Resurrection", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Complete the Kahndaq Raid in an hour or less"});
featCollection.push({name:"EMP PDQ", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Complete the Outer Caverns Raid in an hour or less"});
featCollection.push({name:"Eye Don't Have Much Time Left", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Complete the Inner Sanctum Raid in an hour or less"});
featCollection.push({name:"The Final Countdown", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Complete the Brainiac Sub-Construct Raid in an hour or less"});
featCollection.push({name:"Total Annihilation", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Defeat Brainiac after all three eradiactors are fully formed at the same time"});
featCollection.push({name:"Eradication Denied", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Defeat Brainiac without allowing an eradicator to fully form"});
featCollection.push({name:"Some Days You Just Can't Get Rid of a Bomb", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Bring Down the RCP's shield before a Flashbang Drone can Self-destruct"});
featCollection.push({name:"The Family That Shields Together", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Trigger the EMP device within 15 seconds of the first OMAC Bat Family member activating their shield"});
featCollection.push({name:"Zetta Testers Wanted", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Defeat the Zetta Drone Before 5 waves of enemies attack"});
featCollection.push({name:"A Feast for the Eye", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Defeat Brother Eye before he consumes 10 minions"});
featCollection.push({name:"Integration Complete", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Defeat the ARC after the arc consumes each type of spawn"});
featCollection.push({name:"Getting Your Foot in the Door", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Defeat Fortress of Solitude: The Chasm in under one hour"});
featCollection.push({name:"But Scorpions Don't Lay Eggs", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Defeat the Scorpionod MK-1 without allowing any crystals to produce a burrower"});
featCollection.push({name:"Deprogrammed", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Defeat all combinations of Brainiac-Controlled Metas inside the Fortress of Solitude, finishing the Raid each time"});
featCollection.push({name:"Not a Dog Person", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Defeat the Sunstone Domineer without breaking Krypto's mind control"});
featCollection.push({name:"Size Matters", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Defeat the Jor-El Mech without shrinking him to the smallest size"});
featCollection.push({name:"Cleansing the Fortress", category:"Raids",subcategory:"General",stars:2,points:25,faction:"Both",description:"Complete the Power Core raid in under 45 minutes"});
featCollection.push({name:"MEDIC!", category:"Raids",subcategory:"General",stars:3,points:50,faction:"Both",description:"Complete the Sunstone Matrix raid without attacking the Kryptonian Medic while he is shielded"});
featCollection.push({name:"Arm's Reach", category:"Raids",subcategory:"General",stars:3,points:50,faction:"Both",description:"Complete the Sunstone Matrix raid without provoking the Kryptonian Sniper to use his devastating attack"});
featCollection.push({name:"Highway to the Phantom Zone", category:"Raids",subcategory:"General",stars:3,points:50,faction:"Both",description:"Complete the Sunstone Matrix raid in under 30 minutes"});
featCollection.push({name:"Raid Expert: Kahndaq", category:"Raids",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete the Kahndaq raid on Normal difficulty"});
featCollection.push({name:"Raid Expert: Inner Sanctum", category:"Raids",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete the Batcave: Inner Sanctum raid on Normal difficulty"});
featCollection.push({name:"Raid Expert: Brainiac Sub-Construct", category:"Raids",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete the Batcave: Brainiac Sub-Construct raid on Normal difficulty"});
featCollection.push({name:"Raid Expert: The Chasm", category:"Raids",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete the Fortress of Solitude: The Chasm raid on Normal difficulty"});
featCollection.push({name:"Raid Expert: Power Core", category:"Raids",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete the Fortress of Solitude: Power Core raid on Normal difficulty"});
featCollection.push({name:"Raid Expert: Sunstone Matrix", category:"Raids",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete the Fortress of Solitude: Sunstone Matrix raid on Normal difficulty"});
featCollection.push({name:"No Time to Monkey Around", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Both",description:"Complete the Strykers Prison Alert in 30 minutes or less"});
featCollection.push({name:"Crazy Fast", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Both",description:"Beat the Arkham Asylum Alert in 30 minutes or less"});
featCollection.push({name:"Nightmare Asylum", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Both",description:"Defeat Dr Alyce Sinner's Nightmare and Scarecrow"});
featCollection.push({name:"Freezer Burned", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Both",description:"Defeat Mister Freeze in 90 seconds or less"});
featCollection.push({name:"Don't Fight the Power", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Hero",description:"Defeat the Eradicator without destroying any drones"});
featCollection.push({name:"Fast Responders", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Hero",description:"Complete the Watchtower Containment Facility Alert in 30 minutes or less"});
featCollection.push({name:"Smallville - Sightseer", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Both",description:"Complete the Smallville Alert in 20 minutes or less"});
featCollection.push({name:"Area 51 - Layover", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Both",description:"Complete the Area 51 Alert in 20 minutes or less on hard mode"});
featCollection.push({name:"Oolong Island - Layover", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Both",description:"Complete the Oolong Island Alert in 20 minutes or less on hard mode"});
featCollection.push({name:"HIVE Moonbase - Layover", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Both",description:"Complete the Hive Moonbase Alert in 20 minutes or less on hard mode"});
featCollection.push({name:"Quick n' Dirty", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Both",description:"Complete the Ace Chemicals Alert in 30 minutes or less"});
featCollection.push({name:"Declawed", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Both",description:"Defeat all four Claws of the Demon"});
featCollection.push({name:"The Question Finally Answered", category:"Alerts",subcategory:"Hard",stars:1,points:10,faction:"Both",description:"Inspect all of the pirate bones scattered throughout the League Of Assassins fortress"});
featCollection.push({name:"Go Ninja Go", category:"Alerts",subcategory:"Hard",stars:1,points:10,faction:"Both",description:"Complete the League Of Assassins stronghold in 30 minutes or less"});
featCollection.push({name:"Alert: EMP PDQ", category:"Alerts",subcategory:"Hard",stars:1,points:10,faction:"Both",description:"Defeat the Outer Caverns alert in 45 minutes or less"});
featCollection.push({name:"Safety is Job One", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Both",description:"Defeat Sentinel DP-5 and Sentinel C-CU without getting stuck by special attacks"});
featCollection.push({name:"Breaking the Chain of Command", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Villain",description:"Defeat the Iron Statue before the Bronze Idol"});
featCollection.push({name:"Quick System Restore", category:"Alerts",subcategory:"Hard",stars:2,points:25,faction:"Villain",description:"Complete the Hall of Doom Armory Alert in 30 minutes or less"});
featCollection.push({name:"Gorilla Island - Sightseer", category:"Alerts",subcategory:"Normal",stars:2,points:25,faction:"Both",description:"Complete the Gorilla Island Alert in 20 minutes or less"});
featCollection.push({name:"Area 51 - Sightseer", category:"Alerts",subcategory:"Normal",stars:2,points:25,faction:"Both",description:"Complete the Area 51 Alert in 20 minutes or less"});
featCollection.push({name:"Bludhaven - Sightseer", category:"Alerts",subcategory:"Normal",stars:2,points:25,faction:"Both",description:"Complete the Bluhaven Alert in 20 minutes or less"});
featCollection.push({name:"Oolong Island - Sightseer", category:"Alerts",subcategory:"Normal",stars:2,points:25,faction:"Both",description:"Complete the Oolong Island Alert in 20 minutes or less"});
featCollection.push({name:"HIVE Moonbase - Sightseer", category:"Alerts",subcategory:"Normal",stars:2,points:25,faction:"Both",description:"Complete the HIVE Moonbase Alert in 20 minutes or less"});
featCollection.push({name:"Global Justice", category:"Alerts",subcategory:"General",stars:3,points:50,faction:"Hero",description:"Complete all Alerts as a hero in the classic game"});
featCollection.push({name:"Global Dominance", category:"Alerts",subcategory:"General",stars:3,points:50,faction:"Villain",description:"Complete all Alerts as a villain in the classic game"});
featCollection.push({name:"Alert Rookie", category:"Alerts",subcategory:"General",stars:2,points:25,faction:"Both",description:"Complete 10 Alerts"});
featCollection.push({name:"Alert Expert ", category:"Alerts",subcategory:"General",stars:2,points:25,faction:"Both",description:"Complete 50 Alerts"});
featCollection.push({name:"Alert Master", category:"Alerts",subcategory:"General",stars:2,points:25,faction:"Both",description:"Complete 100 Alerts"});
featCollection.push({name:"Emergency Responder", category:"Alerts",subcategory:"General",stars:3,points:50,faction:"Both",description:"Complete 250 Alerts"});
featCollection.push({name:"Alert! Alert! Alert!", category:"Alerts",subcategory:"General",stars:3,points:50,faction:"Both",description:"Complete 500 Alerts"});
featCollection.push({name:"All Trinked Out", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Purchase a PvP Trinket"});
featCollection.push({name:"Not So Fast!", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Defeat a player in PvP while they are in a movement mode"});
featCollection.push({name:"Assistance Is Not Futile", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Assist in the capture of 250 nodes during PvP matches"});
featCollection.push({name:"Assist Master", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Assist in the capture of 100 nodes during PvP matches"});
featCollection.push({name:"Assist Expert", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Assist in the capture of 50 nodes during PvP matches"});
featCollection.push({name:"Assist Rookie", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Assist in the capture of 10 nodes during PvP matches"});
featCollection.push({name:"Hostile Takeover", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Capture 250 nodes during PvP matches"});
featCollection.push({name:"Capture Master", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Capture 100 nodes during PvP matches"});
featCollection.push({name:"Capture Expert", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Capture 50 nodes during PvP matches"});
featCollection.push({name:"Capture Rookie", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Capture 10 nodes during PvP matches"});
featCollection.push({name:"The System Is Down", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Take 250 turrets offline in PvP Matches"});
featCollection.push({name:"Offline Master", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Take 100 turrets offline in PvP Matches"});
featCollection.push({name:"Offline Expert", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Take 25 turrets offline in PvP Matches"});
featCollection.push({name:"Offline Rookie", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Take 10 turrets offline in PvP Matches"});
featCollection.push({name:"Fighting the Good Fight", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Win 1 Ring war or Diamond Heist PvP event"});
featCollection.push({name:"Smelled Like Victory", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Win 10 Ring War or Diamond Heist PVP event"});
featCollection.push({name:"Give Them Nothing But Take From Them Everything", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Win 25 Ring War or Diamond Heist PVP event"});
featCollection.push({name:"War Never Changes", category:"Player vs Player",subcategory:"General",stars:2,points:25,faction:"Both",description:"Win 50 Ring war or Diamond Heist PvP events"});
featCollection.push({name:"There is No Substitute for Victory", category:"Player vs Player",subcategory:"General",stars:3,points:50,faction:"Both",description:"Win 100 Ring war or Diamond Heist PvP events"});
featCollection.push({name:"Hunter for Hire", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 10 player Bounty missions"});
featCollection.push({name:"Wanted: Knocked Out or Alive", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 25 player Bounty missions"});
featCollection.push({name:"WANTED: Knocked Out or Alive", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 25 player Bounty missions"});
featCollection.push({name:"Fistfull of Cash", category:"Player vs Player",subcategory:"General",stars:2,points:25,faction:"Both",description:"Complete 50 player Bounty missions"});
featCollection.push({name:"My Backpack's Got Jets", category:"Player vs Player",subcategory:"General",stars:3,points:50,faction:"Both",description:"Complete 250 player Bounty missions"});
featCollection.push({name:"Give No Quarter", category:"Player vs Player",subcategory:"General",stars:1,points:10,faction:"Both",description:"Obtain 25 marks of victory"});
featCollection.push({name:"Man That's Harshad", category:"Player vs Player",subcategory:"General",stars:2,points:25,faction:"Both",description:"Obtain 500 marks of victory"});
featCollection.push({name:"Centurion", category:"Player vs Player",subcategory:"General",stars:2,points:25,faction:"Both",description:"Obtain 100 marks of victory"});
featCollection.push({name:"A Grand Feat", category:"Player vs Player",subcategory:"General",stars:3,points:50,faction:"Both",description:"Obtain 1000 marks of victory, Conquest, Tactics or Strategy"});
featCollection.push({name:"Legendary Initiate", category:"Player vs Player",subcategory:"Legendary Battles", stars:1,points:10,faction:"Both",description:"Achieve level 5 to begin Legendary Battles"});
featCollection.push({name:"Getting the Band Back Together", category:"Player vs Player",subcategory:"Legendary Battles", stars:3,points:50,faction:"Both",description:"Unlock all the classic Legendary Battle Arena Avatars"});
featCollection.push({name:"Legendary", category:"Player vs Player",subcategory:"Legendary Battles", stars:1,points:10,faction:"Both",description:"Win 10 Legendary Battles"});
featCollection.push({name:"Living the Legend", category:"Player vs Player",subcategory:"Legendary Battles", stars:2,points:25,faction:"Both",description:"Win one match in each Legendary Battle map in the classic game"});
featCollection.push({name:"Breaking the Bat", category:"Player vs Player",subcategory:"Legendary Battles", stars:2,points:25,faction:"Both",description:"Knock out Batman as Bane"});
featCollection.push({name:"Death in the Family", category:"Player vs Player",subcategory:"Legendary Battles", stars:2,points:25,faction:"Both",description:"Knock out Robin as the Joker wielding a crowbar"});
featCollection.push({name:"Mad Love", category:"Player vs Player",subcategory:"Legendary Battles", stars:2,points:25,faction:"Both",description:"Knock out the Joker as Harley Quinn"});
featCollection.push({name:"Legendary Winning Streak", category:"Player vs Player",subcategory:"Legendary Battles", stars:3,points:50,faction:"Both",description:"Win 10 Legendary Battles in a row"});
featCollection.push({name:"Penny Polisher", category:"Player vs Player",subcategory:"Legendary Battles", stars:1,points:10,faction:"Both",description:"Win 10 Batcave matches"});
featCollection.push({name:"Batcave Battler", category:"Player vs Player",subcategory:"Legendary Battles", stars:1,points:10,faction:"Both",description:"Win 50 Batcave matches"});
featCollection.push({name:"Knight-in-Training", category:"Player vs Player",subcategory:"Legendary Battles", stars:1,points:10,faction:"Both",description:"Win 100 Batcave matches"});
featCollection.push({name:"Knight-Trained Duelist", category:"Player vs Player",subcategory:"Legendary Battles", stars:3,points:50,faction:"Both",description:"Win 250 Batcave matches"});
featCollection.push({name:"Vat Worker", category:"Player vs Player",subcategory:"Legendary Battles", stars:1,points:10,faction:"Both",description:"Win 10 Ace Chemicals matches"});
featCollection.push({name:"Chemical Concocter", category:"Player vs Player",subcategory:"Legendary Battles",stars:1,points:10,faction:"Both",description:"Win 50 Ace Chemicals matches"});
featCollection.push({name:"Ace Attorney", category:"Player vs Player",subcategory:"Legendary Battles",stars:2,points:25,faction:"Both",description:"Win 100 Ace Chemicals matches"});
featCollection.push({name:"Ace Executive", category:"Player vs Player",subcategory:"Legendary Battles",stars:3,points:50,faction:"Both",description:"Win 250 Ace Chemicals matches"});
featCollection.push({name:"A Serious House", category:"Player vs Player",subcategory:"Legendary Battles", stars:1,points:10,faction:"Both",description:"Knock out an iconic Arkham Asylum inmate on the Arkham map"});
featCollection.push({name:"Arkham Intern", category:"Player vs Player",subcategory:"Legendary Battles", stars:1,points:10,faction:"Both",description:"Win 10 Arkham Asylum matches"});
featCollection.push({name:"Arkham Attendant", category:"Player vs Player",subcategory:"Legendary Battles",stars:1,points:10,faction:"Both",description:"Win 50 Arkham Asylum matches"});
featCollection.push({name:"Arkham Doctor", category:"Player vs Player",subcategory:"Legendary Battles",stars:2,points:25,faction:"Both",description:"Win 100 Arkham Asylum matches"});
featCollection.push({name:"Arkham Administrator", category:"Player vs Player",subcategory:"Legendary Battles",stars:3,points:50,faction:"Both",description:"Win 250 Arkham Asylum matches"});
featCollection.push({name:"Arena Master", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Win 10 normal arena matches"});
featCollection.push({name:"Global Enforcer", category:"Player vs Player",subcategory:"Arenas",stars:2,points:25,faction:"Both",description:"Win one match in each arena map in the classic game"});
featCollection.push({name:"PvP MVP", category:"Player vs Player",subcategory:"Arenas",stars:2,points:25,faction:"Both",description:"Win an arena match with no deaths and 10 captures"});
featCollection.push({name:"Think Fast!", category:"Player vs Player",subcategory:"Arenas",stars:2,points:25,faction:"Both",description:"Win an arena match in 5 minutes or less"});
featCollection.push({name:"Winning Streak X", category:"Player vs Player",subcategory:"Arenas",stars:3,points:50,faction:"Both",description:"Win 10 matches on the arena maps in a row"});
featCollection.push({name:"High Rolling Healer", category:"Player vs Player",subcategory:"Arenas",stars:2,points:25,faction:"Both",description:"Heal 100,000 damage or more in a single arena match"});
featCollection.push({name:"Attack the Weak Point for Massive Damage", category:"Player vs Player",subcategory:"Arenas",stars:2,points:25,faction:"Both",description:"Do 100,000 damage or more in a single arena match"});
featCollection.push({name:"Gotta Catch Em' All!", category:"Player vs Player",subcategory:"Arenas",stars:2,points:25,faction:"Both",description:"Knock out one player of each power type in the arena"});
featCollection.push({name:"25X Under Fire!", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Reach 25 hits on the hit counter in PvP arena"});
featCollection.push({name:"10X Under Fire!", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Reach 10 hits on the hit counter in PvP arena"});
featCollection.push({name:"Crush Your Enemies and See Them Driven Before You", category:"Player vs Player",subcategory:"Arenas",stars:3,points:50,faction:"Both",description:"Knock out 10000 enemy players in arena matches"});
featCollection.push({name:"Killing Is My Business, and Business Is Good", category:"Player vs Player",subcategory:"Arenas",stars:2,points:25,faction:"Both",description:"Knock out 5000 enemy players in arena matches"});
featCollection.push({name:"1000 Down for the Count", category:"Player vs Player",subcategory:"Arenas",stars:2,points:25,faction:"Both",description:"Knock out 1000 enemy players in arena matches"});
featCollection.push({name:"500 Down for the Count", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Knock out 500 enemy players in arena matches"});
featCollection.push({name:"100 Down for the Count", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Knock out 100 enemy players in arena matches"});
featCollection.push({name:"25 Down for the Count", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Knock out 25 enemy players in arena matches"});
featCollection.push({name:"Down for the Count", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Knock out an enemy player in an arena match"});
featCollection.push({name:"One Giant Beating for Mankind", category:"Player vs Player",subcategory:"Arenas",stars:3,points:50,faction:"Both",description:"Win 250 arena matches on the Moon"});
featCollection.push({name:"Moon Base Master", category:"Player vs Player",subcategory:"Arenas",stars:2,points:25,faction:"Both",description:"Win 100 arena matches on the Moon"});
featCollection.push({name:"Moon Base Expert", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Win 50 arena matches on the Moon"});
featCollection.push({name:"Moon Base Rookie", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Win 10 arena matches on the Moon"});
featCollection.push({name:"UNKNOWN", category:"Player vs Player",subcategory:"Arenas",stars:3,points:50,faction:"Both",description:"Win 250 arena matches in the outback"});
featCollection.push({name:"Outback Master", category:"Player vs Player",subcategory:"Arenas",stars:2,points:25,faction:"Both",description:"Win 100 arena matches in the outback"});
featCollection.push({name:"Outback Expert", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Win 50 arena matches in the outback"});
featCollection.push({name:"Outback Rookie", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Win 10 arena matches in the outback"});
featCollection.push({name:"All in the Name of Science", category:"Player vs Player",subcategory:"Arenas",stars:3,points:50,faction:"Both",description:"Win 250 arena matches in STAR Labs"});
featCollection.push({name:"STAR Labs Master", category:"Player vs Player",subcategory:"Arenas",stars:2,points:25,faction:"Both",description:"Win 100 arena matches in STAR Labs"});
featCollection.push({name:"STAR Labs Expert", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Win 50 arena matches in STAR Labs"});
featCollection.push({name:"STAR Labs Rookie", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Win 10 arena matches in STAR Labs"});
featCollection.push({name:"Come At Me!", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Defeat 50 opponents in a single arena game"});
featCollection.push({name:"Place Your Bets!", category:"Player vs Player",subcategory:"Arenas",stars:2,points:25,faction:"Both",description:"Defeat 25 opponents in a single arena game"});
featCollection.push({name:"M-M-Multi KO!", category:"Player vs Player",subcategory:"Arenas",stars:2,points:25,faction:"Both",description:"Achieve a streak of 25 KO's before being KO'd in an arena match"});
featCollection.push({name:"KO Spree!", category:"Player vs Player",subcategory:"Arenas",stars:1,points:10,faction:"Both",description:"Achieve a streak of 5 KOs before being KO'd in an arena match"});
featCollection.push({name:"Threw Down the Gauntlet", category:"Player vs Player",subcategory:"Dueling",stars:1,points:10,faction:"Both",description:"Win a duel"});
featCollection.push({name:"Send 'em Packing", category:"Player vs Player",subcategory:"Dueling",stars:1,points:10,faction:"Both",description:"Dominate a duel"});
featCollection.push({name:"Close Call", category:"Player vs Player",subcategory:"Dueling",stars:1,points:10,faction:"Both",description:"Win a duel by the skin of your teeth!"});
featCollection.push({name:"On the Ropes", category:"Player vs Player",subcategory:"Dueling",stars:1,points:10,faction:"Both",description:"Participate in 100 duels"});
featCollection.push({name:"You Seem a Decent Fellow", category:"Player vs Player",subcategory:"Dueling",stars:1,points:10,faction:"Both",description:"Win 50 duels"});
featCollection.push({name:"Not Just Another Bum", category:"Player vs Player",subcategory:"Dueling",stars:1,points:10,faction:"Both",description:"Participate in 300 duels"});
featCollection.push({name:"The Brute Squad", category:"Player vs Player",subcategory:"Dueling",stars:1,points:10,faction:"Both",description:"Win 250 duels"});
featCollection.push({name:"Eye of the Fighter", category:"Player vs Player",subcategory:"Dueling",stars:2,points:25,faction:"Both",description:"Participate in 500 duels"});
featCollection.push({name:"Humdinger", category:"Player vs Player",subcategory:"Dueling",stars:1,points:10,faction:"Both",description:"Dominate 100 duels"});
featCollection.push({name:"To the Pain!", category:"Player vs Player",subcategory:"Dueling",stars:2,points:25,faction:"Both",description:"Win 500 duels"});
featCollection.push({name:"Heart-Stopper", category:"Player vs Player",subcategory:"Dueling",stars:1,points:10,faction:"Both",description:"Win 100 duels by the skin of your teeth!"});
featCollection.push({name:"Went the Distance", category:"Player vs Player",subcategory:"Dueling",stars:2,points:25,faction:"Both",description:"Participate in 1000 duels"});
featCollection.push({name:"Sting Like Queen Bee", category:"Player vs Player",subcategory:"Dueling",stars:2,points:25,faction:"Both",description:"Dominate 250 duels"});
featCollection.push({name:"Inconceivable!", category:"Player vs Player",subcategory:"Dueling",stars:2,points:25,faction:"Both",description:"Win 1000 duels"});
featCollection.push({name:"Float Like a Thanagarian", category:"Player vs Player",subcategory:"Dueling",stars:2,points:25,faction:"Both",description:"Win 250 duels by the skin of your teeth!"});
featCollection.push({name:"Duos Rookie", category:"Duos",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 10 Duos"});
featCollection.push({name:"Duos Expert", category:"Duos",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 50 Duos"});
featCollection.push({name:"Duos Master", category:"Duos",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 100 Duos"});
featCollection.push({name:"Duos Dynamo", category:"Duos",subcategory:"General",stars:2,points:25,faction:"Both",description:"Complete 250 Duos"});
featCollection.push({name:"Dynamic", category:"Duos",subcategory:"General",stars:3,points:50,faction:"Both",description:"Complete 500 Duos"});
featCollection.push({name:"Debugging Duos", category:"Duos",subcategory:"General",stars:2,points:25,faction:"Hero",description:"Discover Ambush Bug in every Classic Duo Mode"});
featCollection.push({name:"Quit Buggin' Me", category:"Duos",subcategory:"General",stars:2,points:25,faction:"Villain",description:"Discover Ambush Bug in every Classic Duo Mode"});
featCollection.push({name:"Double Deliverance", category:"Duos",subcategory:"General",stars:2,points:25,faction:"Hero",description:"Complete all Duo Modes as hero in the classic game"});
featCollection.push({name:"Double Destruction", category:"Duos",subcategory:"General",stars:2,points:25,faction:"Villain",description:"Complete all Duo Modes as villain in the classic game"});
featCollection.push({name:"Zephyr Winds", category:"Duos",subcategory:"Speed Force",stars:1,points:10,faction:"Both",description:"Complete the Gotham University Duo in 10 minutes or less"});
featCollection.push({name:"Busy Bee", category:"Duos",subcategory:"Speed Force",stars:1,points:10,faction:"Both",description:"Complete the Hive Base Duo in 10 minutes or less"});
featCollection.push({name:"Gorilla Hustle", category:"Duos",subcategory:"Speed Force",stars:1,points:10,faction:"Both",description:"Complete the Gorilla Grodd Lab Duo in 8 minutes or less"});
featCollection.push({name:"OMAC Velocity", category:"Duos",subcategory:"Speed Force",stars:1,points:10,faction:"Both",description:"Complete the OMAC Base Duo in 11 minutes or less"});
featCollection.push({name:"Venom Rush", category:"Duos",subcategory:"Speed Force",stars:1,points:10,faction:"Both",description:"Complete the Cape Carmine Lighthouse Duo in 10 minutes or less"});
featCollection.push({name:"Speedy Coin", category:"Duos",subcategory:"Speed Force",stars:1,points:10,faction:"Both",description:"Complete the Old Gotham Subway Duo in 11 minutes or less"});
featCollection.push({name:"Light Speed Ahead", category:"Duos",subcategory:"Speed Force",stars:1,points:10,faction:"Both",description:"Complete the Metropolis City Hall Duo in 8 minutes or less"});
featCollection.push({name:"Lightcrusher", category:"Duos",subcategory:"Speed Force",stars:1,points:10,faction:"Both",description:"Defeat Arkillo/Kilowog after allowing him to reach 5x power"});
featCollection.push({name:"Faster Than Light", category:"Duos",subcategory:"Speed Force",stars:1,points:10,faction:"Both",description:"Defeat Arkillo/Kilowog before the drudges power ups his ring once"});
featCollection.push({name:"Arctic Breeze", category:"Duos",subcategory:"Speed Force",stars:1,points:10,faction:"Villain",description:"Defeat the Gotham Mercy Hospital Villain Duo in 8 minutes or less"});
featCollection.push({name:"Freeze!", category:"Duos",subcategory:"Speed Force",stars:1,points:10,faction:"Villain",description:"Defeat Mister Freeze's two remaining goons in Mercy Hospital"});
featCollection.push({name:"Research Assistant", category:"R&D",subcategory:"General",stars:1,points:10,faction:"Both",description:"Research 50 different plans"});
featCollection.push({name:"Journeyman Technician", category:"R&D",subcategory:"General",stars:2,points:25,faction:"Both",description:"Research 100 different plans"});
featCollection.push({name:"The Man With The Plans", category:"R&D",subcategory:"General",stars:3,points:50,faction:"Both",description:"Research 150 different plans"});
featCollection.push({name:"Soder Jerk", category:"R&D",subcategory:"Assembly",stars:1,points:10,faction:"Both",description:"Create a variety pack of enhanced Soder Colas"});
featCollection.push({name:"The Soder Challenge", category:"R&D",subcategory:"Assembly",stars:2,points:25,faction:"Both",description:"Create a variety pack of enhanced Soder Cola Mark II's"});
featCollection.push({name:"Soder Machine", category:"R&D",subcategory:"Assembly",stars:3,points:50,faction:"Both",description:"Create a variety pack of enhanced Soder Cola Mark III's"});
featCollection.push({name:"I Made This!", category:"R&D",subcategory:"Assembly",stars:1,points:10,faction:"Both",description:"Create 10 items"});
featCollection.push({name:"Some Assembly Required", category:"R&D",subcategory:"Assembly",stars:1,points:10,faction:"Both",description:"Create 100 items"});
featCollection.push({name:"DIY", category:"R&D",subcategory:"Assembly",stars:2,points:25,faction:"Both",description:"Create 500 items"});
featCollection.push({name:"In Development", category:"R&D",subcategory:"Assembly",stars:2,points:25,faction:"Both",description:"Create 1000 items"});
featCollection.push({name:"Crafty, Aren't Ya?", category:"R&D",subcategory:"Assembly",stars:3,points:50,faction:"Both",description:"Create 2500 items"});
featCollection.push({name:"Makin' Copies", category:"R&D",subcategory:"Assembly",stars:3,points:50,faction:"Both",description:"Create 5000 items"});
featCollection.push({name:"Assembly Line", category:"R&D",subcategory:"Assembly",stars:3,points:50,faction:"Both",description:"Create 7500 items"});
featCollection.push({name:"Entering Mass Production", category:"R&D",subcategory:"Assembly",stars:3,points:50,faction:"Both",description:"Create 10000 items"});
featCollection.push({name:"Break It Down", category:"R&D",subcategory:"Parts",stars:1,points:10,faction:"Both",description:"Salvage 10 items"});
featCollection.push({name:"Yes, Disassemble", category:"R&D",subcategory:"Parts",stars:1,points:10,faction:"Both",description:"Salvage 100 items"});
featCollection.push({name:"Pick 'n Pull", category:"R&D",subcategory:"Parts",stars:2,points:25,faction:"Both",description:"Salvage 500 items"});
featCollection.push({name:"Parting It Out", category:"R&D",subcategory:"Parts",stars:2,points:25,faction:"Both",description:"Salvage 1000 items"});
featCollection.push({name:"Junkyard Warrior", category:"R&D",subcategory:"Parts",stars:3,points:50,faction:"Both",description:"Salvage 2500 items"});
featCollection.push({name:"Parts Direct", category:"R&D",subcategory:"Parts",stars:3,points:50,faction:"Both",description:"Salvage 5000 items"});
featCollection.push({name:"Master of Disassembly", category:"R&D",subcategory:"Parts",stars:3,points:50,faction:"Both",description:"Salvage 7500 items"});
featCollection.push({name:"Parting Is Such Sweet Sorrow", category:"R&D",subcategory:"Parts",stars:3,points:50,faction:"Both",description:"Salvage 10000 items"});
featCollection.push({name:"Ooh, Shiny!", category:"R&D",subcategory:"Parts",stars:1,points:10,faction:"Both",description:"Gather 10 items"});
featCollection.push({name:"Beach Comber", category:"R&D",subcategory:"Parts",stars:1,points:10,faction:"Both",description:"Gather 250 items"});
featCollection.push({name:"Panning For Parts", category:"R&D",subcategory:"Parts",stars:1,points:10,faction:"Both",description:"Gather 1000 items"});
featCollection.push({name:"Follow Your Nodes", category:"R&D",subcategory:"Parts",stars:2,points:25,faction:"Both",description:"Gather 5000 items"});
featCollection.push({name:"Nodeworthy", category:"R&D",subcategory:"Parts",stars:2,points:25,faction:"Both",description:"Gather 10000 items"});
featCollection.push({name:"Seek & Find", category:"R&D",subcategory:"Parts",stars:3,points:50,faction:"Both",description:"Gather 15000 items"});
featCollection.push({name:"Hunter-Gatherer", category:"R&D",subcategory:"Parts",stars:3,points:50,faction:"Both",description:"Gather 20000 items"});
featCollection.push({name:"Tragic, The Gathering", category:"R&D",subcategory:"Parts",stars:3,points:50,faction:"Both",description:"Gather 250000 items"});
featCollection.push({name:"Sentinels of Magic: Cooperative ", category:"Renown",subcategory:"Heroes",stars:1,points:10,faction:"Hero",description:"Achieve Cooperative status with the Sentinels of Magic"});
featCollection.push({name:"Sentinels of Magic: Friendly", category:"Renown",subcategory:"Heroes",stars:1,points:10,faction:"Hero",description:"Achieve Friendly status with the Sentinels of Magic"});
featCollection.push({name:"Sentinels of Magic: Favorable", category:"Renown",subcategory:"Heroes",stars:2,points:25,faction:"Hero",description:"Achieve Favorable status with the Sentinels of Magic"});
featCollection.push({name:"Protector of Knowledge", category:"Renown",subcategory:"Heroes",stars:2,points:25,faction:"Hero",description:"Achieve Trusted status with the Sentinels of Magic"});
featCollection.push({name:"STAR Labs: Cooperative", category:"Renown",subcategory:"Heroes",stars:1,points:10,faction:"Hero",description:"Achieve Cooperative status with STAR Labs"});
featCollection.push({name:"STAR Labs: Friendly", category:"Renown",subcategory:"Heroes",stars:1,points:10,faction:"Hero",description:"Achieve Friendly status with STAR Labs"});
featCollection.push({name:"STAR Labs: Favorable", category:"Renown",subcategory:"Heroes",stars:2,points:25,faction:"Hero",description:"Achieve Favorable status with STAR Labs"});
featCollection.push({name:"Science STAR", category:"Renown",subcategory:"Heroes",stars:2,points:25,faction:"Hero",description:"Achieve Trusted status with STAR Labs"});
featCollection.push({name:"WayneTech: Cooperative ", category:"Renown",subcategory:"Heroes",stars:1,points:10,faction:"Hero",description:"Achieve Cooperative status with WayneTech"});
featCollection.push({name:"WayneTech: Friendly", category:"Renown",subcategory:"Heroes",stars:1,points:10,faction:"Hero",description:"Achieve Friendly status with WayneTech"});
featCollection.push({name:"WayneTech: Favorable", category:"Renown",subcategory:"Heroes",stars:2,points:25,faction:"Hero",description:"Achieve Favorable status with WayneTech"});
featCollection.push({name:"Head of Research", category:"Renown",subcategory:"Heroes",stars:2,points:25,faction:"Hero",description:"Achieve Trusted status with WayneTech"});
featCollection.push({name:"Cult of Trigon: Cooperative", category:"Renown",subcategory:"Villains",stars:1,points:10,faction:"Villain",description:"Achieve Cooperative status with the Cult of Trigon"});
featCollection.push({name:"Cult of Trigon: Friendly", category:"Renown",subcategory:"Villains",stars:1,points:10,faction:"Villain",description:"Achieve Friendly status with the Cult of Trigon"});
featCollection.push({name:"Cult of Trigon: Favorable", category:"Renown",subcategory:"Villains",stars:2,points:25,faction:"Villain",description:"Achieve Favorable status with the Cult of Trigon"});
featCollection.push({name:"Devoted to the Demon", category:"Renown",subcategory:"Villains",stars:2,points:25,faction:"Villain",description:"Achieve Trusted status with the Cult of Trigon"});
featCollection.push({name:"LexCorp: Cooperative", category:"Renown",subcategory:"Villains",stars:1,points:10,faction:"Villain",description:"Achieve Cooperative status with LexCorp"});
featCollection.push({name:"LexCorp: Friendly", category:"Renown",subcategory:"Villains",stars:1,points:10,faction:"Villain",description:"Achieve Friendly status with LexCorp"});
featCollection.push({name:"LexCorp: Favorable", category:"Renown",subcategory:"Villains",stars:2,points:25,faction:"Villain",description:"Achieve Favorable status with LexCorp"});
featCollection.push({name:"VP of Villainy", category:"Renown",subcategory:"Villains",stars:2,points:25,faction:"Villain",description:"Achieve Trusted status with LexCorp"});
featCollection.push({name:"Rogues: Cooperative", category:"Renown",subcategory:"Villains",stars:1,points:10,faction:"Villain",description:"Achieve Cooperative status with the Rogues"});
featCollection.push({name:"Rogues: Friendly", category:"Renown",subcategory:"Villains",stars:1,points:10,faction:"Villain",description:"Achieve Friendly status with the Rogues"});
featCollection.push({name:"Rogues: Favorable", category:"Renown",subcategory:"Villains",stars:2,points:25,faction:"Villain",description:"Achieve Favorable status with the Rogues"});
featCollection.push({name:"Villainous Rogue", category:"Renown",subcategory:"Villains",stars:2,points:25,faction:"Villain",description:"Achieve Trusted status with the Rogues"});
featCollection.push({name:"Determined", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete any classic game episode-ending playroom without being KO'd"});
featCollection.push({name:"Challenges Met, Enemies Defeated", category:"Solo",subcategory:"General",stars:2,points:25,faction:"Villain",description:"Complete all classic Challenge Mode hideouts available to villains"});
featCollection.push({name:"No Challenge Too Great", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Hero",description:"Complete all classic Challenge Mode hideouts available to heroes"});
featCollection.push({name:"Batteries Not Included", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Villain",description:"Complete all of the Stryker's Island Toyman challenges as a villain"});
featCollection.push({name:"Keep Out Of Reach Of Children", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Hero",description:"Complete all of the Stryker's Island Toyman Challenges as a hero"});
featCollection.push({name:"Fun for All Ages", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 10 daily Toyman missions"});
featCollection.push({name:"And You Have a Date with Death!", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 25 daily Toyman missions"});
featCollection.push({name:"They're Not Dolls, They're Action Figures", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 50 daily Toyman missions"});
featCollection.push({name:"To Infinity and Beyond", category:"Solo",subcategory:"General",stars:2,points:25,faction:"Both",description:"Complete 100 daily Toyman missions"});
featCollection.push({name:"Messenger", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 10 missions"});
featCollection.push({name:"Herald", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 25 missions"});
featCollection.push({name:"Emissary", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 50 missions"});
featCollection.push({name:"Ambassador", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 100 missions"});
featCollection.push({name:"Harbinger", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 250 Missions"});
featCollection.push({name:"Challenge Rookie", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 10 Challenges"});
featCollection.push({name:"Challenge Expert", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 50 Challenges"});
featCollection.push({name:"Challenge Master", category:"Solo",subcategory:"General",stars:1,points:10,faction:"Both",description:"Complete 100 Challenges"});
featCollection.push({name:"Challenge Dynamo", category:"Solo",subcategory:"General",stars:2,points:25,faction:"Both",description:"Complete 250 Challenges"});
featCollection.push({name:"Danger is My Trade", category:"Solo",subcategory:"General",stars:3,points:50,faction:"Both",description:"Complete 500 Challenges"});
featCollection.push({name:"School of Hard Knocks: Giganta", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Giganta without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Deathstroke", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Deathstroke without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Brother Eye", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Brother Eye without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Scarecrow", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Scarecrow without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Isis", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Isis without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Felix Faust", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Felix Faust without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Brother Blood", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Brother Blood without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Poison Ivy", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Poison Ivy without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Circe", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Circe without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Raven", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Raven without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Sinestro", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Sinestro without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Aquaman", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Aquaman without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Lex Luthor", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Lex Luthor without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Robot Batman", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Hero",description:"Defeat Robot Batman without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Doctor Psycho", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Doctor Psycho in your final battle without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Harley Quinn", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Harley Quinn without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Joker", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat The Joker without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Gorilla Grodd", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Gorilla Grodd without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Queen Bee", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Queen Bee without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Bane", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Bane without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Catwoman", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Catwoman without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Spectre", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Spectre without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Bruno Mannheim",category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat Bruno Mannheim without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: The Penguin", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Both",description:"Defeat The Penguin without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: The Flash", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat The Flash without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Wonder Girl", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Wonder Girl without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Power Girl", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Power Girl without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Doctor Fate", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Doctor Fate without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Supergirl", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Supergirl without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Mister Freeze", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Mister Freeze without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Wonder Woman", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Wonder Woman without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Robin", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Robin without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: The Titans", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat The Titans without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Zatanna", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Zatanna without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Huntress", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Huntress without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Alan Scott", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Alan Scott without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Batman", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Batman without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Robot Joker", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Robot Joker without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: Superman", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Superman without using any consumable items or supercharge abilities"});
featCollection.push({name:"School of Hard Knocks: John Stewart", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat John Stewart without using any consumable items or supercharge abilities"});
featCollection.push({name:"Fire Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Fire in Gotham's Otisburg Neighborhood"});
featCollection.push({name:"Killer Frost Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Hero",description:"Defeat Killer Frost in Gotham's Otisburg Neighborhood"});
featCollection.push({name:"General Kordax Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Hero",description:"Defeat General Kordax in Metropolis's Suicide Slums"});
featCollection.push({name:"Bizarro Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Hero",description:"Defeat Bizarro at the Metro General Hospital in Little Bohemia"});
featCollection.push({name:"Nepheritos Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Hero",description:"Defeat Nepheritos in Gotham's Burnley Neighbourhood"});
featCollection.push({name:"The Judge Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Hero",description:"Defeat The Judge in Downtown Metropolis"});
featCollection.push({name:"Clayface Clobbered!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Hero",description:"Defeat Clayface in Gotham's Otisburg Neighbourhood"});
featCollection.push({name:"Arkillo Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Hero",description:"Defeat Arkillo in the Metropolis Historic District"});
featCollection.push({name:"Avatar of Sin Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Hero",description:"Defeat the Avatar of Sin in Midtown Metropolis"});
featCollection.push({name:"Minotaur Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Hero",description:"Defeat Minotaur in the Tomorrow District of Metropolis"});
featCollection.push({name:"Solomon Grundy Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Hero",description:"Defeat Solomon Grundy in Gotham's Otisburg Neighbourhood"});
featCollection.push({name:"Full House Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Hero",description:"Defeat Full House near Gotham's Amusement Mile"});
featCollection.push({name:"Hawkman and Hawkgirl Fall!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Hawkman and Hawkgirl in Metropolis near the Old STAR Labs building"});
featCollection.push({name:"Power Girl Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Power Girl in Downtown Metropolis"});
featCollection.push({name:"Enchanted Statue Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat the Enchanted Statue in Metropolis's Tomorrow District"});
featCollection.push({name:"Doctor Fate Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Doctor Fate near the Metropolis Cain Street Mall"});
featCollection.push({name:"Kilowog Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Kilowog near Metropolis's Historic District"});
featCollection.push({name:"The Flash Falls!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat The Flash in Metropolis's Midtown District"});
featCollection.push({name:"Green Arrow and Black Canary Fall!", category:"Solo",subcategory:"Iconic Battles",stars:1,points:10,faction:"Villain",description:"Defeat Green Arrow and Black Canary near Gotham Mercy General Hospital"});
featCollection.push({name:"Oh, I Get It", category:"Solo",subcategory:"Contacts",stars:2,points:25,faction:"Both",description:"Complete all of the Punchline story arc side missions"});
featCollection.push({name:"Phoenix Initiate", category:"Solo",subcategory:"Contacts",stars:2,points:25,faction:"Both",description:"Complete all of the 'Til Death do Us Part story arc side missions"});
featCollection.push({name:"The End of the Beginning", category:"Solo",subcategory:"Contacts",stars:2,points:25,faction:"Both",description:"Complete all of The Beginning of the End story arc side missions"});
featCollection.push({name:"In the Mist", category:"Solo",subcategory:"Contacts",stars:2,points:25,faction:"Both",description:"Complete all of Survival of the Fittest story arc side missions"});
featCollection.push({name:"A Family Affair", category:"Solo",subcategory:"Contacts",stars:2,points:25,faction:"Both",description:"Complete all of Sins of the Father story arc side missions"});
featCollection.push({name:"Meta-ticulous", category:"Solo",subcategory:"Contacts",stars:2,points:25,faction:"Both",description:"Complete all of Legacy of Krypton story arc side missions"});
featCollection.push({name:"Beauties and the Beasts", category:"Solo",subcategory:"Contacts",stars:2,points:25,faction:"Both",description:"Complete all of Hearts of Darkness story arc side missions"});
featCollection.push({name:"Committed", category:"Solo",subcategory:"Contacts",stars:2,points:25,faction:"Both",description:"Complete all of Arkham Unleashed story arc side missions"});
featCollection.push({name:"Walked the Beat", category:"Solo",subcategory:"Contacts",stars:2,points:25,faction:"Both",description:"Complete all of Gang War story arc side missions"});
featCollection.push({name:"Power Ring Master", category:"Solo",subcategory:"Contacts",stars:2,points:25,faction:"Both",description:"Complete all of the Dying of the Light story arc side missions"});
featCollection.push({name:"An Eye for Survival", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the OMAC Base without being KO'd"});
featCollection.push({name:"The Unyielding", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete The Oblivion Bar without being KO'd"});
featCollection.push({name:"The Power to Survive", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete Gotham STAR Labs without being KO'd"});
featCollection.push({name:"Touch of the Immortals", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete Gotham University Without being KO'd"});
featCollection.push({name:"Making a Splash", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the condemned shipyeards without being KO'D"});
featCollection.push({name:"The Will to Live", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Metropolis City Hall without being KO'd"});
featCollection.push({name:"Resistant to Her Charm", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Greenhouse without being KO'd"});
featCollection.push({name:"We Will Not Falter", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Chinatown Cafe without being KO'd"});
featCollection.push({name:"STAR Power", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Star Labs without being KO'd"});
featCollection.push({name:"Unflappable", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Regal Hotel without being KO'd"});
featCollection.push({name:"Ain't Going Down", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Gotham Sewers without being KO'd"});
featCollection.push({name:"Surviving Patient", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete Metro General Hospital without being KO'd"});
featCollection.push({name:"Good Deal", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete Mannheim's Chinese Theatre without being KO'd"});
featCollection.push({name:"Fun Times", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Amusement Mile without being KO'd"});
featCollection.push({name:"It's Not Judgement Time Yet", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Lair of the Spectre without being KO'd"});
featCollection.push({name:"Staying Power", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Hall of Doom without being KO'd"});
featCollection.push({name:"Evading Death... Stroke", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Monarchs Playing Card Factory without being KO'd"});
featCollection.push({name:"Heros with the Might of Magic", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete Eslworth Hospital without being KO'd"});
featCollection.push({name:"Arcane Luck", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the MPD 8th Precinct without being KO'd"});
featCollection.push({name:"A Wonderful Performance", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Metro Station Building without being KO'd"});
featCollection.push({name:"Unstung Heroes", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the HIVE Base without being KO'd"});
featCollection.push({name:"Viva los Heroes", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete Cape Camine Lighthouse without being KO'd"});
featCollection.push({name:"No Monkeying Around", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete Grodd's Lair in Metropolis without being KO'd"});
featCollection.push({name:"Too Cool for School", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Villain",description:"Complete Metropolis University solo instance without being KO'd"});
featCollection.push({name:"The Cat's Meow", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Villain",description:"Complete Burnley Freight Warehouse solo instance without being KO'd"});
featCollection.push({name:"That Which Cannot Be Killed", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Hidden Sentinels of Magic Base solo instance without being KO'd"});
featCollection.push({name:"Might Is Right", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the STAR Labs solo instance without being KO'd"});
featCollection.push({name:"No Joking Matter", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Regal Hotel solo instance without being KO'd"});
featCollection.push({name:"The Power of the Queen", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Chinatown Cafe solo instance without being KO'd"});
featCollection.push({name:"Tough Like Gorilla", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Old STAR Labs solo instance without being KO'd"});
featCollection.push({name:"Cool as Ice", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Gotham Mercy General Hospital solo instance without being KO'd"});
featCollection.push({name:"Fear Not Death", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Metropolis City Hall solo instance without being KO'd"});
featCollection.push({name:"Blood Immortal", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Forum of the Twelve solo instance without being KO'd"});
featCollection.push({name:"The Devil's Luck", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Gotham University solo instance without being KO'd"});
featCollection.push({name:"Sinister Approach", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the JSA Metropolis Wing solo instance without being KO'd"});
featCollection.push({name:"Keeping an Eye Out", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the OMAC Base solo instance without being KO'd"});
featCollection.push({name:"Wearing Your Survival Suit", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Watchtower solo instance without being KO'd"});
featCollection.push({name:"The Good Die Young", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete Gotham STAR Labs solo instance without being KO'd"});
featCollection.push({name:"The Undying", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Oblivion Bar solo instance without being KO'd"});
featCollection.push({name:"Eight Lives Left Over", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Gotham University Warehouse solo instance without being KO'd"});
featCollection.push({name:"You Listen To Me More, You Live Longer!", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Religion of Crime's ritual in the Temple of Crime solo instance without being KO'd"});
featCollection.push({name:"Avoided The Third Rail", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the invasion of the Penguin's underground smuggling operation in the Gotham Old Subway without being KO'd"});
featCollection.push({name:"The Power to Live", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the MPD 8th Precinct solo instance without being KO'd"});
featCollection.push({name:"A Gigantic Accomplishment", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Metro Station Building solo instance without being KO'd"});
featCollection.push({name:"Doctor's Orders", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Metro General Hospital solo instance without being KO'd"});
featCollection.push({name:"By Her Will", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Sentinels of Magic Base solo instance without being KO'd"});
featCollection.push({name:"Undefeated", category:"Solo",subcategory:"Survival",stars:1,points:10,faction:"Both",description:"Complete the Cape Carmine Lighthouse solo instance without being KO'd"});
featCollection.push({name:"Pop Quiz, Hotshot!", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Diffuse the bombs before the police officers die in Regal Hotel"});
featCollection.push({name:"Detox", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Hero",description:"Destroy all Venom cannisters in Burnley Warehouse"});
featCollection.push({name:"On Your Feet!", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Revive all the defeated Amazons in Circe's Hidden Base"});
featCollection.push({name:"Green Machine", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Incinerate dangerous bio-hazardous materials strewn around Metro General Hospital"});
featCollection.push({name:"Fire Sale", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Extinguish all of the magical flames in the Chinatown magic shop"});
featCollection.push({name:"Counselor", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Break Circe's control over the bewitched Amazons in Circe's Citadel"});
featCollection.push({name:"Gate Crasher", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Open the gate to Scarecrow's inner lair within 3 minutes of entering the sewers"});
featCollection.push({name:"Brute Force", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Complete the adventure in STAR's secret lab without activating any turrets"});
featCollection.push({name:"Leader Of The Pride", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Save all Lion Cubs in the Gotham University Warehouse"});
featCollection.push({name:"Quick Crags", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Secure 14 crags in the Shadowlands in 100 seconds or less"});
featCollection.push({name:"Single Minded", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Defeat the Overlord in the Hall of Doom without defeating his robots"});
featCollection.push({name:"Pain in the Brainiac", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Defeat 50 of Brainiac's robots on the STAR Lab satellite"});
featCollection.push({name:"Fumigator", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Secure the 4 pressure valves in 80 secoonds or under in the Gotham University Warehouse"});
featCollection.push({name:"Eye Blinked", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Defeat Brother Eye underneath Gotham's Knightsdome Sporting Complex without knocking out his guardian drones"});
featCollection.push({name:"Re-Evolver", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Free all the civilians in Gorilla Grodd's hideout from the devolution process"});
featCollection.push({name:"The Androids You're Looking For", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Defeat 30 of T.O.Morrow's Androids in T.O.Morrow's Lab"});
featCollection.push({name:"Brain Intact", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Make it through the waves of zombies in the Tomb of Isis"});
featCollection.push({name:"Shadow-Packed", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Defeat 30 Ghosts in the Glenmorgan Square Office Building"});
featCollection.push({name:"Emancipator", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Rescue all of the enslaved citizens from the Condemned Shipyards"});
featCollection.push({name:"Spy Smasher", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Arrest all of the LexCorp SpecOps who infiltrated the HIVE Metrodome"});
featCollection.push({name:"Soul Saver", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Smash all the soul globes in Mannheim's Chinese Theatre"});
featCollection.push({name:"Out of Service", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Stop the disabled J1N1 from reactivating inside the Monarch Playing Card Company"});
featCollection.push({name:"Staunching the Flow", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Destroy 15 blood vats located throughout Ellsworth Memorial Hospital"});
featCollection.push({name:"Lead from the Front", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Defeat the Manhunter in City Hall while all allies are still in the fight"});
featCollection.push({name:"Peas Officer", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Free all of the GPCD officer's from Poison Ivy's pods underneath the Botanical Gardens"});
featCollection.push({name:"No More Funny Business", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Defeat 30 Joker Clowns in the Amusement Mile Funhouse"});
featCollection.push({name:"Blue Christmas", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Hero",description:"Free 12 of the SCU troops trapped in SCU Police Station"});
featCollection.push({name:"Sin No More", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Defeat all of Trigon's sin demons in the Science Police Headquarters"});
featCollection.push({name:"Beast Basher", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Defeat 60 of the Beastiamorphs in the Metro Station"});
featCollection.push({name:"Taking Out The Laundering", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Collect all of Intergang's Counterfeit Money in their Warehouse"});
featCollection.push({name:"Lights Out in the Lighthouse", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Defeat all enemies and destroy all Venom canisters in the Lighthouse up to Bane"});
featCollection.push({name:"Extreme Birdwatching", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Investigate all of the Bird Statues in the Gotham Old Subway"});
featCollection.push({name:"Mister J's Special BBQ Recipe", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Set 30 police officers on fire in Amusement Mile Funhouse"});
featCollection.push({name:"Smashing Science", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Defeat 30 Science Police Officers in Science Police HQ"});
featCollection.push({name:"Go for the Throat!", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Defeat Shevla'nuhur Kyramud in the Watchtower without defeating his robots"});
featCollection.push({name:"Man Down!", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Reach the final confrontation in STAR's secret lab without losing any men"});
featCollection.push({name:"Evidence? What Evidence?", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Burn evidence of LexCorp's activities at Metro General"});
featCollection.push({name:"Blitz", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Defeat the Alpha Lantern in City Hall while all allies are still in the fight"});
featCollection.push({name:"Stuffed", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Let Cold Cut eat from the vending machine 8 times before defeating him inside Mister Freeze's lair"});
featCollection.push({name:"Now You See Me...", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Disable all security cameras and consoles inside Metro University"});
featCollection.push({name:"Favor for the Family", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Free 13 Falcone mobsters in the Burnley Freight Yards"});
featCollection.push({name:"Bestiamorph Ethics", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Free all of the captured Bestiamorphs in Circe's Citadel"});
featCollection.push({name:"No Respect!", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Desecrate the Amazonian's Enchanted Colossus in Circe's Hidden Base"});
featCollection.push({name:"Information Warfare", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Burn all the bookcases in the Sentinels of Magic Citadel"});
featCollection.push({name:"Watch Your Step", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Redirect all the portals in the Sentinels of Magic base to Hades"});
featCollection.push({name:"Two Birds with One Stone", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Defeat Hawkman and Hawkgirl within 10 seconds of each other in the JSA Metropolis HQ"});
featCollection.push({name:"Are We Not Men?", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Complete the Old STAR Labs without devolving into a super gorilla"});
featCollection.push({name:"Yoink!", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Steal all the Venom canisters in the Burnley Warehouse"});
featCollection.push({name:"Ringmaster", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Fight through the Regal Hotel without losing a single clown"});
featCollection.push({name:"Look Ma, No Hands", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Free Eclipso in the Sentinel Hold without securing the Hands of Shadow"});
featCollection.push({name:"Pig in a Blanket", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Gift wrap 50 defeated SCU troops in the SCU Police Station"});
featCollection.push({name:"Bacon in a Box", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Gift wrap 25 defeated SCU troops in the SCU Police Station"});
featCollection.push({name:"Soul Reaper", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Collect every soul in Brother Blood's inner sanctum and defeat Raven"});
featCollection.push({name:"Titanic", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Convert all five Titans in Brother Blood's inner Sanctum (may require multiple playthroughs)"});
featCollection.push({name:"Veterinarian", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Villain",description:"Resurrect the fallen Bestiamorphs in the Metro Station"});
featCollection.push({name:"The Croc Hunter", category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Complete the Scarecrow boss fight in the Gotham Sewer without allowing any Killer Croc Hallucinations to rise"});
featCollection.push({name:"Can't Get Enough Of That Justice",category:"Solo",subcategory:"Hideouts",stars:1,points:10,faction:"Both",description:"Encounter and Defeat both Bane and Hush in the Gotham Old Subway"});
featCollection.push({name:"Pot of Gold", category:"Seasonal",subcategory:"St. Patrick's Day",stars:2,points:25,faction:"Both",description:"Complete all of the St. Patrick's Day seasonal feats"});
featCollection.push({name:"Drink Up!", category:"Seasonal",subcategory:"St. Patrick's Day",stars:1,points:10,faction:"Both",description:"Drink all varieties of Mister Mxyzptlk Brew"});
featCollection.push({name:"Take One Down, Pass it Around", category:"Seasonal",subcategory:"St. Patrick's Day",stars:1,points:10,faction:"Both",description:"Drink any 10 Mister Mxyzptlk Brews"});
featCollection.push({name:"Over the Rainbow", category:"Seasonal",subcategory:"St. Patrick's Day",stars:1,points:10,faction:"Both",description:"Complete the Daily Planet Race Challenge"});
featCollection.push({name:"Where's ME gold? ", category:"Seasonal",subcategory:"St. Patrick's Day",stars:1,points:10,faction:"Both",description:"Sight Mister Mxyzptlk in Metropolis or Gotham 5 times"});
featCollection.push({name:"Kltpzyxm", category:"Seasonal",subcategory:"St. Patrick's Day",stars:1,points:10,faction:"Both",description:"Complete the Mister Mxyzptlk daily 10 times"});
featCollection.push({name:"Fancy Lad", category:"Seasonal",subcategory:"St. Patrick's Day",stars:1,points:10,faction:"Both",description:"Collect all styles in the Celtic set"});
featCollection.push({name:"A Hallmark of Success", category:"Seasonal",subcategory:"Valentine's Day",stars:2,points:25,faction:"Both",description:"Complete all of the Valentine's Day seasonal feats"});
featCollection.push({name:"The Power Goes Straigth to My Thighs", category:"Seasonal",subcategory:"Valentine's Day",stars:1,points:10,faction:"Both",description:"Eat any 10 holiday candies"});
featCollection.push({name:"I Choo-Choo-Choose You!", category:"Seasonal",subcategory:"Valentine's Day",stars:1,points:10,faction:"Both",description:"Consume all of the Valentine's Day hearts"});
featCollection.push({name:"Pretty in Pink", category:"Seasonal",subcategory:"Valentine's Day",stars:1,points:10,faction:"Both",description:"Collect all the styles in the Valentine set"});
featCollection.push({name:"Don't Lose Heart!", category:"Seasonal",subcategory:"Valentine's Day",stars:1,points:10,faction:"Both",description:"Help influence Aphrodite towards Scorn or Devotion without allowing the opposition to convert any hearts"});
featCollection.push({name:"Cute Overload", category:"Seasonal",subcategory:"Valentine's Day",stars:1,points:10,faction:"Both",description:"Obtain the Heart of Devotion trinket"});
featCollection.push({name:"What's Love Got to do With it", category:"Seasonal",subcategory:"Valentine's Day",stars:1,points:10,faction:"Both",description:"Obtain the Heart of Scorn trinket"});
featCollection.push({name:"Love is Hard Work", category:"Seasonal",subcategory:"Valentine's Day",stars:1,points:10,faction:"Both",description:"Complete all of the missions in Aphrodite's Realm"});
featCollection.push({name:"Life is Like...", category:"Seasonal",subcategory:"Valentine's Day",stars:1,points:10,faction:"Both",description:"Help both Devotion and Scorn prevail in Aphrodite's Temple"});
featCollection.push({name:"It's a Love/Hate Relationship", category:"Seasonal",subcategory:"Valentine's Day",stars:1,points:10,faction:"Both",description:"Eat all three varieties of holiday candy"});
featCollection.push({name:"Winter Is Coming", category:"Seasonal",subcategory:"Winter Holidays",stars:2,points:25,faction:"Both",description:"Complete all of the Winter seasonal feats"});
featCollection.push({name:"Twelve Days of Larfleeze", category:"Seasonal",subcategory:"Winter Holidays",stars:1,points:10,faction:"Both",description:"Spot Larfleeze on Twelve Seperate Days of Winter"});
featCollection.push({name:"Checking It Twice", category:"Seasonal",subcategory:"Winter Holidays",stars:1,points:10,faction:"Both",description:"Collect both Winter seasonal collections"});
featCollection.push({name:"Snowball Fight!", category:"Seasonal",subcategory:"Winter Holidays",stars:1,points:10,faction:"Both",description:"Throw 50 snowballs"});
featCollection.push({name:"15 Crazy Nights", category:"Seasonal",subcategory:"Winter Holidays",stars:1,points:10,faction:"Both",description:"Complete the Winter seasonal daily quest 15 times"});
featCollection.push({name:"Santa's Little Helper", category:"Seasonal",subcategory:"Winter Holidays",stars:1,points:10,faction:"Both",description:"Collect all styles in the Holiday Elf set"});
featCollection.push({name:"The Renewal of Spring", category:"Seasonal",subcategory:"Springtime",stars:2,points:25,faction:"Both",description:"Complete all of the Spring seasonal feats"});
featCollection.push({name:"Fruit Flavored", category:"Seasonal",subcategory:"Springtime",stars:1,points:10,faction:"Both",description:"Eat all varieties of Boost! Snacks"});
featCollection.push({name:"That's No Ordinary Rabbit", category:"Seasonal",subcategory:"Springtime",stars:1,points:10,faction:"Both",description:"Collect all styles in the Warrior of Spring set"});
featCollection.push({name:"Eco Friendly", category:"Seasonal",subcategory:"Springtime",stars:1,points:10,faction:"Both",description:"Complete the Spring Seasonal daily quest ten times"});
featCollection.push({name:"Seeds of Success", category:"Seasonal",subcategory:"Springtime",stars:1,points:10,faction:"Both",description:"Purchase any of the Spring Seasonal Trinkets"});
featCollection.push({name:"Eat, Drink and be Scary", category:"Seasonal",subcategory:"Spooktacular",stars:2,points:25,faction:"Both",description:"Complete all of the Spooktacular feats"});
featCollection.push({name:"Trick Or Treat, Smell My Feat", category:"Seasonal",subcategory:"Spooktacular",stars:1,points:10,faction:"Both",description:"Consume all of the different Spooktacular Tricks and Treats"});
featCollection.push({name:"I Must Not Fear", category:"Seasonal",subcategory:"Spooktacular",stars:1,points:10,faction:"Both",description:"Complete the Scarecrow Spooktacular Event 5 times"});
featCollection.push({name:"Costume Party", category:"Seasonal",subcategory:"Spooktacular",stars:1,points:10,faction:"Both",description:"Collect all styles from Skeets' Boo-tique"});
featCollection.push({name:"Candy Candy Candy Candy", category:"Seasonal",subcategory:"Spooktacular",stars:1,points:10,faction:"Both",description:"Consume 25 Spooktacular Tricks or Treats"});
featCollection.push({name:"Fight for the Light", category:"DLC",subcategory:"Fight for the Light",stars:2,points:25,faction:"Both",description:"Complete Ferris Aircraft Duo, STAR Labs Alert, Coast City Alert, and Oan Sciencecells Alert"});
featCollection.push({name:"Willpower Outage", category:"DLC",subcategory:"Fight for the Light",stars:2,points:25,faction:"Both",description:"Defeat the Scion of WIll before the Sliceclaws power it up"});
featCollection.push({name:"Fast and Fearless", category:"DLC",subcategory:"Fight for the Light",stars:2,points:25,faction:"Both",description:"Defeat the Scion of Fear in less than 5 minutes"});
featCollection.push({name:"Temper Tantrums", category:"DLC",subcategory:"Fight for the Light",stars:2,points:25,faction:"Both",description:"Confiscate 6 Red Power Rings from Civilians at Ferris Aircraft in Coast CIty"});
featCollection.push({name:"Conviction", category:"DLC",subcategory:"Fight for the Light",stars:2,points:25,faction:"Both",description:"Complete Oan Sciencecells without being knocked out"});
featCollection.push({name:"Faster Than Light Waves", category:"DLC",subcategory:"Fight for the Light",stars:2,points:25,faction:"Both",description:"Complete Oan Sciencecells in 20 minutes or less"});
featCollection.push({name:"Twice the Speed of Light", category:"DLC",subcategory:"Fight for the Light",stars:1,points:10,faction:"Both",description:"Finish the Coast City Duo in 7 minutes or less"});
featCollection.push({name:"Parole Denied", category:"DLC",subcategory:"Fight for the Light",stars:2,points:25,faction:"Hero",description:"Defeat as a Hero Red Lantern Vice, Yellow Lantern Lyssa Drak and Evil Star in the Oan Sciencecells"});
featCollection.push({name:"Parole Granted", category:"DLC",subcategory:"Fight for the Light",stars:2,points:25,faction:"Villain",description:"Defeat as a Villain Red Lantern Vice, Yellow Lantern Lyssa Drak and Evil Star in the Oan Sciencecells"});
featCollection.push({name:"Not that Repulsive", category:"DLC",subcategory:"Fight for the Light",stars:1,points:10,faction:"Both",description:"Defeat Vice in the Coast City Duo without restarting the repulsor"});
featCollection.push({name:"Low Battery", category:"DLC",subcategory:"Fight for the Light",stars:3,points:50,faction:"Hero",description:"Beat the Final Confrontation as a hero without using any Logic Batteries within the Hangar at Ferris Aircraft in Coast City"});
featCollection.push({name:"Illogical Reasoning", category:"DLC",subcategory:"Fight for the Light",stars:3,points:50,faction:"Villain",description:"Beat the Final Confrontation as a villain without using any Logic Batteries within the Hangar at Ferris Aircraft in Coast City"});
featCollection.push({name:"Intensive Group Therapy", category:"DLC",subcategory:"Fight for the Light",stars:2,points:25,faction:"Both",description:"Defeat the Coast City Alert in less than 30 minutes"});
featCollection.push({name:"Speed of Light", category:"DLC",subcategory:"Fight for the Light",stars:2,points:25,faction:"Both",description:"Complete the STAR Labs Alert in less than 30 minutes"});
featCollection.push({name:"Prime Timeline", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Complete the Massive Speed Force Rupture Event"});
featCollection.push({name:"Play On", category:"DLC",subcategory:"Lightning Strikes",stars:2,points:25,faction:"Both",description:"Complete the Cosmic Treadmill: Flashback Duo without destroying any Sonic Emitters"});
featCollection.push({name:"Two Tickets to Paradox", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Seal both types of Massive Speed Force Ruptures"});
featCollection.push({name:"Rogues' Gallery", category:"DLC",subcategory:"Lightning Strikes",stars:2,points:25,faction:"Hero",description:"Complete all of the Rogues' Wanted Posters"});
featCollection.push({name:"Crash of the Titans", category:"DLC",subcategory:"Lightning Strikes",stars:2,points:25,faction:"Villain",description:"Complete all of the Titans' Bounties"});
featCollection.push({name:"For My Next Trick!", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Defeat Abra Kadabra while all the Riot-Bots are active without being knocked out"});
featCollection.push({name:"He's Heating Up!", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Complete a Lightning Strikes Bounty or Wanted mission without being knocked out"});
featCollection.push({name:"He's On Fire!", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Complete 5 Lightning Strikes Bounty or Wanted missions without being knocked out"});
featCollection.push({name:"M-M-M-M-Monster Kill!", category:"DLC",subcategory:"Lightning Strikes",stars:2,points:25,faction:"Both",description:"Complete 10 Lightning Strikes Bounty or Wanted missions without being knocked out"});
featCollection.push({name:"Taking Out The Trash", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Complete 50 Lightning Strikes Bounty or Wanted missions"});
featCollection.push({name:"Central City's Most Wanted", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Complete 100 Lightning Strikes Bounty or Wanted missions"});
featCollection.push({name:"Bountiful", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Complete 250 Lightning Strikes Bounty or Wanted missions"});
featCollection.push({name:"How Do These Guys Keep Getting Loose?", category:"DLC",subcategory:"Lightning Strikes",stars:2,points:25,faction:"Both",description:"Complete 500 Lightning Strikes Bounty or Wanted missions"});
featCollection.push({name:"Changed In A Flash", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Activate any compartment trinket"});
featCollection.push({name:"Reap the Rewards", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Defeat 100 Paradox Reapers in Central City"});
featCollection.push({name:"If A Paradox Reaper Falls In Central City...", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Defeat 500 Paradox Reapers in Central City"});
featCollection.push({name:"Jeepers, It's The Reapers", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Defeat 1000 Paradox Reapers in Central City"});
featCollection.push({name:"Catch-2200", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Defeat 2200 Paradox Reapers in Central City"});
featCollection.push({name:"Is This The End, Or Was It The Beginning?", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Defeat 5000 Paradox Reapers in Central City"});
featCollection.push({name:"Quickly, Into the Past", category:"DLC",subcategory:"Lightning Strikes",stars:1,points:10,faction:"Both",description:"Complete the Cosmic Treadmill: Flashback Duo in under 7 minutes"});
featCollection.push({name:"99 Bottles", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Complete 99 Battle for Earth Duos"});
featCollection.push({name:"Bottle Opener", category:"DLC",subcategory:"Battle for Earth",stars:2,points:25,faction:"Both",description:"Complete 250 Battle for Earth Duos"});
featCollection.push({name:"Prime Numbers", category:"DLC",subcategory:"Battle for Earth",stars:2,points:25,faction:"Both",description:"Defeat all three Prime Avatars without destroying any of Brainiac Spawners"});
featCollection.push({name:"Fodder Sweeper", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Destroy the three Brainiac Spawners near the Core in the Prime Battleground raid"});
featCollection.push({name:"Olympian", category:"DLC",subcategory:"Battle for Earth",stars:2,points:25,faction:"Both",description:"Complete the Themyscira: The Gates of Tartarus raid in 30 minutes or less"});
featCollection.push({name:"They Used to be Adventurers", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Ensure all three Colossal Archers reach the front lines at the Paradise Court battle in the Themyscira: The Gates of Tartarus raid"});
featCollection.push({name:"Honor the Fallen", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Honor the fallen Amazons in Themyscira"});
featCollection.push({name:"Riverfront Shortsale", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Complete the Riverfront Center duo in 10 minutes or less"});
featCollection.push({name:"No Waiting Room", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Complete the Gotham Hospital duo in 10 minutes or less"});
featCollection.push({name:"Brief Stay", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Complete the Riverside Hotel duo in 10 minutes or less"});
featCollection.push({name:"Luthor's Union!", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Convert 250 Civilians inside of the Battle for Earth duos"});
featCollection.push({name:"Pod Breaker", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Destroy 250 Cybernetic Viral Pods inside of the Battle for Earth duos"});
featCollection.push({name:"Bomb Squad", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Detonate 250 Bombs inside of the Battle for Earth duos"});
featCollection.push({name:"Conversion Therapy", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Complete all Battle for Earth duos"});
featCollection.push({name:"Jury Tampering", category:"DLC",subcategory:"Battle for Earth",stars:2,points:25,faction:"Both",description:"Stack the jury with 12 humans, not allowing any Brainiac Jurors to be transported"});
featCollection.push({name:"Timely Closing Arguments", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Defeat the Prosecutor and Defense Attorney within 10 seconds of each other in the South Gotham Courthouse Alert"});
featCollection.push({name:"Can't Hide!", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Locate and defeat all three types of Stealth Units in the South Gotham Courthouse Alert"});
featCollection.push({name:"Guilty On All Charges", category:"DLC",subcategory:"Battle for Earth",stars:2,points:25,faction:"Both",description:"Allow all Sentences to run their full course when fighting the Supreme Justice in the South Gotham Courthouse Alert"});
featCollection.push({name:"Zone Sweeper Sweeper", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Complete the Deconstruction daily quest in South Gotham"});
featCollection.push({name:"In Prime Time", category:"DLC",subcategory:"Battle for Earth",stars:2,points:25,faction:"Both",description:"Finish the Prime Battleground Raid in 15 minutes or less"});
featCollection.push({name:"Uncover the Truth", category:"DLC",subcategory:"Battle for Earth",stars:2,points:25,faction:"Both",description:"Complete all of the Collections, Briefings, and Investigations available in the Battle for Earth DLC"});
featCollection.push({name:"No Tag Out!", category:"DLC",subcategory:"Battle for Earth",stars:2,points:25,faction:"Both",description:"Defeat each Prime Avatar before any of them get the chance to 'transition out' in the Prime Battleground raid"});
featCollection.push({name:"Bottle Hardened", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Complete 25 Battle for Earth Duos"});
featCollection.push({name:"Come With Me If You Want To Live", category:"DLC",subcategory:"Battle for Earth",stars:1,points:10,faction:"Both",description:"Save 250 Civilians Inside of the Battle for Earth duos"});
featCollection.push({name:"Doom Control", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win 20 Assault: Headquarters arena matches in the Hall of Doom"});
featCollection.push({name:"Menace to Society", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win an Assault: Headquarters arena match in The Hall of Doom"});
featCollection.push({name:"Your Map to the Stars", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Encounter all Iconic characters in the Assault: Headquarters PVP arena"});
featCollection.push({name:"That's Heavy", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win 25 Graviton Recovery matches in the Police Station City Safehouse arena"});
featCollection.push({name:"Spacial Delivery", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Transport the Graviton Singularity Capsule successfully 50 times in the Assault: City Safehouses PVP Arena"});
featCollection.push({name:"Heavy Beats", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win 25 Graviton Recovery matches in the Nightclub City Safehouse Arena"});
featCollection.push({name:"You're Grounded!", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win a Graviton Recovery match in the Nightclub City Safehouse Arena"});
featCollection.push({name:"Hostage Negotiator", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Free 50 non-combatant allies in the City Safehouses Arenas"});
featCollection.push({name:"Rescue Ranger", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win a Rescue match in the Police Station City Safehouse Arena"});
featCollection.push({name:"Rescue 911", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win 25 Rescue matches in the Police Station City Safehouse Arena"});
featCollection.push({name:"No Wallflower", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win 25 Rescue matches in the Nightclub City Safehouse Arena"});
featCollection.push({name:"The Club is the Bomb", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win a Bomb Threat match in the Nightclub City Safehouse Arena"});
featCollection.push({name:"Exploding onto the Scene", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win 25 Bomb Threat matches in the Nightclub City Safehouse Arenas"});
featCollection.push({name:"All Up in the Club", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win a Rescue match in the Nightclub City Safehouse Arena"});
featCollection.push({name:"What DO You Do?", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win 25 Bomb Threat matches in the Police Station City Safehouse Arena"});
featCollection.push({name:"Bombs, Away!", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win a Bomb Threat match in the Police Station City Safehouse"});
featCollection.push({name:"My Life as a Robot", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Dispose of 50 bombs in the Assault: City Safehouses PvP Arena"});
featCollection.push({name:"Together We Stand", category:"DLC",subcategory:"The Last Laugh",stars:3,points:50,faction:"Both",description:"Complete the Assault: Headquarters arena match without letting any iconic allies get knocked out"});
featCollection.push({name:"Space Station Spiff", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win 20 Assault: Headquarters PvP arena matches in The Watchtower"});
featCollection.push({name:"Watch Out!", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win an Assault: Headquarters PvP arena match in The Watchtower"});
featCollection.push({name:"Making a Name for Yourself", category:"DLC",subcategory:"The Last Laugh",stars:2,points:25,faction:"Both",description:"Knock out 50 iconic enemies in Assault: Headquarters arena matches"});
featCollection.push({name:"Let's Get a Rally Going!", category:"DLC",subcategory:"The Last Laugh",stars:2,points:25,faction:"Both",description:"Rally 50 iconic allies in Assault: Headquarters arena matches"});
featCollection.push({name:"Hacker", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Secure 50 terminals in the Hall of Doom in the Assault: Headquarters PvP Arena"});
featCollection.push({name:"No Wired Hangar... Ever!", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Unlock 10 devices in the Hangar in the Assault: Headquarters PvP Arena"});
featCollection.push({name:"Swimming with the Sharks", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win an Assault: Headquarters PvP arena match in The Hall of Doom in 15 minutes or less"});
featCollection.push({name:"Eat My Space Dust", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win an Assault: Headquarters PvP arena match in the Watchtower in 15 minutes or less"});
featCollection.push({name:"Pest Control", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Defeat 100 goons in the Assault: Headquarters PvP arenas"});
featCollection.push({name:"Who Watches the Watchtower", category:"DLC",subcategory:"The Last Laugh",stars:2,points:25,faction:"Both",description:"Win 100 Assault: Headquarters PvP arena matches in The Watchtower"});
featCollection.push({name:"Hall of Doooooom!", category:"DLC",subcategory:"The Last Laugh",stars:2,points:25,faction:"Both",description:"Win 100 Assault: Headquarters PvP arena matches in The Hall of Doom"});
featCollection.push({name:"A Real Hero", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Rally every iconic ally in the Assault: Headquarters PvP Arenas"});
featCollection.push({name:"This House is Clean", category:"DLC",subcategory:"The Last Laugh",stars:3,points:50,faction:"Both",description:"Complete the feats: My Life as a Robot, Hostage Negotiator, and Spacial Delivery"});
featCollection.push({name:"Space Invader", category:"DLC",subcategory:"The Last Laugh",stars:3,points:50,faction:"Both",description:"Unlock Ursa, Power Girl, Amon Sur and Kilowog Legendary Battle Arena Avatars"});
featCollection.push({name:"Putting the Safe Back in Safehouse", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win 100 Assault: City Safehouses arena matches"});
featCollection.push({name:"Like a Black Hole in a Jar", category:"DLC",subcategory:"The Last Laugh",stars:1,points:10,faction:"Both",description:"Win a Graviton Recovery match in the Police Station City Safehouse Arena"});
function calculateArmor(character, startDateString, endDateString)
{
var itype = "Gear";
var totalArmor = 0;
var timestamp = 0;
var listMessage = "";
var maxItemLength = 50;
var startTS = convertDateStringToTimestamp(startDateString);
var endTS = convertDateStringToTimestamp(endDateString);
var itemTotalPerType = {};
var armorType = [];
armorType[0] = "Head";
armorType[1] = "Back";
armorType[2] = "Chest";
armorType[3] = "Legs";
armorType[4] = "Shoulders";
armorType[5] = "Hands";
armorType[6] = "Waist";
armorType[7] = "Feet";
for (var i=0; i latestTS) {
latestTS = timestamp;
}
}
}
}
});
if (earliestTS < startTS) { earliestTS = startTS; }
if (latestTS > endTS) { latestTS = endTS; }
for (var i=earliestTS; i= startTS) && (timestamp < endTS)) {
var currentDay = convertTimestampToDateString(timestamp);
if (typeof(itemTotalPerDay[currentDay]) == "undefined") {
itemTotalPerDay[currentDay] = 1;
}
else {
itemTotalPerDay[currentDay] += 1;
}
listMessage += printLineDate(itemArray[i].item, convertTimestampToDateString(timestamp), person, maxItemLength);
totalArmor += 1;
var foundOne = 0;
for (var j=0; j= startTS) && (timestamp < endTS)) {
if (typeof(armorList[itemArray[i].item]) == "undefined") {
armorList[itemArray[i].item] = 0;
}
armorList[itemArray[i].item] += 1;
totalArmor += 1;
}
}
}
}
});
// var Message = "";
// Message += "Character: " + character + "\r\n";
// Message += "Date range: " + startDateString + " through " + endDateString + "\r\n\r\n";
// Message += "Unobtained armor:\r\n\r\n";
// for (var i=0; i';
results += 'Date range: ' + startDateString + ' through ' + endDateString + ' ';
results += 'Total Armor obtained: ' + totalArmor + '
';
printOnce = 1;
}
}
results += ' ';
results += ' ';
results += '';
document.getElementById("TableDisplay").innerHTML = results;
convertTrees();
document.getElementById('StatsDisplay').style.display="none";
document.getElementById('TableDisplay').style.display="block";
// Blank out any existing line or pie charts since I don't have any for this section of data to display
document.getElementById('LeftChartDiv').innerHTML = "";
document.getElementById('RightChartDiv').innerHTML = "";
}
// ********************************************************************
// * calculateFeats
// * Go through all of log lines and count up how
// * many feats the character received
// * For example: 1335101764: ClassicFumbles completed a feat: Pod Breaker
// ********************************************************************
function calculateFeats(character, startDateString, endDateString)
{
var itype = "Feats";
var total_feats = 0;
var timestamp = 0;
var listMessage = "";
var maxItemLength = 50;
var startTS = convertDateStringToTimestamp(startDateString);
var endTS = convertDateStringToTimestamp(endDateString);
var people = [];
var itemTotalPerDay = {};
var itemTotalPerPerson = {};
if (character == "All characters") {
people = Object.keys(allLogLinesJSON);
}
else {
people = [ character ];
}
var mainCategories = "Summary Exploration Styles Alerts Renown Seasonal General Solo Player vs. Player Raids Duos DLC R&D";
var featcount = 610; // On lost_sapphire
var earliestTS = 0;
var latestTS = 0;
people.forEach(function(person) {
if (typeof(allLogLinesJSON[person]) != "undefined") {
if (allLogLinesJSON[person].hasOwnProperty(itype)) {
var itemArray = allLogLinesJSON[person][itype];
for (var i=0; i latestTS) {
latestTS = timestamp;
}
}
}
}
});
if (earliestTS < startTS) { earliestTS = startTS; }
if (latestTS > endTS) { latestTS = endTS; }
for (var i=earliestTS; i= startTS) && (timestamp < endTS)) {
listMessage += printLineDate(itemArray[i].item, convertTimestampToDateString(timestamp), person, maxItemLength);
total_feats += 1;
var currentDay = convertTimestampToDateString(timestamp);
if (typeof(itemTotalPerDay[currentDay]) == "undefined") {
itemTotalPerDay[currentDay] = 1;
}
else {
itemTotalPerDay[currentDay] += 1;
}
var foundOne = 0;
for (var j=0; j= startTS) && (timestamp < endTS)) {
if (typeof(featList[itemArray[i].item]) == "undefined") {
featList[itemArray[i].item] = 0;
}
featList[itemArray[i].item] += 1;
total_feats += 1;
}
}
}
// Set all the feats we can't get to 1 so it won't display them
for (var i=0; i 0) && (featList["WANTED: Knocked Out or Alive"] == 0)) {
featList["WANTED: Knocked Out or Alive"] = featList["Wanted: Knocked Out or Alive"];
}
else if ((featList["WANTED: Knocked Out or Alive"] > 0) && (featList["Wanted: Knocked Out or Alive"] == 0)) {
featList["Wanted: Knocked Out or Alive"] = featList["WANTED: Knocked Out or Alive"];
}
else if ((featList["WANTED: Knocked Out or Alive"] == 0) && (featList["Wanted: Knocked Out or Alive"] == 0)) {
featList["Wanted: Knocked Out or Alive"] = 1;
}
var printOnce = 1;
var results = '';
results += 'Character: ' + character + ' ';
results += 'Date range: ' + startDateString + ' through ' + endDateString + ' ';
results += 'Total Feats obtained: ' + total_feats + '
';
results += 'Unobtained feats: (click on link to expand) ';
var categoriesExploration = [ "General", "Raids", "Metropolis", "Alerts", "Gotham" ];
results += '
';
var printIntro = 1;
for (var j=0; jExploration/';
results += '
';
results += ' ';
printIntro = 1;
}
var categoriesDLC = [ "Lightning Strikes", "Fight for the Light", "Battle for Earth", "The Last Laugh" ];
for (var j=0; jDLC/';
results += '
';
document.getElementById("TableDisplay").innerHTML = results;
convertTrees();
document.getElementById('StatsDisplay').style.display="none";
document.getElementById('TableDisplay').style.display="block";
// Blank out any existing line or pie charts since I don't have any for this section of data to display
document.getElementById('LeftChartDiv').innerHTML = "";
document.getElementById('RightChartDiv').innerHTML = "";
// var Message = "Feat Name\tCategory\t\tStars\tDescription\r\n\r\n";
// for (var i=0; i and