|
var |
|
ZERGLING = 'Zergling', |
|
ROACH = 'Roach', |
|
HYDRALISK = 'Hydralisk', |
|
BANELING = 'Baneling', |
|
MARINE = 'Marine', |
|
HELLION = 'Hellion', |
|
MARAUDER = 'Marauder', |
|
REAPER = 'Reaper', |
|
TANK = 'Siege Tank', |
|
ZEALOT = 'Zealot', |
|
SENTRY = 'Sentry', |
|
STALKER = 'Stalker', |
|
IMMORTAL = 'Immortal'; |
|
|
|
var |
|
ZERG = 'Zerg', |
|
TERRAN = 'Terran', |
|
PROTOSS = 'Protoss'; |
|
|
|
var UNITS = { |
|
ZERG: [ZERGLING, ROACH, HYDRALISK, BANELING], |
|
TERRAN: [MARINE, HELLION, MARAUDER, REAPER, TANK], |
|
PROTOSS: [ZEALOT, SENTRY, STALKER, IMMORTAL] |
|
}; |
|
|
|
var |
|
ARMORED = [ROACH, STALKER, MARAUDER, IMMORTAL, TANK], |
|
LIGHT = [MARINE, HELLION, ZEALOT, HYDRALISK, ZERGLING, REAPER, SENTRY]; |
|
|
|
var BONUS = new Object(); |
|
BONUS[ROACH] = ARMORED; |
|
BONUS[STALKER] = ARMORED; |
|
BONUS[MARAUDER] = ARMORED; |
|
BONUS[IMMORTAL] = ARMORED; |
|
BONUS[TANK] = ARMORED; |
|
BONUS[BANELING] = LIGHT; |
|
BONUS[HELLION] = LIGHT; |
|
BONUS[REAPER] = LIGHT; |
|
|
|
|
|
var COUNTER = new Object(); |
|
|
|
COUNTER[ZERGLING] = [STALKER, MARAUDER, HYDRALISK, IMMORTAL, SENTRY], |
|
COUNTER[ROACH] = [ZEALOT, BANELING, HELLION, ZEALOT], |
|
COUNTER[HYDRALISK] = [], |
|
COUNTER[BANELING] = [ZERGLING, MARINE, ZEALOT], |
|
COUNTER[MARINE] = [MARAUDER, HYDRALISK, IMMORTAL], |
|
COUNTER[HELLION] = [ZEALOT, ZERGLING, SENTRY], |
|
COUNTER[MARAUDER] = [HELLION, ROACH, STALKER], |
|
COUNTER[REAPER] = [ZEALOT, ZERGLING], |
|
COUNTER[TANK] = [MARINE, HYDRALISK, ZERGLING, REAPER], |
|
COUNTER[ZEALOT] = [MARAUDER, IMMORTAL, HYDRALISK], |
|
COUNTER[STALKER] = [REAPER, HELLION, SENTRY], |
|
COUNTER[SENTRY] = [], |
|
COUNTER[IMMORTAL] = [STALKER, ROACH, TANK] |
|
|
|
|
|
function weak_against (u) { |
|
var units = []; |
|
for (var v in COUNTER) { |
|
if (COUNTER[v].contains(u)) { |
|
units.push(v); |
|
} |
|
} |
|
for (var v in BONUS) { |
|
if (u !== v && BONUS[v].contains(u) && !COUNTER[u].contains(v)) { |
|
units.splice(units.indexOf(v), 1, v+" (bonus)"); |
|
} |
|
} |
|
return units.sort().join(", ") || "None"; |
|
} |
|
|
|
function strong_against (u) { |
|
var units = COUNTER[u].concat(); |
|
|
|
if (u in BONUS) { |
|
for (var i = 0; i < BONUS[u].length; i++) { |
|
var v = BONUS[u][i]; |
|
units.splice(units.indexOf(v), 1, v+" (bonus)"); |
|
} |
|
} |
|
|
|
return units.sort().join(", ") || "None"; |
|
} |
|
|
|
Array.prototype.contains = function (o) { |
|
return this.indexOf(o) >= 0; |
|
} |
|
|
|
var sys = require('sys'); |
|
var print = function (s) { sys.print(s+"\n") }; |
|
|
|
for (var race in UNITS) { |
|
print("# "+race); |
|
for (var i = 0; i < UNITS[race].length; i++) { |
|
var unit = UNITS[race][i]; |
|
print("## "+unit); |
|
print(" * strong against: "+strong_against(unit)); |
|
print(" * weak against: "+weak_against(unit)); |
|
print(""); |
|
} |
|
} |