From 66040e5bf9a84c83685a18a7fda361c89340f8b6 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Sat, 1 Jan 2022 01:27:29 +0100 Subject: Washington's War: DO NOT PUBLISH. --- README | 1 + about.html | 9 + cards.html | 140 ++ cards.js | 328 +++++ cover.1x.jpg | Bin 0 -> 9402 bytes cover.2x.jpg | Bin 0 -> 29152 bytes cover.jpg | Bin 0 -> 76172 bytes create.html | 0 data.js | 344 +++++ favicon.png | Bin 0 -> 23201 bytes info/playbook.html | 1102 ++++++++++++++++ info/playbook01.jpg | Bin 0 -> 100097 bytes info/playbook02.jpg | Bin 0 -> 56811 bytes info/playbook03.jpg | Bin 0 -> 129186 bytes info/playbook04.jpg | Bin 0 -> 130937 bytes info/playbook05.jpg | Bin 0 -> 78154 bytes info/playbook06.jpg | Bin 0 -> 101484 bytes info/playbook07.jpg | Bin 0 -> 57438 bytes info/playbook08.jpg | Bin 0 -> 79919 bytes info/playbook09.jpg | Bin 0 -> 87334 bytes info/playbook10.jpg | Bin 0 -> 122190 bytes info/playbook11.jpg | Bin 0 -> 125702 bytes info/playbook12.jpg | Bin 0 -> 12112 bytes info/playbook13.jpg | Bin 0 -> 29518 bytes info/playbook14.jpg | Bin 0 -> 12112 bytes info/playbook15.jpg | Bin 0 -> 10836 bytes info/playbook16.jpg | Bin 0 -> 143372 bytes info/rulebook.html | 2177 ++++++++++++++++++++++++++++++++ info/rulebook01.jpg | Bin 0 -> 91935 bytes info/rulebook02.jpg | Bin 0 -> 71277 bytes info/rulebook03.jpg | Bin 0 -> 77762 bytes info/rulebook04.jpg | Bin 0 -> 29418 bytes info/rulebook05.jpg | Bin 0 -> 127408 bytes info/rulebook06.jpg | Bin 0 -> 50236 bytes info/rulebook07.jpg | Bin 0 -> 20061 bytes info/rulebook08.jpg | Bin 0 -> 17960 bytes info/rulebook09.jpg | Bin 0 -> 5239 bytes info/rulebook10.jpg | Bin 0 -> 42169 bytes info/rulebook11.jpg | Bin 0 -> 43132 bytes info/rulebook12.jpg | Bin 0 -> 9113 bytes info/rulebook13.jpg | Bin 0 -> 80697 bytes info/rulebook14.jpg | Bin 0 -> 50231 bytes info/rulebook15.jpg | Bin 0 -> 23446 bytes info/rulebook16.jpg | Bin 0 -> 7283 bytes info/rulebook17.jpg | Bin 0 -> 60251 bytes info/rulebook18.jpg | Bin 0 -> 46865 bytes info/rulebook19.jpg | Bin 0 -> 32480 bytes info/rulebook20.jpg | Bin 0 -> 123137 bytes info/rulebook21.jpg | Bin 0 -> 105225 bytes info/rulebook22.jpg | Bin 0 -> 58281 bytes info/rulebook23.jpg | Bin 0 -> 54187 bytes info/rulebook24.jpg | Bin 0 -> 12523 bytes play.css | 442 +++++++ play.html | 234 ++++ play.js | 539 ++++++++ rules.js | 3509 +++++++++++++++++++++++++++++++++++++++++++++++++++ title.sql | 3 + 57 files changed, 8828 insertions(+) create mode 100644 README create mode 100644 about.html create mode 100644 cards.html create mode 100644 cards.js create mode 100644 cover.1x.jpg create mode 100644 cover.2x.jpg create mode 100644 cover.jpg create mode 100644 create.html create mode 100644 data.js create mode 100644 favicon.png create mode 100644 info/playbook.html create mode 100644 info/playbook01.jpg create mode 100644 info/playbook02.jpg create mode 100644 info/playbook03.jpg create mode 100644 info/playbook04.jpg create mode 100644 info/playbook05.jpg create mode 100644 info/playbook06.jpg create mode 100644 info/playbook07.jpg create mode 100644 info/playbook08.jpg create mode 100644 info/playbook09.jpg create mode 100644 info/playbook10.jpg create mode 100644 info/playbook11.jpg create mode 100644 info/playbook12.jpg create mode 100644 info/playbook13.jpg create mode 100644 info/playbook14.jpg create mode 100644 info/playbook15.jpg create mode 100644 info/playbook16.jpg create mode 100644 info/rulebook.html create mode 100644 info/rulebook01.jpg create mode 100644 info/rulebook02.jpg create mode 100644 info/rulebook03.jpg create mode 100644 info/rulebook04.jpg create mode 100644 info/rulebook05.jpg create mode 100644 info/rulebook06.jpg create mode 100644 info/rulebook07.jpg create mode 100644 info/rulebook08.jpg create mode 100644 info/rulebook09.jpg create mode 100644 info/rulebook10.jpg create mode 100644 info/rulebook11.jpg create mode 100644 info/rulebook12.jpg create mode 100644 info/rulebook13.jpg create mode 100644 info/rulebook14.jpg create mode 100644 info/rulebook15.jpg create mode 100644 info/rulebook16.jpg create mode 100644 info/rulebook17.jpg create mode 100644 info/rulebook18.jpg create mode 100644 info/rulebook19.jpg create mode 100644 info/rulebook20.jpg create mode 100644 info/rulebook21.jpg create mode 100644 info/rulebook22.jpg create mode 100644 info/rulebook23.jpg create mode 100644 info/rulebook24.jpg create mode 100644 play.css create mode 100644 play.html create mode 100644 play.js create mode 100644 rules.js create mode 100644 title.sql diff --git a/README b/README new file mode 100644 index 0000000..7f34aac --- /dev/null +++ b/README @@ -0,0 +1 @@ +This is an unlicensed prototype! Do NOT publish! diff --git a/about.html b/about.html new file mode 100644 index 0000000..71b5eee --- /dev/null +++ b/about.html @@ -0,0 +1,9 @@ +

+Unlicensed game prototype! + +
+ +

diff --git a/cards.html b/cards.html new file mode 100644 index 0000000..e0cc0a0 --- /dev/null +++ b/cards.html @@ -0,0 +1,140 @@ + +Washington's War - Card List + + +
+ +
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cards.js b/cards.js new file mode 100644 index 0000000..cdcbd3b --- /dev/null +++ b/cards.js @@ -0,0 +1,328 @@ +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 = { + 1:CARD_3_OPS, 2:CARD_3_OPS, 3:CARD_3_OPS, 4:CARD_3_OPS, 5:CARD_3_OPS, + 6:CARD_3_OPS, 7:CARD_3_OPS, 8:CARD_3_OPS, 9:CARD_3_OPS, 10:CARD_3_OPS, + 11:CARD_3_OPS, 12:CARD_3_OPS, 13:CARD_3_OPS, 14:CARD_3_OPS, 15:CARD_3_OPS, + 16:CARD_3_OPS, 17:CARD_3_OPS, 18:CARD_3_OPS, 19:CARD_3_OPS, 20:CARD_3_OPS, + 21:CARD_3_OPS, 22:CARD_3_OPS, + + 23:CARD_2_OPS, 24:CARD_2_OPS, 25:CARD_2_OPS, 26:CARD_2_OPS, 27:CARD_2_OPS, + 28:CARD_2_OPS, 29:CARD_2_OPS, 30:CARD_2_OPS, 31:CARD_2_OPS, 32:CARD_2_OPS, + 33:CARD_2_OPS, 34:CARD_2_OPS, 35:CARD_2_OPS, 36:CARD_2_OPS, 37:CARD_2_OPS, + 38:CARD_2_OPS, 39:CARD_2_OPS, 40:CARD_2_OPS, 41:CARD_2_OPS, 42:CARD_2_OPS, + 43:CARD_2_OPS, 44:CARD_2_OPS, + + 45:CARD_1_OPS, 46:CARD_1_OPS, 47:CARD_1_OPS, 48:CARD_1_OPS, 49:CARD_1_OPS, + 50:CARD_1_OPS, 51:CARD_1_OPS, 52:CARD_1_OPS, 53:CARD_1_OPS, 54:CARD_1_OPS, + 55:CARD_1_OPS, 56:CARD_1_OPS, 57:CARD_1_OPS, 58:CARD_1_OPS, 59:CARD_1_OPS, + 60:CARD_1_OPS, 61:CARD_1_OPS, 62:CARD_1_OPS, 63:CARD_1_OPS, 64:CARD_1_OPS, + 65:CARD_1_OPS, 66: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: { + title: "North's Government Falls - The War Ends in 1779", + type: 'mandatory-event', + event: 'the_war_ends', + year: 1779 + }, + + 72: { + title: "North's Government Falls - The War Ends in 1780", + type: 'mandatory-event', + event: 'the_war_ends', + year: 1780 + }, + + 73: { + title: "North's Government Falls - The War Ends in 1781", + type: 'mandatory-event', + event: 'the_war_ends', + year: 1781 + }, + + 74: { + title: "North's Government Falls - The War Ends in 1782", + type: 'mandatory-event', + event: 'the_war_ends', + year: 1782 + }, + + 75: { + title: "North's Government Falls - 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', + }, +} + +if (typeof module == 'object') + module.exports = CARDS; diff --git a/cover.1x.jpg b/cover.1x.jpg new file mode 100644 index 0000000..75e8673 Binary files /dev/null and b/cover.1x.jpg differ diff --git a/cover.2x.jpg b/cover.2x.jpg new file mode 100644 index 0000000..31c1a36 Binary files /dev/null and b/cover.2x.jpg differ diff --git a/cover.jpg b/cover.jpg new file mode 100644 index 0000000..1dd99cc Binary files /dev/null and b/cover.jpg differ diff --git a/create.html b/create.html new file mode 100644 index 0000000..e69de29 diff --git a/data.js b/data.js new file mode 100644 index 0000000..8e692a5 --- /dev/null +++ b/data.js @@ -0,0 +1,344 @@ +"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 + } +} diff --git a/favicon.png b/favicon.png new file mode 100644 index 0000000..fc74b35 Binary files /dev/null and b/favicon.png differ diff --git a/info/playbook.html b/info/playbook.html new file mode 100644 index 0000000..2e5e291 --- /dev/null +++ b/info/playbook.html @@ -0,0 +1,1102 @@ + + + +Washington's War - Playbook + + + + +
+

© 2009 GMT Games, LLC

+

PLAYBOOK

+

T A B L E O F C O N T E N T S

+

1

+

Example of Play........................................................ 2

+

2

+

Player’s Notes......................................................... 12

+

3

+

Design Notes........................................................... 14

+

GMT Games, LLC

+

P.O. Box 1308 Hanford, CA 93292-1308

+

www.GMTGames.com

+

WW Playbook.indd 1

+

11/4/2009 11:59:48

+
+
+

Washington’s War Playbook

+

2

+

© 2009 GMT Games, LLC

+

I. Setup

+

Both sides set up their pieces as instructed in 4.0.

+

Next, the Americans place thirteen “Committees of Cor-

+

respondence” PC markers, one in each colony which does not

+

contain a British playing piece (Canada is not a colony for this

+

purpose): Savannah, GA; Camden, SC; Charlotte, NC; Alexan-

+

dria, VA; Baltimore, MD; Wilmington, DE; Bassett Town, PA;

+

New Brunswick, NJ; New York, NY; New Haven, CT; Newport,

+

RI; Falmouth, MA; and Norwich, NH.

+

Once the Americans finish placing their Committees of Cor-

+

respondence PC markers, the British player places two “For

+

the King” PC markers in any space which does not contain an

+

American Playing Piece and which is adjacent to a British PC

+

marker which was present on the map prior to this step of the

+

setup: Fort Niagara and Ticonderoga, NY are chosen. Note that

+

“For the King” PC markers may be placed in any colony except

+

MA, CT, NH, PA, or VA (see 4.0).

+

Lastly, the “Declaration of Independence” and “Baron von

+

Steuben Trains the Continental Army” event cards are removed

+

from the deck. The deck is shuffled and play is now ready to

+

begin.

+

II. 1775 Turn

+

Reinforcement Phase

+

The British player places three CUs into his reinforcement

+

box on the map.

+

Strategy Cards Phase

+

Both players are dealt a hand of seven cards.

+

The Americans draw a 3 OPS, a 2 OPS, two 1 OPS, “Joseph

+

Brant Leads an Iroquois Raid,” “Nathan Hale, American Mar-

+

tyr,” and “North’s Government Falls—The War Ends in 1780.”

+

The British Player draws a 2 OPS, a 3 OPS, a 1 OPS, a Minor

+

Campaign, “Mad Anthony Wayne,” “Thomas Paine Publishes

+

Pamphlets ‘Common Sense’ and the ‘American Crisis,’” and

+

“Josiah Martin Rallies North Carolina Loyalists.”

+

Strategy Phase

+

The British player has a Minor Campaign card but does not

+

wish to use it to go first on the opening turn so using his best poker

+

face, declines to go first. The Americans, wanting to solidify their

+

position early in the game, opt to go first.

+

American Card 1:

+

The Americans open with a 3 OPS card and use it to place

+

PC markers. Three PC markers are placed: one in Pittsburgh,

+

PA; one in Genesee, NY; and one in Saratoga, NY. This clever

+

placement effectively blocks the British from placing PC mark-

+

ers in these spaces and keeps them from expanding into New

+

York and Pennsylvania.

+

WASHINGTON’S WAR

+

EXAMPLE OF PLAY

+

Game design based on We The People: The American Revolution

+

from Avalon Hill. Used with permission.

+

WW Playbook.indd 2

+

11/4/2009 11:59:49

+
+
+

Washington’s War Playbook

+

3

+

© 2009 GMT Games, LLC

+

British Card 1:

+

Not to be undone, the British also play a 3 OPS card and use

+

it to place PC markers. Three PC markers are placed: The first

+

is placed in Oswego, NY. Note that the British cannot then

+

place a PC marker in Fort Stanwix even though it is adjacent

+

to Oswego since the PC marker in Oswego did not preexist this

+

card play. The second is placed in Richmond, VA. The third is

+

placed in Long Island, NY. This is permissible since all ports

+

are considered to be adjacent to one another for all purposes

+

for the British player—a reflection of the naval dominance

+

enjoyed by the Army of His Majesty.

+

American Card 2:

+

Out of 3 OPS card, the American now plays “Nathan Hale,

+

American Martyr” as an event. The event allows him to place

+

two PCs: one in Charlottesville and one in Lynch’s Ferry,

+

VA. Since this card may only be played as an event once per

+

game, it is now removed from the game and is not discarded

+

as other Strategy Cards.

+

British Card 2:

+

The British see their options begin to narrow. Hoping to create

+

some new opportunities in the south, the British use their 1

+

OPS card to bring Reinforcements into the game. All 3 CUs

+

from the Reinforcement Box are brought into Norfolk, VA. The

+

British player also chooses to bring General Cornwallis into the

+

same space. To remind the British player that he cannot play

+

any more cards this turn for reinforcements, the 1 OPS card

+

is placed into the British Reinforcement Card box on the map.

+

WW Playbook.indd 3

+

11/4/2009 11:59:50

+
+
+

Washington’s War Playbook

+

4

+

© 2009 GMT Games, LLC

+

American Card 3:

+

Seeing in the British move, a possible threat to Philadelphia,

+

the Americans counter with a reinforcement play of their own,

+

playing their 2 OPS card into the first American Reinforcement

+

Card box on the map. This play allows them to bring two CUs

+

and a General into any empty (neutral) space or a space with

+

an American PC marker. The American player chooses to

+

place both CUs and General Gates into Alexandria, VA. Note

+

that the Americans may play one more OPS card to bring on

+

reinforcements this turn.

+

British Card 3:

+

Not willing to have his purpose thwarted, the British player

+

plays a 2 OPS card and uses this to activate Cornwallis. Note

+

that he would not be able to activate General Howe or Car-

+

leton with such a card; rather, a 3 OPS card would be needed.

+

Cornwallis may now move with up to 5 CUs four spaces. He

+

takes all 3 CUs stacked in Norfolk, and marches to Alexandria

+

to engage General Gates before more troops can be raised in

+

Gates’ Army. Gates cannot intercept when Cornwallis enters

+

Richmond since Richmond contains a British PC marker.

+

Since the objective of Gates’ Army is to delay and block a

+

move on Philly, Gates will attempt to retreat before battle.

+

Only American Armies may intercept or retreat before battle.

+

To successfully retreat before battle, Gates will need to roll less

+

than or equal to his Agility rating. Unfortunately, his Agility

+

rating is only ‘1.’ The die is cast and a ‘4’ is rolled. Gates will

+

have to stand and fight.

+

Battle of Alexandria:

+

The British are the attackers and must declare any Battle Cards

+

(for a +2 drm) or discards of an event card (for a +1 drm). Wanting

+

to rid himself of having to discard the “Thomas Paine” event (with

+

the resultant threat of the American player picking that card up and

+

using it against him), the British player discards it in battle. When

+

discarded in this manner, the American player cannot pick it up.

+

The American player declines to play any Battle Events (he

+

has none) and declines to discard an event.

+

Next both players roll a die to determine their General’s Actual

+

Battle Rating. Essentially a dr of 1-3 gives the General only half

+

of his Battle Rating (rounded down); whereas a dr of 4-6 gives

+

the General his whole, printed Battle Rating. The British player

+

rolls a ‘2’ and the American rolls a ‘6.’ Cornwallis’ Battle Rat-

+

ing is halved from 4 to 2; Gates’ however, receives his whole,

+

printed Battle Rating of 2.

+

Next, the Die Roll Modifiers (drms) are totaled for each side.

+

The British get +3 (3 CUs), +2 (Cornwallis’ Battle Rating), +1

+

(Royal Navy—Alexandria is a port), +1 Regulars, +1 for Event

+

discard for a total of +8. The Americans get +2 (CUs), +2 (Gates’

+

Battle Rating), +1 (Virginia Militia—the Americans control more

+

spaces in Virginia than the British) for a total of +5.

+

WW Playbook.indd 4

+

11/4/2009 11:59:51

+
+
+

Washington’s War Playbook

+

5

+

© 2009 GMT Games, LLC

+

Now each player rolls a die. The Americans roll a ‘5’ which is

+

modified to a die roll of 10. The British roll a ‘2’ which is modi-

+

fied to a 10. The British modified roll is just enough to win the

+

battle, as ties go to the attacker.

+

Next, both sides determine combat losses. The loser (the

+

Americans) rolls a ‘3’ which results in a loss of a single CU (see

+

9.5). The winner (the British) rolls a die and check the table in

+

9.5. Since the losing General, Gates, has an Agility rating of ‘1,’

+

the British will only lose one CU on a die roll of 1-2. This time

+

the British roll a 5 and so avoid suffering any losses.

+

Now the losing General retreats. Since Gates was not attack-

+

ing, he can retreat to any adjacent space which does not contain

+

an enemy CU, PC, or the space from which the attacker moved

+

into battle. Gates retreats with 1 CU to Baltimore.

+

American Card 4:

+

The road to Philadelphia is open to the north and with several

+

cards left to play, the Americans are unwilling to risk having

+

the Congress dispersed by a British Army entering the space. To

+

cover the capital, the Americans play a 1 OPS card and activate

+

General Greene and 2 CUs. Using the American Mobility Ad-

+

vantage, Greene is able to march five spaces (though in so doing

+

is not permitted to either execute an overrun or enter into battle).

+

Greene marches from Newport to Hartford, to New Haven, to

+

New York, to New Brunswick, and finally to Philadelphia.

+

British Card 4:

+

Having discarded a card in battle, the British now realize that

+

they will not get the last card play of the turn. To avoid the

+

American’s picking up “Mad Anthony Wayne” in a discard and

+

using it against him, the British player plans to play that card

+

last. The British opt to discard “Josiah Martin Rallies North

+

Carolina Loyalists.” The event is playable but not especially

+

useful since the Americans only have one PC marker in NC

+

at the present. By discarding, he may remove an American

+

PC marker from a space adjacent to a British PC marker and

+

not occupied by American CUs, or the Continental Congress.

+

The British choose to remove the PC marker from Pittsburgh.

+

American Card 5:

+

The Americans really do not want the British to place a PC

+

marker in Pittsburgh. Reluctantly, they discard the “Joseph

+

Brant” event to place an American PC marker back into Pitts-

+

burgh—note that even for the Americans, the space receiving

+

a PC marker placement via an event discard must be adjacent

+

to an American PC marker. This, however, gives the British

+

an opportunity to pick up Joseph Brant by discarding an OPS

+

card of any value. Sadly for the British, they do not have such

+

an OPS card. Again, using his best poker face, the British

+

decline to pick up the event card. The American breathes a

+

sigh of relief.

+

British Card 5:

+

The British now play their Minor Campaign. Cornwallis is the

+

first General to Activate. Taking 3 CUs with him, Cornwallis

+

marches to Frederick Town, MD before marching into Balti-

+

more—his goal. He could march directly into Baltimore but

+

that would entail some risk: If he were to lose the battle with

+

Gates in Baltimore, he would be compelled to retreat back

+

to the space he entered Baltimore from—Alexandria. Since

+

Alexandria still contains an American PC marker, his Army

+

would be compelled to surrender! This, in turn would result

+

in the loss of the Regulars drm since 3 CUs would be lost in

+

one battle and the French Alliance marker would move 1 space

+

for American victory, and two more spaces for the loss of the

+

Regulars! Entering battle from Frederick Town is a much

+

safer move. Once again, Gates attempts Fabian tactics and

+

tries to retreat before battle. This time he luckily rolls a ‘1!’

+

He retreats to Wilmington, DE. Cornwallis must stop move-

+

ment since he entered a space containing enemy CUs and did

+

not overrun them.

+

WW Playbook.indd 5

+

11/4/2009 11:59:51

+
+
+

Washington’s War Playbook

+

6

+

© 2009 GMT Games, LLC

+

For the second activation of the Minor Campaign, the Brit-

+

ish activate General Carleton who marches with 2 CUs from

+

Quebec to Albany and stops.

+

American Card 6:

+

The Americans decide now is the best time to play their

+

“North’s Government Falls—The War Ends in 1780” card

+

which is a must-play event. The card is placed in the War Ends

+

box on the map and signifies that barring the play of another

+

“War Ends” card in the future, the game will end at the end

+

of the year 1780.

+

British Card 6:

+

For their last card (normally they would play seven cards,

+

but one card was discarded in battle and no substitute was

+

drawn) the British discard “Mad Anthony Wayne and use the

+

discard to remove the PC marker from Charlottesville, VA.

+

The Americans may opt to pick this card up by discarding a 2

+

OPS or 3 OPS card, but even if they’d had such a card in their

+

hand, this card would have no use since the Americans only

+

hold one final card. The Americans decline the opportunity.

+

American Card 7:

+

For their last card (1 OP) the Americans activate General

+

Washington and his Army of 5 CUs. Needing to go into Winter

+

Quarters (square or star-shaped spaces), the Americans decide

+

to kill two birds with one stone by marching Washington’s

+

Army to Albany. Since the British never intercept nor retreat

+

before battle, a battle will be fought:

+

Battle of Albany:

+

Neither side has any cards in their hand so no strategy cards

+

will be played or discarded for drms.

+

The Americans roll a ‘5’ and Washington receives his full

+

Battle Rating. British roll a ‘4’ and normally would receive

+

Carleton’s full Battle Rating, but the Battle Rating may never be

+

greater than the number of CUs in the Army—in this case 2—so

+

Carleton gets a Battle Rating of 2 for this battle. Had he rolled

+

a 1-3, his Battle Rating would have been ‘1’ (3 divided in half

+

and rounded down).

+

The Americans will receive a die roll modifier of +12: +5

+

(CUs), +5 (Washington’s Battle Rating), +2 (Winter Offensive—

+

battle with Washington on last card play of the turn). The British

+

will receive a die roll modifier of +6: +2 (CUs), +2 (Carleton’s

+

modified Battle Rating), +1 (Regulars), +1 (NY Militia—British

+

have more PC markers in NY than the Americans). The Ameri-

+

cans roll a ‘2’ which is modified to 14. The British roll a ‘6’ which

+

is modified to 11 but even this is not enough. The Americans win.

+

Carleton rolls a ‘2’ for losses and only loses a single CU.

+

Washington rolls a ‘2’ for his loss check and after comparing

+

Carleton’s Agility rating to the table in 9.5, finds he loses a CU

+

as well—a Pyrrhic victory.

+

Carleton retreats with 1 CU to Fort Stanwix.

+

Since the Americans won a victory, the French Alliance Marker

+

is moved one space forward on the French Alliance track so some

+

good was accomplished by the Battle of Albany.

+

Now we move along to the Winter Attrition Phase.

+

WW Playbook.indd 6

+

11/4/2009 11:59:52

+
+
+

Washington’s War Playbook

+

7

+

© 2009 GMT Games, LLC

+

Winter Attrition Phase:

+

Though the order does not matter, and indeed both players can

+

resolve winter attrition simultaneously, I prefer to check for and

+

resolve winter attrition starting with the British.

+

Generals Carleton, Cornwallis, and Howe are all located in

+

square spaces north of the Winter Attrition line which signifies

+

that they are in Winter Quarters (11.0). As such, they do not

+

suffer any losses.

+

The single British CU in De-

+

troit would not be vulnerable to

+

winter attrition if a British Gen-

+

eral was stacked with him. But

+

since he is un-led, he is vulnera-

+

ble to desertion (11.1). A single

+

die roll determines his fate. On a

+

1-3 he remains; on a 4-6 he is re-

+

moved. The die roll is a ‘1’

+

which removes him.

+

The Americans are handled differently than the British. All

+

American Armies and CUs are vulnerable to winter attrition

+

anywhere on the map with the exception of 5 CUs led by Wash-

+

ington—the Continental Army—and an army of 5 French CUs

+

(but only if they are not mixed with any American CUs) led by

+

any American General (Rochambeau is considered an American

+

General for all purposes). As with the British, single, un-led CUs

+

are vulnerable to desertion and must dice for their fate.

+

Generals Greene and Gates as well as the un-led two CUs in

+

Charleston are vulnerable to Winter Attrition. Washington’s Army

+

is winter quartered in Albany. CUs subject to winter attrition lose

+

half of their strength with fractions rounded down. Greene has

+

2 CUs so his army is reduced to 1 CU. The Charleston CUs are

+

likewise reduced to 1 CU. Gates has only 1 CU in his army and

+

as such, winter attrition has no effect on his Army.

+

The French Navy Phase is skipped since the French Alliance

+

has not come into effect and the French Navy is not yet in play

+

(see 12.0).

+

So we move along to the Political Control Phase.

+

Political Control Phase (see 10.2)

+

The Continental Congress was not dispersed. Had it been, it

+

would be placed in any space in the Thirteen Colonies (Canada

+

is not one of the Thirteen Colonies) that contains an American

+

PC marker but not a British playing piece. Dispersal and replace-

+

ment is the ONLY way the Continental Congress can be moved.

+

Next, each player places a PC marker in an uncontrolled space

+

that contains one of his Armies or flips a PC marker to friendly

+

control in any space containing one of his Armies.

+

Though this can be done simultaneously, I again prefer to do

+

the British first: Carleton’s Army in Fort Stanwix, NY places a

+

PC marker in that space. Cornwallis’ Army in Baltimore flips the

+

American PC marker in that space to British control.

+

Only Washington’s Army in Albany is in a position to place a

+

PC marker and so an American PC marker is placed in Albany

+

to signify American control of that space.

+

Next, both players check to see if any of their PC markers

+

are isolated. Please read section 10.3 of the rules for a thorough

+

explanation of this procedure. At this point, as is common on

+

the first turn, there are no isolated PC markers for either side.

+

We now come to the End Phase.

+

End Phase

+

Had the French Alliance been triggered, the French Alliance

+

marker would be flipped and placed on the turn track to serve

+

as a reminder that it is during the end phase of that turn that

+

European War breaks out. The effect of European War is that 2

+

British CUs are removed from the map and a number of Event

+

Cards become playable as events.

+

Presently the French Alliance has not yet come into play. This

+

being the case we check to see if the game ends. The current

+

“North’s Government Falls—War Ends” card in the War Ends

+

box is the 1780 card. If the current game year was 1780 or later

+

the game would end and a winner be determined. Again, this is

+

not the case so the game continues.

+

All the cards in the Reinforcement Card boxes on the map are

+

discarded and the game continues to the next turn, 1776.

+

III. 1776

+

Reinforcement Phase

+

The game turn is now 1776. As indicated on the turn track on

+

the map, eight British CUs are placed into the British Reinforce-

+

ment box on the map.

+

WW Playbook.indd 7

+

11/4/2009 11:59:53

+
+
+

Washington’s War Playbook

+

8

+

© 2009 GMT Games, LLC

+

Strategy Cards Phase

+

In the 1776 turn, both the “Declaration of Independence” and

+

“Baron von Steuben Trains the Continental Army” event cards

+

are shuffled into the draw pile (note that the cards in the discard

+

pile are not shuffled into the draw pile at this time). Both players

+

are then dealt a hand of seven cards.

+

The Americans draw two 3 OPS, two 2 OPS, a 1 OPS, “Henry

+

Knox Continental Artillery Commander” and “Lord Sandwich

+

Coastal Raids.”

+

The British draw two 2 OPS, two 3 OPS, a Minor Campaign,

+

“Lord North Offers a Royal Amnesty,” and “North’s Govern-

+

ment Falls—The War Ends in 1782.”

+

Strategy Phase:

+

The British player has once again draws a Minor Campaign

+

card and wanting to use it to put pressure on Philadelphia and

+

maintain the initiative, uses it to go first.

+

British Card 1:

+

The Minor Campaign event allows the British player to activate

+

two Generals. Alternately, one action can be used to perform a

+

“Landing Party” action (see 7.2.B). The British player chooses

+

to use the Landing Party capability to flip the PC marker in

+

New York, NY. The second action is used to activate General

+

Howe and his Army. All 5 CUs under Howe’s command con-

+

duct a naval move from Boston to New York. They could get

+

there by marching overland. I chose to use naval movement

+

to illustrate the deadly capability of Campaign events in the

+

hands of the British.

+

American Card 1:

+

Howe’s Army in New York poses a deadly threat to Philadel-

+

phia. That being the case, the American move is a no-brainer:

+

a 2 OPS card is played to activate Washington. Washington

+

and his army of 4 CUs march from Albany to Philadelphia.

+

Since only one General may end a move in a space, General

+

Greene is displaced to the American Leader Reinforcement

+

box on the map. Washington’s Army absorbs Greene’s 1 CU

+

thus bringing his Army back up to full-strength.

+

British Card 2:

+

Wanting to press the issue, the British play a 3 OPS card to

+

activate Howe’s Army in New York. Howe and all 5 CUs

+

march from New York to Morristown, NJ then to Reading, PA

+

before entering Philadelphia for battle. Washington could try

+

and retreat before battle but if successful that would result in

+

the Congress being dispersed. If the Congress is dispersed, the

+

American player cannot play OPS cards to place PC markers

+

or discard event cards to place PC markers for the duration

+

of the turn.

+

Battle of Philadelphia:

+

The British don’t have any Battle Events and decline to discard

+

an event card. The Americans, however, opt to play “Henry Knox

+

Continental Artillery Commander” which will provide a +2 drm

+

and grant the American a card draw after the British player’s turn.

+

Both players dice for their battle ratings. Howe rolls a “6” and

+

Washington rolls a “4.” Washington gets his full, printed Battle

+

Rating of +5; Howe also gets a Battle Rating drm of +5 but not

+

his full, printed Battle Rating since the Battle Rating drm cannot

+

exceed the General’s CUs (Howe can only get a +6 in a defensive

+

battle when stacked with 6+ CUs).

+

Both players’ drms are totaled. The British get +11: +5 (CUs),

+

+5 (Battle Rating), +1 (Regulars). Note that the British do not

+

get the British Navy drm since the Battle is in a fortified port

+

which is not controlled by the British. The Americans get +13:

+

+5 (CUs), +5 (Battle Rating), +1 (PA Militia), +2 (Battle Card).

+

The British roll a ‘5’ which is modified to ’16.’ The Americans

+

roll a ‘4’ which is modified to ’17.’ The British lose the battle;

+

Philadelphia is saved!

+

WW Playbook.indd 8

+

11/4/2009 11:59:53

+
+
+

Washington’s War Playbook

+

9

+

© 2009 GMT Games, LLC

+

Howe rolls for losses and groans as he rolls a ‘6.’ This results

+

in the loss of 3 CUs as well as the loss of the Regulars drm for

+

the remainder of the game. Washington rolls a ‘3’ which when

+

compared to Howe’s Agility Rating, results in the loss of a CU.

+

But the big effect of the battle takes place on the French Al-

+

liance track. The American victory moves the track one space.

+

The loss of the British regulars moves the track two spaces! The

+

French Alliance Marker is on space ‘4.’ The danger of French

+

intervention is now very real. The play of “Benjamin Franklin,

+

Minister to France” would move the French Alliance marker

+

four spaces. Once into space ‘9’ on the track, the French enter

+

the game and give the Americans a much-needed boost.

+

Howe retreats back to Reading, PA.

+

As per the Battle Event played, the American player now

+

draws a card from the draw pile. His draw is none other than the

+

“Declaration of Independence!”

+

American Card 2:

+

Figuring the present to be

+

an opportune time to play it,

+

the Americans play “Declara-

+

tion of Independence.” As per

+

the event text, one PC marker

+

is placed in one empty space

+

in each of the 13 colonies: St.

+

Mary’s, GA; Fort Prince

+

George, SC; Salem, NC;

+

Abingdon, VA; Frederick

+

Town, MD; York, PA; Mon-

+

mouth, NJ; Westchester, NY;

+

Hartford, CT; Springfield,

+

MA; and Battleboro, NH.

+

Since this event can only be

+

played as an event and the

+

event can only be placed once per game, the card is removed

+

from the game and is not placed in the discard pile, and the deck

+

will be shuffled at the end of the turn.

+

British Card 3:

+

The British, feeling boxed in by American PC markers, at-

+

tempt to regain the initiative by playing “Lord North Offers

+

a Royal Amnesty.” As per the event text, four American PC

+

markers are removed: Charlotte, NC; Camden, SC; Alexandria,

+

VA; and Frederick Town, MD. Since this card also stipulates

+

that it may only be played as an event once per turn, it too is

+

removed from the game.

+

American Card 3:

+

The Americans play a 3 OPS card to place three PC markers

+

in Charlotte, NC; Camden, SC; and Frederick Town, MD.

+

British Card 4:

+

The British play a 2 OPS card to place two PC markers in

+

Charlottesville, VA and Morristown, NJ.

+

American Card 4:

+

The American play a 2 OPS card to place two PC markers in

+

Fincastle, VA and Wyoming Valley, PA.

+

British Card 5:

+

Boxed in, the British play “North’s Government Falls—The

+

War Ends in 1782.” The “North’s Government Falls—The War

+

Ends in 1780” card in the War Ends box is discarded; “North’s

+

Government Falls—The War Ends in 1782” is placed in the

+

War Ends box.

+

American Card 5:

+

The Americans play a 2 OPS card into the first American Re-

+

inforcement box on the map. Two CUs are placed in Augusta,

+

GA. Lafayette is taken from the American Leader Reinforce-

+

ments box and placed with the reinforcements in Augusta, GA.

+

WW Playbook.indd 9

+

11/4/2009 11:59:54

+
+
+

Washington’s War Playbook

+

10

+

© 2009 GMT Games, LLC

+

British Card 6:

+

The British, not liking Howe’s exposed position, opt to play

+

their last 3 OPS card to place him into Winter Quarters by

+

moving him and all 3 CUs with him to Hartford, CT.

