summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--play.js2
-rw-r--r--rules.js93
2 files changed, 89 insertions, 6 deletions
diff --git a/play.js b/play.js
index ef4758e..696722a 100644
--- a/play.js
+++ b/play.js
@@ -1644,6 +1644,8 @@ function on_update() {
action_button("levy_beloved_warwick", "Beloved Warwick")
action_button("levy_irishmen", "Irishmen")
action_button("soldiers_of_fortune", "Soldiers of Fortune")
+ action_button("commission_of_array", "Commission of Array")
+
action_button("capability", "Capability")
diff --git a/rules.js b/rules.js
index 483d877..6b78bfa 100644
--- a/rules.js
+++ b/rules.js
@@ -353,7 +353,7 @@ const AOW_LANCASTER_HAY_WAINS = L8
const AOW_LANCASTER_QUARTERMASTERS = L9
const AOW_LANCASTER_CHAMBERLAINS = L10
const AOW_LANCASTER_IN_THE_NAME_OF_THE_KING = L11
-const AOW_LANCASTER_COMMISION_OF_ARRAY = L12 // TODO
+const AOW_LANCASTER_COMMISION_OF_ARRAY = L12
const AOW_LANCASTER_EXPERT_COUNSELLORS = L13
const AOW_LANCASTER_PERCYS_POWER = L14
const AOW_LANCASTER_KINGS_PARLEY = L15
@@ -428,8 +428,7 @@ const EVENT_LANCASTER_RISING_WAGES = L9
const EVENT_LANCASTER_NEW_ACT_OF_PARLIAMENT = L10
const EVENT_LANCASTER_BLOCKED_FORD = L11
-const EVENT_LANCASTER_RAVINE = L12 // TODO
-// Play at start of Battle after BATTLE ARRAY basically like Nevsky's Ambush
+const EVENT_LANCASTER_RAVINE = L12
const EVENT_LANCASTER_ASPIELLES = L13
const EVENT_LANCASTER_SCOTS = L14
const EVENT_LANCASTER_HENRY_PRESSURES_PARLIAMENT = L15
@@ -1380,10 +1379,17 @@ function is_friendly_locale(loc) {
}
function can_add_troops(_lordwho, locale) {
- if (has_exhausted_marker(locale) || is_exile(locale))
- return false
- else
+ if (!has_exhausted_marker(locale) && !is_exile(locale))
return true
+ return false
+}
+
+function can_add_troops_coa(lordwho, locale) {
+ for (let next of data.locales[locale].adjacent) {
+ if (is_friendly_locale(next) && lord_has_capability(lordwho, AOW_LANCASTER_COMMISION_OF_ARRAY) && (!has_exhausted_marker(locale) && !is_exile(locale)))
+ return true
+ }
+ return false
}
function can_add_troops_beloved_warwick(lordwho, locale) {
@@ -4676,6 +4682,9 @@ states.levy_muster_lord = {
if (can_add_troops_sof(game.who, here))
view.actions.soldiers_of_fortune = 1
+
+ if (can_add_troops_coa(game.who, here))
+ view.actions.commission_of_array = 1
}
if (game.count === 0 && lord_has_capability(game.who, AOW_LANCASTER_THOMAS_STANLEY) && can_add_troops(game.who, here)) {
@@ -4815,6 +4824,10 @@ states.levy_muster_lord = {
set_lord_unfed(game.who, 1)
push_state("soldier_of_fortune")
},
+ commission_of_array() {
+ push_undo()
+ push_state("commission_of_array")
+ },
capability() {
push_undo()
@@ -5119,6 +5132,74 @@ function end_soldiers_of_fortune() {
resume_levy_muster_lord()
}
+
+// === CAPABILITY: COMMISSION OF ARRAY
+
+states.commission_of_array = {
+ inactive: "Levy Troops",
+ prompt() {
+ view.prompt = `Lord troops adjacent to ${lord_name[game.who]}.`
+ let done = true
+ let here = get_lord_locale(game.who)
+ if (done) {
+ for (let next of data.locales[here].adjacent) {
+ if (is_friendly_locale(next) && lord_has_capability(game.who, AOW_LANCASTER_COMMISION_OF_ARRAY) && (!has_exhausted_marker(next) && !is_exile(next))) {
+ done = false
+ gen_action_locale(next)
+ }
+ }
+ }
+ // Done
+ if (done) {
+ view.prompt = "Commission of Array: Done."
+ view.actions.end_coa = 1
+ }
+ },
+ locale(loc) {
+ push_undo()
+ let loc_type = data.locales[loc].type
+ deplete_locale(loc)
+
+ switch (loc_type) {
+ case "calais":
+ add_lord_forces(game.who, MEN_AT_ARMS, 2)
+ add_lord_forces(game.who, LONGBOWMEN, 1)
+ break
+ case "london":
+ add_lord_forces(game.who, MEN_AT_ARMS, 1)
+ add_lord_forces(game.who, LONGBOWMEN, 1)
+ add_lord_forces(game.who, MILITIA, 1)
+ break
+ case "harlech":
+ add_lord_forces(game.who, MEN_AT_ARMS, 1)
+ add_lord_forces(game.who, LONGBOWMEN, 2)
+ break
+ case "city":
+ add_lord_forces(game.who, LONGBOWMEN, 1)
+ add_lord_forces(game.who, MILITIA, 1)
+ break
+ case "town":
+ add_lord_forces(game.who, MILITIA, 2)
+ break
+ case "fortress":
+ add_lord_forces(game.who, MEN_AT_ARMS, 1)
+ add_lord_forces(game.who, MILITIA, 1)
+ break
+ }
+ if (game.flags.free_levy === 1) {
+ ++game.count
+ game.flags.free_levy = 0
+ }
+ end_commission_of_array()
+ },
+ card: action_held_event,
+}
+
+function end_commission_of_array() {
+ pop_state()
+ resume_levy_muster_lord()
+}
+
states.muster_lord_at_seat = {
inactive: "Muster",
prompt() {