"use strict"; let BOXES = {} let BLOCKADE = {}; let COLONIES = {}; let SPACES = {}; let PATH_INDEX = {}; let PATH_NAME; let PATH_TYPE; const GENERALS = { "Arnold": { owner: "American", strategy: 1, battle: 3, agility: 2, bonus: false }, "Gates": { owner: "American", strategy: 2, battle: 2, agility: 1, bonus: false }, "Greene": { owner: "American", strategy: 1, battle: 4, agility: 2, bonus: true }, "Lafayette": { owner: "American", strategy: 1, battle: 2, agility: 1, bonus: false }, "Lee": { owner: "American", strategy: 2, battle: 1, agility: 1, bonus: false }, "Lincoln": { owner: "American", strategy: 2, battle: 1, agility: 1, bonus: false }, "Washington": { owner: "American", strategy: 1, battle: 5, agility: 2, bonus: true }, "Burgoyne": { owner: "British", strategy: 2, battle: 2, agility: 1, bonus: false }, "Carleton": { owner: "British", strategy: 3, battle: 3, agility: 2, bonus: false }, "Clinton": { owner: "British", strategy: 3, battle: 4, agility: 2, bonus: false }, "Cornwallis": { owner: "British", strategy: 2, battle: 4, agility: 2, bonus: false }, "Howe": { owner: "British", strategy: 3, battle: 6, agility: 3, bonus: false }, "Rochambeau": { owner: "French", strategy: 2, battle: 4, agility: 2, bonus: false }, }; function getEdge(A, B) { if (A > B) return PATHS[B + "/" + A]; return PATHS[A + "/" + B]; } (function() { let info = {}; function box(category, A, x, y) { BOXES[A] = { name: A, category: category, x: x, y: y }; } function space(colony, name, x, y, type) { if (type == 'winter-quarters') { x += 1; y += 1; } if (!(colony in COLONIES)) COLONIES[colony] = []; COLONIES[colony].push(name); SPACES[name] = { name: name, colony: colony, type: type, port: false, x: x, y: y, exits: [] }; } function line(A, B, type) { if (A > B) { let C = B; B = A; A = C; } let id = A + "/" + B; SPACES[A].exits.push(B); SPACES[B].exits.push(A); info[id] = type; if (!(A in PATH_INDEX)) PATH_INDEX[A] = {} if (!(B in PATH_INDEX)) PATH_INDEX[B] = {} PATH_INDEX[A][B] = -1; PATH_INDEX[B][A] = -1; } space("CA", "Fort Detroit", 55, 673, "regular-space"); space("CA", "Montreal", 1000, 159, "fortified-port"); space("CA", "Quebec", 1122, 57, "fortified-port"); space("CT", "Hartford", 1183, 749, "winter-quarters"); space("CT", "New Haven", 1088, 736, "regular-space"); space("DE", "Wilmington DE", 885, 1079, "winter-quarters"); space("GA", "Augusta", 140, 2060, "regular-space"); space("GA", "Savannah", 227, 2271, "regular-space"); space("GA", "St. Mary's", 180, 2394, "regular-space"); space("MA", "Barnstable", 1394, 705, "regular-space"); space("MA", "Boston", 1327, 592, "winter-quarters"); space("MA", "Falmouth", 1334, 410, "regular-space"); space("MA", "Lexington Concord", 1218, 628, "regular-space"); space("MA", "Springfield", 1095, 624, "winter-quarters"); space("MD", "Baltimore", 769, 1105, "winter-quarters"); space("MD", "Fort Cumberland", 446, 1098, "regular-space"); space("MD", "Frederick Town", 646, 1097, "regular-space"); space("NC", "Charlotte", 215, 1653, "regular-space"); space("NC", "Gilbert Town", 123, 1568, "regular-space"); space("NC", "Hillsboro", 484, 1582, "regular-space"); space("NC", "New Bern", 764, 1670, "regular-space"); space("NC", "Salem", 308, 1561, "regular-space"); space("NC", "Wake (Raleigh)", 606, 1671, "regular-space"); space("NC", "Wilmington NC", 676, 1816, "regular-space"); space("NH", "Brattleboro", 1102, 486, "regular-space"); space("NH", "Concord", 1214, 460, "regular-space"); space("NH", "Norwich", 1125, 342, "winter-quarters"); space("NJ", "Monmouth", 998, 1074, "regular-space"); space("NJ", "Morristown", 864, 831, "regular-space"); space("NJ", "New Brunswick", 961, 942, "regular-space"); space("NY", "Albany", 965, 626, "winter-quarters"); space("NY", "Fort Niagara", 461, 526, "regular-space"); space("NY", "Fort Stanwix", 877, 483, "winter-quarters"); space("NY", "Genesee", 668, 582, "regular-space"); space("NY", "Long Island", 1147, 868, "regular-space"); space("NY", "New York", 1024, 838, "winter-quarters"); space("NY", "Oswego", 768, 424, "regular-space"); space("NY", "Saratoga", 992, 496, "regular-space"); space("NY", "Ticonderoga", 993, 355, "winter-quarters"); space("NY", "Westchester", 955, 747, "regular-space"); space("PA", "Bassett Town", 147, 984, "regular-space"); space("PA", "Harrisburg", 555, 880, "regular-space"); space("PA", "Philadelphia", 846, 961, "fortified-port"); space("PA", "Pittsburgh", 439, 958, "winter-quarters"); space("PA", "Reading", 684, 900, "regular-space"); space("PA", "Wyoming Valley", 685, 747, "winter-quarters"); space("PA", "York", 589, 992, "regular-space"); space("RI", "Newport", 1289, 736, "winter-quarters"); space("SC", "Camden", 346, 1773, "regular-space"); space("SC", "Charleston", 444, 2050, "fortified-port"); space("SC", "Cheraw", 496, 1795, "regular-space"); space("SC", "Eutaw Springs", 404, 1905, "regular-space"); space("SC", "Fort Prince George", 74, 1773, "regular-space"); space("SC", "Georgetown", 574, 1915, "regular-space"); space("SC", "Ninety Six", 222, 1932, "regular-space"); space("VA", "Abingdon", 61, 1451, "regular-space"); space("VA", "Alexandria", 653, 1217, "winter-quarters"); space("VA", "Charlottesville", 434, 1257, "winter-quarters"); space("VA", "Fincastle", 349, 1402, "regular-space"); space("VA", "Fort Chiswell", 212, 1408, "regular-space"); space("VA", "Lynch's Ferry", 486, 1444, "regular-space"); space("VA", "Norfolk", 781, 1450, "winter-quarters"); space("VA", "Petersburg", 634, 1446, "regular-space"); space("VA", "Point Pleasant", 132, 1218, "regular-space"); space("VA", "Richmond", 608, 1323, "winter-quarters"); space("VA", "Yorktown", 767, 1317, "regular-space"); box("SEA", "Sea1", 1277, 65, "blockade"); box("SEA", "Sea2", 1469, 514, "blockade"); box("SEA", "Sea3", 1213, 981, "blockade"); box("SEA", "Sea4", 1058, 1174, "blockade"); box("SEA", "Sea5", 947, 1395, "blockade"); box("SEA", "Sea6", 637, 2027, "blockade"); box("SEA", "Sea7", 359, 2358, "blockade"); box("HOLDING", "Continental Congress Dispersed", 545, 350); box("HOLDING", "Captured Generals", 1463, 80); box("HOLDING", "British Leader Reinforcements", 1425, 1745); box("HOLDING", "American Leader Reinforcements", 400, 310); box("HOLDING", "French Reinforcements", 150, 340); box("ALLIANCE", "French Alliance Track 0", 898, 2240); box("ALLIANCE", "French Alliance Track 1", 964, 2240); box("ALLIANCE", "French Alliance Track 2", 1030, 2240); box("ALLIANCE", "French Alliance Track 3", 1096, 2240); box("ALLIANCE", "French Alliance Track 4", 1162, 2240); box("ALLIANCE", "French Alliance Track 5", 1228, 2240); box("ALLIANCE", "French Alliance Track 6", 1294, 2240); box("ALLIANCE", "French Alliance Track 7", 1360, 2240); box("ALLIANCE", "French Alliance Track 8", 1426, 2240); box("ALLIANCE", "French Alliance Track 9", 1492, 2240); box("TURN", "Game Turn 1775", 898, 2370); box("TURN", "Game Turn 1776", 964, 2370); box("TURN", "Game Turn 1777", 1030, 2370); box("TURN", "Game Turn 1778", 1096, 2370); box("TURN", "Game Turn 1779", 1162, 2370); box("TURN", "Game Turn 1780", 1228, 2370); box("TURN", "Game Turn 1781", 1294, 2370); box("TURN", "Game Turn 1782", 1360, 2370); box("TURN", "Game Turn 1783", 1426, 2370); box("CONTROL", "CA", 1376, 967); box("CONTROL", "NH", 1458, 1006); box("CONTROL", "NY", 1375, 1081); box("CONTROL", "MA", 1491, 1081); box("CONTROL", "CT", 1455, 1156); box("CONTROL", "RI", 1533, 1156); box("CONTROL", "PA", 1299, 1194); box("CONTROL", "NJ", 1376, 1189); box("CONTROL", "MD", 1299, 1266); box("CONTROL", "DE", 1376, 1266); box("CONTROL", "VA", 1241, 1337); box("CONTROL", "NC", 1260, 1407); box("CONTROL", "SC", 1212, 1479); box("CONTROL", "GA", 1164, 1550); function wilderness(A,B) { line(A,B, "wilderness"); } function path(A,B) { line(A,B, "path"); } function sea(space,zone) { SPACES[space].port = true; BLOCKADE[space] = zone; } wilderness("Quebec", "Falmouth"); wilderness("Fort Detroit", "Bassett Town"); wilderness("Bassett Town", "Point Pleasant"); path("Quebec", "Montreal"); path("Montreal", "Ticonderoga"); path("Montreal", "Oswego"); path("Oswego", "Fort Niagara"); path("Oswego", "Fort Stanwix"); path("Fort Niagara", "Fort Detroit"); path("Fort Niagara", "Genesee"); path("Ticonderoga", "Norwich"); path("Ticonderoga", "Saratoga"); path("Norwich", "Brattleboro"); path("Norwich", "Concord"); path("Concord", "Falmouth"); path("Concord", "Brattleboro"); path("Saratoga", "Brattleboro"); path("Saratoga", "Albany"); path("Brattleboro", "Springfield"); path("Fort Stanwix", "Albany"); path("Albany", "Springfield"); path("Lexington Concord", "Springfield"); path("Lexington Concord", "Boston"); path("Falmouth", "Boston"); path("Barnstable", "Boston"); path("Newport", "Boston"); path("Newport", "Hartford"); path("Springfield", "Hartford"); path("New Haven", "Hartford"); path("New Haven", "New York"); path("New Haven", "Westchester"); path("New York", "Westchester"); path("New York", "Long Island"); path("Newport", "Lexington Concord"); path("Albany", "Westchester"); path("Fort Stanwix", "Genesee"); path("Genesee", "Wyoming Valley"); path("Fort Niagara", "Pittsburgh"); path("Morristown", "Westchester"); path("Morristown", "Wyoming Valley"); path("Morristown", "Reading"); path("Morristown", "New Brunswick"); path("Morristown", "New York"); path("New York", "New Brunswick"); path("Monmouth", "New Brunswick"); path("Philadelphia", "New Brunswick"); path("Monmouth", "Philadelphia"); path("Reading", "Philadelphia"); path("Wyoming Valley", "Reading"); path("Wilmington DE", "Philadelphia"); path("Wilmington DE", "Baltimore"); path("Bassett Town", "Pittsburgh"); path("Fort Cumberland", "Pittsburgh"); path("Harrisburg", "Pittsburgh"); path("Harrisburg", "York"); path("Reading", "York"); path("Harrisburg", "Reading"); path("Frederick Town", "York"); path("Frederick Town", "Baltimore"); path("Frederick Town", "Alexandria"); path("Frederick Town", "Charlottesville"); path("Frederick Town", "Fort Cumberland"); path("Richmond", "Alexandria"); path("Richmond", "Yorktown"); path("Richmond", "Petersburg"); path("Richmond", "Lynch's Ferry"); path("Richmond", "Charlottesville"); path("Richmond", "Norfolk"); path("Fincastle", "Charlottesville"); path("Fincastle", "Lynch's Ferry"); path("Fincastle", "Fort Chiswell"); path("Point Pleasant", "Fort Chiswell"); path("Abingdon", "Fort Chiswell"); path("Abingdon", "Gilbert Town"); path("Fort Prince George", "Gilbert Town"); path("Charlotte", "Gilbert Town"); path("Charlotte", "Salem"); path("Hillsboro", "Salem"); path("Cheraw", "Salem"); path("Lynch's Ferry", "Salem"); path("Charlotte", "Camden"); path("Abingdon", "Fort Prince George"); path("New Bern", "Norfolk"); path("Petersburg", "Norfolk"); path("Petersburg", "Wake (Raleigh)"); path("New Bern", "Wake (Raleigh)"); path("Hillsboro", "Wake (Raleigh)"); path("Petersburg", "Hillsboro"); path("Petersburg", "Lynch's Ferry"); path("Wilmington NC", "Wake (Raleigh)"); path("Wilmington NC", "Cheraw"); path("Wilmington NC", "Georgetown"); path("Cheraw", "Georgetown"); path("Cheraw", "Camden"); path("Ninety Six", "Fort Prince George"); path("Ninety Six", "Camden"); path("Ninety Six", "Augusta"); path("Eutaw Springs", "Camden"); path("Eutaw Springs", "Charleston"); path("Georgetown", "Charleston"); path("Savannah", "Charleston"); path("Alexandria", "Baltimore"); path("Savannah", "Augusta"); path("Savannah", "St. Mary's"); path("Charlottesville", "Lynch's Ferry"); sea("Quebec", "Sea1"); sea("Montreal", "Sea1"); sea("Falmouth", "Sea2"); sea("Boston", "Sea2"); sea("Barnstable", "Sea2"); sea("Newport", "Sea2"); sea("New Haven", "Sea3"); sea("New York", "Sea3"); sea("Long Island", "Sea3"); sea("Philadelphia", "Sea4"); sea("Wilmington DE", "Sea4"); sea("Baltimore", "Sea5"); sea("Alexandria", "Sea5"); sea("Yorktown", "Sea5"); sea("Norfolk", "Sea5"); sea("New Bern", "Sea6"); sea("Wilmington NC", "Sea6"); sea("Charleston", "Sea6"); sea("Savannah", "Sea7"); sea("St. Mary's", "Sea7"); PATH_NAME = Object.keys(info).sort(); PATH_TYPE = []; for (let id of PATH_NAME) PATH_TYPE.push(info[id]); for (let a in PATH_INDEX) { for (let b in PATH_INDEX[a]) { let id = a < b ? a + '/' + b : b + '/' + a; PATH_INDEX[a][b] = PATH_NAME.indexOf(id); } } })(); if (typeof module == 'object') { module.exports = { GENERALS:GENERALS, BOXES:BOXES, COLONIES:COLONIES, SPACES:SPACES, PATH_NAME:PATH_NAME, PATH_TYPE:PATH_TYPE, PATH_INDEX:PATH_INDEX, BLOCKADE } }