diff options
author | Tor Andersson <tor@ccxvii.net> | 2023-11-22 01:55:38 +0100 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2024-01-08 16:36:47 +0100 |
commit | b2c68b84481e4393fd13d78184318bbe22ff427c (patch) | |
tree | 214a3baf9e01ea171d69331355b72ab360753eda | |
parent | 95b90a9b4c21d6fd0805177d5193a8a62fa217ad (diff) | |
download | table-battles-b2c68b84481e4393fd13d78184318bbe22ff427c.tar.gz |
lotsa stuff
-rw-r--r-- | about.html | 2 | ||||
-rw-r--r-- | background.png | bin | 0 -> 28112 bytes | |||
-rw-r--r-- | cards.css | 78 | ||||
-rw-r--r-- | data.js | 4547 | ||||
-rw-r--r-- | die_black_pips.svg | 37 | ||||
-rw-r--r-- | die_white_pips.svg | 37 | ||||
-rw-r--r-- | favicon.png | bin | 0 -> 39597 bytes | |||
-rw-r--r-- | info/all-cards.html | 2743 | ||||
-rw-r--r-- | info/scenarios.html | 353 | ||||
-rw-r--r-- | play.html | 324 | ||||
-rw-r--r-- | play.js | 288 | ||||
-rw-r--r-- | rules.js | 1414 | ||||
-rw-r--r-- | tools/cards.csv | 666 | ||||
-rw-r--r-- | tools/download.sh | 4 | ||||
-rw-r--r-- | tools/gendata.js | 253 | ||||
-rw-r--r-- | tools/scenarios.csv | 75 |
16 files changed, 10422 insertions, 399 deletions
@@ -17,4 +17,6 @@ and acting decisively once it presents itself. <ul> <li><a href="/table-battles/info/rules.html">Rulebook</a> +<li><a href="/table-battles/info/scenarios.html">Scenarios</a> +<li><a href="/table-battles/info/all-cards.html">All Cards</a> </ul> diff --git a/background.png b/background.png Binary files differnew file mode 100644 index 0000000..b74a38b --- /dev/null +++ b/background.png @@ -1,11 +1,10 @@ .card { position: relative; - grid-template-rows: min-content min-content 1fr min-content min-content; font-family: "Source Serif"; font-size: 14px; line-height: 18px; - width: 250px; - height: 350px; + width: 240px; + height: 336px; background-color: #ca8; color: black; border: 1px solid black; @@ -13,7 +12,13 @@ box-shadow: 1px 2px 8px #0008; } -.formation { +.card { + user-select: none; +} + +/* FORMATION CARD */ + +.name { border-top: 1px solid black; border-bottom: 1px solid black; margin: 12px 0; @@ -23,10 +28,10 @@ line-height: 16px; } -.formation.red { background-color: #e32223; color: white; } -.formation.pink { background-color: #f49899; color: black; } -.formation.blue { background-color: #2482e4; color: white; } -.formation.dkblue { background-color: #44d; color: white; } +.name.red { background-color: #e32223; color: white; } +.name.pink { background-color: #f49899; color: black; } +.name.blue { background-color: #2482e4; color: white; } +.name.dkblue { background-color: #44d; color: white; } .strength { position: absolute; @@ -59,7 +64,7 @@ .dice_area .star { position: absolute; right: 0px; - top: 4px; + top: 0px; font-size: 24px; line-height: 24px; padding: 0 12px; @@ -114,12 +119,22 @@ min-height: 18px; } -.flavor { +.lore_text, .rule_text { font-family: "Source Serif SmText"; - margin: 12px 0; + margin: 6px 0; padding: 0 12px; font-size: 11px; - line-height: 14px; + line-height: 13px; + text-indent: 12px; +} + +.lore_text { + font-style: italic; +} + +.lore_text p, +.rule_text p { + margin: 6px 0; } .reserve { @@ -128,12 +143,12 @@ line-height: 12px; bottom: 0px; left: 0px; - padding: 8px; - width: 234px; + padding: 8px 0; + width: 240px; text-align: center; } -.card_number { +.number { position: absolute; font-size: 10px; line-height: 12px; @@ -143,7 +158,8 @@ opacity: 50%; } -.wing_name { +.extra { + display: none; position: absolute; font-size: 10px; line-height: 12px; @@ -152,3 +168,33 @@ padding: 8px 8px; opacity: 50%; } + +/* SCENARIO CARD */ + +.scenario_title, .scenario_player { + background-color: #f5e0c5; + border-top: 1px solid black; + border-bottom: 1px solid black; +} + +.battle_name { font-size: 16px; line-height: 20px; } +.battle_date { font-size: 10px; line-height: 14px; } + +.scenario_title { + margin: 12px 0; + padding: 4px 0; + text-align: center; +} + +.scenario_player { + margin: 6px 0; + padding: 4px 8px; +} + +.battle_name, +.scenario_player_name { + font-variant: small-caps; +} + +.scenario_cards, +.scenario_morale { padding-left: 24px; } @@ -0,0 +1,4547 @@ +const data = { +scenarios: [ + { + "number": 1, + "name": "White Mountain", + "date": "8 November 1620", + "players": [ + { + "name": "The Bohemian Revolt", + "cards": [ + 6, + 7, + 8, + 9 + ], + "morale": 4 + }, + { + "name": "Imperials & Catholic League", + "cards": [ + 0, + 1, + 2, + 3, + 4, + 5 + ], + "morale": 2 + } + ] + }, + { + "number": 2, + "name": "Marston Moor", + "date": "2 July 1644", + "players": [ + { + "name": "Royalists", + "cards": [ + 10, + 11, + 12, + 13, + 14, + 15, + 16 + ], + "morale": 2 + }, + { + "name": "Parliament & Covenanters", + "cards": [ + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ], + "morale": 3 + } + ] + }, + { + "number": 3, + "name": "The Plains of Abraham", + "date": "13 September 1759", + "players": [ + { + "name": "British", + "cards": [ + 24, + 25, + 26, + 27 + ], + "morale": 0 + }, + { + "name": "French", + "cards": [ + 28, + 29, + 30, + 31 + ], + "morale": 0 + } + ], + "rule": "rout_3_1" + }, + { + "number": 4, + "name": "Bosworth Field", + "date": "22 August 1485", + "players": [ + { + "name": "House of York", + "cards": [ + 32, + 33, + 34 + ], + "morale": 2 + }, + { + "name": "House of Lancaster (Tudor)", + "cards": [ + 35, + 36, + 37 + ], + "morale": 1 + } + ] + }, + { + "number": 5, + "name": "Malplaquet", + "date": "11 September 1709", + "players": [ + { + "name": "French", + "cards": [ + 38, + 39, + 40, + 41 + ], + "morale": 2 + }, + { + "name": "The Grand Alliance", + "cards": [ + 42, + 43, + 44, + 45, + 46, + 47 + ], + "morale": 3 + } + ] + }, + { + "number": 6, + "name": "Ivry", + "date": "14 March 1590", + "players": [ + { + "name": "Royalists", + "cards": [ + 48, + 49, + 50, + 51, + 52, + 53, + 54 + ], + "morale": 4 + }, + { + "name": "The Catholic (Holy) League", + "cards": [ + 55, + 56, + 57, + 58, + 59, + 60, + 61 + ], + "morale": 4 + } + ] + }, + { + "number": 7, + "name": "The Dunes", + "date": "14 June 1658", + "players": [ + { + "name": "French & English", + "cards": [ + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69 + ], + "morale": 2 + }, + { + "name": "Spanish, French & English", + "cards": [ + 70, + 71, + 72, + 73, + 74, + 75, + 76 + ], + "morale": 3 + } + ] + }, + { + "number": 8, + "name": "Brooklyn Heights", + "date": "27 August 1776", + "players": [ + { + "name": "Colonials", + "cards": [ + 80, + 81, + 82, + 83 + ], + "morale": 1 + }, + { + "name": "British & Their Vile Hessians", + "cards": [ + 77, + 78, + 79 + ], + "morale": 1 + } + ] + }, + { + "number": 9, + "name": "St. Albans", + "date": "22 May 1455", + "players": [ + { + "name": "House of York", + "cards": [ + 84, + 85, + 86, + 87 + ], + "morale": 1 + }, + { + "name": "House of Lancaster", + "cards": [ + 88, + 89, + 90 + ], + "morale": 2 + } + ] + }, + { + "number": 10, + "name": "Blore Heath", + "date": "22 September 1459", + "players": [ + { + "name": "House of Lancaster", + "cards": [ + 91, + 92, + 93, + 94, + 95, + 96 + ], + "morale": 3 + }, + { + "name": "House of York", + "cards": [ + 97, + 98, + 99, + 100, + 101 + ], + "morale": 1 + } + ] + }, + { + "number": 11, + "name": "Mortimer's Cross", + "date": "3 February 1461", + "players": [ + { + "name": "House of Lancaster", + "cards": [ + 102, + 103, + 104 + ], + "morale": 2 + }, + { + "name": "House of York", + "cards": [ + 105, + 106, + 107, + 108 + ], + "morale": 2 + } + ] + }, + { + "number": 12, + "name": "Towton", + "date": "29 March 1461", + "players": [ + { + "name": "House of Lancaster", + "cards": [ + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116 + ], + "morale": 4 + }, + { + "name": "House of York", + "cards": [ + 117, + 118, + 119, + 120, + 121, + 122, + 123 + ], + "morale": 2 + } + ], + "rule": "cube_max_8" + }, + { + "number": 13, + "name": "Edgecote Moor", + "date": "26 July 1469", + "players": [ + { + "name": "House of York", + "cards": [ + 124, + 125, + 126, + 127, + 128 + ], + "morale": 1 + }, + { + "name": "\"Robin\" of Redesdale", + "cards": [ + 129, + 130, + 131, + 132 + ], + "morale": 1 + } + ], + "rule": "morale_first_reserve" + }, + { + "number": 14, + "name": "Barnet", + "date": "14 April 1471", + "players": [ + { + "name": "House of Lancaster", + "cards": [ + 133, + 134, + 135, + 136, + 137 + ], + "morale": 1 + }, + { + "name": "House of York", + "cards": [ + 138, + 139, + 140, + 141, + 142, + 143 + ], + "morale": 2 + } + ] + }, + { + "number": 15, + "name": "Tewkesbury", + "date": "4 May 1471", + "players": [ + { + "name": "House of York", + "cards": [ + 144, + 145, + 146, + 147, + 148 + ], + "morale": 2 + }, + { + "name": "House of Lancaster", + "cards": [ + 149, + 150, + 151, + 152 + ], + "morale": 3 + } + ] + }, + { + "number": 16, + "name": "Stoke Field", + "date": "16 June 1487", + "players": [ + { + "name": "An Imposter, Lambert Simnel", + "cards": [ + 153, + 154, + 155, + 156 + ], + "morale": 3 + }, + { + "name": "House of Tudor", + "cards": [ + 157, + 158, + 159, + 160, + 161, + 162, + 163 + ], + "morale": 1 + } + ] + } +], +cards: [ + { + "scenario": 1, + "number": "1A", + "name": "The Twelve Apostles", + "wing": 0, + "special": 3, + "dice": "Straight 4", + "actions": [ + { + "type": "Bombard" + }, + { + "type": "Screen", + "target": "Any enemy attack", + "target_list": [ + 6, + 7, + 8, + 9 + ] + } + ], + "lore_text": "These were a dozen heavy guns fielded by the Catholic League." + }, + { + "scenario": 1, + "number": "2A", + "name": "Catholic League Cavalry", + "wing": 0, + "strength": 4, + "dice": "3/4", + "actions": [ + { + "type": "Attack", + "requirement": "Triplet", + "target": "Schlick", + "effect": "1 hit.", + "target_list": [ + 9 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Hohenlohe", + "target_list": [ + 8 + ] + } + ] + }, + { + "scenario": 1, + "number": "3A", + "name": "Catholic League Foot", + "wing": 0, + "strength": 6, + "dice": "(6)", + "actions": [ + { + "type": "Attack", + "target": "Hohenlohe, Schlick", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 8, + 9 + ] + } + ] + }, + { + "scenario": 1, + "number": "4A", + "name": "Imperial Cavalry", + "wing": 1, + "strength": 4, + "dice": "1/2", + "actions": [ + { + "type": "Attack", + "requirement": "Triplet", + "target": "Protestant Cavalry", + "effect": "1 hit.", + "target_list": [ + 7 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Thurn", + "target_list": [ + 6 + ] + } + ], + "pursuit": 1 + }, + { + "scenario": 1, + "number": "5A", + "name": "Liechtenstein", + "wing": 1, + "strength": 6, + "dice": "(5)", + "actions": [ + { + "type": "Attack", + "target": "Thurn, Hohenlohe", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 6, + 8 + ] + } + ], + "retire": 1 + }, + { + "scenario": 1, + "number": "6A", + "name": "Tiefenbach", + "wing": 1, + "strength": 4, + "star": 1, + "dice": "(4)", + "actions": [ + { + "type": "Attack", + "target": "Thurn, Hohenlohe", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 6, + 8 + ] + } + ], + "reserve": [ + 4 + ] + }, + { + "scenario": 1, + "number": "7A", + "name": "Thurn", + "wing": 2, + "strength": 6, + "dice": "6", + "actions": [ + { + "type": "Attack", + "target": "Liechtenstein, Tiefenbach", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 4, + 5 + ] + } + ] + }, + { + "scenario": 1, + "number": "8A", + "name": "Protestant Cavalry", + "wing": 2, + "strength": 4, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "requirement": "Triplet", + "target": "Imperial Cavalry", + "effect": "1 hit.", + "target_list": [ + 3 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Liechtenstein, Tiefenbach", + "target_list": [ + 4, + 5 + ] + } + ], + "pursuit": 1 + }, + { + "scenario": 1, + "number": "9A", + "name": "Hohenlohe", + "wing": 2, + "strength": 6, + "star": 1, + "dice": "5", + "actions": [ + { + "type": "Attack", + "target": "Catholic League Foot, Liechtenstein, Tiefenbach", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 2, + 4, + 5 + ] + } + ], + "lore_text": "One of the nobles who instigated the Bohemian Revolt (and thus the Thirty Years War) by chucking a couple of civil servants out a window. They survived, and Thurn went on to be one of the worst generals in the rebellion. His incompetence helped seal their fate at White Mountain." + }, + { + "scenario": 1, + "number": "10A", + "name": "Schlick", + "wing": 2, + "strength": 4, + "dice": "4", + "actions": [ + { + "type": "Attack", + "requirement": "Triplet", + "target": "Catholic League Cavalry", + "effect": "1 hit.", + "target_list": [ + 1 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Catholic League Foot", + "target_list": [ + 2 + ] + } + ] + }, + { + "scenario": 2, + "number": "11A", + "name": "Northern Horse", + "wing": 3, + "strength": 3, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "Fairfax", + "effect": "1 hit.", + "target_list": [ + 23 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Baillie, Lumsden, Fairfax", + "target_list": [ + 21, + 22, + 23 + ] + } + ], + "pursuit": 1 + }, + { + "scenario": 2, + "number": "12A", + "name": "Tillier's Left", + "wing": 2, + "strength": 6, + "dice": "(6)", + "actions": [ + { + "type": "Attack", + "target": "Baillie, Lumsden", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 21, + 22 + ] + } + ] + }, + { + "scenario": 2, + "number": "13A", + "name": "Royalist Guns", + "wing": 2, + "special": 1, + "dice": "Straight 4", + "actions": [ + { + "type": "Screen", + "target": "Any enemy attack", + "target_list": [ + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ] + } + ] + }, + { + "scenario": 2, + "number": "14A", + "name": "Tillier's Right", + "wing": 2, + "strength": 4, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Crawford, Manchester", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 18, + 19 + ] + } + ], + "retire": 1 + }, + { + "scenario": 2, + "number": "15A", + "name": "Whitecoats", + "wing": 2, + "strength": 2, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "target": "Crawford, Manchester", + "effect": "1 hit.", + "target_list": [ + 18, + 19 + ] + } + ], + "reserve": [ + 13 + ] + }, + { + "scenario": 2, + "number": "16A", + "name": "Byron", + "wing": 3, + "strength": 3, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "requirement": "Two Pairs", + "target": "Cromwell", + "effect": "1 hit.", + "target_list": [ + 17 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Crawford, Manchester, Cromwell", + "target_list": [ + 18, + 19, + 17 + ] + } + ], + "pursuit": 1 + }, + { + "scenario": 2, + "number": "17A", + "name": "Rupert's Lifeguard", + "wing": 3, + "strength": 1, + "dice": "", + "actions": [], + "rule_text": "While this card is in play, Tillier's Left and Tillier's Right suffer one less hit when Attacked. <p>When either the Northern Horse or Byron are about to Rout, add the Lifeguard's Unit to that Formation. That is, that Formation does NOT Rout at this time, but only has one Unit block. <p>Remove this card from play if and when that happens. This does not constitute a Rout." + }, + { + "scenario": 2, + "number": "18A", + "name": "Cromwell", + "wing": 0, + "strength": 4, + "dice": "1-3", + "actions": [ + { + "type": "Attack", + "target": "Byron, Northern Horse", + "effect": "1 hit per die.", + "target_list": [ + 15, + 10 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Byron, Tillier's Right, Whitecoats", + "target_list": [ + 15, + 13, + 14 + ] + } + ], + "lore_text": "Cromwell's disciplined cavalry didn't chase after the fleeing Byron, but circled around to take out the other wing of horse." + }, + { + "scenario": 2, + "number": "19A", + "name": "Crawford", + "wing": 0, + "strength": 4, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Tillier's Right, Whitecoats", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 13, + 14 + ] + } + ], + "retire": 1 + }, + { + "scenario": 2, + "number": "20A", + "name": "Manchester", + "wing": 0, + "strength": 4, + "dice": "(4)", + "actions": [ + { + "type": "Attack", + "target": "Tillier's Right, Whitecoats", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 13, + 14 + ] + } + ], + "reserve": [ + 18 + ] + }, + { + "scenario": 2, + "number": "21A", + "name": "Roundhead Guns", + "wing": 1, + "special": 2, + "dice": "Triples", + "actions": [ + { + "type": "Screen", + "target": "Any enemy attack", + "target_list": [ + 10, + 11, + 12, + 13, + 14, + 15, + 16 + ] + } + ] + }, + { + "scenario": 2, + "number": "22A", + "name": "Baillie", + "wing": 1, + "strength": 3, + "dice": "(6)", + "actions": [ + { + "type": "Attack", + "target": "Tillier's Left, Tillier's Right, Whitecoats", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 11, + 13, + 14 + ] + } + ], + "retire": 1 + }, + { + "scenario": 2, + "number": "23A", + "name": "Lumsden", + "wing": 1, + "strength": 5, + "dice": "(5)", + "actions": [ + { + "type": "Attack", + "target": "Tillier's Left, Tillier's Right, Whitecoats", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 11, + 13, + 14 + ] + } + ], + "reserve": [ + 21 + ] + }, + { + "scenario": 2, + "number": "24A", + "name": "Fairfax", + "wing": 0, + "strength": 3, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "target": "Northern Horse", + "effect": "1 hit.", + "target_list": [ + 10 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Tillier's Left, Northern Horse", + "target_list": [ + 11, + 10 + ] + } + ], + "pursuit": 1 + }, + { + "scenario": 3, + "number": "25A", + "name": "British Left", + "wing": 0, + "strength": 4, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "target": "French Right", + "effect": "1 hit per die.", + "target_list": [ + 30 + ] + }, + { + "type": "Counterattack", + "target": "French Right", + "effect": "1 hit.", + "target_list": [ + 30 + ] + } + ] + }, + { + "scenario": 3, + "number": "26A", + "name": "British Center", + "wing": 0, + "strength": 8, + "dice": "3/4", + "actions": [ + { + "type": "Attack", + "target": "French Center", + "effect": "1 hit per die.", + "target_list": [ + 29 + ] + }, + { + "type": "Counterattack", + "target": "French Center", + "effect": "1 hit. Additionally, this unit suffers one less hit.", + "target_list": [ + 29 + ] + } + ] + }, + { + "scenario": 3, + "number": "27A", + "name": "British Right", + "wing": 0, + "strength": 4, + "dice": "1/2", + "actions": [ + { + "type": "Attack", + "target": "French Left", + "effect": "1 hit per die.", + "target_list": [ + 28 + ] + }, + { + "type": "Counterattack", + "target": "French Left", + "effect": "1 hit.", + "target_list": [ + 28 + ] + } + ] + }, + { + "scenario": 3, + "number": "28A", + "name": "Wolfe", + "wing": 0, + "special": 1, + "dice": "", + "actions": [ + { + "type": "Screen", + "requirement": "Voluntary", + "target": "Any enemy attack", + "target_list": [ + 28, + 29, + 30, + 31 + ] + } + ], + "rule_text": "While this card is in play, you may place dice on TWO cards per turn. <p>Once this card is used to SCREEN an Attack, the card is removed from play. This does not constitute a Rout.", + "lore_text": "Brilliant, moody, and thirty-one years old, James Wolfe was fatally wounded early in the battle. As he bled out, he heard of his victory, and said \"Now, God be praised, I will die in peace.\"" + }, + { + "scenario": 3, + "number": "29A", + "name": "French Left", + "wing": 2, + "strength": 4, + "dice": "6", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "British Right", + "effect": "1 hit.", + "target_list": [ + 26 + ] + }, + { + "type": "Counterattack", + "target": "British Right", + "effect": "1 hit.", + "target_list": [ + 26 + ] + } + ] + }, + { + "scenario": 3, + "number": "30A", + "name": "French Center", + "wing": 2, + "strength": 6, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "target": "British Center", + "effect": "1 hit per die.", + "target_list": [ + 25 + ] + }, + { + "type": "Counterattack", + "target": "British Center", + "effect": "1 hit.", + "target_list": [ + 25 + ] + } + ] + }, + { + "scenario": 3, + "number": "31A", + "name": "French Right", + "wing": 2, + "strength": 4, + "dice": "4", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "British Left", + "effect": "1 hit.", + "target_list": [ + 24 + ] + }, + { + "type": "Counterattack", + "target": "British Left", + "effect": "1 hit.", + "target_list": [ + 24 + ] + } + ] + }, + { + "scenario": 3, + "number": "32A", + "name": "Montcalm", + "wing": 2, + "special": 1, + "dice": "", + "actions": [ + { + "type": "Screen", + "requirement": "Voluntary", + "target": "Any enemy attack", + "target_list": [ + 24, + 25, + 26, + 27 + ] + } + ], + "rule_text": "While this card is in play, you may place dice on TWO cards per turn. <p>Once this card is used to SCREEN an Attack, the card is removed from play. This does not constitute a Rout.", + "lore_text": "A seasoned commander at the age of forty-seven, Montcalm tried his best with inferior troops. Wounded during the battle, he dies the next day." + }, + { + "scenario": 4, + "number": "33A", + "name": "King Richard III", + "wing": 2, + "strength": 4, + "dice": "4/5", + "actions": [ + { + "type": "Attack", + "target": "Oxford, Richmond", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 35, + 36 + ] + }, + { + "type": "Command", + "requirement": "Full House", + "target": "Northumberland out of reserve", + "target_list": [ + 34 + ] + } + ], + "rule_text": "While this card is in play, you may place dice on TWO Blue cards each turn, and on ONE Dark Blue card." + }, + { + "scenario": 4, + "number": "34A", + "name": "Norfolk", + "wing": 2, + "strength": 4, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "target": "Oxford, Richmond", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 35, + 36 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Any enemy attack", + "target_list": [ + 35, + 36, + 37 + ] + } + ] + }, + { + "scenario": 4, + "number": "35A", + "name": "Northumberland", + "wing": 2, + "strength": 6, + "dice": "4", + "actions": [ + { + "type": "Attack", + "target": "Oxford, Richmond", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 35, + 36 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Any enemy attack", + "target_list": [ + 35, + 36, + 37 + ] + } + ], + "reserve": [] + }, + { + "scenario": 4, + "number": "36A", + "name": "Oxford", + "wing": 0, + "strength": 8, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "target": "Norfolk, King Richard III", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 33, + 32 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Any enemy attack", + "effect": "1 hit.", + "target_list": [ + 32, + 33, + 34 + ] + } + ] + }, + { + "scenario": 4, + "number": "37A", + "name": "Richmond", + "wing": 0, + "strength": 2, + "dice": "3/4", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "Norfolk, King Richard III", + "effect": "1 hit.", + "target_list": [ + 33, + 32 + ] + }, + { + "type": "Command", + "requirement": "Full House", + "target": "The Stanleys out of reserve", + "target_list": [ + 37 + ] + } + ], + "lore_text": "The future Henry VII. Contrary to popular belief, he gained his kingdom by winning this battle, not by trading Richard a horse." + }, + { + "scenario": 4, + "number": "38A", + "name": "The Stanleys", + "wing": 1, + "strength": 4, + "dice": "Doubles", + "actions": [ + { + "type": "Absorb", + "requirement": "Pair, Voluntary", + "target": "Oxford, Richmond", + "effect": "When target suffers Hits, this card suffers them instead.", + "target_list": [ + 35, + 36 + ] + } + ], + "rule_text": "When this card comes out of Reserve, Northumberland immediately Routs.", + "lore_text": "The Stanleys were political intriguers who spent most of the battle on the sidelines, waiting to see who was likely to win before intervening decisively for Henry.", + "reserve": [] + }, + { + "scenario": 5, + "number": "39A", + "name": "Villars", + "wing": 2, + "strength": 6, + "star": 1, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "target": "Schulenburg, Lottum, Orkney", + "effect": "1 hit.", + "target_list": [ + 44, + 45, + 46 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Schulenburg, Lottum, Orkney", + "target_list": [ + 44, + 45, + 46 + ] + } + ], + "rule_text": "While this card is in play, you may place dice on TWO Blue cards each turn, and on ONE Dark Blue card." + }, + { + "scenario": 5, + "number": "40A", + "name": "Center", + "wing": 2, + "strength": 6, + "dice": "4", + "actions": [ + { + "type": "Attack", + "target": "Lottum, Orkney, Marlborough", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 45, + 46, + 43 + ] + } + ] + }, + { + "scenario": 5, + "number": "41A", + "name": "Boufflers", + "wing": 2, + "strength": 6, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "target": "Orange, Marlborough", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 42, + 43 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Orange, Marlborough", + "target_list": [ + 42, + 43 + ] + } + ] + }, + { + "scenario": 5, + "number": "42A", + "name": "French Reserves", + "wing": 3, + "strength": 6, + "dice": "Doubles", + "actions": [ + { + "type": "Absorb", + "requirement": "Pair, Voluntary", + "target": "Any friendly formation", + "effect": "When target suffers Hits, this card suffers them instead.", + "target_list": [ + 38, + 39, + 40 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Withers", + "effect": "1 hit.", + "target_list": [ + 47 + ] + } + ] + }, + { + "scenario": 5, + "number": "1B", + "name": "Orange", + "wing": 1, + "strength": 8, + "dice": "(6)", + "actions": [ + { + "type": "Attack", + "target": "Boufflers, Center", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 40, + 39 + ] + } + ] + }, + { + "scenario": 5, + "number": "2B", + "name": "Marlborough", + "wing": 1, + "strength": 6, + "star": 1, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "Boufflers, Center", + "effect": "1 hit.", + "target_list": [ + 40, + 39 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Boufflers, Center", + "target_list": [ + 40, + 39 + ] + } + ] + }, + { + "scenario": 5, + "number": "3B", + "name": "Schulenburg", + "wing": 0, + "strength": 8, + "dice": "(5)", + "actions": [ + { + "type": "Attack", + "target": "Villars, Center", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 38, + 39 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Villars, Center", + "effect": "1 hit per die.", + "target_list": [ + 38, + 39 + ] + } + ] + }, + { + "scenario": 5, + "number": "4B", + "name": "Lottum", + "wing": 0, + "strength": 4, + "dice": "(4)", + "actions": [ + { + "type": "Attack", + "target": "Villars, Center", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 38, + 39 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Villars, Center", + "effect": "1 hit.", + "target_list": [ + 38, + 39 + ] + } + ], + "retire": 1 + }, + { + "scenario": 5, + "number": "5B", + "name": "Orkney", + "wing": 0, + "strength": 4, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "Villars, Center", + "effect": "1 hit.", + "target_list": [ + 38, + 39 + ] + } + ], + "reserve": [ + 45 + ] + }, + { + "scenario": 5, + "number": "6B", + "name": "Withers", + "wing": 0, + "strength": 4, + "dice": "Straight 4", + "actions": [ + { + "type": "Attack", + "target": "French Reserves", + "effect": "1 hit.", + "target_list": [ + 41 + ] + } + ], + "lore_text": "A detachment under Henry Withers advanced against the French flank, forcing Villars to divert much-needed forces from his center. This weakened the French line, and in a final push Marlborough and Prince Eugene of Savoy broke it." + }, + { + "scenario": 6, + "number": "7B", + "name": "D'Aumont", + "wing": 3, + "strength": 4, + "dice": "6", + "actions": [ + { + "type": "Attack", + "target": "Light Horse, Nemours", + "effect": "1 hit.", + "target_list": [ + 61, + 60 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Light Horse", + "target_list": [ + 61 + ] + } + ] + }, + { + "scenario": 6, + "number": "8B", + "name": "Montepensier", + "wing": 3, + "strength": 4, + "dice": "5", + "actions": [ + { + "type": "Attack", + "target": "Nemours, Egmont", + "effect": "1 hit.", + "target_list": [ + 60, + 59 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Nemours", + "target_list": [ + 60 + ] + } + ] + }, + { + "scenario": 6, + "number": "9B", + "name": "Royalist Cannons", + "wing": 3, + "special": 2, + "dice": "Straight 4", + "actions": [ + { + "type": "Screen", + "target": "Light Horse, Nemours, Egmont", + "target_list": [ + 61, + 60, + 59 + ] + }, + { + "type": "Bombard" + } + ] + }, + { + "scenario": 6, + "number": "10B", + "name": "Baron de Biron", + "wing": 3, + "strength": 6, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "Egmont, Mercenaries, Mayenne", + "effect": "1 hit per action. 1 self per action.", + "target_list": [ + 59, + 57, + 56 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Egmont", + "target_list": [ + 59 + ] + } + ] + }, + { + "scenario": 6, + "number": "11B", + "name": "Henri IV", + "wing": 2, + "strength": 6, + "star": 1, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "target": "Mercenaries, Mayenne", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 57, + 56 + ] + }, + { + "type": "Screen", + "target": "Mercenaries, Mayenne", + "target_list": [ + 57, + 56 + ] + } + ] + }, + { + "scenario": 6, + "number": "12B", + "name": "Schomberg", + "wing": 2, + "strength": 3, + "dice": "4", + "actions": [ + { + "type": "Attack", + "target": "Aumale, Mayenne", + "effect": "1 hit.", + "target_list": [ + 55, + 56 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Aumale", + "target_list": [ + 55 + ] + } + ] + }, + { + "scenario": 6, + "number": "13B", + "name": "Marshal de Biron", + "wing": 2, + "strength": 4, + "dice": "Doubles", + "actions": [ + { + "type": "Absorb", + "requirement": "Pair, Voluntary", + "target": "Any friendly formation", + "effect": "When target suffers Hits, this card suffers them instead.", + "target_list": [ + 52, + 53, + 54 + ] + } + ] + }, + { + "scenario": 6, + "number": "14B", + "name": "Aumale", + "wing": 0, + "strength": 4, + "dice": "4", + "actions": [ + { + "type": "Attack", + "target": "Schomberg", + "effect": "1 hit.", + "target_list": [ + 53 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Schomberg", + "target_list": [ + 53 + ] + } + ] + }, + { + "scenario": 6, + "number": "15B", + "name": "Mayenne", + "wing": 0, + "strength": 6, + "star": 1, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "target": "Henri IV", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 52 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Henri IV", + "target_list": [ + 52 + ] + } + ] + }, + { + "scenario": 6, + "number": "16B", + "name": "Mercenaries", + "wing": 1, + "strength": 6, + "star": 1, + "dice": "Triples", + "actions": [ + { + "type": "Attack", + "requirement": "Triplet", + "target": "Henri IV", + "effect": "1 hit.", + "target_list": [ + 52 + ] + }, + { + "type": "Counterattack", + "requirement": "Triplet", + "target": "Henri IV", + "effect": "1 hit.", + "target_list": [ + 52 + ] + } + ] + }, + { + "scenario": 6, + "number": "17B", + "name": "League Cannons", + "wing": 1, + "special": 1, + "dice": "Straight 4", + "actions": [ + { + "type": "Screen", + "target": "D'Aumont, Montepensier, Baron de Biron", + "target_list": [ + 48, + 49, + 51 + ] + }, + { + "type": "Bombard" + } + ] + }, + { + "scenario": 6, + "number": "18B", + "name": "Egmont", + "wing": 1, + "strength": 4, + "dice": "(6)", + "actions": [ + { + "type": "Attack", + "target": "Montepensier, Baron de Biron", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 49, + 51 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Baron de Biron", + "target_list": [ + 51 + ] + } + ] + }, + { + "scenario": 6, + "number": "19B", + "name": "Nemours", + "wing": 0, + "strength": 4, + "dice": "(5)", + "actions": [ + { + "type": "Attack", + "target": "Montepensier", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 49 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Montepensier", + "target_list": [ + 49 + ] + } + ] + }, + { + "scenario": 6, + "number": "20B", + "name": "Light Horse", + "wing": 0, + "strength": 4, + "dice": "6", + "actions": [ + { + "type": "Attack", + "target": "D'Aumont", + "effect": "1 hit.", + "target_list": [ + 48 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "D'Aumont", + "target_list": [ + 48 + ] + } + ] + }, + { + "scenario": 7, + "number": "21B", + "name": "The English Fleet", + "wing": 3, + "special": 2, + "dice": "Triples", + "actions": [ + { + "type": "Screen", + "target": "Don Juan Jose, Spanish Right Cavalry", + "target_list": [ + 73, + 76 + ] + } + ], + "rule_text": "If there are one or more cubes on this card, Don Juan Jose cannot Counterattack, and the Spanish Right Cavalry cannot Screen. Both of these enemy Formations may still Attack (though said Attacks will of course be subject to being Screened)." + }, + { + "scenario": 7, + "number": "22B", + "name": "French Cannon", + "wing": 2, + "special": 2, + "dice": "Doubles", + "actions": [ + { + "type": "Screen", + "target": "Any enemy attack", + "target_list": [ + 70, + 71, + 72, + 73, + 74, + 75, + 76 + ] + }, + { + "type": "Bombard" + } + ] + }, + { + "scenario": 7, + "number": "23B", + "name": "De Castelnau", + "wing": 3, + "strength": 4, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "Spanish Right Cavalry", + "effect": "1 hit. May only take this action if target is not in Reserve.", + "target_list": [ + 76 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Don Juan Jose", + "target_list": [ + 73 + ] + } + ] + }, + { + "scenario": 7, + "number": "24B", + "name": "Lockhart", + "wing": 3, + "strength": 6, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Don Juan Jose, Duke of York", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 73, + 72 + ] + }, + { + "type": "Counterattack", + "target": "Don Juan Jose", + "effect": "1 hit. Additionally, this unit suffers one less hit.", + "target_list": [ + 73 + ] + } + ] + }, + { + "scenario": 7, + "number": "25B", + "name": "Turenne's Center", + "wing": 2, + "strength": 4, + "dice": "(6)", + "actions": [ + { + "type": "Attack", + "target": "Duke of York, Don Juan Jose", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 72, + 73 + ] + } + ] + }, + { + "scenario": 7, + "number": "26B", + "name": "Swiss Guard", + "wing": 2, + "strength": 2, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Walloons, Duke of York", + "effect": "1 hit per die.", + "target_list": [ + 71, + 72 + ] + }, + { + "type": "Counterattack", + "target": "Walloons", + "effect": "1 hit. Additionally, this unit suffers one less hit.", + "target_list": [ + 71 + ] + } + ] + }, + { + "scenario": 7, + "number": "27B", + "name": "De Crequi", + "wing": 2, + "strength": 4, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "Conde, Spanish Left Cavalry", + "effect": "1 hit.", + "target_list": [ + 70, + 75 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Conde, Spanish Left Cavalry", + "target_list": [ + 70, + 75 + ] + } + ] + }, + { + "scenario": 7, + "number": "28B", + "name": "French Reserves", + "wing": 3, + "strength": 4, + "dice": "Doubles", + "actions": [ + { + "type": "Absorb", + "requirement": "Pair, Voluntary", + "target": "Any friendly formation", + "effect": "When target suffers Hits, this card suffers 1 hit ONLY instead.", + "target_list": [ + 63, + 66, + 67, + 68 + ] + } + ] + }, + { + "scenario": 7, + "number": "29B", + "name": "Conde", + "wing": 1, + "strength": 2, + "dice": "Triples", + "actions": [ + { + "type": "Attack", + "requirement": "Triplet", + "target": "De Crequi", + "effect": "1 hit.", + "target_list": [ + 68 + ] + } + ] + }, + { + "scenario": 7, + "number": "30B", + "name": "Walloons", + "wing": 1, + "strength": 4, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Swiss Guard, Turenne's Center", + "effect": "1 hit per die.", + "target_list": [ + 67, + 66 + ] + }, + { + "type": "Screen", + "target": "Swiss Guard", + "target_list": [ + 67 + ] + } + ] + }, + { + "scenario": 7, + "number": "31B", + "name": "Duke of York", + "wing": 1, + "strength": 4, + "dice": "5", + "actions": [ + { + "type": "Attack", + "target": "Turenne's Center, Lockhart", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 66, + 65 + ] + } + ] + }, + { + "scenario": 7, + "number": "32B", + "name": "Don Juan Jose", + "wing": 0, + "strength": 6, + "dice": "6", + "actions": [ + { + "type": "Attack", + "target": "Lockhart, Turenne's Center", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 65, + 66 + ] + }, + { + "type": "Counterattack", + "target": "Lockhart", + "effect": "1 hit. Additionally, this unit suffers one less hit.", + "target_list": [ + 65 + ] + } + ] + }, + { + "scenario": 7, + "number": "33B", + "name": "Spanish Reserve", + "wing": 0, + "strength": 4, + "dice": "Doubles", + "actions": [ + { + "type": "Absorb", + "requirement": "Pair, Voluntary", + "target": "Any friendly formation", + "effect": "When target suffers Hits, this card suffers 1 hit ONLY instead.", + "target_list": [ + 73, + 74, + 75, + 76 + ] + } + ] + }, + { + "scenario": 7, + "number": "34B", + "name": "Spanish Left Cavalry", + "wing": 0, + "strength": 4, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "De Crequi, Swiss Guard", + "effect": "1 hit.", + "target_list": [ + 68, + 67 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "De Crequi, Swiss Guard", + "target_list": [ + 68, + 67 + ] + } + ], + "reserve": [ + 70 + ] + }, + { + "scenario": 7, + "number": "35B", + "name": "Spanish Right Cavalry", + "wing": 0, + "strength": 4, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "Lockhart, De Castelnau", + "effect": "1 hit.", + "target_list": [ + 65, + 64 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Lockhart, De Castelnau", + "target_list": [ + 65, + 64 + ] + } + ], + "reserve": [ + 73 + ] + }, + { + "scenario": 8, + "number": "36B", + "name": "Grant", + "wing": 0, + "strength": 8, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Stirling, The Maryland 400", + "effect": "1 hit.", + "target_list": [ + 81, + 83 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Stirling", + "effect": "1 hit. Additionally, this unit suffers one less hit.", + "target_list": [ + 81 + ] + } + ] + }, + { + "scenario": 8, + "number": "37B", + "name": "Hessians", + "wing": 0, + "strength": 5, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "target": "Sullivan", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 80 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Sullivan", + "effect": "1 hit. Additionally, this unit suffers one less hit.", + "target_list": [ + 80 + ] + } + ] + }, + { + "scenario": 8, + "number": "38B", + "name": "Clinton", + "wing": 1, + "strength": 8, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Sullivan", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 80 + ] + } + ], + "rule_text": "This card may ONLY attack IF the cards for both Grant and the Hessians have dice on them. Otherwise, this card may not attack but may use an Action to remove dice placed here previously. If Grant or the Hessians Rout, no further dice may be placed on this card." + }, + { + "scenario": 8, + "number": "39B", + "name": "Sullivan", + "wing": 2, + "strength": 6, + "dice": "(5)", + "actions": [ + { + "type": "Attack", + "target": "Hessians", + "effect": "1 hit per die.", + "target_list": [ + 78 + ] + }, + { + "type": "Attack", + "requirement": "Triplet", + "target": "Clinton", + "effect": "1 hit.", + "target_list": [ + 79 + ] + } + ] + }, + { + "scenario": 8, + "number": "40B", + "name": "Stirling", + "wing": 2, + "strength": 6, + "dice": "(6)", + "actions": [ + { + "type": "Attack", + "target": "Grant", + "effect": "1 hit per die.", + "target_list": [ + 77 + ] + } + ] + }, + { + "scenario": 8, + "number": "41B", + "name": "Knox's Artillery", + "wing": 2, + "strength": 1, + "dice": "Doubles", + "actions": [ + { + "type": "Screen", + "target": "Grant, Hessians", + "target_list": [ + 77, + 78 + ] + } + ] + }, + { + "scenario": 8, + "number": "42B", + "name": "The Maryland 400", + "wing": 3, + "strength": 2, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "Grant", + "effect": "1 hit.", + "target_list": [ + 77 + ] + } + ], + "rule_text": "This card ALWAYS suffers one less Hit when Attacked, and NEVER suffers more than one Hit in any given Attack.", + "lore_text": "This small group, actually numbering about 260, saved the Continental Army with a rearguard action against two thousand. Less than a dozen made it out.", + "reserve": [ + 81 + ] + }, + { + "scenario": 9, + "number": "43A", + "name": "Salisbury", + "wing": 2, + "strength": 5, + "dice": "(6)", + "actions": [ + { + "type": "Attack", + "target": "Sopwell Lane", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 89 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Sopwell Lane", + "effect": "1 hit.", + "target_list": [ + 89 + ] + } + ] + }, + { + "scenario": 9, + "number": "44A", + "name": "Warwick", + "wing": 2, + "strength": 5, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Shropshire Lane", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 88 + ] + }, + { + "type": "Attack", + "requirement": "Two Pairs", + "target": "Henry VI", + "effect": "1 hit. Warwick Retires upon completing this Attack Action.", + "target_list": [ + 90 + ] + } + ] + }, + { + "scenario": 9, + "number": "45A", + "name": "York", + "wing": 2, + "strength": 5, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Shropshire Lane, Sopwell Lane", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 88, + 89 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Shropshire Lane", + "effect": "1 hit.", + "target_list": [ + 88 + ] + } + ] + }, + { + "scenario": 9, + "number": "46A", + "name": "Archers", + "wing": 3, + "special": 1, + "dice": "Doubles", + "actions": [ + { + "type": "Screen", + "target": "Any enemy attack", + "target_list": [ + 88, + 89, + 90 + ] + } + ], + "rule_text": "If there is a cube on this card when you make an Attack, disregard the \"Defensive Works\" special ability on the Henry VI card." + }, + { + "scenario": 9, + "number": "47A", + "name": "Shropshire Lane", + "wing": 0, + "strength": 6, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "York, Warwick", + "effect": "1 hit per pair.", + "target_list": [ + 86, + 85 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "York, Warwick", + "effect": "1 hit.", + "target_list": [ + 86, + 85 + ] + } + ] + }, + { + "scenario": 9, + "number": "48A", + "name": "Sopwell Lane", + "wing": 0, + "strength": 6, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "Salisbury, Warwick, York", + "effect": "1 hit per pair. 1 self per action.", + "target_list": [ + 84, + 85, + 86 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Salisbury", + "effect": "1 hit.", + "target_list": [ + 84 + ] + } + ] + }, + { + "scenario": 9, + "number": "49A", + "name": "Henry VI", + "wing": 0, + "strength": 1, + "dice": "", + "actions": [], + "rule_text": "Defensive Works: While this formation remains in play, the Shropshire Land and Sopwell Lane Formations do not suffer more than one hit when Attack. <p>Note that this ability is negated whenever the Yorkists' Archers Special Formation has a cube on its card. <p>When this Formation is Routed, the Defensive Works ability is permanently lost.", + "lore_text": "I know, I know - you want some historical commentary. Warwick snuck around the formidable enemy front-line defenses to capture the King in their rear. Warwick squeezed from his end, Salisbury and York from theirs, with the other guys stuck in the middle, thus negating the enemy's positional advantage." + }, + { + "scenario": 10, + "number": "50A", + "name": "Audley's Left", + "wing": 0, + "strength": 5, + "dice": "5", + "actions": [ + { + "type": "Attack", + "target": "Neville's Right, Neville's Center", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 100, + 99 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Neville's Right", + "target_list": [ + 100 + ] + } + ] + }, + { + "scenario": 10, + "number": "51A", + "name": "Audley's Right", + "wing": 0, + "strength": 5, + "dice": "6", + "actions": [ + { + "type": "Attack", + "target": "Neville's Left, Neville's Center", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 98, + 99 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Neville's Left", + "target_list": [ + 98 + ] + } + ] + }, + { + "scenario": 10, + "number": "52A", + "name": "Lancaster Archers", + "wing": 1, + "special": 1, + "dice": "Triples", + "actions": [ + { + "type": "Screen", + "target": "Any enemy attack", + "target_list": [ + 97, + 98, + 99, + 100, + 101 + ] + } + ], + "rule_text": "When both Audley's Left and Audley's Right have Routed, remove this card from play. The removal of this card does not constitute a Rout." + }, + { + "scenario": 10, + "number": "53A", + "name": "Dudley's Left", + "wing": 1, + "strength": 6, + "dice": "(6)", + "actions": [ + { + "type": "Attack", + "target": "Neville's Right, Neville's Center", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 100, + 99 + ] + } + ], + "reserve": [ + 91 + ] + }, + { + "scenario": 10, + "number": "54A", + "name": "Dudley's Right", + "wing": 1, + "strength": 6, + "dice": "(5)", + "actions": [ + { + "type": "Attack", + "target": "Neville's Left, Neville's Center", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 98, + 99 + ] + } + ], + "reserve": [ + 92 + ] + }, + { + "scenario": 10, + "number": "55A", + "name": "Lancaster Reserves", + "wing": 0, + "strength": 6, + "dice": "Doubles", + "actions": [ + { + "type": "Absorb", + "requirement": "Pair", + "target": "Any friendly Pink formation", + "effect": "When target suffers Hits, this unit suffers them instead.", + "target_list": [ + 93, + 94, + 95 + ] + } + ] + }, + { + "scenario": 10, + "number": "56A", + "name": "Yorkist Archers", + "wing": 3, + "special": 1, + "dice": "Triples", + "actions": [ + { + "type": "Screen", + "target": "Any enemy attack", + "target_list": [ + 91, + 92, + 93, + 94, + 95, + 96 + ] + } + ] + }, + { + "scenario": 10, + "number": "57A", + "name": "Neville's Left", + "wing": 2, + "strength": 4, + "dice": "3/4", + "actions": [ + { + "type": "Attack", + "target": "Audley's Right, Dudley's Right", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 92, + 95 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Audley's Right", + "effect": "1 hit.", + "target_list": [ + 92 + ] + } + ] + }, + { + "scenario": 10, + "number": "58A", + "name": "Neville's Center", + "wing": 2, + "strength": 4, + "star": 1, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "target": "Audley's Left, Audley's Right, Dudley's Left, Dudley's Right", + "effect": "1 hit, PLUS 1 hit per die. 1 self per action.", + "target_list": [ + 91, + 92, + 94, + 95 + ] + } + ], + "rule_text": "While this card is in play, you may place dice on TWO Blue cards each turn, in addition to dice placed on any Dark blue card." + }, + { + "scenario": 10, + "number": "59A", + "name": "Neville's Right", + "wing": 2, + "strength": 4, + "dice": "4/5", + "actions": [ + { + "type": "Attack", + "target": "Audley's Left, Dudley's Left", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 91, + 94 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Audley's Left", + "effect": "1 hit.", + "target_list": [ + 91 + ] + } + ] + }, + { + "scenario": 10, + "number": "60A", + "name": "Wagon Laager", + "wing": 3, + "special": 2, + "dice": "Doubles", + "actions": [ + { + "type": "Screen", + "target": "Audley's Left, Audley's Right", + "target_list": [ + 91, + 92 + ] + } + ] + }, + { + "scenario": 11, + "number": "61A", + "name": "Wiltshire", + "wing": 1, + "strength": 4, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "target": "Devereaux, York's Center", + "effect": "1 hit.", + "target_list": [ + 107, + 106 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Devereaux", + "effect": "1 hit.", + "target_list": [ + 107 + ] + } + ] + }, + { + "scenario": 11, + "number": "62A", + "name": "Pembroke", + "wing": 0, + "strength": 4, + "dice": "5", + "actions": [ + { + "type": "Attack", + "target": "York's Center", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 106 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "York's Center", + "effect": "1 hit.", + "target_list": [ + 106 + ] + } + ] + }, + { + "scenario": 11, + "number": "63A", + "name": "Tudor", + "wing": 0, + "strength": 4, + "dice": "6", + "actions": [ + { + "type": "Attack", + "target": "Herbert, York's Center", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 105, + 106 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Herbert", + "effect": "1 hit.", + "target_list": [ + 105 + ] + } + ] + }, + { + "scenario": 11, + "number": "64A", + "name": "Herbert", + "wing": 2, + "strength": 4, + "dice": "(4)", + "actions": [ + { + "type": "Attack", + "target": "Tudor, Pembroke", + "effect": "1 hit per die.", + "target_list": [ + 104, + 103 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Tudor", + "target_list": [ + 104 + ] + } + ] + }, + { + "scenario": 11, + "number": "65A", + "name": "York's Center", + "wing": 2, + "strength": 6, + "dice": "(5)", + "actions": [ + { + "type": "Attack", + "target": "Pembroke, Wiltshire, Tudor", + "effect": "1 hit per die.", + "target_list": [ + 103, + 102, + 104 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Any enemy attack", + "target_list": [ + 102, + 103, + 104 + ] + } + ] + }, + { + "scenario": 11, + "number": "66A", + "name": "Devereaux", + "wing": 2, + "strength": 4, + "dice": "(6)", + "actions": [ + { + "type": "Attack", + "target": "Wiltshire, Pembroke", + "effect": "1 hit per die.", + "target_list": [ + 102, + 103 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Wiltshire", + "target_list": [ + 102 + ] + } + ] + }, + { + "scenario": 11, + "number": "67A", + "name": "Edward, Duke of York", + "wing": 3, + "strength": 1, + "dice": "Doubles", + "actions": [], + "rule_text": "If there are dice on this card, you MAY, but are not required to, remove all dice on this card when taking an Action or a Reaction with another Formation. If you do so, the dice thus removed count as ONE \"wild\" die, matching the type needed to take the Action or Reaction. <p>For example, if an Action does one hit per die and you have two dice on that card and two dice on this card, you can remove these dice along with the dice on the other card to inflict three hits. If a Reaction requires a Pair and you only have one die on the card in question, you MAY (but again are not required to) remove the dice from this card to use them as one die to complete the Pair." + }, + { + "scenario": 12, + "number": "68A", + "name": "Somerset's Left", + "wing": 0, + "strength": 5, + "dice": "(1)/(2)", + "actions": [ + { + "type": "Attack", + "target": "Warwick's Right, Warwick's Left, Wenlock", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 118, + 117, + 121 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Warwick's Right", + "effect": "1 hit.", + "target_list": [ + 118 + ] + } + ] + }, + { + "scenario": 12, + "number": "69A", + "name": "Somerset's Center", + "wing": 0, + "strength": 6, + "dice": "(3)/(4)", + "actions": [ + { + "type": "Attack", + "target": "Warwick's Right, Wenlock, Dinham", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 118, + 121, + 120 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Any enemy formation", + "target_list": [ + 117, + 118, + 119, + 120, + 121, + 122, + 123 + ] + } + ] + }, + { + "scenario": 12, + "number": "70A", + "name": "Somerset's Right", + "wing": 0, + "strength": 5, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Warwick's Left, Warwick's Right, Dinham", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 117, + 118, + 120 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Warwick's Left", + "effect": "1 hit.", + "target_list": [ + 117 + ] + } + ] + }, + { + "scenario": 12, + "number": "71A", + "name": "Lancaster Archers", + "wing": 1, + "special": 2, + "dice": "Straight 4", + "actions": [ + { + "type": "Screen", + "target": "Any enemy formation", + "target_list": [ + 117, + 118, + 119, + 120, + 121, + 122, + 123 + ] + } + ] + }, + { + "scenario": 12, + "number": "72A", + "name": "Exeter's Left", + "wing": 1, + "strength": 6, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Warwick's Right, Wenlock", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 118, + 121 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Wenlock", + "effect": "1 hit.", + "target_list": [ + 121 + ] + } + ], + "reserve": [ + 109 + ] + }, + { + "scenario": 12, + "number": "73A", + "name": "Exeter's Center", + "wing": 1, + "strength": 8, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Warwick's Right, Wenlock, Dinham", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 118, + 121, + 120 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Any enemy formation", + "target_list": [ + 117, + 118, + 119, + 120, + 121, + 122, + 123 + ] + } + ], + "reserve": [ + 110 + ] + }, + { + "scenario": 12, + "number": "74A", + "name": "Exeter's Right", + "wing": 1, + "strength": 6, + "dice": "(1)/(2)", + "actions": [ + { + "type": "Attack", + "target": "Warwick's Left, Dinham", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 117, + 120 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Dinham", + "effect": "1 hit.", + "target_list": [ + 120 + ] + } + ], + "reserve": [ + 111 + ] + }, + { + "scenario": 12, + "number": "75A", + "name": "Trollope", + "wing": 0, + "strength": 4, + "dice": "Doubles", + "actions": [ + { + "type": "Absorb", + "requirement": "Pair, Voluntary", + "target": "Any friendly formation", + "effect": "When target suffers Hits, this unit suffers 1 hit ONLY instead.", + "target_list": [ + 109, + 110, + 111, + 116 + ] + } + ] + }, + { + "scenario": 12, + "number": "76A", + "name": "Warwick's Left", + "wing": 2, + "strength": 7, + "dice": "(3)/(4)", + "actions": [ + { + "type": "Attack", + "target": "Somerset's Right, Somerset's Center, Exeter's Right", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 111, + 110, + 115 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Somerset's Right, Somerset's Center", + "effect": "1 hit.", + "target_list": [ + 111, + 110 + ] + } + ] + }, + { + "scenario": 12, + "number": "77A", + "name": "Warwick's Right", + "wing": 2, + "strength": 7, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Somerset's Left, Somerset's Center, Exeter's Left", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 109, + 110, + 113 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Somerset's Left, Somerset's Center", + "effect": "1 hit.", + "target_list": [ + 109, + 110 + ] + } + ] + }, + { + "scenario": 12, + "number": "78A", + "name": "York Archers", + "wing": 3, + "special": 2, + "dice": "Straight 3", + "actions": [ + { + "type": "Screen", + "target": "Any enemy formation", + "target_list": [ + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116 + ] + }, + { + "type": "Bombard" + } + ] + }, + { + "scenario": 12, + "number": "79A", + "name": "Dinham", + "wing": 3, + "strength": 6, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Somerset's Right, Exeter's Right, Exeter's Center", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 111, + 115, + 114 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Exeter's Right, Exeter's Center", + "target_list": [ + 115, + 114 + ] + } + ], + "reserve": [ + 117 + ] + }, + { + "scenario": 12, + "number": "80A", + "name": "Wenlock", + "wing": 3, + "strength": 6, + "dice": "(3)/(4)", + "actions": [ + { + "type": "Attack", + "target": "Somerset's Left, Exeter's Left, Exeter's Center", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 109, + 113, + 114 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Somerset's Center, Exeter's Left, Exeter's Center", + "target_list": [ + 110, + 113, + 114 + ] + } + ], + "reserve": [ + 118 + ] + }, + { + "scenario": 12, + "number": "81A", + "name": "Edward, Duke of York", + "wing": 3, + "strength": 1, + "dice": "Any", + "actions": [ + { + "type": "Command", + "requirement": "Full House", + "target": "Norfolk out of reserve", + "target_list": [ + 123 + ] + } + ], + "rule_text": "If there are dice on this card, you MAY, but are not required to, remove all dice on this card when taking an Action or a Reaction with another Formation. If you do so, the dice htus removed count as ONE \"wild\" die, matching the type needed to take the Action or Reaction." + }, + { + "scenario": 12, + "number": "82A", + "name": "Norfolk", + "wing": 2, + "strength": 4, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "requirement": "Pair", + "target": "Somerset's Left, Somerset's Center, Exeter's Left, Exeter's Center", + "effect": "1 hit per die.", + "target_list": [ + 109, + 110, + 113, + 114 + ] + }, + { + "type": "Absorb", + "requirement": "Pair, Voluntary", + "target": "Any friendly formation", + "effect": "When target suffers Hits, this unit suffers 1 hit ONLY instead.", + "target_list": [ + 117, + 118, + 123 + ] + } + ], + "reserve": [] + }, + { + "scenario": 13, + "number": "43B", + "name": "Pembroke", + "wing": 2, + "strength": 4, + "dice": "(6)", + "actions": [ + { + "type": "Attack", + "target": "Redesdale, Clapham", + "effect": "1 hit, PLUS 1 hit per die. 1 self per action.", + "target_list": [ + 129, + 132 + ] + } + ] + }, + { + "scenario": 13, + "number": "44B", + "name": "Herbert", + "wing": 2, + "strength": 4, + "dice": "(5)", + "actions": [ + { + "type": "Attack", + "target": "Redesdale, Clapham", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 129, + 132 + ] + }, + { + "type": "Absorb", + "requirement": "Pair", + "target": "Pembroke", + "effect": "When target suffers Hits, this unit suffers 1 hit ONLY instead.", + "target_list": [ + 124 + ] + } + ] + }, + { + "scenario": 13, + "number": "45B", + "name": "Yorkist Reinforcements", + "wing": 2, + "special": 3, + "dice": "Straight 3", + "actions": [ + { + "type": "Command", + "requirement": "3 cubes", + "target": "Devon, Devon's Archers", + "target_list": [ + 127, + 128 + ] + } + ], + "rule_text": "Unlike most Special Formations, this card begins the game with NO cubes on it." + }, + { + "scenario": 13, + "number": "46B", + "name": "Devon", + "wing": 3, + "strength": 6, + "dice": "(3)/(4)", + "actions": [ + { + "type": "Attack", + "target": "Redesdale, Clapham", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 129, + 132 + ] + } + ], + "reserve": [] + }, + { + "scenario": 13, + "number": "47B", + "name": "Devon's Archers", + "wing": 3, + "special": 2, + "dice": "Doubles", + "actions": [ + { + "type": "Screen", + "target": "Any enemy formation", + "target_list": [ + 129, + 130, + 131, + 132 + ] + } + ], + "reserve": [] + }, + { + "scenario": 13, + "number": "48B", + "name": "Redesdale", + "wing": 0, + "strength": 6, + "dice": "(5)/(6)", + "actions": [ + { + "type": "Attack", + "target": "Pembroke, Herbert, Devon", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 124, + 125, + 127 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Pembroke, Herbert", + "effect": "1 hit.", + "target_list": [ + 124, + 125 + ] + } + ] + }, + { + "scenario": 13, + "number": "49B", + "name": "Rebel Archers", + "wing": 0, + "special": 2, + "dice": "Doubles", + "actions": [ + { + "type": "Screen", + "target": "Any enemy formation", + "target_list": [ + 124, + 125, + 126, + 127, + 128 + ] + } + ] + }, + { + "scenario": 13, + "number": "50B", + "name": "Rebel Reinforcements", + "wing": 1, + "special": 3, + "dice": "Straight 3", + "actions": [ + { + "type": "Command", + "requirement": "3 cubes", + "target": "Clapham", + "target_list": [ + 132 + ] + } + ], + "rule_text": "Unlike most Special Formations, this card begins the game with NO cubes on it." + }, + { + "scenario": 13, + "number": "51B", + "name": "Clapham", + "wing": 1, + "strength": 4, + "dice": "(3)/(4)", + "actions": [ + { + "type": "Attack", + "target": "Pembroke, Herbert, Devon", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 124, + 125, + 127 + ] + } + ], + "reserve": [] + }, + { + "scenario": 14, + "number": "52B", + "name": "Exeter", + "wing": 0, + "strength": 5, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "target": "Edward IV", + "effect": "1 hit. 1 self per action.", + "target_list": [ + 139 + ] + } + ] + }, + { + "scenario": 14, + "number": "53B", + "name": "Montagu", + "wing": 0, + "strength": 6, + "dice": "5", + "actions": [ + { + "type": "Attack", + "target": "Hastings, Edward IV", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 138, + 139 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Edward IV", + "effect": "1 hit. Additionally, this unit only suffers one hit.", + "target_list": [ + 139 + ] + } + ] + }, + { + "scenario": 14, + "number": "54B", + "name": "Oxford", + "wing": 0, + "strength": 5, + "dice": "6", + "actions": [ + { + "type": "Attack", + "target": "Hastings, Edward IV", + "effect": "1 hit, PLUS 1 hit per die. 1 self per action.", + "target_list": [ + 138, + 139 + ] + } + ] + }, + { + "scenario": 14, + "number": "55B", + "name": "Warwick", + "wing": 0, + "strength": 4, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "target": "Edward IV, Gloucester", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 139, + 140 + ] + } + ], + "reserve": [ + 133, + 134 + ] + }, + { + "scenario": 14, + "number": "56B", + "name": "The Kingmaker", + "wing": 0, + "special": 1, + "dice": "", + "actions": [ + { + "type": "Screen", + "requirement": "Voluntary" + } + ], + "rule_text": "While this card is in play, you may place dice on TWO Red cards per Turn. <p>Once this card is used to SCREEN an attack, the card is removed from play and this benefit is lost. This does not constitute Routing, but it does constitute Richard Neville, 16th Earl of Warwick, suffering from a fatal case of being stabbed to death." + }, + { + "scenario": 14, + "number": "57B", + "name": "Hastings", + "wing": 2, + "strength": 4, + "dice": "5", + "actions": [ + { + "type": "Attack", + "target": "Montagu, Warwick", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 134, + 136 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Montagu", + "effect": "1 hit.", + "target_list": [ + 134 + ] + } + ] + }, + { + "scenario": 14, + "number": "58B", + "name": "Edward IV", + "wing": 2, + "strength": 6, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "target": "Exeter, Montagu, Warwick", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 133, + 134, + 136 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Montagu", + "effect": "1 hit. Additionally, this unit only suffers one hit.", + "target_list": [ + 134 + ] + } + ] + }, + { + "scenario": 14, + "number": "59B", + "name": "Gloucester", + "wing": 2, + "strength": 4, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "target": "Exeter, Warwick", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 133, + 136 + ] + } + ] + }, + { + "scenario": 14, + "number": "60B", + "name": "Edward's Reserves", + "wing": 2, + "strength": 4, + "dice": "Doubles", + "actions": [ + { + "type": "Absorb", + "requirement": "Pair, Voluntary", + "target": "Edward IV", + "effect": "When target suffers Hits, this unit suffers 1 hit ONLY instead.", + "target_list": [ + 139 + ] + } + ], + "rule_text": "If this card is still in play when Edward IV Routs, this card also Routs, immediately and simultaneously." + }, + { + "scenario": 14, + "number": "61B", + "name": "\"Treason!\"", + "wing": 3, + "strength": 1, + "dice": "3/4", + "actions": [ + { + "type": "Attack", + "requirement": "Full House", + "target": "Oxford", + "target_list": [ + 135 + ] + } + ], + "lore_text": "In the dense fog, Oxford was mistaken for the enemy and his men fired upon in the confusion. Fearing treason, they fled the battlefield." + }, + { + "scenario": 14, + "number": "62B", + "name": "The King", + "wing": 2, + "special": 1, + "dice": "", + "actions": [ + { + "type": "Attack" + }, + { + "type": "Screen", + "requirement": "Voluntary", + "target": "Any enemy formation", + "target_list": [ + 133, + 134, + 135, + 136, + 137 + ] + } + ] + }, + { + "scenario": 15, + "number": "63B", + "name": "A Plump of Spears", + "wing": 3, + "strength": 1, + "dice": "Doubles", + "actions": [], + "rule_text": "If there are dice on this card, Attacks you make against Somerset inflict one extra hit. <p>When Somerset Routs, remove this card from play (this does not constitute a Rout) and place any dice back into your dice pool." + }, + { + "scenario": 15, + "number": "64B", + "name": "Gloucester", + "wing": 2, + "strength": 4, + "dice": "(4)", + "actions": [ + { + "type": "Attack", + "target": "Somerset, Wenlock", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 151, + 150 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Somerset", + "target_list": [ + 151 + ] + } + ] + }, + { + "scenario": 15, + "number": "65B", + "name": "Edward IV", + "wing": 2, + "strength": 6, + "dice": "(5)", + "actions": [ + { + "type": "Attack", + "target": "Somerset, Wenlock", + "effect": "1 hit per die.", + "target_list": [ + 151, + 150 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Wenlock", + "target_list": [ + 150 + ] + } + ] + }, + { + "scenario": 15, + "number": "66B", + "name": "Hastings", + "wing": 2, + "strength": 4, + "dice": "(6)", + "actions": [ + { + "type": "Attack", + "target": "Devon, Wenlock", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 149, + 150 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Devon", + "target_list": [ + 149 + ] + } + ] + }, + { + "scenario": 15, + "number": "67B", + "name": "York's Guns", + "wing": 3, + "special": 2, + "dice": "Straight 3", + "actions": [ + { + "type": "Screen", + "target": "Any enemy formation", + "target_list": [ + 149, + 150, + 151, + 152 + ] + }, + { + "type": "Bombard" + } + ] + }, + { + "scenario": 15, + "number": "68B", + "name": "Devon", + "wing": 0, + "strength": 6, + "dice": "(6)", + "actions": [ + { + "type": "Attack", + "target": "Hastings, Edward IV", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 147, + 146 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Hastings", + "target_list": [ + 147 + ] + } + ] + }, + { + "scenario": 15, + "number": "69B", + "name": "Wenlock", + "wing": 0, + "strength": 6, + "dice": "(5)", + "actions": [ + { + "type": "Attack", + "target": "Edward IV, Gloucester", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 146, + 145 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Edward IV", + "target_list": [ + 146 + ] + } + ], + "rule_text": "Wenlock cannot Screen after Somerset Routs (the retreating Somerset, enraged that Wenlock had not supported his attack, killed him on the spot with an axe)." + }, + { + "scenario": 15, + "number": "70B", + "name": "Somerset", + "wing": 0, + "strength": 6, + "star": 1, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "target": "Edward IV, Gloucester", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 146, + 145 + ] + } + ] + }, + { + "scenario": 15, + "number": "71B", + "name": "Lancaster's Guns", + "wing": 1, + "special": 2, + "dice": "Straight 4", + "actions": [ + { + "type": "Screen", + "target": "Any enemy formation", + "target_list": [ + 144, + 145, + 146, + 147, + 148 + ] + } + ] + }, + { + "scenario": 16, + "number": "72B", + "name": "Lincoln's Left", + "wing": 2, + "strength": 4, + "dice": "4", + "actions": [ + { + "type": "Attack", + "target": "Scales, Oxford, Strange", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 159, + 158, + 163 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Scales", + "effect": "1 hit.", + "target_list": [ + 159 + ] + } + ] + }, + { + "scenario": 16, + "number": "73B", + "name": "German Mercenaries", + "wing": 2, + "strength": 4, + "dice": "Doubles", + "actions": [ + { + "type": "Attack", + "target": "Oxford, Strange", + "effect": "1 hit per die.", + "target_list": [ + 158, + 163 + ] + } + ], + "rule_text": "This Formation ALWAYS suffers one less Hit when being Attacked, and NEVER suffers more than one Hit in any given Attack." + }, + { + "scenario": 16, + "number": "74B", + "name": "Irish Kerns", + "wing": 2, + "strength": 8, + "dice": "6", + "actions": [ + { + "type": "Attack", + "target": "Oxford, Strange", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 158, + 163 + ] + }, + { + "type": "Absorb", + "requirement": "Pair", + "target": "Any friendly formation", + "effect": "When target suffers Hits, this unit suffers them instead.", + "target_list": [ + 153, + 154, + 155, + 156 + ] + } + ] + }, + { + "scenario": 16, + "number": "75B", + "name": "Lincoln's Right", + "wing": 2, + "strength": 4, + "dice": "5", + "actions": [ + { + "type": "Attack", + "target": "Savage, Oxford, Strange", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 157, + 158, + 163 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "Savage", + "effect": "1 hit.", + "target_list": [ + 157 + ] + } + ] + }, + { + "scenario": 16, + "number": "76B", + "name": "Savage", + "wing": 0, + "strength": 3, + "dice": "4", + "actions": [ + { + "type": "Attack", + "target": "Lincoln's Right", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 156 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Lincoln's Right", + "target_list": [ + 156 + ] + } + ], + "pursuit": 1 + }, + { + "scenario": 16, + "number": "77B", + "name": "Oxford", + "wing": 0, + "strength": 8, + "star": 1, + "dice": "5/6", + "actions": [ + { + "type": "Attack", + "target": "German Mercenaries, Lincoln's Left, Lincoln's Right", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 154, + 153, + 156 + ] + }, + { + "type": "Counterattack", + "requirement": "Pair", + "target": "German Mercenaries", + "effect": "1 hit. Additionally, this unit suffers one less hit.", + "target_list": [ + 154 + ] + } + ] + }, + { + "scenario": 16, + "number": "78B", + "name": "Scales", + "wing": 0, + "strength": 3, + "dice": "3", + "actions": [ + { + "type": "Attack", + "target": "Lincoln's Left", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 153 + ] + }, + { + "type": "Screen", + "requirement": "Pair", + "target": "Lincoln's Left", + "target_list": [ + 153 + ] + } + ], + "pursuit": 1 + }, + { + "scenario": 16, + "number": "79B", + "name": "Tudor Archers", + "wing": 1, + "special": 2, + "dice": "Straight 3", + "actions": [ + { + "type": "Attack", + "target": "Irish Kerns", + "effect": "1 hit.", + "target_list": [ + 155 + ] + }, + { + "type": "Screen", + "target": "Any enemy formation", + "target_list": [ + 153, + 154, + 155, + 156 + ] + } + ] + }, + { + "scenario": 16, + "number": "80B", + "name": "The Earl of Oxford", + "wing": 1, + "strength": 1, + "dice": "Doubles", + "actions": [], + "rule_text": "If there are dice on this card, you MAY, but are not required to, remove all dice on this card when taking an Action or Reaction with another Formation. If you do so, the dice thus removed count as ONE \"wild\" die, matching the type needed to take the Action or Reaction. <p>If there are dice on this card at the start of your Roll Phase, you may place dice on two Red Formations in addition to any dice placed on a Pink Formation." + }, + { + "scenario": 16, + "number": "81B", + "name": "Henry VII", + "wing": 1, + "strength": 7, + "dice": "6", + "actions": [ + { + "type": "Absorb", + "requirement": "Pair, Voluntary", + "target": "Any friendly formation", + "effect": "When target suffers Hits, this unit suffers them instead.", + "target_list": [ + 157, + 158, + 159, + 163 + ] + } + ] + }, + { + "scenario": 16, + "number": "82B", + "name": "Strange", + "wing": 0, + "strength": 6, + "dice": "6", + "actions": [ + { + "type": "Attack", + "target": "German Mercenaries, Lincoln's Right, Lincoln's Left", + "effect": "1 hit per die. 1 self per action.", + "target_list": [ + 154, + 156, + 153 + ] + } + ], + "reserve": [ + 158 + ] + } +], +} +if (typeof module!=='undefined') module.exports = data
\ No newline at end of file diff --git a/die_black_pips.svg b/die_black_pips.svg new file mode 100644 index 0000000..4b2f538 --- /dev/null +++ b/die_black_pips.svg @@ -0,0 +1,37 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="336" height="56"> +<g fill="black" fill-opacity="0.8"> +<g transform="translate(0 0)"> +<circle r="6" cx="28" cy="28"/> +</g> +<g transform="translate(56 0)"> +<circle r="6" cx="12" cy="12"/> +<circle r="6" cx="44" cy="44"/> +</g> +<g transform="translate(112 0)"> +<circle r="6" cx="12" cy="44"/> +<circle r="6" cx="44" cy="12"/> +<circle r="6" cx="28" cy="28"/> +</g> +<g transform="translate(168 0)"> +<circle r="6" cx="12" cy="12"/> +<circle r="6" cx="12" cy="44"/> +<circle r="6" cx="44" cy="12"/> +<circle r="6" cx="44" cy="44"/> +</g> +<g transform="translate(224 0)"> +<circle r="6" cx="12" cy="12"/> +<circle r="6" cx="12" cy="44"/> +<circle r="6" cx="44" cy="12"/> +<circle r="6" cx="44" cy="44"/> +<circle r="6" cx="28" cy="28"/> +</g> +<g transform="translate(280 0)"> +<circle r="6" cx="12" cy="12"/> +<circle r="6" cx="12" cy="28"/> +<circle r="6" cx="12" cy="44"/> +<circle r="6" cx="44" cy="12"/> +<circle r="6" cx="44" cy="28"/> +<circle r="6" cx="44" cy="44"/> +</g> +</g> +</svg> diff --git a/die_white_pips.svg b/die_white_pips.svg new file mode 100644 index 0000000..efc864b --- /dev/null +++ b/die_white_pips.svg @@ -0,0 +1,37 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="336" height="56"> +<g fill="white"> +<g transform="translate(0 0)"> +<circle r="6" cx="28" cy="28"/> +</g> +<g transform="translate(56 0)"> +<circle r="6" cx="12" cy="12"/> +<circle r="6" cx="44" cy="44"/> +</g> +<g transform="translate(112 0)"> +<circle r="6" cx="12" cy="44"/> +<circle r="6" cx="44" cy="12"/> +<circle r="6" cx="28" cy="28"/> +</g> +<g transform="translate(168 0)"> +<circle r="6" cx="12" cy="12"/> +<circle r="6" cx="12" cy="44"/> +<circle r="6" cx="44" cy="12"/> +<circle r="6" cx="44" cy="44"/> +</g> +<g transform="translate(224 0)"> +<circle r="6" cx="12" cy="12"/> +<circle r="6" cx="12" cy="44"/> +<circle r="6" cx="44" cy="12"/> +<circle r="6" cx="44" cy="44"/> +<circle r="6" cx="28" cy="28"/> +</g> +<g transform="translate(280 0)"> +<circle r="6" cx="12" cy="12"/> +<circle r="6" cx="12" cy="28"/> +<circle r="6" cx="12" cy="44"/> +<circle r="6" cx="44" cy="12"/> +<circle r="6" cx="44" cy="28"/> +<circle r="6" cx="44" cy="44"/> +</g> +</g> +</svg> diff --git a/favicon.png b/favicon.png Binary files differnew file mode 100644 index 0000000..1378feb --- /dev/null +++ b/favicon.png diff --git a/info/all-cards.html b/info/all-cards.html new file mode 100644 index 0000000..1009ef1 --- /dev/null +++ b/info/all-cards.html @@ -0,0 +1,2743 @@ +<!doctype html> +<html lang="en"> +<head> +<title>Table Battle Cards</title> +<link rel="stylesheet" href="/fonts/fonts.css"> +<link rel="stylesheet" href="/table-battles/cards.css"> +<style> +body{background-color:dimgray;color:whitesmoke;max-width:1600px;margin:0 auto;padding:20px;background-image:url(../background.png)} +h1{color: white} +.list{display:flex;flex-wrap:wrap;gap:20px;} +</style> +</head> +<body> +<div> +</div><h2>BASE GAME</h2><div class="list"> +</div><h2></h2><div class="list"> +</div><h2>WHITE MOUNTAIN</h2><div class="list"> +<div class="formation card"> +<div class="name red">The Twelve Apostles</div> +<div class="strength">III</div> +<div class="dice_area">Straight 4</div> +<div class="action_row"> +<div class="action_type">Bombard</div> +<div class="action_requirement"></div> +<div class="action_target"></div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Any enemy attack</div> +</div> +<div class="lore_text">These were a dozen heavy guns fielded by the Catholic League.</div> +<div class="number">1A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Catholic League Cavalry</div> +<div class="strength">4</div> +<div class="dice_area">3/4</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Triplet</div> +<div class="action_target">Schlick</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Hohenlohe</div> +</div> +<div class="number">2A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Catholic League Foot</div> +<div class="strength">6</div> +<div class="dice_area">(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Hohenlohe, Schlick</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="number">3A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name pink">Imperial Cavalry</div> +<div class="strength">4</div> +<div class="dice_area">1/2</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Triplet</div> +<div class="action_target">Protestant Cavalry</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Thurn</div> +</div> +<div class="reserve">PURSUIT</div> +<div class="number">4A</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Liechtenstein</div> +<div class="strength">6</div> +<div class="dice_area">(5)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Thurn, Hohenlohe</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="reserve">RETIRE</div> +<div class="number">5A</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Tiefenbach</div> +<div class="strength">4</div> +<div class="dice_area">(4)<div class="star">★</div></div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Thurn, Hohenlohe</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="reserve">IN RESERVE (Liechtenstein)</div> +<div class="number">6A</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name blue">Thurn</div> +<div class="strength">6</div> +<div class="dice_area">6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Liechtenstein, Tiefenbach</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="number">7A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Protestant Cavalry</div> +<div class="strength">4</div> +<div class="dice_area">5/6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Triplet</div> +<div class="action_target">Imperial Cavalry</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Liechtenstein, Tiefenbach</div> +</div> +<div class="reserve">PURSUIT</div> +<div class="number">8A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Hohenlohe</div> +<div class="strength">6</div> +<div class="dice_area">5<div class="star">★</div></div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Catholic League Foot, Liechtenstein, Tiefenbach</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="lore_text">One of the nobles who instigated the Bohemian Revolt (and thus the Thirty Years War) by chucking a couple of civil servants out a window. They survived, and Thurn went on to be one of the worst generals in the rebellion. His incompetence helped seal their fate at White Mountain.</div> +<div class="number">9A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Schlick</div> +<div class="strength">4</div> +<div class="dice_area">4</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Triplet</div> +<div class="action_target">Catholic League Cavalry</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Catholic League Foot</div> +</div> +<div class="number">10A</div> +<div class="extra">♣</div> +</div> +</div><h2></h2><div class="list"> +</div><h2>MARSTON MOOR</h2><div class="list"> +<div class="formation card"> +<div class="name dkblue">Northern Horse</div> +<div class="strength">3</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Fairfax</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Baillie, Lumsden, Fairfax</div> +</div> +<div class="reserve">PURSUIT</div> +<div class="number">11A</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name blue">Tillier's Left</div> +<div class="strength">6</div> +<div class="dice_area">(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Baillie, Lumsden</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="number">12A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Royalist Guns</div> +<div class="strength">I</div> +<div class="dice_area">Straight 4</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Any enemy attack</div> +</div> +<div class="number">13A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Tillier's Right</div> +<div class="strength">4</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Crawford, Manchester</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="reserve">RETIRE</div> +<div class="number">14A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Whitecoats</div> +<div class="strength">2</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Crawford, Manchester</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="reserve">IN RESERVE (Tillier's Right)</div> +<div class="number">15A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name dkblue">Byron</div> +<div class="strength">3</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Two Pairs</div> +<div class="action_target">Cromwell</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Crawford, Manchester, Cromwell</div> +</div> +<div class="reserve">PURSUIT</div> +<div class="number">16A</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name dkblue">Rupert's Lifeguard</div> +<div class="strength">1</div> +<div class="rule_text">While this card is in play, Tillier's Left and Tillier's Right suffer one less hit when Attacked. <p>When either the Northern Horse or Byron are about to Rout, add the Lifeguard's Unit to that Formation. That is, that Formation does NOT Rout at this time, but only has one Unit block. <p>Remove this card from play if and when that happens. This does not constitute a Rout.</div> +<div class="number">17A</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name red">Cromwell</div> +<div class="strength">4</div> +<div class="dice_area">1-3</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Byron, Northern Horse</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Byron, Tillier's Right, Whitecoats</div> +</div> +<div class="lore_text">Cromwell's disciplined cavalry didn't chase after the fleeing Byron, but circled around to take out the other wing of horse.</div> +<div class="number">18A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Crawford</div> +<div class="strength">4</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Tillier's Right, Whitecoats</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="reserve">RETIRE</div> +<div class="number">19A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Manchester</div> +<div class="strength">4</div> +<div class="dice_area">(4)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Tillier's Right, Whitecoats</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="reserve">IN RESERVE (Crawford)</div> +<div class="number">20A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name pink">Roundhead Guns</div> +<div class="strength">II</div> +<div class="dice_area">Triples</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Any enemy attack</div> +</div> +<div class="number">21A</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Baillie</div> +<div class="strength">3</div> +<div class="dice_area">(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Tillier's Left, Tillier's Right, Whitecoats</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="reserve">RETIRE</div> +<div class="number">22A</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Lumsden</div> +<div class="strength">5</div> +<div class="dice_area">(5)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Tillier's Left, Tillier's Right, Whitecoats</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="reserve">IN RESERVE (Baillie)</div> +<div class="number">23A</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name red">Fairfax</div> +<div class="strength">3</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Northern Horse</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Tillier's Left, Northern Horse</div> +</div> +<div class="reserve">PURSUIT</div> +<div class="number">24A</div> +<div class="extra">♦</div> +</div> +</div><h2></h2><div class="list"> +</div><h2>THE PLAINS OF ABRAHAM</h2><div class="list"> +<div class="formation card"> +<div class="name red">British Left</div> +<div class="strength">4</div> +<div class="dice_area">5/6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">French Right</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement"></div> +<div class="action_target">French Right</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">25A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">British Center</div> +<div class="strength">8</div> +<div class="dice_area">3/4</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">French Center</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement"></div> +<div class="action_target">French Center</div> +<div class="action_effect">1 hit. Additionally, this unit suffers one less hit.</div> +</div> +<div class="number">26A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">British Right</div> +<div class="strength">4</div> +<div class="dice_area">1/2</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">French Left</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement"></div> +<div class="action_target">French Left</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">27A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Wolfe</div> +<div class="strength">I</div> +<div class="action_row"> +<div class="action_type">Screen</div> +<div class="action_requirement">Voluntary</div> +<div class="action_target">Any enemy attack</div> +</div> +<div class="rule_text">While this card is in play, you may place dice on TWO cards per turn. <p>Once this card is used to SCREEN an Attack, the card is removed from play. This does not constitute a Rout.</div> +<div class="lore_text">Brilliant, moody, and thirty-one years old, James Wolfe was fatally wounded early in the battle. As he bled out, he heard of his victory, and said "Now, God be praised, I will die in peace."</div> +<div class="number">28A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name blue">French Left</div> +<div class="strength">4</div> +<div class="dice_area">6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">British Right</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement"></div> +<div class="action_target">British Right</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">29A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">French Center</div> +<div class="strength">6</div> +<div class="dice_area">5/6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">British Center</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement"></div> +<div class="action_target">British Center</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">30A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">French Right</div> +<div class="strength">4</div> +<div class="dice_area">4</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">British Left</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement"></div> +<div class="action_target">British Left</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">31A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Montcalm</div> +<div class="strength">I</div> +<div class="action_row"> +<div class="action_type">Screen</div> +<div class="action_requirement">Voluntary</div> +<div class="action_target">Any enemy attack</div> +</div> +<div class="rule_text">While this card is in play, you may place dice on TWO cards per turn. <p>Once this card is used to SCREEN an Attack, the card is removed from play. This does not constitute a Rout.</div> +<div class="lore_text">A seasoned commander at the age of forty-seven, Montcalm tried his best with inferior troops. Wounded during the battle, he dies the next day.</div> +<div class="number">32A</div> +<div class="extra">♣</div> +</div> +</div><h2></h2><div class="list"> +</div><h2>BOSWORTH FIELD</h2><div class="list"> +<div class="formation card"> +<div class="name blue">King Richard III</div> +<div class="strength">4</div> +<div class="dice_area">4/5</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Oxford, Richmond</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Command</div> +<div class="action_requirement">Full House</div> +<div class="action_target">Northumberland out of reserve</div> +</div> +<div class="rule_text">While this card is in play, you may place dice on TWO Blue cards each turn, and on ONE Dark Blue card.</div> +<div class="number">33A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Norfolk</div> +<div class="strength">4</div> +<div class="dice_area">5/6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Oxford, Richmond</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Any enemy attack</div> +</div> +<div class="number">34A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Northumberland</div> +<div class="strength">6</div> +<div class="dice_area">4</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Oxford, Richmond</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Any enemy attack</div> +</div> +<div class="reserve">IN RESERVE (Commanded)</div> +<div class="number">35A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name red">Oxford</div> +<div class="strength">8</div> +<div class="dice_area">5/6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Norfolk, King Richard III</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Any enemy attack</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">36A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Richmond</div> +<div class="strength">2</div> +<div class="dice_area">3/4</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Norfolk, King Richard III</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Command</div> +<div class="action_requirement">Full House</div> +<div class="action_target">The Stanleys out of reserve</div> +</div> +<div class="lore_text">The future Henry VII. Contrary to popular belief, he gained his kingdom by winning this battle, not by trading Richard a horse.</div> +<div class="number">37A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name pink">The Stanleys</div> +<div class="strength">4</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Absorb</div> +<div class="action_requirement">Pair, Voluntary</div> +<div class="action_target">Oxford, Richmond</div> +<div class="action_effect">When target suffers Hits, this card suffers them instead.</div> +</div> +<div class="rule_text">When this card comes out of Reserve, Northumberland immediately Routs.</div> +<div class="lore_text">The Stanleys were political intriguers who spent most of the battle on the sidelines, waiting to see who was likely to win before intervening decisively for Henry.</div> +<div class="reserve">IN RESERVE (Commanded)</div> +<div class="number">38A</div> +<div class="extra">♥</div> +</div> +</div><h2></h2><div class="list"> +</div><h2>MALPLAQUET</h2><div class="list"> +<div class="formation card"> +<div class="name blue">Villars</div> +<div class="strength">6</div> +<div class="dice_area">5/6<div class="star">★</div></div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Schulenburg, Lottum, Orkney</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Schulenburg, Lottum, Orkney</div> +</div> +<div class="rule_text">While this card is in play, you may place dice on TWO Blue cards each turn, and on ONE Dark Blue card.</div> +<div class="number">39A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Center</div> +<div class="strength">6</div> +<div class="dice_area">4</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Lottum, Orkney, Marlborough</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="number">40A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Boufflers</div> +<div class="strength">6</div> +<div class="dice_area">5/6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Orange, Marlborough</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Orange, Marlborough</div> +</div> +<div class="number">41A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name dkblue">French Reserves</div> +<div class="strength">6</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Absorb</div> +<div class="action_requirement">Pair, Voluntary</div> +<div class="action_target">Any friendly formation</div> +<div class="action_effect">When target suffers Hits, this card suffers them instead.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Withers</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">42A</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name pink">Orange</div> +<div class="strength">8</div> +<div class="dice_area">(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Boufflers, Center</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="number">1B</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Marlborough</div> +<div class="strength">6</div> +<div class="dice_area">(5)/(6)<div class="star">★</div></div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Boufflers, Center</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Boufflers, Center</div> +</div> +<div class="number">2B</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name red">Schulenburg</div> +<div class="strength">8</div> +<div class="dice_area">(5)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Villars, Center</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Villars, Center</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="number">3B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Lottum</div> +<div class="strength">4</div> +<div class="dice_area">(4)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Villars, Center</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Villars, Center</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="reserve">RETIRE</div> +<div class="number">4B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Orkney</div> +<div class="strength">4</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Villars, Center</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="reserve">IN RESERVE (Lottum)</div> +<div class="number">5B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Withers</div> +<div class="strength">4</div> +<div class="dice_area">Straight 4</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">French Reserves</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="lore_text">A detachment under Henry Withers advanced against the French flank, forcing Villars to divert much-needed forces from his center. This weakened the French line, and in a final push Marlborough and Prince Eugene of Savoy broke it.</div> +<div class="number">6B</div> +<div class="extra">♦</div> +</div> +</div><h2></h2><div class="list"> +</div><h2>IVRY</h2><div class="list"> +<div class="formation card"> +<div class="name dkblue">D'Aumont</div> +<div class="strength">4</div> +<div class="dice_area">6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Light Horse, Nemours</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Light Horse</div> +</div> +<div class="number">7B</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name dkblue">Montepensier</div> +<div class="strength">4</div> +<div class="dice_area">5</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Nemours, Egmont</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Nemours</div> +</div> +<div class="number">8B</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name dkblue">Royalist Cannons</div> +<div class="strength">II</div> +<div class="dice_area">Straight 4</div> +<div class="action_row"> +<div class="action_type">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Light Horse, Nemours, Egmont</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Bombard</div> +<div class="action_requirement"></div> +<div class="action_target"></div> +</div> +<div class="number">9B</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name dkblue">Baron de Biron</div> +<div class="strength">6</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Egmont, Mercenaries, Mayenne</div> +<div class="action_effect">1 hit per action. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Egmont</div> +</div> +<div class="number">10B</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name blue">Henri IV</div> +<div class="strength">6</div> +<div class="dice_area">5/6<div class="star">★</div></div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Mercenaries, Mayenne</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Mercenaries, Mayenne</div> +</div> +<div class="number">11B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Schomberg</div> +<div class="strength">3</div> +<div class="dice_area">4</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Aumale, Mayenne</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Aumale</div> +</div> +<div class="number">12B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Marshal de Biron</div> +<div class="strength">4</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Absorb</div> +<div class="action_requirement">Pair, Voluntary</div> +<div class="action_target">Any friendly formation</div> +<div class="action_effect">When target suffers Hits, this card suffers them instead.</div> +</div> +<div class="number">13B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name red">Aumale</div> +<div class="strength">4</div> +<div class="dice_area">4</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Schomberg</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Schomberg</div> +</div> +<div class="number">14B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Mayenne</div> +<div class="strength">6</div> +<div class="dice_area">5/6<div class="star">★</div></div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Henri IV</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Henri IV</div> +</div> +<div class="number">15B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name pink">Mercenaries</div> +<div class="strength">6</div> +<div class="dice_area">Triples<div class="star">★</div></div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Triplet</div> +<div class="action_target">Henri IV</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Triplet</div> +<div class="action_target">Henri IV</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">16B</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">League Cannons</div> +<div class="strength">I</div> +<div class="dice_area">Straight 4</div> +<div class="action_row"> +<div class="action_type">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">D'Aumont, Montepensier, Baron de Biron</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Bombard</div> +<div class="action_requirement"></div> +<div class="action_target"></div> +</div> +<div class="number">17B</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Egmont</div> +<div class="strength">4</div> +<div class="dice_area">(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Montepensier, Baron de Biron</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Baron de Biron</div> +</div> +<div class="number">18B</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name red">Nemours</div> +<div class="strength">4</div> +<div class="dice_area">(5)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Montepensier</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Montepensier</div> +</div> +<div class="number">19B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Light Horse</div> +<div class="strength">4</div> +<div class="dice_area">6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">D'Aumont</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">D'Aumont</div> +</div> +<div class="number">20B</div> +<div class="extra">♦</div> +</div> +</div><h2></h2><div class="list"> +</div><h2>THE DUNES</h2><div class="list"> +<div class="formation card"> +<div class="name dkblue">The English Fleet</div> +<div class="strength">II</div> +<div class="dice_area">Triples</div> +<div class="action_row"> +<div class="action_type">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Don Juan Jose, Spanish Right Cavalry</div> +</div> +<div class="rule_text">If there are one or more cubes on this card, Don Juan Jose cannot Counterattack, and the Spanish Right Cavalry cannot Screen. Both of these enemy Formations may still Attack (though said Attacks will of course be subject to being Screened).</div> +<div class="number">21B</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name blue">French Cannon</div> +<div class="strength">II</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Any enemy attack</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Bombard</div> +<div class="action_requirement"></div> +<div class="action_target"></div> +</div> +<div class="number">22B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name dkblue">De Castelnau</div> +<div class="strength">4</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Spanish Right Cavalry</div> +<div class="action_effect">1 hit. May only take this action if target is not in Reserve.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Don Juan Jose</div> +</div> +<div class="number">23B</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name dkblue">Lockhart</div> +<div class="strength">6</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Don Juan Jose, Duke of York</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement"></div> +<div class="action_target">Don Juan Jose</div> +<div class="action_effect">1 hit. Additionally, this unit suffers one less hit.</div> +</div> +<div class="number">24B</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name blue">Turenne's Center</div> +<div class="strength">4</div> +<div class="dice_area">(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Duke of York, Don Juan Jose</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="number">25B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Swiss Guard</div> +<div class="strength">2</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Walloons, Duke of York</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement"></div> +<div class="action_target">Walloons</div> +<div class="action_effect">1 hit. Additionally, this unit suffers one less hit.</div> +</div> +<div class="number">26B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">De Crequi</div> +<div class="strength">4</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Conde, Spanish Left Cavalry</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Conde, Spanish Left Cavalry</div> +</div> +<div class="number">27B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name dkblue">French Reserves</div> +<div class="strength">4</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Absorb</div> +<div class="action_requirement">Pair, Voluntary</div> +<div class="action_target">Any friendly formation</div> +<div class="action_effect">When target suffers Hits, this card suffers 1 hit ONLY instead.</div> +</div> +<div class="number">28B</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name pink">Conde</div> +<div class="strength">2</div> +<div class="dice_area">Triples</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Triplet</div> +<div class="action_target">De Crequi</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">29B</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Walloons</div> +<div class="strength">4</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Swiss Guard, Turenne's Center</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Swiss Guard</div> +</div> +<div class="number">30B</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Duke of York</div> +<div class="strength">4</div> +<div class="dice_area">5</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Turenne's Center, Lockhart</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="number">31B</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name red">Don Juan Jose</div> +<div class="strength">6</div> +<div class="dice_area">6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Lockhart, Turenne's Center</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement"></div> +<div class="action_target">Lockhart</div> +<div class="action_effect">1 hit. Additionally, this unit suffers one less hit.</div> +</div> +<div class="number">32B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Spanish Reserve</div> +<div class="strength">4</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Absorb</div> +<div class="action_requirement">Pair, Voluntary</div> +<div class="action_target">Any friendly formation</div> +<div class="action_effect">When target suffers Hits, this card suffers 1 hit ONLY instead.</div> +</div> +<div class="number">33B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Spanish Left Cavalry</div> +<div class="strength">4</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">De Crequi, Swiss Guard</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">De Crequi, Swiss Guard</div> +</div> +<div class="reserve">IN RESERVE (Conde)</div> +<div class="number">34B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Spanish Right Cavalry</div> +<div class="strength">4</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Lockhart, De Castelnau</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Lockhart, De Castelnau</div> +</div> +<div class="reserve">IN RESERVE (Don Juan Jose)</div> +<div class="number">35B</div> +<div class="extra">♦</div> +</div> +</div><h2></h2><div class="list"> +</div><h2>BROOKLYN HEIGHTS</h2><div class="list"> +<div class="formation card"> +<div class="name red">Grant</div> +<div class="strength">8</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Stirling, The Maryland 400</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Stirling</div> +<div class="action_effect">1 hit. Additionally, this unit suffers one less hit.</div> +</div> +<div class="number">36B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Hessians</div> +<div class="strength">5</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Sullivan</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Sullivan</div> +<div class="action_effect">1 hit. Additionally, this unit suffers one less hit.</div> +</div> +<div class="number">37B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name pink">Clinton</div> +<div class="strength">8</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Sullivan</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="rule_text">This card may ONLY attack IF the cards for both Grant and the Hessians have dice on them. Otherwise, this card may not attack but may use an Action to remove dice placed here previously. If Grant or the Hessians Rout, no further dice may be placed on this card.</div> +<div class="number">38B</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name blue">Sullivan</div> +<div class="strength">6</div> +<div class="dice_area">(5)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Hessians</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Attack</div> +<div class="action_requirement">Triplet</div> +<div class="action_target">Clinton</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">39B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Stirling</div> +<div class="strength">6</div> +<div class="dice_area">(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Grant</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="number">40B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Knox's Artillery</div> +<div class="strength">1</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Grant, Hessians</div> +</div> +<div class="number">41B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name dkblue">The Maryland 400</div> +<div class="strength">2</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Grant</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="rule_text">This card ALWAYS suffers one less Hit when Attacked, and NEVER suffers more than one Hit in any given Attack.</div> +<div class="lore_text">This small group, actually numbering about 260, saved the Continental Army with a rearguard action against two thousand. Less than a dozen made it out.</div> +<div class="reserve">IN RESERVE (Stirling)</div> +<div class="number">42B</div> +<div class="extra">â™ </div> +</div> +</div><h2></h2><div class="list"> +</div><h2>EXPANSION 1 - WARS OF THE ROSES</h2><div class="list"> +</div><h2></h2><div class="list"> +</div><h2>ST. ALBANS</h2><div class="list"> +<div class="formation card"> +<div class="name blue">Salisbury</div> +<div class="strength">5</div> +<div class="dice_area">(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Sopwell Lane</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Sopwell Lane</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">43A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Warwick</div> +<div class="strength">5</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Shropshire Lane</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Attack</div> +<div class="action_requirement">Two Pairs</div> +<div class="action_target">Henry VI</div> +<div class="action_effect">1 hit. Warwick Retires upon completing this Attack Action.</div> +</div> +<div class="number">44A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">York</div> +<div class="strength">5</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Shropshire Lane, Sopwell Lane</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Shropshire Lane</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">45A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name dkblue">Archers</div> +<div class="strength">I</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Any enemy attack</div> +</div> +<div class="rule_text">If there is a cube on this card when you make an Attack, disregard the "Defensive Works" special ability on the Henry VI card.</div> +<div class="number">46A</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name red">Shropshire Lane</div> +<div class="strength">6</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">York, Warwick</div> +<div class="action_effect">1 hit per pair.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">York, Warwick</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">47A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Sopwell Lane</div> +<div class="strength">6</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Salisbury, Warwick, York</div> +<div class="action_effect">1 hit per pair. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Salisbury</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">48A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Henry VI</div> +<div class="strength">1</div> +<div class="rule_text">Defensive Works: While this formation remains in play, the Shropshire Land and Sopwell Lane Formations do not suffer more than one hit when Attack. <p>Note that this ability is negated whenever the Yorkists' Archers Special Formation has a cube on its card. <p>When this Formation is Routed, the Defensive Works ability is permanently lost.</div> +<div class="lore_text">I know, I know - you want some historical commentary. Warwick snuck around the formidable enemy front-line defenses to capture the King in their rear. Warwick squeezed from his end, Salisbury and York from theirs, with the other guys stuck in the middle, thus negating the enemy's positional advantage.</div> +<div class="number">49A</div> +<div class="extra">♦</div> +</div> +</div><h2></h2><div class="list"> +</div><h2>BLORE HEATH</h2><div class="list"> +<div class="formation card"> +<div class="name red">Audley's Left</div> +<div class="strength">5</div> +<div class="dice_area">5</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Neville's Right, Neville's Center</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Neville's Right</div> +</div> +<div class="number">50A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Audley's Right</div> +<div class="strength">5</div> +<div class="dice_area">6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Neville's Left, Neville's Center</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Neville's Left</div> +</div> +<div class="number">51A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name pink">Lancaster Archers</div> +<div class="strength">I</div> +<div class="dice_area">Triples</div> +<div class="action_row"> +<div class="action_type">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Any enemy attack</div> +</div> +<div class="rule_text">When both Audley's Left and Audley's Right have Routed, remove this card from play. The removal of this card does not constitute a Rout.</div> +<div class="number">52A</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Dudley's Left</div> +<div class="strength">6</div> +<div class="dice_area">(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Neville's Right, Neville's Center</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="reserve">IN RESERVE (Audley's Left)</div> +<div class="number">53A</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Dudley's Right</div> +<div class="strength">6</div> +<div class="dice_area">(5)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Neville's Left, Neville's Center</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="reserve">IN RESERVE (Audley's Right)</div> +<div class="number">54A</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name red">Lancaster Reserves</div> +<div class="strength">6</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Absorb</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Any friendly Pink formation</div> +<div class="action_effect">When target suffers Hits, this unit suffers them instead.</div> +</div> +<div class="number">55A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name dkblue">Yorkist Archers</div> +<div class="strength">I</div> +<div class="dice_area">Triples</div> +<div class="action_row"> +<div class="action_type">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Any enemy attack</div> +</div> +<div class="number">56A</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name blue">Neville's Left</div> +<div class="strength">4</div> +<div class="dice_area">3/4</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Audley's Right, Dudley's Right</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Audley's Right</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">57A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Neville's Center</div> +<div class="strength">4</div> +<div class="dice_area">5/6<div class="star">★</div></div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Audley's Left, Audley's Right, Dudley's Left, Dudley's Right</div> +<div class="action_effect">1 hit, PLUS 1 hit per die. 1 self per action.</div> +</div> +<div class="rule_text">While this card is in play, you may place dice on TWO Blue cards each turn, in addition to dice placed on any Dark blue card.</div> +<div class="number">58A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Neville's Right</div> +<div class="strength">4</div> +<div class="dice_area">4/5</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Audley's Left, Dudley's Left</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Audley's Left</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">59A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name dkblue">Wagon Laager</div> +<div class="strength">II</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Audley's Left, Audley's Right</div> +</div> +<div class="number">60A</div> +<div class="extra">â™ </div> +</div> +</div><h2></h2><div class="list"> +</div><h2>MORTIMER'S CROSS</h2><div class="list"> +<div class="formation card"> +<div class="name pink">Wiltshire</div> +<div class="strength">4</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Devereaux, York's Center</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Devereaux</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">61A</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name red">Pembroke</div> +<div class="strength">4</div> +<div class="dice_area">5</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">York's Center</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">York's Center</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">62A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Tudor</div> +<div class="strength">4</div> +<div class="dice_area">6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Herbert, York's Center</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Herbert</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">63A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name blue">Herbert</div> +<div class="strength">4</div> +<div class="dice_area">(4)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Tudor, Pembroke</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Tudor</div> +</div> +<div class="number">64A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">York's Center</div> +<div class="strength">6</div> +<div class="dice_area">(5)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Pembroke, Wiltshire, Tudor</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Any enemy attack</div> +</div> +<div class="number">65A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Devereaux</div> +<div class="strength">4</div> +<div class="dice_area">(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Wiltshire, Pembroke</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Wiltshire</div> +</div> +<div class="number">66A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name dkblue">Edward, Duke of York</div> +<div class="strength">1</div> +<div class="dice_area">Doubles</div> +<div class="rule_text">If there are dice on this card, you MAY, but are not required to, remove all dice on this card when taking an Action or a Reaction with another Formation. If you do so, the dice thus removed count as ONE "wild" die, matching the type needed to take the Action or Reaction. <p>For example, if an Action does one hit per die and you have two dice on that card and two dice on this card, you can remove these dice along with the dice on the other card to inflict three hits. If a Reaction requires a Pair and you only have one die on the card in question, you MAY (but again are not required to) remove the dice from this card to use them as one die to complete the Pair.</div> +<div class="number">67A</div> +<div class="extra">â™ </div> +</div> +</div><h2></h2><div class="list"> +</div><h2>TOWTON</h2><div class="list"> +<div class="formation card"> +<div class="name red">Somerset's Left</div> +<div class="strength">5</div> +<div class="dice_area">(1)/(2)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Warwick's Right, Warwick's Left, Wenlock</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Warwick's Right</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">68A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Somerset's Center</div> +<div class="strength">6</div> +<div class="dice_area">(3)/(4)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Warwick's Right, Wenlock, Dinham</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Any enemy formation</div> +</div> +<div class="number">69A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Somerset's Right</div> +<div class="strength">5</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Warwick's Left, Warwick's Right, Dinham</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Warwick's Left</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">70A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name pink">Lancaster Archers</div> +<div class="strength">II</div> +<div class="dice_area">Straight 4</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Any enemy formation</div> +</div> +<div class="number">71A</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Exeter's Left</div> +<div class="strength">6</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Warwick's Right, Wenlock</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Wenlock</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="reserve">IN RESERVE (Somerset's Left)</div> +<div class="number">72A</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Exeter's Center</div> +<div class="strength">8</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Warwick's Right, Wenlock, Dinham</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Any enemy formation</div> +</div> +<div class="reserve">IN RESERVE (Somerset's Center)</div> +<div class="number">73A</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Exeter's Right</div> +<div class="strength">6</div> +<div class="dice_area">(1)/(2)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Warwick's Left, Dinham</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Dinham</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="reserve">IN RESERVE (Somerset's Right)</div> +<div class="number">74A</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name red">Trollope</div> +<div class="strength">4</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type reaction">Absorb</div> +<div class="action_requirement">Pair, Voluntary</div> +<div class="action_target">Any friendly formation</div> +<div class="action_effect">When target suffers Hits, this unit suffers 1 hit ONLY instead.</div> +</div> +<div class="number">75A</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name blue">Warwick's Left</div> +<div class="strength">7</div> +<div class="dice_area">(3)/(4)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Somerset's Right, Somerset's Center, Exeter's Right</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Somerset's Right, Somerset's Center</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">76A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Warwick's Right</div> +<div class="strength">7</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Somerset's Left, Somerset's Center, Exeter's Left</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Somerset's Left, Somerset's Center</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">77A</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name dkblue">York Archers</div> +<div class="strength">II</div> +<div class="dice_area">Straight 3</div> +<div class="action_row"> +<div class="action_type">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Any enemy formation</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Bombard</div> +<div class="action_requirement"></div> +<div class="action_target"></div> +</div> +<div class="number">78A</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name dkblue">Dinham</div> +<div class="strength">6</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Somerset's Right, Exeter's Right, Exeter's Center</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Exeter's Right, Exeter's Center</div> +</div> +<div class="reserve">IN RESERVE (Warwick's Left)</div> +<div class="number">79A</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name dkblue">Wenlock</div> +<div class="strength">6</div> +<div class="dice_area">(3)/(4)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Somerset's Left, Exeter's Left, Exeter's Center</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Somerset's Center, Exeter's Left, Exeter's Center</div> +</div> +<div class="reserve">IN RESERVE (Warwick's Right)</div> +<div class="number">80A</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name dkblue">Edward, Duke of York</div> +<div class="strength">1</div> +<div class="dice_area">Any</div> +<div class="action_row"> +<div class="action_type">Command</div> +<div class="action_requirement">Full House</div> +<div class="action_target">Norfolk out of reserve</div> +</div> +<div class="rule_text">If there are dice on this card, you MAY, but are not required to, remove all dice on this card when taking an Action or a Reaction with another Formation. If you do so, the dice htus removed count as ONE "wild" die, matching the type needed to take the Action or Reaction.</div> +<div class="number">81A</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name blue">Norfolk</div> +<div class="strength">4</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Somerset's Left, Somerset's Center, Exeter's Left, Exeter's Center</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Absorb</div> +<div class="action_requirement">Pair, Voluntary</div> +<div class="action_target">Any friendly formation</div> +<div class="action_effect">When target suffers Hits, this unit suffers 1 hit ONLY instead.</div> +</div> +<div class="reserve">IN RESERVE (Commanded)</div> +<div class="number">82A</div> +<div class="extra">♣</div> +</div> +</div><h2></h2><div class="list"> +</div><h2>EDGECOTE MOOR</h2><div class="list"> +<div class="formation card"> +<div class="name blue">Pembroke</div> +<div class="strength">4</div> +<div class="dice_area">(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Redesdale, Clapham</div> +<div class="action_effect">1 hit, PLUS 1 hit per die. 1 self per action.</div> +</div> +<div class="number">43B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Herbert</div> +<div class="strength">4</div> +<div class="dice_area">(5)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Redesdale, Clapham</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Absorb</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Pembroke</div> +<div class="action_effect">When target suffers Hits, this unit suffers 1 hit ONLY instead.</div> +</div> +<div class="number">44B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Yorkist Reinforcements</div> +<div class="strength">III</div> +<div class="dice_area">Straight 3</div> +<div class="action_row"> +<div class="action_type">Command</div> +<div class="action_requirement">3 cubes</div> +<div class="action_target">Devon, Devon's Archers</div> +</div> +<div class="rule_text">Unlike most Special Formations, this card begins the game with NO cubes on it.</div> +<div class="number">45B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name dkblue">Devon</div> +<div class="strength">6</div> +<div class="dice_area">(3)/(4)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Redesdale, Clapham</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="reserve">IN RESERVE (Commanded)</div> +<div class="number">46B</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name dkblue">Devon's Archers</div> +<div class="strength">II</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Any enemy formation</div> +</div> +<div class="reserve">IN RESERVE (Commanded)</div> +<div class="number">47B</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name red">Redesdale</div> +<div class="strength">6</div> +<div class="dice_area">(5)/(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Pembroke, Herbert, Devon</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Pembroke, Herbert</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">48B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Rebel Archers</div> +<div class="strength">II</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Any enemy formation</div> +</div> +<div class="number">49B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name pink">Rebel Reinforcements</div> +<div class="strength">III</div> +<div class="dice_area">Straight 3</div> +<div class="action_row"> +<div class="action_type">Command</div> +<div class="action_requirement">3 cubes</div> +<div class="action_target">Clapham</div> +</div> +<div class="rule_text">Unlike most Special Formations, this card begins the game with NO cubes on it.</div> +<div class="number">50B</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Clapham</div> +<div class="strength">4</div> +<div class="dice_area">(3)/(4)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Pembroke, Herbert, Devon</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="reserve">IN RESERVE (Commanded)</div> +<div class="number">51B</div> +<div class="extra">♥</div> +</div> +</div><h2></h2><div class="list"> +</div><h2>BARNET</h2><div class="list"> +<div class="formation card"> +<div class="name red">Exeter</div> +<div class="strength">5</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Edward IV</div> +<div class="action_effect">1 hit. 1 self per action.</div> +</div> +<div class="number">52B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Montagu</div> +<div class="strength">6</div> +<div class="dice_area">5</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Hastings, Edward IV</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Edward IV</div> +<div class="action_effect">1 hit. Additionally, this unit only suffers one hit.</div> +</div> +<div class="number">53B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Oxford</div> +<div class="strength">5</div> +<div class="dice_area">6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Hastings, Edward IV</div> +<div class="action_effect">1 hit, PLUS 1 hit per die. 1 self per action.</div> +</div> +<div class="number">54B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Warwick</div> +<div class="strength">4</div> +<div class="dice_area">5/6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Edward IV, Gloucester</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="reserve">IN RESERVE (Exeter or Montagu)</div> +<div class="number">55B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">The Kingmaker</div> +<div class="strength">I</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Voluntary</div> +<div class="action_target"></div> +</div> +<div class="rule_text">While this card is in play, you may place dice on TWO Red cards per Turn. <p>Once this card is used to SCREEN an attack, the card is removed from play and this benefit is lost. This does not constitute Routing, but it does constitute Richard Neville, 16th Earl of Warwick, suffering from a fatal case of being stabbed to death.</div> +<div class="number">56B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name blue">Hastings</div> +<div class="strength">4</div> +<div class="dice_area">5</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Montagu, Warwick</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Montagu</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">57B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Edward IV</div> +<div class="strength">6</div> +<div class="dice_area">5/6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Exeter, Montagu, Warwick</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Montagu</div> +<div class="action_effect">1 hit. Additionally, this unit only suffers one hit.</div> +</div> +<div class="number">58B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Gloucester</div> +<div class="strength">4</div> +<div class="dice_area">5/6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Exeter, Warwick</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="number">59B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Edward's Reserves</div> +<div class="strength">4</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type reaction">Absorb</div> +<div class="action_requirement">Pair, Voluntary</div> +<div class="action_target">Edward IV</div> +<div class="action_effect">When target suffers Hits, this unit suffers 1 hit ONLY instead.</div> +</div> +<div class="rule_text">If this card is still in play when Edward IV Routs, this card also Routs, immediately and simultaneously.</div> +<div class="number">60B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name dkblue">"Treason!"</div> +<div class="strength">1</div> +<div class="dice_area">3/4</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement">Full House</div> +<div class="action_target">Oxford</div> +</div> +<div class="lore_text">In the dense fog, Oxford was mistaken for the enemy and his men fired upon in the confusion. Fearing treason, they fled the battlefield.</div> +<div class="number">61B</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name blue">The King</div> +<div class="strength">I</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target"></div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Voluntary</div> +<div class="action_target">Any enemy formation</div> +</div> +<div class="number">62B</div> +<div class="extra">♣</div> +</div> +</div><h2></h2><div class="list"> +</div><h2>TEWKESBURY</h2><div class="list"> +<div class="formation card"> +<div class="name dkblue">A Plump of Spears</div> +<div class="strength">1</div> +<div class="dice_area">Doubles</div> +<div class="rule_text">If there are dice on this card, Attacks you make against Somerset inflict one extra hit. <p>When Somerset Routs, remove this card from play (this does not constitute a Rout) and place any dice back into your dice pool.</div> +<div class="number">63B</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name blue">Gloucester</div> +<div class="strength">4</div> +<div class="dice_area">(4)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Somerset, Wenlock</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Somerset</div> +</div> +<div class="number">64B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Edward IV</div> +<div class="strength">6</div> +<div class="dice_area">(5)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Somerset, Wenlock</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Wenlock</div> +</div> +<div class="number">65B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Hastings</div> +<div class="strength">4</div> +<div class="dice_area">(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Devon, Wenlock</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Devon</div> +</div> +<div class="number">66B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name dkblue">York's Guns</div> +<div class="strength">II</div> +<div class="dice_area">Straight 3</div> +<div class="action_row"> +<div class="action_type">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Any enemy formation</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Bombard</div> +<div class="action_requirement"></div> +<div class="action_target"></div> +</div> +<div class="number">67B</div> +<div class="extra">â™ </div> +</div> +<div class="formation card"> +<div class="name red">Devon</div> +<div class="strength">6</div> +<div class="dice_area">(6)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Hastings, Edward IV</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Hastings</div> +</div> +<div class="number">68B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Wenlock</div> +<div class="strength">6</div> +<div class="dice_area">(5)</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Edward IV, Gloucester</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Edward IV</div> +</div> +<div class="rule_text">Wenlock cannot Screen after Somerset Routs (the retreating Somerset, enraged that Wenlock had not supported his attack, killed him on the spot with an axe).</div> +<div class="number">69B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Somerset</div> +<div class="strength">6</div> +<div class="dice_area">5/6<div class="star">★</div></div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Edward IV, Gloucester</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="number">70B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name pink">Lancaster's Guns</div> +<div class="strength">II</div> +<div class="dice_area">Straight 4</div> +<div class="action_row"> +<div class="action_type">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Any enemy formation</div> +</div> +<div class="number">71B</div> +<div class="extra">♥</div> +</div> +</div><h2></h2><div class="list"> +</div><h2>STOKE FIELD</h2><div class="list"> +<div class="formation card"> +<div class="name blue">Lincoln's Left</div> +<div class="strength">4</div> +<div class="dice_area">4</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Scales, Oxford, Strange</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Scales</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">72B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">German Mercenaries</div> +<div class="strength">4</div> +<div class="dice_area">Doubles</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Oxford, Strange</div> +<div class="action_effect">1 hit per die.</div> +</div> +<div class="rule_text">This Formation ALWAYS suffers one less Hit when being Attacked, and NEVER suffers more than one Hit in any given Attack.</div> +<div class="number">73B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Irish Kerns</div> +<div class="strength">8</div> +<div class="dice_area">6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Oxford, Strange</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Absorb</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Any friendly formation</div> +<div class="action_effect">When target suffers Hits, this unit suffers them instead.</div> +</div> +<div class="number">74B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name blue">Lincoln's Right</div> +<div class="strength">4</div> +<div class="dice_area">5</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Savage, Oxford, Strange</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Savage</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="number">75B</div> +<div class="extra">♣</div> +</div> +<div class="formation card"> +<div class="name red">Savage</div> +<div class="strength">3</div> +<div class="dice_area">4</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Lincoln's Right</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Lincoln's Right</div> +</div> +<div class="reserve">PURSUIT</div> +<div class="number">76B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Oxford</div> +<div class="strength">8</div> +<div class="dice_area">5/6<div class="star">★</div></div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">German Mercenaries, Lincoln's Left, Lincoln's Right</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Counterattack</div> +<div class="action_requirement">Pair</div> +<div class="action_target">German Mercenaries</div> +<div class="action_effect">1 hit. Additionally, this unit suffers one less hit.</div> +</div> +<div class="number">77B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name red">Scales</div> +<div class="strength">3</div> +<div class="dice_area">3</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Lincoln's Left</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement">Pair</div> +<div class="action_target">Lincoln's Left</div> +</div> +<div class="reserve">PURSUIT</div> +<div class="number">78B</div> +<div class="extra">♦</div> +</div> +<div class="formation card"> +<div class="name pink">Tudor Archers</div> +<div class="strength">II</div> +<div class="dice_area">Straight 3</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">Irish Kerns</div> +<div class="action_effect">1 hit.</div> +</div> +<div class="action_row"> +<div class="action_type reaction">Screen</div> +<div class="action_requirement"></div> +<div class="action_target">Any enemy formation</div> +</div> +<div class="number">79B</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">The Earl of Oxford</div> +<div class="strength">1</div> +<div class="dice_area">Doubles</div> +<div class="rule_text">If there are dice on this card, you MAY, but are not required to, remove all dice on this card when taking an Action or Reaction with another Formation. If you do so, the dice thus removed count as ONE "wild" die, matching the type needed to take the Action or Reaction. <p>If there are dice on this card at the start of your Roll Phase, you may place dice on two Red Formations in addition to any dice placed on a Pink Formation.</div> +<div class="number">80B</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name pink">Henry VII</div> +<div class="strength">7</div> +<div class="dice_area">6</div> +<div class="action_row"> +<div class="action_type">Absorb</div> +<div class="action_requirement">Pair, Voluntary</div> +<div class="action_target">Any friendly formation</div> +<div class="action_effect">When target suffers Hits, this unit suffers them instead.</div> +</div> +<div class="number">81B</div> +<div class="extra">♥</div> +</div> +<div class="formation card"> +<div class="name red">Strange</div> +<div class="strength">6</div> +<div class="dice_area">6</div> +<div class="action_row"> +<div class="action_type">Attack</div> +<div class="action_requirement"></div> +<div class="action_target">German Mercenaries, Lincoln's Right, Lincoln's Left</div> +<div class="action_effect">1 hit per die. 1 self per action.</div> +</div> +<div class="reserve">IN RESERVE (Oxford)</div> +<div class="number">82B</div> +<div class="extra">♦</div> +</div> +</div><h2></h2><div class="list"> +</div><h2>EXPANSION - C3I #32</h2><div class="list"> +</div><h2></h2><div class="list"> +</div><h2>GAINES'S MILL</h2><div class="list"> +</div><h2></h2><div class="list"> +</div><h2>BOUVINES</h2><div class="list"> +</div><h2></h2><div class="list"> +</div><h2>EXPANSION 2 - AGE OF ALEXANDER</h2><div class="list"> +</div><h2></h2><div class="list"> +</div><h2>CHAERONEA</h2><div class="list"> +</div><h2></h2><div class="list"> +</div><h2>THE GRANICUS</h2><div class="list"> +</div><h2></h2><div class="list"> +</div><h2>ISSUS</h2><div class="list"> +</div><h2></h2><div class="list"> +</div><h2>GAUGAMELA</h2><div class="list"> +</div><h2></h2><div class="list"> +</div><h2>THE HYDASPES</h2><div class="list"> +</div><h2></h2><div class="list"> +</div><h2>GABIENE</h2><div class="list"> +</div><h2></h2><div class="list"> +</div><h2>IPSUS</h2><div class="list"> +</div><h2></h2><div class="list"> +</div><h2>EXPANSION 3 - GETTYSBURG</h2><div class="list"> +</div><h2>EXPANSION 4 - THE ENGLISH CIVIL WAR</h2><div class="list"> +</div><h2>EXPANSION 5 - THE GRAND ALLIANCE</h2><div class="list"> +</div><h2>EXPANSION 6 - GREAT BATTLES OF PRINCE CHARLES ALEXANDER OF LORRAINE</h2><div class="list">
\ No newline at end of file diff --git a/info/scenarios.html b/info/scenarios.html new file mode 100644 index 0000000..d800a72 --- /dev/null +++ b/info/scenarios.html @@ -0,0 +1,353 @@ +<!doctype html> +<html lang="en"> +<head> +<title>Table Battle Cards</title> +<link rel="stylesheet" href="/fonts/fonts.css"> +<link rel="stylesheet" href="/table-battles/cards.css"> +<style> +body{background-color:dimgray;color:whitesmoke;max-width:1600px;margin:0 auto;padding:20px;background-image:url(../background.png)} +.list{display:flex;flex-wrap:wrap;gap:20px;} +</style> +</head> +<body> +<div class="list"> +</div><h1>Table Battles</h1><div class="list"> + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">White Mountain</div> + <div class="battle_date">8 November 1620</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">The Bohemian Revolt</div> + <div class="scenario_cards">Cards 7A-10A</div> + <div class="scenario_morale">Morale: 4</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">Imperials & Catholic League</div> + <div class="scenario_cards">Cards 1A-6A</div> + <div class="scenario_morale">Morale: 2</div> + </div> + <div class="rule_text"></div> + <div class="lore_text">A strong defensive position is squandered by the hapless rebel leadership, effectively ending the Bohemian Revolt. Incredibly, the war it ignited would continue on, engulfing most of Europe for three decades. A simple battle to get your feet wet.</div> + <div class="number">1</div> + </div> + + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">Marston Moor</div> + <div class="battle_date">2 July 1644</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">Royalists</div> + <div class="scenario_cards">Cards 11A-17A</div> + <div class="scenario_morale">Morale: 2</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">Parliament & Covenanters</div> + <div class="scenario_cards">Cards 18A-24A</div> + <div class="scenario_morale">Morale: 3</div> + </div> + <div class="rule_text"></div> + <div class="lore_text">A letter from King Charles convinced Prince Rupert of the Rhine that he ought to fight a much larger army. Parliament won a lopsided victory. Only the stubborn stand of the Whitecoats prevented total disaster. This has more moving parts than the White Mountain scenario.</div> + <div class="number">2</div> + </div> + + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">The Plains of Abraham</div> + <div class="battle_date">13 September 1759</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">British</div> + <div class="scenario_cards">Cards 25A-28A</div> + <div class="scenario_morale">Morale: 0</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">French</div> + <div class="scenario_cards">Cards 29A-32A</div> + <div class="scenario_morale">Morale: 0</div> + </div> + <div class="rule_text">To win, the British must Rout all 3 French cards without losing any of their own. If the French Rout a single card, they win (even if they lose their last card when doing so). </div> + <div class="lore_text">The battle that won Canada for the British. This battle introduces Counter-attack Reactions.</div> + <div class="number">3</div> + </div> + + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">Bosworth Field</div> + <div class="battle_date">22 August 1485</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of York</div> + <div class="scenario_cards">Cards 33A-35A</div> + <div class="scenario_morale">Morale: 2</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of Lancaster (Tudor)</div> + <div class="scenario_cards">Cards 36A-38A</div> + <div class="scenario_morale">Morale: 1</div> + </div> + <div class="rule_text"></div> + <div class="lore_text">The battle that ended the Wars of the Roses, and saw the ascendancy of the Tudors. This small and curious scenario gives you a peek at the Absorb reaction and introduces Command actions, turning on the timely arrival of fresh troops.</div> + <div class="number">4</div> + </div> + + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">Malplaquet</div> + <div class="battle_date">11 September 1709</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">French</div> + <div class="scenario_cards">Cards 39A-42A</div> + <div class="scenario_morale">Morale: 2</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">The Grand Alliance</div> + <div class="scenario_cards">Cards 1B-6B</div> + <div class="scenario_morale">Morale: 3</div> + </div> + <div class="rule_text"></div> + <div class="lore_text">The Grand Alliance broke the French line – but paid for it with heavy losses. French commander Villars wrote to the king after the battle: "If it pleases God to give your majesty's enemies another such victory, they are ruined."</div> + <div class="number">5</div> + </div> + + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">Ivry</div> + <div class="battle_date">14 March 1590</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">Royalists</div> + <div class="scenario_cards">Cards 7B-13B</div> + <div class="scenario_morale">Morale: 4</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">The Catholic (Holy) League</div> + <div class="scenario_cards">Cards 14B-20B</div> + <div class="scenario_morale">Morale: 4</div> + </div> + <div class="rule_text"></div> + <div class="lore_text">Henri IV defeated his Catholic opposition, thanks in part to enemy mercenaries who were sympathetic to his cause. It wasn't enough to win over Paris; his rule would not be accepted until he converted. This is a tricky scenario – a dance of screens.</div> + <div class="number">6</div> + </div> + + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">The Dunes</div> + <div class="battle_date">14 June 1658</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">French & English</div> + <div class="scenario_cards">Cards 21B-28B</div> + <div class="scenario_morale">Morale: 2</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">Spanish, French & English</div> + <div class="scenario_cards">Cards 29B-35B</div> + <div class="scenario_morale">Morale: 3</div> + </div> + <div class="rule_text"></div> + <div class="lore_text">Complicated politics saw French and English troops on both sides of this battlefield, widely admired as Turenne's masterpiece. You will need to master all three Reaction types to triumph here.</div> + <div class="number">7</div> + </div> + + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">Brooklyn Heights</div> + <div class="battle_date">27 August 1776</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">Colonials</div> + <div class="scenario_cards">Cards 39B-42B</div> + <div class="scenario_morale">Morale: 1</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">British & Their Vile Hessians</div> + <div class="scenario_cards">Cards 36B-38B</div> + <div class="scenario_morale">Morale: 1</div> + </div> + <div class="rule_text"></div> + <div class="lore_text">A diversionary attack by Grant disguised Clinton's advance on the Patriot flank. Outgunned, outmanned, outnumbered and outplanned, they've gotta make an all-out stand – at least until the main body of the army can escape. For experienced players.</div> + <div class="number">8</div> + </div> + +</div><h1>Wars of the Roses</h1><div class="list"> + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">St. Albans</div> + <div class="battle_date">22 May 1455</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of York</div> + <div class="scenario_cards">Cards 43A-46A</div> + <div class="scenario_morale">Morale: 1</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of Lancaster</div> + <div class="scenario_cards">Cards 47A-49A</div> + <div class="scenario_morale">Morale: 2</div> + </div> + <div class="rule_text"></div> + <div class="lore_text"></div> + <div class="number">9</div> + </div> + + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">Blore Heath</div> + <div class="battle_date">22 September 1459</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of Lancaster</div> + <div class="scenario_cards">Cards 50A-55A</div> + <div class="scenario_morale">Morale: 3</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of York</div> + <div class="scenario_cards">Cards 56A-60A</div> + <div class="scenario_morale">Morale: 1</div> + </div> + <div class="rule_text"></div> + <div class="lore_text"></div> + <div class="number">10</div> + </div> + + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">Mortimer's Cross</div> + <div class="battle_date">3 February 1461</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of Lancaster</div> + <div class="scenario_cards">Cards 61A-63A</div> + <div class="scenario_morale">Morale: 2</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of York</div> + <div class="scenario_cards">Cards 64A-67A</div> + <div class="scenario_morale">Morale: 2</div> + </div> + <div class="rule_text"></div> + <div class="lore_text"></div> + <div class="number">11</div> + </div> + + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">Towton</div> + <div class="battle_date">29 March 1461</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of Lancaster</div> + <div class="scenario_cards">Cards 68A-75A</div> + <div class="scenario_morale">Morale: 4</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of York</div> + <div class="scenario_cards">Cards 76A-82A</div> + <div class="scenario_morale">Morale: 2</div> + </div> + <div class="rule_text">Only 8 Morale cubes (the 6 listed above, and the 2 that start on Special Formations) are used for this scenario. Place the other two back in the box.</div> + <div class="lore_text"></div> + <div class="number">12</div> + </div> + + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">Edgecote Moor</div> + <div class="battle_date">26 July 1469</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of York</div> + <div class="scenario_cards">Cards 43B-47B</div> + <div class="scenario_morale">Morale: 1</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">"Robin" of Redesdale</div> + <div class="scenario_cards">Cards 48B-51B</div> + <div class="scenario_morale">Morale: 1</div> + </div> + <div class="rule_text">The first player to bring in their Formation(s) from Reserve gains a second Morale Cube.</div> + <div class="lore_text"></div> + <div class="number">13</div> + </div> + + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">Barnet</div> + <div class="battle_date">14 April 1471</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of Lancaster</div> + <div class="scenario_cards">Cards 52B-56B</div> + <div class="scenario_morale">Morale: 1</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of York</div> + <div class="scenario_cards">Cards 57B-62B</div> + <div class="scenario_morale">Morale: 2</div> + </div> + <div class="rule_text"></div> + <div class="lore_text"></div> + <div class="number">14</div> + </div> + + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">Tewkesbury</div> + <div class="battle_date">4 May 1471</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of York</div> + <div class="scenario_cards">Cards 63B-67B</div> + <div class="scenario_morale">Morale: 2</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of Lancaster</div> + <div class="scenario_cards">Cards 68B-71B</div> + <div class="scenario_morale">Morale: 3</div> + </div> + <div class="rule_text"></div> + <div class="lore_text"></div> + <div class="number">15</div> + </div> + + + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">Stoke Field</div> + <div class="battle_date">16 June 1487</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">An Imposter, Lambert Simnel</div> + <div class="scenario_cards">Cards 72B-75B</div> + <div class="scenario_morale">Morale: 3</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">House of Tudor</div> + <div class="scenario_cards">Cards 76B-82B</div> + <div class="scenario_morale">Morale: 1</div> + </div> + <div class="rule_text"></div> + <div class="lore_text"></div> + <div class="number">16</div> + </div> + +</div><h1>C3i #32</h1><div class="list"> +</div><h1>Age of Alexander</h1><div class="list">
\ No newline at end of file diff --git a/play.html b/play.html new file mode 100644 index 0000000..9f16e30 --- /dev/null +++ b/play.html @@ -0,0 +1,324 @@ +<!DOCTYPE html> +<!-- vim:set nowrap: --> +<html lang="en"> +<head> +<meta name="viewport" content="width=device-width, height=device-height, user-scalable=no, interactive-widget=resizes-content, viewport-fit=cover"> +<meta name="theme-color" content="#444"> +<meta charset="UTF-8"> +<title>TABLE BATTLES</title> +<link rel="icon" href="favicon.png"> +<link rel="stylesheet" href="/fonts/fonts.css"> +<link rel="stylesheet" href="/common/client.css"> +<link rel="stylesheet" href="cards.css"> +<script defer src="/common/client.js"></script> +<script defer src="data.js"></script> +<script defer src="play.js"></script> +<style> + +#replay_panel { background-color: tan; } +#roles { background-color: bisque; } +#log { background-color: floralwhite; } + +main { + background-color: #666; + background-image: url(background.png); + background-attachment: local; + box-shadow: inset 0 0 8px #0008; +} + +/* +main[data-scenario="1"] { + background-image: url("images/The_Battle_of_White_Mountain_(by_Peter_Snayers).jpg"); + background-size: cover; + background-position: center; +} + +main[data-scenario="5"] { + background-image: url(images/Malplaquet.jpg); + background-size: cover; + background-position: center; +} +*/ + +/* +#player1 div, #player2 div { outline: 1px dotted pink; } +*/ + +.card, .card * { + pointer-events: none; +} + +.card.action, .card *.action { + pointer-events: auto; +} + +.player_pool { + width: 500px; + margin: 24px auto; + background-color: #2225; + padding: 2px; + border-radius: 24px; +} + +.player_name { + color: antiquewhite; + text-shadow: 0 0 3px goldenrod; + font-size: 20px; + text-align: center; + font-style: italic; + font-family: "Source Serif"; + margin: 4px; +} + +.table_reserve, .table_front, .table_pool { + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: 24px; +} + +.table_reserve { + margin: 24px; +} + +.slot_cubes { + height: 87px; + display: flex; + flex-direction: row; + justify-content: center; + align-content: end; + flex-wrap: wrap; + gap: 8px; + margin: 12px; +} + +.slot_sticks { + height: 87px; + display: flex; + flex-direction: column; + justify-content: end; + align-content: center; + flex-wrap: wrap; + gap: 1px; + margin: 12px; +} + +.slot_dice { + display: flex; + height: 36px; + flex-direction: row; + justify-content: center; + align-content: end; + flex-wrap: wrap; + gap: 6px; + margin: 12px 0; +} + +.flip .slot_sticks { + justify-content: start; +} +.flip .slot_cubes { + align-content: start; +} + +.table_reserve .slot_sticks { display: none } +.table_reserve .slot_cubes { display: none } +.table_reserve .slot_dice { display: none } + +.stick { + width: 200px; + height: 6px; + border: 2px solid black; + box-shadow: 0 0 0 1px #0008, 1px 1px 3px 1px #0004; + Xbox-shadow: 1px 1px 3px 0px #0004; +} + +:root { + --red: hsl(360, 77%, 51%); + --pink: hsl(359, 81%, 78%); + --blue: hsl(211, 78%, 52%); + --dkblue: hsl(240, 69%, 57%); + + --hi-red: hsl(360, 77%, 61%); + --hi-pink: hsl(359, 81%, 83%); + --hi-blue: hsl(211, 78%, 62%); + --hi-dkblue: hsl(240, 69%, 67%); + + --lo-red: hsl(360, 77%, 41%); + --lo-pink: hsl(359, 81%, 68%); + --lo-blue: hsl(211, 78%, 42%); + --lo-dkblue: hsl(240, 69%, 47%); +} + +.red .stick { background-color: var(--red); } +.pink .stick { background-color: var(--pink); } +.blue .stick { background-color: var(--blue); } +.dkblue .stick { background-color: var(--dkblue); } + +.red .stick { border-color: var(--hi-red) var(--lo-red) var(--lo-red) var(--hi-red); } +.pink .stick { border-color: var(--hi-pink) var(--lo-pink) var(--lo-pink) var(--hi-pink); } +.blue .stick { border-color: var(--hi-blue) var(--lo-blue) var(--lo-blue) var(--hi-blue); } +.dkblue .stick { border-color: var(--hi-dkblue) var(--lo-dkblue) var(--lo-dkblue) var(--hi-dkblue); } + +.table_pool { + margin: 12px; + height: 36px; + gap: 12px; + align-items: center; +} + +.flip .table_reserve, .flip .table_front { + flex-direction: row-reverse; +} + +.flip .card, .flip .card > div { + transform: rotate(180deg); +} + +.card { + box-shadow: 1px 2px 8px #0008; +} + +.flip .card { + box-shadow: -1px -2px 8px #0008; +} + +.flip .card .strength { + left: 6px; + right: unset; +} + +.table_separator { + text-align: center; + color: orange; + font-size: 48px; +} + +.cube { + width: 24px; + height: 24px; + background-color: #eee; + border-style: solid; + border-width: 2px; + border-color: #fff #ccc #ccc #fff; + box-shadow: 0 0 0 1px #333, 1px 2px 3px 1px #0004; +} + +.die { + width: 32px; + height: 32px; + border-width: 2px; + border-style: solid; + background-size: 600% 100%; + background-repeat: no-repeat; + + background-image: url(die_black_pips.svg); + background-color: #ccc; + border-color: #e5e5e5 #a0a0a0 #a0a0a0 #e5e5e5; + box-shadow: 0 0 0 1px #333, 1px 2px 3px 1px #0004; +} + +.d0 { background-position: -100% 0 } +.d1 { background-position: 0% 0; } +.d2 { background-position: 20% 0; } +.d3 { background-position: 40% 0; } +.d4 { background-position: 60% 0; } +.d5 { background-position: 80% 0; } +.d6 { background-position: 100% 0; } + +.d0::before { + position: absolute; + content: "?"; + width: 32px; height: 32px; + line-height: 32px; + font-family: "Source Sans"; + font-size: 24px; + color: #0006; + text-align: center; +} + +.die.action { box-shadow: 0 0 0 1px #333, 0 0 0px 3px white; } +.card.action { box-shadow: 0 0 0 3px whitesmoke; } +.card.selected { box-shadow: 0 0 0px 3px gold; } + +.action_type.action { + border-color: white; + box-shadow: 0 0 0 2px white; +} + + +.action_type.fizzle { + border-color: black; + box-shadow: 0 0 0 2px black; +} + +/* +.card.blue.selected { box-shadow: 0 0 0px 3px dodgerblue; } +.card.dkblue.selected { box-shadow: 0 0 0px 3px dodgerblue; } +.card.pink.selected { box-shadow: 0 0 0px 3px red; } +.card.red.selected { box-shadow: 0 0 0px 3px red; } +*/ + +</style> +</head> +<body> + +<header> + <div id="toolbar"> + <details> + <summary><img src="/images/cog.svg"></summary> + <menu> + <li><a href="info/rules.html" target="_blank">Rules</a> + <li class="resign separator"> + <li class="resign" onclick="confirm_resign()">Resign + </menu> + </details> + </div> +</header> + +<aside> + <div id="roles"> + <div class="role" id="role_First"> + <div class="role_name"> + <span id="role1">First</span> + <div class="role_morale" id="red_morale"></div> + <div class="role_user"></div> + </div> + </div> + <div class="role" id="role_Second"> + <div class="role_name"> + <span id="role2">Second</span> + <div class="role_morale" id="blue_morale"></div> + <div class="role_user"></div> + </div> + </div> + </div> + <div id="log"></div> +</aside> + +<main data-min-zoom="0.5" data-max-zoom="1.125" map-width="1920" map-height="1080"> + + <div class="flip" id="player1"> + <div class="player_pool"> + <div id="name1" class="player_name"></div> + <div id="pool1" class="table_pool"></div> + <div id="morale1" class="table_pool"></div> + </div> + <div id="reserve1" class="table_reserve"></div> + <div id="front1" class="table_front"></div> + </div> + + <div id="player2"> + <div id="front2" class="table_front"></div> + <div id="reserve2" class="table_reserve"></div> + <div class="player_pool"> + <div id="morale2" class="table_pool"></div> + <div id="pool2" class="table_pool"></div> + <div id="name2" class="player_name"></div> + </div> + </div> +</main> + +<footer id="status"></footer> + +</body> @@ -0,0 +1,288 @@ +"use strict" + +const wing_name = [ "red", "pink", "blue", "dkblue" ] +const reactions = [ "Screen", "Counterattack", "Absorb" ] + +let ui = { + main: document.querySelector("main"), + role_row: [ document.getElementById("role_First"), document.getElementById("role_Second") ], + role_name: [ document.getElementById("role1"), document.getElementById("role2") ], + name: [ document.getElementById("name1"), document.getElementById("name2") ], + front: [ document.getElementById("front1"), document.getElementById("front2") ], + morale: [ document.getElementById("morale1"), document.getElementById("morale2") ], + pool: [ document.getElementById("pool1"), document.getElementById("pool2") ], + reserve: [ document.getElementById("reserve1"), document.getElementById("reserve2") ], + + cards: {}, + slots: {}, + slot_sticks: {}, + slot_cubes: {}, + slot_dice: {}, + + dice: [], + sticks: [], + cubes: [], +} + +let action_register = [] + +function register_action(e, action, id, fizzle=null) { + e.my_id = id + e.my_action = action + e.my_fizzle = fizzle + e.onclick = on_click_action + action_register.push(e) + return e +} + +function on_click_action(evt) { + if (evt.button === 0) { + if (send_action(evt.target.my_action, evt.target.my_id)) + evt.stopPropagation() + if (evt.target.my_fizzle) + if (send_action(evt.target.my_fizzle, evt.target.my_id)) + evt.stopPropagation() + } +} + +function is_action(action, arg) { + if (arg === undefined) + return !!(view.actions && view.actions[action] === 1) + return !!(view.actions && view.actions[action] && view.actions[action].includes(arg)) +} + +function create_div(className, text) { + let e = document.createElement("div") + e.className = className + if (text) + e.innerHTML = text + return e +} + +function append_div(parent, className, text) { + let e = create_div(className, text) + parent.appendChild(e) + return e +} + +function create_formation_slot(id, top) { + let card = data.cards[id] + + let e = create_div("slot " + wing_name[card.wing]) + + if (top) { + ui.slot_dice[id] = append_div(e, "slot_dice") + e.appendChild(ui.cards[id]) + } + + if (card.special) + ui.slot_cubes[id] = append_div(e, "slot_cubes") + else + ui.slot_sticks[id] = append_div(e, "slot_sticks") + + if (!top) { + e.appendChild(ui.cards[id]) + ui.slot_dice[id] = append_div(e, "slot_dice") + } + + return e +} + +function create_formation_card(id) { + let card = data.cards[id] + let e = create_div("card formation " + wing_name[card.wing]) + let e_a1 = null + let e_a2 = null + + register_action(e, "card", id) + + append_div(e, "name " + wing_name[card.wing], card.name) + + if (card.special === 1) + append_div(e, "strength", "I") + else if (card.special === 2) + append_div(e, "strength", "II") + else if (card.special === 3) + append_div(e, "strength", "III") + else + append_div(e, "strength", card.strength) + + if (card.dice) { + if (card.star) + append_div(e, "dice_area", card.dice + '<div class="star">★</div>') + else + append_div(e, "dice_area", card.dice) + } + + function create_action(a, ix) { + let ee = append_div(e, "action_row") + let et + if (reactions.includes(a.type)) + et = append_div(ee, "action_type reaction", a.type) + else + et = append_div(ee, "action_type", a.type) + register_action(et, "a" + ix, id, "f" + ix) + append_div(ee, "action_requirement", a.requirement) + if (Array.isArray(a.target)) + append_div(ee, "action_target", a.target.map(t=>data.cards[t].name).join(", ")) + else + append_div(ee, "action_target", a.target) + if (a.effect) + append_div(ee, "action_effect", a.effect) + return et + } + + if (card.actions.length >= 1) + e_a1 = create_action(card.actions[0], 1) + if (card.actions.length >= 2) + e_a2 = create_action(card.actions[1], 2) + + if (card.rule_text) + append_div(e, "rule_text", card.rule_text) + if (card.lore_text) + append_div(e, "lore_text", card.lore_text) + + if (card.retire) { + let ee = append_div(e, "reserve", "RETIRE") + register_action(ee, "retire", id) + } else if (card.pursuit) { + append_div(e, "reserve", "PURSUIT") + } else if (card.reserve) { + if (card.reserve.length === 0) + append_div(e, "reserve", "IN RESERVE (Commanded)") + else + append_div(e, "reserve", "IN RESERVE (" + card.reserve.map(c => data.cards[c].name).join(" or ") + ")") + } + + append_div(e, "number", card.number) + + return e +} + +function fill_card_row(top, parent, list) { + parent.replaceChildren() + for (let id of list) { + let i, n + + if (!ui.cards[id]) + ui.cards[id] = create_formation_card(id) + if (!ui.slots[id]) + ui.slots[id] = create_formation_slot(id, top) + parent.append(ui.slots[id]) + + ui.cards[id].classList.toggle("selected", view.selected === id) + + n = map_get(view.cubes, id, 0) + for (let i = 0; i < n; ++i) + add_cube(ui.slot_cubes[id]) + + n = map_get(view.sticks, id, 0) + for (let i = 0; i < n; ++i) + add_stick(ui.slot_sticks[id]) + } +} + +function add_cube(parent) { + for (let i = 0; i < 10; ++i) { + if (ui.cubes[i].parentElement === null) { + parent.appendChild(ui.cubes[i]) + return + } + } + throw Error("OUT OF CUBES ERROR") +} + +function add_stick(parent) { + for (let i = 0; i < 80; ++i) { + if (ui.sticks[i].parentElement === null) { + parent.appendChild(ui.sticks[i]) + return + } + } + throw Error("OUT OF CUBES ERROR") +} + +function on_update() { + let p1 = 0, p2 = 1 + if (player === "First") + p1 = 1, p2 = 0 + + ui.main.dataset.scenario = data.scenarios[view.scenario].number + ui.name[p1].textContent = data.scenarios[view.scenario].players[0].name + ui.name[p2].textContent = data.scenarios[view.scenario].players[1].name + + ui.role_name[p1].textContent = data.scenarios[view.scenario].players[0].name + ui.role_name[p2].textContent = data.scenarios[view.scenario].players[1].name + + for (let e of ui.cubes) + e.remove() + for (let e of ui.sticks) + e.remove() + + fill_card_row(p2, ui.reserve[p1], view.reserve[0]) + fill_card_row(p2, ui.front[p1], view.front[0]) + fill_card_row(p1, ui.reserve[p2], view.reserve[1]) + fill_card_row(p1, ui.front[p2], view.front[1]) + + for (let i = 0; i < view.morale[0]; ++i) + add_cube(ui.morale[p1]) + + for (let i = 0; i < view.morale[1]; ++i) + add_cube(ui.morale[p2]) + + function update_die(d, p) { + let v = view.dice[d * 2 + 0] + let c = view.dice[d * 2 + 1] + ui.dice[d].className = "die d" + v + if (c < 0) + ui.pool[p].appendChild(ui.dice[d]) + else + ui.slot_dice[c].appendChild(ui.dice[d]) + } + + for (let i = 0; i < 6; ++i) { + update_die(i, p1) + update_die(i+6, p2) + } + + for (let e of action_register) { + if (e.my_fizzle) { + e.classList.toggle("action", is_action(e.my_action, e.my_id) || is_action(e.my_fizzle, e.my_id)) + e.classList.toggle("fizzle", is_action(e.my_fizzle, e.my_id)) + } else { + e.classList.toggle("action", is_action(e.my_action, e.my_id)) + } + } + + action_button("bombard", "Bombard") + action_button("roll", "Roll") + action_button("pass", "Pass") + action_button("done", "Done") + action_button("end_turn", "End turn") + action_button("undo", "Undo") +} + +for (let i = 0; i < 10; ++i) + ui.cubes[i] = create_div("cube") + +for (let i = 0; i < 80; ++i) + ui.sticks[i] = create_div("stick") + +for (let i = 0; i < 12; ++i) + ui.dice[i] = register_action(create_div("die d0"), "die", i) + +function map_get(map, key, missing) { + let a = 0 + let b = (map.length >> 1) - 1 + while (a <= b) { + let m = (a + b) >> 1 + let x = map[m<<1] + if (key < x) + b = m - 1 + else if (key > x) + a = m + 1 + else + return map[(m<<1)+1] + } + return missing +} diff --git a/rules.js b/rules.js new file mode 100644 index 0000000..c9b5d56 --- /dev/null +++ b/rules.js @@ -0,0 +1,1414 @@ +"use strict" + +const data = require("./data.js") + +const P1 = "First" +const P2 = "Second" + +var states = {} +var game = null +var view = null + +const POOL = -1 + +exports.scenarios = [ + ... data.scenarios.map(s => s.number + " - " + s.name) +] + +exports.roles = [ P1, P2 ] + +exports.action = function (state, player, action, arg) { + game = state + let S = states[game.state] + if (action in S) + S[action](arg, player) + else if (action === "undo" && game.undo && game.undo.length > 0) + pop_undo() + else + throw new Error("Invalid action: " + action) + return game +} + +exports.view = function (state, player) { + game = state + + view = { + log: game.log, + prompt: null, + scenario: game.scenario, + dice: game.dice, + sticks: game.sticks, + cubes: game.cubes, + morale: game.morale, + front: game.front, + reserve: game.reserve, + } + + if (game.state === "game_over") { + view.prompt = game.victory + } else if (player !== game.active) { + let inactive = states[game.state].inactive || game.state + view.prompt = `Waiting for ${player_name()} to ${inactive}.` + } else { + view.actions = {} + states[game.state].prompt() + if (game.undo && game.undo.length > 0) + view.actions.undo = 1 + else + view.actions.undo = 0 + } + + return view +} + +exports.resign = function (state, player) { + game = state + if (game.state !== 'game_over') { + if (player === P1) + goto_game_over(P2, P1 + " resigned.") + if (player === P2) + goto_game_over(P1, P2 + " resigned.") + } + return game +} + +function goto_game_over(result, victory) { + game.state = "game_over" + game.active = "None" + game.result = result + game.victory = victory + log("") + log(game.victory) + return false +} + +states.game_over = { + prompt() { + view.prompt = game.victory + }, +} + +// === SETUP === + +exports.setup = function (seed, scenario, options) { + // TODO: "Random" + + scenario = parseInt(scenario) + scenario = data.scenarios.findIndex(s => s.number === scenario) + if (scenario < 0) + throw Error("cannot find scenario: " + scenario) + + let info = data.scenarios[scenario] + + game = { + seed: seed, + scenario: scenario, + log: [], + undo: [], + + active: P1, + state: "roll", + + // dice value and position + dice: [ + 1, POOL, 1, POOL, 1, POOL, 1, POOL, 1, POOL, 1, POOL, + 2, POOL, 2, POOL, 2, POOL, 2, POOL, 2, POOL, 2, POOL, + ], + + // sticks (map normal formation -> count) + sticks: [], + + // cubes (map special formation -> count) + cubes: [], + + morale: [ info.players[0].morale, info.players[1].morale ], + front: [ [], [], ], + reserve: [ [], [] ], + + // dice value placed on what card + placed: [], + } + + function setup_formation(front, reserve, c) { + let card = data.cards[c] + if (card.reserve) + reserve.push(c) + else + front.push(c) + if (card.special) + add_cubes(c, 1) + else + add_sticks(c, card.strength) + } + + for (let p = 0; p < 2; ++p) { + for (let c of info.players[p].cards) + setup_formation(game.front[p], game.reserve[p], c) + } + + log(".h1 " + info.name) + log(".h2 " + info.date) + log("") + + goto_roll_phase() + + return game +} + +// === XXX === + +function card_number(c) { + return data.cards[c].number +} + +function card_name(c) { + return data.cards[c].name +} + +function player_name() { + let p = player_index() + return data.scenarios[game.scenario].players[p].name +} + +function set_opponent_active() { + if (game.active === P1) + game.active = P2 + else + game.active = P1 +} + +function player_index() { + if (game.active === P1) + return 0 + return 1 +} + +function add_cubes(c, n) { + let limit = data.cards[c].special + let old = map_get(game.cubes, c, 0) + map_set(game.cubes, c, Math.min(limit, old + n)) +} + +function remove_cube(c) { + let old = map_get(game.cubes, c, 0) + map_set(game.cubes, c, Math.min(0, old - 1)) +} + +function add_sticks(c, n) { + let old = map_get(game.sticks, c, 0) + map_set(game.sticks, c, old + n) +} + +function remove_sticks(c, n) { + let old = map_get(game.sticks, c, 0) + map_set(game.sticks, c, Math.max(0, old - n)) +} + +function remove_dice(c) { + for (let i = 0; i < 12; ++i) + if (get_dice_location(i) === c) + set_dice_location(i, POOL) +} + +function pay_for_action(c) { + if (data.cards[c].special) + remove_cube(c) + else + remove_dice(c) +} + +// === ROLL PHASE === + +function get_player_dice_value(p, i) { + return game.dice[p * 12 + i * 2] +} + +function get_player_dice_location(p, i) { + return game.dice[p * 12 + i * 2 + 1] +} + +function set_player_dice_value(p, i, v) { + game.dice[p * 12 + i * 2] = v +} + +function set_player_dice_location(p, i, v) { + game.dice[p * 12 + i * 2 + 1] = v +} + +function get_dice_value(d) { + return game.dice[d * 2] +} + +function get_dice_location(i) { + return game.dice[i * 2 + 1] +} + +function set_dice_location(d, v) { + game.dice[d * 2 + 1] = v +} + +function is_pool_die(i, v) { + let p = player_index() + return get_player_dice_location(p, i) < 0 && get_player_dice_value(p, i) === v +} + +function is_pool_die_range(i, lo, hi) { + let p = player_index() + if (get_player_dice_location(p, i) < 0) { + let v = get_player_dice_value(p, i) + return v >= lo && v <= hi + } + return false +} + +const place_dice_once = { + "(1)": true, + "(2)": true, + "(3)": true, + "(4)": true, + "(5)": true, + "(6)": true, + "(1)/(2)": true, + "(1)-(3)": true, + "(1)-(4)": true, + "(1)-(5)": true, + "(2)/(3)": true, + "(2)-(4)": true, + "(2)-(5)": true, + "(2)-(6)": true, + "(3)/(4)": true, + "(3)-(5)": true, + "(3)-(6)": true, + "(4)/(5)": true, + "(4)-(6)": true, + "(5)/(6)": true, +} + +const place_dice_check = { + "Straight 3": check_straight_3, + "Straight 4": check_straight_4, + "Doubles": check_doubles, + "Triples": check_triples, + "1": (c) => check_single(c, 1), + "2": (c) => check_single(c, 2), + "3": (c) => check_single(c, 3), + "4": (c) => check_single(c, 4), + "5": (c) => check_single(c, 5), + "6": (c) => check_single(c, 6), + "(1)": (c) => check_single(c, 1), + "(2)": (c) => check_single(c, 2), + "(3)": (c) => check_single(c, 3), + "(4)": (c) => check_single(c, 4), + "(5)": (c) => check_single(c, 5), + "(6)": (c) => check_single(c, 6), + "Any": (c) => check_range(c, 1, 6), + "1/2": (c) => check_range(c, 1, 2), + "1-3": (c) => check_range(c, 1, 3), + "1-4": (c) => check_range(c, 1, 4), + "1-5": (c) => check_range(c, 1, 5), + "2/3": (c) => check_range(c, 2, 2), + "2-4": (c) => check_range(c, 2, 4), + "2-5": (c) => check_range(c, 2, 5), + "2-6": (c) => check_range(c, 2, 6), + "3/4": (c) => check_range(c, 3, 4), + "3-5": (c) => check_range(c, 3, 5), + "3-6": (c) => check_range(c, 3, 6), + "4/5": (c) => check_range(c, 4, 5), + "4-6": (c) => check_range(c, 4, 6), + "5/6": (c) => check_range(c, 5, 6), + "(1)/(2)": (c) => check_range(c, 1, 2), + "(1)-(3)": (c) => check_range(c, 1, 3), + "(1)-(4)": (c) => check_range(c, 1, 4), + "(1)-(5)": (c) => check_range(c, 1, 5), + "(2)/(3)": (c) => check_range(c, 2, 2), + "(2)-(4)": (c) => check_range(c, 2, 4), + "(2)-(5)": (c) => check_range(c, 2, 5), + "(2)-(6)": (c) => check_range(c, 2, 6), + "(3)/(4)": (c) => check_range(c, 3, 4), + "(3)-(5)": (c) => check_range(c, 3, 5), + "(3)-(6)": (c) => check_range(c, 3, 6), + "(4)/(5)": (c) => check_range(c, 4, 5), + "(4)-(6)": (c) => check_range(c, 4, 6), + "(5)/(6)": (c) => check_range(c, 5, 6), +} + +const place_dice_gen = { + "Straight 3": gen_straight_3, + "Straight 4": gen_straight_4, + "Doubles": gen_doubles, + "Triples": gen_triples, + "1": (c) => gen_single(c, 1), + "2": (c) => gen_single(c, 2), + "3": (c) => gen_single(c, 3), + "4": (c) => gen_single(c, 4), + "5": (c) => gen_single(c, 5), + "6": (c) => gen_single(c, 6), + "(1)": (c) => gen_single(c, 1), + "(2)": (c) => gen_single(c, 2), + "(3)": (c) => gen_single(c, 3), + "(4)": (c) => gen_single(c, 4), + "(5)": (c) => gen_single(c, 5), + "(6)": (c) => gen_single(c, 6), + "Any": (c) => gen_range(c, 1, 6), + "1/2": (c) => gen_range(c, 1, 2), + "1-3": (c) => gen_range(c, 1, 3), + "1-4": (c) => gen_range(c, 1, 4), + "1-5": (c) => gen_range(c, 1, 5), + "2/3": (c) => gen_range(c, 2, 2), + "2-4": (c) => gen_range(c, 2, 4), + "2-5": (c) => gen_range(c, 2, 5), + "2-6": (c) => gen_range(c, 2, 6), + "3/4": (c) => gen_range(c, 3, 4), + "3-5": (c) => gen_range(c, 3, 5), + "3-6": (c) => gen_range(c, 3, 6), + "4/5": (c) => gen_range(c, 4, 5), + "4-6": (c) => gen_range(c, 4, 6), + "5/6": (c) => gen_range(c, 5, 6), + "(1)/(2)": (c) => gen_range(c, 1, 2), + "(1)-(3)": (c) => gen_range(c, 1, 3), + "(1)-(4)": (c) => gen_range(c, 1, 4), + "(1)-(5)": (c) => gen_range(c, 1, 5), + "(2)/(3)": (c) => gen_range(c, 2, 2), + "(2)-(4)": (c) => gen_range(c, 2, 4), + "(2)-(5)": (c) => gen_range(c, 2, 5), + "(2)-(6)": (c) => gen_range(c, 2, 6), + "(3)/(4)": (c) => gen_range(c, 3, 4), + "(3)-(5)": (c) => gen_range(c, 3, 5), + "(3)-(6)": (c) => gen_range(c, 3, 6), + "(4)/(5)": (c) => gen_range(c, 4, 5), + "(4)-(6)": (c) => gen_range(c, 4, 6), + "(5)/(6)": (c) => gen_range(c, 5, 6), +} + +const place_dice_take = { + "Straight 3": take_straight_3, + "Straight 4": take_straight_4, + "Doubles": take_doubles, + "Triples": take_triples, + "1": take_single, + "2": take_single, + "3": take_single, + "4": take_single, + "5": take_single, + "6": take_single, + "(1)": take_single, + "(2)": take_single, + "(3)": take_single, + "(4)": take_single, + "(5)": take_single, + "(6)": take_single, + "Any": (c, d) => take_single(c, d), + "1/2": (c, d) => take_single(c, d), + "1-3": (c, d) => take_single(c, d), + "1-4": (c, d) => take_single(c, d), + "1-5": (c, d) => take_single(c, d), + "2/3": (c, d) => take_single(c, d), + "2-4": (c, d) => take_single(c, d), + "2-5": (c, d) => take_single(c, d), + "2-6": (c, d) => take_single(c, d), + "3/4": (c, d) => take_single(c, d), + "3-5": (c, d) => take_single(c, d), + "3-6": (c, d) => take_single(c, d), + "4/5": (c, d) => take_single(c, d), + "4-6": (c, d) => take_single(c, d), + "5/6": (c, d) => take_single(c, d), + "(1)/(2)": (c, d) => take_single(c, d), + "(1)-(3)": (c, d) => take_single(c, d), + "(1)-(4)": (c, d) => take_single(c, d), + "(1)-(5)": (c, d) => take_single(c, d), + "(2)/(3)": (c, d) => take_single(c, d), + "(2)-(4)": (c, d) => take_single(c, d), + "(2)-(5)": (c, d) => take_single(c, d), + "(2)-(6)": (c, d) => take_single(c, d), + "(3)/(4)": (c, d) => take_single(c, d), + "(3)-(5)": (c, d) => take_single(c, d), + "(3)-(6)": (c, d) => take_single(c, d), + "(4)/(5)": (c, d) => take_single(c, d), + "(4)-(6)": (c, d) => take_single(c, d), + "(5)/(6)": (c, d) => take_single(c, d), +} + +function can_place_dice(c) { + + let pattern = data.cards[c].dice + if (!pattern) + throw Error("bad card definition: " + data.cards[c].number) + + let pred = place_dice_check[pattern] + if (!pred) + throw Error("bad pattern definition: " + pattern) + +console.log("can_place_dice", data.cards[c].number, pattern, pred(c)) + + let wing = data.cards[c].wing +console.log(" wing " + wing, game.placed) + for (let i = 0; i < game.placed.length; i += 2) { + let x = game.placed[i] + if (x !== c) { + // TODO: place_2_on_WING ability + let i_wing = data.cards[x].wing + console.log(" placed on", x, i_wing) + if (i_wing === wing) + return false + } + } + + if (place_dice_once[pattern]) { + if (map_has(game.placed, c)) + return false + } + + return pred(c) +} + +function can_place_value(c, v) { + let old_v = map_get(game.placed, c, 0) + console.log("can_place_value", c, v, old_v) + if (c === undefined) throw new Error("boo") + return old_v === 0 || old_v === v +} + +function pool_has_single(v) { + for (let i = 0; i < 6; ++i) + if (is_pool_die(i, v)) + return true + return false +} + +function check_single_count(c, v, x) { + if (!can_place_value(c, v)) + return false + let n = 0 + for (let i = 0; i < 6; ++i) + if (is_pool_die(i, v) && ++n >= x) + return true + return false +} + +function check_single(c, v) { + if (!can_place_value(c, v)) + return false + for (let i = 0; i < 6; ++i) + if (is_pool_die(i, v)) + return true + return false +} + +function check_range(c, lo, hi) { + let old_v = map_get(game.placed, c, 0) + if (old_v > 0) + return pool_has_single(old_v) + for (let i = 0; i < 6; ++i) + if (is_pool_die_range(i, lo, hi)) + return true + return false +} + +function check_all_3(c, x, y, z) { + if (!can_place_value(c, x)) + return false + return pool_has_single(x) && pool_has_single(y) && pool_has_single(z) +} + +function check_all_4(c, x, y, z, w) { + if (!can_place_value(c, x)) + return false + return pool_has_single(c, x) && pool_has_single(y) && pool_has_single(z) && pool_has_single(w) +} + +function check_straight_3(c) { + return ( + check_all_3(c, 1, 2, 3) || + check_all_3(c, 2, 3, 4) || + check_all_3(c, 3, 4, 5) || + check_all_3(c, 4, 5, 6) + ) +} + +function check_straight_4(c) { + return ( + check_all_4(c, 1, 2, 3, 4) || + check_all_4(c, 2, 3, 4, 5) || + check_all_4(c, 3, 4, 5, 6) + ) +} + +function check_doubles() { + return ( + check_single_count(c, 1, 2) || + check_single_count(c, 2, 2) || + check_single_count(c, 3, 2) || + check_single_count(c, 4, 2) || + check_single_count(c, 5, 2) || + check_single_count(c, 6, 2) + ) +} + +function check_triples() { + return ( + check_single_count(c, 1, 3) || + check_single_count(c, 2, 3) || + check_single_count(c, 3, 3) || + check_single_count(c, 4, 3) || + check_single_count(c, 5, 3) || + check_single_count(c, 6, 3) + ) +} + +function gen_pool_die(v) { + let p = player_index() + console.log("gen_pool_die", v) + for (let i = 0; i < 6; ++i) + if (get_player_dice_location(p, i) < 0 && get_player_dice_value(p, i) === v) + gen_action_die(p * 6 + i) +} + + +function gen_single(c, v) { + if (!can_place_value(c, v)) + return false + gen_pool_die(v) +} + +function gen_range(c, lo, hi) { + for (let v = lo; v <= hi; ++v) + gen_single(c, v) +} + +function gen_straight_3(c) { + if (check_all_3(c, 1, 2, 3)) + gen_pool_die(1) + if (check_all_3(c, 2, 3, 4)) + gen_pool_die(2) + if (check_all_3(c, 3, 4, 5)) + gen_pool_die(3) + if (check_all_3(c, 4, 5, 6)) + gen_pool_die(4) +} + +function gen_straight_4(c) { + if (check_all_4(c, 1, 2, 3, 4)) + gen_pool_die(1) + if (check_all_4(c, 2, 3, 4, 5)) + gen_pool_die(2) + if (check_all_4(c, 3, 4, 5, 6)) + gen_pool_die(3) +} + +function gen_doubles(c) { + for (let v = 1; v <= 6; ++v) + if (check_single_count(c, v, 2)) + gen_pool_die(v) +} + +function gen_triples() { + for (let v = 1; v <= 6; ++v) + if (check_single_count(c, v, 3)) + gen_pool_die(v) +} + +function find_and_take_single(c, v) { + let p = player_index() + for (let i = 0; i < 6; ++i) { + if (get_player_dice_location(p, i) < 0 && get_player_dice_value(p, i) === v) { + set_player_dice_location(p, i, c) + return + } + } + throw new Error("cannot find die of value " + v) +} + +function take_single(c, d) { + set_dice_location(d, c) + map_set(game.placed, c, get_dice_value(d)) +} + +function take_doubles(c, d) { + let v = get_dice_value(d) + take_single(c, d) + find_and_take_single(c, v) +} + +function take_triples(c, d) { + let v = get_dice_value(d) + take_single(c, d) + find_and_take_single(c, v) + find_and_take_single(c, v) +} + +function take_straight_3(c, d) { + let v = get_dice_value(d) + take_single(c, d) + find_and_take_single(c, v+1) + find_and_take_single(c, v+2) +} + +function take_straight_4(c, d) { + let v = get_dice_value(d) + take_single(c, d) + find_and_take_single(c, v+1) + find_and_take_single(c, v+2) + find_and_take_single(c, v+3) +} + +function goto_roll_phase() { + game.selected = -1 + game.target = -1 + game.action = 0 + + let p = player_index() + for (let i = 0; i < 6; ++i) + if (get_player_dice_location(p, i) < 0) + set_player_dice_value(p, i, 0) + game.state = "roll" +} + +states.roll = { + prompt() { + view.prompt = "Roll the dice in your pool." + view.actions.roll = 1 + }, + roll() { + clear_undo() + + let p = player_index() + for (let i = 0; i < 6; ++i) + if (get_player_dice_location(p, i) < 0) + set_player_dice_value(p, i, random(6) + 1) + + game.state = "place" + }, +} + +function gen_place_dice_select_card() { + let p = player_index() + for (let c of game.front[p]) { + if (c === game.selected) + continue + if (can_place_dice(c)) + gen_action_card(c) + } +} + +states.place = { + prompt() { + view.prompt = "Place dice on your formations." + gen_place_dice_select_card() + view.actions.end_turn = 1 + }, + card(c) { + push_undo() + game.selected = c + game.state = "place_on_card" + }, + end_turn() { + end_roll_phase() + }, +} + +states.place_on_card = { + prompt() { + let card = data.cards[game.selected] + view.selected = game.selected + view.prompt = "Place dice on " + card.name + "." + + gen_place_dice_select_card() + + place_dice_gen[card.dice](game.selected) + + view.actions.end_turn = 1 + }, + card(c) { + if (c === game.selected) { + game.selected = -1 + game.state = "place" + } else { + game.selected = c + game.state = "place_on_card" + } + }, + die(d) { + push_undo() + place_dice_take[data.cards[game.selected].dice](game.selected, d) + if (!can_place_dice(game.selected)) + game.state = "place" + }, + end_turn() { + end_roll_phase() + }, +} + +function end_roll_phase() { + clear_undo() + map_clear(game.placed) + + // Remove placed dice to add cube on special cards. + for (let c of game.front[player_index()]) { + let s = data.cards[c].special + if (s && has_any_dice_on_card(c)) { + map_set(game.cubes, c, Math.min(s, map_get(game.cubes, c, 0) + 1)) + remove_dice(c) + } + } + + set_opponent_active() + + goto_action_phase() +} + +// === ACTION PHASE === + +function has_any_dice_on_card(c) { + for (let i = 0; i < 12; ++i) + if (get_dice_location(i) === c) + return true + return false +} + +function has_any_cubes_on_card(c) { + return map_get(game.cubes, c, 0) >= 1 +} + +function count_dice_on_card(c, v) { + let n = 0 + for (let i = 0; i < 12; ++i) + if (get_dice_location(i) === c) + ++n + return n +} + +function count_dice_on_card_with_value(c, v) { + let n = 0 + for (let i = 0; i < 12; ++i) + if (get_dice_location(i) === c && get_dice_value(i) === v) + ++n + return n +} + +function require_pair(c) { + for (let v = 1; v <= 6; ++v) + if (count_dice_on_card_with_value(c, v) >= 2) + return true + return false +} + +function require_triplet(c) { + for (let v = 1; v <= 6; ++v) + if (count_dice_on_card_with_value(c, v) >= 3) + return true + return false +} + +function require_full_house(c) { + let n3 = 0 + let n2 = 0 + for (let v = 1; v <= 6; ++v) { + let n = count_dice_on_card_with_value(c, v) + if (n >= 3) + ++n3 + else if (n >= 2) + ++n2 + } + return (n3 >= 2) || (n3 >= 1 && n2 >= 1) +} + +function require_two_pairs(c) { + let n = 0 + for (let v = 1; v <= 6; ++v) + if (count_dice_on_card_with_value(c, v) >= 2) + ++n + return n >= 2 +} + +function check_cube_requirement(c, req) { + switch (req) { + case "3 cubes": + return map_get(game.cubes, c, 0) >= 3 + case undefined: + return map_get(game.cubes, c, 0) >= 1 + default: + throw new Error("invalid action requirement: " + req) + } +} + +function check_dice_requirement(c, req) { + switch (req) { + case "Full House": + return require_full_house(c) + case "Pair": + case "Pair, Voluntary": + return require_pair(c) + case "Triplet": + return require_triplet(c) + case "Two Pairs": + return require_two_pairs(c) + case "Voluntary": + case undefined: + return has_any_dice_on_card(c) + default: + throw new Error("invalid action requirement: " + req) + } +} + +function is_action(c, a) { + return (a.type === "Bombard" || a.type === "Attack" || a.type === "Command") +} + +function is_reaction(c, a) { + return (a.type === "Screen" || a.type === "Counterattack" || a.type === "Absorb") +} + +function can_take_action(c, a) { + if (a.type === "Bombard" || a.type === "Attack" || a.type === "Command") { + if (data.cards[c].special) + return check_cube_requirement(c, a.requirement) + else + return check_dice_requirement(c, a.requirement) + } + return false +} + +function goto_action_phase() { + game.state = "action" +} + +states.action = { + prompt() { + view.prompt = "Take an action." + view.actions.pass = 1 + + let p = player_index() + for (let c of game.front[p]) { + let has_dice = has_any_dice_on_card(c) + let has_cube = has_any_cubes_on_card(c) + if (has_dice || has_cube) { + if (data.cards[c].actions.length >= 1) { + if (is_action(c, data.cards[c].actions[0])) { + if (can_take_action(c, data.cards[c].actions[0])) + gen_action_action1(c) + else if (has_dice) + gen_action_fizzle1(c) + } + } + if (data.cards[c].actions.length >= 2) { + if (is_action(c, data.cards[c].actions[1])) { + if (can_take_action(c, data.cards[c].actions[1])) + gen_action_action2(c) + else if (has_dice) + gen_action_fizzle2(c) + } + } + if (data.cards[c].retire) + gen_action_retire(c) + } + } + }, + a1(c) { + push_undo() + goto_take_action(c, 0) + }, + a2(c) { + push_undo() + goto_take_action(c, 1) + }, + f1(c) { + push_undo() + goto_fizzle(c) + }, + f2(c) { + push_undo() + goto_fizzle(c) + }, + pass() { + push_undo() + goto_roll_phase() + }, +} + +function goto_fizzle(c) { + log("Fizzled " + card_number(c)) + pay_for_action(c) + end_action_phase() +} + +function goto_take_action(c, ix) { + let a = data.cards[c].actions[ix] + game.selected = c + game.action = ix + switch (a.type) { + case "Attack": + game.state = "attack" + break + case "Bombard": + game.state = "bombard" + break + case "Command": + game.state = "command" + break + } +} + +function current_action() { + return data.cards[game.selected].actions[game.action] +} + +function find_target_of_attack() { + let a = current_action() + for (let c of a.target_list) { + if (game.front[0].includes(c)) + return c + if (game.front[1].includes(c)) + return c + } +} + +function find_target_of_command(c) { + let a = current_action() + for (let c of a.target_list) { + if (game.reserve[0].includes(c)) + return c + if (game.reserve[1].includes(c)) + return c + } +} + +states.bombard = { + prompt() { + view.prompt = "Bombard." + view.actions.bombard = 1 + }, + bombard() { + let opp = 1 - player_index() + game.morale[opp] -- + pay_for_action(game.selected) + end_action_phase() + }, +} + +states.attack = { + prompt() { + let t = find_target_of_attack() + view.prompt = "Attack " + card_name(t) + "." + view.selected = game.selected + gen_action_card(t) + }, + card(c) { + game.target = c + apply_attack(current_action()) + pay_for_action(game.selected) + end_action_phase() + }, +} + +states.command = { + prompt() { + let t = find_target_of_command() + view.prompt = "Bring " + card_name(t) + " out of reserve." + view.selected = game.selected + gen_action_card(t) + }, + card(c) { + let p = player_index() + array_remove_item(game.reserve[p], c) + // TODO: insert where? + game.front[p].push(p) + pay_for_action(game.selected) + end_action_phase() + }, +} + +function end_action_phase() { + goto_roll_phase() +} + +// === ATTACK EFFECTS === + +function apply_self() { + remove_sticks(game.selected, 1) +} + +function apply_hit() { + remove_sticks(game.target, 1) +} + +function apply_hit_per_die() { + console.log("HIT PER DIE", game.selected, count_dice_on_card(game.selected)) + remove_sticks(game.target, count_dice_on_card(game.selected)) +} + +function apply_hit_per_pair() { + remove_sticks(game.target, count_dice_on_card(game.selected) >> 1) +} + +function apply_attack(a) { +console.log("ATTACK", a.effect) + switch (a.effect) { + default: + throw new Error("invalid attack effect: " + text) + break + + case "1 hit.": + apply_hit() + break + + case "1 hit. 1 self per action.": + apply_hit() + apply_self() + break + + case "1 hit per die.": + apply_hit_per_die() + break + + case "1 hit per die. 1 self per action.": + apply_hit_per_die() + apply_self() + break + + case "1 hit per pair.": + apply_hit_per_pair() + break + + case "1 hit per pair. 1 self per action.": + apply_hit_per_pair() + apply_self() + break + + case "1 hit, PLUS 1 hit per die. 1 self per action.": + apply_hit() + apply_hit_per_die() + apply_self() + break + } +} + + + +// === COMMON LIBRARY === + +function gen_action(action, argument) { + if (!(action in view.actions)) + view.actions[action] = [ argument ] + else + view.actions[action].push(argument) +} + +function gen_action_card(c) { + gen_action("card", c) +} + +function gen_action_die(d) { + gen_action("die", d) +} + +function gen_action_action1(c) { + gen_action("a1", c) +} + +function gen_action_action2(c) { + gen_action("a2", c) +} + +function gen_action_fizzle1(c) { + gen_action("f1", c) +} + +function gen_action_fizzle2(c) { + gen_action("f2", c) +} + +function gen_action_retire(c) { + gen_action("retire", c) +} + +function log(msg) { + game.log.push(msg) +} + +function clear_undo() { + if (game.undo) { + game.undo.length = 0 + } +} + +function push_undo() { + if (game.undo) { + let copy = {} + for (let k in game) { + let v = game[k] + if (k === "undo") + continue + else if (k === "log") + v = v.length + else if (typeof v === "object" && v !== null) + v = object_copy(v) + copy[k] = v + } + game.undo.push(copy) + } +} + +function pop_undo() { + if (game.undo) { + let save_log = game.log + let save_undo = game.undo + game = save_undo.pop() + save_log.length = game.log + game.log = save_log + game.undo = save_undo + } +} + +function random(range) { + // Largest MLCG that will fit its state in a double. + // Uses BigInt for arithmetic, so is an order of magnitude slower. + // https://www.ams.org/journals/mcom/1999-68-225/S0025-5718-99-00996-5/S0025-5718-99-00996-5.pdf + // m = 2**53 - 111 + return (game.seed = Number(BigInt(game.seed) * 5667072534355537n % 9007199254740881n)) % range +} + +function shuffle(list) { + // Fisher-Yates shuffle + for (let i = list.length - 1; i > 0; --i) { + let j = random(i + 1) + let tmp = list[j] + list[j] = list[i] + list[i] = tmp + } +} + +// Fast deep copy for objects without cycles +function object_copy(original) { + if (Array.isArray(original)) { + let n = original.length + let copy = new Array(n) + for (let i = 0; i < n; ++i) { + let v = original[i] + if (typeof v === "object" && v !== null) + copy[i] = object_copy(v) + else + copy[i] = v + } + return copy + } else { + let copy = {} + for (let i in original) { + let v = original[i] + if (typeof v === "object" && v !== null) + copy[i] = object_copy(v) + else + copy[i] = v + } + return copy + } +} + +// Array remove and insert (faster than splice) + +function array_remove(array, index) { + let n = array.length + for (let i = index + 1; i < n; ++i) + array[i - 1] = array[i] + array.length = n - 1 +} + +function array_remove_item(array, item) { + let n = array.length + for (let i = 0; i < n; ++i) + if (array[i] === item) + return array_remove(array, i) +} + +function array_insert(array, index, item) { + for (let i = array.length; i > index; --i) + array[i] = array[i - 1] + array[index] = item +} + +function array_remove_pair(array, index) { + let n = array.length + for (let i = index + 2; i < n; ++i) + array[i - 2] = array[i] + array.length = n - 2 +} + +function array_insert_pair(array, index, key, value) { + for (let i = array.length; i > index; i -= 2) { + array[i] = array[i-2] + array[i+1] = array[i-1] + } + array[index] = key + array[index+1] = value +} + +// Set as plain sorted array + +function set_clear(set) { + set.length = 0 +} + +function set_has(set, item) { + let a = 0 + let b = set.length - 1 + while (a <= b) { + let m = (a + b) >> 1 + let x = set[m] + if (item < x) + b = m - 1 + else if (item > x) + a = m + 1 + else + return true + } + return false +} + +function set_add(set, item) { + let a = 0 + let b = set.length - 1 + while (a <= b) { + let m = (a + b) >> 1 + let x = set[m] + if (item < x) + b = m - 1 + else if (item > x) + a = m + 1 + else + return + } + array_insert(set, a, item) +} + +function set_delete(set, item) { + let a = 0 + let b = set.length - 1 + while (a <= b) { + let m = (a + b) >> 1 + let x = set[m] + if (item < x) + b = m - 1 + else if (item > x) + a = m + 1 + else { + array_remove(set, m) + return + } + } +} + +function set_toggle(set, item) { + let a = 0 + let b = set.length - 1 + while (a <= b) { + let m = (a + b) >> 1 + let x = set[m] + if (item < x) + b = m - 1 + else if (item > x) + a = m + 1 + else { + array_remove(set, m) + return + } + } + array_insert(set, a, item) +} + +// Map as plain sorted array of key/value pairs + +function map_clear(map) { + map.length = 0 +} + +function map_has(map, key) { + let a = 0 + let b = (map.length >> 1) - 1 + while (a <= b) { + let m = (a + b) >> 1 + let x = map[m<<1] + if (key < x) + b = m - 1 + else if (key > x) + a = m + 1 + else + return true + } + return false +} + +function map_get(map, key, missing) { + let a = 0 + let b = (map.length >> 1) - 1 + while (a <= b) { + let m = (a + b) >> 1 + let x = map[m<<1] + if (key < x) + b = m - 1 + else if (key > x) + a = m + 1 + else + return map[(m<<1)+1] + } + return missing +} + +function map_set(map, key, value) { + let a = 0 + let b = (map.length >> 1) - 1 + while (a <= b) { + let m = (a + b) >> 1 + let x = map[m<<1] + if (key < x) + b = m - 1 + else if (key > x) + a = m + 1 + else { + map[(m<<1)+1] = value + return + } + } + array_insert_pair(map, a<<1, key, value) +} + +function map_delete(map, item) { + let a = 0 + let b = (map.length >> 1) - 1 + while (a <= b) { + let m = (a + b) >> 1 + let x = map[m<<1] + if (item < x) + b = m - 1 + else if (item > x) + a = m + 1 + else { + array_remove_pair(map, m<<1) + return + } + } +} + +function object_diff(a, b) { + if (a === b) + return false + if (a !== null && b !== null && typeof a === "object" && typeof b === "object") { + if (Array.isArray(a)) { + if (!Array.isArray(b)) + return true + let a_length = a.length + if (b.length !== a_length) + return true + for (let i = 0; i < a_length; ++i) + if (object_diff(a[i], b[i])) + return true + return false + } + for (let key in a) + if (object_diff(a[key], b[key])) + return true + for (let key in b) + if (!(key in a)) + return true + return false + } + return true +} diff --git a/tools/cards.csv b/tools/cards.csv index d2107c5..985c768 100644 --- a/tools/cards.csv +++ b/tools/cards.csv @@ -1,333 +1,333 @@ -scenario,number,wing,name,strength,dice,reserve,action1_type,action1_req,action1_target,action1_effect,action2_type,action2_req,action2_target,action2_effect,flavor
-BASE GAME,,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-WHITE MOUNTAIN,,,,,,,,,,,,,,,
-1,1A,red,The Twelve Apostles,III,Straight 4,,Bombard,,,,Screen,,Any enemy attack,,These were a dozen heavy guns fielded by the Catholic League.
-1,2A,red,Catholic League Cavalry,4,3/4,,Attack,Triplet,Schlick,1 hit.,Screen,Pair,Hohenlohe,,
-1,3A,red,Catholic League Foot,6,(6),,Attack,,"Hohenlohe, Schlick",1 hit per die. 1 self per action.,,,,,
-1,4A,pink,Imperial Cavalry,4,1/2,PURSUIT,Attack,Triplet,Protestant Cavalry,1 hit.,Screen,Pair,Thurn,,
-1,5A,pink,Liechtenstein,6,(5),RETIRE,Attack,,"Thurn, Hohenlohe",1 hit per die. 1 self per action.,,,,,
-1,6A,pink,Tiefenbach,4*,(4),Liechtenstein,Attack,,"Thurn, Hohenlohe",1 hit per die. 1 self per action.,,,,,
-1,7A,blue,Thurn,6,6,,Attack,,"Liechtenstein, Tiefenbach",1 hit per die. 1 self per action.,,,,,
-1,8A,blue,Protestant Cavalry,4,5/6,PURSUIT,Attack,Triplet,Imperial Cavalry,1 hit.,Screen,Pair,"Liechtenstein, Tiefenbach",,
-1,9A,blue,Hohenlohe,6*,5,,Attack,,"Catholic League Foot, Liechtenstein, Tiefenbach",1 hit per die. 1 self per action.,,,,,"One of the nobles who instigated the Bohemian Revolt (and thus the Thirty Years War) by chucking a couple of civil servants out a window. They survived, and Thurn went on to be one of the worst generals in the rebellion. His incompetence helped seal their fate at White Mountain."
-1,10A,blue,Schlick,4,4,,Attack,Triplet,Catholic League Cavalry,1 hit.,Screen,Pair,Catholic League Foot,,
-,,,,,,,,,,,,,,,
-MARSTON MOOR,,,,,,,,,,,,,,,
-2,11A,dkblue,Northern Horse,3,Doubles,PURSUIT,Attack,Pair,Fairfax,1 hit.,Screen,Pair,"Baillie, Lumsden, Fairfax",,
-2,12A,blue,Tillier's Left,6,(6),,Attack,,"Baillie, Lumsden",1 hit per die. 1 self per action.,,,,,
-2,13A,blue,Royalist Guns,I,Straight 4,,,,,,Screen,,Any enemy attack,,
-2,14A,blue,Tillier's Right,4,(5)/(6),RETIRE,Attack,,"Crawford, Manchester",1 hit per die. 1 self per action.,,,,,
-2,15A,blue,Whitecoats,2,Doubles,Tillier's Right,Attack,,"Crawford, Manchester",1 hit.,,,,,
-2,16A,dkblue,Byron,3,Doubles,PURSUIT,Attack,Two Pairs,Cromwell,1 hit.,Screen,Pair,"Crawford, Manchester, Cromwell",,
-2,17A,dkblue,Rupert's Lifeguard,1,,,,,,,,,,,"While this card is in play, Tillier's Left and Tillier's Right suffer one less hit when Attacked. <p>When either the Northern Horse or Byron are about to Rout, add the Lifeguard's Unit to that Formation. That is, that Formation does NOT Rout at this time, but only has one Unit block. <p>Remove this card from play if and when that happens. This does not constitute a Rout."
-2,18A,red,Cromwell,4,1-3,,Attack,,"Byron, Northern Horse",1 hit per die.,Screen,Pair,"Byron, Tillier's Right, Whitecoats",,"Cromwell's disciplined cavalry didn't chase after the fleeing Byron, but circled around to take out the other wing of horse."
-2,19A,red,Crawford,4,(5)/(6),RETIRE,Attack,,"Tillier's Right, Whitecoats",1 hit per die. 1 self per action.,,,,,
-2,20A,red,Manchester,4,(4),Crawford,Attack,,"Tillier's Right, Whitecoats",1 hit per die. 1 self per action.,,,,,
-2,21A,pink,Roundhead Guns,II,Triples,,,,,,Screen,,Any enemy attack,,
-2,22A,pink,Baillie,3,(6),RETIRE,Attack,,"Tillier's Left, Tillier's Right, Whitecoats",1 hit per die. 1 self per action.,,,,,
-2,23A,pink,Lumsden,5,(5),Baillie,Attack,,"Tillier's Left, Tillier's Right, Whitecoats",1 hit per die. 1 self per action.,,,,,
-2,24A,red,Fairfax,3,Doubles,PURSUIT,Attack,,Northern Horse,1 hit.,Screen,Pair,"Tillier's Left, Northern Horse",,
-,,,,,,,,,,,,,,,
-THE PLAINS OF ABRAHAM,,,,,,,,,,,,,,,
-3,25A,,,,,,,,,,,,,,
-3,26A,,,,,,,,,,,,,,
-3,27A,,,,,,,,,,,,,,
-3,28A,,,,,,,,,,,,,,
-3,29A,,,,,,,,,,,,,,
-3,30A,,,,,,,,,,,,,,
-3,31A,,,,,,,,,,,,,,
-3,32A,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-BOSWORTH FIELD,,,,,,,,,,,,,,,
-4,33A,,,,,,,,,,,,,,
-4,34A,,,,,,,,,,,,,,
-4,35A,,,,,,,,,,,,,,
-4,36A,,,,,,,,,,,,,,
-4,37A,,,,,,,,,,,,,,
-4,38A,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-MALPLAQUET,,,,,,,,,,,,,,,
-5,39A,,,,,,,,,,,,,,
-5,40A,,,,,,,,,,,,,,
-5,41A,,,,,,,,,,,,,,
-5,42A,,,,,,,,,,,,,,
-5,1B,,,,,,,,,,,,,,
-5,2B,,,,,,,,,,,,,,
-5,3B,,,,,,,,,,,,,,
-5,4B,,,,,,,,,,,,,,
-5,5B,,,,,,,,,,,,,,
-5,6B,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-IVRY,,,,,,,,,,,,,,,
-6,7B,,,,,,,,,,,,,,
-6,8B,,,,,,,,,,,,,,
-6,9B,,,,,,,,,,,,,,
-6,10B,,,,,,,,,,,,,,
-6,11B,,,,,,,,,,,,,,
-6,12B,,,,,,,,,,,,,,
-6,13B,,,,,,,,,,,,,,
-6,14B,,,,,,,,,,,,,,
-6,15B,,,,,,,,,,,,,,
-6,16B,,,,,,,,,,,,,,
-6,17B,,,,,,,,,,,,,,
-6,18B,,,,,,,,,,,,,,
-6,19B,,,,,,,,,,,,,,
-6,20B,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-THE DUNES,,,,,,,,,,,,,,,
-7,21B,,,,,,,,,,,,,,
-7,22B,,,,,,,,,,,,,,
-7,23B,,,,,,,,,,,,,,
-7,24B,,,,,,,,,,,,,,
-7,25B,,,,,,,,,,,,,,
-7,26B,,,,,,,,,,,,,,
-7,27B,,,,,,,,,,,,,,
-7,28B,,,,,,,,,,,,,,
-7,29B,,,,,,,,,,,,,,
-7,30B,,,,,,,,,,,,,,
-7,31B,,,,,,,,,,,,,,
-7,32B,,,,,,,,,,,,,,
-7,33B,,,,,,,,,,,,,,
-7,34B,,,,,,,,,,,,,,
-7,35B,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-BROOKLYN HEIGHTS,,,,,,,,,,,,,,,
-8,36B,,,,,,,,,,,,,,
-8,37B,,,,,,,,,,,,,,
-8,38B,,,,,,,,,,,,,,
-8,39B,,,,,,,,,,,,,,
-8,40B,,,,,,,,,,,,,,
-8,41B,,,,,,,,,,,,,,
-8,42B,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-EXPANSION 1 - WARS OF THE ROSES,,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-ST. ALBANS,,,,,,,,,,,,,,,
-9,43A,,,,,,,,,,,,,,
-9,44A,,,,,,,,,,,,,,
-9,45A,,,,,,,,,,,,,,
-9,46A,,,,,,,,,,,,,,
-9,47A,,,,,,,,,,,,,,
-9,48A,,,,,,,,,,,,,,
-9,49A,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-BLORE HEATH,,,,,,,,,,,,,,,
-10,50A,,,,,,,,,,,,,,
-10,51A,,,,,,,,,,,,,,
-10,52A,,,,,,,,,,,,,,
-10,53A,,,,,,,,,,,,,,
-10,54A,,,,,,,,,,,,,,
-10,55A,,,,,,,,,,,,,,
-10,56A,,,,,,,,,,,,,,
-10,57A,,,,,,,,,,,,,,
-10,58A,,,,,,,,,,,,,,
-10,59A,,,,,,,,,,,,,,
-10,60A,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-MORTIMER'S CROSS,,,,,,,,,,,,,,,
-11,61A,,,,,,,,,,,,,,
-11,62A,,,,,,,,,,,,,,
-11,63A,,,,,,,,,,,,,,
-11,64A,,,,,,,,,,,,,,
-11,65A,,,,,,,,,,,,,,
-11,66A,,,,,,,,,,,,,,
-11,67A,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-TOWTON,,,,,,,,,,,,,,,
-12,68A,,,,,,,,,,,,,,
-12,69A,,,,,,,,,,,,,,
-12,70A,,,,,,,,,,,,,,
-12,71A,,,,,,,,,,,,,,
-12,72A,,,,,,,,,,,,,,
-12,73A,,,,,,,,,,,,,,
-12,74A,,,,,,,,,,,,,,
-12,75A,,,,,,,,,,,,,,
-12,76A,,,,,,,,,,,,,,
-12,77A,,,,,,,,,,,,,,
-12,78A,,,,,,,,,,,,,,
-12,79A,,,,,,,,,,,,,,
-12,80A,,,,,,,,,,,,,,
-12,81A,,,,,,,,,,,,,,
-12,82A,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-EDGECOTE MOOR,,,,,,,,,,,,,,,
-13,43B,,,,,,,,,,,,,,
-13,44B,,,,,,,,,,,,,,
-13,45B,,,,,,,,,,,,,,
-13,46B,,,,,,,,,,,,,,
-13,47B,,,,,,,,,,,,,,
-13,48B,,,,,,,,,,,,,,
-13,49B,,,,,,,,,,,,,,
-13,50B,,,,,,,,,,,,,,
-13,51B,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-BARNET,,,,,,,,,,,,,,,
-14,52B,,,,,,,,,,,,,,
-14,53B,,,,,,,,,,,,,,
-14,54B,,,,,,,,,,,,,,
-14,55B,,,,,,,,,,,,,,
-14,56B,,,,,,,,,,,,,,
-14,57B,,,,,,,,,,,,,,
-14,58B,,,,,,,,,,,,,,
-14,59B,,,,,,,,,,,,,,
-14,60B,,,,,,,,,,,,,,
-14,61B,,,,,,,,,,,,,,
-14,62B,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-TEWKESBURY,,,,,,,,,,,,,,,
-15,63B,,,,,,,,,,,,,,
-15,64B,,,,,,,,,,,,,,
-15,65B,,,,,,,,,,,,,,
-15,66B,,,,,,,,,,,,,,
-15,67B,,,,,,,,,,,,,,
-15,68B,,,,,,,,,,,,,,
-15,69B,,,,,,,,,,,,,,
-15,70B,,,,,,,,,,,,,,
-15,71B,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-STOKE FIELD,,,,,,,,,,,,,,,
-16,72B,,,,,,,,,,,,,,
-16,73B,,,,,,,,,,,,,,
-16,74B,,,,,,,,,,,,,,
-16,75B,,,,,,,,,,,,,,
-16,76B,,,,,,,,,,,,,,
-16,77B,,,,,,,,,,,,,,
-16,78B,,,,,,,,,,,,,,
-16,79B,,,,,,,,,,,,,,
-16,80B,,,,,,,,,,,,,,
-16,81B,,,,,,,,,,,,,,
-16,82B,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-EXPANSION - C3I #32,,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-GAINES'S MILL,,,,,,,,,,,,,,,
-1000,83A,,,,,,,,,,,,,,
-1000,84A,,,,,,,,,,,,,,
-1000,85A,,,,,,,,,,,,,,
-1000,86A,,,,,,,,,,,,,,
-1000,87A,,,,,,,,,,,,,,
-1000,88A,,,,,,,,,,,,,,
-1000,89A,,,,,,,,,,,,,,
-1000,90A,,,,,,,,,,,,,,
-1000,91A,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-BOUVINES,,,,,,,,,,,,,,,
-1001,83B,,,,,,,,,,,,,,
-1001,84B,,,,,,,,,,,,,,
-1001,85B,,,,,,,,,,,,,,
-1001,86B,,,,,,,,,,,,,,
-1001,87B,,,,,,,,,,,,,,
-1001,88B,,,,,,,,,,,,,,
-1001,89B,,,,,,,,,,,,,,
-1001,90B,,,,,,,,,,,,,,
-1001,91B,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-EXPANSION 2 - AGE OF ALEXANDER,,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-CHAERONEA,,,,,,,,,,,,,,,
-17,92A,,,,,,,,,,,,,,
-17,93A,,,,,,,,,,,,,,
-17,94A,,,,,,,,,,,,,,
-17,95A,,,,,,,,,,,,,,
-17,96A,,,,,,,,,,,,,,
-17,97A,,,,,,,,,,,,,,
-17,98A,,,,,,,,,,,,,,
-17,99A,,,,,,,,,,,,,,
-17,100A,,,,,,,,,,,,,,
-17,101A,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-THE GRANICUS,,,,,,,,,,,,,,,
-18,102A,,,,,,,,,,,,,,
-18,103A,,,,,,,,,,,,,,
-18,104A,,,,,,,,,,,,,,
-18,105A,,,,,,,,,,,,,,
-18,106A,,,,,,,,,,,,,,
-18,107A,,,,,,,,,,,,,,
-18,108A,,,,,,,,,,,,,,
-18,109A,,,,,,,,,,,,,,
-18,110A,,,,,,,,,,,,,,
-18,111A,,,,,,,,,,,,,,
-18,112A,,,,,,,,,,,,,,
-18,113A,,,,,,,,,,,,,,
-18,114A,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-ISSUS,,,,,,,,,,,,,,,
-19,115A,,,,,,,,,,,,,,
-19,116A,,,,,,,,,,,,,,
-19,117A,,,,,,,,,,,,,,
-19,118A,,,,,,,,,,,,,,
-19,119A,,,,,,,,,,,,,,
-19,120A,,,,,,,,,,,,,,
-19,121A,,,,,,,,,,,,,,
-19,122A,,,,,,,,,,,,,,
-19,123A,,,,,,,,,,,,,,
-19,124A,,,,,,,,,,,,,,
-19,125A,,,,,,,,,,,,,,
-19,126A,,,,,,,,,,,,,,
-19,127A,,,,,,,,,,,,,,
-19,128A,,,,,,,,,,,,,,
-19,129A,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-GAUGAMELA,,,,,,,,,,,,,,,
-20,130A,,,,,,,,,,,,,,
-20,131A,,,,,,,,,,,,,,
-20,132A,,,,,,,,,,,,,,
-20,133A,,,,,,,,,,,,,,
-20,134A,,,,,,,,,,,,,,
-20,135A,,,,,,,,,,,,,,
-20,92B,,,,,,,,,,,,,,
-20,93B,,,,,,,,,,,,,,
-20,94B,,,,,,,,,,,,,,
-20,95B,,,,,,,,,,,,,,
-20,96B,,,,,,,,,,,,,,
-20,97B,,,,,,,,,,,,,,
-20,98B,,,,,,,,,,,,,,
-20,99B,,,,,,,,,,,,,,
-20,100B,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-THE HYDASPES,,,,,,,,,,,,,,,
-21,101B,,,,,,,,,,,,,,
-21,102B,,,,,,,,,,,,,,
-21,103B,,,,,,,,,,,,,,
-21,104B,,,,,,,,,,,,,,
-21,105B,,,,,,,,,,,,,,
-21,106B,,,,,,,,,,,,,,
-21,107B,,,,,,,,,,,,,,
-21,108B,,,,,,,,,,,,,,
-21,109B,,,,,,,,,,,,,,
-21,110B,,,,,,,,,,,,,,
-21,111B,,,,,,,,,,,,,,
-21,112B,,,,,,,,,,,,,,
-21,113B,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-GABIENE,,,,,,,,,,,,,,,
-22,114B,,,,,,,,,,,,,,
-22,115B,,,,,,,,,,,,,,
-22,116B,,,,,,,,,,,,,,
-22,117B,,,,,,,,,,,,,,
-22,118B,,,,,,,,,,,,,,
-22,119B,,,,,,,,,,,,,,
-22,120B,,,,,,,,,,,,,,
-22,121B,,,,,,,,,,,,,,
-22,122B,,,,,,,,,,,,,,
-22,123B,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-IPSUS,,,,,,,,,,,,,,,
-23,124B,,,,,,,,,,,,,,
-23,125B,,,,,,,,,,,,,,
-23,126B,,,,,,,,,,,,,,
-23,127B,,,,,,,,,,,,,,
-23,128B,,,,,,,,,,,,,,
-23,129B,,,,,,,,,,,,,,
-23,130B,,,,,,,,,,,,,,
-23,131B,,,,,,,,,,,,,,
-23,132B,,,,,,,,,,,,,,
-23,133B,,,,,,,,,,,,,,
-23,134B,,,,,,,,,,,,,,
-23,135B,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,
-EXPANSION 3 - GETTYSBURG,,,,,,,,,,,,,,,
-EXPANSION 4 - THE ENGLISH CIVIL WAR,,,,,,,,,,,,,,,
-EXPANSION 5 - THE GRAND ALLIANCE,,,,,,,,,,,,,,,
-EXPANSION 6 - GREAT BATTLES OF PRINCE CHARLES ALEXANDER OF LORRAINE,,,,,,,,,,,,,,,
\ No newline at end of file +scenario,number,wing,name,strength,dice,reserve,action1_type,action1_req,action1_target,action1_effect,action2_type,action2_req,action2_target,action2_effect,rule,rule_text,lore_text
+BASE GAME,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,
+WHITE MOUNTAIN,,,,,,,,,,,,,,,,,
+1,1A,red,The Twelve Apostles,III,Straight 4,,Bombard,,,,Screen,,Any enemy attack,,,,These were a dozen heavy guns fielded by the Catholic League.
+1,2A,red,Catholic League Cavalry,4,3/4,,Attack,Triplet,Schlick,1 hit.,Screen,Pair,Hohenlohe,,,,
+1,3A,red,Catholic League Foot,6,(6),,Attack,,"Hohenlohe, Schlick",1 hit per die. 1 self per action.,,,,,,,
+1,4A,pink,Imperial Cavalry,4,1/2,PURSUIT,Attack,Triplet,Protestant Cavalry,1 hit.,Screen,Pair,Thurn,,,,
+1,5A,pink,Liechtenstein,6,(5),RETIRE,Attack,,"Thurn, Hohenlohe",1 hit per die. 1 self per action.,,,,,,,
+1,6A,pink,Tiefenbach,4*,(4),Liechtenstein,Attack,,"Thurn, Hohenlohe",1 hit per die. 1 self per action.,,,,,,,
+1,7A,blue,Thurn,6,6,,Attack,,"Liechtenstein, Tiefenbach",1 hit per die. 1 self per action.,,,,,,,
+1,8A,blue,Protestant Cavalry,4,5/6,PURSUIT,Attack,Triplet,Imperial Cavalry,1 hit.,Screen,Pair,"Liechtenstein, Tiefenbach",,,,
+1,9A,blue,Hohenlohe,6*,5,,Attack,,"Catholic League Foot, Liechtenstein, Tiefenbach",1 hit per die. 1 self per action.,,,,,,,"One of the nobles who instigated the Bohemian Revolt (and thus the Thirty Years War) by chucking a couple of civil servants out a window. They survived, and Thurn went on to be one of the worst generals in the rebellion. His incompetence helped seal their fate at White Mountain."
+1,10A,blue,Schlick,4,4,,Attack,Triplet,Catholic League Cavalry,1 hit.,Screen,Pair,Catholic League Foot,,,,
+,,,,,,,,,,,,,,,,,
+MARSTON MOOR,,,,,,,,,,,,,,,,,
+2,11A,dkblue,Northern Horse,3,Doubles,PURSUIT,Attack,Pair,Fairfax,1 hit.,Screen,Pair,"Baillie, Lumsden, Fairfax",,,,
+2,12A,blue,Tillier's Left,6,(6),,Attack,,"Baillie, Lumsden",1 hit per die. 1 self per action.,,,,,,,
+2,13A,blue,Royalist Guns,I,Straight 4,,,,,,Screen,,Any enemy attack,,,,
+2,14A,blue,Tillier's Right,4,(5)/(6),RETIRE,Attack,,"Crawford, Manchester",1 hit per die. 1 self per action.,,,,,,,
+2,15A,blue,Whitecoats,2,Doubles,Tillier's Right,Attack,,"Crawford, Manchester",1 hit.,,,,,,,
+2,16A,dkblue,Byron,3,Doubles,PURSUIT,Attack,Two Pairs,Cromwell,1 hit.,Screen,Pair,"Crawford, Manchester, Cromwell",,,,
+2,17A,dkblue,Rupert's Lifeguard,1,,,,,,,,,,,life_guard 12A 14A,"While this card is in play, Tillier's Left and Tillier's Right suffer one less hit when Attacked. <p>When either the Northern Horse or Byron are about to Rout, add the Lifeguard's Unit to that Formation. That is, that Formation does NOT Rout at this time, but only has one Unit block. <p>Remove this card from play if and when that happens. This does not constitute a Rout.",
+2,18A,red,Cromwell,4,1-3,,Attack,,"Byron, Northern Horse",1 hit per die.,Screen,Pair,"Byron, Tillier's Right, Whitecoats",,,,"Cromwell's disciplined cavalry didn't chase after the fleeing Byron, but circled around to take out the other wing of horse."
+2,19A,red,Crawford,4,(5)/(6),RETIRE,Attack,,"Tillier's Right, Whitecoats",1 hit per die. 1 self per action.,,,,,,,
+2,20A,red,Manchester,4,(4),Crawford,Attack,,"Tillier's Right, Whitecoats",1 hit per die. 1 self per action.,,,,,,,
+2,21A,pink,Roundhead Guns,II,Triples,,,,,,Screen,,Any enemy attack,,,,
+2,22A,pink,Baillie,3,(6),RETIRE,Attack,,"Tillier's Left, Tillier's Right, Whitecoats",1 hit per die. 1 self per action.,,,,,,,
+2,23A,pink,Lumsden,5,(5),Baillie,Attack,,"Tillier's Left, Tillier's Right, Whitecoats",1 hit per die. 1 self per action.,,,,,,,
+2,24A,red,Fairfax,3,Doubles,PURSUIT,Attack,,Northern Horse,1 hit.,Screen,Pair,"Tillier's Left, Northern Horse",,,,
+,,,,,,,,,,,,,,,,,
+THE PLAINS OF ABRAHAM,,,,,,,,,,,,,,,,,
+3,25A,red,British Left,4,5/6,,Attack,,French Right,1 hit per die.,Counterattack,,French Right,1 hit.,,,
+3,26A,red,British Center,8,3/4,,Attack,,French Center,1 hit per die.,Counterattack,,French Center,"1 hit. Additionally, this unit suffers one less hit.",,,
+3,27A,red,British Right,4,1/2,,Attack,,French Left,1 hit per die.,Counterattack,,French Left,1 hit.,,,
+3,28A,red,Wolfe,I,,,Screen,Voluntary,Any enemy attack,,,,,,"place_2_red, screen_remove","While this card is in play, you may place dice on TWO cards per turn. <p>Once this card is used to SCREEN an Attack, the card is removed from play. This does not constitute a Rout.","Brilliant, moody, and thirty-one years old, James Wolfe was fatally wounded early in the battle. As he bled out, he heard of his victory, and said ""Now, God be praised, I will die in peace."""
+3,29A,blue,French Left,4,6,,Attack,Pair,British Right,1 hit.,Counterattack,,British Right,1 hit.,,,
+3,30A,blue,French Center,6,5/6,,Attack,,British Center,1 hit per die.,Counterattack,,British Center,1 hit.,,,
+3,31A,blue,French Right,4,4,,Attack,Pair,British Left,1 hit.,Counterattack,,British Left,1 hit.,,,
+3,32A,blue,Montcalm,I,,,Screen,Voluntary,Any enemy attack,,,,,,"place_2_blue, screen_remove","While this card is in play, you may place dice on TWO cards per turn. <p>Once this card is used to SCREEN an Attack, the card is removed from play. This does not constitute a Rout.","A seasoned commander at the age of forty-seven, Montcalm tried his best with inferior troops. Wounded during the battle, he dies the next day."
+,,,,,,,,,,,,,,,,,
+BOSWORTH FIELD,,,,,,,,,,,,,,,,,
+4,33A,blue,King Richard III,4,4/5,,Attack,,"Oxford, Richmond",1 hit per die. 1 self per action.,Command,Full House,Northumberland out of reserve,,place_2_blue,"While this card is in play, you may place dice on TWO Blue cards each turn, and on ONE Dark Blue card.",
+4,34A,blue,Norfolk,4,5/6,,Attack,,"Oxford, Richmond",1 hit per die. 1 self per action.,Screen,Pair,Any enemy attack,,,,
+4,35A,blue,Northumberland,6,4,Commanded,Attack,,"Oxford, Richmond",1 hit per die. 1 self per action.,Screen,Pair,Any enemy attack,,,,
+4,36A,red,Oxford,8,5/6,,Attack,,"Norfolk, King Richard III",1 hit per die. 1 self per action.,Counterattack,Pair,Any enemy attack,1 hit.,,,
+4,37A,red,Richmond,2,3/4,,Attack,Pair,"Norfolk, King Richard III",1 hit.,Command,Full House,The Stanleys out of reserve,,,,"The future Henry VII. Contrary to popular belief, he gained his kingdom by winning this battle, not by trading Richard a horse."
+4,38A,pink,The Stanleys,4,Doubles,Commanded,Absorb,"Pair, Voluntary","Oxford, Richmond","When target suffers Hits, this card suffers them instead.",,,,,when_enter_rout_other 35A,"When this card comes out of Reserve, Northumberland immediately Routs.","The Stanleys were political intriguers who spent most of the battle on the sidelines, waiting to see who was likely to win before intervening decisively for Henry."
+,,,,,,,,,,,,,,,,,
+MALPLAQUET,,,,,,,,,,,,,,,,,
+5,39A,blue,Villars,6*,5/6,,Attack,,"Schulenburg, Lottum, Orkney",1 hit.,Screen,Pair,"Schulenburg, Lottum, Orkney",,place_2_blue,"While this card is in play, you may place dice on TWO Blue cards each turn, and on ONE Dark Blue card.",
+5,40A,blue,Center,6,4,,Attack,,"Lottum, Orkney, Marlborough",1 hit per die. 1 self per action.,,,,,,,
+5,41A,blue,Boufflers,6,5/6,,Attack,,"Orange, Marlborough",1 hit per die. 1 self per action.,Screen,Pair,"Orange, Marlborough",,,,
+5,42A,dkblue,French Reserves,6,Doubles,,Absorb,"Pair, Voluntary",Any friendly formation,"When target suffers Hits, this card suffers them instead.",Counterattack,Pair,Withers,1 hit.,,,
+5,1B,pink,Orange,8,(6),,Attack,,"Boufflers, Center",1 hit per die. 1 self per action.,,,,,,,
+5,2B,pink,Marlborough,6*,(5)/(6),,Attack,Pair,"Boufflers, Center",1 hit.,Screen,Pair,"Boufflers, Center",,,,
+5,3B,red,Schulenburg,8,(5),,Attack,,"Villars, Center",1 hit per die. 1 self per action.,Counterattack,Pair,"Villars, Center",1 hit per die.,,,
+5,4B,red,Lottum,4,(4),RETIRE,Attack,,"Villars, Center",1 hit per die. 1 self per action.,Counterattack,Pair,"Villars, Center",1 hit.,,,
+5,5B,red,Orkney,4,Doubles,Lottum,Attack,Pair,"Villars, Center",1 hit.,,,,,,,
+5,6B,red,Withers,4,Straight 4,,Attack,,French Reserves,1 hit.,,,,,,,"A detachment under Henry Withers advanced against the French flank, forcing Villars to divert much-needed forces from his center. This weakened the French line, and in a final push Marlborough and Prince Eugene of Savoy broke it."
+,,,,,,,,,,,,,,,,,
+IVRY,,,,,,,,,,,,,,,,,
+6,7B,dkblue,D'Aumont,4,6,,Attack,,"Light Horse, Nemours",1 hit.,Screen,Pair,Light Horse,,,,
+6,8B,dkblue,Montepensier,4,5,,Attack,,"Nemours, Egmont",1 hit.,Screen,Pair,Nemours,,,,
+6,9B,dkblue,Royalist Cannons,II,Straight 4,,Screen,,"Light Horse, Nemours, Egmont",,Bombard,,,,,,
+6,10B,dkblue,Baron de Biron,6,Doubles,,Attack,Pair,"Egmont, Mercenaries, Mayenne",1 hit per action. 1 self per action.,Screen,Pair,Egmont,,,,
+6,11B,blue,Henri IV,6*,5/6,,Attack,,"Mercenaries, Mayenne",1 hit per die. 1 self per action.,Screen,,"Mercenaries, Mayenne",,,,
+6,12B,blue,Schomberg,3,4,,Attack,,"Aumale, Mayenne",1 hit.,Screen,Pair,Aumale,,,,
+6,13B,blue,Marshal de Biron,4,Doubles,,Absorb,"Pair, Voluntary",Any friendly formation,"When target suffers Hits, this card suffers them instead.",,,,,,,
+6,14B,red,Aumale,4,4,,Attack,,Schomberg,1 hit.,Screen,Pair,Schomberg,,,,
+6,15B,red,Mayenne,6*,5/6,,Attack,,Henri IV,1 hit per die. 1 self per action.,Screen,Pair,Henri IV,,,,
+6,16B,pink,Mercenaries,6*,Triples,,Attack,Triplet,Henri IV,1 hit.,Counterattack,Triplet,Henri IV,1 hit.,,,
+6,17B,pink,League Cannons,I,Straight 4,,Screen,,"D'Aumont, Montepensier, Baron de Biron",,Bombard,,,,,,
+6,18B,pink,Egmont,4,(6),,Attack,,"Montepensier, Baron de Biron",1 hit per die. 1 self per action.,Screen,Pair,Baron de Biron,,,,
+6,19B,red,Nemours,4,(5),,Attack,,Montepensier,1 hit per die. 1 self per action.,Screen,Pair,Montepensier,,,,
+6,20B,red,Light Horse,4,6,,Attack,,D'Aumont,1 hit.,Screen,Pair,D'Aumont,,,,
+,,,,,,,,,,,,,,,,,
+THE DUNES,,,,,,,,,,,,,,,,,
+7,21B,dkblue,The English Fleet,II,Triples,,Screen,,"Don Juan Jose, Spanish Right Cavalry",,,,,,if_cube_prevent_reaction 32B 35B,"If there are one or more cubes on this card, Don Juan Jose cannot Counterattack, and the Spanish Right Cavalry cannot Screen. Both of these enemy Formations may still Attack (though said Attacks will of course be subject to being Screened).",
+7,22B,blue,French Cannon,II,Doubles,,Screen,,Any enemy attack,,Bombard,,,,,,
+7,23B,dkblue,De Castelnau,4,Doubles,,Attack,Pair,Spanish Right Cavalry,1 hit. May only take this action if target is not in Reserve.,Screen,Pair,Don Juan Jose,,,,
+7,24B,dkblue,Lockhart,6,(5)/(6),,Attack,,"Don Juan Jose, Duke of York",1 hit per die. 1 self per action.,Counterattack,,Don Juan Jose,"1 hit. Additionally, this unit suffers one less hit.",,,
+7,25B,blue,Turenne's Center,4,(6),,Attack,,"Duke of York, Don Juan Jose",1 hit per die. 1 self per action.,,,,,,,
+7,26B,blue,Swiss Guard,2,(5)/(6),,Attack,,"Walloons, Duke of York",1 hit per die.,Counterattack,,Walloons,"1 hit. Additionally, this unit suffers one less hit.",,,
+7,27B,blue,De Crequi,4,Doubles,,Attack,Pair,"Conde, Spanish Left Cavalry",1 hit.,Screen,Pair,"Conde, Spanish Left Cavalry",,,,
+7,28B,dkblue,French Reserves,4,Doubles,,Absorb,"Pair, Voluntary",Any friendly formation,"When target suffers Hits, this card suffers 1 hit ONLY instead.",,,,,,,
+7,29B,pink,Conde,2,Triples,,Attack,Triplet,De Crequi,1 hit.,,,,,,,
+7,30B,pink,Walloons,4,(5)/(6),,Attack,,"Swiss Guard, Turenne's Center",1 hit per die.,Screen,,Swiss Guard,,,,
+7,31B,pink,Duke of York,4,5,,Attack,,"Turenne's Center, Lockhart",1 hit per die. 1 self per action.,,,,,,,
+7,32B,red,Don Juan Jose,6,6,,Attack,,"Lockhart, Turenne's Center",1 hit per die. 1 self per action.,Counterattack,,Lockhart,"1 hit. Additionally, this unit suffers one less hit.",,,
+7,33B,red,Spanish Reserve,4,Doubles,,Absorb,"Pair, Voluntary",Any friendly formation,"When target suffers Hits, this card suffers 1 hit ONLY instead.",,,,,,,
+7,34B,red,Spanish Left Cavalry,4,Doubles,Conde,Attack,Pair,"De Crequi, Swiss Guard",1 hit.,Screen,Pair,"De Crequi, Swiss Guard",,,,
+7,35B,red,Spanish Right Cavalry,4,Doubles,Don Juan Jose,Attack,Pair,"Lockhart, De Castelnau",1 hit.,Screen,Pair,"Lockhart, De Castelnau",,,,
+,,,,,,,,,,,,,,,,,
+BROOKLYN HEIGHTS,,,,,,,,,,,,,,,,,
+8,36B,red,Grant,8,(5)/(6),,Attack,,"Stirling, The Maryland 400",1 hit.,Counterattack,Pair,Stirling,"1 hit. Additionally, this unit suffers one less hit.",,,
+8,37B,red,Hessians,5,Doubles,,Attack,,Sullivan,1 hit per die. 1 self per action.,Counterattack,Pair,Sullivan,"1 hit. Additionally, this unit suffers one less hit.",,,
+8,38B,pink,Clinton,8,(5)/(6),,Attack,,Sullivan,1 hit per die. 1 self per action.,,,,,"no_attack_unless_dice_on_other 36B 37B, no_place_if_all_routed 36B 37B","This card may ONLY attack IF the cards for both Grant and the Hessians have dice on them. Otherwise, this card may not attack but may use an Action to remove dice placed here previously. If Grant or the Hessians Rout, no further dice may be placed on this card.",
+8,39B,blue,Sullivan,6,(5),,Attack,,Hessians,1 hit per die.,Attack,Triplet,Clinton,1 hit.,,,
+8,40B,blue,Stirling,6,(6),,Attack,,Grant,1 hit per die.,,,,,,,
+8,41B,blue,Knox's Artillery,1,Doubles,,Screen,,"Grant, Hessians",,,,,,,,
+8,42B,dkblue,The Maryland 400,2,Doubles,Stirling,Attack,Pair,Grant,1 hit.,,,,,suffer_1_less_1_max,"This card ALWAYS suffers one less Hit when Attacked, and NEVER suffers more than one Hit in any given Attack.","This small group, actually numbering about 260, saved the Continental Army with a rearguard action against two thousand. Less than a dozen made it out."
+,,,,,,,,,,,,,,,,,
+EXPANSION 1 - WARS OF THE ROSES,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,
+ST. ALBANS,,,,,,,,,,,,,,,,,
+9,43A,blue,Salisbury,5,(6),,Attack,,Sopwell Lane,1 hit per die. 1 self per action.,Counterattack,Pair,Sopwell Lane,1 hit.,,,
+9,44A,blue,Warwick,5,(5)/(6),,Attack,,Shropshire Lane,1 hit per die. 1 self per action.,Attack,Two Pairs,Henry VI,1 hit. Warwick Retires upon completing this Attack Action.,,,
+9,45A,blue,York,5,(5)/(6),,Attack,,"Shropshire Lane, Sopwell Lane",1 hit per die. 1 self per action.,Counterattack,Pair,Shropshire Lane,1 hit.,,,
+9,46A,dkblue,Archers,I,Doubles,,Screen,,Any enemy attack,,,,,,if_cube_ignore_special 49A,"If there is a cube on this card when you make an Attack, disregard the ""Defensive Works"" special ability on the Henry VI card.",
+9,47A,red,Shropshire Lane,6,Doubles,,Attack,Pair,"York, Warwick",1 hit per pair.,Counterattack,Pair,"York, Warwick",1 hit.,,,
+9,48A,red,Sopwell Lane,6,Doubles,,Attack,Pair,"Salisbury, Warwick, York",1 hit per pair. 1 self per action.,Counterattack,Pair,Salisbury,1 hit.,,,
+9,49A,red,Henry VI,1,,,,,,,,,,,,"Defensive Works: While this formation remains in play, the Shropshire Land and Sopwell Lane Formations do not suffer more than one hit when Attack. <p>Note that this ability is negated whenever the Yorkists' Archers Special Formation has a cube on its card. <p>When this Formation is Routed, the Defensive Works ability is permanently lost.","I know, I know - you want some historical commentary. Warwick snuck around the formidable enemy front-line defenses to capture the King in their rear. Warwick squeezed from his end, Salisbury and York from theirs, with the other guys stuck in the middle, thus negating the enemy's positional advantage."
+,,,,,,,,,,,,,,,,,
+BLORE HEATH,,,,,,,,,,,,,,,,,
+10,50A,red,Audley's Left,5,5,,Attack,,"Neville's Right, Neville's Center",1 hit per die. 1 self per action.,Screen,Pair,Neville's Right,,,,
+10,51A,red,Audley's Right,5,6,,Attack,,"Neville's Left, Neville's Center",1 hit per die. 1 self per action.,Screen,Pair,Neville's Left,,,,
+10,52A,pink,Lancaster Archers,I,Triples,,Screen,,Any enemy attack,,,,,,remove_when_all_routed 50A 51A,"When both Audley's Left and Audley's Right have Routed, remove this card from play. The removal of this card does not constitute a Rout.",
+10,53A,pink,Dudley's Left,6,(6),Audley's Left,Attack,,"Neville's Right, Neville's Center",1 hit per die. 1 self per action.,,,,,,,
+10,54A,pink,Dudley's Right,6,(5),Audley's Right,Attack,,"Neville's Left, Neville's Center",1 hit per die. 1 self per action.,,,,,,,
+10,55A,red,Lancaster Reserves,6,Doubles,,Absorb,Pair,Any friendly Pink formation,"When target suffers Hits, this unit suffers them instead.",,,,,,,
+10,56A,dkblue,Yorkist Archers,I,Triples,,Screen,,Any enemy attack,,,,,,,,
+10,57A,blue,Neville's Left,4,3/4,,Attack,,"Audley's Right, Dudley's Right",1 hit per die. 1 self per action.,Counterattack,Pair,Audley's Right,1 hit.,,,
+10,58A,blue,Neville's Center,4*,5/6,,Attack,,"Audley's Left, Audley's Right, Dudley's Left, Dudley's Right","1 hit, PLUS 1 hit per die. 1 self per action.",,,,,place_2_blue,"While this card is in play, you may place dice on TWO Blue cards each turn, in addition to dice placed on any Dark blue card.",
+10,59A,blue,Neville's Right,4,4/5,,Attack,,"Audley's Left, Dudley's Left",1 hit per die. 1 self per action.,Counterattack,Pair,Audley's Left,1 hit.,,,
+10,60A,dkblue,Wagon Laager,II,Doubles,,Screen,,"Audley's Left, Audley's Right",,,,,,,,
+,,,,,,,,,,,,,,,,,
+MORTIMER'S CROSS,,,,,,,,,,,,,,,,,
+11,61A,pink,Wiltshire,4,Doubles,,Attack,,"Devereaux, York's Center",1 hit.,Counterattack,Pair,Devereaux,1 hit.,,,
+11,62A,red,Pembroke,4,5,,Attack,,York's Center,1 hit per die. 1 self per action.,Counterattack,Pair,York's Center,1 hit.,,,
+11,63A,red,Tudor,4,6,,Attack,,"Herbert, York's Center",1 hit per die. 1 self per action.,Counterattack,Pair,Herbert,1 hit.,,,
+11,64A,blue,Herbert,4,(4),,Attack,,"Tudor, Pembroke",1 hit per die.,Screen,Pair,Tudor,,,,
+11,65A,blue,York's Center,6,(5),,Attack,,"Pembroke, Wiltshire, Tudor",1 hit per die.,Screen,Pair,Any enemy attack,,,,
+11,66A,blue,Devereaux,4,(6),,Attack,,"Wiltshire, Pembroke",1 hit per die.,Screen,Pair,Wiltshire,,,,
+11,67A,dkblue,"Edward, Duke of York",1,Doubles,,,,,,,,,,may_remove_dice_for_wild,"If there are dice on this card, you MAY, but are not required to, remove all dice on this card when taking an Action or a Reaction with another Formation. If you do so, the dice thus removed count as ONE ""wild"" die, matching the type needed to take the Action or Reaction. <p>For example, if an Action does one hit per die and you have two dice on that card and two dice on this card, you can remove these dice along with the dice on the other card to inflict three hits. If a Reaction requires a Pair and you only have one die on the card in question, you MAY (but again are not required to) remove the dice from this card to use them as one die to complete the Pair.",
+,,,,,,,,,,,,,,,,,
+TOWTON,,,,,,,,,,,,,,,,,
+12,68A,red,Somerset's Left,5,(1)/(2),,Attack,,"Warwick's Right, Warwick's Left, Wenlock",1 hit per die. 1 self per action.,Counterattack,Pair,Warwick's Right,1 hit.,,,
+12,69A,red,Somerset's Center,6,(3)/(4),,Attack,,"Warwick's Right, Wenlock, Dinham",1 hit per die. 1 self per action.,Screen,Pair,Any enemy formation,,,,
+12,70A,red,Somerset's Right,5,(5)/(6),,Attack,,"Warwick's Left, Warwick's Right, Dinham",1 hit per die. 1 self per action.,Counterattack,Pair,Warwick's Left,1 hit.,,,
+12,71A,pink,Lancaster Archers,II,Straight 4,,,,,,Screen,,Any enemy formation,,,,
+12,72A,pink,Exeter's Left,6,(5)/(6),Somerset's Left,Attack,,"Warwick's Right, Wenlock",1 hit per die. 1 self per action.,Counterattack,Pair,Wenlock,1 hit.,,,
+12,73A,pink,Exeter's Center,8,(5)/(6),Somerset's Center,Attack,,"Warwick's Right, Wenlock, Dinham",1 hit per die. 1 self per action.,Screen,Pair,Any enemy formation,,,,
+12,74A,pink,Exeter's Right,6,(1)/(2),Somerset's Right,Attack,,"Warwick's Left, Dinham",1 hit per die. 1 self per action.,Counterattack,Pair,Dinham,1 hit.,,,
+12,75A,red,Trollope,4,Doubles,,,,,,Absorb,"Pair, Voluntary",Any friendly formation,"When target suffers Hits, this unit suffers 1 hit ONLY instead.",,,
+12,76A,blue,Warwick's Left,7,(3)/(4),,Attack,,"Somerset's Right, Somerset's Center, Exeter's Right",1 hit per die. 1 self per action.,Counterattack,Pair,"Somerset's Right, Somerset's Center",1 hit.,,,
+12,77A,blue,Warwick's Right,7,(5)/(6),,Attack,,"Somerset's Left, Somerset's Center, Exeter's Left",1 hit per die. 1 self per action.,Counterattack,Pair,"Somerset's Left, Somerset's Center",1 hit.,,,
+12,78A,dkblue,York Archers,II,Straight 3,,Screen,,Any enemy formation,,Bombard,,,,,,
+12,79A,dkblue,Dinham,6,(5)/(6),Warwick's Left,Attack,,"Somerset's Right, Exeter's Right, Exeter's Center",1 hit per die. 1 self per action.,Screen,Pair,"Exeter's Right, Exeter's Center",,,,
+12,80A,dkblue,Wenlock,6,(3)/(4),Warwick's Right,Attack,,"Somerset's Left, Exeter's Left, Exeter's Center",1 hit per die. 1 self per action.,Screen,Pair,"Somerset's Center, Exeter's Left, Exeter's Center",,,,
+12,81A,dkblue,"Edward, Duke of York",1,Any,,Command,Full House,Norfolk out of reserve,,,,,,may_remove_dice_for_wild,"If there are dice on this card, you MAY, but are not required to, remove all dice on this card when taking an Action or a Reaction with another Formation. If you do so, the dice htus removed count as ONE ""wild"" die, matching the type needed to take the Action or Reaction.",
+12,82A,blue,Norfolk,4,Doubles,Commanded,Attack,Pair,"Somerset's Left, Somerset's Center, Exeter's Left, Exeter's Center",1 hit per die.,Absorb,"Pair, Voluntary",Any friendly formation,"When target suffers Hits, this unit suffers 1 hit ONLY instead.",,,
+,,,,,,,,,,,,,,,,,
+EDGECOTE MOOR,,,,,,,,,,,,,,,,,
+13,43B,blue,Pembroke,4,(6),,Attack,,"Redesdale, Clapham","1 hit, PLUS 1 hit per die. 1 self per action.",,,,,,,
+13,44B,blue,Herbert,4,(5),,Attack,,"Redesdale, Clapham",1 hit per die. 1 self per action.,Absorb,Pair,Pembroke,"When target suffers Hits, this unit suffers 1 hit ONLY instead.",,,
+13,45B,blue,Yorkist Reinforcements,III,Straight 3,,Command,3 cubes,"Devon, Devon's Archers",,,,,,no_start_cubes,"Unlike most Special Formations, this card begins the game with NO cubes on it.",
+13,46B,dkblue,Devon,6,(3)/(4),Commanded,Attack,,"Redesdale, Clapham",1 hit per die. 1 self per action.,,,,,,,
+13,47B,dkblue,Devon's Archers,II,Doubles,Commanded,,,,,Screen,,Any enemy formation,,,,
+13,48B,red,Redesdale,6,(5)/(6),,Attack,,"Pembroke, Herbert, Devon",1 hit per die. 1 self per action.,Counterattack,Pair,"Pembroke, Herbert",1 hit.,,,
+13,49B,red,Rebel Archers,II,Doubles,,,,,,Screen,,Any enemy formation,,,,
+13,50B,pink,Rebel Reinforcements,III,Straight 3,,Command,3 cubes,Clapham,,,,,,no_start_cubes,"Unlike most Special Formations, this card begins the game with NO cubes on it.",
+13,51B,pink,Clapham,4,(3)/(4),Commanded,Attack,,"Pembroke, Herbert, Devon",1 hit per die. 1 self per action.,,,,,,,
+,,,,,,,,,,,,,,,,,
+BARNET,,,,,,,,,,,,,,,,,
+14,52B,red,Exeter,5,Doubles,,Attack,,Edward IV,1 hit. 1 self per action.,,,,,,,
+14,53B,red,Montagu,6,5,,Attack,,"Hastings, Edward IV",1 hit per die. 1 self per action.,Counterattack,Pair,Edward IV,"1 hit. Additionally, this unit only suffers one hit.",,,
+14,54B,red,Oxford,5,6,,Attack,,"Hastings, Edward IV","1 hit, PLUS 1 hit per die. 1 self per action.",,,,,,,
+14,55B,red,Warwick,4,5/6,Exeter or Montagu,Attack,,"Edward IV, Gloucester",1 hit per die. 1 self per action.,,,,,,,
+14,56B,red,The Kingmaker,I,,,,,,,Screen,Voluntary,,,"place_2_red, screen_remove","While this card is in play, you may place dice on TWO Red cards per Turn. <p>Once this card is used to SCREEN an attack, the card is removed from play and this benefit is lost. This does not constitute Routing, but it does constitute Richard Neville, 16th Earl of Warwick, suffering from a fatal case of being stabbed to death.",
+14,57B,blue,Hastings,4,5,,Attack,,"Montagu, Warwick",1 hit per die. 1 self per action.,Counterattack,Pair,Montagu,1 hit.,,,
+14,58B,blue,Edward IV,6,5/6,,Attack,,"Exeter, Montagu, Warwick",1 hit per die. 1 self per action.,Counterattack,Pair,Montagu,"1 hit. Additionally, this unit only suffers one hit.",,,
+14,59B,blue,Gloucester,4,5/6,,Attack,,"Exeter, Warwick",1 hit per die. 1 self per action.,,,,,,,
+14,60B,blue,Edward's Reserves,4,Doubles,,,,,,Absorb,"Pair, Voluntary",Edward IV,"When target suffers Hits, this unit suffers 1 hit ONLY instead.",rout_with 58B,"If this card is still in play when Edward IV Routs, this card also Routs, immediately and simultaneously.",
+14,61B,dkblue,"""Treason!""",1,3/4,,Attack,Full House,Oxford,,,,,,,,"In the dense fog, Oxford was mistaken for the enemy and his men fired upon in the confusion. Fearing treason, they fled the battlefield."
+14,62B,blue,The King,I,,,Attack,,,,Screen,Voluntary,Any enemy formation,,"place_2_blue, screen_remove",,
+,,,,,,,,,,,,,,,,,
+TEWKESBURY,,,,,,,,,,,,,,,,,
+15,63B,dkblue,A Plump of Spears,1,Doubles,,,,,,,,,,,"If there are dice on this card, Attacks you make against Somerset inflict one extra hit. <p>When Somerset Routs, remove this card from play (this does not constitute a Rout) and place any dice back into your dice pool.",
+15,64B,blue,Gloucester,4,(4),,Attack,,"Somerset, Wenlock",1 hit per die. 1 self per action.,Screen,Pair,Somerset,,,,
+15,65B,blue,Edward IV,6,(5),,Attack,,"Somerset, Wenlock",1 hit per die.,Screen,Pair,Wenlock,,,,
+15,66B,blue,Hastings,4,(6),,Attack,,"Devon, Wenlock",1 hit per die. 1 self per action.,Screen,Pair,Devon,,,,
+15,67B,dkblue,York's Guns,II,Straight 3,,Screen,,Any enemy formation,,Bombard,,,,,,
+15,68B,red,Devon,6,(6),,Attack,,"Hastings, Edward IV",1 hit per die. 1 self per action.,Screen,Pair,Hastings,,,,
+15,69B,red,Wenlock,6,(5),,Attack,,"Edward IV, Gloucester",1 hit per die. 1 self per action.,Screen,Pair,Edward IV,,,"Wenlock cannot Screen after Somerset Routs (the retreating Somerset, enraged that Wenlock had not supported his attack, killed him on the spot with an axe).",
+15,70B,red,Somerset,6*,5/6,,Attack,,"Edward IV, Gloucester",1 hit per die. 1 self per action.,,,,,,,
+15,71B,pink,Lancaster's Guns,II,Straight 4,,Screen,,Any enemy formation,,,,,,,,
+,,,,,,,,,,,,,,,,,
+STOKE FIELD,,,,,,,,,,,,,,,,,
+16,72B,blue,Lincoln's Left,4,4,,Attack,,"Scales, Oxford, Strange",1 hit per die. 1 self per action.,Counterattack,Pair,Scales,1 hit.,,,
+16,73B,blue,German Mercenaries,4,Doubles,,Attack,,"Oxford, Strange",1 hit per die.,,,,,,"This Formation ALWAYS suffers one less Hit when being Attacked, and NEVER suffers more than one Hit in any given Attack.",
+16,74B,blue,Irish Kerns,8,6,,Attack,,"Oxford, Strange",1 hit per die. 1 self per action.,Absorb,Pair,Any friendly formation,"When target suffers Hits, this unit suffers them instead.",,,
+16,75B,blue,Lincoln's Right,4,5,,Attack,,"Savage, Oxford, Strange",1 hit per die. 1 self per action.,Counterattack,Pair,Savage,1 hit.,,,
+16,76B,red,Savage,3,4,PURSUIT,Attack,,Lincoln's Right,1 hit per die. 1 self per action.,Screen,Pair,Lincoln's Right,,,,
+16,77B,red,Oxford,8*,5/6,,Attack,,"German Mercenaries, Lincoln's Left, Lincoln's Right",1 hit per die. 1 self per action.,Counterattack,Pair,German Mercenaries,"1 hit. Additionally, this unit suffers one less hit.",,,
+16,78B,red,Scales,3,3,PURSUIT,Attack,,Lincoln's Left,1 hit per die. 1 self per action.,Screen,Pair,Lincoln's Left,,,,
+16,79B,pink,Tudor Archers,II,Straight 3,,Attack,,Irish Kerns,1 hit.,Screen,,Any enemy formation,,,,
+16,80B,pink,The Earl of Oxford,1,Doubles,,,,,,,,,,,"If there are dice on this card, you MAY, but are not required to, remove all dice on this card when taking an Action or Reaction with another Formation. If you do so, the dice thus removed count as ONE ""wild"" die, matching the type needed to take the Action or Reaction. <p>If there are dice on this card at the start of your Roll Phase, you may place dice on two Red Formations in addition to any dice placed on a Pink Formation.",
+16,81B,pink,Henry VII,7,6,,Absorb,"Pair, Voluntary",Any friendly formation,"When target suffers Hits, this unit suffers them instead.",,,,,,,
+16,82B,red,Strange,6,6,Oxford,Attack,,"German Mercenaries, Lincoln's Right, Lincoln's Left",1 hit per die. 1 self per action.,,,,,,,
+,,,,,,,,,,,,,,,,,
+EXPANSION - C3I #32,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,
+GAINES'S MILL,,,,,,,,,,,,,,,,,
+3201,83A,,,,,,,,,,,,,,,,
+3201,84A,,,,,,,,,,,,,,,,
+3201,85A,,,,,,,,,,,,,,,,
+3201,86A,,,,,,,,,,,,,,,,
+3201,87A,,,,,,,,,,,,,,,,
+3201,88A,,,,,,,,,,,,,,,,
+3201,89A,,,,,,,,,,,,,,,,
+3201,90A,,,,,,,,,,,,,,,,
+3201,91A,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,
+BOUVINES,,,,,,,,,,,,,,,,,
+3202,83B,,,,,,,,,,,,,,,,
+3202,84B,,,,,,,,,,,,,,,,
+3202,85B,,,,,,,,,,,,,,,,
+3202,86B,,,,,,,,,,,,,,,,
+3202,87B,,,,,,,,,,,,,,,,
+3202,88B,,,,,,,,,,,,,,,,
+3202,89B,,,,,,,,,,,,,,,,
+3202,90B,,,,,,,,,,,,,,,,
+3202,91B,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,
+EXPANSION 2 - AGE OF ALEXANDER,,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,
+CHAERONEA,,,,,,,,,,,,,,,,,
+17,92A,,,,,,,,,,,,,,,,
+17,93A,,,,,,,,,,,,,,,,
+17,94A,,,,,,,,,,,,,,,,
+17,95A,,,,,,,,,,,,,,,,
+17,96A,,,,,,,,,,,,,,,,
+17,97A,,,,,,,,,,,,,,,,
+17,98A,,,,,,,,,,,,,,,,
+17,99A,,,,,,,,,,,,,,,,
+17,100A,,,,,,,,,,,,,,,,
+17,101A,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,
+THE GRANICUS,,,,,,,,,,,,,,,,,
+18,102A,,,,,,,,,,,,,,,,
+18,103A,,,,,,,,,,,,,,,,
+18,104A,,,,,,,,,,,,,,,,
+18,105A,,,,,,,,,,,,,,,,
+18,106A,,,,,,,,,,,,,,,,
+18,107A,,,,,,,,,,,,,,,,
+18,108A,,,,,,,,,,,,,,,,
+18,109A,,,,,,,,,,,,,,,,
+18,110A,,,,,,,,,,,,,,,,
+18,111A,,,,,,,,,,,,,,,,
+18,112A,,,,,,,,,,,,,,,,
+18,113A,,,,,,,,,,,,,,,,
+18,114A,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,
+ISSUS,,,,,,,,,,,,,,,,,
+19,115A,,,,,,,,,,,,,,,,
+19,116A,,,,,,,,,,,,,,,,
+19,117A,,,,,,,,,,,,,,,,
+19,118A,,,,,,,,,,,,,,,,
+19,119A,,,,,,,,,,,,,,,,
+19,120A,,,,,,,,,,,,,,,,
+19,121A,,,,,,,,,,,,,,,,
+19,122A,,,,,,,,,,,,,,,,
+19,123A,,,,,,,,,,,,,,,,
+19,124A,,,,,,,,,,,,,,,,
+19,125A,,,,,,,,,,,,,,,,
+19,126A,,,,,,,,,,,,,,,,
+19,127A,,,,,,,,,,,,,,,,
+19,128A,,,,,,,,,,,,,,,,
+19,129A,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,
+GAUGAMELA,,,,,,,,,,,,,,,,,
+20,130A,,,,,,,,,,,,,,,,
+20,131A,,,,,,,,,,,,,,,,
+20,132A,,,,,,,,,,,,,,,,
+20,133A,,,,,,,,,,,,,,,,
+20,134A,,,,,,,,,,,,,,,,
+20,135A,,,,,,,,,,,,,,,,
+20,92B,,,,,,,,,,,,,,,,
+20,93B,,,,,,,,,,,,,,,,
+20,94B,,,,,,,,,,,,,,,,
+20,95B,,,,,,,,,,,,,,,,
+20,96B,,,,,,,,,,,,,,,,
+20,97B,,,,,,,,,,,,,,,,
+20,98B,,,,,,,,,,,,,,,,
+20,99B,,,,,,,,,,,,,,,,
+20,100B,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,
+THE HYDASPES,,,,,,,,,,,,,,,,,
+21,101B,,,,,,,,,,,,,,,,
+21,102B,,,,,,,,,,,,,,,,
+21,103B,,,,,,,,,,,,,,,,
+21,104B,,,,,,,,,,,,,,,,
+21,105B,,,,,,,,,,,,,,,,
+21,106B,,,,,,,,,,,,,,,,
+21,107B,,,,,,,,,,,,,,,,
+21,108B,,,,,,,,,,,,,,,,
+21,109B,,,,,,,,,,,,,,,,
+21,110B,,,,,,,,,,,,,,,,
+21,111B,,,,,,,,,,,,,,,,
+21,112B,,,,,,,,,,,,,,,,
+21,113B,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,
+GABIENE,,,,,,,,,,,,,,,,,
+22,114B,,,,,,,,,,,,,,,,
+22,115B,,,,,,,,,,,,,,,,
+22,116B,,,,,,,,,,,,,,,,
+22,117B,,,,,,,,,,,,,,,,
+22,118B,,,,,,,,,,,,,,,,
+22,119B,,,,,,,,,,,,,,,,
+22,120B,,,,,,,,,,,,,,,,
+22,121B,,,,,,,,,,,,,,,,
+22,122B,,,,,,,,,,,,,,,,
+22,123B,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,
+IPSUS,,,,,,,,,,,,,,,,,
+23,124B,,,,,,,,,,,,,,,,
+23,125B,,,,,,,,,,,,,,,,
+23,126B,,,,,,,,,,,,,,,,
+23,127B,,,,,,,,,,,,,,,,
+23,128B,,,,,,,,,,,,,,,,
+23,129B,,,,,,,,,,,,,,,,
+23,130B,,,,,,,,,,,,,,,,
+23,131B,,,,,,,,,,,,,,,,
+23,132B,,,,,,,,,,,,,,,,
+23,133B,,,,,,,,,,,,,,,,
+23,134B,,,,,,,,,,,,,,,,
+23,135B,,,,,,,,,,,,,,,,
+,,,,,,,,,,,,,,,,,
+EXPANSION 3 - GETTYSBURG,,,,,,,,,,,,,,,,,
+EXPANSION 4 - THE ENGLISH CIVIL WAR,,,,,,,,,,,,,,,,,
+EXPANSION 5 - THE GRAND ALLIANCE,,,,,,,,,,,,,,,,,
+EXPANSION 6 - GREAT BATTLES OF PRINCE CHARLES ALEXANDER OF LORRAINE,,,,,,,,,,,,,,,,,
\ No newline at end of file diff --git a/tools/download.sh b/tools/download.sh index 874c81d..53c439b 100644 --- a/tools/download.sh +++ b/tools/download.sh @@ -1,3 +1,3 @@ # Download and process card data from spreadsheet. -curl -L 'https://docs.google.com/spreadsheets/d/e/2PACX-1vRKdgICtx6hzlWFuKYDQN4UO15rs7i-pBvawMWkaBWe5SmiivEP_ztyEVnpFCtsIB-MkKo3buD9qGdc/pub?gid=0&single=true&output=csv' > tools/cards.csv -curl -L 'https://docs.google.com/spreadsheets/d/e/2PACX-1vRKdgICtx6hzlWFuKYDQN4UO15rs7i-pBvawMWkaBWe5SmiivEP_ztyEVnpFCtsIB-MkKo3buD9qGdc/pub?gid=1992953161&single=true&output=csv' > tools/scenarios.csv +curl -s -L 'https://docs.google.com/spreadsheets/d/e/2PACX-1vRKdgICtx6hzlWFuKYDQN4UO15rs7i-pBvawMWkaBWe5SmiivEP_ztyEVnpFCtsIB-MkKo3buD9qGdc/pub?gid=0&single=true&output=csv' > tools/cards.csv +curl -s -L 'https://docs.google.com/spreadsheets/d/e/2PACX-1vRKdgICtx6hzlWFuKYDQN4UO15rs7i-pBvawMWkaBWe5SmiivEP_ztyEVnpFCtsIB-MkKo3buD9qGdc/pub?gid=1992953161&single=true&output=csv' > tools/scenarios.csv diff --git a/tools/gendata.js b/tools/gendata.js index 764f011..d1c6e1b 100644 --- a/tools/gendata.js +++ b/tools/gendata.js @@ -1,27 +1,35 @@ const fs = require("fs") const { parse } = require("csv-parse/sync") -var card_buffer = fs.readFileSync("tools/cards.csv", "utf-8") -var card_records = parse(card_buffer, { columns: true, skip_empty_lines: true }) - -// console.log(card_records) +var card_records = parse(fs.readFileSync("tools/cards.csv", "utf-8"), { columns: true, records_with_empty_values: true }) +var scenario_records = parse(fs.readFileSync("tools/scenarios.csv", "utf-8"), { columns: true, skip_records_with_empty_values: true }) var result = [ `<!doctype html> +<html lang="en"> +<head> <title>Table Battle Cards</title> <link rel="stylesheet" href="/fonts/fonts.css"> <link rel="stylesheet" href="/table-battles/cards.css"> <style> -body{background-color:silver;max-width:1600px;margin:0 auto;padding:20px;background-image:url(../texture.png)} +body{background-color:dimgray;color:whitesmoke;max-width:1600px;margin:0 auto;padding:20px;background-image:url(../background.png)} +h1{color: white} .list{display:flex;flex-wrap:wrap;gap:20px;} </style> +</head> +<body> <div>` ] -for (let c of card_records) { - if (!c.scenario) - continue +const WING = { red: 0, pink: 1, blue: 2, dkblue: 3 } +const WING_ICON = [ "\u2666", "\u2665", "\u2663", "\u2660" ] + +var cards = [ ] +var card_index = {} +var cards_show = [ ] +var scenarios = [] +for (let c of card_records) { if (!c.number) { result.push(`</div><h2>${c.scenario}</h2><div class="list">`) continue @@ -30,24 +38,63 @@ for (let c of card_records) { if (!c.name) continue - if (c.strength.endsWith("*")) { - c.strength = parseInt(c.strength) - c.star = true + let card = { + scenario: parseInt(c.scenario), + number: c.number, + name: c.name, + wing: WING[c.wing], + } + + card_index[c.number] = cards.length + + cards.push(card) + + if (c.strength === "I") { + card.special = 1 + } + else if (c.strength === "II") { + card.special = 2 + } + else if (c.strength === "III") { + card.special = 3 } + else if (c.strength.endsWith("*")) { + card.strength = parseInt(c.strength) + card.star = 1 + } + else { + card.strength = parseInt(c.strength) + } + + card.dice = c.dice + card.actions = [] - result.push(`<div class="card">`) - result.push(`<div class="formation ${c.wing}">${c.name}</div>`) - if (c.strength) + result.push(`<div class="formation card">`) + result.push(`<div class="name ${c.wing}">${c.name}</div>`) + + if (card.strength) + result.push(`<div class="strength">${card.strength}</div>`) + else result.push(`<div class="strength">${c.strength}</div>`) + if (c.dice) { - if (c.star) + if (card.star) result.push(`<div class="dice_area">${c.dice}<div class="star">★</div></div>`) else result.push(`<div class="dice_area">${c.dice}</div>`) } + function make_action(type, requirement, target, effect) { + let a = { type } + if (requirement) a.requirement = requirement + if (target) a.target = target + if (effect) a.effect = effect + return a + } + if (c.action1_type) { + card.actions.push(make_action(c.action1_type, c.action1_req, c.action1_target, c.action1_effect)) result.push(`<div class="action_row">`) result.push(`<div class="action_type">${c.action1_type}</div>`) result.push(`<div class="action_requirement">${c.action1_req}</div>`) @@ -58,6 +105,7 @@ for (let c of card_records) { } if (c.action2_type || c.action2_effect) { + card.actions.push(make_action(c.action2_type, c.action2_req, c.action2_target, c.action2_effect)) result.push(`<div class="action_row">`) result.push(`<div class="action_type reaction">${c.action2_type}</div>`) result.push(`<div class="action_requirement">${c.action2_req}</div>`) @@ -67,20 +115,185 @@ for (let c of card_records) { result.push(`</div>`) } - if (c.flavor) - result.push(`<div class="flavor">${c.flavor}</div>`) + if (c.rule) + card.rule = c.rule_tag + + if (c.rule_text) { + card.rule_text = c.rule_text + result.push(`<div class="rule_text">${c.rule_text}</div>`) + } + + if (c.lore_text) { + card.lore_text = c.lore_text + result.push(`<div class="lore_text">${c.lore_text}</div>`) + } if (c.reserve) { + if (c.reserve === "RETIRE") + card.retire = 1 + else if (c.reserve === "PURSUIT") + card.pursuit = 1 + else if (c.reserve === "Commanded") + card.reserve = [] + else + card.reserve = c.reserve.split(" or ") + if (c.reserve === "RETIRE" || c.reserve === "PURSUIT") result.push(`<div class="reserve">${c.reserve}</div>`) else result.push(`<div class="reserve">IN RESERVE (${c.reserve})</div>`) } - result.push(`<div class="card_number">${c.number}</div>`) - result.push(`<div class="wing_name">${c.wing}</div>`) + result.push(`<div class="number">${c.number}</div>`) + result.push(`<div class="extra">${WING_ICON[card.wing]}</div>`) result.push(`</div>`) } -console.log(result.join("\n")) +function find_card(scenario, name) { + name = name.replace(" out of reserve", "") + for (let c of cards) + if (c.scenario === scenario && c.name === name) + return card_index[c.number] + throw new Error("CARD NOT FOUND: " + scenario + " " + name) +} + +function find_enemy_cards(scenario, wing) { + let w1, w2 + if (wing === 0 || wing === 1) + w1 = 2, w2 = 3 + if (wing === 2 || wing === 3) + w1 = 0, w2 = 1 + let list = [] + for (let c of cards) + if (c.scenario === scenario && (c.wing === w1 || c.wing === w2)) + list.push(card_index[c.number]) + return list +} + +function find_friendly_cards(scenario, wing) { + let w1, w2 + if (wing === 0 || wing === 1) + w1 = 0, w2 = 1 + if (wing === 2 || wing === 3) + w1 = 2, w2 = 3 + let list = [] + for (let c of cards) + if (c.scenario === scenario && (c.wing === w1 || c.wing === w1)) + list.push(card_index[c.number]) + return list +} + +function find_wing_cards(scenario, wing) { + let list = [] + for (let c of cards) + if (c.scenario === scenario && c.wing === wing) + list.push(card_index[c.number]) + return list +} + +/* process action and reserve targets */ +for (let c of cards) { + for (let a of c.actions) { + if (a.target) { + if (a.target === "Any enemy attack" || a.target === "Any enemy formation") + a.target_list = find_enemy_cards(c.scenario, c.wing) + else if (a.target === "Any friendly formation") + a.target_list = find_friendly_cards(c.scenario, c.wing) + else if (a.target === "Any friendly Pink formation") + a.target_list = find_wing_cards(c.scenario, WING.pink) + else + a.target_list = a.target.split(", ").map(name => find_card(c.scenario, name)) + } + } + if (c.reserve) + c.reserve = c.reserve.map(name => find_card(c.scenario, name)) +} + +fs.writeFileSync("info/all-cards.html", result.join("\n")) + +result = [ +`<!doctype html> +<html lang="en"> +<head> +<title>Table Battle Cards</title> +<link rel="stylesheet" href="/fonts/fonts.css"> +<link rel="stylesheet" href="/table-battles/cards.css"> +<style> +body{background-color:dimgray;color:whitesmoke;max-width:1600px;margin:0 auto;padding:20px;background-image:url(../background.png)} +.list{display:flex;flex-wrap:wrap;gap:20px;} +</style> +</head> +<body> +<div class="list">` +] + +function parse_cards(text) { + let out = [] + let list = text.split(",") + for (let range of list) { + let [a, b] = range.split("-") + a = card_index[a] + b = card_index[b] + if (a === undefined || b === undefined) + throw new Error("MISSING CARDS FOR " + text) + for (let i = a; i <= b; ++i) + out.push(i) + } + return out +} + +let last_exp = null +for (let s of scenario_records) { + if (!s.name) + continue + if (last_exp !== s.expansion) { + result.push(`</div><h1>${s.expansion}</h1><div class="list">`) + last_exp = s.expansion + } + try { + scenarios.push({ + number: parseInt(s.number), + name: s.name, + date: s.date, + players: [ + { name: s.player1, cards: parse_cards(s.cards1), morale: parseInt(s.morale1) }, + { name: s.player2, cards: parse_cards(s.cards2), morale: parseInt(s.morale2) }, + ], + rule: s.rule || undefined + }) + result.push(` + <div class="scenario card"> + <div class="scenario_title"> + <div class="battle_name">${s.name}</div> + <div class="battle_date">${s.date}</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">${s.player1}</div> + <div class="scenario_cards">Cards ${s.cards1}</div> + <div class="scenario_morale">Morale: ${s.morale1}</div> + </div> + <div class="scenario_player"> + <div class="scenario_player_name">${s.player2}</div> + <div class="scenario_cards">Cards ${s.cards2}</div> + <div class="scenario_morale">Morale: ${s.morale2}</div> + </div> + <div class="rule_text">${s.rule_text}</div> + <div class="lore_text">${s.lore_text}</div> + <div class="number">${s.number}</div> + </div> + `) + } catch (err) { + console.log(err) + } +} + +fs.writeFileSync("info/scenarios.html", result.join("\n")) + +result = [] +result.push("const data = {") +result.push("scenarios: " + JSON.stringify(scenarios,0,"\t") + ",") +result.push("cards: " + JSON.stringify(cards,0,"\t") + ",") +result.push("}") +result.push("if (typeof module!=='undefined') module.exports = data") +fs.writeFileSync("data.js", result.join("\n")) diff --git a/tools/scenarios.csv b/tools/scenarios.csv index d495051..f3a8508 100644 --- a/tools/scenarios.csv +++ b/tools/scenarios.csv @@ -1,28 +1,47 @@ -number,name,date,player1,cards1,morale1,player2,cards2,morale2,text
-1,White Mountain,8 November 1620,The Bohemian Revolt,07A-10A,4,Imperials & Catholic League,01A-06A,2,"A strong defensive position is squandered by the hapless rebel leadership, effectively ending the Bohemian Revolt. Incredibly, the war it ignited would continue on, engulfing most of Europe for three decades. A simple battle to get your feet wet."
-2,Marston Moor,2 July 1644,Royalists,11A-17A,2,Parliament & Covenanters,18A-24A,3,A letter from King Charles convinced Prince Rupert of the Rhine that he ought to fight a much larger army. Parliament won a lopsided victory. Only the stubborn stand of the Whitecoats prevented total disaster. This has more moving parts than the White Mountain scenario.
-3,The Plains of Abraham,13 September 1759,British,25A-28A,Rout 3,French,29A-32A,Rout 1,"The battle that won Canada for the British. To win, the British must Rout all 3 French cards without losing any of their own. If the French Rout a single card, they win (even if they lose their last card when doing so). This battle introduces Counter-attack Reactions."
-4,Bosworth Field,,,,,,,,
-5,Malplaquet,,,,,,,,
-6,Ivry,,,,,,,,
-7,The Dunes,,,,,,,,
-8,Brooklyn Heights,,,,,,,,
-36,Pharsalus,9 August 48 BCE,Gnaeus Pompeius Magnus,217A-220A,2,Gaius Iulius Caesar,221A-225A,2,"The decisive battle of Caesar's Civil War saw him square off against his old ally Pompey the Great. Knowing he would lose a straightforward clash of arms, Caesar gambled everything on a bold stratagem."
-37,Inkerman,5 November 1854,Russian Empire,217B-220B,1,Anglo-French Alliance,221B-225B,2,"In a dense fog, a massive - but badly coordinated - Russian army launched a surprise attack. As the fog lifted and fresh Allied troops poured in, their desperate, doomed defense improbably turned into a lopsided victory."
-,,,,,,,,,
-9,St. Albans,,,,,,,,
-10,Blore Heath,,,,,,,,
-11,,,,,,,,,
-12,,,,,,,,,
-13,,,,,,,,,
-14,,,,,,,,,
-15,,,,,,,,,
-16,,,,,,,,,
-,,,,,,,,,
-17,Chaeronea,2 August 338 BCE,,,,,,,
-18,,,,,,,,,
-19,,,,,,,,,
-20,,,,,,,,,
-21,,,,,,,,,
-22,,,,,,,,,
-23,,,,,,,,,
\ No newline at end of file +expansion,number,name,date,player1,cards1,morale1,player2,cards2,morale2,rule,rule_text,lore_text
+Table Battles,1,White Mountain,8 November 1620,The Bohemian Revolt,7A-10A,4,Imperials & Catholic League,1A-6A,2,,,"A strong defensive position is squandered by the hapless rebel leadership, effectively ending the Bohemian Revolt. Incredibly, the war it ignited would continue on, engulfing most of Europe for three decades. A simple battle to get your feet wet."
+Table Battles,2,Marston Moor,2 July 1644,Royalists,11A-17A,2,Parliament & Covenanters,18A-24A,3,,,A letter from King Charles convinced Prince Rupert of the Rhine that he ought to fight a much larger army. Parliament won a lopsided victory. Only the stubborn stand of the Whitecoats prevented total disaster. This has more moving parts than the White Mountain scenario.
+Table Battles,3,The Plains of Abraham,13 September 1759,British,25A-28A,0,French,29A-32A,0,rout_3_1,"To win, the British must Rout all 3 French cards without losing any of their own. If the French Rout a single card, they win (even if they lose their last card when doing so). ",The battle that won Canada for the British. This battle introduces Counter-attack Reactions.
+Table Battles,4,Bosworth Field,22 August 1485,House of York,33A-35A,2,House of Lancaster (Tudor),36A-38A,1,,,"The battle that ended the Wars of the Roses, and saw the ascendancy of the Tudors. This small and curious scenario gives you a peek at the Absorb reaction and introduces Command actions, turning on the timely arrival of fresh troops."
+Table Battles,5,Malplaquet,11 September 1709,French,39A-42A,2,The Grand Alliance,1B-6B,3,,,"The Grand Alliance broke the French line – but paid for it with heavy losses. French commander Villars wrote to the king after the battle: ""If it pleases God to give your majesty's enemies another such victory, they are ruined."""
+Table Battles,6,Ivry,14 March 1590,Royalists,7B-13B,4,The Catholic (Holy) League,14B-20B,4,,,"Henri IV defeated his Catholic opposition, thanks in part to enemy mercenaries who were sympathetic to his cause. It wasn't enough to win over Paris; his rule would not be accepted until he converted. This is a tricky scenario – a dance of screens."
+Table Battles,7,The Dunes,14 June 1658,French & English,21B-28B,2,"Spanish, French & English",29B-35B,3,,,"Complicated politics saw French and English troops on both sides of this battlefield, widely admired as Turenne's masterpiece. You will need to master all three Reaction types to triumph here."
+Table Battles,8,Brooklyn Heights,27 August 1776,Colonials,39B-42B,1,British & Their Vile Hessians,36B-38B,1,,,"A diversionary attack by Grant disguised Clinton's advance on the Patriot flank. Outgunned, outmanned, outnumbered and outplanned, they've gotta make an all-out stand – at least until the main body of the army can escape. For experienced players."
+Table Battles,36,Pharsalus,9 August 48 BCE,Gnaeus Pompeius Magnus,217A-220A,2,Gaius Iulius Caesar,221A-225A,2,,,"The decisive battle of Caesar's Civil War saw him square off against his old ally Pompey the Great. Knowing he would lose a straightforward clash of arms, Caesar gambled everything on a bold stratagem."
+Table Battles,37,Inkerman,5 November 1854,Russian Empire,217B-220B,1,Anglo-French Alliance,221B-225B,2,,,"In a dense fog, a massive - but badly coordinated - Russian army launched a surprise attack. As the fog lifted and fresh Allied troops poured in, their desperate, doomed defense improbably turned into a lopsided victory."
+,,,,,,,,,,,,
+Wars of the Roses,9,St. Albans,22 May 1455,House of York,43A-46A,1,House of Lancaster,47A-49A,2,,,
+Wars of the Roses,10,Blore Heath,22 September 1459,House of Lancaster,50A-55A,3,House of York,56A-60A,1,,,
+Wars of the Roses,11,Mortimer's Cross,3 February 1461,House of Lancaster,61A-63A,2,House of York,64A-67A,2,,,
+Wars of the Roses,12,Towton,29 March 1461,House of Lancaster,68A-75A,4,House of York,76A-82A,2,cube_max_8,"Only 8 Morale cubes (the 6 listed above, and the 2 that start on Special Formations) are used for this scenario. Place the other two back in the box.",
+Wars of the Roses,13,Edgecote Moor,26 July 1469,House of York,43B-47B,1,"""Robin"" of Redesdale",48B-51B,1,morale_first_reserve,The first player to bring in their Formation(s) from Reserve gains a second Morale Cube.,
+Wars of the Roses,14,Barnet,14 April 1471,House of Lancaster,52B-56B,1,House of York,57B-62B,2,,,
+Wars of the Roses,15,Tewkesbury,4 May 1471,House of York,63B-67B,2,House of Lancaster,68B-71B,3,,,
+Wars of the Roses,16,Stoke Field,16 June 1487,"An Imposter, Lambert Simnel",72B-75B,3,House of Tudor,76B-82B,1,,,
+,,,,,,,,,,,,
+C3i #32,3201,Gaines's Mill,27 June 1862,Union,83A-87A,2,Confederate,88A-91A,2,,,From C3i #32
+C3i #32,3202,Bouvines,27 July 1214,French,83B-86B,1,Coalition,87B-91B,2,,,From C3i #32
+,,,,,,,,,,,,
+Age of Alexander,17,Chaeronea,2 August 338 BCE,Philip II,92A-96A,1,Greek Alliance,97A-101A,3,,,"If Polyaenus is to be believed (a big if!), Philip isolated the Greek left with a faked retreat, while the teenaged Alexander destroyed the famous Sacred Band of Thebes and smashed the Greek right."
+Age of Alexander,18,The Granicus,May 334 BCE,Various Squabbling Satraps,102A-108A,3,Alexander III,109A-114A,1,,,"Persia's light cavalry is no match for our boy's infantry and Companions, and it doesn't help the Persian cause that no one is really in charge. About the only thing they have going for them is they're on the other side of a river. Will it be enough?"
+Age of Alexander,19,Issus,5 November 333 BCE,Darius III,115A-121A,3,Alexander III,122A-129A,1,,,"Darius had a numerical advantage – how much exactly is impossible to say – but most of his troops were ineffectual light infantry that weren't actually engaged. Both sides concentrated their strength on their right, and it was a race to see which side's left would collapse first."
+Age of Alexander,20,Gaugamela,1 October 331 BCE,Alexander III,130A-135A,1,Darius III,92B-100B,4,,,"Numbering somewhere between 100,000 and one million (!), Darius's army vastly outnumbered Alexander's. But he was still trying to fight the Macedonians with Persian methods, and after some hard fighting, Alexander broke the Persian left."
+Age of Alexander,21,The Hydaspes,May 326 BCE,Alexander III,101B-107B,1,Porus,108B-113B,3,,,"Crossing the river with a small part of his army, Alexander was initially outnumbered, and the enemy's fearsome elephants threatened to break the phalanx. But daring and complicated maneuvers threw the Indian army into disarray, securing victory for Alexander in his last major battle."
+Age of Alexander,22,Gabiene,316 BCE,Eumenes,114B-119B,2,Antigonus,120B-123B,2,,,"One of the many battles fought by Alexander's successors (the Diadochi), this one proved tactically inconclusive. But the capture of Eumenes's baggage was enough for his Silver Shields to turn him over to Antigonus for execution."
+Age of Alexander,23,Ipsus,301 BCE,Antigonus,124B-129B,2,Seleucus,130B-135B,2,,,"Like Gabiene and many other battles from the Wars of the Diadochi, this battle saw two armies that were mostly identical in structure and tactics. And like many ancient battles, the death of a single man, the enemy commander (in this case Antigonus), was sufficient to secure victory."
+,,,,,,,,,,,,
+Gettysburg,24,,,,,,,,,,,
+Gettysburg,25,,,,,,,,,,,
+Gettysburg,26,,,,,,,,,,,
+Gettysburg,27,,,,,,,,,,,
+Gettysburg,28,,,,,,,,,,,
+Gettysburg,29,,,,,,,,,,,
+Gettysburg,30,,,,,,,,,,,
+Gettysburg,31,,,,,,,,,,,
+Gettysburg,32,,,,,,,,,,,
+,,,,,,,,,,,,
+English Civil War,,,,,,,,,,,,
+,,,,,,,,,,,,
+Grand Alliance,,,,,,,,,,,,
+,,,,,,,,,,,,
+Chuckles,,,,,,,,,,,,
\ No newline at end of file |