From 04724b62b28b6d0815e2ce6d3d9050f91390507f Mon Sep 17 00:00:00 2001 From: Joël Simoneau Date: Fri, 4 Apr 2025 07:43:07 -0400 Subject: Reworking conspire replace --- rules.js | 84 ++++++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 58 insertions(+), 26 deletions(-) diff --git a/rules.js b/rules.js index b42b88a..1e6223b 100644 --- a/rules.js +++ b/rules.js @@ -1809,6 +1809,7 @@ states.migrate_space = { }, piece(p) { + push_undo() log_summary_move_from(p) set_add(game.cmd.pieces, p) place_piece(p, game.cmd.where) @@ -1854,6 +1855,7 @@ states.migrate_shift_influence = { view.actions.skip = 1 }, resources() { + push_undo() let f = (game.current === BK) ? VE : BK log_br() add_resources(game.current, -1) @@ -2416,8 +2418,6 @@ states.compel_space_influencial = { } function can_conspire() { - if (!has_piece(AVAILABLE, BK, ELITE)) - return false for (let s = first_space; s <= last_province; ++s) if (can_conspire_in_space(s)) return true @@ -2445,9 +2445,7 @@ function goto_conspire() { states.conspire = { inactive: "Conspire", prompt() { - if ((!has_piece(AVAILABLE, BK, ELITE))) { - view.prompt = "Conspire: No Available Amir." - } else if (game.decree.count === 0 || !can_conspire()) { + if (game.decree.count === 0 || !can_conspire()) { view.prompt = "Conspire: Done." } else { if (game.decree.count === 2) @@ -2478,32 +2476,14 @@ function goto_conspire_space(s) { let is_ds = has_piece(s, DS, ELITE) let is_ve = has_piece(s, VE, ELITE) if (is_ds && !is_ve) - conspire_piece(find_piece(s, DS, ELITE)) - else if (is_ve && !is_ds) - conspire_piece(find_piece(s, VE, ELITE)) + goto_conspire_replace(find_piece(s, DS, ELITE)) else game.state = "conspire_space" } -function conspire_piece(p) { - logi("1 " + piece_symbol(p)) - log_br() - let rebel = is_rebel(p) - let is_gov = is_governor(p) - remove_piece(p) - let amir = find_piece(AVAILABLE, BK, ELITE) - let pp = place_piece(amir, game.decree.where) - if (rebel) to_rebel(pp) - game.decree.count -= 1 - if (is_gov) { - game.state = "rebel_or_obedient" - } else - game.state = "conspire" -} - states.conspire_space = { inactive: "Conspire", - prompt () { + prompt() { if (game.inf[BK] < 2) { view.prompt = "Conspire: Select a Governor to convert to an Amir." gen_piece_in_space(game.decree.where, DS, ELITE) @@ -2514,7 +2494,59 @@ states.conspire_space = { } }, piece(p) { - conspire_piece(p) + goto_conspire_replace(p) + } +} + +function goto_conspire_replace(p) { + game.decree.replaced = p + game.decree.is_rebel = is_rebel(p) + remove_piece(p) + game.state = "conspire_replace" +} + +states.conspire_replace = { + inactive: "Conspire", + prompt() { + if (game.decree.is_rebel === null) { + view.prompt = `Conspire: Obedient or Rebelling Amir.` + view.actions.obedient = 1 + view.actions.rebelling = 1 + } else if (count_pieces(AVAILABLE, BK, ELITE) > 0) { + view.prompt = `Conspire: Replace with ${game.decree.rebel ? "a Rebelling " : "an "} Amir?` + gen_place_piece(BK, ELITE) + } else { + view.prompt = "Conspire: No available Amir." + } + view.actions.skip = 1 + }, + piece(p) { + let amir = find_piece(AVAILABLE, BK, ELITE) + game.decree.pp = place_piece(amir, game.decree.where) + if (game.decree.rebel) to_rebel(game.decree.pp) + game.decree.count -= 1 + if (!game.decree.rebel) { + game.decree.is_rebel = null + game.state = "conspire_replace" + } else { + logi(`Replaced a ${piece_symbol(game.decree.replaced)} for a Rebelling ${piece_symbol(game.decree.pp)}.`) + game.state = "conspire" + } + }, + obedient() { + push_undo() + logi(`Replaced a ${piece_symbol(game.decree.replaced)} for an ${piece_symbol(game.decree.pp)}.`) + game.state = "conspire" + }, + rebelling() { + push_undo() + to_rebel(game.decree.pp) + logi(`Replaced a ${piece_symbol(game.decree.replaced)} for a Rebelling ${piece_symbol(game.decree.pp)}.`) + game.state = "conspire" + }, + skip() { + logi("1 " + piece_symbol(game.decree.replaced) + " removed.") + game.state = "conspire" } } -- cgit v1.2.3