From acd623b1af75bd540216684bf7f3f40b71bd3f38 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Sat, 15 Apr 2023 15:47:51 +0200 Subject: Use bits for FARC Zones. --- play.js | 50 +++++++++++++++++++++++-------------------- rules.js | 74 +++++++++++++++++++++++++++++++++++++++------------------------- 2 files changed, 72 insertions(+), 52 deletions(-) diff --git a/play.js b/play.js index 3bf4126..7803c64 100644 --- a/play.js +++ b/play.js @@ -211,6 +211,7 @@ const MOM_SENADO_FARC = 5 const MOM_SENADO_AUC = 6 const MOM_SENADO_CARTELS = 7 +const ATLANTICO = 11 const META_WEST = 14 const first_piece = data.first_piece @@ -218,6 +219,7 @@ const last_piece = data.last_piece const last_city = data.last_city const last_pop = data.last_pop +const first_dept = data.first_dept const last_dept = data.last_dept const first_loc = data.first_loc const last_loc = data.last_loc @@ -295,6 +297,7 @@ let ui = { spaces: [], control: [], support: [], + farc_zone: [], sabotage: [], terror: [], card_tip: document.getElementById("card_tip"), @@ -512,6 +515,7 @@ function init_ui() { if (i <= last_dept) { let [x, y] = LAYOUT[id] + if (i <= last_city) ui.control[i] = e = create("div", { className: "token govt_control" }) else @@ -528,8 +532,24 @@ function init_ui() { e.style.top = (y - 25) + "px" } document.getElementById("tokens").appendChild(e) + + if (i >= first_dept) { + ui.farc_zone[i] = e = create("div", { className: "token farc_zone hide" }) + if (i <= last_pop) { + e.style.left = (x - 25 - 49) + "px" + if (i === ATLANTICO || i === META_WEST) + e.style.top = (y - 25 - 50) + "px" + else + e.style.top = (y - 25 - 25) + "px" + } else { + e.style.top = (y - 25) + "px" + e.style.left = (x - 25 + 55) + "px" + } + } + document.getElementById("tokens").appendChild(e) } + if (i >= first_loc && i <= last_loc) { let [x, y] = LAYOUT[id] ui.sabotage[i] = e = create("div", { className: "hide" }) @@ -859,7 +879,7 @@ function layout_terror(tix, s, n) { tx += Math.round(r * Math.cos(a)) ty += Math.round(r * Math.sin(a)) } else { - if (set_has(view.farc_zones, s)) { + if (view.farc_zones & (1< last_pop || set_has(view.farc_zones, s)) { + if (s <= last_city || s > last_pop || (view.farc_zones & (1<= first_dept && s <= last_dept) { + ui.farc_zone[s].classList.toggle("hide", !(view.farc_zones & (1< 0) + if (n > 0) { log(faction_name[faction] + " Resources +" + n + ".") - else + if (game.aid + n > 99) + log("Resources capped at 99.") + } else { log(faction_name[faction] + " Resources " + n + ".") + } game.resources[faction] = Math.max(0, Math.min(99, game.resources[faction] + n)) } function add_aid(n) { - if (n > 0) + if (n > 0) { log("Aid +" + n + ".") - else + if (game.aid + n > 29) + log("Aid capped at 29.") + } else { log("Aid " + n + ".") + } game.aid = Math.max(0, Math.min(29, game.aid + n)) } @@ -5643,7 +5658,7 @@ function goto_election() { log_h3("Election") log("Uribe is El Presidente!") game.president = URIBE - if (game.farc_zones.length > 0) { + if (has_any_farc_zones()) { game.state = "remove_farc_zones" return } @@ -5654,13 +5669,13 @@ function goto_election() { states.remove_farc_zones = { prompt() { view.prompt = "Election: Remove all FARC Zones." - for (let s of game.farc_zones) - gen_action_space(s) + for (let s = first_dept; s <= last_dept; ++s) + if (is_farc_zone(s)) + gen_action_space(s) }, space(s) { - log(`Removed Farc Zone from S${s}.`) - set_delete(game.farc_zones, s) - if (game.farc_zones.length === 0) + remove_farc_zone(s) + if (!has_any_farc_zones()) goto_elite_backing() }, } @@ -5851,8 +5866,8 @@ function vm_place_farc_zone() { } function has_govt_in_farc_zone() { - for (let s of game.farc_zones) - if (has_govt_piece(s)) + for (let s = first_dept; s <= last_dept; ++s) + if (is_farc_zone(s) && has_govt_piece(s)) return true return false } @@ -5866,8 +5881,7 @@ states.farc_zone_place = { }, space(s) { push_undo() - log(`FARC Zone in S${s}.`) - set_add(game.farc_zones, s) + add_farc_zone(s) if (game.vm) game.vm.farc_zone = s @@ -5885,10 +5899,12 @@ states.farc_zone_redeploy = { prompt() { view.prompt = "Redeploy Government from FARC Zone." if (game.redeploy < 0) { - for (let s of game.farc_zones) { - gen_piece_in_space(s, GOVT, TROOPS) - gen_piece_in_space(s, GOVT, POLICE) - gen_piece_in_space(s, GOVT, BASE) + for (let s = first_dept; s <= last_dept; ++s) { + if (is_farc_zone(s)) { + gen_piece_in_space(s, GOVT, TROOPS) + gen_piece_in_space(s, GOVT, POLICE) + gen_piece_in_space(s, GOVT, BASE) + } } } else { let p = game.redeploy @@ -6183,7 +6199,7 @@ function vm_remove() { } function vm_remove_farc_zone() { - set_delete(game.farc_zones, game.vm.s) + remove_farc_zone(game.vm.s) vm_next() } @@ -7130,8 +7146,8 @@ exports.view = function (state, role) { underground: game.underground, govt_control: game.govt_control, farc_control: game.farc_control, - support: game.support, farc_zones: game.farc_zones, + support: game.support, terror: game.terror, sabotage: game.sabotage, } -- cgit v1.2.3