+

American Card 6:

+

The Americans discard “Lord Sandwich Coastal Raids” to

+

place a PC marker in Concord, NH. The British, despite want-

+

ing to bring Reinforcements into the game, opt to discard their

+

last OPS card to bring the “Lord Sandwich Coastal Raids into

+

his hand.

+

British Card 7:

+

The British now play “Lord Sandwich Coastal Raids” as an

+

event to flip the PC marker in Savannah, GA.

+

American Card 7:

+

The Americans use their final 3 OPS card to place three PC

+

markers into Wake (Raleigh), NC; Cheraw, SC; and George-

+

town, SC.

+

Now we move along to the Winter Attrition Phase.

+

Winter Attrition Phase

+

All of the British are in Winter Quarters spaces. Washington’s

+

Army is in winter quarters in Philadelphia (star-shaped spaces

+

are also winter quarters spaces). Gates’ Army only has 1 CU so

+

he does not suffer any ill effect. Lafayette’s small, 2CU Army

+

in Georgia is reduced to 1CU. The lone CU in Charleston, SC

+

must dice for his fate. The roll is a ‘5’ which means he stays on

+

the map and does not desert.

+

Again, the French Navy Phase is skipped since the French

+

Alliance has not come into effect and the French Navy is not

+

yet in play (see 12.0).

+

Again, we move along to the Political Control Phase.

+

Political Control Phase (see 10.2)

+

The Continental Congress was not dispersed so we can again

+

skip the Continental Congress placement step.

+

As in the previous turn, each player places a PC marker in

+

an uncontrolled space that contains one of his Armies or flips

+

a PC marker to friendly control in any space containing one of

+

his Armies.

+

Howe’s Army in Hartford, CT flips the PC marker in that space.

+

Lafayette’s Army places a PC marker in Augusta, GA.

+

Next, both players check to see if any of their PC markers

+

are isolated. Unlike the previous turn, there are a number of PC

+

markers which are isolated. Isolated American PC markers are

+

removed first—thus, it is possible that such removal may cause

+

isolated British PC markers to no longer be isolated.

+

The American PC marker in St. Mary’s GA is isolated since

+

it cannot trace to an empty space, or an American/French CU,

+

WW Playbook.indd 10

+

11/4/2009 11:59:55

+
+
+

Washington’s War Playbook

+

11

+

© 2009 GMT Games, LLC

+

General, or the Continental Congress; the British PC marker in

+

Savannah, GA blocks the American PC marker in St. Mary’s

+

from tracing to Lafayette in Augusta or the CU in Charleston.

+

But that’s not the real damage. The real damage is up north. The

+

Americans made a huge mistake on their last card play, not real-

+

izing that all the PC markers north of the Morristown – New York

+

line are isolated! Yes, that’s right, excepting Genesee, NY, every

+

American PC marker in New York, Connecticut, Massachusetts,

+

and New Hampshire is isolated! Had the Americans not placed a

+

PC marker into Concord, NH, then all these isolated PC markers

+

would have been able to trace to that empty space in Concord.

+

Alternately, the Americans could have used their last OPS card to

+

bring reinforcements into any one of those American-controlled

+

spaces to avoid isolation en masse.

+

The Americans are not the only ones with isolated PCs. The

+

British PCs in Ninety Six, SC and Gilbert Town, NC are both

+

isolated.

+

All isolated PC markers are removed. The effect of this is to

+

open up the game considerably. Fortunately for the Americans,

+

the rules regarding PC marker placement will enable them

+

to regain some ground in the next turn. The ability to choose

+

whether to go first will also serve them well to try and recover

+

some ground.

+

We now come to the End Phase.

+

End Phase

+

Again, the French Alliance has not yet come into play. This

+

being the case we check to see if the game ends. The current

+

“North’s Government Falls—War Ends” card in the War Ends

+

box is the 1782 card. If the current game year was 1782 or later

+

the game would end and a winner would be determined. Again,

+

this is not the case so the game continues.

+

All the cards in the Reinforcement Card boxes on the map are

+

discarded and the game continues to the next turn, 1777.

+

WW Playbook.indd 11

+

11/4/2009 11:59:56

+
+
+

Washington’s War Playbook

+

12

+

© 2009 GMT Games, LLC

+

War and Politics

+

Like the American Revolution that the game models, Washing-

+

ton’s War, is both a political conflict as well as a military conflict.

+

In my opinion, the biggest challenge that players will face in this

+

game is balancing political initiatives with military action. If too

+

much emphasis is placed on one dimension to the neglect of the

+

other, you will lose the game. Before rushing your redcoats or

+

patriots into a pitched battle, you’d better have a greater purpose

+

than “killing the enemy.” Conversely, if all you do is place PC

+

markers, sooner or later you will either lack spaces to place PC

+

markers, or you will find yourself the victim of mass isolation

+

and removal of PC markers.

+

The successful player is the one who uses his military forces

+

(his armies) in coordination with his political initiatives to gain

+

control of as many colonies as possible while at the same time

+

preventing his opponent from doing the same.

+

Play To Your Strengths

+

Washington’s War is a game of asymmetrical warfare. That

+

is to say the British will need to be played completely differ-

+

ently from how the American side will be played. Each side has

+

certain intrinsic strengths. In any such asymmetrical conflict, it

+

is essential that you play to your strengths and try to force your

+

opponent to “play your game.”

+

The British strengths are pretty obvious at the start of the game:

+

• They control the sea and may use Naval Movement to

+

move from port-to-port. The most extreme example of

+

this incredible mobility is a British Naval move from

+

Montreal or Quebec to St. Mary’s, Georgia or vice-

+

versa.

+

• British-controlled ports cannot be isolated.

+

• For the British, all ports are considered to be adjacent

+

to each other for all purposes. This enables the Brit-

+

ish to place PC markers into a neutral port anywhere

+

on the map so long as they control at least one port

+

of their own. Conversely, they may remove American

+

PC markers from un-garrisoned ports by discarding an

+

Event Card.

+

• British Armies in un-blockaded ports (whether at-

+

tacking or defending) and friendly-controlled fortified

+

ports (like Charleston), gain a +1 drm in battle for the

+

presence of the Royal Navy.

+

• The British may use Landing Parties with the play of

+

a Campaign Card to suddenly descend upon an en-

+

emy controlled but un-garrisoned port with an entire

+

army—ala Long Island, 1776. The effect of this and

+

the above two points is that it is very, very difficult

+

for the Americans to exercise anything resembling firm

+

control over the coast.

+

• The British Army is composed of trained regular

+

troops at the start of the game. This gives the British a

+

+1 DRM in any battle until this advantage is lost due

+

to high casualties in a defeat or the play of the Von

+

Steuben event. Winning battles does much to keep the

+

French from entering the war and changing the com-

+

plexion of the game.

+

• On several game turns, the British get reinforcements

+

in large quantities. This allows a sudden concentration

+

of enemy troops to appear in a friendly or neutral port.

+

• British Armies may enter Winter Quarters to avoid any

+

Winter Attrition. This allows the British to maintain

+

large armies in the field, something the Americans,

+

with the exception of Washington and perhaps Ro-

+

chambeau simply cannot do.

+

• Lastly, the British Generals, though fewer in number

+

than the Americans, are in all but one case (Burgoyne),

+

at the least equal, and usually superior in battle to any

+

American (or French) General.

+

The British Player will want to harness these advantages to

+

master his opponent.

+

The American advantages seem slender to the inexperienced

+

eye, but in fact, they can be quite formidable:

+

• They may exercise rapid marches overland. Provid-

+

ed they don’t conduct an overrun or initiate a battle,

+

American armies may move five spaces instead of the

+

usual four spaces. Furthermore, the John Glover Event

+

allows an American army to move six spaces, and en-

+

gage in Battle. This capability can be used to outma-

+

neuver the British inland or to counter a sudden naval

+

descent upon the coast.

+

• The Americans have more Generals than the Brit-

+

ish (7 to the British 5; 8 to 5 when the French enter

+

the game). This allows the Americans to field more

+

(though smaller) Armies. If well handled, many very

+

small armies, like a horde of ants, can bring down the

+

British elephant.

+

WASHINGTON’S WAR

+

PLAYER’S NOTES

+

by Joel Toppen

+

WW Playbook.indd 12

+

11/4/2009 11:59:56

+
+
+

Washington’s War Playbook

+

13

+

© 2009 GMT Games, LLC

+

• The American Generals have low Strategy Ratings.

+

This allows them to be moved with the play of any

+

OPS card. Only Gates, Lincoln, and Rochambeau have

+

Strategy Ratings of “two.” No American General has a

+

Strategy Rating of “three.”

+

• American Armies may intercept moving British

+

Armies. This is something the British cannot do. Even

+

if the Americans lose the impending battle, the moving

+

British Army must stop and end its move.

+

• American Armies may retreat before battle—but not if

+

they intercept. Washington and Greene are especially

+

adept at this technique. Withdrawing on a die roll of

+

1-4, they have a 66% chance of success every time a

+

British Army engages them. If successful, the British

+

Army cannot pursue and must stop movement. What

+

this, and the above points mean is the Americans are

+

very, very maneuverable. Like a slippery fish, they are

+

hard to fix and destroy. Their constant presence can be

+

a real pest to the British. If you can keep the British

+

chasing ghosts as it were, you will succeed in making

+

the British play your game. Remember, it only takes an

+

Army of one Combat Unit to flip a PC marker at the

+

end of a turn or establish a blocking position to isolate

+

one or more British PC markers.

+

• The Americans have a potential ally in the French. The

+

British must avoid losing battles lest the French Alli-

+

ance come into being. The establishment of a French

+

Alliance will change the complexion of the game in

+

that the French will be able to blockade ports with their

+

navy—thus greatly hindering the British naval advan-

+

tages noted above. The French Alliance will also bring

+

in a capable General (Rochambeau) and five Combat

+

Units of French Troops which, when kept separate

+

from Americans, may go into Winter Quarters and

+

pose a real threat to the British Armies.

+

• The Americans can play two cards each turn to bring

+

in reinforcements. The Americans will never run out of

+

reinforcements (they don’t have a finite ‘pool’ of rein-

+

forcements like the British) while the British reinforce-

+

ment pool has the very real potential to run dry. If the

+

game is going long and the British reinforcement pool

+

is running dry, the Americans can begin to try to wear

+

down the remaining redcoats by repeatedly attacking

+

them and dwindling their numbers.

+

• Lastly, unless the British preempt with the play of a

+

Campaign Event, the American player will be able to

+

decide whether to go first or second in the turn. By

+

going first, the player will have the initiative. But go-

+

ing last has some very powerful benefits in that he will

+

be able make a move to which his opponent cannot

+

respond.

+

The American player will want to play to these strengths to

+

gain success against British combinations.

+

Some General Maxims

+

“For Every Action…”

+

Maintain the strategic initiative. That is to say, when possible,

+

make card plays which force your opponent to respond to your

+

play. If your opponent tries this against you, if you can, raise

+

the stakes and play a card that forces him to choose whether to

+

continue on his present course or respond to your play.

+

“He Who Laughs Last, Laughs Best.”

+

Going last is almost always best. Before deciding to go first,

+

you’d better have a very good reason for it. Going last with a

+

Campaign event has the potential to isolate and remove a number

+

of enemy PCs.

+

“When in Doubt, Isolate.”

+

Isolating enemy PCs is a pow-

+

erful tactic since isolated PCs are

+

removed at the end of a turn. If

+

you can isolate large numbers of

+

enemy PCs, you can turn the tide

+

of a game completely around. So

+

when you are unsure of what you

+

should be doing, strive to isolate

+

enemy PCs.

+

“A Colony is a Colony.”

+

In terms of victory conditions,

+

Delaware and Rhode Island are

+

every bit as valuable as New

+

York and Virginia. In fact, they

+

might be even more valuable

+

since they each consist of one

+

space and that one space equates

+

to one Colony towards your

+

victory conditions. So, as the

+

prophet said, “Don’t despise the

+

day of small things.”

+

“One Man’s Junk is Another Man’s Treasure.”

+

Be careful what you throw away. In discarding an enemy Event

+

Card, be aware that your opponent could bring that card into his

+

hand and use it against you. If you time things carefully, however,

+

you can mitigate against potential calamity.

+

“I’d rather be Fishing.”

+

A Battle Event has one very lovely bonus: it allows the player

+

to draw a replacement card. If you’ve got a weak hand, sometimes

+

it’s worth fighting a battle so that you can use this card to draw

+

another card. Of course it is entirely possible that the card drawn

+

puts you in a worse position. But I’ve also drawn a card in this

+

way that really helped me.

+

Lastly, have fun!

+

Joel Toppen

+

WW Playbook.indd 13

+

11/4/2009 11:59:57

+
+
+

Washington’s War Playbook

+

14

+

© 2009 GMT Games, LLC

+

Fifteen-Year CDG Journey

+

When I designed We The People (hereafter WTP) back in the

+

mid-nineties I was intent on showing the American Revolution

+

as a political-military struggle. To support this goal I wanted a

+

design that focused on uncertainty and its impact on having and

+

maintaining the strategic initiative. Somehow I hit on the Card

+

Driven Game (hereafter CDG) mechanic whereby the player

+

had to choose between political or military options.

+

The big surprise for me was how quickly the CDG mechanic

+

caught on and spawned a new games genre with over twenty

+

designs in the catalog. Early on I decided to forgo applying for a

+

patent and instead chose to open the concept to the hobby. I have

+

never regretted this decision as it opened the concept to evolution

+

and expansion. Toward that end I would like to acknowledge

+

the talents of Mark Simonitch (Hannibal), Ted Raicer (Paths

+

of Glory), Mark McLaughlin (The Napoleonic Wars), Ananda

+

Gupta (Twilight Struggle), Jason Mathews (1960: The Making

+

of A President), Charlie Vasey (Unhappy King Charles), and Ed

+

Beach (Here I Stand) to name a few who have made significant

+

contributions to the CDG mechanic. So, here I stand, fifteen years

+

later with the original in the series about to be re-published in a

+

significantly transformed design.

+

We the People: The Good, the Bad

+

and the Ugly

+

The difficulty for me with the We The People design was ap-

+

preciating how much more complex the cards made a wargame

+

that was already grappling with the interactions of rules, pieces

+

and board position. Even a simple wargame like WTP was dif-

+

ficult to playtest as each play through seemed to create another

+

unique set of positions and narrative. Even more surprising was

+

how the CDG genre reinvigorated competitive play. The combi-

+

nation of these two features created a tension between achieving

+

play balance in a more complex mathematical design.

+

When confronted with the opportunity to re-publish the WTP

+

design over a decade after the last copies were sold retail I had

+

to choose between a straight re-print or a transformed design.

+

Over the last fifteen years and two additional CDG designs under

+

my belt (For The People and Empire of the Sun) I had learned

+

what I did and did not like about WTP. The good was how the

+

game viewed the war as a political struggle for the hearts and

+

minds of the American populace in a fast playing format. Charlie

+

Vasey and I had an interesting conversation in London many

+

moons back while drinking some excellent wine. Due to the

+

second bottle of wine I do not remember the entire conversation,

+

but I do remember that we discussed and agreed that the WTP

+

singularity of card use, event or operations, was a good model

+

for pre-19th century warfare, which I note he maintained in his

+

recently published Unhappy King Charles CDG.

+

Another CDG distinction that has arisen over the last fifteen

+

years was the issue of unscripted single deck designs versus

+

scripted temporally segregated deck designs. I prefer the more

+

open narrative that is enabled by a less scripted environment

+

and the broader range of plausible historical narratives thereby

+

created. There is no correct answer, but I remain committed to a

+

less scripted CDG environment in my designs and this held true

+

in Washington’s War (hereafter WW).

+

The things that I would rate as bad with WTP were the oc-

+

casional hand where most of the player’s cards were enemy

+

events. This problem has been handled in different ways by

+

other CDGs and we now have another option added to the genre.

+

I combined the Washington’s War discard mechanic with my

+

desire to enhance the guerrilla war dimension of the design, but

+

more on that later.

+

The ugly part of the WTP design was the battle cards. Many

+

people lamented the fact that Washington’s War eliminates this

+

WTP feature. For me it was a good idea with a flawed imple-

+

mentation. What I did not realize fifteen years ago was that the

+

battle outcomes that I wanted to occur most often (e.g., Frontal

+

Assault) had to have the least number of copies in the deck and

+

vice a versa for more rare outcomes (e.g., Double Envelop-

+

ment). Unfortunately the original version of the battle deck is

+

constructed in the opposite, which is a bit counter-intuitive. One

+

thing that I was going to do was eliminate the battle deck. Once

+

that decision was made then I had set my foot on the path of a

+

transformed design vice a straight re-print.

+

The new battle system attempts to hew closely to the concepts

+

of the original battle card system. One of the unintended benefits

+

of the new dice system is it significantly reduced playing time.

+

If you think about it there is on average two battles per turn in

+

WTP. Most games go for 7 turns or so, resulting in 14 battles per

+

game. It takes at least 5 minutes to shuffle the battle cards, deal

+

them out, and then play out the battle. This adds up to almost

+

an hour of battle adjudication playtime. Not that the battle cards

+

were not fun, but in today’s ‘Euro’ focused gaming environment,

+

Washington’s War now takes about 90 minutes to play with

+

experienced players and no more than two hours unless you are

+

really dragging things out. This makes WW a real option when

+

time is short or you are at a convention and looking for a fast

+

playing game. The new dice system is also very Internet friendly.

+

WASHINGTON’S WAR

+

DESIGN NOTES

+

by Mark Herman

+

WW Playbook.indd 14

+

11/4/2009 11:59:57

+
+
+

Washington’s War Playbook

+

15

+

© 2009 GMT Games, LLC

+

Strategic Asymmetry

+

If there was a theme that I wanted to enhance in WW vice

+

WTP it was to increase the level of historical asymmetry.

+

I wanted the design to better reflect the competing sides’

+

relative strengths and weaknesses. This would inevitably

+

increase the WTP experience whereby the path to victory for

+

the two sides is different. The new asymmetrical emphasis

+

fell into three areas: enhanced Guerrilla warfare, the diffi-

+

culties of maintaining American military power, and British

+

Naval superiority.

+

The original WTP GO mechanic was very successful in

+

portraying the key struggle for the hearts and minds of the

+

American populace as a parallel struggle to the conventional

+

war of army maneuver. The new discard mechanic was created

+

to kill two birds with one rule. The ability to discard event

+

cards to place a PC marker solved the ‘dead’ card phenomena

+

of WTP, while adding more resources to the guerrilla war. The

+

‘remove’ discard option introduced the ability for the shadow

+

guerrilla forces, as represented by the PC markers, to launch

+

limited offensive operations where enemy conventional forces

+

were absent. The side benefit of this ‘remove’ option was it

+

neutralized one of the downsides of the GO mechanic whereby

+

losing your last ‘liberty’ had a remedy whereby a surrounded

+

group of PC markers could eliminate an unsupported enemy

+

PC creating an uncontrolled space.

+

One of the things that was absent from WTP was the histori-

+

cal American conventional force retention challenge. Prudent

+

maneuver in WTP could ameliorate or avoid winter attrition

+

effects. In a well played WTP game the Americans rarely suf-

+

fered a shortage of soldiers, which was a regular feature of the

+

historical experience. The new rule whereby all American forces

+

melt away during the winter attrition phase forces the American

+

player to continuously put resources into recruitment. This new

+

WW design feature also allowed me to add additional weight

+

to the unwritten Continental Army rule that is centered on his

+

Excellency, George Washington.

+

I hope that these next few sentences are not viewed as

+

politically incorrect, but I think something has to be said

+

for not mutilating historical facts on the altar of political

+

correctness. Slavery has always been a morally disgusting

+

practice that unfortunately still persists into the present day.

+

Many of our founding fathers were slave owners and it was

+

their failings as people and politicians to rectify this wrong

+

that led to my second CDG For the People. What this says

+

about our founding fathers is they were creatures of their time

+

and unable to take more than the first step on the path to true

+

national freedom. I think that Shakespeare was correct when

+

Marc Anthony states during his eulogy of Caesar, “The evil

+

that men do lives after them; the good is oft interred with their

+

bones.” What has been lost due to their collective sin of fail-

+

ing to end slavery was their enormous positive impact on the

+

world and the first amongst equals was George Washington. It

+

is my view that Washington was truly the father of the United

+

States of America. We have to find a balance in our history

+

textbooks where his failings regarding slavery are balanced

+

by his significant impact on the character and values of the

+

new Republic.

+

In a recent visit to the French War Museum in Paris, I re-

+

discovered the room off of one of the main galleries, which is

+

devoted to the French experience in the American Revolution,

+

but feels like a shrine to Washington. The room has a central

+

focus on his Excellency and there are many rare portraits of

+

our first Commander-in-Chief. The Washington exception to the

+

new winter attrition rules creates a stronger focus on the role of

+

the Continental Army as the premier American force. This bal-

+

ance of a conventional force supported by seasonal local forces

+

strikes the right historical note when playing the American side.

+

More for play balance than history, I have significantly reduced

+

the impact of losing the Continental army, but even with this

+

change the American player will rarely survive Washington’s

+

capture in a competitive game.

+

The last enhancement was in increasing the operational im-

+

pact of the British navy. I must tip my hat to the playtesters for

+

this one. I was reasonably happy with the WTP naval rules, but

+

the drumbeat of the playtesters was to enable more aggressive

+

British naval maneuvers. This resulted in the Landing Party rule

+

that allows the British to open up a new front usually to the

+

dismay of the American player. Basically the American coastal

+

regions are always vulnerable to a British naval descent and

+

add another dimension to the WW play experience.

+

While I am on the topic of the playtesters, I want to thank the

+

Consimworld Washington’s War board led by Keith Wixson.

+

Keith and the boys have been running a continuous tournament

+

playtest over the course of this re-design. Their collective wis-

+

dom, input, and competitive spirit have had a major impact on

+

how this design has evolved and the completeness of the rules.

+

All I have to say is, “free games for everyone.” Thanks guys

+

for all your hard work and good cheer.

+

In closing I would like to thank Kate Ross, esquire, of Wizards

+

of the Coast, without whom this game would not have gotten

+

back into print. I want to thank her for her professionalism

+

and good humor. I also want to thank my friend Mike Delurey,

+

whose counsel untangled a Gordian knot that I could not unravel

+

for over a decade. I would be remiss if I did not acknowledge my

+

developer on this project Joel Toppen, who has been a pleasure

+

to work with and has done a tremendous job in managing my

+

chaotic design process. Lastly, I would like to tip my hat to the

+

GMT graphics gang of Rodger MacGowan, Charlie Kibler and

+

Mark Simonitch, who continue to make me look much better

+

in print than I deserve; thanks guys.

+

I dedicate this game to my wife Carole of 30 years. Without

+

her I never could do what I do and any success that I have

+

achieved is due to her.

+

I hope you enjoy Washington’s War… anon…

+

Mark Herman

+

New York City

+

October, 2009

+

WW Playbook.indd 15

+

11/4/2009 11:59:57

+
+
+

Washington’s War Playbook

+

16

+

© 2009 GMT Games, LLC

+

Game Setup Instructions

+

British

+

Quebec (Canada): General Carleton,

+

2 CU, PC

+

Montreal (Canada): PC

+

Ft Detroit (Canada): 1 CU, PC

+

Boston (MA): General Howe, 5 CU,

+

PC

+

Norfolk (VA): PC

+

Gilbert Town (NC): PC

+

Wilmington (NC): PC

+

Ninety Six (SC): PC

+

British Reinforcement Box:

+

Generals Burgoyne, Clinton,

+

Cornwallis

+

American

+

Lexington and Concord (MA):

+

General Washington, 5 CU, PC

+

Newport (RI): General Greene, 2

+

CU

+

Charleston (SC): 2 CU, PC

+

Philadelphia (PA): Continental

+

Congress, PC

+

American Reinforcement Box:

+

Generals Arnold, Lincoln, Gates,

+

Lee, and Lafayette

+

French Reinforcement Box: General

+

Rochambeau, 5 French CUs,

+

French Navy

+

Committees of Correspondence

+

The American player places 1 PC

+

Marker in each of the Thirteen

+

Colonies in any space that does not

+

contain a British Playing Piece.

+

For The King

+

After the Americans place their

+

Committees of Correspondence

+

the British can place 2 PC markers

+

within all restrictions for British PC

+

marker placement (10.11.B) in any

+

colony except MA, CT, NH, PA, or

+

VA.

+

GMT Games, LLC

+

P.O. Box 1308 Hanford, CA 93292-1308

+

www.GMTGames.com

+

WW Playbook.indd 16

+

11/4/2009 12:00:00

+
+ + diff --git a/info/playbook01.jpg b/info/playbook01.jpg new file mode 100644 index 0000000..1156bdd Binary files /dev/null and b/info/playbook01.jpg differ diff --git a/info/playbook02.jpg b/info/playbook02.jpg new file mode 100644 index 0000000..22512ec Binary files /dev/null and b/info/playbook02.jpg differ diff --git a/info/playbook03.jpg b/info/playbook03.jpg new file mode 100644 index 0000000..9e374ce Binary files /dev/null and b/info/playbook03.jpg differ diff --git a/info/playbook04.jpg b/info/playbook04.jpg new file mode 100644 index 0000000..7ed62a3 Binary files /dev/null and b/info/playbook04.jpg differ diff --git a/info/playbook05.jpg b/info/playbook05.jpg new file mode 100644 index 0000000..14f74d9 Binary files /dev/null and b/info/playbook05.jpg differ diff --git a/info/playbook06.jpg b/info/playbook06.jpg new file mode 100644 index 0000000..0effa59 Binary files /dev/null and b/info/playbook06.jpg differ diff --git a/info/playbook07.jpg b/info/playbook07.jpg new file mode 100644 index 0000000..74f3647 Binary files /dev/null and b/info/playbook07.jpg differ diff --git a/info/playbook08.jpg b/info/playbook08.jpg new file mode 100644 index 0000000..05ef2f6 Binary files /dev/null and b/info/playbook08.jpg differ diff --git a/info/playbook09.jpg b/info/playbook09.jpg new file mode 100644 index 0000000..009a655 Binary files /dev/null and b/info/playbook09.jpg differ diff --git a/info/playbook10.jpg b/info/playbook10.jpg new file mode 100644 index 0000000..90f3563 Binary files /dev/null and b/info/playbook10.jpg differ diff --git a/info/playbook11.jpg b/info/playbook11.jpg new file mode 100644 index 0000000..911e7ba Binary files /dev/null and b/info/playbook11.jpg differ diff --git a/info/playbook12.jpg b/info/playbook12.jpg new file mode 100644 index 0000000..f4d80a9 Binary files /dev/null and b/info/playbook12.jpg differ diff --git a/info/playbook13.jpg b/info/playbook13.jpg new file mode 100644 index 0000000..1d1ff10 Binary files /dev/null and b/info/playbook13.jpg differ diff --git a/info/playbook14.jpg b/info/playbook14.jpg new file mode 100644 index 0000000..f4d80a9 Binary files /dev/null and b/info/playbook14.jpg differ diff --git a/info/playbook15.jpg b/info/playbook15.jpg new file mode 100644 index 0000000..1f73c0c Binary files /dev/null and b/info/playbook15.jpg differ diff --git a/info/playbook16.jpg b/info/playbook16.jpg new file mode 100644 index 0000000..45cccc5 Binary files /dev/null and b/info/playbook16.jpg differ diff --git a/info/rulebook.html b/info/rulebook.html new file mode 100644 index 0000000..35fa587 --- /dev/null +++ b/info/rulebook.html @@ -0,0 +1,2177 @@ + + + +Washington's War - Rules + + + + +
+

Washington’s War Rules Manual

+

1

+

© 2009, 2014 GMT Games, LLC

+

T A B L E O F C O N T E N T S

+

1 Introduction.......................................................2

+

2 Game Components............................................2

+

3 Terminology.......................................................3

+

4 Setting up the Game..........................................5

+

5 Sequence of Play...............................................6

+

6 Strategy Cards....................................................7

+

7 Movement........................................................10

+

8 Reinforcements................................................13

+

9 Battles..............................................................14

+

10 Political Control...............................................17

+

11 Winter Attrition................................................21

+

12 French Alliance................................................22

+

13 Victory.............................................................23

+

RULE BOOK

+

GMT Games, LLC

+

P.O. Box 1308 Hanford, CA 93292-1308

+

www.GMTGames.com

+
+
+

Washington’s War Rules Manual

+

2

+

© 2009, 2014 GMT Games, LLC

+

1.0 INTRODUCTION

+

Washington’s War is a two player, strategic level simula-

+

tion of the American Revolution. By way of the game

+

mechanics, the players attempt to initiate, control, weather

+

or exploit a wide variety of diplomatic, political, cultural

+

and military events in order to either help the United States

+

win its independence or to retain the 13 colonies as British

+

dominions.

+

2.0 GAME COMPONENTS

+

A complete game of Washington’s War includes:

+

• One 34”x 22” Map

+

• Two Six-Sided Dice

+

• 52 Round Playing Pieces

+

• 14 Rectangular Playing Pieces

+

• 68 Hexagonal Playing Pieces

+

• 32 Square Playing Pieces

+

• Two 8 1/2”x 11” Player Reference Cards

+

• One Rules Booklet

+

• One Playbook

+

• 110 Strategy Cards

+

• 14 Plastic Stands for Generals and the French Navy

+

2.1 The Game Map

+

A. The map for Washington’s War covers the area of eastern

+

North America over which the Revolutionary War was fought.

+

The circles, squares and eight-point stars—called Spaces—rep-

+

resent the major locations, and players move among, fight over,

+

and take control of these spaces. Armies may move between

+

adjacent spaces, i.e., the spaces joined by lines, and movement

+

takes place along those lines. The map is sub-divided into

+

Colonies, and the color coding of the spaces helps players keep

+

track of which spaces belong to each colony.

+

B. Square spaces and eight-point star spaces serve as Winter

+

Quarters spaces. The line of snow flake symbols coincident

+

with the Virginia-North Carolina border is the Winter Attri-

+

tion Line. Both the Winter Attrition Line and Winter Quarters

+

spaces play a role in resolving Winter Attrition (11.0).

+

WASHINGTON’S WAR

+

RULES OF PLAY

+

Credits

+

Designer: Mark Herman

+

Developer: Joel Toppen

+

Art Director: Rodger MacGowan

+

Box Art and Design: Rodger MacGowan

+

Map: Harold Lieske and Mark Simonitch

+

Cards: Mark Simonitch

+

Counters: Harold Lieske

+

Game Manuals & Player Aid Card: Charles Kibler

+

Player Aids from C3i Magazine, Copyright Rodger B.

+

MacGowan, RBM Publication

+

Playtest Tournament Coordinator: Keith Wixson

+

Playtesters: George Young, Philip Burgin-Young, Ron Jacob-

+

sen, Keith Wixson, Jonathan Moody, Kevin Klemme, William

+

Peeck, Doug Pratto, Brian Mountford, Tobias Kriener, Paul

+

Schwartz, Don Chappell, Joel Toppen, David Rubin, Randy

+

Pippus, Ken Gutermuth, Paul Pawlak, Henry Rice, Paul Gaber-

+

son, John Clark, Russ Hewson, Christopher Leary, Michael

+

Mitchell, Scott Henshaw, Sandon Kallstrom, John Leggat

+

Game design based on We The People: The American Revolution

+

from Avalon Hill. Used with permission.

+
+
+

Washington’s War Rules Manual

+

3

+

© 2009, 2014 GMT Games, LLC

+

C. Spaces bearing a Port symbol are known as Port Spaces.

+

Quebec, Montreal, Charleston SC and Philadelphia PA are de-

+

picted as eight-point stars. Such star-shaped spaces are defined

+

as fortified ports. Each of these ports historically was able to

+

resist naval actions in their vicinity. British Landing Parties

+

(7.2.B ) are not allowed in these spaces, and British Royal Navy

+

Support (9.42) and Retreat by Sea (9.62) is possible only if the

+

port is British Controlled (i.e., contains a British PC marker).

+

2.2 The Playing Pieces (Counters and Markers)

+

Washington’s War uses two kinds of playing pieces: counters and

+

markers. The counters represent Combat units and Generals. The

+

markers provide a host of additional information.

+

A. The round playing pieces are combat units

+

(CUs), colored and pictured to represent

+

American (blue), British (red), or French

+

(green) fighting forces. The number on these

+

counters represents that number of combat

+

units for that nationality, in denominations of 1, 2, 3 or 5. Feel

+

free at any time to “make change” freely with these counters:

+

for example, you may replace a “5” combat unit with two “2”s

+

and a “1”, or with five “1”s.

+

B. The large rectangular pieces are the Generals, which are

+

placed in the plastic stands included in the game so that they

+

stand up on the map. Each depicts a General important to the

+

conflict—American, British, or French. CUs may only move

+

when stacked with a General. For players who prefer them,

+

smaller square pieces are included for each General to be used

+

in lieu of the rectangular stand-up pieces.

+

C. The number at top left of a stand-up General counter is his

+

Strategy Rating. Strategy Ratings range from 1-3, and are used

+

in conjunction with the OPS Cards to activate Generals (and

+

their CUs) for movement (7.0). The number at top right is the

+

Generals Potential Battle Rating and are used in the Combat

+

Resolution Procedure (9.2). Potential Battle Ratings vary from

+

1-6 and are used as the basis for determining the General’s Ac-

+

tual Battle Rating (and DRM) during combat resolution (9.3).

+

The number in the lower right is the General’s Agility Rating.

+

Agility Ratings vary from 1-3. The Agility Rating impacts the

+

possible losses the enemy may take during combat resolution

+

(9.5). For American Generals, the Agility Rating is also used

+

to resolve interception (7.8) and retreat before battle (7.9) at-

+

tempts. (Washington and Greene enjoy a special modification

+

to their Agility Rating when attempting retreat before battle.)

+

D. The Political Control (PC) markers are

+

shaped like hexagons and are placed in indi-

+

vidual spaces on the map to denote control of

+

that space. They are double-sided, representing

+

American control on one side and British con-

+

trol on the reverse; they are flipped when

+

control of a space changes hands.

+

3.0 TERMINOLOGY

+

The following terms are used throughout the rules and on Strat-

+

egy Cards:

+

Adjacent: Two spaces are said to be adjacent when they are

+

connected by a line. There are two types of lines which

+

connect spaces: normal, solid lines and dashed Wilder-

+

ness Connections; see 7.3.D. If the American General,

+

Arnold is in either Falmouth, MA or Quebec, Canada,

+

the other space is adjacent to Arnold only, traced along

+

the dashed Wilderness Connection. For purposes of PC

+

Isolation, British controlled ports are all considered adja-

+

cent to each other.

+

Agility Rating: An expression of a General’s ability to ma-

+

neuver his Army in battle. The higher the rating, the (bet-

+

ter) the General’s ability to retreat or intercept an enemy

+

Army. The higher the rating, the more likely the winner

+

will take losses in a battle where the General is defeated.

+

American Unit: An American or French General, an

+

American or French CU, the Continental Congress or

+

any combination of these units. An American PC marker

+

does not count as an American Unit.

+

Army: A General with at least one friendly Combat Units in

+

a space.

+

Battle Card: A special subset of Event Strategy Cards.

+

When played as an event during the Combat Resolution

+

Procedure battle, the player receives certain benefits

+

Strategy Rating

+

Potential

+

Battle Rating

+

Agility Rating

+

Modifier to Agility Rating for

+

Retreat Before Battle

+
+
+

Washington’s War Rules Manual

+

4

+

© 2009, 2014 GMT Games, LLC

+

which may include a helpful DRM. Battle Card text also

+

directs the player to draw a replacement card from the

+

Strategy Deck (9.45).

+

Blockade Zone: A group of Port spaces comprise a “Block-

+

ade Zone” (12.3).

+

Blockaded Zone: A Blockaded Zone is a Blockade Zone

+

