diff options
author | Joël Simoneau <simoneaujoel@gmail.com> | 2025-03-19 14:50:24 -0400 |
---|---|---|
committer | Joël Simoneau <simoneaujoel@gmail.com> | 2025-03-19 14:50:24 -0400 |
commit | 3e4a6d5447ffb4b3b70b0447301aacbd6aced02f (patch) | |
tree | 18fd381076911a4d4d3ead152f999bf38e868cad | |
parent | 6f42e218a3c603d96374159f8ca35c5121329f5f (diff) | |
download | vijayanagara-3e4a6d5447ffb4b3b70b0447301aacbd6aced02f.tar.gz |
Resource negocation
-rw-r--r-- | play.js | 2 | ||||
-rw-r--r-- | rules.js | 128 |
2 files changed, 130 insertions, 0 deletions
@@ -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") } @@ -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() { |