diff options
author | Tor Andersson <tor@ccxvii.net> | 2024-11-24 15:53:08 +0100 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2024-11-24 15:53:08 +0100 |
commit | a2ea835f0df0f1bcd5d50792679626f85f39cc75 (patch) | |
tree | 00348fc4aad99451539d515f3caffa56f1636799 /play.js | |
parent | 090b2edecbc7bb5dad76d5ed50570f6b413ff462 (diff) | |
download | maria-a2ea835f0df0f1bcd5d50792679626f85f39cc75.tar.gz |
Validate promises.
Rework movement restarts.
Use "Reject" instead of "Refuse".
Use "Resume" after jumping back in time.
# Conflicts:
# rules.js
Diffstat (limited to 'play.js')
-rw-r--r-- | play.js | 74 |
1 files changed, 68 insertions, 6 deletions
@@ -118,6 +118,12 @@ const F_TWO_PLAYER = 8192 const F_PLAYER_A_PICK = 16384 // picked PC card const F_PLAYER_B_PICK = 32768 +// promise validation phases +const V_POLITICS = 1 +const V_HUSSARS = 2 +const V_MOVEMENT = 4 +const V_RETREAT = 8 + const SPADES = 0 const CLUBS = 1 const HEARTS = 2 @@ -1574,6 +1580,7 @@ function on_update() { "ping", ]) + update_subsidy_list(view.contracts, window.subsidy_list, "Active Subsidies") update_deal_list(view.deals, window.active_deal_list, "Active Deals") if (view.proposed_deal) { update_deal_list([ view.proposed_deal ], window.proposed_deal_list, "Proposed Deal") @@ -1620,7 +1627,9 @@ function on_update() { action_button("reduce", "Reduce") action_button("peace", "Peace") action_button("accept", "Accept") - action_button("refuse", "Refuse") + action_button("reject", "Reject") + action_button("yes", "Yes") + action_button("no", "No") action_button("re_enter", "Re-enter") action_button("force_march", "Force march") @@ -1766,20 +1775,51 @@ function html_escape(str) { return str.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">") } +function phase_list(phase) { + let list = [] + if (phase & V_POLITICS) list.push("politics") + if (phase & V_HUSSARS) list.push("hussars") + if (phase & V_MOVEMENT) list.push("movement") + if (phase & V_RETREAT) list.push("retreat") + return list.join(" ") +} + +function update_subsidy_list(subs, elt, title) { + let show = false + let str = "<table><tr><th colspan=3>" + title + for (let from of all_major_powers) { + map_for_each(subs[from], (to, n) => { + show = true + str += "<tr><td width=24>" + power_image[from] + str += "<td width=24>" + power_image[to] + str += "<td>" + n + " TC" + }) + } + if (show) { + elt.innerHTML = str + elt.style.display = "block" + } else { + elt.style.display = "none" + } +} + function update_deal_item(deal) { - let [ turn, a_power, b_power, a_promise, b_promise ] = deal + let [ turn, a_power, b_power, a_promise, b_promise, a_phase, b_phase ] = deal let str = "<tr>" str += "<td width=24>" + power_image[a_power] str += "<td>" + html_escape(a_promise) - str += "<td width=24>" + power_image[b_power] - str += "<td>" + html_escape(b_promise) + str += "<td width=80>" + phase_list(a_phase) str += "<td width=60>" + turn_name[turn] + str += "<tr>" + str += "<td>" + power_image[b_power] + str += "<td>" + html_escape(b_promise) + str += "<td>" + phase_list(b_phase) return str } function update_deal_list(deals, elt, title) { if (deals && deals.length > 0) { - let str = "<table><tr><th colspan=5>" + title + let str = "<table><tr><th colspan=4>" + title for (let deal of deals) str += update_deal_item(deal) str += "</table>" @@ -1790,6 +1830,13 @@ function update_deal_list(deals, elt, title) { } } +function update_deal_options() { + let a_power = window.propose_deal_form.elements.a_power.value | 0 + let b_power = window.propose_deal_form.elements.b_power.value | 0 + window.a_hussars_label.classList.toggle("hide", a_power !== P_AUSTRIA) + window.b_hussars_label.classList.toggle("hide", b_power !== P_AUSTRIA) +} + function propose_deal() { if (!is_action("propose_deal")) return @@ -1816,6 +1863,8 @@ function propose_deal() { for (let opt of form.turn.options) opt.disabled = (opt.value < view.turn) + update_deal_options() + window.propose_deal_dlog.showModal() } @@ -1828,6 +1877,19 @@ function propose_deal_submit(evt) { data.a_power = Number(data.a_power) data.b_power = Number(data.b_power) + data.a_phase = 0 + data.b_phase = 0 + data.a_phase |= (data.a_phase_politics ? V_POLITICS : 0) + data.b_phase |= (data.b_phase_politics ? V_POLITICS : 0) + if (data.a_power === P_AUSTRIA) + data.a_phase |= (data.a_phase_hussars ? V_HUSSARS : 0) + if (data.b_power === P_AUSTRIA) + data.b_phase |= (data.b_phase_hussars ? V_HUSSARS : 0) + data.a_phase |= (data.a_phase_movement ? V_MOVEMENT : 0) + data.b_phase |= (data.b_phase_movement ? V_MOVEMENT : 0) + data.a_phase |= (data.a_phase_retreat ? V_RETREAT : 0) + data.b_phase |= (data.b_phase_retreat ? V_RETREAT : 0) + if (!data.a_promise || !data.b_promise) { alert("Each side must promise something!") return @@ -1839,7 +1901,7 @@ function propose_deal_submit(evt) { return } - let deal = [ data.turn, data.a_power, data.b_power, data.a_promise, data.b_promise ] + let deal = [ data.turn, data.a_power, data.b_power, data.a_promise, data.b_promise, data.a_phase, data.b_phase ] if (view.actions.propose_deal) send_message("action", [ "propose_deal", deal, game_cookie ]) |