containing the French Navy (12.3).

+

Colony: A grouping of one or more spaces on the map

+

makes up each colony and Canada. Every space belongs

+

to one of the thirteen American colonies or to Canada

+

and is color-coded to aid in identifying its colonial as-

+

sociation.

+

Combat Unit (CU): A combat unit represents approximate-

+

ly a Brigade of soldiers. CUs have no

+

ability to move except when moved in

+

conjunction with a General. CUs are

+

treated like monetary change. Players

+

may exchange them at any time for any

+

reason as long as the nationality and total

+

number of CUs in the space is not altered by the ex-

+

change.

+

Die Roll Modifier (DRM): When a battle occurs each

+

player rolls a six sided die as modified by a wide range

+

of DRMs. The higher modified value yields victory in

+

battle.

+

Event Strategy Card: A Strategy Card implementing

+

the effects of an important social, economic, political,

+

military or diplomatic event that historically occurred or

+

could have occurred. Event Strategy cards have nation-

+

specific flags next to their titles to help players determine

+

which side(s) may implement the event. The text of

+

the title is provided merely to provide historical color

+

and texture; it has no bearing on implementing the text.

+

When played (not discarded) the text on the card must be

+

implemented literally, exactly and completely; although

+

some cards do provide the player with options. Most

+

Event Strategy Cards may be discarded in lieu of being

+

played. There are seven Special Event Strategy Cards

+

that must be played as the event regardless of which

+

player draws them (6.34).

+

General: A General represents an important military leader

+

that participated in the war. Each General has a Strategy,

+

Agility and Potential Battle Rating.

+

OPS Card: A Strategy Card bearing a number 1, 2 or 3

+

at top left. Players play these cards during the Strategy

+

Phase in order to move Generals and any accompanying

+

CUs from space to space, or to place and flip PC markers

+

in spaces, or to bring reinforcements into the game.

+

Political Control: A player controls a space if he has one

+

of his Political Control (PC) markers in that space. This

+

is true even if an opposing CU or General also occupies

+

that space. Political Control of a space can change nu-

+

merous times over the course of a game.

+

Political Control Marker (PC): Hexagonal playing piece

+

which represents either American or British political

+

control of a space.

+

Potential Battle Rating: An expression of a General’s

+

potential tactical prowess in battle. The higher the rating,

+

the greater the probability that the General will contrib-

+

ute die roll modifiers in battle and the higher the possible

+

Actual Battle Rating.

+

Stacking Limits: There are no CU stacking limits; a space

+

may contain as many CUs as the owning player desires.

+

There is a limit of one General for each side to a space.

+

Except during the resolution of a battle, no space may

+

contain Generals and/or CUs of both sides.

+

Strategy Card: See Event Strategy Card and OPS Card.

+

Strategy Rating: A value that determines how easy it to ac-

+

tivate a General for movement. A “1 rated” General can

+

be activated by any value OPS card, a “2 rated” General

+

can be activated by a 2 or 3 value OPS card, and a “3

+

rated” General can be activated by 3 value OPS card.

+

Stock: Combat Units not located on the map or in a Rein-

+

forcement box constitute a player’s Combat Unit stock.

+

See 8.2.C.

+
+
+

Washington’s War Rules Manual

+

5

+

© 2009, 2014 GMT Games, LLC

+

4.0 SETTING UP THE GAME

+

To begin the game, unfold the map and lay it on the table.

+

Carefully punch out the counters and separate them according

+

to nationality. Remove the “Declaration of Independence” and

+

the “Baron von Steuben Trains the Continental Army” Event

+

Strategy cards from the Strategy Card deck and set them aside.

+

Shuffle the remaining Strategy Cards and put the resulting deck

+

face-down near the map. Put the Game Turn marker on the Game

+

Turn Record Track on the map, with the “British Regulars” side

+

showing. Place the “French Alliance” marker on the “0” space

+

of the “French Alliance Track.” Next, set up the playing pieces

+

as indicated below. Both sides set up simultaneously. Lastly, the

+

American player places the Committee of Correspondence PC

+

Markers, followed by the British player’s placement of For The

+

King PC markers.

+

Abbreviations:

+

x CU = a number of Combat Units equal to x

+

PC = Political Control Marker

+

British:

+

Quebec (Canada): General Carleton, 2 CU, PC

+

Montreal (Canada): PC

+

Ft Detroit (Canada): 1 CU, PC

+

Boston (MA): General Howe, 5 CU, PC

+

Norfolk (VA): PC

+

Gilbert Town (NC): PC

+

Wilmington (NC): PC

+

Ninety Six (SC): PC

+

British Reinforcement Box: Generals Burgoyne, Clinton,

+

Cornwallis

+

American:

+

Lexington and Concord (MA): General Washington, 5 CU,

+

PC

+

Newport (RI): General Greene, 2 CU

+

Charleston (SC): 2 CU, PC

+

Philadelphia (PA): Continental Congress, PC

+

American Reinforcement Box: Generals Arnold, Lincoln,

+

Gates, Lee, and Lafayette

+

French Reinforcement Box: General Rochambeau, 5 French

+

CUs, French Navy

+

Committees of Correspondence:

+

The American player places 1 PC Marker in each of the

+

Thirteen Colonies in any space that does not contain a British

+

Playing Piece.

+

For The King:

+

After the Americans place their Committees of Correspondence

+

the British can place 3 PC markers within all restrictions for

+

British PC marker placement (10.11.B) in any colony.

+
+
+

Washington’s War Rules Manual

+

6

+

© 2009, 2014 GMT Games, LLC

+

5.0 SEQUENCE OF PLAY

+

Washington’s War follows a specific sequence of play. All activi-

+

ties of one phase must be completed before the subsequent phase

+

is started. Within a phase, all activities of one segment must be

+

completed before the next segment is started. Within a segment,

+

players may perform their activities simultaneously or in any

+

order agreeable to both players. Should an issue arise where

+

both players do not agree, the American player determines the

+

order, but from that point forward the order of activities for that

+

segment cannot be changed.

+

5.1 Reinforcements Phase

+

If either player’s Generals are in Captured Generals box, they

+

are moved to their respective Reinforcements boxes. The British

+

player then gets Combat Units equal to the number listed for the

+

current turn on the turn track and places them in his Reinforce-

+

ments box; see 8.1.A.

+

5.2 Strategy Cards Phase

+

Deal seven Strategy Cards to each player. The American player

+

is always dealt the first card. When the Strategy Deck is fully

+

depleted, or at the beginning of a turn after an event occurs re-

+

quiring a reshuffle of the Strategy Deck, the Strategy Card Deck

+

is reconstituted; see 6.1.

+

5.3 Strategy Phase

+

A determination is made as to which player chooses who goes

+

first in the following priority order:

+

a. The British player may declare himself the first player

+

by playing a Campaign card (Major or Minor) as the first

+

card.

+

b. If on the previous turn the Congress was dispersed (7.7)

+

the British player chooses who will play the first Strategy

+

card.

+

c. In all other circumstances the American player chooses

+

who will play the first Strategy card.

+

The players then take alternate impulses, each playing one Strat-

+

egy card, until both players’ hands are empty, at which point the

+

Strategy Phase ends. In some turns, one player might run out of

+

cards well before the other, in which case the player with cards

+

remaining continues to play until his cards run out. Cards may

+

not be “saved” until the next turn, nor may a player “pass” his

+

impulse so long as he has cards in his hand.

+

The play of each Strategy card allows that player to do one of

+

the following:

+

(a) move a General;

+

(b) take control of spaces, putting PC Markers in those

+

spaces;

+

(c) cause the card’s Event to happen;

+

(d) acquire Reinforcements.

+

Except for Special Event Strategy Cards, a player may satisfy

+

