summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data.js103
-rw-r--r--play.css208
-rw-r--r--play.js362
-rw-r--r--rules.ts2
-rw-r--r--tools/gendata.js98
-rw-r--r--tools/layout.svg106
6 files changed, 456 insertions, 423 deletions
diff --git a/data.js b/data.js
index 101d847..4232912 100644
--- a/data.js
+++ b/data.js
@@ -74,7 +74,7 @@ locales:[
{"name":"York","type":"city","region":"England","adjacent":[1,47,49,56,57],"highways":[1,49],"roads":[56,57],"paths":[47],"not_paths":[1,49,56,57],"box":{"x":705,"y":625,"w":58,"h":64}},
{"name":"Calais","type":"calais","region":"England","adjacent":[],"highways":[],"roads":[],"paths":[],"not_paths":[],"box":{"x":1137,"y":1411,"w":63,"h":58}},
{"name":"France","type":"exile_box","region":null,"adjacent":[],"highways":[],"roads":[],"paths":[],"not_paths":[],"box":{"x":888,"y":1428,"w":113,"h":132}},
-{"name":"Scotland","type":"exile_box","region":null,"adjacent":[],"highways":[],"roads":[],"paths":[0,4],"not_paths":[],"box":{"x":448,"y":277,"w":113,"h":132}},
+{"name":"Scotland","type":"exile_box","region":null,"adjacent":[],"highways":[],"roads":[],"paths":[0,4],"not_paths":[],"box":{"x":449,"y":277,"w":113,"h":132}},
{"name":"Ireland","type":"exile_box","region":null,"adjacent":[],"highways":[],"roads":[],"paths":[],"not_paths":[],"box":{"x":48,"y":950,"w":113,"h":132}},
{"name":"Burgundy","type":"exile_box","region":null,"adjacent":[],"highways":[],"roads":[],"paths":[],"not_paths":[],"box":{"x":993,"y":684,"w":113,"h":132}},
{"name":"Scarborough","type":"town","region":"North","adjacent":[1,50],"highways":[],"roads":[1,50],"paths":[],"not_paths":[1,50],"box":{"x":809,"y":546,"w":50,"h":40}},
@@ -177,25 +177,25 @@ lords:[
{"side":"Lancaster","name":"Warwick L","short_name":"Warwick","full_name":"Richard Neville","title":"Earl of Warwick","seat":51,"marshal":1,"influence":5,"lordship":3,"command":2,"valour":2,"forces":{"retinue":1,"men_at_arms":3,"longbowmen":3},"assets":{"cart":2,"prov":2,"coin":2},"ships":2,"id":"lord_warwick_l"},
],
vassals:[
-{"service":3,"name":"Westmoreland","seat":2,"influence":0},
-{"service":1,"name":"Stanley","seat":44,"influence":0},
-{"service":1,"name":"Dudley","seat":42,"influence":0},
-{"service":2,"name":"Shrewsbury","seat":10,"influence":-1},
-{"service":3,"name":"Worcester","seat":46,"influence":0},
-{"service":2,"name":"Oxford","seat":28,"influence":0},
-{"service":1,"name":"Essex","seat":31,"influence":0},
-{"service":3,"name":"Suffolk","seat":35,"influence":1},
-{"service":3,"name":"Fauconberg","seat":17,"influence":2},
-{"service":1,"name":"Norfolk","seat":14,"influence":0},
-{"service":2,"name":"Devon","seat":21,"influence":-1},
-{"service":1,"name":"Bonville","seat":23,"influence":1},
-{"service":1,"name":"Beaumont","seat":49,"influence":-2},
-{"service":0,"name":"Trollope","seat":-1,"influence":0,"capability":"Andrew Trollope"},
-{"service":0,"name":"Clifford","seat":-1,"influence":0,"capability":"My father's blood"},
-{"service":0,"name":"Edward","seat":-1,"influence":0,"capability":"Edward"},
-{"service":0,"name":"Thomas Stanley","seat":-1,"influence":0,"capability":"Thomas Stanley"},
-{"service":0,"name":"Montagu","seat":-1,"influence":0,"capability":"Alice Montagu"},
-{"service":0,"name":"Hastings","seat":-1,"influence":0,"capability":"Hastings"},
+{"service":3,"name":"Westmoreland","seat":2,"influence":0,"box":{"x":598,"y":488,"w":27,"h":30}},
+{"service":1,"name":"Stanley","seat":44,"influence":0,"box":{"x":631,"y":862,"w":27,"h":30}},
+{"service":1,"name":"Dudley","seat":42,"influence":0,"box":{"x":727,"y":921,"w":27,"h":30}},
+{"service":2,"name":"Shrewsbury","seat":10,"influence":-1,"box":{"x":480,"y":900,"w":27,"h":30}},
+{"service":3,"name":"Worcester","seat":46,"influence":0,"box":{"x":621,"y":1014,"w":27,"h":30}},
+{"service":2,"name":"Oxford","seat":28,"influence":0,"box":{"x":772,"y":1132,"w":27,"h":30}},
+{"service":1,"name":"Essex","seat":31,"influence":0,"box":{"x":959,"y":1103,"w":27,"h":30}},
+{"service":3,"name":"Suffolk","seat":35,"influence":1,"box":{"x":1161,"y":1043,"w":27,"h":30}},
+{"service":3,"name":"Fauconberg","seat":17,"influence":2,"box":{"x":1095,"y":1297,"w":27,"h":30}},
+{"service":1,"name":"Norfolk","seat":14,"influence":0,"box":{"x":848,"y":1353,"w":27,"h":30}},
+{"service":2,"name":"Devon","seat":21,"influence":-1,"box":{"x":406,"y":1400,"w":27,"h":30}},
+{"service":1,"name":"Bonville","seat":23,"influence":1,"box":{"x":174,"y":1377,"w":27,"h":30}},
+{"service":1,"name":"Beaumont","seat":49,"influence":-2,"box":{"x":753,"y":787,"w":27,"h":30}},
+{"service":0,"name":"Trollope","seat":-1,"influence":0,"capability":"Andrew Trollope","box":null},
+{"service":0,"name":"Clifford","seat":-1,"influence":0,"capability":"My father's blood","box":null},
+{"service":0,"name":"Edward","seat":-1,"influence":0,"capability":"Edward","box":null},
+{"service":0,"name":"Thomas Stanley","seat":-1,"influence":0,"capability":"Thomas Stanley","box":null},
+{"service":0,"name":"Montagu","seat":-1,"influence":0,"capability":"Alice Montagu","box":null},
+{"service":0,"name":"Hastings","seat":-1,"influence":0,"capability":"Hastings","box":null},
],
cards:[
{"name":"Y1","event":"Leeward Battle Line","roses":0,"when":"hold","capability":"Culverins and falconets","lords":[0,1,2,3,4,5,6,7,8,9,10,11,12,13]},
@@ -274,49 +274,34 @@ cards:[
{"name":"L37","event":"The Earl of Richmond","roses":3,"when":"this_levy","capability":"Madame La Grande","lords":[23,24,25,26]},
],
seat:[
-{"name":"seat york lord_york","box":{"x":908,"y":937,"w":50,"h":50}},
-{"name":"seat york lord_march","box":{"x":435,"y":955,"w":50,"h":50}},
-{"name":"seat york lord_edward_iv","box":{"x":899,"y":1149,"w":50,"h":50}},
-{"name":"seat york lord_salisbury","box":{"x":653,"y":643,"w":50,"h":50}},
-{"name":"seat york lord_rutland","box":{"x":1096,"y":1189,"w":50,"h":50}},
-{"name":"seat york lord_pembroke","box":{"x":139,"y":1106,"w":50,"h":50}},
-{"name":"seat york lord_devon","box":{"x":315,"y":1353,"w":50,"h":50}},
-{"name":"seat york lord_northumberland_y1","box":{"x":391,"y":423,"w":50,"h":50}},
-{"name":"seat york lord_northumberland_y2","box":{"x":391,"y":423,"w":50,"h":50}},
-{"name":"seat york lord_gloucester_1","box":{"x":604,"y":1074,"w":50,"h":50}},
-{"name":"seat york lord_gloucester_2","box":{"x":933,"y":1158,"w":50,"h":50}},
-{"name":"seat york lord_richard_iii","box":{"x":933,"y":1158,"w":50,"h":50}},
+{"name":"seat york lord_york","box":{"x":906,"y":937,"w":50,"h":50}},
+{"name":"seat york lord_march","box":{"x":427,"y":969,"w":50,"h":50}},
+{"name":"seat york lord_edward_iv","box":{"x":929,"y":1164,"w":50,"h":50}},
+{"name":"seat york lord_salisbury","box":{"x":770,"y":636,"w":50,"h":50}},
+{"name":"seat york lord_rutland","box":{"x":1125,"y":1214,"w":50,"h":50}},
+{"name":"seat york lord_pembroke","box":{"x":132,"y":1095,"w":50,"h":50}},
+{"name":"seat york lord_devon","box":{"x":359,"y":1318,"w":50,"h":50}},
+{"name":"seat york lord_northumberland_y1","box":{"x":391,"y":431,"w":50,"h":50}},
+{"name":"seat york lord_northumberland_y2","box":{"x":391,"y":431,"w":50,"h":50}},
+{"name":"seat york lord_gloucester_1","box":{"x":609,"y":1074,"w":50,"h":50}},
+{"name":"seat york lord_gloucester_2","box":{"x":930,"y":1165,"w":50,"h":50}},
+{"name":"seat york lord_richard_iii","box":{"x":930,"y":1165,"w":50,"h":50}},
{"name":"seat york lord_norfolk","box":{"x":795,"y":1398,"w":50,"h":50}},
{"name":"seat york lord_warwick_y","box":{"x":1150,"y":1349,"w":50,"h":50}},
-{"name":"seat lancaster lord_henry_vi","box":{"x":840,"y":1168,"w":50,"h":50}},
-{"name":"seat lancaster lord_margaret","box":{"x":847,"y":1153,"w":50,"h":50}},
-{"name":"seat lancaster lord_somerset_1","box":{"x":457,"y":1275,"w":50,"h":50}},
-{"name":"seat lancaster lord_somerset_2","box":{"x":457,"y":1275,"w":50,"h":50}},
-{"name":"seat lancaster lord_exeter_1","box":{"x":345,"y":1329,"w":50,"h":50}},
-{"name":"seat lancaster lord_exeter_2","box":{"x":345,"y":1329,"w":50,"h":50}},
+{"name":"seat lancaster lord_henry_vi","box":{"x":865,"y":1166,"w":50,"h":50}},
+{"name":"seat lancaster lord_margaret","box":{"x":864,"y":1166,"w":50,"h":50}},
+{"name":"seat lancaster lord_somerset_1","box":{"x":453,"y":1277,"w":50,"h":50}},
+{"name":"seat lancaster lord_somerset_2","box":{"x":452,"y":1276,"w":50,"h":50}},
+{"name":"seat lancaster lord_exeter_1","box":{"x":300,"y":1333,"w":50,"h":50}},
+{"name":"seat lancaster lord_exeter_2","box":{"x":300,"y":1333,"w":50,"h":50}},
{"name":"seat lancaster lord_buckingham","box":{"x":714,"y":975,"w":50,"h":50}},
-{"name":"seat lancaster lord_northumberland_l","box":{"x":392,"y":422,"w":50,"h":50}},
-{"name":"seat lancaster lord_clarence","box":{"x":656,"y":613,"w":50,"h":50}},
-{"name":"seat lancaster lord_jasper_tudor_1","box":{"x":192,"y":1077,"w":50,"h":50}},
-{"name":"seat lancaster lord_jasper_tudor_2","box":{"x":340,"y":926,"w":50,"h":50}},
-{"name":"seat lancaster lord_henry_tudor","box":{"x":831,"y":1186,"w":50,"h":50}},
-{"name":"seat lancaster lord_oxford","box":{"x":692,"y":1085,"w":50,"h":50}},
+{"name":"seat lancaster lord_northumberland_l","box":{"x":392,"y":430,"w":50,"h":50}},
+{"name":"seat lancaster lord_clarence","box":{"x":650,"y":637,"w":50,"h":50}},
+{"name":"seat lancaster lord_jasper_tudor_1","box":{"x":190,"y":1066,"w":50,"h":50}},
+{"name":"seat lancaster lord_jasper_tudor_2","box":{"x":346,"y":921,"w":50,"h":50}},
+{"name":"seat lancaster lord_henry_tudor","box":{"x":864,"y":1166,"w":50,"h":50}},
+{"name":"seat lancaster lord_oxford","box":{"x":678,"y":1078,"w":50,"h":50}},
{"name":"seat lancaster lord_warwick_l","box":{"x":1150,"y":1350,"w":50,"h":50}},
],
-vassalbox:[
-{"name":"vassal vassal_westmoreland","box":{"x":598,"y":488,"w":27,"h":30}},
-{"name":"vassal vassal_stanley","box":{"x":631,"y":862,"w":27,"h":30}},
-{"name":"vassal vassal_dudley","box":{"x":727,"y":921,"w":27,"h":30}},
-{"name":"vassal vassal_shrewsbury","box":{"x":480,"y":900,"w":27,"h":30}},
-{"name":"vassal vassal_worcester","box":{"x":621,"y":1014,"w":27,"h":30}},
-{"name":"vassal vassal_oxford","box":{"x":772,"y":1132,"w":27,"h":30}},
-{"name":"vassal vassal_essex","box":{"x":959,"y":1103,"w":27,"h":30}},
-{"name":"vassal vassal_suffolk","box":{"x":1161,"y":1043,"w":27,"h":30}},
-{"name":"vassal vassal_fauconberg","box":{"x":1095,"y":1297,"w":27,"h":30}},
-{"name":"vassal vassal_norfolk","box":{"x":848,"y":1353,"w":27,"h":30}},
-{"name":"vassal vassal_devon","box":{"x":406,"y":1400,"w":27,"h":30}},
-{"name":"vassal vassal_bonville","box":{"x":174,"y":1377,"w":27,"h":30}},
-{"name":"vassal vassal_beaumont","box":{"x":753,"y":787,"w":27,"h":30}},
-],
}
if (typeof module !== 'undefined') module.exports = data
diff --git a/play.css b/play.css
index 75f123d..0fa27b3 100644
--- a/play.css
+++ b/play.css
@@ -247,6 +247,11 @@ body.Lancaster #plan_actions .york { display: none }
position: absolute;
}
+.marker.exile_rose {
+ border-radius: 50%;
+ position: absolute;
+}
+
.marker.depexh { position: absolute; border-radius: 0px; }
.marker.depleted { position: absolute; border-radius: 0px; }
.marker.exhausted { position: absolute; border-radius: 0px; }
@@ -255,22 +260,49 @@ body.Lancaster #plan_actions .york { display: none }
box-sizing: border-box;
position: absolute;
border: 3px solid transparent;
+ border-radius: 50% 50% 0 0;
}
-.locale.town { border-radius: 50% }
-.locale.city { border-radius: 50% }
-.locale.fortress { border-radius: 0 0 0 0 }
-.locale.calais { border-radius: 0 0 0 0 }
+.locale.fortress { border-radius: 0% 0% 0 0 }
.locale.sea { border-radius: 50% }
-.locale.exile { border-radius: 0 0 50% 50% }
+.locale.exile_box { border-radius: 0 0 50% 50% }
+
+/*
+.locale.action.south { background-color: steelblue }
+.locale.action.north { background-color: darkgoldenrod }
+.locale.action.wales { background-color: olivedrab }
+.locale.action.england { background-color: gray }
+*/
+
+.locale.action.south { background-color: #4682b480 }
+.locale.action.north { background-color: #b8860b80 }
+.locale.action.wales { background-color: #6b8e2380 }
+.locale.action.england { background-color: #80808080 }
+.locale.action.sea { background-color: #b0c4de80 }
+
+.locale.selected.south { background-color: #4682b480 }
+.locale.selected.north { background-color: #b8860b80 }
+.locale.selected.wales { background-color: #6b8e2380 }
+.locale.selected.england { background-color: #80808080 }
+.locale.selected.sea { background-color: #b0c4de80 }
+
+.locale.action.south { border-color: powderblue }
+.locale.action.north { border-color: navajowhite }
+.locale.action.wales { border-color: palegreen }
+.locale.action.england { border-color: whitesmoke }
+.locale.action.sea { border-color: lightblue }
+
+.locale.action.exile_box.scotland { border-color: lemonchiffon }
+.locale.action.exile_box.burgundy { border-color: wheat }
+.locale.action.exile_box.france { border-color: lightblue }
+.locale.action.exile_box.ireland { border-color: lightgreen }
.locale.action {
border-color: white;
- z-index: 100;
}
.locale.selected {
- border-color: cyan;
+ border-color: yellow;
}
.locale.tip {
@@ -332,11 +364,9 @@ body.Lancaster #plan_actions .york { display: none }
drop-shadow(-2px 0px 0px gold);
}
-.cylinder > .exile {
+.marker.exile {
position: absolute;
- top: 6px;
- left: 20px;
- transform: rotate(45deg);
+ /* transform: rotate(45deg); */
}
.marker.seat {
@@ -374,7 +404,7 @@ body.Lancaster #plan_actions .york { display: none }
.unit.shape {
width: 43px;
height: 35px;
- margin: -26px 0 0px 0px;
+ margin: -20px 0 0px 0px;
}
.unit.men_at_arms { background-image: url(images/unit_men_at_arms.svg) }
@@ -383,6 +413,19 @@ body.Lancaster #plan_actions .york { display: none }
.unit.mercenaries { background-image: url(images/unit_mercenaries.svg) }
.unit.burgundians { background-image: url(images/unit_handgunners.svg) }
+/*
+.men_at_arms + .longbowmen { margin-right: 0; }
+.men_at_arms + .militia { margin-right: 0; }
+.men_at_arms + .mercenaries { margin-right: 0; }
+.men_at_arms + .burgundians { margin-right: 0; }
+.longbowmen + .militia { margin-right: 0; }
+.longbowmen + .mercenaries { margin-right: 0; }
+.longbowmen + .burgundians { margin-right: 0; }
+.militia + .mercenaries { margin-right: 0; }
+.militia + .burgundians { margin-right: 0; }
+.mercenaries + .burgundians { margin-right: 0; }
+*/
+
.unit.retinue {
border: 2px solid gray;
width: 46px;
@@ -528,10 +571,10 @@ body.shift .mat .capabilities {
.mat .board .troops {
position: absolute;
- top: 80px;
+ top: 50px;
right: 0px;
width: 170px;
- height: 60px;
+ height: 90px;
display: flex;
flex-wrap: wrap;
flex-direction: column-reverse;
@@ -542,10 +585,10 @@ body.shift .mat .capabilities {
.mat .board .routed_troops {
position: absolute;
- top: 170px;
+ top: 145px;
right: 0px;
width: 170px;
- height: 60px;
+ height: 90px;
display: flex;
flex-wrap: wrap;
flex-direction: column-reverse;
@@ -701,8 +744,8 @@ body.shift .mat .capabilities {
.marker.feed.x3 { background-image: url(images/feed_x3.png) }
.marker.fled { background-image: url(images/fled.png) }
.marker.exile { background-image: url(images/exile.png) }
-.marker.exile_lancaster { background-image: url(images/exile_lancaster.png) }
-.marker.exile_york { background-image: url(images/exile_york.png) }
+.marker.exile_rose.lancaster { background-image: url(images/exile_lancaster.png) }
+.marker.exile_rose.york { background-image: url(images/exile_york.png) }
.marker.exhausted { background-image: url(images/exhausted.png) }
.marker.end { background-image: url(images/end.png) }
.marker.depleted { background-image: url(images/depleted.png) }
@@ -844,70 +887,71 @@ body.shift .mat .capabilities {
border-color: hsl(37,28%,46%) hsl(37,28%,66%) hsl(37,28%,66%) hsl(37,28%,46%);
}
-.mat .board { background-color: hsl(37,28%,56%); border-color: hsl(37,28%,66%) hsl(37,28%,46%) hsl(37,28%,46%) hsl(37,28%,66%); box-shadow: 0 0 0 1px hsl(37,28%,19%), 0px 1px 4px #0008; }
-.marker.battle { background-color: hsl(34,16%,49%); border-color: hsl(34,16%,59%) hsl(34,16%,39%) hsl(34,16%,39%) hsl(34,16%,59%); box-shadow: 0 0 0 1px hsl(34,16%,16%), 0px 1px 4px #0008; }
-.marker.campaign { background-color: hsl(198,33%,38%); border-color: hsl(198,33%,48%) hsl(198,33%,28%) hsl(198,33%,28%) hsl(198,33%,48%); box-shadow: 0 0 0 1px hsl(198,33%,12%), 0px 1px 4px #0008; }
-.marker.levy { background-color: hsl(33,35%,44%); border-color: hsl(33,35%,54%) hsl(33,35%,34%) hsl(33,35%,34%) hsl(33,35%,54%); box-shadow: 0 0 0 1px hsl(33,35%,14%), 0px 1px 4px #0008; }
-.asset.cart.x1 { background-color: hsl(36,52%,70%); border-color: hsl(36,52%,80%) hsl(36,52%,60%) hsl(36,52%,60%) hsl(36,52%,80%); box-shadow: 0 0 0 1px hsl(36,52%,23%), 0px 1px 4px #0008; }
-.asset.cart.x2 { background-color: hsl(34,51%,64%); border-color: hsl(34,51%,74%) hsl(34,51%,54%) hsl(34,51%,54%) hsl(34,51%,74%); box-shadow: 0 0 0 1px hsl(34,51%,21%), 0px 1px 4px #0008; }
-.asset.cart.x3 { background-color: hsl(34,47%,56%); border-color: hsl(34,47%,66%) hsl(34,47%,46%) hsl(34,47%,46%) hsl(34,47%,66%); box-shadow: 0 0 0 1px hsl(34,47%,19%), 0px 1px 4px #0008; }
-.asset.cart.x4 { background-color: hsl(26,32%,50%); border-color: hsl(26,32%,60%) hsl(26,32%,40%) hsl(26,32%,40%) hsl(26,32%,60%); box-shadow: 0 0 0 1px hsl(26,32%,16%), 0px 1px 4px #0008; }
-.asset.coin.x1 { background-color: hsl(160,3%,83%); border-color: hsl(160,3%,93%) hsl(160,3%,73%) hsl(160,3%,73%) hsl(160,3%,93%); box-shadow: 0 0 0 1px hsl(160,3%,27%), 0px 1px 4px #0008; }
-.asset.coin.x2 { background-color: hsl(120,1%,74%); border-color: hsl(120,1%,84%) hsl(120,1%,64%) hsl(120,1%,64%) hsl(120,1%,84%); box-shadow: 0 0 0 1px hsl(120,1%,24%), 0px 1px 4px #0008; }
-.asset.coin.x3 { background-color: hsl(300,1%,65%); border-color: hsl(300,1%,75%) hsl(300,1%,55%) hsl(300,1%,55%) hsl(300,1%,75%); box-shadow: 0 0 0 1px hsl(300,1%,21%), 0px 1px 4px #0008; }
-.asset.coin.x4 { background-color: hsl(0,0%,56%); border-color: hsl(0,0%,66%) hsl(0,0%,46%) hsl(0,0%,46%) hsl(0,0%,66%); box-shadow: 0 0 0 1px hsl(0,0%,19%), 0px 1px 4px #0008; }
-.asset.prov.x1 { background-color: hsl(44,100%,79%); border-color: hsl(44,100%,89%) hsl(44,100%,69%) hsl(44,100%,69%) hsl(44,100%,89%); box-shadow: 0 0 0 1px hsl(44,100%,26%), 0px 1px 4px #0008; }
-.asset.prov.x2 { background-color: hsl(42,100%,75%); border-color: hsl(42,100%,85%) hsl(42,100%,65%) hsl(42,100%,65%) hsl(42,100%,85%); box-shadow: 0 0 0 1px hsl(42,100%,25%), 0px 1px 4px #0008; }
-.asset.prov.x3 { background-color: hsl(40,100%,70%); border-color: hsl(40,100%,80%) hsl(40,100%,60%) hsl(40,100%,60%) hsl(40,100%,80%); box-shadow: 0 0 0 1px hsl(40,100%,23%), 0px 1px 4px #0008; }
-.asset.prov.x4 { background-color: hsl(39,82%,63%); border-color: hsl(39,82%,73%) hsl(39,82%,53%) hsl(39,82%,53%) hsl(39,82%,73%); box-shadow: 0 0 0 1px hsl(39,82%,21%), 0px 1px 4px #0008; }
-.asset.ship.x1 { background-color: hsl(209,61%,74%); border-color: hsl(209,61%,84%) hsl(209,61%,64%) hsl(209,61%,64%) hsl(209,61%,84%); box-shadow: 0 0 0 1px hsl(209,61%,24%), 0px 1px 4px #0008; }
-.asset.ship.x2 { background-color: hsl(205,52%,60%); border-color: hsl(205,52%,70%) hsl(205,52%,50%) hsl(205,52%,50%) hsl(205,52%,70%); box-shadow: 0 0 0 1px hsl(205,52%,20%), 0px 1px 4px #0008; }
-.unit.retinue { background-color: hsl(0,0%,67%); border-color: hsl(0,0%,77%) hsl(0,0%,57%) hsl(0,0%,57%) hsl(0,0%,77%); box-shadow: 0 0 0 1px hsl(0,0%,22%), 0px 1px 4px #0008; }
-.marker.cities.york { background-color: hsl(0,0%,96%); border-color: hsl(0,0%,100%) hsl(0,0%,86%) hsl(0,0%,86%) hsl(0,0%,100%); box-shadow: 0 0 0 1px hsl(0,0%,32%), 0px 1px 4px #0008; }
-.marker.fortresses.york { background-color: hsl(0,0%,96%); border-color: hsl(0,0%,100%) hsl(0,0%,86%) hsl(0,0%,86%) hsl(0,0%,100%); box-shadow: 0 0 0 1px hsl(0,0%,32%), 0px 1px 4px #0008; }
-.marker.ip.york { background-color: hsl(0,0%,96%); border-color: hsl(0,0%,100%) hsl(0,0%,86%) hsl(0,0%,86%) hsl(0,0%,100%); box-shadow: 0 0 0 1px hsl(0,0%,32%), 0px 1px 4px #0008; }
-.marker.towns.york { background-color: hsl(0,0%,96%); border-color: hsl(0,0%,100%) hsl(0,0%,86%) hsl(0,0%,86%) hsl(0,0%,100%); box-shadow: 0 0 0 1px hsl(0,0%,32%), 0px 1px 4px #0008; }
-.marker.cities.lancaster { background-color: hsl(359,85%,53%); border-color: hsl(359,85%,63%) hsl(359,85%,43%) hsl(359,85%,43%) hsl(359,85%,63%); box-shadow: 0 0 0 1px hsl(359,85%,17%), 0px 1px 4px #0008; }
-.marker.fortresses.lancaster { background-color: hsl(359,85%,53%); border-color: hsl(359,85%,63%) hsl(359,85%,43%) hsl(359,85%,43%) hsl(359,85%,63%); box-shadow: 0 0 0 1px hsl(359,85%,17%), 0px 1px 4px #0008; }
-.marker.ip.lancaster { background-color: hsl(359,85%,53%); border-color: hsl(359,85%,63%) hsl(359,85%,43%) hsl(359,85%,43%) hsl(359,85%,63%); box-shadow: 0 0 0 1px hsl(359,85%,17%), 0px 1px 4px #0008; }
-.marker.towns.lancaster { background-color: hsl(359,85%,53%); border-color: hsl(359,85%,63%) hsl(359,85%,43%) hsl(359,85%,43%) hsl(359,85%,63%); box-shadow: 0 0 0 1px hsl(359,85%,17%), 0px 1px 4px #0008; }
-.marker.depleted { background-color: hsl(204,6%,85%); border-color: hsl(204,6%,95%) hsl(204,6%,75%) hsl(204,6%,75%) hsl(204,6%,95%); box-shadow: 0 0 0 1px hsl(204,6%,28%), 0px 1px 4px #0008; }
-.marker.end { background-color: hsl(33,35%,44%); border-color: hsl(33,35%,54%) hsl(33,35%,34%) hsl(33,35%,34%) hsl(33,35%,54%); box-shadow: 0 0 0 1px hsl(33,35%,14%), 0px 1px 4px #0008; }
-.marker.exhausted { background-color: hsl(283,4%,31%); border-color: hsl(283,4%,41%) hsl(283,4%,21%) hsl(283,4%,21%) hsl(283,4%,41%); box-shadow: 0 0 0 1px hsl(283,4%,10%), 0px 1px 4px #0008; }
-.marker.exile { background-color: hsl(86,41%,39%); border-color: hsl(86,41%,49%) hsl(86,41%,29%) hsl(86,41%,29%) hsl(86,41%,49%); box-shadow: 0 0 0 1px hsl(86,41%,13%), 0px 1px 4px #0008; }
-.marker.exile.lancaster { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%), 0px 1px 4px #0008; }
-.marker.exile.york { background-color: hsl(217,53%,88%); border-color: hsl(217,53%,98%) hsl(217,53%,78%) hsl(217,53%,78%) hsl(217,53%,98%); box-shadow: 0 0 0 1px hsl(217,53%,29%), 0px 1px 4px #0008; }
-.marker.feed.x2 { background-color: hsl(204,100%,37%); border-color: hsl(204,100%,47%) hsl(204,100%,27%) hsl(204,100%,27%) hsl(204,100%,47%); box-shadow: 0 0 0 1px hsl(204,100%,12%), 0px 1px 4px #0008; }
-.marker.feed.x3 { background-color: hsl(200,100%,29%); border-color: hsl(200,100%,39%) hsl(200,100%,19%) hsl(200,100%,19%) hsl(200,100%,39%); box-shadow: 0 0 0 1px hsl(200,100%,9%), 0px 1px 4px #0008; }
-.marker.fled { background-color: hsl(347,47%,4%); border-color: hsl(347,47%,14%) hsl(347,47%,0%) hsl(347,47%,0%) hsl(347,47%,14%); box-shadow: 0 0 0 1px hsl(347,47%,1%), 0px 1px 4px #0008; }
-.marker.hits.lancaster { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%), 0px 1px 4px #0008; }
-.marker.hits.york { background-color: hsl(217,53%,88%); border-color: hsl(217,53%,98%) hsl(217,53%,78%) hsl(217,53%,78%) hsl(217,53%,98%); box-shadow: 0 0 0 1px hsl(217,53%,29%), 0px 1px 4px #0008; }
-.marker.rose.lancaster { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%), 0px 1px 4px #0008; }
-.marker.rose.york { background-color: hsl(217,53%,88%); border-color: hsl(217,53%,98%) hsl(217,53%,78%) hsl(217,53%,78%) hsl(217,53%,98%); box-shadow: 0 0 0 1px hsl(217,53%,29%), 0px 1px 4px #0008; }
-.marker.source { background-color: hsl(41,30%,71%); border-color: hsl(41,30%,81%) hsl(41,30%,61%) hsl(41,30%,61%) hsl(41,30%,81%); box-shadow: 0 0 0 1px hsl(41,30%,23%), 0px 1px 4px #0008; }
-.marker.valour { background-color: hsl(288,29%,51%); border-color: hsl(288,29%,61%) hsl(288,29%,41%) hsl(288,29%,41%) hsl(288,29%,61%); box-shadow: 0 0 0 1px hsl(288,29%,17%), 0px 1px 4px #0008; }
-.marker.victory_check { background-color: hsl(51,97%,53%); border-color: hsl(51,97%,63%) hsl(51,97%,43%) hsl(51,97%,43%) hsl(51,97%,63%); box-shadow: 0 0 0 1px hsl(51,97%,18%), 0px 1px 4px #0008; }
-.marker.moved_fought { background-color: hsl(204,100%,37%); border-color: hsl(204,100%,47%) hsl(204,100%,27%) hsl(204,100%,27%) hsl(204,100%,47%); box-shadow: 0 0 0 1px hsl(204,100%,12%), 0px 1px 4px #0008; }
-.marker.number.lancaster { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%), 0px 1px 4px #0008; }
-.marker.number.york { background-color: hsl(0,0%,100%); border-color: hsl(0,0%,100%) hsl(0,0%,90%) hsl(0,0%,90%) hsl(0,0%,100%); box-shadow: 0 0 0 1px hsl(0,0%,33%), 0px 1px 4px #0008; }
-.marker.seat.lancaster { background-color: hsl(358,76%,50%); border-color: hsl(358,76%,60%) hsl(358,76%,40%) hsl(358,76%,40%) hsl(358,76%,60%); box-shadow: 0 0 0 1px hsl(358,76%,17%), 0px 1px 4px #0008; }
-.marker.seat.york { background-color: hsl(0,0%,96%); border-color: hsl(0,0%,100%) hsl(0,0%,86%) hsl(0,0%,86%) hsl(0,0%,100%); box-shadow: 0 0 0 1px hsl(0,0%,32%), 0px 1px 4px #0008; }
-.marker.vassal { background-color: hsl(58,34%,73%); border-color: hsl(58,34%,83%) hsl(58,34%,63%) hsl(58,34%,63%) hsl(58,34%,83%); box-shadow: 0 0 0 1px hsl(58,34%,24%), 0px 1px 4px #0008; }
-.marker.vassal.back { background-color: hsl(57,48%,75%); border-color: hsl(57,48%,85%) hsl(57,48%,65%) hsl(57,48%,65%) hsl(57,48%,85%); box-shadow: 0 0 0 1px hsl(57,48%,25%), 0px 1px 4px #0008; }
-.marker.vassal.vassal_hastings { background-color: hsl(217,53%,88%); border-color: hsl(217,53%,98%) hsl(217,53%,78%) hsl(217,53%,78%) hsl(217,53%,98%); box-shadow: 0 0 0 1px hsl(217,53%,29%), 0px 1px 4px #0008; }
-.marker.vassal.vassal_clifford { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%), 0px 1px 4px #0008; }
-.marker.vassal.vassal_edward { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%), 0px 1px 4px #0008; }
-.marker.vassal.vassal_montagu { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%), 0px 1px 4px #0008; }
-.marker.vassal.vassal_thomas_stanley { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%), 0px 1px 4px #0008; }
-.marker.vassal.vassal_trollope { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%), 0px 1px 4px #0008; }
-.unit.vassal { background-color: hsl(58,34%,73%); border-color: hsl(58,34%,83%) hsl(58,34%,63%) hsl(58,34%,63%) hsl(58,34%,83%); box-shadow: 0 0 0 1px hsl(58,34%,24%), 0px 1px 4px #0008; }
-.unit.vassal.back { background-color: hsl(57,48%,75%); border-color: hsl(57,48%,85%) hsl(57,48%,65%) hsl(57,48%,65%) hsl(57,48%,85%); box-shadow: 0 0 0 1px hsl(57,48%,25%), 0px 1px 4px #0008; }
-.unit.vassal.vassal_hastings { background-color: hsl(217,53%,88%); border-color: hsl(217,53%,98%) hsl(217,53%,78%) hsl(217,53%,78%) hsl(217,53%,98%); box-shadow: 0 0 0 1px hsl(217,53%,29%), 0px 1px 4px #0008; }
-.unit.vassal.vassal_clifford { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%), 0px 1px 4px #0008; }
-.unit.vassal.vassal_edward { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%), 0px 1px 4px #0008; }
-.unit.vassal.vassal_montagu { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%), 0px 1px 4px #0008; }
-.unit.vassal.vassal_thomas_stanley { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%), 0px 1px 4px #0008; }
-.unit.vassal.vassal_trollope { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%), 0px 1px 4px #0008; }
+.mat .board { background-color: hsl(37,28%,56%); border-color: hsl(37,28%,66%) hsl(37,28%,46%) hsl(37,28%,46%) hsl(37,28%,66%); box-shadow: 0 0 0 1px hsl(37,28%,19%), 0px 0px 4px #0008; }
+
+.marker.battle { background-color: hsl(34,16%,49%); border-color: hsl(34,16%,59%) hsl(34,16%,39%) hsl(34,16%,39%) hsl(34,16%,59%); box-shadow: 0 0 0 1px hsl(34,16%,16%); }
+.marker.campaign { background-color: hsl(198,33%,38%); border-color: hsl(198,33%,48%) hsl(198,33%,28%) hsl(198,33%,28%) hsl(198,33%,48%); box-shadow: 0 0 0 1px hsl(198,33%,12%); }
+.marker.levy { background-color: hsl(33,35%,44%); border-color: hsl(33,35%,54%) hsl(33,35%,34%) hsl(33,35%,34%) hsl(33,35%,54%); box-shadow: 0 0 0 1px hsl(33,35%,14%); }
+.asset.cart.x1 { background-color: hsl(36,52%,70%); border-color: hsl(36,52%,80%) hsl(36,52%,60%) hsl(36,52%,60%) hsl(36,52%,80%); box-shadow: 0 0 0 1px hsl(36,52%,23%); }
+.asset.cart.x2 { background-color: hsl(34,51%,64%); border-color: hsl(34,51%,74%) hsl(34,51%,54%) hsl(34,51%,54%) hsl(34,51%,74%); box-shadow: 0 0 0 1px hsl(34,51%,21%); }
+.asset.cart.x3 { background-color: hsl(34,47%,56%); border-color: hsl(34,47%,66%) hsl(34,47%,46%) hsl(34,47%,46%) hsl(34,47%,66%); box-shadow: 0 0 0 1px hsl(34,47%,19%); }
+.asset.cart.x4 { background-color: hsl(26,32%,50%); border-color: hsl(26,32%,60%) hsl(26,32%,40%) hsl(26,32%,40%) hsl(26,32%,60%); box-shadow: 0 0 0 1px hsl(26,32%,16%); }
+.asset.coin.x1 { background-color: hsl(160,3%,83%); border-color: hsl(160,3%,93%) hsl(160,3%,73%) hsl(160,3%,73%) hsl(160,3%,93%); box-shadow: 0 0 0 1px hsl(160,3%,27%); }
+.asset.coin.x2 { background-color: hsl(120,1%,74%); border-color: hsl(120,1%,84%) hsl(120,1%,64%) hsl(120,1%,64%) hsl(120,1%,84%); box-shadow: 0 0 0 1px hsl(120,1%,24%); }
+.asset.coin.x3 { background-color: hsl(300,1%,65%); border-color: hsl(300,1%,75%) hsl(300,1%,55%) hsl(300,1%,55%) hsl(300,1%,75%); box-shadow: 0 0 0 1px hsl(300,1%,21%); }
+.asset.coin.x4 { background-color: hsl(0,0%,56%); border-color: hsl(0,0%,66%) hsl(0,0%,46%) hsl(0,0%,46%) hsl(0,0%,66%); box-shadow: 0 0 0 1px hsl(0,0%,19%); }
+.asset.prov.x1 { background-color: hsl(44,100%,79%); border-color: hsl(44,100%,89%) hsl(44,100%,69%) hsl(44,100%,69%) hsl(44,100%,89%); box-shadow: 0 0 0 1px hsl(44,100%,26%); }
+.asset.prov.x2 { background-color: hsl(42,100%,75%); border-color: hsl(42,100%,85%) hsl(42,100%,65%) hsl(42,100%,65%) hsl(42,100%,85%); box-shadow: 0 0 0 1px hsl(42,100%,25%); }
+.asset.prov.x3 { background-color: hsl(40,100%,70%); border-color: hsl(40,100%,80%) hsl(40,100%,60%) hsl(40,100%,60%) hsl(40,100%,80%); box-shadow: 0 0 0 1px hsl(40,100%,23%); }
+.asset.prov.x4 { background-color: hsl(39,82%,63%); border-color: hsl(39,82%,73%) hsl(39,82%,53%) hsl(39,82%,53%) hsl(39,82%,73%); box-shadow: 0 0 0 1px hsl(39,82%,21%); }
+.asset.ship.x1 { background-color: hsl(209,61%,74%); border-color: hsl(209,61%,84%) hsl(209,61%,64%) hsl(209,61%,64%) hsl(209,61%,84%); box-shadow: 0 0 0 1px hsl(209,61%,24%); }
+.asset.ship.x2 { background-color: hsl(205,52%,60%); border-color: hsl(205,52%,70%) hsl(205,52%,50%) hsl(205,52%,50%) hsl(205,52%,70%); box-shadow: 0 0 0 1px hsl(205,52%,20%); }
+.unit.retinue { background-color: hsl(0,0%,67%); border-color: hsl(0,0%,77%) hsl(0,0%,57%) hsl(0,0%,57%) hsl(0,0%,77%); box-shadow: 0 0 0 1px hsl(0,0%,22%); }
+.marker.cities.york { background-color: hsl(0,0%,96%); border-color: hsl(0,0%,100%) hsl(0,0%,86%) hsl(0,0%,86%) hsl(0,0%,100%); box-shadow: 0 0 0 1px hsl(0,0%,32%); }
+.marker.fortresses.york { background-color: hsl(0,0%,96%); border-color: hsl(0,0%,100%) hsl(0,0%,86%) hsl(0,0%,86%) hsl(0,0%,100%); box-shadow: 0 0 0 1px hsl(0,0%,32%); }
+.marker.ip.york { background-color: hsl(0,0%,96%); border-color: hsl(0,0%,100%) hsl(0,0%,86%) hsl(0,0%,86%) hsl(0,0%,100%); box-shadow: 0 0 0 1px hsl(0,0%,32%); }
+.marker.towns.york { background-color: hsl(0,0%,96%); border-color: hsl(0,0%,100%) hsl(0,0%,86%) hsl(0,0%,86%) hsl(0,0%,100%); box-shadow: 0 0 0 1px hsl(0,0%,32%); }
+.marker.cities.lancaster { background-color: hsl(359,85%,53%); border-color: hsl(359,85%,63%) hsl(359,85%,43%) hsl(359,85%,43%) hsl(359,85%,63%); box-shadow: 0 0 0 1px hsl(359,85%,17%); }
+.marker.fortresses.lancaster { background-color: hsl(359,85%,53%); border-color: hsl(359,85%,63%) hsl(359,85%,43%) hsl(359,85%,43%) hsl(359,85%,63%); box-shadow: 0 0 0 1px hsl(359,85%,17%); }
+.marker.ip.lancaster { background-color: hsl(359,85%,53%); border-color: hsl(359,85%,63%) hsl(359,85%,43%) hsl(359,85%,43%) hsl(359,85%,63%); box-shadow: 0 0 0 1px hsl(359,85%,17%); }
+.marker.towns.lancaster { background-color: hsl(359,85%,53%); border-color: hsl(359,85%,63%) hsl(359,85%,43%) hsl(359,85%,43%) hsl(359,85%,63%); box-shadow: 0 0 0 1px hsl(359,85%,17%); }
+.marker.depleted { background-color: hsl(204,6%,85%); border-color: hsl(204,6%,95%) hsl(204,6%,75%) hsl(204,6%,75%) hsl(204,6%,95%); box-shadow: 0 0 0 1px hsl(204,6%,28%); }
+.marker.end { background-color: hsl(33,35%,44%); border-color: hsl(33,35%,54%) hsl(33,35%,34%) hsl(33,35%,34%) hsl(33,35%,54%); box-shadow: 0 0 0 1px hsl(33,35%,14%); }
+.marker.exhausted { background-color: hsl(283,4%,31%); border-color: hsl(283,4%,41%) hsl(283,4%,21%) hsl(283,4%,21%) hsl(283,4%,41%); box-shadow: 0 0 0 1px hsl(283,4%,10%); }
+.marker.exile { background-color: hsl(86,41%,39%); border-color: hsl(86,41%,49%) hsl(86,41%,29%) hsl(86,41%,29%) hsl(86,41%,49%); box-shadow: 0 0 0 1px hsl(86,41%,13%); }
+.marker.exile_rose.lancaster { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%); }
+.marker.exile_rose.york { background-color: hsl(217,53%,88%); border-color: hsl(217,53%,98%) hsl(217,53%,78%) hsl(217,53%,78%) hsl(217,53%,98%); box-shadow: 0 0 0 1px hsl(217,53%,29%); }
+.marker.feed.x2 { background-color: hsl(204,100%,37%); border-color: hsl(204,100%,47%) hsl(204,100%,27%) hsl(204,100%,27%) hsl(204,100%,47%); box-shadow: 0 0 0 1px hsl(204,100%,12%); }
+.marker.feed.x3 { background-color: hsl(200,100%,29%); border-color: hsl(200,100%,39%) hsl(200,100%,19%) hsl(200,100%,19%) hsl(200,100%,39%); box-shadow: 0 0 0 1px hsl(200,100%,9%); }
+.marker.fled { background-color: hsl(347,47%,4%); border-color: hsl(347,47%,14%) hsl(347,47%,0%) hsl(347,47%,0%) hsl(347,47%,14%); box-shadow: 0 0 0 1px hsl(347,47%,1%); }
+.marker.hits.lancaster { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%); }
+.marker.hits.york { background-color: hsl(217,53%,88%); border-color: hsl(217,53%,98%) hsl(217,53%,78%) hsl(217,53%,78%) hsl(217,53%,98%); box-shadow: 0 0 0 1px hsl(217,53%,29%); }
+.marker.rose.lancaster { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%); }
+.marker.rose.york { background-color: hsl(217,53%,88%); border-color: hsl(217,53%,98%) hsl(217,53%,78%) hsl(217,53%,78%) hsl(217,53%,98%); box-shadow: 0 0 0 1px hsl(217,53%,29%); }
+.marker.source { background-color: hsl(41,30%,71%); border-color: hsl(41,30%,81%) hsl(41,30%,61%) hsl(41,30%,61%) hsl(41,30%,81%); box-shadow: 0 0 0 1px hsl(41,30%,23%); }
+.marker.valour { background-color: hsl(288,29%,51%); border-color: hsl(288,29%,61%) hsl(288,29%,41%) hsl(288,29%,41%) hsl(288,29%,61%); box-shadow: 0 0 0 1px hsl(288,29%,17%); }
+.marker.victory_check { background-color: hsl(51,97%,53%); border-color: hsl(51,97%,63%) hsl(51,97%,43%) hsl(51,97%,43%) hsl(51,97%,63%); box-shadow: 0 0 0 1px hsl(51,97%,18%); }
+.marker.moved_fought { background-color: hsl(204,100%,37%); border-color: hsl(204,100%,47%) hsl(204,100%,27%) hsl(204,100%,27%) hsl(204,100%,47%); box-shadow: 0 0 0 1px hsl(204,100%,12%); }
+.marker.number.lancaster { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%); }
+.marker.number.york { background-color: hsl(0,0%,100%); border-color: hsl(0,0%,100%) hsl(0,0%,90%) hsl(0,0%,90%) hsl(0,0%,100%); box-shadow: 0 0 0 1px hsl(0,0%,33%); }
+.marker.seat.lancaster { background-color: hsl(358,76%,50%); border-color: hsl(358,76%,60%) hsl(358,76%,40%) hsl(358,76%,40%) hsl(358,76%,60%); box-shadow: 0 0 0 1px hsl(358,76%,17%); }
+.marker.seat.york { background-color: hsl(0,0%,96%); border-color: hsl(0,0%,100%) hsl(0,0%,86%) hsl(0,0%,86%) hsl(0,0%,100%); box-shadow: 0 0 0 1px hsl(0,0%,32%); }
+.marker.vassal { background-color: hsl(58,34%,73%); border-color: hsl(58,34%,83%) hsl(58,34%,63%) hsl(58,34%,63%) hsl(58,34%,83%); box-shadow: 0 0 0 1px hsl(58,34%,24%); }
+.marker.vassal.back { background-color: hsl(57,48%,75%); border-color: hsl(57,48%,85%) hsl(57,48%,65%) hsl(57,48%,65%) hsl(57,48%,85%); box-shadow: 0 0 0 1px hsl(57,48%,25%); }
+.marker.vassal.vassal_hastings { background-color: hsl(217,53%,88%); border-color: hsl(217,53%,98%) hsl(217,53%,78%) hsl(217,53%,78%) hsl(217,53%,98%); box-shadow: 0 0 0 1px hsl(217,53%,29%); }
+.marker.vassal.vassal_clifford { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%); }
+.marker.vassal.vassal_edward { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%); }
+.marker.vassal.vassal_montagu { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%); }
+.marker.vassal.vassal_thomas_stanley { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%); }
+.marker.vassal.vassal_trollope { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%); }
+.unit.vassal { background-color: hsl(58,34%,73%); border-color: hsl(58,34%,83%) hsl(58,34%,63%) hsl(58,34%,63%) hsl(58,34%,83%); box-shadow: 0 0 0 1px hsl(58,34%,24%); }
+.unit.vassal.back { background-color: hsl(57,48%,75%); border-color: hsl(57,48%,85%) hsl(57,48%,65%) hsl(57,48%,65%) hsl(57,48%,85%); box-shadow: 0 0 0 1px hsl(57,48%,25%); }
+.unit.vassal.vassal_hastings { background-color: hsl(217,53%,88%); border-color: hsl(217,53%,98%) hsl(217,53%,78%) hsl(217,53%,78%) hsl(217,53%,98%); box-shadow: 0 0 0 1px hsl(217,53%,29%); }
+.unit.vassal.vassal_clifford { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%); }
+.unit.vassal.vassal_edward { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%); }
+.unit.vassal.vassal_montagu { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%); }
+.unit.vassal.vassal_thomas_stanley { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%); }
+.unit.vassal.vassal_trollope { background-color: hsl(358,83%,91%); border-color: hsl(358,83%,100%) hsl(358,83%,81%) hsl(358,83%,81%) hsl(358,83%,100%); box-shadow: 0 0 0 1px hsl(358,83%,30%); }
/* ULTRA-WIDE SCREEN LAYOUTS */
diff --git a/play.js b/play.js
index 62838bb..390c80e 100644
--- a/play.js
+++ b/play.js
@@ -139,18 +139,7 @@ function on_blur() {
}
function get_locale_tip(id) {
- let loc = data.locales[id]
- let tip = loc.name
- if (set_has(data.seaports, id))
- tip += " - Port"
- let list = []
- for (let lord = 0; lord < data.lords.length; ++lord) {
- if (data.lords[lord].seat === id)
- list.push(data.lords[lord].short_name)
- }
- if (list.length > 0)
- tip += " - " + list.join(", ")
- return tip
+ return data.locales[id].name
}
function on_focus_cylinder(evt) {
@@ -346,9 +335,6 @@ const track_xy = []
const calendar_xy = []
const locale_xy = []
-let expand_calendar = -1
-let expand_track = -1
-
const ui = {
favicon: document.getElementById("favicon"),
locale: [],
@@ -368,6 +354,7 @@ const ui = {
lord_exile: [],
vassal_cal: [], // token on calendar
vassal_map: [], // token on map
+ vassal_mat: [], // token on mat
valour_area: [],
marker_area: [],
@@ -431,9 +418,11 @@ const ui = {
],
}
-let locale_layout = []
+let locale_layout_york = []
+let locale_layout_lanc = []
let calendar_layout_vassal = []
-let calendar_layout_cylinder = []
+let calendar_layout_york = []
+let calendar_layout_lanc = []
function clean_name(name) {
return name.toLowerCase().replaceAll("&", "and").replaceAll(" ", "_")
@@ -506,66 +495,83 @@ function build_plan() {
ui.plan_actions.appendChild(elt)
}
-const locale_size = {
- town: [ 100, 100 ],
- city: [ 100, 100 ],
- fortress: [ 100, 100 ],
- harlech: [ 100, 100 ],
- calais: [ 100, 100 ],
- london: [ 150, 150 ],
- exile: [ 150, 200 ],
- sea: [ 100, 100 ],
-}
-
function build_map() {
- for (let i = 0; i < data.locales.length; ++i)
- locale_layout[i] = []
+ for (let i = 0; i <= 16; ++i) {
+ calendar_layout_york[i] = []
+ calendar_layout_lanc[i] = []
+ calendar_layout_vassal[i] = []
+ }
+
+ for (let i = 0; i < data.locales.length; ++i) {
+ locale_layout_york[i] = []
+ locale_layout_lanc[i] = []
+ }
data.locales.forEach((locale, ix) => {
let region = locale.region ? clean_name(locale.region) : ""
let { x, y, w, h } = locale.box
+ let ax, ay, aw, ah
let xc = Math.round(x + w / 2)
let yc = Math.round(y + h / 2)
let e
- let small = 40
- let offsetdeplete = 10
locale_xy[ix] = [ xc, yc ]
+ if (locale.type === "exile_box") {
+ locale_xy[ix] = [ xc, y + 45 ]
+ ax = x + 6
+ ay = y + 6
+ aw = w - 13
+ ah = h - 21
+ } else {
+ ax = x - 6
+ ay = y - 6
+ aw = w + 12
+ ah = h + 8
+ }
+
// Main Area
e = ui.locale[ix] = document.createElement("div")
- e.className = "locale " + locale.type + " " + region
- e.style.left = x + "px"
- e.style.top = y + "px"
- e.style.width = w + "px"
- e.style.height = h + "px"
+ if (locale.type === "exile_box")
+ e.className = "locale " + locale.type + " " + locale.name.toLowerCase()
+ else
+ e.className = "locale " + locale.type + " " + region.toLowerCase()
+ e.style.left = ax + "px"
+ e.style.top = ay + "px"
+ e.style.width = aw + "px"
+ e.style.height = ah + "px"
register_action(e, "locale", ix, "laden_march")
register_tooltip(e, get_locale_tip(ix))
document.getElementById("locales").appendChild(e)
- // Locale Markers
- e = ui.locale_markers_rose[ix] = document.createElement("div")
- e.className = "marker rose favour " + locale.name // York/Lancaster to add favour
- e.style.top = y + h - small + "px"
- e.style.left = x + (w - small) / 2 + "px"
- e.style.width = small + "px"
- e.style.height = small + "px"
- e.style.zIndex = "-20"
- // e.style.border = "2px solid aqua" // to be changed depending on the favour marker
- e.style.backgroundSize = small + "px"
- document.getElementById("pieces").appendChild(e)
+ // Favour
+ if (locale.type === "exile_box") {
+ e = ui.locale_markers_rose[ix] = document.createElement("div")
+ e.className = "marker circle exile_rose "
+ //e.style.top = (y - 8) + "px"
+ //e.style.left = (x + w - 54 + 8) + "px"
+ e.style.top = (y + h - 50) + "px"
+ e.style.left = (xc - 27) + "px"
+ e.style.pointerEvents = "none"
+ document.getElementById("pieces").appendChild(e)
+ } else {
+ e = ui.locale_markers_rose[ix] = document.createElement("div")
+ e.className = "marker small rose"
+ //e.style.top = y + h - 41 + "px"
+ e.style.top = yc - 20 + "px"
+ e.style.left = xc - 20 + "px"
+ e.style.pointerEvents = "none"
+ document.getElementById("pieces").appendChild(e)
+ }
- // Depleted markers
+ // Depleted/Exhausted
e = ui.locale_markers[ix] = document.createElement("div")
- e.className = "depexh marker " + locale.name // depleted or exhausted to add markers
- e.style.top = y + h - small - offsetdeplete + "px"
- e.style.left = offsetdeplete + x + (w - small) / 2 + "px"
- e.style.width = small + "px"
- e.style.height = small + "px"
- e.style.zIndex = "-15"
- // e.style.border = "2px solid aqua"
- e.style.backgroundSize = small + "px"
+ e.className = "marker small depexh " + locale.name
+ e.style.top = yc - 20 - 13 + "px"
+ e.style.left = xc - 20 + 13 + "px"
+ e.style.pointerEvents = "none"
document.getElementById("pieces").appendChild(e)
+
})
// Lord seats
@@ -582,7 +588,7 @@ function build_map() {
e.style.width = 46 + "px"
e.style.height = 46 + "px"
e.style.backgroundSize = small + "px"
- e.style.transform = "rotate(315deg)"
+ //e.style.transform = "rotate(315deg)"
e.style.zIndex = "-50"
register_tooltip(e, data.seat[ix].name)
document.getElementById("pieces").appendChild(e)
@@ -596,10 +602,10 @@ function build_map() {
register_tooltip(e, on_focus_cylinder)
document.getElementById("pieces").appendChild(e)
- // TODO: remove this when not in exile
let exile = ui.lord_exile[ix] = document.createElement("div")
exile.className = "marker small exile hide"
- e.appendChild(exile)
+ exile.style.zIndex=1
+ document.getElementById("pieces").appendChild(exile)
build_lord_mat(lord, ix, side, lord.id)
})
@@ -608,36 +614,34 @@ function build_map() {
ui.captured_king.className = "cylinder lancaster " + data.lords[LORD_HENRY_VI].id
ui.captured_king.style.position = "static"
- data.vassalbox.forEach((vassal, ix) => {
- let e = ui.vassal_map[ix] = document.createElement("div")
- let { x, y, w, h } = vassal.box
- let xc = Math.round(x + w / 2)
- let yc = Math.round(y + h / 2)
- let small = 46
- e.className = "hide unit " + vassal.name
+ data.vassals.forEach((vassal, ix) => {
+ let e
+
+ if (vassal.box) {
+ let { x, y, w, h } = vassal.box
+ e = ui.vassal_map[ix] = document.createElement("div")
+ let xc = Math.round(x + w / 2)
+ let yc = Math.round(y + h / 2)
+ e.className = "hide unit vassal vassal_" + vassal.name.toLowerCase()
+ e.style.position = "absolute"
+ e.style.top = yc - 27 + "px"
+ e.style.left = xc - 27 + "px"
+ register_action(e, "vassal", ix)
+ register_tooltip(e, data.vassals[ix].name)
+ document.getElementById("pieces").appendChild(e)
+ }
+
+ e = ui.vassal_cal[ix] = document.createElement("div")
+ e.className = "hide unit vassal + vassal_" + vassal.name.toLowerCase()
e.style.position = "absolute"
- e.style.top = y + "px"
- e.style.left = x + "px"
- e.style.width = 46 + "px"
- e.style.height = 46 + "px"
- e.style.backgroundSize = small + "px"
register_action(e, "vassal", ix)
register_tooltip(e, data.vassals[ix].name)
document.getElementById("pieces").appendChild(e)
- })
-
- data.vassals.forEach((vassal, ix) => {
- let e = ui.vassal_cal[ix] = document.createElement("div")
- e.className = "hide marker square back vassal vassal_" + clean_name(vassal.name)
- e.style.position = "absolute"
- e.style.width = 46 + "px"
- e.style.height = 46 + "px"
- e.style.backgroundSize = 46 + "px"
+ e = ui.vassal_mat[ix] = document.createElement("div")
+ e.className = "unit vassal + vassal_" + vassal.name.toLowerCase()
register_action(e, "vassal", ix)
register_tooltip(e, data.vassals[ix].name)
-
- document.getElementById("pieces").appendChild(e)
})
for (let i = 1; i <= 16; ++i) {
@@ -646,7 +650,7 @@ function build_map() {
let y = calendar_boxes[name][1]
let w = calendar_boxes[name][2]
let h = calendar_boxes[name][3]
- calendar_xy[i] = [ x, y ]
+ calendar_xy[i] = [ x, y, w, h ]
let e = ui.calendar[i] = document.createElement("div")
e.className = "calendar box " + name
@@ -746,122 +750,104 @@ function update_current_card_display() {
}
}
-function layout_locale_item(loc, e, is_upper) {
- locale_layout[loc].push([e, is_upper])
-}
-
-function layout_locale_cylinders(loc) {
+function layout_locale_cylinders(loc, list, dx) {
let [xc, yc] = locale_xy[loc]
-
- let n = 0
- for (let [e,is_upper] of locale_layout[loc])
- if (!is_upper)
- ++n
-
- let wrap = 2
- switch (data.locales[loc].type) {
- case "london":
- wrap = 3
- break
+ let dy = (list.length - 1) * -15
+ let x = xc + dx
+ let y = yc + dy
+ let z = 5
+ for (let ix of list) {
+ let e = ui.lord_cylinder[ix]
+ e.style.top = (y - 23) + "px"
+ e.style.left = (x - 23) + "px"
+ e.style.zIndex = z++
+ y += 30
}
+}
- let m = Math.floor((n-1) / wrap)
- let i = 0
- let k = 0
- for (let [e,is_upper] of locale_layout[loc]) {
- let nn = n
- if (nn > wrap)
- nn = wrap
- let x = xc + (i - (nn-1)/2) * 44 + k * 22
- let y = yc + (k * 32) - m * 32
- let z = 1
- if (is_upper) {
- y -= 18
- z = 2
- }
- if (e === ui.legate) {
- y -= 16
- z = 3
- }
+function layout_exile_box_cylinders(loc, list, dy) {
+ let [xc, yc] = locale_xy[loc]
+ let dx = (list.length - 1) * -23
+ let x = xc + dx
+ let y = yc + dy
+ let z = 5
+ for (let ix of list) {
+ let e = ui.lord_cylinder[ix]
e.style.top = (y - 23) + "px"
e.style.left = (x - 23) + "px"
- e.style.zIndex = z
- if (!is_upper)
- ++i
- if (i >= wrap) {
- i = 0
- ++k
- }
+ e.style.zIndex = z++
+ x += 46
}
}
function layout_calendar() {
for (let loc = 1; loc <= 16; ++loc) {
let [cx, cy] = calendar_xy[loc]
- let list = calendar_layout_vassal[loc]
+ let list
+
+ list = calendar_layout_lanc[loc]
for (let i = 0; i < list.length; ++i) {
- let e = list[i]
- let x = cx, y = cy, z = 60 - i
- let d = 46 - 24
- if (loc === expand_calendar) {
- d = 46
- z += 100
+ let e = ui.lord_cylinder[list[i]]
+ let x = cx, y = cy, z = 30
+ x += 5
+ y += i * 30 - 2
+ e.style.top = y + "px"
+ e.style.left = x + "px"
+ e.style.zIndex = z
+
+ // cylinder is 44x48, exile marker is 39
+ if (is_lord_in_exile(list[i])) {
+ e = ui.lord_exile[list[i]]
+ e.style.top = y + 5 + "px"
+ e.style.left = x + 3 - 20 + "px"
+ e.style.zIndex = z - 1
}
- x += 10
- y += i * d
+ }
+
+ list = calendar_layout_york[loc]
+ for (let i = 0; i < list.length; ++i) {
+ // ui.lord_exile[ix].classList.toggle("hide", !is_lord_in_exile(ix))
+ let e = ui.lord_cylinder[list[i]]
+ let x = cx, y = cy, z = 30
+ x += 50
+ y += i * 30 - 2
e.style.top = y + "px"
e.style.left = x + "px"
e.style.zIndex = z
+
+ // cylinder is 44, exile marker is 39
+ if (is_lord_in_exile(list[i])) {
+ e = ui.lord_exile[list[i]]
+ e.style.top = y + "px"
+ e.style.left = x + 3 + 20 + "px"
+ e.style.zIndex = z - 1
+ }
}
- list = calendar_layout_cylinder[loc]
+ list = calendar_layout_vassal[loc]
for (let i = 0; i < list.length; ++i) {
let e = list[i]
- let x = cx, y = cy, z = 61 + i
- x += 10
- y += i * 32 - 3
+ let x = cx, y = cy, z = 20 - i
+ let len_lanc = calendar_layout_lanc[loc].length
+ let len_york = calendar_layout_york[loc].length
+ if (len_lanc <= len_york) {
+ y += len_lanc * 30 + 48-30 + 3 + i * 20
+ x += 7
+ } else {
+ y += len_york * 30 + 48-30 + 3 + i * 20
+ x += 42
+ }
e.style.top = y + "px"
e.style.left = x + "px"
e.style.zIndex = z
}
+
}
}
function add_vassal(parent, vassal, lord, routed) {
- let elt
- if (routed) {
- if (is_action(force_action_name[VASSAL], vassal))
- elt = get_cached_element(
- "action unit " + force_class_name[VASSAL] + " vassal_" + clean_name(data.vassals[vassal].name),
- force_action_name[VASSAL],
- vassal
- )
- else
- elt = get_cached_element(
- "unit " + force_class_name[VASSAL] + " vassal_" + clean_name(data.vassals[vassal].name),
- force_action_name[VASSAL],
- vassal
- )
- } else {
- if (is_action(force_action_name[VASSAL], vassal))
- elt = get_cached_element(
- "action unit " + force_class_name[VASSAL] + " vassal_" + clean_name(data.vassals[vassal].name),
- force_action_name[VASSAL],
- vassal
- )
- else if (view.vassal === vassal || set_has(view.vassal, vassal))
- elt = get_cached_element(
- "unit " + force_class_name[VASSAL] + " selected vassal_" + clean_name(data.vassals[vassal].name),
- force_action_name[VASSAL],
- vassal
- )
- else
- elt = get_cached_element(
- "unit " + force_class_name[VASSAL] + " vassal_" + clean_name(data.vassals[vassal].name),
- force_action_name[VASSAL],
- vassal
- )
- }
+ let elt = ui.vassal_mat[vassal]
+ elt.classList.toggle("selected", view.vassal === vassal || set_has(view.vassal, vassal))
parent.appendChild(elt)
}
@@ -1008,13 +994,19 @@ function update_lord(ix) {
return
}
if (locale < CALENDAR) {
- layout_locale_item(locale, ui.lord_cylinder[ix])
+ if (is_york_lord(ix))
+ locale_layout_york[locale].push(ix)
+ else
+ locale_layout_lanc[locale].push(ix)
ui.lord_cylinder[ix].classList.remove("hide")
update_lord_mat(ix)
ui.lord_exile[ix].classList.add("hide")
} else if (locale <= CALENDAR_EXILE + 16) {
let t = locale > CALENDAR_EXILE ? locale - CALENDAR_EXILE : locale - CALENDAR
- calendar_layout_cylinder[t].push(ui.lord_cylinder[ix])
+ if (is_york_lord(ix))
+ calendar_layout_york[t].push(ix)
+ else
+ calendar_layout_lanc[t].push(ix)
ui.lord_cylinder[ix].classList.remove("hide")
ui.lord_exile[ix].classList.toggle("hide", !is_lord_in_exile(ix))
}
@@ -1031,7 +1023,13 @@ function update_lord(ix) {
}
function update_locale(loc) {
- layout_locale_cylinders(loc)
+ if (data.locales[loc].type === "exile_box") {
+ layout_exile_box_cylinders(loc, locale_layout_lanc[loc], 0)
+ layout_exile_box_cylinders(loc, locale_layout_york[loc], 30)
+ } else {
+ layout_locale_cylinders(loc, locale_layout_lanc[loc], -30)
+ layout_locale_cylinders(loc, locale_layout_york[loc], 30)
+ }
ui.locale[loc].classList.toggle("action", is_action("locale", loc) || is_action("laden_march", loc))
ui.locale[loc].classList.toggle("selected", view.where === loc || set_has(view.where, loc))
@@ -1271,13 +1269,14 @@ function update_vassals() {
if (ui.vassal_map[v]) {
ui.vassal_map[v].classList.remove("hide")
ui.vassal_map[v].classList.toggle("action", is_action("vassal", v))
- ui.vassal_map[v].classList.toggle("selected", v === view.vassal)
+ ui.vassal_map[v].classList.toggle("selected", v === view.vassal || set_has(view.vassal, v))
}
} else {
// on calendar (+ maybe on lord mat)
if (data.vassals[v].service > 0) {
ui.vassal_cal[v].classList.remove("hide")
ui.vassal_cal[v].classList.toggle("action", is_action("vassal", v))
+ ui.vassal_cal[v].classList.toggle("selected", v === view.vassal || set_has(view.vassal, v))
calendar_layout_vassal[srv].push(ui.vassal_cal[v])
} else {
// special vassal not on calendar
@@ -1328,12 +1327,15 @@ function on_update() {
}
for (let i = 0; i <= 16; ++i) {
- calendar_layout_cylinder[i] = []
- calendar_layout_vassal[i] = []
+ calendar_layout_york[i].length = 0
+ calendar_layout_lanc[i].length = 0
+ calendar_layout_vassal[i].length = 0
}
- for (let i = 0; i < data.locales.length; ++i)
- locale_layout[i].length = 0
+ for (let i = 0; i < data.locales.length; ++i) {
+ locale_layout_york[i].length = 0
+ locale_layout_lanc[i].length = 0
+ }
track_offset.fill(0)
diff --git a/rules.ts b/rules.ts
index d4fef10..91caaca 100644
--- a/rules.ts
+++ b/rules.ts
@@ -5069,6 +5069,8 @@ states.intercept = {
prompt() {
view.prompt = `Intercept: Choose lords to intercept at ${locale_name[game.march.to]}.`
+ view.where = game.march.to
+
if (game.active === YORK)
gen_action_card_if_held(EVENT_YORK_FLANK_ATTACK)
else
diff --git a/tools/gendata.js b/tools/gendata.js
index 0b676ec..ade9bbf 100644
--- a/tools/gendata.js
+++ b/tools/gendata.js
@@ -42,7 +42,7 @@ const boxes = {
"Harlech": [282,919,57,52],
"London": [878,1159,89,73],
"Calais": [1137,1411,63,58],
- "Scotland": [448,277,113,132],
+ "Scotland": [449,277,113,132],
"France": [888,1428,113,132],
"Ireland": [48,950,113,132],
"Burgundy": [993,684,113,132],
@@ -113,34 +113,34 @@ const boxes = {
"vassal vassal_devon": [406,1400,27,30],
"vassal vassal_bonville": [174,1377,27,30],
"vassal vassal_beaumont": [753,787,27,30],
- "seat lancaster lord_henry_vi": [840,1168,50,50],
- "seat lancaster lord_margaret": [847,1153,50,50],
- "seat lancaster lord_henry_tudor": [831,1186,50,50],
- "seat lancaster lord_clarence": [656,613,50,50],
- "seat lancaster lord_northumberland_l": [392,422,50,50],
+ "seat lancaster lord_henry_vi": [865,1166,50,50],
+ "seat lancaster lord_margaret": [864,1166,50,50],
+ "seat lancaster lord_henry_tudor": [864,1166,50,50],
+ "seat lancaster lord_clarence": [650,637,50,50],
+ "seat lancaster lord_northumberland_l": [392,430,50,50],
"seat lancaster lord_buckingham": [714,975,50,50],
- "seat lancaster lord_jasper_tudor_2": [340,926,50,50],
- "seat lancaster lord_jasper_tudor_1": [192,1077,50,50],
- "seat lancaster lord_oxford": [692,1085,50,50],
+ "seat lancaster lord_jasper_tudor_2": [346,921,50,50],
+ "seat lancaster lord_jasper_tudor_1": [190,1066,50,50],
+ "seat lancaster lord_oxford": [678,1078,50,50],
"seat lancaster lord_warwick_l": [1150,1350,50,50],
- "seat lancaster lord_exeter_1": [345,1329,50,50],
- "seat lancaster lord_somerset_1": [457,1275,50,50],
- "seat york lord_edward_iv": [899,1149,50,50],
- "seat york lord_gloucester_2": [933,1158,50,50],
- "seat york lord_gloucester_1": [604,1074,50,50],
- "seat york lord_salisbury": [653,643,50,50],
- "seat york lord_march": [435,955,50,50],
- "seat york lord_rutland": [1096,1189,50,50],
- "seat york lord_devon": [315,1353,50,50],
- "seat york lord_pembroke": [139,1106,50,50],
+ "seat lancaster lord_exeter_1": [300,1333,50,50],
+ "seat lancaster lord_somerset_1": [453,1277,50,50],
+ "seat york lord_edward_iv": [929,1164,50,50],
+ "seat york lord_gloucester_2": [930,1165,50,50],
+ "seat york lord_gloucester_1": [609,1074,50,50],
+ "seat york lord_salisbury": [770,636,50,50],
+ "seat york lord_march": [427,969,50,50],
+ "seat york lord_rutland": [1125,1214,50,50],
+ "seat york lord_devon": [359,1318,50,50],
+ "seat york lord_pembroke": [132,1095,50,50],
"seat york lord_norfolk": [795,1398,50,50],
- "seat york lord_northumberland_y1": [391,423,50,50],
+ "seat york lord_northumberland_y1": [391,431,50,50],
"seat york lord_warwick_y": [1150,1349,50,50],
- "seat york lord_york": [908,937,50,50],
- "seat york lord_northumberland_y2": [391,423,50,50],
- "seat york lord_richard_iii": [933,1158,50,50],
- "seat lancaster lord_somerset_2": [457,1275,50,50],
- "seat lancaster lord_exeter_2": [345,1329,50,50],
+ "seat york lord_york": [906,937,50,50],
+ "seat york lord_northumberland_y2": [391,431,50,50],
+ "seat york lord_richard_iii": [930,1165,50,50],
+ "seat lancaster lord_somerset_2": [452,1276,50,50],
+ "seat lancaster lord_exeter_2": [300,1333,50,50],
}
let data = []
@@ -154,7 +154,6 @@ var locmap = {}
var locales = []
var ways = []
var seat = []
-var vassalbox = []
const scale = 1
var is = { stronghold: [] }
@@ -189,13 +188,6 @@ function defseat(name) {
}
function defvassal(name) {
- let [x, y, w, h] = boxes[name]
- x = Math.floor(x)
- y = Math.floor(y)
- w = Math.ceil(w)
- h = Math.ceil(h)
- locmap[name] = locales.length
- vassalbox.push({ name, box: { x, y, w, h } })
}
@@ -339,22 +331,21 @@ defseat("seat lancaster lord_henry_tudor")
defseat("seat lancaster lord_oxford")
defseat("seat lancaster lord_warwick_l")
-
// VASSAL SEAT
-defvassal("vassal vassal_westmoreland")
-defvassal("vassal vassal_stanley")
-defvassal("vassal vassal_dudley")
-defvassal("vassal vassal_shrewsbury")
-defvassal("vassal vassal_worcester")
-defvassal("vassal vassal_oxford")
-defvassal("vassal vassal_essex")
-defvassal("vassal vassal_suffolk")
-defvassal("vassal vassal_fauconberg")
-defvassal("vassal vassal_norfolk")
-defvassal("vassal vassal_devon")
-defvassal("vassal vassal_bonville")
-defvassal("vassal vassal_beaumont")
+defvassal("Westmoreland")
+defvassal("Stanley")
+defvassal("Dudley")
+defvassal("Shrewsbury")
+defvassal("Worcester")
+defvassal("Oxford")
+defvassal("Essex")
+defvassal("Suffolk")
+defvassal("Fauconberg")
+defvassal("Norfolk")
+defvassal("Devon")
+defvassal("Bonville")
+defvassal("Beaumont")
//WAYS BETWEEN LOCALES
@@ -1402,7 +1393,17 @@ arts_of_war_roses(3, "L", 32, 37)
let vassals = []
function vassal(service, name, seat, influence, capability) {
- vassals.push({service, name, seat, influence, capability })
+ let boxname = "vassal vassal_" + name.toLowerCase()
+ let box = null
+ if (boxname in boxes) {
+ let [x, y, w, h] = boxes[boxname]
+ x = Math.floor(x)
+ y = Math.floor(y)
+ w = Math.ceil(w)
+ h = Math.ceil(h)
+ box = { x, y, w, h }
+ }
+ vassals.push({service, name, seat, influence, capability, box })
}
lords.forEach(lord => {
@@ -1469,7 +1470,6 @@ dumplist("cards", cards)
// layout client only
dumplist("seat", seat)
-dumplist("vassalbox", vassalbox)
print("}")
diff --git a/tools/layout.svg b/tools/layout.svg
index bb1da3a..8e9ca6b 100644
--- a/tools/layout.svg
+++ b/tools/layout.svg
@@ -38,9 +38,9 @@
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
- inkscape:zoom="0.73946615"
- inkscape:cx="765.1019"
- inkscape:cy="825.23435"
+ inkscape:zoom="2.2194061"
+ inkscape:cx="833.37458"
+ inkscape:cy="1115.5331"
inkscape:window-width="1920"
inkscape:window-height="991"
inkscape:window-x="-9"
@@ -104,7 +104,7 @@
id="rect785"
width="113"
height="132"
- x="448.42093"
+ x="448.64621"
y="277.33926"
inkscape:label="Scotland" />
<rect
@@ -699,8 +699,8 @@
id="rect1042"
width="50"
height="50"
- x="839.82922"
- y="1167.6871"
+ x="864.83679"
+ y="1165.5977"
rx="0"
ry="0"
inkscape:label="seat lancaster lord_henry_vi" />
@@ -709,8 +709,8 @@
id="rect1044"
width="50"
height="50"
- x="846.57922"
- y="1153.4371"
+ x="863.80273"
+ y="1165.8037"
rx="0"
ry="0"
inkscape:label="seat lancaster lord_margaret" />
@@ -719,8 +719,8 @@
id="rect1046"
width="50"
height="50"
- x="830.82922"
- y="1186.1871"
+ x="864.17682"
+ y="1165.7495"
rx="0"
ry="0"
inkscape:label="seat lancaster lord_henry_tudor" />
@@ -729,8 +729,8 @@
id="rect1056"
width="50"
height="50"
- x="655.61737"
- y="612.94305"
+ x="649.81378"
+ y="636.87598"
rx="0"
ry="0"
inkscape:label="seat lancaster lord_clarence" />
@@ -739,8 +739,8 @@
id="rect1058"
width="50"
height="50"
- x="392.328"
- y="422.1658"
+ x="391.6908"
+ y="430.44946"
rx="0"
ry="0"
inkscape:label="seat lancaster lord_northumberland_l" />
@@ -759,8 +759,8 @@
id="rect1066"
width="50"
height="50"
- x="339.72382"
- y="925.52167"
+ x="346.1814"
+ y="920.9292"
rx="0"
ry="0"
inkscape:label="seat lancaster lord_jasper_tudor_2" />
@@ -769,8 +769,8 @@
id="rect1068"
width="50"
height="50"
- x="192.24489"
- y="1076.7739"
+ x="190.02089"
+ y="1066.2098"
rx="0"
ry="0"
inkscape:label="seat lancaster lord_jasper_tudor_1" />
@@ -779,8 +779,8 @@
id="rect1070"
width="50"
height="50"
- x="691.93689"
- y="1085.2159"
+ x="677.88678"
+ y="1078.3939"
rx="0"
ry="0"
inkscape:label="seat lancaster lord_oxford" />
@@ -799,8 +799,8 @@
id="rect1076"
width="50"
height="50"
- x="344.55917"
- y="1329.3937"
+ x="300.21649"
+ y="1333.0049"
rx="0"
ry="0"
inkscape:label="seat lancaster lord_exeter_1" />
@@ -809,8 +809,8 @@
id="rect1082"
width="50"
height="50"
- x="457.35245"
- y="1274.7346"
+ x="452.98563"
+ y="1276.9834"
rx="0"
ry="0"
inkscape:label="seat lancaster lord_somerset_1" />
@@ -819,8 +819,8 @@
id="rect1048"
width="50"
height="50"
- x="898.57922"
- y="1149.0419"
+ x="929.32196"
+ y="1164.1428"
rx="0"
ry="0"
inkscape:label="seat york lord_edward_iv" />
@@ -829,8 +829,8 @@
id="rect1050"
width="50"
height="50"
- x="933.07922"
- y="1157.7919"
+ x="929.90576"
+ y="1164.5527"
rx="0"
ry="0"
inkscape:label="seat york lord_gloucester_2" />
@@ -839,8 +839,8 @@
id="rect1052"
width="50"
height="50"
- x="603.96716"
- y="1074.3378"
+ x="608.6463"
+ y="1074.3502"
rx="0"
ry="0"
inkscape:label="seat york lord_gloucester_1" />
@@ -849,8 +849,8 @@
id="rect1054"
width="50"
height="50"
- x="653.27295"
- y="642.50726"
+ x="769.72131"
+ y="636.0224"
rx="0"
ry="0"
inkscape:label="seat york lord_salisbury" />
@@ -859,8 +859,8 @@
id="rect1064"
width="50"
height="50"
- x="434.75497"
- y="954.68988"
+ x="427.02731"
+ y="968.99597"
rx="0"
ry="0"
inkscape:label="seat york lord_march" />
@@ -869,8 +869,8 @@
id="rect1072"
width="50"
height="50"
- x="1095.96"
- y="1188.509"
+ x="1124.8721"
+ y="1214.0852"
rx="0"
ry="0"
inkscape:label="seat york lord_rutland" />
@@ -879,8 +879,8 @@
id="rect1078"
width="50"
height="50"
- x="315.2449"
- y="1353.4467"
+ x="358.9256"
+ y="1318.0125"
rx="0"
ry="0"
inkscape:label="seat york lord_devon" />
@@ -889,8 +889,8 @@
id="rect1080"
width="50"
height="50"
- x="138.9648"
- y="1105.7858"
+ x="131.73676"
+ y="1095.2217"
rx="0"
ry="0"
inkscape:label="seat york lord_pembroke" />
@@ -899,8 +899,8 @@
id="rect1084"
width="50"
height="50"
- x="794.68335"
- y="1398.1376"
+ x="795.47052"
+ y="1398.2999"
rx="0"
ry="0"
inkscape:label="seat york lord_norfolk" />
@@ -909,8 +909,8 @@
id="rect440"
width="50"
height="50"
- x="391.49115"
- y="423.03864"
+ x="390.85394"
+ y="431.3223"
rx="0"
ry="0"
inkscape:label="seat york lord_northumberland_y1" />
@@ -929,7 +929,7 @@
id="rect446"
width="50"
height="50"
- x="907.82666"
+ x="905.60266"
y="937.26581"
rx="0"
ry="0"
@@ -939,8 +939,8 @@
id="rect106"
width="50"
height="50"
- x="391.49115"
- y="423.03864"
+ x="390.85394"
+ y="431.3223"
rx="0"
ry="0"
inkscape:label="seat york lord_northumberland_y2" />
@@ -949,8 +949,8 @@
id="rect108"
width="50"
height="50"
- x="933.07922"
- y="1157.7919"
+ x="929.90576"
+ y="1165.1088"
rx="0"
ry="0"
inkscape:label="seat york lord_richard_iii" />
@@ -959,8 +959,8 @@
id="rect110"
width="50"
height="50"
- x="457.35245"
- y="1274.7346"
+ x="452.42963"
+ y="1276.4276"
rx="0"
ry="0"
inkscape:label="seat lancaster lord_somerset_2" />
@@ -969,8 +969,8 @@
id="rect112"
width="50"
height="50"
- x="344.55917"
- y="1329.3937"
+ x="299.66049"
+ y="1333.0049"
rx="0"
ry="0"
inkscape:label="seat lancaster lord_exeter_2" />