summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorTor Andersson <tor@ccxvii.net>2023-11-22 01:55:38 +0100
committerTor Andersson <tor@ccxvii.net>2024-01-08 16:36:47 +0100
commitb2c68b84481e4393fd13d78184318bbe22ff427c (patch)
tree214a3baf9e01ea171d69331355b72ab360753eda /tools
parent95b90a9b4c21d6fd0805177d5193a8a62fa217ad (diff)
downloadtable-battles-b2c68b84481e4393fd13d78184318bbe22ff427c.tar.gz
lotsa stuff
Diffstat (limited to 'tools')
-rw-r--r--tools/cards.csv666
-rw-r--r--tools/download.sh4
-rw-r--r--tools/gendata.js253
-rw-r--r--tools/scenarios.csv75
4 files changed, 615 insertions, 383 deletions
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">&#x2605;</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 &ndash; 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 &ndash; 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 &ndash; 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 &ndash; how much exactly is impossible to say &ndash; 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