diff options
author | Tor Andersson <tor@ccxvii.net> | 2024-10-02 21:36:42 +0200 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2024-10-02 21:36:42 +0200 |
commit | 4723be258d8bdac747cc54f8eab7e66a663c88f9 (patch) | |
tree | 8152c64908cb685dfa1981bb70fad2e826ea9838 | |
parent | 24611a0d96685296c0704c54e1abfccd608ff739 (diff) | |
download | washingtons-war-4723be258d8bdac747cc54f8eab7e66a663c88f9.tar.gz |
Simcoe rangers errata: both PC within range of same general.
-rw-r--r-- | rules.js | 66 |
1 files changed, 46 insertions, 20 deletions
@@ -3549,45 +3549,71 @@ states.remove_american_pc_from_non_port = { events.remove_american_pc_within_two_spaces_of_a_british_general = function (card) { game.count = card.count - game.state = "remove_american_pc_within_two_spaces_of_a_british_general" + game.state = "remove_american_pc_within_two_spaces_of_a_british_general_1" } -function gen_remove_american_pc_within_two_spaces_of_a_british_general() { - let candidates = [] - for (let g of BRITISH_GENERALS) { - let a = location_of_general(g) - if (is_map_space(a)) { - set_add(candidates, a) - for (let b of SPACES[a].adjacent) { - set_add(candidates, b) - for (let c of SPACES[b].adjacent) { - set_add(candidates, c) - } - } - } +function can_remove_american_pc_within_two_spaces_of_a_british_general(g) { + let a = location_of_general(g) + if (!is_map_space(a)) + return false + if (has_american_pc(a) && has_no_american_unit(a)) + return true + for (let b of SPACES[a].adjacent) { + if (has_american_pc(b) && has_no_american_unit(b)) + return true + for (let c of SPACES[b].adjacent) + if (has_american_pc(c) && has_no_american_unit(c)) + return true + } + return false +} + +function gen_remove_american_pc_within_two_spaces_of_a_british_general(g) { + let a = location_of_general(g) + let candidates = [ a ] + for (let b of SPACES[a].adjacent) { + set_add(candidates, b) + for (let c of SPACES[b].adjacent) + set_add(candidates, c) } for (let space of candidates) if (has_american_pc(space) && has_no_american_unit(space)) gen_action_space(space) } -states.remove_american_pc_within_two_spaces_of_a_british_general = { +states.remove_american_pc_within_two_spaces_of_a_british_general_1 = { inactive: "to execute event", prompt() { - view.prompt = "Remove American PC markers within two spaces of a British general. " + game.count + " left." - gen_remove_american_pc_within_two_spaces_of_a_british_general() + view.prompt = "Remove American PC markers within two spaces of a British general." + for (let g of BRITISH_GENERALS) + if (can_remove_american_pc_within_two_spaces_of_a_british_general(g)) + gen_action_general(g) + gen_event_pass() + }, + general(g) { + push_undo() + game.who = g + game.state = "remove_american_pc_within_two_spaces_of_a_british_general_2" + }, +} + +states.remove_american_pc_within_two_spaces_of_a_british_general_2 = { + inactive: "to execute event", + prompt() { + view.prompt = "Remove American PC markers within two spaces of " + general_name(game.who) + ". " + game.count + " left." + gen_remove_american_pc_within_two_spaces_of_a_british_general(game.who) gen_event_pass() }, space(where) { push_undo() remove_pc(where) if (--game.count === 0) { - delete game.where + delete game.who end_strategy_card() } }, pass() { - delete game.where + delete game.who end_strategy_card_now() }, } @@ -4736,7 +4762,7 @@ function gen_action_card(action, c) { } function gen_event_pass() { - if (!view.actions.space) + if (!view.actions.space && !view.actions.general) view.actions.pass = 1 // TODO: else confirm_pass (if enacting events are optional) } |