summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoël Simoneau <simoneaujoel@gmail.com>2025-03-19 14:50:24 -0400
committerJoël Simoneau <simoneaujoel@gmail.com>2025-03-19 14:50:24 -0400
commit3e4a6d5447ffb4b3b70b0447301aacbd6aced02f (patch)
tree18fd381076911a4d4d3ead152f999bf38e868cad
parent6f42e218a3c603d96374159f8ca35c5121329f5f (diff)
downloadvijayanagara-3e4a6d5447ffb4b3b70b0447301aacbd6aced02f.tar.gz
Resource negocation
-rw-r--r--play.js2
-rw-r--r--rules.js128
2 files changed, 130 insertions, 0 deletions
diff --git a/play.js b/play.js
index 69b44cc..5f328f2 100644
--- a/play.js
+++ b/play.js
@@ -1226,6 +1226,8 @@ function on_update() {
action_button("end_of_turn", "End your turn")
action_button("end_return", "End Influence Shift")
+ action_button("deny", "Deny")
+ action_button("done", "Done")
action_button("undo", "Undo")
}
diff --git a/rules.js b/rules.js
index 2117504..cd5e725 100644
--- a/rules.js
+++ b/rules.js
@@ -3361,6 +3361,134 @@ function gen_choose_faction(faction) {
}
}
+/* NEGOTIATION */
+
+function is_player_ds() { return game.current === DS }
+function is_player_bk() { return game.current === BK }
+function is_player_ve() { return game.current === VE }
+
+function action_ask_resources() {
+ push_undo()
+ game.transfer = {
+ current: game.current,
+ state: game.state,
+ count: 0,
+ }
+ game.state = "ask_resources"
+}
+
+states.ask_resources = {
+ disable_negotiation: true,
+ prompt() {
+ view.prompt = "Negotiate: Ask another faction for resources?"
+ if (!is_player_ds() && game.resources[DS] > 0)
+ gen_action_resources(DS)
+ if (!is_player_bk() && game.resources[BK] > 0)
+ gen_action_resources(BK)
+ if (!is_player_ve() && game.resources[VE] > 0)
+ gen_action_resources(VE)
+ },
+ resources(faction) {
+ game.current = faction
+ game.state = "give_resources"
+ },
+}
+
+states.give_resources = {
+ inactive: "Transfer Resources",
+ disable_negotiation: true,
+ prompt() {
+ view.prompt = `Negotiate: ${faction_name[game.transfer.current]} asked for Resources.`
+ if (game.resources[game.current] >= 1 && game.resources[game.transfer.current] < 99)
+ gen_action_resources(game.current)
+ if (game.transfer.count > 0) {
+ let min_cost = 1
+ // if (game.transfer.current === DS) {
+ // min_cost = 3
+ // if (game.transfer.state === "sweep" && has_capability(CAP_OSPINA))
+ // min_cost = 1
+ // if (game.transfer.state === "assault" && has_capability(CAP_TAPIAS))
+ // min_cost = 1
+ // }
+ if (game.resources[game.transfer.current] < min_cost)
+ view.actions.done = 0
+ else
+ view.actions.done = 1
+ view.actions.undo = 1
+ } else {
+ view.actions.deny = 1
+ view.actions.undo = 0
+ }
+ },
+ resources(_) {
+ game.transfer.count++
+ add_resources(game.current, -1)
+ add_resources(game.transfer.current, 1)
+ },
+ undo() {
+ add_resources(game.current, game.transfer.count)
+ add_resources(game.transfer.current, -game.transfer.count)
+ game.transfer.count = 0
+ },
+ deny() {
+ log_transfer(`${faction_name[game.current]} denied request from ${faction_name[game.transfer.current]}.`)
+ end_negotiation()
+ },
+ done() {
+ clear_undo()
+ log_transfer_resources(game.current, game.transfer.current, game.transfer.count)
+ end_negotiation()
+ },
+}
+
+function action_transfer_resources() {
+ push_undo()
+ game.transfer = {
+ current: game.current,
+ state: game.state,
+ count: null
+ }
+ game.state = "transfer_resources"
+}
+
+states.transfer_resources = {
+ disable_negotiation: true,
+ prompt() {
+ view.prompt = "Transfer resources to another faction."
+ if (game.resources[game.current] >= 1) {
+ if (!is_player_ds() && game.resources[DS] < 24)
+ gen_action_resources(DS)
+ if (!is_player_bk() && game.resources[BK] < 24)
+ gen_action_resources(BK)
+ if (!is_player_ve() && game.resources[VE] < 24)
+ gen_action_resources(VE)
+ }
+ if (game.transfer.count)
+ view.actions.done = 1
+ else
+ view.actions.done = 0
+ },
+ resources(to) {
+ if (!game.transfer.count)
+ game.transfer.count = [0, 0, 0, 0]
+ game.transfer.count[to]++
+ add_resources(game.current, -1)
+ add_resources(to, 1)
+ },
+ done() {
+ for (let i = 0; i < 4; ++i)
+ if (game.transfer.count[i] > 0)
+ log_transfer_resources(game.current, i, game.transfer.count[i])
+ end_negotiation()
+ },
+}
+
+function end_negotiation() {
+ game.current = game.transfer.current
+ game.state = game.transfer.state
+ delete game.transfer
+}
+
/* PING */
function action_ping() {