"use strict" var data ;(function () { function array_insert(array, index, item) { for (let i = array.length; i > index; --i) array[i] = array[i - 1] array[index] = item } function set_add(set, item) { let a = 0 let b = set.length - 1 while (a <= b) { let m = (a + b) >> 1 let x = set[m] if (item < x) b = m - 1 else if (item > x) a = m + 1 else return } array_insert(set, a, item) } function make_index_from_list(list) { let map = {} for (let i = 0; i < list.length; ++i) map[list[i]] = i return map } const BOXES = {} // === GENERALS === const generals = [ { name: "Arnold", owner: "American", strategy: 1, battle: 3, agility: 2, bonus: false }, { name: "Gates", owner: "American", strategy: 2, battle: 2, agility: 1, bonus: false }, { name: "Greene", owner: "American", strategy: 1, battle: 4, agility: 2, bonus: true }, { name: "Lafayette", owner: "American", strategy: 1, battle: 2, agility: 1, bonus: false }, { name: "Lee", owner: "American", strategy: 2, battle: 1, agility: 1, bonus: false }, { name: "Lincoln", owner: "American", strategy: 2, battle: 1, agility: 1, bonus: false }, { name: "Washington", owner: "American", strategy: 1, battle: 5, agility: 2, bonus: true }, { name: "Rochambeau", owner: "French", strategy: 2, battle: 4, agility: 2, bonus: false }, { name: "Burgoyne", owner: "British", strategy: 2, battle: 2, agility: 1, bonus: false }, { name: "Carleton", owner: "British", strategy: 3, battle: 3, agility: 2, bonus: false }, { name: "Clinton", owner: "British", strategy: 3, battle: 4, agility: 2, bonus: false }, { name: "Cornwallis", owner: "British", strategy: 2, battle: 4, agility: 2, bonus: false }, { name: "Howe", owner: "British", strategy: 3, battle: 6, agility: 3, bonus: false }, ] const general_index = make_index_from_list(generals.map(x=>x.name)) // === SPACES === const spaces = [] const space_index = {} const colony_name = [ "Canada", "NH", "NY", "MA", "CT", "RI", "PA", "NJ", "MD", "DE", "VA", "NC", "SC", "GA" ] const colony_spaces = colony_name.map(x => []) const Canada = 0 const NH = 1 const NY = 2 const MA = 3 const CT = 4 const RI = 5 const PA = 6 const NJ = 7 const MD = 8 const DE = 9 const VA = 10 const NC = 11 const SC = 12 const GA = 13 function box(category, A, x, y) { x += 40 y += 36 BOXES[A] = { name: A, category: category, x: x, y: y } } function space(colony, name, x, y, type) { x += 40 y += 36 if (type === "winter-quarters") { x += 1 y += 1 } let ix = spaces.length space_index[name] = ix spaces.push({ name: name, colony, type, port: 0, path: [], wilderness: [], adjacent: [], x, y }) set_add(colony_spaces[colony], ix) } function not_space(type, name, x, y) { // box that's not a space x += 40 y += 36 let ix = spaces.length space_index[name] = ix spaces.push({ name, type, x, y }) } function line(A, B, type) { A = space_index[A] B = space_index[B] set_add(spaces[A].adjacent, B) set_add(spaces[B].adjacent, A) set_add(spaces[A][type], B) set_add(spaces[B][type], A) } space(Canada, "Fort Detroit", 55, 673, "regular-space") space(Canada, "Montreal", 1000, 159, "fortified-port") space(Canada, "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") not_space("box", "British Leader Reinforcements", 1425, 1745) not_space("box", "French Reinforcements", 150, 340) not_space("box", "American Leader Reinforcements", 400, 310) not_space("box", "Captured Generals", 1463, 80) not_space("box", "Continental Congress Dispersed", 545, 350) 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("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", "Canada", 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_index[space]].port = 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", 1) sea("Montreal", 1) sea("Falmouth", 2) sea("Boston", 2) sea("Barnstable", 2) sea("Newport", 2) sea("New Haven", 3) sea("New York", 3) sea("Long Island", 3) sea("Philadelphia", 4) sea("Wilmington DE", 4) sea("Baltimore", 5) sea("Alexandria", 5) sea("Yorktown", 5) sea("Norfolk", 5) sea("New Bern", 6) sea("Wilmington NC", 6) sea("Charleston", 6) sea("Savannah", 7) sea("St. Mary's", 7) // === CARDS === const CARD_3_OPS = { title: "3 OPS", type: "ops", count: 3 } const CARD_2_OPS = { title: "2 OPS", type: "ops", count: 2 } const CARD_1_OPS = { title: "1 OPS", type: "ops", count: 1 } const cards = [ null, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_3_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_2_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, CARD_1_OPS, /* 67 */ { title: "Minor Campaign", type: "campaign", count: 2, }, /* 68 */ { title: "Minor Campaign", type: "campaign", count: 2, }, /* 69 */ { title: "Minor Campaign", type: "campaign", count: 2, }, /* 70 */ { title: "Major Campaign", type: "campaign", count: 3, }, /* 71 */ { full_title: "North's Government Falls - The War Ends in 1779", title: "The War Ends in 1779", type: "mandatory-event", event: "the_war_ends", year: 1779, }, /* 72 */ { full_title: "North's Government Falls - The War Ends in 1780", title: "The War Ends in 1780", type: "mandatory-event", event: "the_war_ends", year: 1780, }, /* 73 */ { full_title: "North's Government Falls - The War Ends in 1781", title: "The War Ends in 1781", type: "mandatory-event", event: "the_war_ends", year: 1781, }, /* 74 */ { full_title: "North's Government Falls - The War Ends in 1782", title: "The War Ends in 1782", type: "mandatory-event", event: "the_war_ends", year: 1782, }, /* 75 */ { full_title: "North's Government Falls - The War Ends in 1783", title: "The War Ends in 1783", type: "mandatory-event", event: "the_war_ends", year: 1783, }, /* 76 */ { title: "Henry Know Continental Artillery Commander", type: "american-battle", }, /* 77 */ { title: "Jane McCrea Indian Atrocity Sparks Outrage", type: "american-event", event: "place_american_pc", count: 2, once: true, }, /* 78 */ { title: "Iroquois Uprising!", type: "british-event", event: "remove_american_pc_from_non_port", where: [ NH, NY, PA ], count: 2, }, /* 79 */ { title: "Joseph Brant Leads an Iroquois Raid", type: "british-event", event: "remove_american_pc_from_non_port", where: [ NH, NY, PA ], count: 2, }, /* 80 */ { title: "Lt. Colonel Simcoe's Queen's Rangers", type: "british-event", event: "remove_american_pc_within_two_spaces_of_a_british_general", count: 2, }, /* 81 */ { title: "D'Estaing Sails for the Caribbean", type: "british-event", when: "after_french_alliance", event: "remove_french_navy", }, /* 82 */ { title: "Banastre Tarleton's Waxhaws Massacre", type: "british-event-or-battle", event: "remove_american_cu", }, /* 83 */ { title: "Lord George Germaine Offers Royal Amnesty", type: "british-event", event: "remove_american_pc", count: 2, }, /* 84 */ { title: "George Rogers Clark Leads a Western Offensive", type: "american-event", event: "remove_random_british_card", }, /* 85 */ { title: "Don Bernardo Galvez Captures Pensacola", type: "american-event", when: "european_war_in_effect", event: "remove_british_cu", count: 2, }, /* 86 */ { title: "Baron von Steuben Trains the Continental Army", type: "american-event", event: "baron_von_steuben_trains_the_continental_army", }, /* 87 */ { title: "Lord North Offers a Royal Amnesty", type: "british-event", event: "remove_american_pc", count: 4, once: true, }, /* 88 */ { title: "The Swamp Fox, Francis Marion", type: "american-event", event: "remove_british_pc_from", where: [ NC, SC, GA ], count: 2, }, /* 89 */ { title: "The Gamecock: Thomas Sumter", type: "american-event", event: "remove_british_pc_from", where: [ NC, SC, GA ], count: 2, }, /* 90 */ { title: "Josiah Martin Rallies North Carolina Loyalists", type: "british-event", event: "remove_american_pc_from", where: [ NC ], count: 2, }, /* 91 */ { title: 'Thomas Paine Publishes Pamphlets "Common Sense" and "The American Crisis"', type: "american-event", event: "place_american_pc_in", where: [ NH, NY, MA, CT, RI, PA, NJ, MD, DE, VA, NC, SC, GA ], count: 3, once: true, }, /* 92 */ { title: "Nathan Hale, American Martyr", type: "american-event", event: "place_american_pc", count: 2, once: true, }, /* 93 */ { title: "John Glover's Marblehead Regiment", type: "american-event", event: "john_glovers_marblehead_regiment", }, /* 94 */ { title: "Pennsylvania and New Jersey Line Mutinies", type: "british-event", event: "pennsylvania_and_new_jersey_line_mutinies", }, /* 95 */ { title: "William Pitt Urges Peace Talks", type: "british-event", when: "before_french_alliance", event: "remove_american_pc", count: 2, reshuffle: "if_played", }, /* 96 */ { title: "Hortelez et Cie: Clandestine French and Spanish Aid", type: "american-event", when: "before_french_alliance", event: "advance_french_alliance", reshuffle: "if_discarded", count: 2, }, /* 97 */ { title: "Admiral Suffren Wins a Naval Victory", type: "american-event", when: "after_french_alliance", event: "remove_random_british_card", }, /* 98 */ { title: '"Mad" Anthony Wayne', type: "american-battle", }, /* 99 */ { title: "Declaration of Independence", type: "mandatory-event", event: "declaration_of_independence", once: true, reshuffle: "if_played", tournament: true, }, /* 100 */ { title: "Benedict Arnold's Treason Undermines the Patriot Cause", type: "british-battle", event: "remove_benedict_arnold", once: true, }, /* 101 */ { title: "Benjamin Franklin: Minister to France", type: "mandatory-event", event: "advance_french_alliance", count: 4, once: true, tournament: true, }, /* 102 */ { title: "Admiral Rodney Captures St. Eustatius", type: "british-event", event: "remove_random_american_card", when: "european_war_in_effect", once: true, }, /* 103 */ { title: "Thaddeus Kosciuszco Constructs Engineering Works", type: "american-battle", }, /* 104 */ { title: "Light Horse Harry Lee", type: "american-battle", }, /* 105 */ { title: "Morgan's Riflemen", type: "american-battle", }, /* 106 */ { title: "John Paul Jones' Shipping Raids", type: "american-event", event: "remove_random_british_card", }, /* 107 */ { title: "British Light Infantry", type: "british-battle", }, /* 108 */ { title: "Lord Sandwich Coastal Raids", type: "british-event", event: "lord_sandwich_coastal_raids", }, /* 109 */ { title: "Edward Bancroft, British Double Agent", type: "british-event", event: "remove_random_american_card", }, /* 110 */ { title: "Hessian Infantry Bayonet Charge", type: "british-battle", }, ] data = { BOXES, cards, general_index, generals, space_index, spaces, colony_name, colony_spaces, } })() if (typeof module === "object") module.exports = data