a card play by discarding a card (all information on the card is

+

ignored; see 6.32.

+

5.4 Winter Attrition Phase

+

All CUs are checked for possible Winter Attrition Losses. The

+

nationality of the CUs, the location of the CUs with respect to

+

the Winter Attrition Line and Winter Quarters spaces and whether

+

they are stacked with a General influence their possible losses;

+

see 11.0.

+

5.5 French Naval Phase

+

During this phase, and only during this phase, the French Navy

+

may be relocated. The American player picks up the French Navy

+

counter and relocates it to any Blockade Zone he wishes; see 12.3.

+

5.6 Political Control Phase

+

If the Continental Congress has been dispersed, the American

+

player returns it to play. Each player places PC markers in spaces

+

containing his Armies. Lastly isolated PC markers are removed;

+

see 10.2.

+

5.7 End Phase

+

If the French Alliance was triggered during the current Game-

+

Turn, European War breaks out and the British player removes

+

2 CUs from the map; see 12.2.B.iii.

+

If an Automatic Victory has not occurred (13.1), the game ends if

+

the “Lord North’s Government Falls—War Ends” Event Strategy

+

Card in the War Ends box states that the game ends on this turn or

+

a previous turn. If the game ends, determine the winner per 13.2.

+

If the game has not ended, move all OPS Cards from the Re-

+

inforcements Cards boxes to the Discard pile and begin a new

+

Game Turn by advancing the Game Turn Marker to the next

+

space on the Game Turn Track.

+

End Phase Clarification

+

During an End Phase all OPS queues and any other game

+

process that the players can conceive of or imagine; stops,

+

and cannot carry over into the next game turn.

+

In the unlikely event that a “Lord North’s Government Falls—

+

War Ends” Event Strategy card is not drawn during the course

+

of a game, the game ends at the end of 1783.

+
+
+

Washington’s War Rules Manual

+

7

+

© 2009, 2014 GMT Games, LLC

+

turn, shuffle both cards into the Strategy Card deck. This is not

+

a re-shuffle per se, so the discards remain discarded unless an

+

event requiring a reshuffle is played (or the French Alliance

+

comes into effect) in 1775.

+

6.2 Playing the OPS Cards

+

Most of the game play revolves around the use of OPS Cards.

+

These cards let players conduct their military campaigns and take

+

control of spaces and colonies. Each time a player plays an OPS

+

Card, he may do one (and only one) of the following:

+

• Activate a General for movement, with or without

+

Combat Units under his command. Activation can oc-

+

cur only if the General’s Strategy Rating is equal to or

+

less than the number on the card. An OPS Card show-

+

ing a “3” can therefore activate any General, while an

+

OPS Card with a “1” can activate only a General who

+

has a Strategy Rating of 1. The OPS Card with a “2”

+

can activate Generals with Strategy Ratings of 2, or 1,

+

but not 3.

+

• Add a number of PC Markers to the map equal to the

+

number on the OPS Card. See 10.1 for details.

+

• Bring on Reinforcements. See 8.0 for details.

+

• Place that number of Operations into an Operations

+

Queue. See 7.1.B for details.

+

Card ID

+

OPS Card value

+

Possible activities that

+

can be conducted with

+

this OPS Card

+

OPS Cards used for placing PC counters or mov-

+

ing Generals and Armies are played by placing

+

the card face up on the Discard Pile. Those used

+

to bring on reinforcements are placed face up in

+

one of that side’s Reinforcement Card boxes to

+

record that a reinforcement action has occurred. Those cards

+

used to begin or extend an Operations Queue are played face-up,

+

under an “Operations Queue” marker in front of the player until

+

the Queue is used to activate a General or the Queue is aban-

+

doned. Once the Queue is used or abandoned all the OPS Cards

+

associated with it are placed face up in the Discard Pile.

+

6.0 STRATEGY CARDS

+

During the Strategy Phase, all activity depends on the play of

+

Strategy cards. This includes moving Armies and fighting battles

+

as well as taking control of spaces (by placing PC markers),

+

bringing in reinforcements, and causing events to happen. The

+

first three actions occur by playing the OPS Cards, while events

+

occur by playing the Event Strategy Cards.

+

6.1 Dealing Strategy Cards and Reshuffling the

+

Strategy Card Deck

+

In the Strategy Cards Phase of each game-turn, starting with the

+

American player, both players are dealt a hand of seven Strategy

+

Cards from the top of the Strategy Deck. These seven cards

+

constitute each player’s hand.

+

A. When the Strategy Deck is fully depleted, including the

+

situation where a Strategy Card deal is interrupted, reconsti-

+

tute the Strategy Card deck as described below, and resume

+

dealing if appropriate.

+

B. The Strategy Card Deck is reconstituted when either an

+

Event Strategy Card is played (not discarded) that requires the

+

Strategy Card Deck to be reshuffled or when the Strategy Card

+

deck is depleted. In every case all the discards and any cards

+

remaining in the Strategy Card deck are shuffled to constitute

+

a fresh Strategy Card deck. Only the current “Lord North’s

+

Government Falls — War Ends” card and any Event Strategy

+

cards that have been permanently removed from play due to

+

the instruction on the card are excluded from the shuffle.

+

Reshuffle Clarification

+

If a reshuffle is triggered in the middle of the Strategy Phase

+

(owing to deck depletion and a card draw is needed from

+

the play of a Battle Card Event), the current “War Ends”

+

card and any cards currently in the Reinforcement Card

+

boxes are not shuffled.

+

The “Declaration of Independence” (#99) and “William Pitt

+

Urges Peace Talks” (#95) event cards trigger a Reshuffle

+

when played as an event (not discarded) as per the rule-

+

book—of course “Declaration of Independence can never

+

be discarded. The “Hortelez et Cie” (#96) event, however

+

is the opposite: “Hortelez et Cie” triggers a Reshuffle when

+

discarded (not played) as per the card text.

+

C. Either player may examine the cards in the Discard Pile at

+

any time. Neither player may examine the cards in the Strategy

+

Card Deck.

+

D. Certain event cards may change the constitution of either

+

player’s hand, as explained on the card itself. For example,

+

if the American Player plays the “John Paul Jones Shipping

+

Raids” event, one card is randomly drawn from the British

+

player’s hand and is discarded.

+

E. SPECIAL RULE: “Declaration of Independence” and

+

“Baron Von Steuben Trains the Continental Army” Cards:

+

During the initial setup of the game, the “Declaration of In-

+

dependence” and “Baron Von Steuben Trains the Continental

+

Army” cards are set aside; see 4.0. At the beginning of the 1776

+
+
+

Washington’s War Rules Manual

+

8

+

© 2009, 2014 GMT Games, LLC

+

6.3 Playing the Event Strategy Cards

+

A. The Event Strategy Cards simulate events that occurred,

+

or may have occurred, during the historical conflict. When an

+

Event Strategy Card is played, the instructions on the card are

+

precisely implemented. Alternatively most (but not all) Event

+

Strategy cards may be discarded, in which case the discarding

+

player may take some alternative minor actions as described

+

below. Special Event Strategy Cards may not be discarded

+

regardless of which player is dealt the card; the event must

+

be implemented, but the player holding the card determines

+

when during the Strategy Phase that he will play that card as

+

the event.

+

B. The titles printed on Event Strategy Cards have no impact

+

whatsoever on the play of the event; they are added simply to

+

provide background color and historic texture to the game. For

+

example, the “Benedict Arnold Treason!” may occur whether

+

or not the Arnold General counter is in play or not. Next to

+

the titles on the Event Strategy Cards is a nation-specific flag

+

which indicates which player may play the card to trigger its

+

event. An American flag indicates events that are playable by

+

the American player. A British flag indicates events playable by

+

the British player. The absence of a flag denotes events play-

+

able by either player (i.e., Minor and Major Campaigns), or a

+

Special Event Card that must be played by the player holding it.

+

C. When an Event Strat-

+

egy Card has been played as the event, examine the card text to

+

determine if it may only be played once per game. Cards that

+

are removed from play are set aside where both players may

+

see that the event has occurred. These cards are not included

+

in any subsequent reshuffles of the Strategy Card Deck. All

+

other cards are placed face up on the Discard pile.

+

D. If the Event Strategy Card directs that the deck be reshuffled,

+

place the card face up on the Strategy Card Deck as a mne-

+

monic to reshuffle the deck at the beginning of the next Strategy

+

Card Phase. If a subsequent Event Strategy Card directs that a

+

card be drawn from the Strategy Card Deck before the reshuffle

+

occurs, simply take the next card on the top of the deck under

+

the mnemonic; do not reshuffle the deck at that time.

+

6.31 Playing Event Strategy Cards

+

Play of a Strategy Card Event implements all of the actions

+

described in the text of the card. To allow the text on the card to

+

be concise, some generalities apply:

+

• Many events have conditional clauses that limit the

+

activity in the event; read the card text carefully. For

+

example the “Joseph Brant Leads an Iroquois Raid”

+

limits the effect on the card to the non-port spaces in

+

three specific colonies.

+

• If the text uses the word “may”, then that portion of

+

the instructions on the card is voluntary. The player

+

playing the card may implement the action or not at

+

his discretion.

+

• If the text does not use the word “may”, then all of the

+

instructions must be implemented. For example, during

+

play of the “Declaration of Independence”, PC mark-

+

ers must be played into every colony where placement

+

is legal even if this will ultimately result in the loss of

+

American PCs during the Political Control Phase.

+

• Some Event Strategy Cards indicate that PC markers

+

or Combat Units be removed from the map. Which

+

specific units or counters are removed is entirely up to

+

whomever plays the card.

+

• Some Event Strategy Cards call for the player to re-

+

move a Strategy Card from his opponent’s hand; the

+

player who plays such an event randomly draws a

+

Strategy Card from the other player’s hand and dis-

+

cards it, face up, without looking at any other Strategy

+

Cards in that player’s hand. Loss of a Strategy Card

+

from one’s hand in this fashion does not constitute a

+

play of that strategy card. If he still has strategy cards

+

remaining, the player losing the Strategy Card still

+

makes the next play.

+

Design Note: This mechanic may have the effect of

+

changing which player will move last and may give a

+

player back-to-back Strategy Card plays.

+

• In cases where there is a perceived contradiction be-

+

tween the rules and the card text, the card text takes

+

precedence.

+

6.32 Discarding Event Strategy Cards

+

A. Except for Special Event Strategy Cards that must be played

+

as events, either player may choose to discard an Event Strat-

+

egy Card rather than play it to implement the event. British

+

players must discard Event Strategy Cards which have an

+

American flag next to the title; American players must discard

+

Event Strategy Cards which have a British flag next to the title.

+

If the conditions specified in the card text cannot be met, then

+

the card must be discarded. A card which is discarded is never

+

removed from the game.

+

Example: If “William Pitt Peace Talks” is in a player’s hand

+

after the French Alliance has occurred, then it must be dis-

+

carded as described in this section or in section 6.33.

+

Card Number

+

Event Title (Battle Card

+

if title in white on red or

+

blue background)

+

British flag indicates

+

only the British player

+

may play the event;

+

American flag indicates

+

only the American player

+

may play the event.

+

Card Event text

+
+
+

Washington’s War Rules Manual

+

9

+

© 2009, 2014 GMT Games, LLC

+

B. When a player discards an Event Strategy Card as his play

+

during the Strategy Phase, he also takes one of the following

+

actions:

+

(i.) The card is simply discarded and no further action is

+

taken; or

+

(ii.) Place or flip one PC adjacent to a friendly PC subject

+

to the additional restrictions in Rule 10.11; or

+

(iii.) Remove one enemy PC from a space which is adjacent

+

to a space containing a friendly PC counter and that is not

+

occupied by an enemy CU, an American General or the

+

Continental Congress.

+

Play Note: An OPS Card cannot be discarded to remove an

+

opponent’s PC marker. Only an Event card (even a friendly

+

Event, but not a Special Event) can be discarded to remove

+

a PC marker.

+

C. If a player discards an Event Strategy Card as a play dur-

+

ing the Strategy Phase (i.e., not as a Battle Card as described

+

below), his opponent may exchange an OPS Card in his hand

+

with the discarded Event Strategy Card before he takes his

+

turn. Note that this action does not change the total number of

+

cards in the exchanging player’s hand, nor does it constitute

+

taking his turn.

+

• The American player must exchange either a 2 or 3

+

value OPS Card to retrieve such a discarded Event

+

Strategy Card.

+

• The British player must exchange any OPS Card, re-

+

gardless of value, to retrieve a discarded Event Strat-

+

egy Card.

+

Example: It is the British player turn. The British player dis-

+

cards the “Henry Knox Continental Artillery Commander”

+

Event Strategy Card. He chooses to place a PC marker on the

+

board. After the British turn and before taking his turn, the

+

American player discards a 2 OPS Card from his hand and

+

exchanges it to bring the discarded “Henry Knox” card which

+

he places into his hand. It is now the American player’s turn.

+

6.33 Event Strategy Cards as Battle Cards

+

A. Event Strategy Cards with the title printed in a colored box

+

are called Battle Cards. These events can only be implemented

+

when the card is played during the resolution of a battle (9.45).

+

(Exception: “Banastre Tarleton Waxhaws Massacre” provides

+

the British player with the option to play the card as an event

+

during the Strategy Phase.) Once the battle is resolved, the

+

card is discarded (Exception: “Benedict Arnold Treason!” is

+

permanently removed). The +2 Battle DRM advantage applies

+

only to the battle underway when the card is played; i.e., if

+

more than one battle occurs during the turn as the result of a

+

Major or Minor Campaign event the Battle Card only modi-

+

fies one battle.

+

B. Each Battle Card contains the instruction to draw a Strategy

+

Card after the active player’s impulse. Draw the replacement

+

Strategy Card after all other activity in the impulse has been

+

completed. If more than one Battle Card has been played (as

+

in a Major or Minor Campaign), then a replacement card is

+

drawn for each one. Normally it will not matter which player

+

replaces their card first, but in cases where it may matter (such

+

as when the Strategy Card Deck will become exhausted) the

+

player taking their impulse replaces their Battle Cards first.

+

C. Except for Special Event Strategy Cards, any Event Strat-

+

egy Card may be discarded to gain a +1 die roll modification

+

in Battle (9.45). An Event Strategy Card discarded for this

+

purpose is not replaced by drawing another Event Strategy

+

Card, nor may it be retrieved by the exchange procedure used

+

during the Strategy Card Phase (6.32.C).

+

Play Note: This mechanic can be used to discard an opponent’s

+

event without fear of exchange. However, it does reduce the size

+

of one’s hand, possibly giving the opponent the opportunity to

+

make a back-to-back play.

+

D. Each player may play/discard a maximum one Event Strat-

+

egy Card for each battle. The attacker decides to play/discard

+

first, then the defender makes his decision. During a Major/

+

Minor Campaign Event, each players may play/discard an

+

Event Strategy Card in every battle if they so choose.

+

Clarifications: The “Benedict Arnold Treason” Battle card may

+

only be played as an event during the battle resolution process.

+

As with other Battle Cards, this card cannot be played as the

+

event during the Strategy Card Phase simply to remove the Arnold

+

General counter. The Arnold General counter does not have to

+

be involved in the battle in order to play this Battle Card. When

+

the event is resolved, the Arnold General counter is permanently

+

removed from the game regardless of his current location (on

+

the map, in the American Leader Reinforcement box or in the

+

Captured Generals box). The American player may discard this

+

card per 6.32 or discard it as a battle card at his option.

+

6.34 Special Event Strategy Cards

+

A. There are seven Special Event Strategy Cards. They are

+

indicated by the notation ‘Must Be Played’ at the top. These

+

cards may not be discarded under any circumstances. The

+

player drawing a Special Event card into his hand must play

+

it at some point during the Strategy Phase of the game-turn in

+

which he draws it. A player holding a Special Event Strategy

+

Card does have the option of when during the Strategy Phase

+

to play the card.

+

B. When a Special Event Strategy Card is randomly selected

+

and drawn from a player’s hand, its event is immediately

+

implemented. The requirement to implement the event is

+

mandatory regardless of which player drew the card, held the

+

card, or which side benefits.

+

C. The Special Event Strategy Cards are:

+

(i.) Declaration of Independence. This event requires the

+

American player to place one PC marker in each of the

+

thirteen colonies (excluding Canada) where placement is

+

possible. Such placement is not optional, although the choice

+

of which space if there is more than one possible space is at

+

the option of the American player. PC marker placement is

+

limited by the restrictions listed in Rule 10.11.A.ii. British

+
+
+

Washington’s War Rules Manual

+

10

+

© 2009, 2014 GMT Games, LLC

+

PC markers cannot be flipped even if an American Army or

+

General is present. The Declaration of Independence event

+

takes place even if the Continental Congress is currently

+

dispersed.

+

Play Note: In some cases, play of the “Declaration of In-

+

dependence” can potentially result in losses of American

+

PCs during a subsequent PC Isolation Phase (10.3). This

+

is intended.

+

Optional Tournament Rule: Whenever the British player

+

plays either the Declaration of Independence or the Benjamin

+

Franklin: Minister to France Special Events, the event takes

+

effect as it normally does. However, the British player may

+

then draw a replacement card and immediately take another

+

action using any card (not necessarily the replacement card).

+

The DOI and Franklin events always occur first.

+

(ii.) Benjamin Franklin: Minister to France. Advance the

+

French Alliance marker four spaces towards “French Alli-

+

ance”. If play of this event results in the French Alliance

+

marker reaching +9, then immediately implement the effects

+

of the French Alliance; see 12.0.

+

(iii.) Lord North’s Government Falls Card and the War

+

Ends Box. The “North’s Government Falls” cards are used to

+

regulate the end of the game. Each of the five cards changes

+

the end of the game to one of the years from 1779 to 1783.

+

To implement this event, place the card face up in the box on

+

the map labeled “War Ends Card”. If a “North’s Government

+

Falls” is already in the box, place it in the discard pile and

+

replace it with the card just played. In this way, should the

+

Strategy Card deck be reshuffled, except for the card currently

+

in the War Ends Box, all the other “North’s Government Falls”

+

cards will be returned to play. During the End Phase of each

+

Game Turn, the players will compare the current year with

+

the year shown on the “North’s Government Falls” card. If

+

the card shows the current year or a preceding year, then the

+

game ends and victory is determined; see 13.0.

+

7.0 MOVEMENT

+

Movement only occurs during the Strategy Phase and only when

+

Generals have been activated by an OPS Card, “John Glover

+

Marblehead Regiment” Event Strategy Card or by a “Major/

+

Minor Campaign” Event Strategy Card. A Combat Unit (CU)

+

may only move when accompanied by an activated General.

+

American Armies may conduct interceptions and retreats before

+

battle, and thus make minor changes to their locations during the

+

Strategy Phase, but these mechanics do not require activation of

+

a General and are covered separately.

+

7.1 Activating Generals with OPS Cards

+

A. To activate a General with a Strategy Rating of 3 (e.g., Car-

+

leton), play an OPS Card with the number 3 on it. To activate

+

a General with a Strategy Rating of 2 (e.g., Gates), play an

+

OPS Card with either the number 3 or 2 on it. A General with

+

a strategy rating of 1 (e.g., Greene) may be activated by the

+

play of any OPS Card.

+

B. Instead of activating a General with the play

+

of a single OPS Card, a player may choose to

+

create an Operations Queue.

+

(i.) A player establishes the start of an Opera-

+

tions Queue by playing an OPS Card with the

+

number 1 or 2 face up in front of the player and stating that it

+

is an Operations Queue. Place an Operations Queue marker

+

on top of the card or cards played into the Queue.

+

(ii.) On the player’s next Strategy Card play, he plays an

+

additional OPS Card into the Queue. He may then activate

+

a General with a Strategy Rating less than or equal to the

+

total value of the OPS Cards. Alternatively he may choose

+

to continue the Operations Queue.

+

(iii.) When creating an Operations Queue, the player must

+

play each subsequent Strategy Card into the Queue until

+

he uses the Queue or abandons it. The Operations Queue

+

is abandoned if the player discards or plays any Strategy

+

Card to perform a different activity. (Note: This applies to

+

the sequential plays of Strategy Cards during the Strategy

+

Phase. Battle Cards played and other Event Strategy Cards

+

discarded during resolution of a battle do not cause aban-

+

donment of the Operations Queue.) When an Operations

+

Queue has been completed (used to activate a General) or

+

abandoned, place all the OPS Cards face up on the discard

+

pile. Discard of an OPS card to pick up a discarded Event

+

does not cancel the OPS Queue.

+

Example: The British player holds a hand of three 1 OPS Cards,

+

one 3 OPS Card and three event cards. During the course of the

+

game turn he foresees the possible need to move Howe, Cornwal-

+

lis and/or Burgoyne. As his first play, he places one of the 1 OPS

+

Cards in front of him and starts an Operations Queue, placing an

+

“Operations Queue” marker on top of it. The American player

+

makes a routine play that does not change the British player’s

+

plan. The British player then plays the second 1 OPS Card into

+

the Operations Queue. The queue now totals two, so he activates

+

Burgoyne for movement. After the move is completed, both 1 OPS

+

Cards are placed in the Discard Pile.

+

Example: With the same starting situation as above, the Ameri-

+

can player takes an action that the British player believes must

+

be responded to by playing one of his Event Strategy Cards as

+

the event. He does so, but has interrupted his continual play of

+

cards into the Operations Queue and thus abandoned it. The event

+

is implemented but the 1 OPS Card in the Operations Queue is

+
+
+

Washington’s War Rules Manual

+

11

+

© 2009, 2014 GMT Games, LLC

+

placed in the discard pile. The British player may start a new

+

Operations Queue with his next play.

+

Example: With the same starting situation as above, the Op-

+

erations Queue has grown to hold two 1 OPS Cards. After the

+

American’s second play, the British player decides he wishes to

+

activate Cornwallis. Even though there are already two 1 OPS

+

Cards in the queue, he must still play another card into the queue

+

in order to activate a General. He cannot play an event and

+

also activate Cornwallis, nor may he pass on playing a card to

+

activate Cornwallis. He plays the remaining 1 OPS Card into the

+

queue and now has three operations points, so he may activate

+

any British General that he chooses.

+

7.2 Activating Generals with Campaign Cards

+

A. By playing a “Major Campaign” Event Strategy Card, a

+

player may activate up to three of his Generals, regardless of

+

their Strategy Ratings. By playing a “Minor Campaign” Event

+

Strategy Card, he may activate up to two Generals (regard-

+

less of their Strategy Ratings). The first General must finish

+

his entire activation (including any Battles he wishes to fight)

+

before the next General begins. A General cannot be activated

+

more than once in a Campaign, nor may a given CU be moved

+

by more than one General during a campaign. The player need

+

not announce which Generals will be activated when the card

+

is played; the player may move one General, and then select

+

which General he will activate next and so on until all Generals

+

have completed their activations.

+

B. Landing Party (British): With the play of any Campaign

+

Event Strategy Card, in lieu of activating one General, the

+

British player may either (a) flip an American PC marker in a

+

non-Blockaded port space not containing an American Gen-

+

eral, CU, or the Continental Congress; or (b) place a British

+

PC marker in an empty, non-Blockaded port space. Neither

+

of these options may be employed in a fortified port space

+

(2.1.C). Only one Landing Party activation is allowed per play

+

of a Campaign Event Strategy Card.

+

Design Note: Subsequent to flipping the American PC counter,

+

the British player may use an additional activation during the

+

same Campaign Event to make a British Naval Movement to

+

that now friendly port.

+

7.3 Movement Procedure

+

A. When activated, a General may move a maximum of four

+

spaces from the space in which he begins the activation (Ex-

+

ception: American Mobility Advantage; see 7.3.C). During

+

his move, a General may take up to five CUs with him. The

+

General may change the constitution of his Army while moving

+

by picking up and dropping off CUs along the way, but at no

+

time may that Army move with more than five CUs.

+

B. Movement is traced along the solid and dashed lines con-

+

necting adjacent spaces. The movement of an Army ends when

+

it enters a space containing an enemy CU. (Exception: Over-

+

runs 9.7) Movement is complete even if the enemy Army oc-

+

cupying the space successfully executes a retreat before battle.

+

C. Special American Mobility Advantage: American Gen-

+

erals and any CUs with them may move up to five spaces

+

provided that they do not execute an Overrun nor end the

+

move in a space occupied by any enemy CUs (i.e., the Army

+

may not move 5 spaces and enter into a Battle). American

+

Generals moving alone may also move five spaces subject to

+

normal movement restrictions; see 7.4. An American Army

+

may capture British Generals unaccompanied by CUs while

+

moving five spaces.

+

Special: The “John Glover Marblehead Regiment” Event

+

Strategy Card activates one American General who may move

+

up to six spaces and enter into Battle or execute one or more

+

Overruns, for that activation only. Remember that the card

+

text in an Event supersedes the rules.

+

Example: General Gates and four CUs begin in Ninety-Six.

+

The American player plays a 2 OPS Card to activate General

+

Gates, who moves, via Camden, two spaces to Eutaw Springs,

+

where he drops off two CUs. One space further along in

+

Charleston, three CUs await, and General Gates moves there

+

to pick them up (he now has his maximum of 5). He ends his

+

activation by moving one more space (total of 4) and ends his

+

movement in Savannah. Because Gates is an American General

+

and is participating neither in an overrun nor in a battle, he

+

could optionally continue his move to Augusta or St. Mary’s

+

(a total of 5 spaces.)

+

D. Wilderness Connections: Crossing a dotted line connection

+

counts as 3 spaces entered. American Armies can intercept and

+

retreat before battle along Wilderness Connections. See 7.4.D

+

for restrictions on the Falmouth-Quebec connection.

+
+
+

Washington’s War Rules Manual

+

12

+

© 2009, 2014 GMT Games, LLC

+

Example: moving from Fort Detroit to Basset Town, PA counts

+

as 3 spaces moved. A British Army which started moving in

+

Detroit could not enter Point Pleasant, VA in the same move

+

since that would count as another 3 spaces moved.

+

7.4 Restrictions on Movement

+

The following restrictions apply to movement at all times:

+

A. In order to enter a space containing an enemy CU, a Gen-

+

eral must be moving with at least one friendly CU. A General

+

moving without a CU may move through a space containing

+

an enemy General without accompanying CUs, but may not

+

stop in that space.

+

B. No General moving alone can enter a space with an enemy

+

PC marker.

+

C. A General may end his move, his retreat, or his intercep-

+

tion in the same space as another friendly General, whether

+

or not either General has CUs with him. If a General does end

+

a move in the same space as a friendly General, one of the

+

Generals—owner’s choice—must be placed in the Reinforce-

+

ments Box. General Washington may never be removed to the

+

Reinforcement Box.

+

Movement Clarification

+

Generals may move through spaces containing other

+

friendly Generals. 7.4.C. applies if a General stops in a

+

space with another friendly General.

+

D. Only one General in the game—Benedict Arnold—may

+

move, intercept, or retreat along the dotted line between Fal-

+

mouth, MA and Quebec. Arnold may do so either by himself

+

or with CUs. Note that this is also a Wilderness Connection

+

and counts as 3 spaces moved.

+

E. When a Campaign card is played, a specific CU may not be

+

moved by more than one General. Nor may the same General

+

activate more than once.

+

7.5 British Naval Movement

+

The British player may use Naval Movement to transfer Generals

+

(with or without CUs) from one eligible port to another. To conduct

+

Naval Movement, the activated British General must start the move

+

in an eligible Port space, use the entire move to transfer himself

+

and up to 5 CUs, and end in an eligible destination port. A port is

+

eligible for Naval Movement unless it contains an American CU

+

or an American PC marker (even if the space is also occupied by

+

British Generals/CUs). Additionally, any origin or destination port

+

in a Blockaded Zone is ineligible for Naval Movement.

+

7.6 Capturing Generals During Movement

+

A. Any time an Army enters a space containing an enemy

+

General unaccompanied by CUs (whether by Movement,

+

Interception, or Retreat), that General is captured. The Army

+

may continue moving. The Captured General is placed in the

+

Captured Generals Box, and during the Reinforcements Phase

+

of the following game-turn, he (like every other captured Gen-

+

eral) is placed in his side’s Reinforcements Box.

+

Design Note: Both sides in the Revolutionary War regularly

+

exchanged high ranking prisoners of war; this rule covers

+

that practice. By contrast, lower-ranking prisoners stayed in

+

squalid prison camps for long periods of time.

+

B. SPECIAL RULE: George Washington Capture: If

+

George Washington is captured, he is removed from the

+

game. The British player immediately removes 5 American

+

PC markers, no more than one per colony (including Canada)

+

in any space that does not contain an American CU, General,

+

or the Continental Congress. In addition, if France has not

+

yet entered the war move the French Alliance marker three

+

spaces to the negative.

+

7.7 Dispersing the Continental Congress

+

If the British Army enters the space containing

+

the Continental Congress and it is unaccompanied

+

by American CUs, the Congress is dispersed. The

+

British Army may continue moving. If a battle (or

+

overrun) takes place in the space occupied by the

+

Continental Congress and the American forces are eliminated or

+

forced to retreat, then the Continental Congress is dispersed.

+

When dispersed, place the Continental Congress marker into the

+

Continental Congress Dispersed Box on the map. The counter

+

comes back into play in the Political Control Phase. Note that

+

there are substantial restrictions to the American player while

+

the Congress is dispersed. (10.11.A.iv)

+

On the turn following the Congress being dispersed, it is the Brit-

+

ish player, not the American, who determines who goes first (5.3).

+

7.8 Interception (Americans only)

+

A. American Armies may intercept moving British Armies

+

under certain circumstances. The American player may attempt

+

to make an interception, subject to some restrictions, when

+

the British Army moves into an adjacent space that contains

+

an American PC marker. To resolve the interception attempt,

+

the American player rolls a die and compares the result to the

+

Agility Rating of the intercepting General. The interception

+

is successful if the result is less than or equal to the Agility

+

Rating; otherwise it fails.

+

B. Interception may not be attempted into spaces which al-

+

ready contain British CUs prior to the entry of the moving

+

Army. British Armies using Naval Movement (7.5) may not

+

be intercepted. British Generals moving without CUs may not

+

be intercepted.

+

C. Successful interception results in the placement of the inter-

+

cepting General and all CUs stacked with him into the space

+

just entered by the British Army. (Exception: If the intercepting

+

General is stacked with more than 5 CUs, all CUs in excess

+

of 5 remain in their original space.) Interception immediately

+

ends the British movement and initiates the Combat Resolu-

+

tion Procedure (9.2).

+

D. American Armies may intercept into spaces which already

+

contain American CUs. In this case the American player may

+

be required to remove an excess General of his choice to the

+

Reinforcement Box prior to the resolution of the battle. Once

+
+
+

Washington’s War Rules Manual

+

13

+

© 2009, 2014 GMT Games, LLC

+

an interception takes place, the Americans may not attempt a

+

retreat before battle.

+

E. Multiple Armies may attempt to intercept into the same space,

+

but the first successful interception immediately ends British

+

movement, causes a battle and prevents any further interceptions

+

by other Armies from occurring during that activation. No Army

+

may attempt interception more than once per Strategy Card

+

played by the British player; i.e., during a British Campaign

+

event each American Army is allowed a total of one interception

+

attempt. Whether an interception attempt is successful or not,

+

any Army attempting interception may not subsequently attempt

+

a Retreat Before Battle until the next Strategy Card is played.

+

F. When an interception is successful, the intercepting force is

+

considered to be in the space before the arrival of the moving

+

British Army. If the American Army is subsequently forced

+

to retreat, it may use any legal retreat route from that space, it

+

need not retreat back to the space from which it intercepted.

+

Conversely if the British Army is required to retreat, it must

+

retreat back into the space it left upon entering the intercept

+

space, even if this forces it to retreat back onto an American

+

PC (and thus is forced to Surrender, see 9.63).

+

Example: A British Army enters a space containing an Ameri-

+

can PC Marker, which is adjacent to an American Army led

+

by General Arnold. The American player chooses to attempt

+

interception by rolling the die. Since Arnold’s Agility Rating

+

is a 2, the attempt succeeds on a die roll of 1 or 2. If success-

+

ful, Arnold and his Army (up to 5 CUs) are placed into the

+

Interception space and a Battle is fought. If the die roll is 3

+

through 6, the interception attempt fails and the British Army

+

may continue moving. If any British Army, during the play of

+

this Strategy Card, attacks Arnold’s Army by entering its space,

+

they may not attempt to Retreat Before Battle.

+

7.9 Retreat Before Battle (Americans Only)

+

A. When a British Army enters a space containing an American

+

Army, the American player may attempt to retreat before battle.

+

To resolve the retreat before battle attempt, the American player

+

rolls a die and compares the result to the Agility Rating. If the

+

die roll result is less than or equal to the Agility Rating, the

+

retreat before battle attempt is successful.

+

Special Rule: Washington and Greene enjoy a special +2

+

modification to their Agility Rating when attempting retreat

+

before battle.

+

Reminder: An American Army that has attempted interception

+

(successfully or unsuccessfully) may not attempt retreat before

+

battle if subsequently attacked by a British Army at any point

+

during play of the same Strategy Card.

+

B. If the retreat before battle attempt is successful, the Ameri-

+

can Army conducts a retreat using the battle retreat mechanics

+

and restrictions in 9.61. If the American Army has more than

+

5 CUs, only the General and 5 CUs may be retreated. All

+

remaining CUs conduct battle or are overrun as appropriate.

+

If the retreat before battle attempt is unsuccessful, proceed

+

immediately to the Combat Resolution Procedure (9.2). The

+

British Army must stop moving in the space vacated in any

+

case, even if they overrun an American CU left behind. All

+

desired interception attempts resulting from the movement of

+

the British Army into the space need to be resolved before the

+

retreat from battle attempt is made.

+

C. There is no limit on the number of times that a particular

+

American Army may attempt to retreat before battle during a

+

single Strategy Phase; i.e., an American Army attacked during

+

each activation of a British Campaign Event may attempt to

+

retreat before battle in each case.

+

8.0 REINFORCEMENTS

+

During the Reinforcement Phase (5.1), captured Generals are

+

repatriated and potential reinforcing British CUs are determined.

+

Bringing on reinforcements during the Strategy Phase is optional.

+

Neither player is required to do so.

+

8.1 British Reinforcements

+

A. During the Reinforcements Phase, the British player trans-

+

fers all of his Generals currently in the Captured Generals

+

Box into his Reinforcements Box. He also places, from the

+

counter mix, the number of CUs equal to the number showing

+

in the current space on the Game Turn Record Track into the

+
+
+

Washington’s War Rules Manual

+

14

+

© 2009, 2014 GMT Games, LLC

+

Reinforcement Box. These CUs are added to any British CUs

+

currently in the Reinforcement Box. There is no limit to how

+

many or how long British CUs can remain in the Reinforce-

+

ments Box.

+

B. Once during the Strategy Phase of each game-turn, the

+

British player may bring on reinforcements by playing an

+

OPS Card, of any value, into the British Reinforcement Card

+

Box. Placing the OPS Card in the box serves as mnemonic to

+

both players that the British have conducted their reinforce-

+

ment activity.

+

C. To bring on reinforcements the British player transfers

+

any number of CUs from the British Reinforcements Box to

+

any one non-Blockaded Port space that does not contain an

+

American CU or PC marker. The British player may, but need

+

not, transfer one of his Generals from the Reinforcements Box

+

to that space. If a British General is already in the space and a

+

new General is brought on, the old General is removed to the

+

Reinforcements Box.

+

Clarifications: The General and all CUs desired (some may be

+

left in the Reinforcement Box) all arrive in the same eligible port

+

space. More than 5 CUs may be brought on if desired, and the

+

British may add these reinforcing CUs to any number of CUs

+

already in the space.

+

8.2 American Reinforcements

+

A. During the Reinforcements Phase (5.1), the American Player

+

transfers any American Generals currently in the Captured

+

Generals Box to his Reinforcements Box.

+

B. Twice during the Strategy Phase of each game-turn, the

+

American player may bring on reinforcements by playing

+

an OPS Card, of any value, into one of the two American

+

Reinforcement Card Boxes. Placing the OPS Card into a box

+

serves as mnemonic to both players that the Americans have

+

conducted one of their two possible reinforcement activities.

+

C. To bring on reinforcements, the American player transfers,

+

from stock, as many CUs as the number on the OPS Card (i.e.,

+

with a 3 OPS Card, 3 CUs) to a single space (just one space

+

guys, doesn’t matter how many OPS you spend or how many

+

CUs you place, you can only stick them all in one single,

+

space) that does not contain a British CU or PC marker. Ad-

+

ditionally he may also transfer to the same space a General

+

from the American Reinforcement Box. If there is an American

+

General already in the space, then the new General takes his

+

place and the old General is returned to the Reinforcement

+

Box. The replaced General may be brought back on during a

+

subsequent reinforcement activity even during the same Game-

+

Turn. Washington may never be sent to the Reinforcement Box,

+

so if CUs are brought on to reinforce Washington’s space, no

+

General may be brought on.

+

Clarification: PC marker status permitting, either player may

+

place reinforcements into a space which contains an enemy

+

General with no CUs. In such a case the General is captured.

+

9.0 BATTLES

+

Combat is resolved in two stages. First the winner of the battle is

+

determined by modified competitive die rolls. Once the winner is

+

ascertained, the number of CUs lost by each side is determined

+

and, unless one side is entirely eliminated, the loser executes a

+

retreat. Combat die rolls are modified by Army strengths, Gener-

+

als’ tactical abilities, Battle Cards and a number of other factors.

+

9.1 Battle Definition

+

A battle occurs when an activated General and his Army are in a

+

space with enemy CUs after any interception and retreat before

+

battle attempts have been resolved. Under some conditions an

+

Overrun (9.7) may occur instead, in which case the activated

+

General and his Army may continue moving. The activated

+

General and his Army are always considered the attacker, even

+

if an interception attempt was successful and resulted in a battle

+

unplanned by the activating player.

+

Design Note: The intercepting force is placed into the space

+

before the attacking force arrives, which causes the battle. The

+

intercepting force remains the defender, but one who selected

+

the actual field of combat and usually was able to prepare posi-

+

tions and surprise the attacker. Two clear historical examples

+

occurred at Monmouth and Cowpens. Interceptions only occur

+

on American PC Markers which represents both the lack of Tory

+

guides and the presence of rebel irregulars who interfered with

+

British reconnaissance and intelligence gathering.

+

9.2 Combat Resolution Procedure

+

Step 1: The attacker declares and plays a Battle Card or

+

discards an Event Strategy Card (6.33) if he wishes to do

+

so. Then the defender may play a Battle Card or discard an

+

Event Strategy Card. Each player may only play or discard

+

one card. (Special: If the “Benedict Arnold Treason!” event

+

is played (not discarded by the American player), take all the

+

actions specified on the card immediately. If the conditions for

+

an overrun now exist, conduct an overrun procedure in lieu

+

of continuing the battle procedure. Note that Arnold may be

+

removed from the battle space or from some other location on

+

the board. If Arnold is removed from the battle, the American

+

force, even if attacking, continues the battle.)

+
+
+

Washington’s War Rules Manual

+

15

+

© 2009, 2014 GMT Games, LLC

+

Step 2: Each player rolls a die to determine his General’s

+

Actual Battle Rating for this battle; see Table 9.3.

+

Step 3: The players determine and agree on the total die roll

+

modifiers (DRM) for each side using the procedures specified

+

in section 9.4.

+

Step 4: Each player rolls a die and adds to it the DRM for

+

their side. If the attacker’s total is greater than or equal to the

+

defender’s total, the attacker wins the battle.

+

Step 5: The CU losses to both sides are determined using the

+

procedures specified in section 9.5.

+

Step 6: The losing side, which may consist only of a General

+

if the losses were great enough, conducts a retreat using the

+

procedures specified in 9.6.

+

Step 7: If the Americans win, advance the French Alliance

+

Marker by one space (12.1). If the British lose 3 CUs or more,

+

including through Surrender (9.63), flip the Turn Counter to the

+

“No British Regulars Advantage” side if the British Regulars

+

Advantage is still in effect.

+

9.3 Determining a General’s Actual Battle

+

Ratings

+

A General’s Potential Battle Rating depicts the range of per-

+

formance that General and his subordinates may have during a

+

particular Battle. For each General, roll a die. On a die roll of

+

1-3, the General’s Battle Rating is halved (round fractions down);

+

on a die roll of 4-6, the General receives his full, printed Battle

+

Rating. Important Exception: A General’s Actual Battle Rating

+

can never be greater than the number of friendly CUs stacked

+

with him. If there is no General in the battle, then the Actual

+

Battle Rating is automatically zero. The Actual Battle Ratings

+

are included in each side’s calculation of the combat DRM as

+

described below.

+

Table 9.3 Actual Battle Rating

+

Die Roll General’s Battle Rating

+

+

1-3

+

General receives half Battle Rating (rounded down)

+

as a drm—but never greater than the number of

+

CUs in his Army.

+

+

4-6

+

General receives his printed, full Battle Rating as

+

a drm—but never greater than the number of CUs

+

in his Army.

+

9.4 Determining Combat Die Roll Modifiers

+

Each side calculates a Combat DRM by adding to the number of

+

CUs on that side all the appropriate modifiers. These modifiers

+

are tabulated in Table 9.4 and the conditions related to each are

+

described below.

+

Table 9.4 Combat Resolution Die Roll Modifiers

+

+X Where X is the number of CUs for that side

+

+Y Where Y is the Actual Battle Rating of that side’s

+

General (9.3)

+

+1

+

British Regulars’ Advantage (9.41)

+

+1

+

Royal Navy Support (9.42)

+

+1

+

Militia (9.43)

+

+2

+

American Winter Offensive (9.44)

+

+2

+

Battle Card (9.45)

+

+1

+

Discard of an enemy Event Card (9.45)

+

+1

+

Interception (9.46)

+

9.41 British Regulars’ Advantage

+

During set up of the game, the Game-Turn

+

marker is placed with the British “Regulars” side

+

face up on the Game Turn Record Track. The

+

British receive a +1 DRM in all battles until the

+

British Regulars’ Advantage is lost. The British

+

Regulars’ Advantage is lost immediately if the British lose 3 or

+

more CUs in a single battle or through Surrender (9.63). The

+

British may also lose the British Regulars’ Advantage as a result

+

of the play of the “Baron Von Steuben Trains the Continental

+

Army” Strategy Event Card.

+

When the British Regulars’ Advantage is lost, flip

+

the Game-Turn marker to the “No Regulars” side

+

for the remainder of the game. If the British

+

Regulars’ Advantage is lost during one of the

+

activations of a Major/Minor Campaign event, the

+

advantage is lost immediately and will apply during any subse-

+

quent battles caused by the remaining activations of the cam-

+

paign. When the British lose the British Regulars’ Advantage,

+

also advance the French Alliance marker by 2 spaces (unless

+

France has already entered the war; see 12.1).

+

9.42 Royal Navy Support

+

The British forces receive a +1 DRM for support by the Royal

+

Navy if the Battle takes place in a port space regardless of the

+

PC status of the port. (Exception: If the battle takes place in a

+

fortified port space [i.e., Charleston SC, Philadelphia PA, Que-

+

bec or Montreal] the DRM is only used if the space contains a

+

British PC marker.) The British do not receive the +1 DRM for

+

Royal Navy support if battle takes place in a port that is in a

+

Blockaded Zone (12.3).

+

9.43 Militia Support

+

The side with the most PC markers in the colony receives a +1

+

DRM for Militia. If both sides have equal numbers of PC markers

+

in the colony then neither player receives this DRM. To control

+

the Canadian Militia, Montreal and Quebec must be controlled.

+
+
+

Washington’s War Rules Manual

+

16

+

© 2009, 2014 GMT Games, LLC

+

9.44 American Winter Offensive

+

If an American Army commanded by Washington is the at-

+

tacker and it was activated by the last Strategy Card played in

+

the Strategy Card Phase, then the American force receives a +2

+

DRM. If the last Strategy Card played is a Campaign card, then

+

Washington’s Army (only) receives this DRM regardless of the

+

sequence of activations.

+

9.45 Battle Card Bonus

+

Event Strategy Cards can be used to generate Battle DRM ben-

+

efits. During Step 1 of the Combat Resolution Procedure (9.2)

+

each player (attacker first) can play, or discard, one Event Strategy

+

Card to receive a DRM; see 6.33. Event Strategy Cards which are

+

Battle Cards (those cards with their titles printed in a colored box)

+

provide a +2 DRM. A discarded Event Strategy Card provides a

+

+1 DRM. (Reminder: It should be noted that Rule 6.33 does not

+

permit the retrieval of an Event Strategy Card discarded for the

+

purposes of gaining a +1 DRM in battle.) Event Strategy Cards

+

used for this purpose apply only to a single battle even during

+

activations caused by a Major/Minor Campaign Event. In the

+

event that Battle Cards were played during battles generated by

+

a Major/Minor Campaign Event, delay drawing cards pursuant to

+

the cards’ instructions until after all activations of the campaign

+

have been completed.

+

9.46 Interception Bonus

+

The American side receives a +1 DRM if there was a successful

+

interception attempt; see 7.8.

+

9.5 Determining Combat Losses

+

During Step 5 of the Combat Resolution Procedures, both sides

+

determine their losses.

+

The loser of the battle rolls a die:

+

• on a die roll of 1, 2 or 3, 1 CU is lost;

+

• on a die roll of 4 or 5, 2 CUs are lost;

+

• on a die roll of 6, 3 CUs are lost.

+

The winner of the battle rolls a die:

+

• If the losing side had no General, the winning side los-

+

es 1 CU if the die roll is 1.

+

• If the losing General has an Agility Rating of 1, the

+

winning side loses 1 CU if the die roll is 1-2.

+

• If the losing General has an Agility Rating of 2, the

+

winning side loses 1 CU if the die roll is 1-3.

+

• If the losing General has an Agility Rating of 3, the

+

winning side loses 1 CU if the die roll is 1-4.

+

Special: Casualties could potentially leave a winning General

+

with no CUs. In such a case, if the General is on a space contain-

+

ing a friendly PC marker or on an uncontrolled space he remains

+

on the map with no CUs; but if he is located in a space with an

+

enemy PC marker, he is captured.

+

9.6 Resolving Retreats

+

9.61 Retreat Mechanics

+

A. The losing General and Army must retreat to an adjacent

+

space that is not occupied by an enemy CU nor an enemy PC

+

marker. If this basic requirement cannot be satisfied, the losing

+

General and Army must Surrender (9.63).

+

B. Subject to the basic retreat requirements, if the attacker

+

loses the battle, the surviving General and Army must retreat

+

into the space from which it entered the battle. If the defender

+

loses the battle the surviving General and Army may retreat

+

into any space other than the one from which the attack origi-

+

nated. The retreating force may not be split up; all must retreat

+

to the same space. A defending Army which intercepted into

+

the battle space is not required to retreat into the space from

+

which it intercepted.

+

Retreat Clarification

+

Surviving Combat Units (attacker or defender) without a

+

General may retreat after losing a battle (such British CUs

+

may retreat by sea if otherwise eligible). Note that the at-

+

tacker could be left without a General if Benedict Arnold

+

is the attacking General and the Benedict Arnold event is

+

played as a Battle Card by the defender.

+

+

9.62 British Retreat By Sea

+

A defending British General and any surviving CUs that lose a

+

battle in a port space may be able to retreat by sea. Retreat by

+

sea is only allowed if the battle space is not a blockaded port and

+

is not a fortified port (Charleston SC, Philadelphia PA, Quebec,

+

or Montreal) without a British PC marker in it. The retreating

+

force may retreat to any other non-Blockaded port that does not

+

contain an American CU or PC marker. The British player may

+

choose to retreat by sea even if other legal retreat options exist.

+

Note that the British may not retreat by sea when they are the

+

attacker because the attacker must retreat to the space from which

+

they entered the battle. American and French Generals and CUs

+

can never retreat by sea.

+

9.63 Surrenders

+

If a General and surviving CUs cannot conduct a legal retreat,

+

they must Surrender. CUs that Surrender are eliminated, while

+

Surrendering Generals are captured. Place the General counter

+

into the Captured Generals Box on the map board; see 7.6.

+

A. If the attacker enters the battle from a space that contains

+

an enemy PC marker and loses, then the attacking Army must

+

Surrender since it must retreat back to the space from which it

+

entered the Battle and that space contains an enemy PC marker.

+

B. The defending General and any surviving CUs must Sur-

+

render if:

+

• all of the spaces adjacent to the battle space contain

+

enemy CUs or PC markers, and

+

• a retreat by sea is not possible, and

+

• the only remaining space is the space from which the

+

attacker entered the battle (which is not a legal retreat

+

space for the defender).

+
+
+

Washington’s War Rules Manual

+

17

+

© 2009, 2014 GMT Games, LLC

+

Design Note: Moving an Army into battle from an enemy con-

+

trolled space is very risky because if you lose the battle the

+

Army will have to Surrender. Effectively this is what happened

+

to General Burgoyne at the Battle of Saratoga.

+

Combat Example: General Burgoyne and 5 CUs march into

+

Saratoga by way of Ticonderoga. American General Gates and

+

5 American CUs are in Saratoga. Not wishing to retreat before

+

battle, Gates stands and fights. The British discard an Event card

+

to gain a +1 DRM. The Americans play Battle Event, “Morgan’s

+

Riflemen” for a +2 DRM. Next, each General rolls a die to deter-

+

mine their Actual Battle Rating. Burgoyne rolls a “4” and receives

+

his full, printed Battle Rating of “2” for a +2 DRM. Gates rolls

+

a “1” and receives only half of his printed Battle Rating for a +1

+

DRM.” Next, both players determine their combat DRMs: The

+

British get +5 for their 5 CUs, +2 for General Burgoyne’s Battle

+

Rating (determined above), +1 for the British Regulars bonus

+

(which is still in effect), and +1 for the discard of an Event card

+

for a total of +9. The Americans get +5 for their 5 CUs, +1 for

+

Gates’ Battle Rating (determined above), +1 for the militia of New

+

York (the Americans control more PC markers in the Colony), and

+

+2 for the play of the Battle Event for a total of +9. Each player

+

then rolls a die and adds their Combat DRM: The British roll a

+

“3” which is modified to 12. The Americans roll a “4” which is

+

modified to “13.” The attacker’s modified die roll must be greater

+

than or equal to the defender’s modified die roll in order to be

+

victorious. In this case, the attacker’s modified roll is less than

+

the defender’s modified roll so the Americans win! Next, combat

+

losses must be determined. The British lost the battle so they roll

+

a die and consult the Combat Losses Chart (9.5). Rolling a “5”

+

they lose 2 CUs and must retreat. The Americans must check to

+

see if they suffer any losses. Noting the losing General’s Agility

+

Rating (Burgoyne has an Agility of “1”), the Americans roll a die

+

and consult the Combat Losses Chart (9.5). Rolling a “2” the

+

Americans find they lose 1 CU. Note that the winner will never

+

lose more than 1 CU and will often times not suffer any losses.

+

Now the losing General must retreat what is left of his Army. Since

+

Burgoyne was the attacker and must retreat, he must retreat to the

+

space from which he entered combat—in this case, Ticonderoga.

+

Unfortunately, this space is American-controlled. This results

+

in Burgoyne surrendering the remainder of his Army. Burgoyne

+

is placed in the “Captured Generals” box and his 3 CUs are

+

removed from the map and placed back into the player’s stock.

+

Since the British lost 3 or more CUs in this battle, the British lose

+

their “Regulars” advantage for the remainder of the game. The

+

Turn marker is flipped on the Turn track to note this. The French

+

Alliance marker is adjusted +1 for the American victory and +2

+

for the loss of the British Regulars.

+

9.7 Overruns

+

An overrun occurs when an activated General with either 4 or 5

+

CUs enters a space occupied by 1 enemy CU without a General.

+

The moving Army declares an overrun, removes the enemy CU,

+

and if it has any remaining movement may continue. Any inter-

+

ception attempts are resolved before the overrun is conducted.

+

After a successful overrun the activated Army does not roll for

+

losses. If a defending General is present or there is more than 1

+

CU present, the attacking Army must end its movement and a

+

battle occurs. (Clarification: If the Arnold counter is removed as

+

a result of play of the “Benedict Arnold Treason!” Battle Card,

+

the General is removed as Step 1 of the Combat Resolution

+

Procedure. If at that time only 1 American CU remains, and the

+

British are attacking with either 4 or 5 CUs, an overrun occurs.

+

If the Americans are attacking when Arnold is removed, even

+

with 4 or 5 CUs, an overrun does not occur and battle results).

+

10.0 POLITICAL CONTROL

+

A. Political control of the colonies and Canada determines

+

who wins a game of Washington’s War. Political control is

+

determined by the number of PC markers in each colony. Each

+

space on the board may be in one of three states:

+

• American control, denoted by an American PC marker;

+

• British control, denoted by a British PC marker, or

+

• Uncontrolled, denoted by the absence of a PC marker.

+

No space ever contains more than one PC marker.

+

B. Colonies are controlled by the side that has the majority

+

of PC markers in them. If both sides have equal numbers,

+

or if there are no PC markers in the colony, the colony is

+

uncontrolled. Canada is not a colony, but will count toward

+

achieving Victory Conditions (13.0). To control Canada, the

+

controlling side must control both the Montreal and Quebec

+

spaces. Control of Fort Detroit is irrelevant in determining

+

control of Canada.

+

C. Players may place friendly PC markers and remove en-

+

emy PC markers through play of Strategy Cards during the

+

Strategy Phase (5.3). Players also place friendly PC markers

+

and remove enemy PC markers during certain activities of the

+

Political Phase (5.6).

+
+
+

Washington’s War Rules Manual

+

18

+

© 2009, 2014 GMT Games, LLC

+

10.1 Placing and Removing PC Markers during

+

the Strategy Phase

+

10.11 Placing and Flipping PC Markers with OPS Cards

+

Each side uses a slightly different mechanic for placing PC

+

markers with OPS Cards.

+

A. American:

+

(i.) To place or flip PC markers, the American

+

plays an OPS Card face up on the Discard

+

pile. The number on the OPS Card indicates

+

how many PC actions he may take, i.e., how

+

many PC markers he may potentially place

+

or flip. Example: If a 3 OPS Card is played

+

the American could place up to three American PC markers

+

or flip up to three British PC markers to the American side

+

or any combination of placing and flipping, subject to the

+

restrictions on both.

+

(ii.) As one PC action the American player can place an

+

American PC marker into any space not containing a PC

+

marker of either side nor containing a British CU. (Excep-

+

tion: see iv below.)

+

(iii.) As one PC action the American player may flip a Brit-

+

ish PC marker to its American PC marker side if there is

+

an American General in the space. The American General

+

does not need to have any CUs in the space. Note: Generals

+

without CUs may not move into a space with an enemy PC

+

(7.4), so the situation where an American General is in a

+

space with a British PC only occurs through some indirect

+

combination of moves/events.

+

Design Note: This rule differs from the similar rule for the

+

British and gives the Americans a slight edge. It represents

+

the ability of the American leaders (political as well as

+

Generals) to revitalize the revolution in areas that were not

+

garrisoned by British troops.

+

(iv.) Continental Congress dispersed (“Pennsylvania

+

and New Jersey Line Mutinies”): The American player

+

may not use OPS Cards or an Event discard to place PC

+

Markers if the Continental Congress is dispersed (7.7) or

+

if the “Pennsylvania and New Jersey Line Mutinies” Event

+

Strategy Card has been played as the event during the current

+

turn. The Americans may still flip PC markers with an OPS

+

Card play (see iii above). The Americans can still remove

+

PC markers by discarding an Event card (6.32.B.iii). The

+

Americans can still play Events to place PC markers.

+

Continental Congress Dispersed Clarification

+

In addition to the ability to use an OPS card to flip (but

+

not place) a PC under these conditions, the Americans

+

may discard an event to flip (but not place) a PC marker

+

as in 10.11.A.iii.

+

B. British:

+

(i.) To place or flip PC markers, the British

+

play an OPS Card face up on the Discard

+

pile. The number on the OPS Card indicates

+

how many PC actions he may take, i.e., how

+

many PC markers he may potentially place

+

or flip. Example: If a 2 OPS Card is played

+

the British could place up to two British PC markers or flip

+

up to two American PC markers to the British side or any

+

combination of placing and flipping, subject to the restric-

+

tions on both.

+

(ii.) As one PC action the British player can place a British

+

PC marker into any space not containing a PC marker of

+

either side, nor containing an American Unit. Important: All

+

new British PC markers must be placed in spaces adjacent to

+

spaces already containing British PC markers. PC markers

+

newly placed or flipped as a result of a PC action taken with

+

the play of the current OPS Card do not satisfy the require-

+

ment that new played British PC markers be placed adjacent

+

to existing British PC markers (i.e., no “daisy chaining”).

+

Example: The British begin the game with a PC marker

+

in Montreal. The British player plays a 2 OPS Card and

+

declares he will use it to place PC markers. The first PC

+

marker is placed in Oswego which is adjacent to Montreal.

+

The second PC marker, however, may not be placed in Fort

+

Stanwix even though Fort Stanwix is adjacent to Oswego

+

since Oswego did not have a PC marker at the beginning

+

of the card play. The second PC marker will have to be

+

placed elsewhere.

+

Important: For the British, all ports are considered to be

+

adjacent to each other for all purposes regardless of the

+

placement of the French Navy if present.

+
+
+

Washington’s War Rules Manual

+

19

+

© 2009, 2014 GMT Games, LLC

+

(iii.) As one PC action the British player may place a Brit-

+

ish PC marker or flip an American PC marker to its British

+

PC marker side if there is a British Army (i.e., a General

+

and at least 1 CU) in the space. This action can take place

+

in any space; it need not be adjacent to an existing British

+

PC marker.

+

Design Note: This capability allows the British player to

+

move an Army into a new area, gain control of one space and

+

then, in subsequent card plays, begin placing PC markers

+

adjacent to the recently controlled space. This represents the

+

ability of the British Army to systematically pacify a region

+

through the use of selective arrests, local offers of amnesty,

+

seizure of armament stores and gaining political control of

+

local militias and community governments. Howe’s pacifi-

+

cation of New Jersey in the late summer and fall of 1776

+

provides an historical example.

+

10.12 Placing and Removing PC Markers with Event

+

Strategy Cards

+

A. During the Strategy Phase, Event Strategy Cards played as

+

events may allow for the placement or removal of PC markers.

+

The conditions pertaining to these events vary widely from card

+

to card so it is important to implement the text on the card spe-

+

cifically and literally. For example an enemy PC marker may

+

not be flipped if the event text specifies “place PC markers”.

+

There are usually geographic constraints as well as restrictions

+

regarding the other counters that may be in the space.

+

B. Event Strategy Cards may also be discarded per Rule 6.32

+

to allow one PC action to be taken on a space adjacent to a

+

current friendly PC marker. Important: The restriction that

+

the PC being placed or removed be adjacent to a friendly PC

+

applies to both sides in this case. That action may be to:

+

• place or flip one PC adjacent to a friendly PC subject

+

to the additional restrictions for each side in itemized

+

in Rule 10.11, or

+

• remove one enemy PC from a space which is adjacent

+

to a space containing a friendly PC counter and that is

+

not occupied by an enemy CU, an American General or

+

the Continental Congress.

+

Play of any Campaign Event Strategy Card by the British

+

provides the option of executing a Landing Party which al-

+

lows the British player to place a British PC marker or flip an

+

American PC marker under certain circumstances; see 7.2.B.

+

10.2 The Political Control Phase

+

The Political Control Phase consists of three segments, executed

+

in specific order:

+

1. Continental Congress Segment

+

If the Continental Congress counter is in the Continental

+

Congress Dispersed Box, the American player must place

+

it in on the map, in any space in the Thirteen Colonies (not

+

Canada) containing an American PC Marker but no British

+

playing pieces. If there are no such spaces available, the

+

Continental Congress counter remains out of play until the

+

Continental Congress Segment of the next Game-Turn. Note

+

that dispersing and subsequent placement in a different space

+

is the only way in which the Continental Congress counter

+

can change locations on the map.

+

2. Place PC Markers Segment

+

Each player places a PC marker in any uncontrolled space

+

and flips to friendly control any enemy PC marker in any

+

space currently occupied by one of his Armies. British

+

players place/flip PC markers even in spaces which are not

+

adjacent to extant British PCs. Neither side may place PC

+

markers in spaces that are occupied by a friendly General

+

with no CUs nor occupied by CUs without a General.

+

3. Remove Isolated PC Markers Segment

+

The American player removes all of his PC markers that

+

are isolated as defined in Section 10.3. After all isolated

+

American PC markers have been removed, the British player

+

removes all of his PC markers that are isolated. Because the

+

American player removes PC markers first, British PC mark-

+

ers that appeared to be isolated may no longer be isolated.

+

10.3 Determining PC Marker Isolation

+

During the Remove Isolated PC Markers segment of the Politi-

+

cal Control Phase, each player, in turn, American player first,

+

evaluates each friendly PC marker to determine if it is isolated.

+

Determining PC marker isolation differs slightly for each side.

+

10.31 American PC Marker Isolation

+

A. An American PC marker is NOT isolated if it can trace a

+

path through adjacent American controlled spaces to:

+

• an uncontrolled space that does not contain a British

+

CU, or

+

• a space containing the Continental Congress, or

+

• an American controlled space containing an American

+

or French CU, or

+

• an American controlled space containing an American

+

or French General.

+

(Note: The path traced to avoid possible isolation may be

+

traced through American controlled spaces that are occupied

+

by British CUs or British Generals unaccompanied by CUs.)

+
+
+

Washington’s War Rules Manual

+

20

+

© 2009, 2014 GMT Games, LLC

+

Example 1: Newport, RI (space “C”) is uncontrolled. The Ameri-

+

can PC markers in space “B” and space “A” can trace to space

+

“C” since it is uncontrolled and does not contain a British CU.

+

If space “C” contained a British CU, then both spaces “A” and

+

“B” would be isolated.

+

Example 2: Newport, RI (space “C”) contains the Continental

+

Congress. The American PC markers in spaces “A” and “B” can

+

trace to space “C” since it contains the Continental Congress.

+

Space “C” would never be isolated since its space contains the

+

Continental Congress.

+

Example 3: Spaces “A,” “B” and “C” each contain American

+

PC markers. Space “A” contains an American CU. This allows

+

the PC markers in spaces “B” and “C” to trace to space “A.”

+

The same would be true if space “A” contained a French CU,

+

or an American/French General (with or without CUs). If space

+

“A” did not contain an American/French CU or General then

+

all three spaces would be isolated and removed. If space “C”

+

contained a British CU, space “B” would still be able to trace

+

through space “C” to the American CU in space “A” since space

+

“C” contains an American PC marker.

+

B. If the PC marker is isolated, it is removed during the Remove

+

Isolated PC Markers Segment. If there are adjacent American

+

PC markers that are also isolated, all adjacent isolated Ameri-

+

can PC markers are removed simultaneously.

+

10.32 British PC Marker Isolation

+

A. A British PC marker is not isolated if it can trace a path

+

through adjacent British controlled spaces to:

+

• An uncontrolled space that does not contain an Ameri-

+

can/French CU or General, or

+

• a British controlled port, including itself, regardless of

+

the port’s Blockade status, or

+

• a British controlled space containing a British CU.

+

(Note: The path traced to avoid possible isolation may be

+

traced through British controlled spaces that are occupied by

+

American/French CUs or American/French Generals unac-

+

companied by CUs.)

+

Example 1: Hartford, CT (space “B”) is uncontrolled. Space “A”

+

can trace to the uncontrolled space “B” and thus avoid isola-

+

tion. If space “B” contained an American PC marker, space “A”

+

would still not be isolated since the British can always trace to

+

a British-controlled port. Space “A,” being a British-controlled

+

port, would therefore, never be isolated. If Space “B” contained

+

an American/French CU or an American/French General and

+

space “A” were not a port, then space “A” would be isolated.

+
+
+

Washington’s War Rules Manual

+

21

+

© 2009, 2014 GMT Games, LLC

+

Example 2: Space “A” is British-controlled but is surrounded by

+

spaces “B,” “C,” and “D” which contain American PC mark-

+

ers. Space “A” is not isolated because it contains a British CU.

+

Example 3, Mutual Isolation: Spaces “A” and “B” are British-

+

controlled and isolated by virtue of the American PC markers

+

in all the adjacent spaces. Spaces “C” and “D” are American-

+

controlled and are similarly isolated by the surrounding British-

+

controlled spaces. American isolated PC markers are removed

+

before the isolated British PC markers. In this case, when this

+

is done, spaces “C” and “D” will be uncontrolled. This then

+

allows spaces “A” and “”B” to trace to the newly uncontrolled

+

spaces “C” and “D.” No longer isolated, the British PC markers

+

in spaces “A” and “B” remain on the map and are not removed.

+

B. If the PC marker is isolated, it is removed during the Remove

+

Isolated PC Markers Segment.

+

If there are adjacent British PC markers that are also isolated,

+

all adjacent isolated British PC markers are removed simul-

+

taneously.

+

Design Note: The PC Isolation rules represent the gradual

+

solidification of popular support in a region. While a space

+

remains uncontrolled, the actual sentiments of the region

+

are indeterminate. Once all the spaces are controlled, local

+

sentiments crystallize and the minority opinion is driven un-

+

derground unless they are supported by regular troops (British

+

or American) or by a reasonably well organized and supported

+

militia (i.e., an American/French General).

+

11.0 WINTER ATTRITION

+

In the Winter Attrition Phase (5.4), CUs are subject to removal.

+

There are different rules for British, American and French CUs.

+

Winter Quarters spaces are denoted on the map by a square or a

+

eight-point star (fortified port) space. Generals, the Continental

+

Congress, and the French Navy are always immune to Winter

+

Attrition.

+

11.1 British

+

British CUs in a Winter Quarters space, or south

+

of the Winter Attrition Line, do not lose any CUs

+

due to Winter Attrition. British CUs north of the

+

Winter Attrition Line, that are not in a Winter

+

Quarters space, lose half their strength, fractions

+

rounded down. For example, 5 British CUs in Reading PA would

+

lose 2.5 CUs rounded down to 2 CUs, leaving 3 CUs in the space.

+

Similarly, a space containing 3 CUs would be reduced to 2 CUs.

+

An Army with 1 CU never loses any CUs to Winter Attrition. To

+

determine the Winter Attrition result for a single British CU,

+

unaccompanied by a General, north of the Winter Attrition Line

+

and not in a Winter Quarters space, roll a die. On a die roll of

+

1-3, remove the CU from the map. On a die roll of 4-6, the CU

+

avoids Winter Attrition.

+

11.2 American

+

American CUs suffer Winter Attrition regardless

+

of their location. Stacks of American CUs lose

+

half their strength, fractions rounded down. A

+

single American CU in a space if accompanied

+

by an American or French General is never re-

+

moved for Winter Attrition. To determine the Winter Attrition

+

result for a single American CU, unaccompanied by a General,

+

roll a die. On a die roll of 1-3, remove the CU from the map. On

+

a die roll of 4-6, the CU avoids Winter Attrition. (Note: One

+

playtester uses the mnemonic rhyme: “One through threes, it

+

flees; four through six, it sticks.”)

+

Important Exception: Up to 5 CUs stacked with General

+

Washington are exempt from Winter Attrition losses if they are

+

in a Winter Quarters space or are south of the Winter Attrition

+
+
+

Washington’s War Rules Manual

+

22

+

© 2009, 2014 GMT Games, LLC

+

Line. If Washington is stacked with more than 5 CUs, all the

+

excess CUs are evaluated for Winter Attrition as if they were

+

alone in the space.

+

Example: Washington and 6 CUs are in Philadelphia PA, a

+

Winter Quarters space. Five CUs are exempt from loss. The fate

+

of the sixth CU must be determined by die roll.

+

11.3 French

+

French CUs that are in a space with at least one

+

American CU suffer Winter Attrition as if they

+

were American CUs. French CUs that are in a

+

space with only French CUs suffer Winter Attri-

+

tion as if they were British CUs. When both

+

French and American CUs are in the same space, the American

+

player determines which CUs are removed for losses, if any.

+

12.0 French Alliance

+

There is a ten space French Alliance Track on the

+

map numbered from 0 to 9. The final space on the

+

track is the “French Alliance Space.” At the begin-

+

ning of the game, the French Alliance Marker is

+

placed in the 0 space on the track.

+

12.1 Moving the French Alliance Marker

+

The French Alliance Marker may advance (towards the “French

+

Alliance” space) or decrease (away from the “French Alliance”

+

space) as follows:

+

• Each time the British lose a battle the marker is ad-

+

vanced +1 space. Overruns count as a battle for this

+

purpose.

+

• If the British lose the “Regulars” advantage (for any

+

reason), the marker is advanced +2 spaces. This can

+

only occur once per game.

+

• When the “Hortelez et Cie Clandestine French Aid”

+

Event Strategy Card is played as an event, the marker

+

is advanced +2 spaces.

+

• When the “Benjamin Franklin: Minister to France”

+

Event Strategy Card is played, the marker is advanced

+

+4 spaces.

+

• If George Washington is captured (and consequently re-

+

moved from the game), the marker is decreased -3 spac-

+

es (away from the “French Alliance” space). Note that

+

the marker cannot be decreased lower than the “0” box.

+

12.2 Consequences of French Alliance

+

A. When the French Alliance marker enters the “French Al-

+

liance” space on the French Alliance Track (space 9 on the

+

track), the French sign an alliance with the Americans, enter

+

the war, and a multinational European War soon breaks out.

+

The French Alliance Track and marker are no longer needed

+

for the rest of the game.

+

B. The French Alliance event is implemented after the current

+

Strategy Card has been fully resolved. Additional activations

+

of a Major/Minor Campaign Strategy Event, if necessary, are

+

completed before the French Alliance event is implemented.

+

Implement the French Alliance by taking the following actions:

+

(i.) The American player places the French Navy in any

+

Blockade Zone on the map. During subsequent French Navy

+

Phases (5.5), including the current Game-Turn, the American

+

player may reposition the French Navy.

+

(ii.) The American player places the French General Ro-

+

chambeau and the 5 French CUs in any single port space

+

that does not contain a British CU or a British PC marker.

+

If no port spaces meeting these restrictions are available,

+

Rochambeau and the French CUs are placed in the American

+

Reinforcements Box. The American player does not have

+

the option of delaying the placement of the French Forces

+

if a suitable port exists. Thereafter, the American player can

+

bring them into the game by playing an OPS Card of any

+

value into one of the American Reinforcement Boxes and

+

placing all the French forces into a single port that does not

+

contain a British CU or a British PC marker. If any French

+

forces are brought on as Reinforcements, then all must be

+

brought on; the American cannot bring on some at one time,

+

and others at a different time.

+

(iii.) Flip the French Alliance Marker to its

+

European War side Place and place it on the

+

next Game-Turn of the Game-Track as a

+

mnemonic that the European War will be in

+

effect. The European War does not occur

+

until the End Phase (5.7) of the current Game-turn. Many

+

Strategy Event Cards have conditions that require that the

+

European War to be in effect or not in effect. The remainder

+

of the current Strategy Phase is played with the European

+

War not in effect. During the End Phase of the current Game-

+

Turn, the British Player removes 2 British CUs from any

+

space or spaces on the map. These CUs may be removed

+

from any spaces on the map, including Blockaded Ports, at

+

the British player’s option. They may be removed from two

+

different spaces. They may not be removed from the British

+

Reinforcement Box.

+

(iv.) Reshuffle the deck at the end of the turn.

+

Design Note: The outbreak of General war in Europe had a

+

large, but mixed, impact on the American Revolution. There

+
+
+

Washington’s War Rules Manual

+

23

+

© 2009, 2014 GMT Games, LLC

+

was a revival of previously waning British popular support

+

for continuing the conflict now that their historical foes—the

+

French, Spanish and Dutch—were involved. The British army

+

and navy were increased in size, but many additional domin-

+

ions, particularly in the West Indies, were now at risk. Lord

+

Germain was forced to divert troops and other support from

+

North America to protect these locations. Events occurring

+

all over the world, including as far away as the Indian Ocean,

+

begin to impact the war in the Thirteen Colonies. These events

+

are reflected by a number of Event Strategy Cards.

+

C. Rochambeau and French CUs are treated

+

identically as American Generals and CUs in

+

every respect except Winter Attrition (11.0). When

+

activated Rochambeau can move both American

+

and/or French CUs. Rochambeau may be used to attempt in-

+

terception or retreat before battle. American Generals, when

+

activated may move French CUs as if they were American.

+

During PC actions, either in the Strategy Phase or the Political

+

Phase, French CUs and Rochambeau are treated as American

+

CUs and Generals. During Winter Attrition French CUs may

+

be treated as either American or as British depending on the

+

composition of CUs in each space; see 11.3. The 5 French CUs

+

can only enter the game via the French Alliance and cannot

+

be replaced if eliminated during play. All references in the

+

rules or on the cards to an American General or American units

+

includes Rochambeau and French CUs.

+

12.3 French Navy

+

The French Navy has several game effects that

+

affect the British. When brought on initially and

+

during every subsequent French Navy Phase, the

+

French Navy may be placed in any one of seven

+

Blockade Zones. Once in play the French Navy

+

marker can only be moved during the French Naval

+

Phase. Every port space on the map is in one of the

+

Blockade Zones:

+

Blockade Zone

+

Ports

+

St. Lawrence

+

Montreal, Quebec

+

New England

+

Falmouth (MA), Boston (MA), Barn-

+

stable (MA), Newport (RI)

+

Long Island Sound

+

New York (NY), Long Island (NY),

+

New Haven (CT)

+

Delaware

+

Philadelphia (PA), Wilmington (DE)

+

Chesapeake

+

Baltimore (MD), Alexandria (VA),

+

Yorktown (VA), Norfolk (VA)

+

Carolinas

+

Wilmington (NC), New Bern (NC),

+

Charleston (SC)

+

South Atlantic

+

Savannah (GA), St. Mary’s (GA)

+

When the French Navy is in a Blockade Zone, all the ports in

+

that zone are affected in five ways:

+

• No port in the Blockaded Zone may receive British Re-

+

inforcements (8.1).

+

• No British Naval Movement (7.5) into or out of a port

+

in a Blockaded Zone is allowed.

+

• No Landing Party (7.2.B) activations may flip Ameri-

+

can PC counters in a Blockaded Zone.

+

• The British may not retreat by sea (9.62) from a port in

+

a Blockaded Zone.

+

• The British do not receive a +1 DRM for Royal Na-

+

val Support (9.42) for combat that takes place in a port

+

space in a Blockaded Zone.

+

Important Note: For purposes of placing, flipping, removing

+

and determining PC isolation (10.0) the Blockade status of a

+

port is irrelevant.

+

If the “d’Estaing Sails to the Caribbean” Event Strategy Card is

+

played, the French Fleet is removed from its Blockade Zone and

+

placed on the current space on the Turn Track. It is placed into any

+

desired Blockade Zone Box during the next French Navy Phase.

+

13.0 VICTORY

+

13.1 Automatic Victory

+

An Automatic Victory may occur during the Strategy Phase or the

+

Winter Attrition Phase of any turn. A British Automatic Victory

+

occurs the instant no American or French Combat Units remain

+

on the map including Canada. An American Automatic Victory

+

occurs the instant no British Combat Units remain in any of the

+

13 Colonies (excluding Canada).

+

13.2 Game Ends Victory

+

If the game ends due to the “North’s Government Falls—War

+

Ends” Special Event Strategy Card, determine the winner by

+

counting the colonies controlled by each side. Canada is counted

+

as a colony for victory determination. The British win if they

+

control six or more colonies at the end of the game. The Ameri-

+

cans win if they control seven or more colonies at the end of the

+

game. If the British and the Americans both achieve victory or

+

neither player achieves victory, then the British win by default.

+

The side with the most Political Control markers in the colony

+

controls the colony. If tied, neither player controls the colony. To

+

control Canada, both Montreal and Quebec must be controlled;

+

see 10.0.

+

For ease of play, square Colony Control

+

markers have been provided for use on

+

the Colony Control Schematic on the

+

map.

+
+
+

Washington’s War Rules Manual

+

24

+

© 2009, 2014 GMT Games, LLC

+

GMT Games, LLC

+

P.O. Box 1308 Hanford, CA 93292-1308

+

www.GMTGames.com

+

Activation

+

Campaign Card Activation: 7.2

+

General Activation: 7.1, A

+

Operations Queue Activation: 7.1, B

+

Army

+

Definition: 3.0

+

Placing PC Markers: 10.11 B iii

+

Attrition

+

American Attrition: 11.2

+

British Attrition: 11.1

+

French Attrition: 11.3

+

Winter Attrition Phase: 5.4

+

Winter Attrition: 11.0

+

Battle

+

American Winter Offensive: 9.44

+

Battle Card Bonus: 9.45

+

Battle Cards: 9.45

+

Battle Definition: 9.1

+

British Regulars Advantage: 9.41

+

Combat Die Roll Modifiers: 9.4

+

Combat Losses: 9.5

+

Combat Resolution: 9.2

+

General’s Actual Battle Rating: 9.3

+

Interception Bonus: 9.46

+

Overruns: 9.7

+

Retreat from Battle: 9.6

+

British Retreat By Sea: 9.62

+

Retreat Mechanics: 9.61

+

Royal Navy Support: 9.42

+

Surrender: 9.63

+

British Navy

+

British Naval Movement: 7.5

+

Landing Party: 7.2, B

+

Royal Navy Battle Support: 9.42

+

British Regulars

+

British Regulars Combat Modifier: 9.41

+

Losing British Regulars: 9.41, 12.1

+

Canada

+

Canada as Colony: 13.2

+

Canada Control: 10.0 A/B

+

Cards

+

Battle Cards

+

Battle Card Bonus: 9.45

+

Battle Card Definition: 3.0

+

Dealing Cards: 6.1

+

Event Strategy Cards

+

Battle Card Use: 6.33

+

Discarding: 6.32

+

Event Strategy Card Definition: 3.0

+

Placing PC Markers: 6.31, 6.32 B, 10.12

+

Playing: 6.3, 6.31

+

Removing PC Markers: 6.32 B iii, 10.12

+

OPS Cards

+

Activating Generals: 7.1 A

+

OPS Card Definition: 3.0

+

Playing: 6.2

+

Reshuffling Card Deck: 6.1, 12.2 iv

+

Special Events

+

Benjamin Franklin: 6.34 C ii

+

Declaration of Independence: 6.1 E, 6.34 C i

+

Definition: 6.34 A/C

+

Game Ends Cards: 6.34 C iii

+

Random Selection: 6.34 B

+

Strategy Card Definition: 3.0

+

Strategy Card Phase: 5.2

+

Colony

+

Canada as Colony: 13.2

+

Definition: 3.0

+

Political Control: 10.0 A/B

+

Combat Units (CU)

+

American Unit Definition: 3.0

+

CU Definition: 3.0

+

Unit Denominations: 2.2 A

+

Combat: See Battle

+

Committees of Correspondence

+

Game Set Up: 4.0, Playbook

+

Example of Play: Playbook

+

Continental Congress

+

Continental Congress Segment: 10.2.1

+

Dispersing: 7.7

+

Effects of Dispersing: 10.11 A iv

+

Designers Notes: Playbook

+

End Phase

+

End Phase: 5.7

+

Game Ends: 6.34 C iii, 13.2

+

European War

+

European War: 12.2 B iii

+

Events: See Cards

+

For the King

+

Game Set Up: 4.0, Playbook

+

French

+

French Alliance Effects: 12.2 B

+

French Units as American Units: 3.0, 12.2 C

+

French Units: 11.3, 12.2 C

+

Moving French Alliance Marker: 12.1

+

French Navy

+

Blockade Zone Definition: 3.0

+

Blockade Zone Effects: 12.3

+

French Naval Phase: 5.5

+

French Navy Blockade Zones: 12.3

+

Generals

+

American Generals placing PC Mark-

+

ers: 10.11 A iii

+

Capturing: 7.6, 9.5 Special Note

+

General Placement: 8.1 C, 8.2 C

+

General Ratings

+

Agility Rating Definition: 3.0

+

Definition: 3.0

+

Rating Explanation: 2.2 B/C

+

Strategy Rating Definition: 3.0

+

George Washington

+

Capturing: 7.6 B Special Rule

+

Retreat Before Battle: 7.9 A Special Rule

+

Winter Attrition: 11.2, Important Exception

+

Winter Offensive: 9.44

+

Greene Retreat Before Battle: 7.9 A Special Rule

+

Interception: 7.8

+

Potential Battle Rating Definition: 3.0

+

Reinforcement Box: 4.0, 8.1, 8.2

+

Rochambeau: 12.2 C

+

Isolation

+

American PC Marker Isolation: 10.31

+

British PC Marker Isolation: 10.32

+

Determining PC Marker Isolation: 10.3

+

Remove Isolated PC Marker Segment: 10.2.3

+

Militia

+

Militia Support: 9.43

+

Movement

+

Adjacent Definition: 3.0

+

American Mobility Advantage: 7.3, C

+

British Naval Movement: 7.5

+

Campaign Card Activation: 7.2

+

General Activation: 7.1, A

+

Interception: 7.8

+

Interception Bonus: 9.46

+

Movement Procedure: 7.3

+

Operations Queue Activation: 7.1, B

+

Overruns: 9.7

+

Restrictions: 7.4

+

Retreat Before Battle: 7.9

+

Operations Queue

+

Operations Queue Activation: 7.1, B

+

Overrun

+

Overruns: 9.7

+

Player’s Notes: Playbook

+

Political Control (PC)

+

Canada Control: 10.0 A/B

+

Colony Control: 10.0 A/B

+

Definition: 3.0

+

French Navy Effects: 12.3 Important Note

+

PC Markers

+

American Placing PC Markers: 6.32 B ii,

+

10.11 A

+

British Placing PC Markers: 6.32 B ii,

+

10.11 B

+

Isolation

+

American PC Marker Isolation: 10.31

+

British PC Marker Isolation: 10.32

+

Determining PC Marker Isolation: 10.3

+

Remove Isolated PC Marker Segment:

+

10.2.3

+

PC Markers Segment: 10.2.2

+

Removing PC Markers: 6.32

+

Political Control Marker Definition: 3.0

+

Political Control Phase: 5.6

+

Reinforcements

+

American Reinforcements: 8.2

+

British Reinforcements: 8.1

+

Reinforcements Phase: 5.1

+

Retreat

+

British Retreat By Sea: 9.62

+

Retreat Before Battle: 7.9

+

Retreat Mechanics: 9.61

+

Stacking Limits

+

Definition: 3.0

+

Strategy Phase

+

Strategy Phase: 5.3

+

Surrender

+

Loss of British Regulars: 9.41, 12.1

+

Surrenders: 9.63

+

Victory

+

Automatic Victory: 13.1

+

Game Ends Victory: 13.2

+

Washington’s War Rules Index

+
+ + diff --git a/info/rulebook01.jpg b/info/rulebook01.jpg new file mode 100644 index 0000000..d345a6d Binary files /dev/null and b/info/rulebook01.jpg differ diff --git a/info/rulebook02.jpg b/info/rulebook02.jpg new file mode 100644 index 0000000..3a53547 Binary files /dev/null and b/info/rulebook02.jpg differ diff --git a/info/rulebook03.jpg b/info/rulebook03.jpg new file mode 100644 index 0000000..80b0746 Binary files /dev/null and b/info/rulebook03.jpg differ diff --git a/info/rulebook04.jpg b/info/rulebook04.jpg new file mode 100644 index 0000000..a96e073 Binary files /dev/null and b/info/rulebook04.jpg differ diff --git a/info/rulebook05.jpg b/info/rulebook05.jpg new file mode 100644 index 0000000..eb9aff5 Binary files /dev/null and b/info/rulebook05.jpg differ diff --git a/info/rulebook06.jpg b/info/rulebook06.jpg new file mode 100644 index 0000000..5ae7976 Binary files /dev/null and b/info/rulebook06.jpg differ diff --git a/info/rulebook07.jpg b/info/rulebook07.jpg new file mode 100644 index 0000000..bb9b080 Binary files /dev/null and b/info/rulebook07.jpg differ diff --git a/info/rulebook08.jpg b/info/rulebook08.jpg new file mode 100644 index 0000000..e94ea0c Binary files /dev/null and b/info/rulebook08.jpg differ diff --git a/info/rulebook09.jpg b/info/rulebook09.jpg new file mode 100644 index 0000000..2252ce2 Binary files /dev/null and b/info/rulebook09.jpg differ diff --git a/info/rulebook10.jpg b/info/rulebook10.jpg new file mode 100644 index 0000000..42b6ac0 Binary files /dev/null and b/info/rulebook10.jpg differ diff --git a/info/rulebook11.jpg b/info/rulebook11.jpg new file mode 100644 index 0000000..251d886 Binary files /dev/null and b/info/rulebook11.jpg differ diff --git a/info/rulebook12.jpg b/info/rulebook12.jpg new file mode 100644 index 0000000..a3700d3 Binary files /dev/null and b/info/rulebook12.jpg differ diff --git a/info/rulebook13.jpg b/info/rulebook13.jpg new file mode 100644 index 0000000..0e6a7bb Binary files /dev/null and b/info/rulebook13.jpg differ diff --git a/info/rulebook14.jpg b/info/rulebook14.jpg new file mode 100644 index 0000000..44ecea8 Binary files /dev/null and b/info/rulebook14.jpg differ diff --git a/info/rulebook15.jpg b/info/rulebook15.jpg new file mode 100644 index 0000000..3c4f30f Binary files /dev/null and b/info/rulebook15.jpg differ diff --git a/info/rulebook16.jpg b/info/rulebook16.jpg new file mode 100644 index 0000000..7c7ab91 Binary files /dev/null and b/info/rulebook16.jpg differ diff --git a/info/rulebook17.jpg b/info/rulebook17.jpg new file mode 100644 index 0000000..401502d Binary files /dev/null and b/info/rulebook17.jpg differ diff --git a/info/rulebook18.jpg b/info/rulebook18.jpg new file mode 100644 index 0000000..91d1b8d Binary files /dev/null and b/info/rulebook18.jpg differ diff --git a/info/rulebook19.jpg b/info/rulebook19.jpg new file mode 100644 index 0000000..16d15ee Binary files /dev/null and b/info/rulebook19.jpg differ diff --git a/info/rulebook20.jpg b/info/rulebook20.jpg new file mode 100644 index 0000000..fc3abb8 Binary files /dev/null and b/info/rulebook20.jpg differ diff --git a/info/rulebook21.jpg b/info/rulebook21.jpg new file mode 100644 index 0000000..2af30a4 Binary files /dev/null and b/info/rulebook21.jpg differ diff --git a/info/rulebook22.jpg b/info/rulebook22.jpg new file mode 100644 index 0000000..90f09ee Binary files /dev/null and b/info/rulebook22.jpg differ diff --git a/info/rulebook23.jpg b/info/rulebook23.jpg new file mode 100644 index 0000000..8cb569e Binary files /dev/null and b/info/rulebook23.jpg differ diff --git a/info/rulebook24.jpg b/info/rulebook24.jpg new file mode 100644 index 0000000..b5e94b4 Binary files /dev/null and b/info/rulebook24.jpg differ diff --git a/play.css b/play.css new file mode 100644 index 0000000..9b3d60c --- /dev/null +++ b/play.css @@ -0,0 +1,442 @@ +main { background-color: slategray; } +header { background-color: silver; } +body.British header.your_turn { background-color: salmon; } +body.American header.your_turn { background-color: skyblue; } +aside { background-color: #f5e8d7; } +.one .role_name { background-color: skyblue; } +.two .role_name { background-color: salmon; } + +#log .h1 { + background-color: tan; + font-weight: bold; + text-align: center; + padding: 3px; +} + +#log .h2 { + background-color: tan; + text-align: center; + padding: 1px; +} + +#log .h2.american { background-color: skyblue; } +#log .h2.british { background-color: salmon; } + +#log .card_tip { text-decoration: dotted underline; } + +aside { + width: 230px; +} + +.role_info { + padding: 10px 20px; + background-color: wheat; + white-space: pre-wrap; +} + +.last_played { + background-color: tan; +} + +.last_played .card { + margin: 5px auto; +} + +/* CARD ACTION POPUP MENU */ + +#popup { + position: absolute; + user-select: none; + background-color: #ddd; + left: 10px; + top: 100px; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.3); + z-index: 100; + min-width: 20ex; + white-space: nowrap; +} +#popup div { padding: 3pt 8pt; display: none; } +#popup div.enabled { padding: 3pt 8pt; display: block; } +#popup div:hover { background-color: teal; color: white; } + +/* MAP WITH MARKERS, CUs, LEADERS, AND SPACES */ + +/* 3300x5100 */ + +#mapwrap { + width: 1576px; + height: 2480px; + margin-top: 40px; +} + +#map { + width: 1576px; + height: 2480px; + background-image: url("/washingtons-war/images/map-75.jpg"); + background-size: cover; + box-shadow: 0 0 20px black; +} + +#map.hide_markers > div { + visibility: hidden; +} + +.marker { + transition-property: top, left; + transition-duration: 700ms; +} + +.marker { + position: absolute; + background-size: cover; +} +.marker.turn { + width: 56.5px; + height: 56.5px; + background-image: url('/washingtons-war/images/Marker_GameTurnRegulars.jpg'); + box-shadow: 1px 1px 5px rgba(0,0,0,0.5); +} +.marker.turn.no-regulars { + background-image: url('/washingtons-war/images/Marker_GameTurnNoRegulars.jpg'); +} + +.marker.french-alliance { + width: 56.5px; + height: 56.5px; + background-image: url('/washingtons-war/images/Marker_FrenchAlliance.jpg'); + box-shadow: 1px 1px 5px rgba(0,0,0,0.5); +} + +.marker.french-alliance.european-war { + background-image: url('/washingtons-war/images/Marker_EuropeanWar.jpg'); +} + +.marker.french-navy { + width: 63px; + height: 126px; + background-image: url('/washingtons-war/images/Marker_FrenchNavy.jpg'); + box-shadow: 1px 1px 5px rgba(0,0,0,0.5); +} + +.marker.congress { + width: 56.5px; + height: 56.5px; + background-image: url('/washingtons-war/images/Marker_ContinentalCongress.jpg'); + box-shadow: 1px 1px 5px rgba(0,0,0,0.5); +} + +.marker.control { + width: 38px; + height: 38px; + box-shadow: 1px 1px 5px rgba(0,0,0,0.5); + visibility: hidden; +} + +.marker.control.british { + visibility: visible; + border: 4px solid white; + background-image: url('/washingtons-war/images/BR_ColonyControl.png'); +} + +.marker.control.american { + visibility: visible; + border: 4px solid #27b; + background-image: url('/washingtons-war/images/AM_ColonyControl.png'); +} + +.pc { + width: 67px; + height: 58.5px; +} +.pc { + transform: scale(1.25) translate(-3px,5px); +} +.pc.american { background-image: url('/washingtons-war/images/American-PC.png'); } +.pc.british { background-image: url('/washingtons-war/images/British-PC.png'); } + +.cu { + width: 55px; + height: 61px; + line-height: 50px; + padding-left: 6px; + font-size: 30px; + user-select: none; + color: white; + text-shadow: 0px 0px 3px black; + font-weight: bold; + border-radius: 60px; + box-shadow: 1px 1px 5px rgba(0,0,0,0.5); +} +.cu.american { background-image: url('/washingtons-war/images/American-CU.png'); } +.cu.british { background-image: url('/washingtons-war/images/British-CU.png'); } +.cu.french { background-image: url('/washingtons-war/images/French-CU.png'); } + +.general { + position: absolute; + width: 63px; + height: 126px; + background-size: cover; + outline: 1px solid black; + box-shadow: 1px 1px 5px rgba(0,0,0,0.5); +} +.general.offmap { + display: none; +} +.general.enabled { + cursor: pointer; +} +.general.british.enabled, .general.british.selected { box-shadow: 0 0 5px 5px white; } +.general.american.enabled, .general.american.selected { box-shadow: 0 0 5px 5px white; } +.general.french.enabled, .general.french.selected { box-shadow: 0 0 5px 5px white; } + +.general:hover { z-index: 1; } +.general.selected { z-index: 2; } +.marker.congress { z-index: 3 } +.cu { z-index: 4; } +.space { z-index: 5; } + +.general.Arnold { background-image: url('/washingtons-war/images/AM_General_Arnold.jpg'); } +.general.Gates { background-image: url('/washingtons-war/images/AM_General_Gates.jpg'); } +.general.Greene { background-image: url('/washingtons-war/images/AM_General_Greene.jpg'); } +.general.Lafayette { background-image: url('/washingtons-war/images/AM_General_Lafayette.jpg'); } +.general.Lee { background-image: url('/washingtons-war/images/AM_General_Lee.jpg'); } +.general.Lincoln { background-image: url('/washingtons-war/images/AM_General_Lincoln.jpg'); } +.general.Rochambeau { background-image: url('/washingtons-war/images/AM_General_Rochambeau.jpg'); } +.general.Washington { background-image: url('/washingtons-war/images/AM_General_Washington.jpg'); } +.general.Burgoyne { background-image: url('/washingtons-war/images/BR_General_Burgoyne.jpg'); } +.general.Carleton { background-image: url('/washingtons-war/images/BR_General_Carleton.jpg'); } +.general.Clinton { background-image: url('/washingtons-war/images/BR_General_Clinton.jpg'); } +.general.Cornwallis { background-image: url('/washingtons-war/images/BR_General_Cornwallis.jpg'); } +.general.Howe { background-image: url('/washingtons-war/images/BR_General_Howe.jpg'); } + +.space { + position: absolute; + border: 7px solid transparent; + display: none; +} +.space.enabled { + display: block; + border: 7px solid transparent; + box-shadow: 0 0 10px 10px white; +} +.space.enabled:hover { + border: 7px solid yellow; +} +.space.regular-space { + border-radius: 100px; +} +.space.fortified-port { + transform: rotate(45deg); +} +.space.blockade { + border-radius: 15px; + border: 7px solid white; + box-shadow: none; +} +.space.highlight { + cursor: pointer; + display: block; +} + +/* CARDS */ + +.card { + background-position: -1px -1px; + background-size: 188.5px 264px; + width: 186px; + height: 262px; + border-radius: 10px; + box-shadow: 1px 1px 5px rgba(0,0,0,0.5); + transition: 100ms; + display: none; +} + +.card.show { + display: block; +} + +.hand .card.enabled:hover, .hand .card.selected { + Xtransform: scale(1.5) translate(0,-30px); + transform: scale(1.1); + z-index: 10; +} + +.shift .hand .card:hover, .shift .hand .card.selected { + transform: scale(1.5) translate(0,-30px); + z-index: 10; +} + +#war_ends { + left:1034px; + top:1611px; + position:absolute; + width: 186px; + height: 262px; + transform: rotate(90deg); + background-position: -1px -1px; + background-size: 188.5px 264px; + border-radius: 10px; + box-shadow: 2px -2px 8px rgba(0,0,0,0.5); + display: none; +} +#war_ends.year_1779 { + background-image:url('/washingtons-war/images/Card_71.jpg'); + display: block; +} +#war_ends.year_1780 { + background-image:url('/washingtons-war/images/Card_72.jpg'); + display: block; +} +#war_ends.year_1781 { + background-image:url('/washingtons-war/images/Card_73.jpg'); + display: block; +} +#war_ends.year_1782 { + background-image:url('/washingtons-war/images/Card_74.jpg'); + display: block; +} +#war_ends.year_1783 { + background-image:url('/washingtons-war/images/Card_75.jpg'); + display: block; +} + +#played_british_reinforcements { left: 871px; } +#played_american_reinforcements_1 { left: 1104px; } +#played_american_reinforcements_2 { left: 1336px; } +.reinforcements { + position:absolute; + top: 1886px; + width: 186px; + height: 262px; + background-position: -1px -1px; + background-size: 188.5px 264px; + border-radius: 10px; + box-shadow: 2px 2px 8px rgba(0,0,0,0.5); + display: none; +} +.reinforcements.ops_1 { + background-image:url('/washingtons-war/images/Card_45-66.jpg'); + display: block; +} +.reinforcements.ops_2 { + background-image:url('/washingtons-war/images/Card_23-44.jpg'); + display: block; +} +.reinforcements.ops_3 { + background-image:url('/washingtons-war/images/Card_1-22.jpg'); + display: block; +} + +/* IMAGES */ + +.card_back{background-image:url('/washingtons-war/images/Card_Back.png')} +.card_1{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_2{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_3{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_4{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_5{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_6{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_7{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_8{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_9{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_10{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_11{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_12{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_13{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_14{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_15{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_16{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_17{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_18{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_19{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_20{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_21{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_22{background-image:url('/washingtons-war/images/Card_1-22.jpg')} +.card_23{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_24{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_25{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_26{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_27{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_28{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_29{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_30{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_31{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_32{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_33{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_34{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_35{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_36{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_37{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_38{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_39{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_40{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_41{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_42{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_43{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_44{background-image:url('/washingtons-war/images/Card_23-44.jpg')} +.card_45{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_46{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_47{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_48{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_49{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_50{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_51{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_52{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_53{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_54{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_55{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_56{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_57{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_58{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_59{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_60{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_61{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_62{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_63{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_64{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_65{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_66{background-image:url('/washingtons-war/images/Card_45-66.jpg')} +.card_67{background-image:url('/washingtons-war/images/Card_67-69.jpg')} +.card_68{background-image:url('/washingtons-war/images/Card_67-69.jpg')} +.card_69{background-image:url('/washingtons-war/images/Card_67-69.jpg')} +.card_70{background-image:url('/washingtons-war/images/Card_70.jpg')} +.card_71{background-image:url('/washingtons-war/images/Card_71.jpg')} +.card_72{background-image:url('/washingtons-war/images/Card_72.jpg')} +.card_73{background-image:url('/washingtons-war/images/Card_73.jpg')} +.card_74{background-image:url('/washingtons-war/images/Card_74.jpg')} +.card_75{background-image:url('/washingtons-war/images/Card_75.jpg')} +.card_76{background-image:url('/washingtons-war/images/Card_76.jpg')} +.card_77{background-image:url('/washingtons-war/images/Card_77.jpg')} +.card_78{background-image:url('/washingtons-war/images/Card_78.jpg')} +.card_79{background-image:url('/washingtons-war/images/Card_79.jpg')} +.card_80{background-image:url('/washingtons-war/images/Card_80.jpg')} +.card_81{background-image:url('/washingtons-war/images/Card_81.jpg')} +.card_82{background-image:url('/washingtons-war/images/Card_82.jpg')} +.card_83{background-image:url('/washingtons-war/images/Card_83.jpg')} +.card_84{background-image:url('/washingtons-war/images/Card_84.jpg')} +.card_85{background-image:url('/washingtons-war/images/Card_85.jpg')} +.card_86{background-image:url('/washingtons-war/images/Card_86.jpg')} +.card_87{background-image:url('/washingtons-war/images/Card_87.jpg')} +.card_88{background-image:url('/washingtons-war/images/Card_88.jpg')} +.card_89{background-image:url('/washingtons-war/images/Card_89.jpg')} +.card_90{background-image:url('/washingtons-war/images/Card_90.jpg')} +.card_91{background-image:url('/washingtons-war/images/Card_91.jpg')} +.card_92{background-image:url('/washingtons-war/images/Card_92.jpg')} +.card_93{background-image:url('/washingtons-war/images/Card_93.jpg')} +.card_94{background-image:url('/washingtons-war/images/Card_94.jpg')} +.card_95{background-image:url('/washingtons-war/images/Card_95.jpg')} +.card_96{background-image:url('/washingtons-war/images/Card_96.jpg')} +.card_97{background-image:url('/washingtons-war/images/Card_97.jpg')} +.card_98{background-image:url('/washingtons-war/images/Card_98.jpg')} +.card_99{background-image:url('/washingtons-war/images/Card_99.jpg')} +.card_100{background-image:url('/washingtons-war/images/Card_100.jpg')} +.card_101{background-image:url('/washingtons-war/images/Card_101.jpg')} +.card_102{background-image:url('/washingtons-war/images/Card_102.jpg')} +.card_103{background-image:url('/washingtons-war/images/Card_103.jpg')} +.card_104{background-image:url('/washingtons-war/images/Card_104.jpg')} +.card_105{background-image:url('/washingtons-war/images/Card_105.jpg')} +.card_106{background-image:url('/washingtons-war/images/Card_106.jpg')} +.card_107{background-image:url('/washingtons-war/images/Card_107.jpg')} +.card_108{background-image:url('/washingtons-war/images/Card_108.jpg')} +.card_109{background-image:url('/washingtons-war/images/Card_109.jpg')} +.card_110{background-image:url('/washingtons-war/images/Card_110.jpg')} diff --git a/play.html b/play.html new file mode 100644 index 0000000..435c237 --- /dev/null +++ b/play.html @@ -0,0 +1,234 @@ + + + + + +WASHINGTON'S WAR + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+
+ + + +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + + diff --git a/play.js b/play.js new file mode 100644 index 0000000..3e1e763 --- /dev/null +++ b/play.js @@ -0,0 +1,539 @@ +"use strict"; + +const THE_13_COLONIES = [ 'NH', 'NY', 'MA', 'CT', 'RI', 'PA', 'NJ', 'MD', 'DE', 'VA', 'NC', 'SC', 'GA' ]; +const ALL_COLONIES = THE_13_COLONIES.concat(['CA']); +const AMERICAN_GENERALS = [ "Arnold", "Gates", "Greene", "Lafayette", "Lee", "Lincoln", "Washington", ]; +const CONTINENTAL_CONGRESS_DISPERSED = "Continental Congress Dispersed"; +const BRITISH = "British"; +const AMERICAN = "American"; +const BLOCKADE_ZONES = [ "Sea1","Sea2","Sea3","Sea4","Sea5","Sea6","Sea7" ]; + +let ui = { + cards: {}, + spaces: {}, + generals: {}, + control: {}, + blockade: {}, + cu: [], +}; + +create_log_entry = function (text) { + let p = document.createElement("div"); + text = text.replace(/&/g, "&"); + text = text.replace(//g, ">"); + + text = text.replace(/\[(\d+)([^\]]*)\]/, '$1$2'); + + if (text.match(/^\.h1 /)) { + p.className = 'h1'; + text = text.substring(4); + } else if (text.match(/^\.h2.american /)) { + p.className = 'h2 american'; + text = text.substring(13); + } else if (text.match(/^\.h2.british /)) { + p.className = 'h2 british'; + text = text.substring(12); + } + + p.innerHTML = text; + return p; +} + +function clearList(container) { + while (container.firstChild) + container.removeChild(container.firstChild); +} + +function onHoverCard(X) { + let c = CARDS[X.id.split("+")[1]]; + document.getElementById("status").textContent = JSON.stringify(c); +} + +function onFocusNode(evt) { + let space = SPACES[evt.target.id]; + document.getElementById("status").textContent = space.name; +} + +function onBlurNode(evt) { + let space = SPACES[evt.target.id]; + document.getElementById("status").textContent = ""; +} + +function clear_group(name) { + let container = document.getElementById(name); + while (container.firstChild) + container.removeChild(container.firstChild); +} + +function build_marker(container, id, x, y, w, h, classList) { + let e = document.createElement("div"); + e.foo = { w:w, h:h }; + e.classList.add("marker"); + for (let c of classList) + e.classList.add(c); + e.setAttribute("id", id); + e.style.left = ((x - w/2)|0) + "px"; + e.style.top = ((y - h/2)|0) + "px"; + document.getElementById(container).appendChild(e); + return e; +} + +function update_marker(e, space) { + let box = SPACES[space] || BOXES[space]; + e.style.left = ((box.x - e.foo.w/2)|0) + "px"; + e.style.top = ((box.y - e.foo.h/2)|0) + "px"; +} + +function update_marker_xy(e, x, y) { + e.style.left = ((x - e.foo.w/2)|0) + "px"; + e.style.top = ((y - e.foo.h/2)|0) + "px"; +} + +function build_map() { + function buildNode(type, x, y, colony) { + let e = document.createElement("div"); + let w, h; + e.classList.add("space"); + e.classList.add(type); + if (colony && colony != 'SEA') + e.classList.add("colony_" + colony); + if (type === 'regular-space') { + w = 66; + h = 66; + } else if (type === 'winter-quarters') { + w = 66; + h = 66; + } else if (type === 'fortified-port') { + w = 54; + h = 54; + } else if (type === 'blockade') { + w = 96; + h = 80; + } else { + w = 60; + h = 60; + } + let b = 7; + w -= 2; + h -= 2; + e.style.left = (x - w/2 - b) + "px"; + e.style.top = (y - h/2 - b) + "px"; + e.style.width = (w) + "px"; + e.style.height = (h) + "px"; + return e; + } + + for (let name in SPACES) { + let space = SPACES[name]; + if (space.colony != null) { + let e = buildNode(space.type, space.x, space.y, SPACES[name].colony); + e.setAttribute("id", name); + e.addEventListener("mouseenter", onFocusNode); + e.addEventListener("mouseleave", onBlurNode); + e.addEventListener("click", on_space); + ui.spaces[name] = e; + document.getElementById("spaces").appendChild(e); + build_marker("pc", name+"-pc", space.x, space.y, 67, 58.5, ["pc"]); + } + } + + for (let zone of BLOCKADE_ZONES) { + let e = buildNode("blockade", BOXES[zone].x, BOXES[zone].y, "SEA"); + e.setAttribute("id", zone); + e.addEventListener("click", on_space); + document.getElementById("spaces").appendChild(e); + ui.blockade[zone] = e; + } + + ui.turn = build_marker("markers", "GameTurn", + BOXES["Game Turn 1775"].x, BOXES["Game Turn 1775"].y, 56.5, 56.5, + ["turn"]); + + ui.french_alliance = build_marker("markers", "FrenchAlliance", + BOXES["French Alliance Track 0"].x, BOXES["French Alliance Track 0"].y, 56.5, 56.5, + ["french-alliance"]); + + ui.french_navy = build_marker("markers", "FrenchNavy", + BOXES["French Reinforcements"].x-130/2-10, BOXES["French Reinforcements"].y-32, 126/2, 252/2, + ["french-navy"]); + + ui.congress = build_marker("markers", "Congress", + SPACES["Philadelphia"].x, SPACES["Philadelphia"].y, 113/2, 113/2, + ["congress"]); + + for (let c in COLONIES) { + ui.control[c] = build_marker("markers", "control_" + c, + BOXES[c].x, BOXES[c].y, 38+8, 38+8, + ["control"]); + } + + for (let c = 1; c <= 110; ++c) { + ui.cards[c] = document.getElementById("card+"+c); + ui.cards[c].addEventListener("click", on_card); + } + + for (let g in GENERALS) { + let color = GENERALS[g].owner.toLowerCase(); + ui.generals[g] = build_marker("generals", g, + 0, + 0, + 126/2, + 252/2, + ["general", color, g, "offmap"]); + ui.generals[g].addEventListener("click", on_general); + } +} + +function update_units() { + const unitW = 130/2; + const unitH = 263/2; + const generalX = -22; + const generalY = 22; + const cuX = 20; + const cuY = 10; + + update_marker(ui.turn, "Game Turn " + game.year); + if (game.regulars) + ui.turn.classList.remove("no-regulars"); + else + ui.turn.classList.add("no-regulars"); + + update_marker(ui.congress, game.congress); + + update_marker(ui.french_alliance, "French Alliance Track " + game.french_alliance); + if (game.european_war) + ui.french_alliance.classList.add("european-war"); + else + ui.french_alliance.classList.remove("european-war"); + + if (game.french_navy == "French Reinforcements") { + let x = BOXES["French Reinforcements"].x-130/2-10; + let y = BOXES["French Reinforcements"].y-32; + let w = 126/2; + let h = 252/2; + ui.french_navy.style.left = ((x-w/2)|0) + "px"; + ui.french_navy.style.top = ((y-h/2)|0) + "px"; + } else { + update_marker(ui.french_navy, game.french_navy); + } + + for (let space in SPACES) { + let space_pc = game.pc[space]; + let e = document.getElementById(space+"-pc"); + if (e) { + if (space_pc === BRITISH) { + e.classList.remove("american"); + e.classList.add("british"); + } else if (space_pc === AMERICAN) { + e.classList.add("american"); + e.classList.remove("british"); + } else { + e.classList.remove("american"); + e.classList.remove("british"); + } + } + } + + for (let c in COLONIES) { + let control = 0; + for (let space of COLONIES[c]) { + if (game.pc[space] == BRITISH) + --control; + else if (game.pc[space] == AMERICAN) + ++control; + } + if (control < 0) + ui.control[c].className = "marker control british"; + else if (control > 0) + ui.control[c].className = "marker control american"; + else + ui.control[c].className = "marker control"; + } + + let offset = {}; + for (let g in GENERALS) { + let e = ui.generals[g]; + let unit = game.generals[g]; + let space = SPACES[unit.location] || BOXES[unit.location]; + if (space) { + let o = (offset[space.name]|0); + update_marker_xy(e, space.x + o * generalX, space.y + o * generalY - 32); + e.classList.remove("offmap"); + offset[space.name] = ++o; + } else { + e.classList.add("offmap"); + } + if (game.who == g) + e.classList.add("selected"); + else + e.classList.remove("selected"); + } + + // TODO: reuse CU elements + offset = {}; + clear_group("cu"); + for (let i = 0; i < game.cu.length; ++i) { + let cu = game.cu[i]; + let space = SPACES[cu.location] || BOXES[cu.location]; + let o = (offset[space.name]|0); + let x = space.x + o * cuX; + let y = space.y + o * cuY; + let e = build_marker("cu", "cu"+i, x, y, 122/2, 122/2, ["cu", cu.owner.toLowerCase()]); + e.textContent = cu.count; + offset[space.name] = ++o; + } +} + +build_map(); + +function player_info(player, nc, nq) { + let info; + if (nc == 1) + info = "1 card in hand."; + else + info = nc + " cards in hand."; + if (nq > 0) + info += "\n" + nq + " OPS in queue."; + if (player == AMERICAN) { + if (game.pennsylvania_and_new_jersey_line_mutinies) + info += "\nPennsylvania and New Jersey Line Mutinies!"; + if (game.congress == CONTINENTAL_CONGRESS_DISPERSED) + info += "\nContinental Congress Dispersed!"; + } + return info; +} + +function on_update() { + let e; + + document.getElementById("british_info").textContent = player_info(BRITISH, game.b_cards, game.b_queue); + document.getElementById("american_info").textContent = player_info(AMERICAN, game.a_cards, game.a_queue); + + if (!game.last_played) + document.getElementById("last_played").className = "card show card_back"; + else + document.getElementById("last_played").className = "card show card_" + game.last_played; + + action_button("pickup_british_cu", "Pick up British CU"); + action_button("pickup_american_cu", "Pick up American CU"); + action_button("pickup_french_cu", "Pick up French CU"); + action_button("drop_british_cu", "Drop off British CU"); + action_button("drop_american_cu", "Drop off American CU"); + action_button("drop_french_cu", "Drop off French CU"); + action_button("british_first", "British"); + action_button("american_first", "American"); + action_button("surrender", "Surrender"); + action_button("pass", "Next"); + action_button("undo", "Undo"); + + e = document.getElementById("war_ends"); + e.classList.remove("year_1779"); + e.classList.remove("year_1780"); + e.classList.remove("year_1781"); + e.classList.remove("year_1782"); + e.classList.remove("year_1783"); + if (game.war_ends) + e.classList.add("year_" + game.war_ends); + + e = document.getElementById("played_british_reinforcements"); + e.classList.remove("ops_1"); + e.classList.remove("ops_2"); + e.classList.remove("ops_3"); + e.classList.add("ops_" + game.played_british_reinforcements); + + e = document.getElementById("played_american_reinforcements_1"); + e.classList.remove("ops_1"); + e.classList.remove("ops_2"); + e.classList.remove("ops_3"); + if (game.played_american_reinforcements.length >= 1) + e.classList.add("ops_" + game.played_american_reinforcements[0]); + + e = document.getElementById("played_american_reinforcements_2"); + e.classList.remove("ops_1"); + e.classList.remove("ops_2"); + e.classList.remove("ops_3"); + if (game.played_american_reinforcements.length >= 2) + e.classList.add("ops_" + game.played_american_reinforcements[1]); + + let cards = game.hand; + for (let c = 1; c <= 110; ++c) { + ui.cards[c].classList.remove('enabled'); + if (cards && cards.includes(c)) + ui.cards[c].classList.add('show'); + else + ui.cards[c].classList.remove('show'); + } + + for (let space in SPACES) + ui.spaces[space].classList.remove('enabled'); + + for (let general in GENERALS) + ui.generals[general].classList.remove('enabled'); + + for (let zone of BLOCKADE_ZONES) + ui.blockade[zone].classList.remove('enabled'); + + update_units(); + + if (player != game.active) + return; + + for (let action of Object.keys(game.actions)) { + let args = game.actions[action]; + switch (action) { + case 'card_play_event': + case 'card_discard_event': + case 'card_campaign': + case 'card_ops_general': + case 'card_ops_pc': + case 'card_ops_reinforcements': + case 'card_ops_queue': + case 'card_battle_play': + case 'card_battle_discard': + case 'exchange_for_discard': + for (let card of args) + ui.cards[card].classList.add('enabled'); + break; + case 'remove_cu': + // TODO: target CU not space? + case 'move': + case 'sea_move': + case 'place_continental_congress': + case 'place_reinforcements': + case 'place_american_pc': + case 'place_british_pc': + case 'remove_pc': + case 'flip_pc': + for (let space of args) + ui.spaces[space].classList.add('enabled'); + break; + case 'select_general': + for (let general of args) + ui.generals[general].classList.add('enabled'); + break; + case 'place_navy': + for (let zone of args) + ui.blockade[zone].classList.add('enabled'); + } + } +} + +let current_popup_card = 0; + +function show_popup_menu(evt, list) { + document.querySelectorAll("#popup div").forEach(e => e.classList.remove('enabled')); + for (let item of list) { + let e = document.getElementById("menu_" + item); + e.classList.add('enabled'); + } + let popup = document.getElementById("popup"); + popup.style.display = 'block'; + popup.style.left = (evt.clientX-50) + "px"; + popup.style.top = (evt.clientY-12) + "px"; + ui.cards[current_popup_card].classList.add("selected"); +} + +function hide_popup_menu() { + let popup = document.getElementById("popup"); + popup.style.display = 'none'; + if (current_popup_card) { + ui.cards[current_popup_card].classList.remove("selected"); + current_popup_card = 0; + } +} + +function on_card_play_event() { + send_action('card_play_event', current_popup_card); + hide_popup_menu(); +} +function on_card_discard_event() { + send_action('card_discard_event', current_popup_card); + hide_popup_menu(); +} +function on_card_campaign() { + send_action('card_campaign', current_popup_card); + hide_popup_menu(); +} +function on_card_ops_general() { + send_action('card_ops_general', current_popup_card); + hide_popup_menu(); +} +function on_card_ops_pc() { + send_action('card_ops_pc', current_popup_card); + hide_popup_menu(); +} +function on_card_ops_reinforcements() { + send_action('card_ops_reinforcements', current_popup_card); + hide_popup_menu(); +} +function on_card_ops_queue() { + send_action('card_ops_queue', current_popup_card); + hide_popup_menu(); +} +function on_card_ops_queue() { + send_action('card_ops_queue', current_popup_card); + hide_popup_menu(); +} +function on_card_battle_play() { + send_action('card_battle_play', current_popup_card); + hide_popup_menu(); +} +function on_card_battle_discard() { + send_action('card_battle_discard', current_popup_card); + hide_popup_menu(); +} +function on_exchange_for_discard() { + send_action('exchange_for_discard', current_popup_card); + hide_popup_menu(); +} + +function on_card(evt) { + if (game.actions) { + let c = evt.target.id.split("+")[1] | 0; + let menu = []; + for (let action in game.actions) + if (Array.isArray(game.actions[action]) && game.actions[action].includes(c)) + menu.push(action); + if (menu.length > 0) { + current_popup_card = c; + show_popup_menu(evt, menu); + } + } +} + +function get_action_from_arg(x) { + for (let action of Object.keys(game.actions)) { + let args = game.actions[action]; + if (Array.isArray(args) && args.includes(x)) + return action; + } + return null; +} + +function on_space(evt) { + if (game.actions) { + let space = evt.target.id; + let action = get_action_from_arg(space); + if (action) + send_action(action, space); + } +} + +function on_general(evt) { + if (game.actions) { + let general = evt.target.id; + let action = get_action_from_arg(general); + if (action) + send_action(action, general); + } +} + +function toggle_markers() { + document.querySelector("#map").classList.toggle("hide_markers"); +} + +scroll_with_middle_mouse("main", 2); +init_map_zoom(); +init_shift_zoom(); +init_client(["American", "British"]); diff --git a/rules.js b/rules.js new file mode 100644 index 0000000..09f5a11 --- /dev/null +++ b/rules.js @@ -0,0 +1,3509 @@ +"use strict"; + +// TODO: campaign messed up who is who after battle +// TODO: retreat with 0 CU after battle + +exports.scenarios = [ + "Historical" +]; + +const CARDS = require('./cards'); +const DATA = require('./data'); +const SPACES = DATA.SPACES; +const COLONIES = DATA.COLONIES; +const GENERALS = DATA.GENERALS; +const BLOCKADE = DATA.BLOCKADE; +const PATH_INDEX = DATA.PATH_INDEX; +const PATH_NAME = DATA.PATH_NAME; +const PATH_TYPE = DATA.PATH_TYPE; + +const BRITISH = 'British'; +const AMERICAN = 'American'; +const FRENCH = 'French'; + +const BRITISH_GENERALS = [ "Burgoyne", "Carleton", "Clinton", "Cornwallis", "Howe" ]; +const AMERICAN_GENERALS = [ "Arnold", "Gates", "Greene", "Lafayette", "Lee", "Lincoln", "Washington", "Rochambeau" ]; +const WASHINGTON = "Washington"; +const ROCHAMBEAU = "Rochambeau"; +const ARNOLD = "Arnold"; + +const CAPTURED_GENERALS = "Captured Generals"; +const CONTINENTAL_CONGRESS_DISPERSED = "Continental Congress Dispersed"; +const BRITISH_REINFORCEMENTS = "British Leader Reinforcements"; +const AMERICAN_REINFORCEMENTS = "American Leader Reinforcements"; +const FRENCH_REINFORCEMENTS = "French Reinforcements"; +const TURN_TRACK = { + 1775: "Game Turn 1775", + 1776: "Game Turn 1776", + 1777: "Game Turn 1777", + 1778: "Game Turn 1778", + 1779: "Game Turn 1779", + 1780: "Game Turn 1780", + 1781: "Game Turn 1781", + 1782: "Game Turn 1782", + 1783: "Game Turn 1783", +}; + +const FALMOUTH_QUEBEC = "Falmouth/Quebec"; + +const THE_13_COLONIES = [ 'NH', 'NY', 'MA', 'CT', 'RI', 'PA', 'NJ', 'MD', 'DE', 'VA', 'NC', 'SC', 'GA' ]; +const SOUTH_OF_WINTER_ATTRITION_LINE = [ 'NC', 'SC', 'GA' ]; + +const CAMPAIGN_CARDS = [ 67, 68, 69, 70 ]; +const DECLARATION_OF_INDEPENDENCE = 99; +const BARON_VON_STEUBEN = 86; +const WAR_ENDS_1779 = 71; +const BENJAMIN_FRANKLIN = 101; + +const ENEMY = { "American": BRITISH, "British": AMERICAN }; + +const default_options = {}; + +let states = {}; +let events = {}; + +let game; + +function random(n) { + return Math.floor(((game.seed = game.seed * 48271 % 0x7fffffff) / 0x7fffffff) * n); +} + +function log(s) { + game.log.push(s); +} + +function clear_undo() { + game.undo = []; +} + +function push_undo() { + game.undo.push(JSON.stringify(game, (k,v) => { + if (k === 'undo') return undefined; + if (k === 'log') return v.length; + return v; + })); +} + +function pop_undo() { + let undo = game.undo; + let save_log = game.log; + Object.assign(game, JSON.parse(undo.pop())); + game.undo = undo; + save_log.length = game.log; + game.log = save_log; +} + +function remove_from_array(array, item) { + let i = array.indexOf(item); + if (i >= 0) + array.splice(i, 1); +} + +function setup_game(seed) { + game = { + seed: seed, + year: 1775, + congress: "Philadelphia", + french_alliance: 0, + french_alliance_triggered: false, + european_war: false, + french_navy: FRENCH_REINFORCEMENTS, + regulars: true, + war_ends: 0, + played_british_reinforcements: 0, + played_american_reinforcements: [], + + pc: {}, + generals: {}, + moved: {}, + cu: [], + control: {}, + + deck: create_deck(), + discard: [], + reshuffle: false, + a_hand: [], + b_hand: [], + a_queue: 0, + b_queue: 0, + + log: [], + undo: [], + + prompt: null, + actions: [], + } + + function spawn_unit(owner, location, pc, cu, name) { + if (pc) + game.pc[location] = owner; + if (name) { + game.generals[name] = { + location: location, + } + } + if (cu > 0) { + game.cu.push({ + owner: owner, + location: location, + count: cu, + moved: 0, + }); + } + } + + function british(place, pc, cu, ld) { spawn_unit(BRITISH, place, pc, cu, ld); } + function american(place, pc, cu, ld) { spawn_unit(AMERICAN, place, pc, cu, ld); } + function french(place, pc, cu, ld) { spawn_unit(FRENCH, place, pc, cu, ld); } + + british("Quebec", true, 2, "Carleton"); + british("Montreal", true); + british("Fort Detroit", true, 1); + british("Boston", true, 5, "Howe"); + british("Norfolk", true); + british("Gilbert Town", true); + british("Wilmington NC", true); + british("Ninety Six", true); + + american("Lexington Concord", true, 5, "Washington"); + american("Newport", false, 2, "Greene"); + american("Charleston", true, 2); + american("Philadelphia", true); + + british(BRITISH_REINFORCEMENTS, false, 0, "Burgoyne"); + british(BRITISH_REINFORCEMENTS, false, 0, "Clinton"); + british(BRITISH_REINFORCEMENTS, false, 0, "Cornwallis"); + + american(AMERICAN_REINFORCEMENTS, false, 0, "Arnold"); + american(AMERICAN_REINFORCEMENTS, false, 0, "Lincoln"); + american(AMERICAN_REINFORCEMENTS, false, 0, "Gates"); + american(AMERICAN_REINFORCEMENTS, false, 0, "Lee"); + american(AMERICAN_REINFORCEMENTS, false, 0, "Lafayette"); + + french(FRENCH_REINFORCEMENTS, false, 5, "Rochambeau"); + + goto_committees_of_correspondence(); +} + +/* GAME STATE */ + +function create_deck() { + let deck = []; + for (let i = 1; i <= 110; ++i) { + // No DoI or Baron von Steuben first year. + if (i == DECLARATION_OF_INDEPENDENCE || i == BARON_VON_STEUBEN) + continue; + deck.push(i); + } + return deck; +} + +function reshuffle_deck() { + game.log.push("The deck is reshuffled."); + game.reshuffle = false; + game.deck = game.deck.concat(game.discard); + game.discard = []; +} + +function roll_d6() { + return random(6) + 1; +} + +function deal_card() { + if (game.deck.length == 0) + reshuffle_deck(); + let i = random(game.deck.length); + let c = game.deck[i]; + game.deck.splice(i, 1); + return c; +} + +function last_discard() { + if (game.discard.length > 0) + return game.discard[game.discard.length-1]; + return null; +} + +function active_hand() { + return (game.active == AMERICAN) ? game.a_hand : game.b_hand; +} + +function play_card(c, reason) { + if (reason) + game.log.push(game.active[0] + " plays [" + c + ": " + CARDS[c].title + "] " + reason); + else + game.log.push(game.active[0] + " plays [" + c + ": " + CARDS[c].title + "]"); + if (CARDS[c].reshuffle == 'if_played') + game.reshuffle = true; + remove_from_array(active_hand(), c); + game.last_played = c; + if (!CARDS[c].once) + game.discard.push(c); + else + game.log.push("Card " + c + " removed from game."); +} + +function discard_card_from_hand(hand, c) { + remove_from_array(hand, c); + game.discard.push(c); + if (CARDS[c].reshuffle == 'if_discarded') + game.reshuffle = true; + game.log.push(game.active[0] + " discards [" + c + ": " + CARDS[c].title + "]"); +} + +function discard_card(c, reason) { + game.last_played = c; + discard_card_from_hand(active_hand(), c); + if (reason) + game.log.push(game.active[0] + " discards [" + c + ": " + CARDS[c].title + "] " + reason); + else + game.log.push(game.active[0] + " discards [" + c + ": " + CARDS[c].title + "]"); +} + +function can_exchange_for_discard(c) { + if (game.did_discard_event) { + if (game.active == BRITISH) + return true; + return CARDS[c].count > 1; + } + return false; +} + +function can_play_event(c) { + let card = CARDS[c]; + switch (card.when) { + case 'before_french_alliance': return !game.french_alliance_triggered; + case 'after_french_alliance': return game.french_alliance_triggered; + case 'european_war_in_effect': return game.european_war; + } + return true; +} + +function can_play_reinforcements() { + if (game.active == BRITISH) { + if (game.played_british_reinforcements == 0) { + let n = count_british_cu(BRITISH_REINFORCEMENTS); + for (let g of BRITISH_GENERALS) + if (game.generals[g].location == BRITISH_REINFORCEMENTS) + ++n; + return n > 0; + } + return false; + } + if (game.active == AMERICAN) + return game.played_american_reinforcements.length < 2; + return false; +} + +function is_port(where) { + return SPACES[where].port; +} + +function is_non_blockaded_port(where) { + if (SPACES[where].port && BLOCKADE[where] != game.french_navy) + return true; + return false; +} + +function is_fortified_port(where) { + return SPACES[where].type == 'fortified-port'; +} + +function is_continental_congress_dispersed() { + return game.congress == CONTINENTAL_CONGRESS_DISPERSED; +} + +function is_winter_quarter_space(where) { + let colony = SPACES[where].colony; + if (colony == 'GA' || colony == 'SC' || colony == 'NC') + return true; // south of winter attrition line + let type = SPACES[where].type; + if (type == 'winter-quarters' || type == 'fortified-port') + return true; + return false; +} + +function allowed_to_place_american_pc() { + if (is_continental_congress_dispersed()) + return false; + if (game.pennsylvania_and_new_jersey_line_mutinies) + return false; + return true; +} + +function is_british_militia(space) { + return game.control[SPACES[space].colony] == BRITISH; +} + +function is_american_militia(space) { + return game.control[SPACES[space].colony] == AMERICAN; +} + +function is_american_winter_offensive() { + if (game.who == WASHINGTON && game.a_hand.length == 0) + return true; + return false; +} + +/* PC */ + +function has_no_pc(space) { + return game.pc[space] != BRITISH && game.pc[space] != AMERICAN; +} + +function has_british_pc(space) { + return game.pc[space] == BRITISH; +} + +function has_american_pc(space) { + return game.pc[space] == AMERICAN; +} + +function has_enemy_pc(space) { + if (game.active == BRITISH) + return has_american_pc(space); + else + return has_british_pc(space); +} + +function has_no_pc(space) { + return game.pc[space] != BRITISH && game.pc[space] != AMERICAN; +} + +function is_adjacent_to_british_pc(a) { + for (let b of SPACES[a].exits) + if (has_british_pc(b)) + return true; + if (SPACES[a].port) { + for (let b in SPACES) { + if (SPACES[b].port) + if (has_british_pc(b)) + return true; + } + } + return false; +} + +function is_adjacent_to_american_pc(a) { + for (let b of SPACES[a].exits) + if (has_american_pc(b)) + return true; + return false; +} + +function place_british_pc(space) { + game.log.push("B places PC in " + space); + if (game.british_pc_space_list) + remove_from_array(game.british_pc_space_list, space); + game.pc[space] = BRITISH; +} + +function place_american_pc(space) { + game.log.push("A places PC in " + space); + game.pc[space] = AMERICAN; +} + +function remove_pc(space) { + if (game.active == BRITISH) + game.log.push("B removes PC in " + space); + else + game.log.push("A removes PC in " + space); + game.pc[space] = undefined; +} + +function flip_pc(space) { + if (game.active == BRITISH) + game.log.push("B flips PC in " + space); + else + game.log.push("A flips PC in " + space); + game.pc[space] = ENEMY[game.pc[space]]; +} + +function update_colony_control() { + for (let c in COLONIES) { + let control = 0; + for (let space of COLONIES[c]) { + if (game.pc[space] == BRITISH) + --control; + else if (game.pc[space] == AMERICAN) + ++control; + } + if (control < 0) + game.control[c] = BRITISH; + else if (control > 0) + game.control[c] = AMERICAN; + else + game.control[c] = undefined; + } +} + +/* CU */ + +function find_cu(owner, space) { + for (let i = 0; i < game.cu.length; ++i) { + let cu = game.cu[i]; + if (cu.location == space && cu.owner == owner) + return cu; + } + return null; +} + +function find_british_cu(space) { + return find_cu(BRITISH, space); +} + +function find_american_cu(space) { + return find_cu(AMERICAN, space); +} + +function find_french_cu(space) { + return find_cu(FRENCH, space); +} + +function has_british_cu(space) { + return find_british_cu(space) != null; +} + +function has_no_british_cu(space) { + return !has_british_cu(space); +} + +function has_american_or_french_cu(space) { + return find_american_cu(space) != null || find_french_cu(space) != null; +} + +function has_american_cu(space) { + return find_american_cu(space) != null; +} + +function has_french_cu(space) { + return find_french_cu(space) != null; +} + +function has_enemy_cu(where) { + if (game.active == BRITISH) + return has_american_or_french_cu(where); + else + return has_british_cu(where); +} + +function count_cu(owner, space) { + let cu = find_cu(owner, space); + return cu ? cu.count : 0; +} + +function count_british_cu(where) { + let cu = find_british_cu(where); + return cu ? cu.count : 0; +} + +function count_american_cu(where) { + let cu = find_american_cu(where); + return cu ? cu.count : 0; +} + +function count_french_cu(where) { + let cu = find_french_cu(where); + return cu ? cu.count : 0; +} + +function count_unmoved_british_cu(where) { + let cu = find_british_cu(where); + return cu ? cu.count - cu.moved : 0; +} + +function count_unmoved_american_cu(where) { + let cu = find_american_cu(where); + return cu ? cu.count - cu.moved : 0; +} + +function count_unmoved_french_cu(where) { + let cu = find_french_cu(where); + return cu ? cu.count - cu.moved : 0; +} + +function mark_moved_cu(owner, space, moved) { + if (moved > 0) + find_cu(owner, space).moved += moved; +} + +function count_american_and_french_cu(where) { + return count_american_cu(where) + count_french_cu(where); +} + +function count_enemy_cu(where) { + if (game.active == BRITISH) + return count_american_and_french_cu(where); + else + return count_british_cu(where); +} + +function spawn_cu(owner, where, count) { + game.cu.push({owner:owner, location:where, count:count, moved:0}); +} + +function remove_cu(owner, where, count) { + if (count == 0) + return; + let cu = find_cu(owner, where); + if (count >= cu.count) { + let i = game.cu.indexOf(cu); + remove_from_array(game.cu, cu); + } else { + cu.count -= count; + } +} + +function place_cu(owner, where, count) { + let cu = find_cu(owner, where); + if (!cu) + spawn_cu(owner, where, count); + else + cu.count += count; +} + +function place_british_cu(where, count) { + place_cu(BRITISH, where, count); +} + +function place_american_cu(where, count) { + place_cu(AMERICAN, where, count); +} + +function place_french_cu(where, count) { + place_cu(FRENCH, where, count); +} + +function move_cu(owner, from, to, count) { + if (count == 0) + return; + let from_cu = find_cu(owner, from); + if (count < from_cu.count) { + from_cu.count -= count; + place_cu(owner, to, count); + } else { + let to_cu = find_cu(owner, to); + if (to_cu) { + remove_cu(owner, from, from_cu.count); + to_cu.count += count; + } else { + from_cu.location = to; + } + } +} + +function move_british_cu(from, to, count) { + move_cu(BRITISH, from, to, count); +} + +/* GENERALS */ + +function is_general_on_map(g) { + switch (game.generals[g].location) { + case null: /* killed */ + case CAPTURED_GENERALS: + case BRITISH_REINFORCEMENTS: + case AMERICAN_REINFORCEMENTS: + case FRENCH_REINFORCEMENTS: + return false; + } + return true; +} + +function find_british_general(where) { + for (let general of BRITISH_GENERALS) + if (game.generals[general].location == where) + return general; + return null; +} + +function find_american_or_french_general(where) { + for (let general of AMERICAN_GENERALS) + if (game.generals[general].location == where) + return general; + return null; +} + +function has_british_general(where) { + return find_british_general(where) != null; +} + +function has_american_or_french_general(where) { + return find_american_or_french_general(where) != null; +} + +function has_enemy_general(where) { + if (game.active == BRITISH) + return has_american_or_french_general(where); + else + return has_british_general(where); +} + +function count_friendly_generals(where) { + let list; + if (game.active == BRITISH) + list = BRITISH_GENERALS; + else + list = AMERICAN_GENERALS; + let count = 0; + for (let g of list) + if (location_of_general(g) == where) + ++count; + return count; +} + +function can_activate_general(c) { + if (game.active == BRITISH) + return can_activate_british_general(c); + else + return can_activate_american_general(c); +} + +function can_activate_british_general(c) { + let ops = CARDS[c].count + game.b_queue; + for (let g of BRITISH_GENERALS) + if (is_general_on_map(g) && GENERALS[g].strategy <= ops) + return true; + return false; +} + +function can_activate_american_general(c) { + let ops = CARDS[c].count + game.a_queue; + for (let g of AMERICAN_GENERALS) + if (is_general_on_map(g) && GENERALS[g].strategy <= ops) + return true; + return false; +} + +function move_general(who, where) { + game.generals[who].location = where; +} + +function capture_washington() { + game.generals[WASHINGTON].location = null; + + if (!game.french_alliance_triggered) { + game.french_alliance -= 3; + if (game.french_alliance < 0) + game.french_alliance = 0; + } + + goto_george_washington_captured(); +} + +function capture_british_general(where) { + let g = find_british_general(where); + game.log.push(g + " is captured!"); + move_general(g, CAPTURED_GENERALS); +} + +function capture_american_or_french_general(where) { + let g = find_american_or_french_general(where); + game.log.push(g + " is captured!"); + if (g == WASHINGTON) + capture_washington(); + else + move_general(g, CAPTURED_GENERALS); +} + +function capture_enemy_general(where) { + if (game.active == BRITISH) + capture_american_or_french_general(where); + else + capture_british_general(where); +} + +function remove_benedict_arnold() { + if (game.generals[ARNOLD].location) { + game.log.push("Arnold is removed from the game!"); + game.generals[ARNOLD].location = null; + } +} + +/* ARMIES */ + +function has_british_army(where) { + return has_british_general(where) && has_british_cu(where); +} + +function has_american_army(where) { + return has_american_or_french_general(where) && has_american_or_french_cu(where); +} + +function has_no_british_playing_piece(where) { + if (has_british_pc(where)) + return false; + if (has_british_general(where)) + return false; + if (has_british_cu(where)) + return false; + return true; +} + +function has_no_american_unit(where) { + if (has_american_or_french_general(where)) + return false; + if (has_american_or_french_cu(where)) + return false; + if (game.congress == where) + return false; + return true; +} + +function place_british_reinforcements(who, count, where) { + let already_there = find_british_general(where); + if (who && already_there) { + move_general(already_there, BRITISH_REINFORCEMENTS); + } + if (who) { + game.log.push("B reinforces " + where + " with " + who); + move_general(who, where); + } + if (count > 0) { + game.log.push("B reinforces " + where + " with " + count + " CU"); + move_british_cu(BRITISH_REINFORCEMENTS, where, count); + } +} + +function place_american_reinforcements(who, count, where) { + let already_there = find_american_or_french_general(where); + if (who && already_there) { + // Never replace Washington + if (already_there == WASHINGTON) + who = null; + else + move_general(already_there, AMERICAN_REINFORCEMENTS); + } + if (who) { + game.log.push("A reinforces " + where + " with " + who); + move_general(who, where); + } + game.log.push("A reinforces " + where + " with " + count + " CU"); + place_american_cu(where, count); +} + +function place_french_reinforcements(who, where) { + let already_there = find_american_or_french_general(where); + if (who && already_there) { + // Never replace Washington + if (already_there == WASHINGTON) + who = null; + else + move_general(already_there, AMERICAN_REINFORCEMENTS); + } + if (who) { + game.log.push("A reinforces " + where + " with " + who); + move_general(who, where); + } + game.log.push("A reinforces " + where + " with the French CU"); + move_cu(FRENCH, FRENCH_REINFORCEMENTS, where, count_french_cu(FRENCH_REINFORCEMENTS)); + move_cu(FRENCH, AMERICAN_REINFORCEMENTS, where, count_french_cu(AMERICAN_REINFORCEMENTS)); +} + +function location_of_general(g) { + return game.generals[g].location; +} + +function pickup_max_british_cu(where) { + game.carry_british = count_unmoved_british_cu(where); + if (game.carry_british > 5) + game.carry_british = 5; + game.carry_american = 0; + game.carry_french = 0; +} + +function pickup_max_american_cu(where) { + game.carry_british = 0; + game.carry_french = count_unmoved_french_cu(where); + game.carry_american = count_unmoved_american_cu(where); + if (game.carry_french > 5) + game.carry_french = 5; + if (game.carry_american + game.carry_french > 5) + game.carry_american = 5 - game.carry_french; +} + +function move_army(who, from, to) { + game.count -= movement_cost(from, to); + if (game.mobility && has_enemy_cu(to)) { + game.mobility = false; + game.count -= 1; + } + if (game.carry_british > 0) + move_cu(BRITISH, from, to, game.carry_british); + if (game.carry_american > 0) + move_cu(AMERICAN, from, to, game.carry_american); + if (game.carry_french > 0) + move_cu(FRENCH, from, to, game.carry_french); + move_general(who, to); +} + +function intercept_army(who, from, to) { + if (game.carry_british > 0) + move_cu(BRITISH, from, to, game.carry_british); + if (game.carry_american > 0) + move_cu(AMERICAN, from, to, game.carry_american); + if (game.carry_french > 0) + move_cu(FRENCH, from, to, game.carry_french); + move_general(who, to); +} + +function overrun(where) { + game.log.push(game.active[0] + " overruns CU in " + where); + let cu; + if (game.active == BRITISH) + cu = find_american_cu(where) || find_french_cu(where); + else + cu = find_british_cu(where); + remove_cu(cu.owner, where, 1); +} + +function retreat_american_army(from, to) { + let g = find_american_or_french_general(from); + if (g) + move_general(g, to); + move_cu(AMERICAN, from, to, count_american_cu(from)); + move_cu(FRENCH, from, to, count_french_cu(from)); +} + +function retreat_british_army(from, to) { + let g = find_british_general(from); + if (g) + move_general(g, to); + move_cu(BRITISH, from, to, count_british_cu(from)); +} + +function surrender_american_army(where) { + let g = find_american_or_french_general(where); + if (g) + capture_american_or_french_general(where); + remove_cu(AMERICAN, where, count_american_cu(where)); + remove_cu(FRENCH, where, count_french_cu(where)); +} + +function surrender_british_army(where) { + let g = find_british_general(where); + if (g) + capture_british_general(g); + game.british_losses += count_british_cu(where); + remove_cu(BRITISH, where, count_british_cu(where)); +} + +function disperse_continental_congress(where) { + game.log.push("Contintental Congress dispersed!"); + game.congress = CONTINENTAL_CONGRESS_DISPERSED; + game.congress_was_dispersed = true; +} + +/* MOVE GENERATORS */ + +function gen_action(action, argument) { + if (!game.actions) + game.actions = {} + if (argument != undefined) { + if (!(action in game.actions)) + game.actions[action] = [ argument ]; + else + game.actions[action].push(argument); + } else { + game.actions[action] = 1; + } +} + +function gen_action_undo() { + if (!game.actions) + game.actions = {} + if (game.undo && game.undo.length > 0) + game.actions.undo = 1; + else + game.actions.undo = 0; +} + +function gen_pass() { + gen_action('pass'); +} + +function gen_remove_british_pc_from(list_of_colonies) { + for (let colony of list_of_colonies) { + for (let space of COLONIES[colony]) { + if (has_british_pc(space) && has_no_british_cu(space)) { + gen_action('remove_pc', space); + } + } + } +} + +function gen_remove_american_pc() { + for (let space in SPACES) { + if (has_american_pc(space) && has_no_american_unit(space)) { + gen_action('remove_pc', space); + } + } +} + +function gen_remove_american_pc_from(list_of_colonies) { + for (let colony of list_of_colonies) { + for (let space of COLONIES[colony]) { + if (has_american_pc(space) && has_no_american_unit(space)) { + gen_action('remove_pc', space); + } + } + } +} + +function gen_remove_american_pc_from_non_port(list_of_colonies) { + for (let colony of list_of_colonies) { + for (let space of COLONIES[colony]) { + if (!SPACES[space].port) { + if (has_american_pc(space) && has_no_american_unit(space)) { + gen_action('remove_pc', space); + } + } + } + } +} + +function gen_remove_american_pc_within_two_spaces_of_a_british_general() { + let candidates = {}; + for (let g of BRITISH_GENERALS) { + let a = game.generals[g].location; + if (a in SPACES) { + candidates[a] = true; + for (let b of SPACES[a].exits) { + candidates[b] = true; + for (let c of SPACES[b].exits) { + candidates[c] = true; + } + } + } + } + for (let space in candidates) + if (has_american_pc(space) && has_no_american_unit(space)) + gen_action('remove_pc', space); +} + +function gen_place_american_pc() { + for (let space in SPACES) { + if (has_no_pc(space) && has_no_british_playing_piece(space)) { + gen_action('place_american_pc', space); + } + } +} + +function gen_place_american_pc_in(list_of_colonies) { + for (let colony of list_of_colonies) { + for (let space of COLONIES[colony]) { + if (has_no_pc(space) && has_no_british_playing_piece(space)) { + gen_action('place_american_pc', space); + } + } + } +} + +/* SETUP PHASE */ + +function goto_committees_of_correspondence() { + log(".h2.american Committes of Correspondence"); + log(""); + game.active = AMERICAN; + game.state = 'committees_of_correspondence'; + game.coc = THE_13_COLONIES.slice(); +} + +states.committees_of_correspondence = { + prompt: function (current) { + game.prompt = "Committees of Correspondence: Place 1 PC marker in each of the 13 colonies. " + game.coc.length + " left."; + if (game.coc.length > 0) + gen_place_american_pc_in(game.coc); + else + gen_pass(); + }, + place_american_pc: function (space) { + push_undo(); + let colony = SPACES[space].colony; + remove_from_array(game.coc, colony); + place_american_pc(space); + }, + pass: function () { + clear_undo(); + goto_for_the_king(); + } +} + +function goto_for_the_king() { + log(""); + log(".h2.british For the King"); + log(""); + delete game.coc; + game.active = BRITISH; + game.state = 'for_the_king'; + game.count = 3; + gen_british_pc_ops_start(); +} + +states.for_the_king = { + prompt: function (current) { + game.prompt = "For the King: Place 3 PC markers. " + game.count + " left."; + if (game.count > 0) + gen_british_pc_ops(); + else + gen_pass(); + }, + place_british_pc: function (space) { + push_undo(); + place_british_pc(space); + --game.count; + }, + pass: function () { + clear_undo(); + gen_british_pc_ops_end(); + goto_start_year(); + } +} + +/* REINFORCEMENTS AND START OF STRATEGY PHASE */ + +function automatic_victory() { + let n_american = 0; + let n_british = 0; + for (let space in SPACES) { + n_american += count_french_cu(space) + count_american_cu(space); + if (SPACES[space].colony != "CA") + n_british += count_british_cu(space); + } + if (n_american == 0) { + game.victory = "British Automatic Victory!"; + game.active = "None"; + game.result = BRITISH; + game.state = 'game_over'; + game.log.push(game.victory); + return true; + } + if (n_british == 0) { + game.victory = "American Automatic Victory!"; + game.active = "None"; + game.result = AMERICAN; + game.state = 'game_over'; + game.log.push(game.victory); + return true; + } + return false; +} + +function goto_start_year() { + log(""); + log(".h1 Year " + game.year); + log(""); + + // Prisoner exchange + for (let g of BRITISH_GENERALS) + if (game.generals[g].location == CAPTURED_GENERALS) + move_general(g, BRITISH_REINFORCEMENTS); + for (let g of AMERICAN_GENERALS) + if (game.generals[g].location == CAPTURED_GENERALS) + move_general(g, AMERICAN_REINFORCEMENTS); + + switch (game.year) { + case 1775: place_british_cu(BRITISH_REINFORCEMENTS, 3); break; + case 1776: place_british_cu(BRITISH_REINFORCEMENTS, 8); break; + case 1777: place_british_cu(BRITISH_REINFORCEMENTS, 1); break; + case 1778: place_british_cu(BRITISH_REINFORCEMENTS, 8); break; + case 1779: place_british_cu(BRITISH_REINFORCEMENTS, 1); break; + case 1780: place_british_cu(BRITISH_REINFORCEMENTS, 5); break; + case 1781: place_british_cu(BRITISH_REINFORCEMENTS, 1); break; + case 1782: place_british_cu(BRITISH_REINFORCEMENTS, 1); break; + case 1783: place_british_cu(BRITISH_REINFORCEMENTS, 1); break; + } + + if (game.year == 1776) { + game.deck.push(DECLARATION_OF_INDEPENDENCE); + game.deck.push(BARON_VON_STEUBEN); + } + + if (game.reshuffle) + reshuffle_deck(); + + game.a_hand = []; + game.b_hand = []; + for (let i = 0; i < 7; ++i) { + game.a_hand.push(deal_card()); + game.b_hand.push(deal_card()); + } + + game.a_queue = 0; + game.b_queue = 0; + game.did_discard_event = false; + + // TODO: save the played card numbers instead (rule 6.1B clarification) + game.played_british_reinforcements = 0; + game.played_american_reinforcements = []; + game.active = BRITISH; + game.state = 'british_declare_first'; +} + +states.british_declare_first = { + prompt: function (current) { + game.prompt = "Declare yourself as the first player by playing a campaign card?"; + gen_pass(); + for (let c of CAMPAIGN_CARDS) { + if (game.b_hand.includes(c)) { + gen_action('card_campaign', c); + } + } + }, + card_campaign: function (c) { + delete game.congress_was_dispersed; + game.log.push("B goes first by playing a campaign card"); + game.active = BRITISH; + goto_campaign(c); + }, + pass: function () { + if (game.congress_was_dispersed) + game.active = BRITISH; + else + game.active = AMERICAN; + game.state = 'choose_first_player'; + delete game.congress_was_dispersed; + }, +} + +states.choose_first_player = { + prompt: function (current) { + game.prompt = "Choose who will play the first strategy card."; + gen_action('american_first'); + gen_action('british_first'); + }, + american_first: function (c) { + game.log.push("A goes first"); + goto_strategy_phase(AMERICAN); + }, + british_first: function (c) { + game.log.push("B goes first"); + goto_strategy_phase(BRITISH); + }, +} + +/* STRATEGY PHASE */ + +function goto_strategy_phase(new_active) { + game.active = new_active; + game.state = 'strategy_phase'; + log(""); + if (game.active === AMERICAN) + log(".h2.american American Turn"); + else + log(".h2.british British Turn"); + log(""); +} + +states.strategy_phase = { + prompt: function (current) { + game.prompt = "Play a strategy card."; + gen_strategy_plays(active_hand()); + }, + card_campaign: function (c) { + game.did_discard_event = false; + clear_queue(); + goto_campaign(c); + }, + card_play_event: function (c) { + push_undo(); + game.did_discard_event = false; + clear_queue(); + do_event(c); + }, + card_discard_event: function (c) { + push_undo(); + game.did_discard_event = true; + clear_queue(); + discard_card(c, "PC action"); + game.state = 'discard_event_pc_action'; + }, + card_ops_pc: function (c) { + push_undo(); + game.did_discard_event = false; + clear_queue(); + play_card(c, "for PC"); + goto_ops_pc(CARDS[c].count); + }, + card_ops_reinforcements: function (c) { + push_undo(); + game.did_discard_event = false; + clear_queue(); + goto_ops_reinforcements(c); + }, + card_ops_queue: function (c) { + game.did_discard_event = false; + play_card(c, "to queue"); + if (game.active == BRITISH) + game.b_queue += CARDS[c].count; + else + game.a_queue += CARDS[c].count; + end_strategy_card(); + }, + card_ops_general: function (c) { + push_undo(); + game.did_discard_event = false; + goto_ops_general(c); + }, + exchange_for_discard: function (c) { + game.did_discard_event = false; + let d = game.discard.pop(); + discard_card(c); + active_hand().push(d); + game.log.push(game.active[0] + " picks up " + d + ": " + CARDS[d].title); + }, +} + +function end_strategy_card() { + clear_undo(); + + if (automatic_victory()) + return; + + if (game.campaign) { + if (--game.campaign > 0) { + game.count = 3; // can activate any general! + game.state = 'ops_general_who'; + return; + } else { + delete game.landing_party; + delete game.campaign; + } + } + + if (!game.french_alliance_triggered && game.french_alliance == 9) { + game.log.push("The French sign an alliance with the Americans!"); + game.french_alliance_triggered = true; + if (game.french_navy == FRENCH_REINFORCEMENTS) { + game.save_active = game.active; + game.active = AMERICAN; + game.state = 'place_french_navy_trigger'; + return; + } + } + + game.moved = {}; + for (let cu of game.cu) + cu.moved = 0; + + goto_strategy_phase(ENEMY[game.active]); + + let hand = active_hand(); + if (hand.length == 0) { + game.active = ENEMY[game.active]; + hand = active_hand(); + if (hand.length == 0) + return goto_winter_attrition_phase(); + } +} + +function clear_queue() { + if (game.active == BRITISH) + game.b_queue = 0; + else + game.a_queue = 0; +} + +function gen_strategy_plays(hand) { + for (let c of hand) { + let card = CARDS[c]; + switch (card.type) { + case 'mandatory-event': + gen_action('card_play_event', c); + break; + case 'campaign': + gen_action('card_campaign', c); + break; + case 'ops': + if (can_exchange_for_discard(c)) + gen_action('exchange_for_discard', c); + if (can_activate_general(c)) + gen_action('card_ops_general', c); + gen_action('card_ops_pc', c); + if (can_play_reinforcements()) + gen_action('card_ops_reinforcements', c); + if (card.count < 3) + gen_action('card_ops_queue', c); + break; + case 'british-event': + case 'british-event-or-battle': + if (game.active == BRITISH) + if (can_play_event(c)) + gen_action('card_play_event', c); + gen_action('card_discard_event', c); + break; + case 'american-event': + if (game.active == AMERICAN) + if (can_play_event(c)) + gen_action('card_play_event', c); + gen_action('card_discard_event', c); + break; + case 'british-battle': + case 'american-battle': + gen_action('card_discard_event', c); + break; + } + } +} + +/* DISCARD EVENT CARD FOR PC ACTION */ + +states.discard_event_pc_action = { + prompt: function (current) { + game.prompt = "Place, flip, or remove PC marker."; + gen_pass(); + if (game.active == BRITISH) + gen_british_discard_event_pc_action(); + else + gen_american_discard_event_pc_action(); + }, + place_british_pc: function (space) { + place_british_pc(space); + end_strategy_card(); + }, + place_american_pc: function (space) { + place_american_pc(space); + end_strategy_card(); + }, + remove_pc: function (space) { + remove_pc(space); + end_strategy_card(); + }, + flip_pc: function (space) { + flip_pc(space); + end_strategy_card(); + }, + pass: function () { + end_strategy_card(); + }, +} + +function gen_british_discard_event_pc_action() { + for (let space in SPACES) { + if (is_adjacent_to_british_pc(space)) { + if (has_no_pc(space) && has_no_american_unit(space)) + gen_action('place_british_pc', space); + else if (has_american_pc(space) && has_british_army(space)) + gen_action('flip_pc', space); + else if (has_american_pc(space) && has_no_american_unit(space)) + gen_action('remove_pc', space); + } + } +} + +function gen_american_discard_event_pc_action() { + for (let space in SPACES) { + if (is_adjacent_to_american_pc(space)) { + if (has_no_pc(space) && has_no_british_cu(space)) { + if (allowed_to_place_american_pc()) + gen_action('place_american_pc', space); + } + else if (has_british_pc(space) && has_american_or_french_general(space)) { + gen_action('flip_pc', space); + } + else if (has_british_pc(space) && has_no_british_cu(space)) { + gen_action('remove_pc', space); + } + } + } +} + +/* PLAY OPS CARD FOR PC ACTIONS */ + +function goto_ops_pc(count) { + game.count = count; + game.state = 'ops_pc'; + if (game.active == BRITISH) + gen_british_pc_ops_start(); +} + +states.ops_pc = { + prompt: function (current) { + game.prompt = "Place or flip PC markers. " + game.count + " left."; + gen_pass(); + if (game.count > 0) { + if (game.active == BRITISH) + gen_british_pc_ops(); + else + gen_american_pc_ops() + } + }, + place_british_pc: function (space) { + push_undo(); + place_british_pc(space); + --game.count; + }, + place_american_pc: function (space) { + push_undo(); + place_american_pc(space); + --game.count; + }, + flip_pc: function (space) { + push_undo(); + flip_pc(space); + --game.count; + }, + pass: function () { + if (game.active == BRITISH) + gen_british_pc_ops_end(); + end_strategy_card(); + }, +} + +function gen_british_pc_ops_start() { + game.british_pc_space_list = []; + for (let space in SPACES) { + if (has_no_pc(space) && has_no_american_unit(space)) { + if (is_adjacent_to_british_pc(space)) + game.british_pc_space_list.push(space); + } + } +} + +function gen_british_pc_ops() { + for (let space of game.british_pc_space_list) + gen_action('place_british_pc', space); + for (let space in SPACES) { + if (has_british_army(space)) { + if (has_no_pc(space)) + gen_action('place_british_pc', space); + else if (has_american_pc(space)) + gen_action('flip_pc', space); + } + } +} + +function gen_british_pc_ops_end(space) { + delete game.british_pc_space_list; +} + +function gen_american_pc_ops() { + for (let space in SPACES) { + if (has_no_pc(space) && has_no_british_cu(space)) { + if (allowed_to_place_american_pc()) + gen_action('place_american_pc', space); + } + else if (has_british_pc(space) && has_american_or_french_general(space)) { + gen_action('flip_pc', space); + } + } +} + +/* PLAY OPS CARD FOR REINFORCEMENTS */ + +function goto_ops_reinforcements(c) { + let count = CARDS[c].count; + play_card(c, "for reinforcements"); + if (game.active == BRITISH) { + game.played_british_reinforcements = count; + game.count = count_british_cu(BRITISH_REINFORCEMENTS); + game.state = 'ops_british_reinforcements_who'; + } else { + game.played_american_reinforcements.push(count); + game.count = count; + game.state = 'ops_american_reinforcements_who'; + } +} + +states.ops_british_reinforcements_who = { + prompt: function (current) { + game.prompt = "Reinforcements: choose an available general or pass to bring only CU." + game.prompt += " Carrying " + game.count + " British CU."; + gen_pass(); + gen_british_reinforcements_who(); + }, + drop_british_cu: function () { + --game.count; + }, + pickup_british_cu: function () { + ++game.count; + }, + select_general: function (g) { + push_undo(); + game.state = 'ops_british_reinforcements_where'; + game.who = g; + }, + pass: function () { + push_undo(); + game.state = 'ops_british_reinforcements_where'; + game.who = null; + }, +} + +states.ops_british_reinforcements_where = { + prompt: function (current) { + game.prompt = "Reinforcements: choose a port space."; + game.prompt += " Carrying " + game.count + " British CU."; + gen_british_reinforcements_where(); + }, + drop_british_cu: function () { + --game.count; + }, + pickup_british_cu: function () { + ++game.count; + }, + place_reinforcements: function (space) { + place_british_reinforcements(game.who, game.count, space); + end_strategy_card(); + game.who = null; + }, +} + +states.ops_american_reinforcements_who = { + prompt: function (current) { + game.prompt = "Reinforcements: choose an available general or pass to bring only CU."; + gen_pass(); + gen_american_reinforcements_who(); + }, + select_general: function (g) { + push_undo(); + game.state = 'ops_american_reinforcements_where'; + game.who = g; + }, + pass: function () { + push_undo(); + game.state = 'ops_american_reinforcements_where'; + game.who = null; + }, +} + +states.ops_american_reinforcements_where = { + prompt: function (current) { + game.prompt = "Reinforcements: choose a space."; + gen_american_reinforcements_where(game.who); + }, + place_reinforcements: function (space) { + if (game.who == ROCHAMBEAU) + place_french_reinforcements(game.who, space); + else + place_american_reinforcements(game.who, game.count, space); + end_strategy_card(); + game.who = null; + }, +} + +function gen_british_reinforcements_who() { + for (let g of BRITISH_GENERALS) { + let general = game.generals[g]; + if (general.location == BRITISH_REINFORCEMENTS) { + gen_action('select_general', g); + } + } + if (game.count > 0) + gen_action('drop_british_cu'); + if (game.count < count_british_cu(BRITISH_REINFORCEMENTS)) + gen_action('pickup_british_cu'); +} + +function gen_british_reinforcements_where() { + for (let space in SPACES) { + if (is_non_blockaded_port(space)) + if (!has_american_or_french_cu(space) && !has_american_pc(space)) + gen_action('place_reinforcements', space); + } + if (game.count > 0) + gen_action('drop_british_cu'); + if (game.count < count_british_cu(BRITISH_REINFORCEMENTS)) + gen_action('pickup_british_cu'); +} + +function gen_american_reinforcements_who() { + for (let g of AMERICAN_GENERALS) { + let general = game.generals[g]; + if (general.location == AMERICAN_REINFORCEMENTS) { + gen_action('select_general', g); + } + } +} + +function gen_american_reinforcements_where(general) { + for (let space in SPACES) { + if (!has_british_cu(space) && !has_british_pc(space)) { + if (general == ROCHAMBEAU) { + if (SPACES[space].port) + gen_action('place_reinforcements', space); + } else { + gen_action('place_reinforcements', space); + } + } + } +} + +/* PLAY OPS CARD TO MOVE A GENERAL */ + +function goto_ops_general(c) { + play_card(c, " to activate a general"); + if (game.active == BRITISH) { + game.count = CARDS[c].count + game.b_queue; + game.b_queue = 0; + } else { + game.count = CARDS[c].count + game.a_queue; + game.a_queue = 0; + } + game.state = 'ops_general_who'; +} + +states.ops_general_who = { + prompt: function (current) { + if (game.campaign && game.landing_party) + game.prompt = "Campaign: Activate a general or use a landing party. " + game.campaign + " left."; + else if (game.campaign) + game.prompt = "Campaign: Activate a general. " + game.campaign + " left."; + else + game.prompt = "Activate a general with strategy rating " + game.count + " or lower."; + if (game.landing_party) + gen_landing_party(); + gen_activate_general(); + gen_pass(); + }, + place_british_pc: function (where) { + game.landing_party = 0; + place_british_pc(where); + end_strategy_card(); + }, + flip_pc: function (where) { + game.landing_party = 0; + flip_pc(where); + end_strategy_card(); + }, + select_general: function (g) { + push_undo(); + goto_ops_general_move(g, false); + }, + pass: function () { + if (game.campaign > 0) + game.campaign = 0; + end_strategy_card(); + } +} + +function gen_landing_party() { + for (let space in SPACES) { + if (!is_fortified_port(space) && is_non_blockaded_port(space)) { + if (has_american_pc(space) && has_no_american_unit(space)) + gen_action('flip_pc', space); + if (has_no_pc(space) && has_no_american_unit(space) && has_no_british_playing_piece(space)) + gen_action('place_british_pc', space); + } + } +} + +function gen_activate_general() { + if (game.active == BRITISH) + return gen_activate_british_general(); + else + return gen_activate_american_general(); +} + +function gen_activate_british_general() { + for (let g of BRITISH_GENERALS) + if (is_general_on_map(g) && GENERALS[g].strategy <= game.count && !game.moved[g]) + gen_action('select_general', g); +} + +function gen_activate_american_general() { + for (let g of AMERICAN_GENERALS) + if (is_general_on_map(g) && GENERALS[g].strategy <= game.count && !game.moved[g]) + gen_action('select_general', g); +} + +function goto_remove_general(where) { + game.state = 'remove_general'; + game.where = where; +} + +states.remove_general = { + prompt: function (current) { + game.prompt = "Remove a general to the reinforcements box."; + gen_remove_general(); + }, + select_general: function (g) { + if (game.active == BRITISH) + move_general(g, BRITISH_REINFORCEMENTS); + else + move_general(g, AMERICAN_REINFORCEMENTS); + end_strategy_card(); + }, +} + +function goto_remove_general_after_intercept() { + game.state = 'remove_general_after_intercept'; +} + +states.remove_general_after_intercept = { + prompt: function (current) { + game.prompt = "Remove a general to the reinforcements box."; + gen_remove_general(); + }, + select_general: function (g) { + if (game.active == BRITISH) + move_general(g, BRITISH_REINFORCEMENTS); + else + move_general(g, AMERICAN_REINFORCEMENTS); + end_intercept(); + }, +} + +function goto_remove_general_after_retreat(where) { + game.state = 'remove_general_after_retreat'; + game.where = where; +} + +states.remove_general_after_retreat = { + prompt: function (current) { + game.prompt = "Remove a general to the reinforcements box."; + gen_remove_general(); + }, + select_general: function (g) { + if (game.active == BRITISH) + move_general(g, BRITISH_REINFORCEMENTS); + else + move_general(g, AMERICAN_REINFORCEMENTS); + end_battle(); + }, +} + +function gen_remove_general() { + if (game.active == BRITISH) + return gen_remove_british_general(); + else + return gen_remove_american_general(); +} + +function gen_remove_british_general() { + for (let g of BRITISH_GENERALS) + if (location_of_general(g) == game.where) + gen_action('select_general', g); +} + +function gen_remove_american_general() { + for (let g of AMERICAN_GENERALS) + if (g != WASHINGTON) + if (location_of_general(g) == game.where) + gen_action('select_general', g); +} + +function goto_ops_general_move(g, marblehead) { + game.state = 'ops_general_move'; + game.who = g; + if (marblehead) { + game.mobility = false; + game.count = 6; + } else { + if (game.active == BRITISH) { + game.mobility = false; + game.count = 4; + } else { + game.mobility = true; + game.count = 5; + } + } + let where = location_of_general(g); + if (game.active == BRITISH) + pickup_max_british_cu(where); + else + pickup_max_american_cu(where); +} + +states.ops_general_move = { + prompt: function (current) { + game.prompt = "Move " + game.who + " with "; + if (game.carry_british > 0) { + game.prompt += game.carry_british + " British CU."; + } else if (game.carry_french + game.carry_american > 0) { + if (game.carry_french > 0) { + if (game.carry_american > 0) { + game.prompt += game.carry_french + " French CU and "; + game.prompt += game.carry_american + " American CU."; + } else { + game.prompt += game.carry_french + " French CU."; + } + } else { + game.prompt += game.carry_american + " American CU."; + } + } else { + game.prompt += game.carry_american + " no CU."; + } + if (game.count == 1) + game.prompt += " " + game.count + " move left."; + else if (game.count > 1) + game.prompt += " " + game.count + " moves left."; + + // Cannot stop on enemy general + if (!has_enemy_general(location_of_general(game.who))) + gen_pass(); + + gen_carry_cu(); + gen_move_general(); + }, + + pickup_british_cu: function () { ++game.carry_british; }, + pickup_american_cu: function () { ++game.carry_american; }, + pickup_french_cu: function () { ++game.carry_french; }, + + drop_british_cu: function () { + push_undo(); + --game.carry_british; + if (game.moved[game.who]) + mark_moved_cu(BRITISH, location_of_general(game.who), 1); + }, + drop_american_cu: function () { + push_undo(); + --game.carry_american; + if (game.moved[game.who]) + mark_moved_cu(AMERICAN, location_of_general(game.who), 1); + }, + drop_french_cu: function () { + push_undo(); + --game.carry_french; + if (game.moved[game.who]) + mark_moved_cu(FRENCH, location_of_general(game.who), 1); + }, + + move: function (to) { + push_undo(); + + game.moved[game.who] = 1; + let from = location_of_general(game.who); + let cu = game.carry_british + game.carry_american + game.carry_french; + + let intercept = false; + if (game.active == BRITISH) { + let is_sea_move = (path_type(from, to) == undefined); + if (has_american_pc(to) && cu > 0 && !is_sea_move && !has_british_cu(to)) + intercept = can_intercept_to(to); + } + + move_army(game.who, from, to); + + if (cu > 0) { + if (has_enemy_general(to) && !has_enemy_cu(to)) { + capture_enemy_general(to); + } + if (game.active == BRITISH && game.congress == to && !has_enemy_cu(to)) { + disperse_continental_congress(to); + } + if (cu >= 4 && count_enemy_cu(to) == 1 && !has_enemy_general(to)) { + overrun(to); + } + } + + if (intercept) + goto_intercept(from, to); + else + resume_moving(from, to); + }, + pass: function () { + clear_undo(); + let where = location_of_general(game.who); + end_move(); + if (count_friendly_generals(where) > 1) + goto_remove_general(where); + else + end_strategy_card(); + }, +} + +function resume_moving(from, to) { + if (has_enemy_cu(to)) { + end_move(); + goto_start_battle(from, to); + } +} + +function can_intercept_to(to) { + for (let space of SPACES[to].exits) { + if (has_american_army(space)) { + let g = find_american_or_french_general(space); + if (g && !game.moved[g]) + return true; + } + } + return false; +} + +function gen_intercept() { + for (let space of SPACES[game.where].exits) { + if (has_american_army(space)) { + let g = find_american_or_french_general(space); + if (g && !game.moved[g]) + gen_action('select_general', g); + else if (g) + console.log(g, "already moved"); + } + } +} + +function goto_intercept(from, where) { + clear_undo(); + game.save_who = game.who; + game.who = null; + game.from = from; + game.where = where; + game.active = AMERICAN; + game.state = 'intercept'; +} + +states.intercept = { + prompt: function (current) { + game.prompt = "Intercept " + game.save_who + " in " + game.where + "?"; + gen_pass(); + gen_intercept(); + }, + select_general: function (g) { + // TODO: roll for intercept! + game.moved[g] = 1; + let die = roll_d6(); + if (die <= GENERALS[g].agility) { + game.log.push(g + " intercepts (" + die + " <= " + GENERALS[g].agility + ")"); + game.did_intercept = 1; + + let save_carry_british = game.carry_british; + let save_carry_american = game.carry_american; + let save_carry_french = game.carry_french; + + pickup_max_american_cu(location_of_general(g)); + intercept_army(g, location_of_general(g), game.where); + + game.carry_british = save_carry_british; + game.carry_american = save_carry_american; + game.carry_french = save_carry_french; + + if (count_friendly_generals(game.where) > 1) + goto_remove_general_after_intercept(); + else + end_intercept(); + } else { + game.log.push(g + " fails to intercept (" + die + " > " + GENERALS[g].agility + ")"); + if (!can_intercept_to(game.where)) + end_intercept(); + } + }, + pass: function () { + end_intercept(); + }, +} + +function end_intercept() { + game.active = BRITISH; + game.state = 'ops_general_move'; + game.who = game.save_who; + delete game.save_who; + resume_moving(game.from, game.where); + delete game.from; +} + +function end_move() { + let where = location_of_general(game.who); + if (game.moved[game.who]) { + mark_moved_cu(BRITISH, where, game.carry_british); + mark_moved_cu(AMERICAN, where, game.carry_american); + mark_moved_cu(FRENCH, where, game.carry_french); + } + game.who = null; + delete game.mobility; + delete game.carry_british; + delete game.carry_american; + delete game.carry_french; +} + +function path_type(from, to) { + return PATH_TYPE[PATH_INDEX[from][to]]; +} + +function path_name(from, to) { + return PATH_NAME[PATH_INDEX[from][to]]; +} + +function gen_carry_cu() { + let where = location_of_general(game.who); + if (game.active == BRITISH) { + if (game.carry_british > 0) + gen_action('drop_british_cu'); + if (game.carry_british < 5 && game.carry_british < count_unmoved_british_cu(where)) + gen_action('pickup_british_cu'); + } else { + let carry_total = game.carry_french + game.carry_american; + if (game.carry_french > 0) + gen_action('drop_french_cu'); + if (game.carry_american > 0) + gen_action('drop_american_cu'); + if (carry_total < 5 && game.carry_french < count_unmoved_french_cu(where)) + gen_action('pickup_french_cu'); + if (carry_total < 5 && game.carry_american < count_unmoved_american_cu(where)) + gen_action('pickup_american_cu'); + } +} + +function movement_cost(from, to) { + switch (path_type(from, to)) { + case undefined: return 4; /* must be a sea connection if no direct path */ + case 'wilderness': return 3; + default: return 1; + } +} + +function gen_move_general() { + let from = location_of_general(game.who); + let alone = (game.carry_british + game.carry_american + game.carry_french) == 0; + for (let to of SPACES[from].exits) { + let mp = 1; + if (path_type(from, to) == 'wilderness') { + if (path_name(from, to) == FALMOUTH_QUEBEC) + if (game.who != ARNOLD) + continue; + mp = 3; + } + + if (alone) { + if (has_enemy_cu(to)) + continue; + if (has_enemy_pc(to)) + continue; + // TODO: more robust check for not stopping (or allow undo in case he gets stuck) + if (has_enemy_general(to) && game.count - mp == 0) + continue; + } + + if (game.mobility && has_enemy_cu(to)) { + if (game.count - mp >= 1) + gen_action('move', to); + } else { + if (game.count - mp >= 0) + gen_action('move', to); + } + } + if (game.active == BRITISH && game.count == 4) { + if (is_non_blockaded_port(from)) { + for (let to in SPACES) { + if (to != from) { + if (is_non_blockaded_port(to)) { + if (!has_american_pc(to) && !has_american_or_french_cu(to)) { + // TODO: duplicate action if can move by normal road + gen_action('move', to); + } + } + } + } + } + } +} + +/* CAMPAIGN */ + +function goto_campaign(c) { + play_card(c); + game.state = 'campaign'; + game.campaign = CARDS[c].count; + game.landing_party = game.active == BRITISH ? 1 : 0; + game.count = 3; // can activate any general! + game.state = 'ops_general_who'; +} + +/* EVENTS */ + +events.the_war_ends = function (c, card) { + game.log.push(game.active[0] + " plays " + c + ": " + CARDS[c].title); + game.log.push("The war will end in " + card.year); + game.last_played = c; + remove_from_array(active_hand(), c); + if (game.war_ends) + game.discard.push(WAR_ENDS_1779 + game.war_ends - 1779); + game.war_ends = card.year; + end_strategy_card(); +} + +events.remove_random_british_card = function (c, card) { + play_card(c); + remove_random_card(game.b_hand); +} + +events.remove_random_american_card = function (c, card) { + play_card(c); + remove_random_card(game.a_hand); +} + +function remove_random_card(hand) { + if (hand.length > 0) { + let i = random(hand.length); + let c = hand[i]; + discard_card_from_hand(hand, c); + if (CARDS[c].type == 'mandatory-event') + do_event(c); + else + end_strategy_card(); + } +} + +function advance_french_alliance(count) { + if (game.french_alliance < 9) { + game.french_alliance += count; + if (game.french_alliance > 9) + game.french_alliance = 9; + game.log.push("French alliance advances to " + count); + } +} + +function lose_regular_advantage() { + if (game.regulars) { + game.log.push("The British Regulars Advantage is lost!"); + game.regulars = false; + advance_french_alliance(2); + } +} + +events.baron_von_steuben_trains_the_continental_army = function (c, card) { + play_card(c); + if (is_general_on_map(WASHINGTON)) { + let where = location_of_general(WASHINGTON); + game.log.push("A places 2 CU with Washington in " + where); + place_american_cu(where, 2); + lose_regular_advantage(); + } + end_strategy_card(); +} + +events.advance_french_alliance = function (c, card) { + play_card(c); + advance_french_alliance(card.count); + end_strategy_card(); +} + +events.remove_french_navy = function (c, card) { + play_card(c); + game.french_navy = TURN_TRACK[game.year+1]; + end_strategy_card(); +} + +events.remove_british_pc_from = function (c, card) { + play_card(c); + game.count = card.count; + game.where = card.where; + game.state = 'remove_british_pc_from'; +} + +states.remove_british_pc_from = { + prompt: function (current) { + game.prompt = "Remove British PC markers from " + game.where.join(", ") + ". " + game.count + " left."; + gen_pass(); + gen_remove_british_pc_from(game.where); + }, + remove_pc: function (where) { + remove_pc(where); + if (--game.count == 0) { + delete game.where; + end_strategy_card(); + } + }, + pass: function () { + delete game.where; + end_strategy_card(); + }, +} + +events.remove_american_pc = function (c, card) { + play_card(c); + game.count = card.count; + game.state = 'remove_american_pc'; +} + +states.remove_american_pc = { + prompt: function (current) { + game.prompt = "Remove American PC markers. " + game.count + " left."; + gen_pass(); + gen_remove_american_pc(); + }, + remove_pc: function (where) { + remove_pc(where); + if (--game.count == 0) { + end_strategy_card(); + } + }, + pass: function () { + end_strategy_card(); + }, +} + +events.remove_american_pc_from = function (c, card) { + play_card(c); + game.count = card.count; + game.where = card.where; + game.state = 'remove_american_pc_from'; +} + +states.remove_american_pc_from = { + prompt: function (current) { + game.prompt = "Remove American PC markers from " + game.where.join(", ") + ". " + game.count + " left."; + gen_pass(); + gen_remove_american_pc_from(game.where); + }, + remove_pc: function (where) { + remove_pc(where); + if (--game.count == 0) { + delete game.where; + end_strategy_card(); + } + }, + pass: function () { + delete game.where; + end_strategy_card(); + }, +} + +events.remove_american_pc_from_non_port = function (c, card) { + play_card(c); + game.count = card.count; + game.where = card.where; + game.state = 'remove_american_pc_from_non_port'; +} + +states.remove_american_pc_from_non_port = { + prompt: function (current) { + game.prompt = "Remove American PC markers from non-Port space in " + game.where.join(", ") + ". " + game.count + " left."; + gen_pass(); + gen_remove_american_pc_from_non_port(game.where); + }, + remove_pc: function (where) { + remove_pc(where); + if (--game.count == 0) { + delete game.where; + end_strategy_card(); + } + }, + pass: function () { + delete game.where; + end_strategy_card(); + }, +} + +events.remove_american_pc_within_two_spaces_of_a_british_general = function (c, card) { + play_card(c); + game.count = card.count; + game.state = 'remove_american_pc_within_two_spaces_of_a_british_general'; +} + +states.remove_american_pc_within_two_spaces_of_a_british_general = { + prompt: function (current) { + game.prompt = "Remove American PC markers within two spaces of a British general. " + game.count + " left."; + gen_pass(); + gen_remove_american_pc_within_two_spaces_of_a_british_general(); + }, + remove_pc: function (where) { + remove_pc(where); + if (--game.count == 0) { + delete game.where; + end_strategy_card(); + } + }, + pass: function () { + delete game.where; + end_strategy_card(); + }, +} + +events.place_american_pc = function (c, card) { + play_card(c); + game.count = card.count; + game.state = 'place_american_pc'; +} + +states.place_american_pc = { + prompt: function (current) { + game.prompt = "Place American PC markers. " + game.count + " left."; + gen_pass(); + gen_place_american_pc(); + }, + place_american_pc: function (where) { + place_american_pc(where); + if (--game.count == 0) { + end_strategy_card(); + } + }, + pass: function () { + end_strategy_card(); + }, +} + +events.place_american_pc_in = function (c, card) { + play_card(c); + game.count = card.count; + game.where = card.where; + game.state = 'place_american_pc_in'; +} + +states.place_american_pc_in = { + prompt: function (current) { + game.prompt = "Place American PC markers in " + game.where.join(", ") + ". " + game.count + " left."; + gen_pass(); + gen_place_american_pc_in(game.where); + }, + place_american_pc: function (where) { + place_american_pc(where); + if (--game.count == 0) { + delete game.where; + end_strategy_card(); + } + }, + pass: function () { + delete game.where; + end_strategy_card(); + }, +} + +events.lord_sandwich_coastal_raids = function (c, card) { + play_card(c); + game.state = 'lord_sandwich_coastal_raids'; + game.count = 2; + game.where = null; +} + +states.lord_sandwich_coastal_raids = { + prompt: function (current) { + game.prompt = "Remove two or flip one American PC in a port space."; + gen_pass(); + gen_lord_sandwich_coastal_raids(game.where); + }, + place_british_pc: function (where) { + place_british_pc(where); + end_strategy_card(); + }, + remove_pc: function (where) { + game.where = where; + remove_pc(where); + if (--game.count == 0) + end_strategy_card(); + }, + pass: function () { + end_strategy_card(); + }, +} + +function gen_lord_sandwich_coastal_raids(first_removed) { + for (let space in SPACES) { + if (SPACES[space].port) + if (has_american_pc(space) && has_no_american_unit(space)) + gen_action('remove_pc', space); + if (space == first_removed) + gen_action('place_british_pc', space); + } +} + +events.remove_american_cu = function (c, card) { + play_card(c); + game.state = 'remove_american_cu'; +} + +states.remove_american_cu = { + prompt: function (current) { + game.prompt = "Remove one American CU from any space."; + gen_pass(); + gen_remove_american_cu(); + }, + remove_cu: function (where) { + let cu = find_american_cu(where) || find_french_cu(where); + remove_cu(cu.owner, where, 1); + end_strategy_card(); + }, + pass: function () { + end_strategy_card(); + }, +} + +function gen_remove_american_cu() { + for (let space in SPACES) { + if (has_american_or_french_cu(space)) + gen_action('remove_cu', space); + } +} + +function gen_remove_british_cu() { + for (let space in SPACES) { + if (has_british_cu(space)) + gen_action('remove_cu', space); + } +} + +events.pennsylvania_and_new_jersey_line_mutinies = function (c, card) { + play_card(c); + game.pennsylvania_and_new_jersey_line_mutinies = true; + game.state = 'pennsylvania_and_new_jersey_line_mutinies'; + game.count = 2; + game.where = null; +} + +states.pennsylvania_and_new_jersey_line_mutinies = { + prompt: function (current) { + game.prompt = "Remove two American CUs from the map, one each from two different spaces."; + gen_pass(); + gen_pennsylvania_and_new_jersey_line_mutinies(game.where); + }, + remove_cu: function (where) { + let cu = find_american_cu(where) || find_french_cu(where); + remove_cu(cu.owner, where, 1); + game.where = where; + if (--game.count == 0) + end_strategy_card(); + }, + pass: function () { + end_strategy_card(); + }, +} + +function gen_pennsylvania_and_new_jersey_line_mutinies(first_removed) { + for (let space in SPACES) { + if (has_american_or_french_cu(space)) + if (space != first_removed) + gen_action('remove_cu', space); + } +} + +events.john_glovers_marblehead_regiment = function (c, card) { + play_card(c); + game.state = 'john_glovers_marblehead_regiment_who'; + game.count = 3; // strategy rating for gen_activate_general +} + +states.john_glovers_marblehead_regiment_who = { + prompt: function (current) { + game.prompt = "Activate an American general."; + gen_activate_general(); + }, + select_general: function (g) { + goto_ops_general_move(g, true); + }, +} + +events.declaration_of_independence = function (c, card) { + play_card(c); + game.last_active = game.active; + game.active = AMERICAN; + game.doi = THE_13_COLONIES.slice(); + game.state = 'declaration_of_independence'; +} + +states.declaration_of_independence = { + prompt: function (current) { + game.prompt = "Declaration of Independence: Place 1 PC marker in each of the 13 colonies. "; + game.prompt += game.doi.length + " left."; + gen_pass(); + gen_place_american_pc_in(game.doi); + }, + place_american_pc: function (space) { + let colony = SPACES[space].colony; + remove_from_array(game.doi, colony); + place_american_pc(space); + if (game.doi.length == 0) + end_declaration_of_independence(); + }, + pass: function () { + end_declaration_of_independence(); + } +} + +function end_declaration_of_independence() { + game.active = game.last_active; + delete game.last_active; + delete game.doi; + end_strategy_card(); +} + +function goto_george_washington_captured() { + /* Save all the state we clobber during the interrupt. */ + game.last_state = game.state; + game.last_active = game.active; + game.last_count = game.count; + + game.state = 'george_washington_captured'; + game.active = BRITISH; + game.count = 5; +} + +states.george_washington_captured = { + prompt: function (current) { + game.prompt = "George Washington is captured! Remove American PC markers. " + game.count + " left."; + gen_pass(); + gen_remove_american_pc(); + }, + remove_pc: function (where) { + remove_pc(where); + if (--game.count == 0) { + end_george_washington_captured(); + } + }, + pass: function () { + end_george_washington_captured(); + }, +} + +function end_george_washington_captured() { + /* Restore previous state. */ + game.state = game.last_state; + game.count = game.last_count; + game.active = game.last_active; + delete game.last_state; + delete game.last_active; + delete game.last_count; +} + +function do_event(c) { + let card = CARDS[c]; + if (card.event in events) + events[card.event](c, card); + else + throw new Error("Event not implemented yet: " + card.event) +} + +/* BATTLE */ + +function can_retreat_before_battle(where) { + if (game.did_intercept) + return false; + // can't retreat if attempted (successful or not) interception! + let g = find_american_or_french_general(where); + if (g && !game.moved[g]) + return true; + return false; +} + +function goto_start_battle(from, where) { + clear_undo(); + game.attacker = game.active; + game.attack_from = from; + game.british_losses = 0; + game.where = where; + game.a_bonus = 0; + game.b_bonus = 0; + if (game.active == BRITISH && can_retreat_before_battle(where)) + goto_retreat_before_battle(); + else + goto_play_attacker_battle_card(); +} + +function goto_retreat_before_battle() { + game.active = AMERICAN; + game.who = find_american_or_french_general(game.where); + game.state = 'retreat_before_battle'; +} + +states.retreat_before_battle = { + prompt: function (current) { + game.prompt = "Attempt retreat before battle?"; + gen_pass(); + gen_defender_retreat(); + }, + move: function (to) { + let agility = GENERALS[game.who].agility; + if (GENERALS[game.who].bonus) + agility += 2; + let roll = roll_d6(); + if (roll <= agility) { + game.log.push("A successfully retreats before battle: " + roll + " <= " + agility); + pickup_max_american_cu(game.where); + move_army(game.who, game.where, to); + goto_remove_general_after_retreat_before_battle(to); + } else { + game.log.push("A fails to retreat before battle: " + roll + " > " + agility); + end_retreat_before_battle(); + } + }, + pass: function () { + end_retreat_before_battle(); + }, +} + +function goto_remove_general_after_retreat_before_battle(to) { + if (count_friendly_generals(to) > 1) { + game.state = 'remove_general_after_retreat_before_battle'; + game.save_where = game.where; + game.where = to; + } else { + end_remove_general_after_retreat_before_battle(); + } +} + +states.remove_general_after_retreat_before_battle = { + prompt: function (current) { + game.prompt = "Remove a general to the reinforcements box."; + gen_remove_general(); + }, + select_general: function (g) { + if (game.active == BRITISH) + move_general(g, BRITISH_REINFORCEMENTS); + else + move_general(g, AMERICAN_REINFORCEMENTS); + game.where = game.save_where; + delete game.save_where; + end_remove_general_after_retreat_before_battle(); + }, +} + + +function end_remove_general_after_retreat_before_battle() { + let b_cu = count_british_cu(game.where); + let a_cu = count_american_and_french_cu(game.where); + if (a_cu == 0) { + end_battle(); + } else if (b_cu >= 4 && a_cu == 1) { + overrun(game.where); + end_battle(); + } else { + end_retreat_before_battle(); + } +} + +function can_defender_retreat(to) { + if (to == game.attack_from) + return false; + if (has_enemy_pc(to)) + return false; + if (has_enemy_cu(to)) + return false; + return true; +} + +function can_attacker_retreat() { + let to = game.attack_from; + if (has_enemy_pc(to)) + return false; + if (has_enemy_cu(to)) + return false; + return true; +} + +function gen_defender_retreat() { + let from = game.where; + for (let to of SPACES[from].exits) { + if (can_defender_retreat(to)) + gen_action('move', to); + } + if (game.active == BRITISH) { + let can_sea_retreat = false; + if (is_non_blockaded_port(from)) { + if (is_fortified_port(from)) { + if (has_british_pc(from) && is_non_blockaded_port(from)) + can_sea_retreat = true; + } else { + can_sea_retreat = true; + } + } + if (can_sea_retreat) { + for (let to in SPACES) { + if (to != from && is_non_blockaded_port(to)) { + if (!has_american_pc(to) && !has_american_or_french_cu(to)) { + gen_action('move', to); + } + } + } + } + } +} + +function gen_attacker_retreat() { + if (can_attacker_retreat()) + gen_action('move', game.attack_from); +} + +function end_retreat_before_battle() { + game.who = null; + goto_play_attacker_battle_card(); +} + +function goto_play_attacker_battle_card() { + game.active = game.attacker; + game.state = 'play_attacker_battle_card'; +} + +states.play_attacker_battle_card = { + prompt: function (current) { + game.prompt = "Attack: Play or discard event for DRM."; + gen_pass(); + gen_battle_card(); + }, + card_battle_play: function (c) { + play_card(c, "for +2 DRM"); + if (game.active == BRITISH) { + if (CARDS[c].event == 'remove_benedict_arnold') + remove_benedict_arnold(); + game.b_draw_after_battle = true; + game.b_bonus += 2; + } else { + game.a_draw_after_battle = true; + game.a_bonus += 2; + } + goto_play_defender_battle_card(); + }, + card_battle_discard: function (c) { + discard_card(c, "for +1 DRM"); + if (game.active == BRITISH) { + game.b_draw_after_battle = true; + game.b_bonus += 1; + } else { + game.a_draw_after_battle = true; + game.a_bonus += 1; + } + goto_play_defender_battle_card(); + }, + pass: function () { + goto_play_defender_battle_card(); + }, +} + +function goto_play_defender_battle_card() { + game.state = 'play_defender_battle_card'; + game.active = ENEMY[game.attacker]; +} + +states.play_defender_battle_card = { + prompt: function (current) { + game.prompt = "Defend: Play or discard event for DRM."; + gen_pass(); + gen_battle_card(); + }, + card_battle_play: function (c) { + play_card(c, "for +2 DRM"); + if (game.active == BRITISH) { + if (CARDS[c].event == 'remove_benedict_arnold') + remove_benedict_arnold(); + game.b_draw_after_battle = true; + game.b_bonus += 2; + } else { + game.a_draw_after_battle = true; + game.a_bonus += 2; + } + resolve_battle(); + }, + card_battle_discard: function (c) { + discard_card(c, "for +1 DRM"); + if (game.active == BRITISH) { + game.b_draw_after_battle = true; + game.b_bonus += 1; + } else { + game.a_draw_after_battle = true; + game.a_bonus += 1; + } + resolve_battle(); + }, + pass: function () { + resolve_battle(); + }, +} + +function gen_battle_card() { + for (let c of active_hand()) { + let card = CARDS[c]; + if (game.active == BRITISH) { + switch (card.type) { + case 'british-battle': + case 'british-event-or-battle': + gen_action('card_battle_play', c); + break; + case 'british-event': + case 'american-event': + case 'american-battle': + gen_action('card_battle_discard', c); + break; + } + } else { + switch (card.type) { + case 'british-battle': + case 'british-event-or-battle': + case 'british-event': + case 'american-event': + gen_action('card_battle_discard', c); + break; + case 'american-battle': + gen_action('card_battle_play', c); + break; + } + } + } +} + +function roll_loser_combat_losses(log) { + let roll = roll_d6(); + let losses = 0; + log.push("Loser Combat Loss Roll: " + roll); + switch (roll) { + case 1: case 2: case 3: losses = 1; break; + case 4: case 5: losses = 2; break; + case 6: losses = 3; break; + } + return losses; +} + +function roll_winner_combat_losses(log, losing_general) { + let agility = losing_general ? GENERALS[losing_general].agility : 0; + let roll = roll_d6(); + log.push("Enemy Agility Rating: " + agility); + log.push("Winner Combat Loss Roll: " + roll); + let losses = 0; + switch (agility) { + case 0: losses = (roll == 1) ? 1 : 0; break; + case 1: losses = (roll <= 2) ? 1 : 0; break; + case 2: losses = (roll <= 3) ? 1 : 0; break; + case 3: losses = (roll <= 4) ? 1 : 0; break; + } + return losses; +} + +function apply_british_combat_losses(max) { + let cu = find_british_cu(game.where); + if (cu.count > max) { + cu.count -= max; + return max; + } + remove_from_array(game.cu, cu); + return cu.count; +} + +function apply_american_combat_losses(max) { + let cu = find_american_cu(game.where); + if (cu) { + if (cu.count > max) { + cu.count -= max; + return max; + } + remove_from_array(game.cu, cu); + return cu.count; + } + return 0; +} + +function apply_french_combat_losses(max) { + let cu = find_french_cu(game.where); + if (cu) { + if (cu.count > max) { + cu.count -= max; + return max; + } + remove_from_array(game.cu, cu); + return cu.count; + } + return 0; +} + +function apply_american_and_french_combat_losses(max) { + let n = apply_american_combat_losses(max); + if (n < max) + n += apply_french_combat_losses(max - n) + return n; +} + +function resolve_battle() { + let a_log = []; + let b_log = []; + + game.active = ENEMY[game.active]; + let b_g = find_british_general(game.where); + let b_cu = count_british_cu(game.where); + let a_g = find_american_or_french_general(game.where); + let a_cu = count_american_and_french_cu(game.where); + let b_br = 0; + let a_br = 0; + + if (b_g) + b_log.push("General: " + b_g); + if (a_g) + a_log.push("General: " + a_g); + + if (b_g) { + let roll = roll_d6(); + if (roll <= 3) + b_br = Math.min(Math.floor(GENERALS[b_g].battle / 2), b_cu); + else + b_br = Math.min(GENERALS[b_g].battle, b_cu); + b_log.push("Actual Battle Rating Roll: " + roll); + } + + if (a_g) { + let roll = roll_d6(); + if (roll <= 3) + a_br = Math.min(Math.floor(GENERALS[a_g].battle / 2), a_cu); + else + a_br = Math.min(GENERALS[a_g].battle, a_cu); + a_log.push("Actual Battle Rating Roll: " + roll); + } + + b_log.push("+" + b_cu + " CU"); + a_log.push("+" + a_cu + " CU"); + b_log.push("+" + b_br + " Actual Battle Rating"); + a_log.push("+" + a_br + " Actual Battle Rating"); + + let b_drm = b_cu + b_br + game.b_bonus; + if (game.regulars) { + b_log.push("+1 British Regulars' Advantage"); + b_drm += 1; + } + if (is_non_blockaded_port(game.where)) { + if (is_fortified_port(game.where)) { + if (has_british_pc(game.where)) { + b_log.push("+1 Royal Navy Support"); + b_drm += 1; + } + } else { + b_log.push("+1 Royal Navy Support"); + b_drm += 1; + } + } + if (is_british_militia(game.where)) { + b_log.push("+1 Militia"); + b_drm += 1; + } + if (game.b_bonus == 2) + b_log.push("+2 Battle Card"); + else if (game.b_bonus == 1) + b_log.push("+1 Discard of an Event Card"); + + let a_drm = a_cu + a_br + game.a_bonus; + if (is_american_militia(game.where)) { + a_log.push("+1 Militia"); + a_drm += 1; + } + if (is_american_winter_offensive()) { + a_log.push("+2 American Winter Offensive"); + a_drm += 2; + } + if (game.a_bonus == 2) + a_log.push("+2 Battle Card"); + else if (game.a_bonus == 1) + a_log.push("+1 Discard of an Event Card"); + if (game.did_intercept) { + a_log.push("+1 Interception"); + a_drm += 1; + } + + let b_roll = roll_d6(); + let a_roll = roll_d6(); + + b_log.push("Battle Roll: " + b_roll); + b_log.push("Battle Total: " + (b_roll + b_drm)); + a_log.push("Battle Roll: " + a_roll); + a_log.push("Battle Total: " + (a_roll + a_drm)); + + let victor; + if (game.active == BRITISH) + victor = (b_roll + b_drm) >= (a_roll + a_drm) ? BRITISH : AMERICAN; + else + victor = (b_roll + b_drm) >= (a_roll + a_drm) ? BRITISH : AMERICAN; + + let a_lost_cu, b_lost_cu; + if (victor == BRITISH) { + b_lost_cu = roll_winner_combat_losses(b_log, a_g); + a_lost_cu = roll_loser_combat_losses(a_log); + } else { + b_lost_cu = roll_loser_combat_losses(b_log); + a_lost_cu = roll_winner_combat_losses(a_log, b_g); + } + + game.british_losses = apply_british_combat_losses(b_lost_cu); + let american_losses = apply_american_and_french_combat_losses(a_lost_cu); + + b_log.push("Losses: " + game.british_losses + " CU"); + a_log.push("Losses: " + american_losses + " CU"); + + // Special case: winning general with no CU on enemy PC is captured + if (victor == BRITISH) { + if (b_g && count_british_cu(game.where) == 0 && has_american_pc(game.where)) + capture_british_general(game.where); + } else { + if (a_g && count_american_and_french_cu(game.where) == 0 && has_british_pc(game.where)) + capture_american_or_french_general(game.where); + } + + game.log.push("BRITISH BATTLE REPORT:\n" + b_log.join("\n")); + game.log.push("AMERICAN BATTLE REPORT:\n" + a_log.join("\n")); + game.log.push(victor + " victory in " + game.where + "!"); + + if (victor == AMERICAN) + advance_french_alliance(1); + + goto_retreat_after_battle(victor); +} + +function goto_retreat_after_battle(victor) { + if (victor == BRITISH) { + game.who = find_american_or_french_general(game.where); + if (game.who == null && count_american_and_french_cu(game.where) == 0) + return end_battle(); + } else { + game.who = find_british_general(game.where); + if (game.who == null && count_british_cu(game.where) == 0) + return end_battle(); + } + game.active = ENEMY[victor]; + game.state = 'retreat_after_battle'; +} + +states.retreat_after_battle = { + prompt: function (current) { + game.prompt = "Retreat after battle."; + gen_action('surrender'); + if (game.active == game.attacker) + gen_attacker_retreat(); + else + gen_defender_retreat(); + }, + move: function (to) { + game.log.push(game.active[0] + " retreats to " + to); + if (game.active == BRITISH) + retreat_british_army(game.where, to); + else + retreat_american_army(game.where, to); + if (count_friendly_generals(to) > 1) + goto_remove_general_after_retreat(to); + else + end_battle(); + }, + surrender: function () { + // End battle here, so if Washington is captured we can handle the interrupt state. + let active = game.active; + let where = game.where; + end_battle(); + + game.log.push(active[0] + " surrenders"); + if (active == BRITISH) + surrender_british_army(where); + else + surrender_american_army(where); + }, +} + +function end_battle() { + game.active = game.attacker; + + if (game.british_losses >= 3) + lose_regular_advantage(); + + // TODO: delay until end of campaign + if (game.b_draw_after_battle) + game.b_hand.push(deal_card()); + if (game.a_draw_after_battle) + game.a_hand.push(deal_card()); + + delete game.did_intercept; + delete game.b_bonus; + delete game.a_bonus; + delete game.b_draw_after_battle; + delete game.a_draw_after_battle; + delete game.attack_from; + delete game.british_losses; + delete game.attacker; + game.where = null; + game.who = null; + end_strategy_card(); +} + +/* END TURN PHASES */ + +function apply_single_winter_attrition(owner, space) { + let die = roll_d6(); + game.log.push(owner[0] + " attrition roll " + die + " in " + space); + if (die <= 3) { + game.log.push(owner[0] + " lose 1 CU in " + space); + remove_cu(owner, space, 1); + } +} + +function apply_winter_attrition(owner, space, n) { + let half = Math.floor(n / 2); + game.log.push(owner[0] + " lose " + half + " CU in " + space); + remove_cu(owner, space, half); +} + +function goto_winter_attrition_phase() { + game.log.push(""); + game.log.push("Winter Attrition"); + + for (let space in SPACES) { + let wq = is_winter_quarter_space(space); + let n_british = count_british_cu(space); + let n_american = count_american_cu(space); + let n_french = count_french_cu(space); + let has_washington = game.generals[WASHINGTON].location == space; + + if (n_british == 1 && !wq) + apply_single_winter_attrition(BRITISH, space, has_british_general(space)); + if (n_british > 1 && !wq) + apply_winter_attrition(BRITISH, space, n_british); + + if (n_american == 0 && n_french == 1 && !wq) + apply_single_winter_attrition(FRENCH, space, has_american_or_french_general(space)); + if (n_american == 0 && n_french > 1 && !wq) + apply_winter_attrition(FRENCH, space, n_french); + + if (n_american == 1 && n_french == 0) + apply_single_winter_attrition(AMERICAN, space, has_american_or_french_general(space)); + if (n_american > 1 && n_french == 0) { + let n = n_american; + if (has_washington && wq) + n = Math.max(0, n - 5); + apply_winter_attrition(AMERICAN, space, n); + } + + if (n_american > 0 && n_french > 0) { + let n = n_american + n_french; + if (has_washington && wq) + n = Math.max(0, n - 5); + let half = Math.floor(n / 2); + + // TODO: let player choose (but why would he ever choose the french?) + let lose_american = Math.min(half, n_american); + game.log.push(owner[0] + " lose " + lose_american + " American CU in " + space); + remove_cu(AMERICAN, space, n_american); + half -= lose_american; + n_american -= lose_american; + + if (half > 0) { + game.log.push(owner[0] + " lose " + half + " French CU in " + space); + remove_cu(FRENCH, space, half); + } + } + } + + if (automatic_victory()) + return; + + goto_french_naval_phase(); +} + +function goto_french_naval_phase() { + if (game.french_navy != FRENCH_REINFORCEMENTS) { + game.active = AMERICAN; + game.state = 'place_french_navy'; + } else { + goto_political_control_phase(); + } +} + +function gen_place_french_navy() { + gen_action('place_navy', "Sea1"); + gen_action('place_navy', "Sea2"); + gen_action('place_navy', "Sea3"); + gen_action('place_navy', "Sea4"); + gen_action('place_navy', "Sea5"); + gen_action('place_navy', "Sea6"); + gen_action('place_navy', "Sea7"); +} + +states.place_french_navy_trigger = { + prompt: function (current) { + game.prompt = "Place the French Navy in a blockade zone."; + gen_place_french_navy(); + }, + place_navy: function (zone) { + game.log.push("A places French Navy."); + game.french_navy = zone; + game.active = game.save_active; + delete game.save_active; + end_strategy_card() + }, +} + +states.place_french_navy = { + prompt: function (current) { + game.prompt = "Place the French Navy in a blockade zone."; + gen_place_french_navy(); + }, + place_navy: function (zone) { + game.log.push("A places French Navy."); + game.french_navy = zone; + goto_political_control_phase(); + }, +} + +function place_pc_markers_segment() { + for (let space in SPACES) { + if (has_american_army(space)) { + if (has_no_pc(space)) + place_american_pc(space); + else if (has_british_pc(space)) + flip_pc(space); + } + if (has_british_army(space)) { + if (has_no_pc(space)) + place_british_pc(space); + else if (has_american_pc(space)) + flip_pc(space); + } + } +} + +function is_american_pc_root(space) { + if (has_no_pc(space) && has_no_british_cu(space)) + return true; + if (game.congress == space) + return true; + if (has_american_pc(space)) { + if (has_american_or_french_cu(space)) + return true; + if (has_american_or_french_general(space)) + return true; + } + return false; +} + +function is_british_pc_root(space) { + if (has_no_pc(space) && !has_american_or_french_cu(space) && !has_american_or_french_general(space)) + return true; + if (has_british_pc(space)) { + if (is_port(space)) + return true; + if (has_british_cu(space)) + return true; + } + return false; +} + +function is_american_pc_path(space) { + if (has_american_pc(space)) + return !has_british_army(space); + return false; +} + +function is_british_pc_path(space) { + if (has_british_pc(space)) + return !has_american_army(space); + return false; +} + +function spread_american_path(seen, from) { + for (let to of SPACES[from].exits) { + if (to in seen) + continue; + if (is_american_pc_path(to)) { + seen[to] = 1; + spread_american_path(seen, to); + } + } +} + +function spread_british_path(seen, from) { + for (let to of SPACES[from].exits) { + if (to in seen) + continue; + if (is_british_pc_path(to)) { + seen[to] = 1; + spread_british_path(seen, to); + } + } +} + +function remove_isolated_american_pc_segment() { + game.log.push("Removing isolated American PC"); + let seen = {}; + for (let space in SPACES) { + if (is_american_pc_root(space)) { + seen[space] = 1; + spread_american_path(seen, space); + } + } + for (let space in SPACES) + if (has_american_pc(space) && !seen[space]) + remove_pc(space); +} + +function remove_isolated_british_pc_segment() { + game.log.push("Removing isolated British PC"); + let seen = {}; + for (let space in SPACES) { + if (is_british_pc_root(space)) { + seen[space] = 1; + spread_british_path(seen, space); + } + } + for (let space in SPACES) + if (has_british_pc(space) && !seen[space]) + remove_pc(space); +} + +function gen_return_continental_congress() { + let n = 0; + for (let space in SPACES) { + if (SPACES[space].colony != 'CA') { + if (has_american_pc(space) && has_no_british_playing_piece(space)) { + gen_action('place_continental_congress', space); + ++n; + } + } + } + return n; +} + +function goto_political_control_phase() { + if (game.congress == CONTINENTAL_CONGRESS_DISPERSED) { + game.active = AMERICAN; + game.state = 'return_continental_congress'; + } else { + goto_political_control_phase_2(); + } +} + +states.return_continental_congress = { + prompt: function () { + game.prompt = "Return Continental Congress to a space in the 13 colonies."; + if (gen_place_continental_congress() == 0) + gen_pass(); + }, + place_continental_congress: function (where) { + game.congess = where; + goto_political_control_phase_2(); + }, + pass: function () { + goto_political_control_phase_2(); + } +} + +function goto_political_control_phase_2() { + place_pc_markers_segment(); + remove_isolated_american_pc_segment(); + remove_isolated_british_pc_segment(); + goto_end_phase(); +} + +states.european_war = { + prompt: function () { + game.prompt = "European War: Remove 2 British CU from any spaces. " + game.count + " left."; + gen_pass(); + gen_remove_british_cu(); + }, + remove_cu: function (where) { + let cu = find_british_cu(where); + remove_cu(BRITISH, where, 1); + if (--game.count == 0) + goto_end_phase(); + }, + pass: function () { + goto_end_phase(); + } +} + +function norths_government_falls() { + update_colony_control(); + + let n_american = 0; + for (let c in COLONIES) + if (game.control[c] == AMERICAN) + ++n_american; + + if (n_american >= 7) + game.result = AMERICAN; + else + game.result = BRITISH; + + game.victory = "North's Government Falls: " + game.result + " Victory!"; + game.active = "None"; + game.state = 'game_over'; + + game.log.push(game.victory); +} + +function goto_end_phase() { + if (game.french_alliance_triggered && !game.european_war) { + game.european_war = true; + game.count = 2; + game.active = AMERICAN; + game.state = 'european_war'; + game.reshuffle = true; + return; + } + + if ((game.war_ends && game.year >= game.war_ends) || game.year == 1783) + return norths_government_falls(); + + delete game.pennsylvania_and_new_jersey_line_mutinies; + game.a_queue = game.b_queue = 0; + game.year += 1; + goto_start_year(); +} + +states.game_over = { + prompt: function () { + game.prompt = game.victory; + } +} + +/* CLIENT/SERVER COMMS */ + +exports.ready = function (scenario, options, players) { + return players.length === 2; +} + +exports.setup = function (seed, scenario, players) { + setup_game(seed); + return game; +} + +exports.action = function (state, current, action, arg) { + game = state; + // TODO: check against action list + if (current == game.active) { + let S = states[game.state]; + if (action in S) { + S[action](arg); + } else { + if (action === 'undo' && game.undo && game.undo.length > 0) + pop_undo(); + else + throw new Error("Invalid action: " + action); + } + } + return game; +} + +function list_actions(current) { + game.actions = {} + game.prompt = ""; + states[game.state].prompt(current); +} + +exports.view = function(state, current) { + game = state; + + list_actions(current); + + update_colony_control(); + + let view = { + active: state.active, + year: state.year, + war_ends: state.war_ends, + played_british_reinforcements: state.played_british_reinforcements, + played_american_reinforcements: state.played_american_reinforcements, + congress: state.congress, + european_war: state.european_war, + french_alliance: state.french_alliance, + french_navy: state.french_navy, + regulars: state.regulars, + generals: state.generals, + cu: state.cu, + pc: state.pc, + control: state.control, + a_cards: state.a_hand.length, + b_cards: state.b_hand.length, + a_queue: state.a_queue, + b_queue: state.b_queue, + last_played: state.last_played, + who: state.who, + log: state.log, + } + + if (state.pennsylvania_and_new_jersey_line_mutinies) + view.pennsylvania_and_new_jersey_line_mutinies = true; + + if (current == AMERICAN) + view.hand = state.a_hand; + else if (current == BRITISH) + view.hand = state.b_hand; + else + view.hand = []; + + if (current == state.active) { + gen_action_undo(); + view.prompt = state.prompt; + view.actions = state.actions; + } else { + view.prompt = "Waiting for " + game.active + " player \u2014 " + game.prompt; + } + + return view; +} diff --git a/title.sql b/title.sql new file mode 100644 index 0000000..be6fe09 --- /dev/null +++ b/title.sql @@ -0,0 +1,3 @@ +insert or ignore into titles ( title_id, title_name, bgg ) values ( 'washingtons-war', 'Washington''s War', 38996 ); +insert or replace into roles values ( 'washingtons-war', 'American' ); +insert or replace into roles values ( 'washingtons-war', 'British' ); -- cgit v1.2.3