summaryrefslogtreecommitdiff
path: root/rules.js
diff options
context:
space:
mode:
authorJoël Simoneau <simoneaujoel@gmail.com>2025-04-04 07:43:07 -0400
committerJoël Simoneau <simoneaujoel@gmail.com>2025-04-04 07:43:07 -0400
commit04724b62b28b6d0815e2ce6d3d9050f91390507f (patch)
treee1bec975ad73e421d916f322dbbe90d6b6b2d7a3 /rules.js
parent62714e7fdb4568b0d4b19dde7bafa34610071f72 (diff)
downloadvijayanagara-04724b62b28b6d0815e2ce6d3d9050f91390507f.tar.gz
Reworking conspire replace
Diffstat (limited to 'rules.js')
-rw-r--r--rules.js84
1 files 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"
}
}