diff options
author | Frans Bongers <fransbongers@franss-mbp.home> | 2025-03-09 16:04:43 +0100 |
---|---|---|
committer | Frans Bongers <fransbongers@franss-mbp.home> | 2025-03-09 16:04:43 +0100 |
commit | 434ddb6b7857529559e68b2f86ca02e0f14a9734 (patch) | |
tree | ff534e5d1542b12ac5bb53412436889b17a2a4c9 /rules.js | |
parent | 881b4951063b5e1e6cc9a91b85084bd21396149b (diff) | |
download | land-and-freedom-434ddb6b7857529559e68b2f86ca02e0f14a9734.tar.gz |
replace buttons for activate icon state
Diffstat (limited to 'rules.js')
-rw-r--r-- | rules.js | 256 |
1 files changed, 136 insertions, 120 deletions
@@ -541,6 +541,18 @@ function player_can_resolve_icon(icon) { } return true; } +const track_icon_to_track_id_map = { + collectivization: data_1.COLLECTIVIZATION, + d_collectivization: data_1.COLLECTIVIZATION, + foreign_aid: data_1.FOREIGN_AID, + d_foreign_aid: data_1.FOREIGN_AID, + government: data_1.GOVERNMENT, + d_government: data_1.GOVERNMENT, + liberty: data_1.LIBERTY, + d_liberty: data_1.LIBERTY, + soviet_support: data_1.SOVIET_SUPPORT, + d_soviet_support: data_1.SOVIET_SUPPORT, +}; states.activate_icon = { inactive: 'activate an icon', prompt() { @@ -548,7 +560,42 @@ states.activate_icon = { view.prompt = 'Choose an icon to activate'; const c = cards[game.played_card]; for (const i of c.icons) { - gen_action(i); + const count = get_icon_count_in_tableau(i); + let direction = 0; + switch (i) { + case 'add_to_front': + const possible_fronts = get_fronts_to_add_to(data_1.ANY); + for (let f of possible_fronts) { + gen_action_front(f); + } + break; + case 'collectivization': + case 'foreign_aid': + case 'liberty': + case 'soviet_support': + gen_move_track(track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] + count); + break; + case 'government': + direction = game.active === data_1.COMMUNIST ? -1 : 1; + gen_move_track(track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] + direction * count); + break; + case 'd_collectivization': + case 'd_foreign_aid': + case 'd_government': + case 'd_liberty': + case 'd_soviet_support': + gen_move_track(track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] - count); + break; + case 'government_to_center': + direction = game.tracks[data_1.GOVERNMENT] >= 6 ? -1 : 1; + gen_move_track(track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] + direction * count); + break; + case 'teamwork_on': + gen_action_bonus(data_1.TEAMWORK_BONUS); + break; + default: + gen_action(i); + } if (!player_can_resolve_icon(i)) { view.actions[i] = 0; } @@ -557,70 +604,52 @@ states.activate_icon = { spend_hp() { resolve_spend_hp(); }, - add_to_front() { - insert_after_active_node(create_state_node('add_to_front', get_active_faction(), { - t: data_1.ANY, - v: get_icon_count_in_tableau('add_to_front'), - })); - resolve_active_and_proceed(); - }, - collectivization() { - const count = get_icon_count_in_tableau('collectivization'); - if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) { - insert_use_organization_medallion_node(data_1.COLLECTIVIZATION, count); - } - else { - move_track(data_1.COLLECTIVIZATION, count); - } + front(f) { + update_front(f, get_icon_count_in_tableau('add_to_front'), get_active_faction()); resolve_active_and_proceed(); }, - d_collectivization() { - const count = -1 * get_icon_count_in_tableau('d_collectivization'); + tr0(x) { if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) { - insert_use_organization_medallion_node(data_1.COLLECTIVIZATION, count); + insert_use_organization_medallion_node(data_1.LIBERTY, x); } else { - move_track(data_1.COLLECTIVIZATION, count); + move_track_to(0, x); } resolve_active_and_proceed(); }, - d_foreign_aid() { - const count = -1 * get_icon_count_in_tableau('d_foreign_aid'); + tr1(x) { if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) { - insert_use_organization_medallion_node(data_1.FOREIGN_AID, count); + insert_use_organization_medallion_node(data_1.COLLECTIVIZATION, x); } else { - move_track(data_1.FOREIGN_AID, count); + move_track_to(1, x); } resolve_active_and_proceed(); }, - d_government() { - const count = -1 * get_icon_count_in_tableau('d_government'); + tr2(x) { if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) { - insert_use_organization_medallion_node(data_1.GOVERNMENT, count); + insert_use_organization_medallion_node(data_1.GOVERNMENT, x); } else { - move_track(data_1.GOVERNMENT, count); + move_track_to(2, x); } resolve_active_and_proceed(); }, - d_liberty() { - const count = -1 * get_icon_count_in_tableau('d_liberty'); + tr3(x) { if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) { - insert_use_organization_medallion_node(data_1.LIBERTY, count); + insert_use_organization_medallion_node(data_1.SOVIET_SUPPORT, x); } else { - move_track(data_1.LIBERTY, count); + move_track_to(3, x); } resolve_active_and_proceed(); }, - d_soviet_support() { - const count = -1 * get_icon_count_in_tableau('d_soviet_support'); + tr4(x) { if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) { - insert_use_organization_medallion_node(data_1.SOVIET_SUPPORT, count); + insert_use_organization_medallion_node(data_1.FOREIGN_AID, x); } else { - move_track(data_1.SOVIET_SUPPORT, count); + move_track_to(4, x); } resolve_active_and_proceed(); }, @@ -628,54 +657,8 @@ states.activate_icon = { draw_hand_cards(get_active_faction(), get_icon_count_in_tableau('draw_card')); resolve_active_and_proceed(); }, - foreign_aid() { - const count = get_icon_count_in_tableau('foreign_aid'); - if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) { - insert_use_organization_medallion_node(data_1.FOREIGN_AID, count); - } - else { - move_track(data_1.FOREIGN_AID, count); - } - resolve_active_and_proceed(); - }, - government() { - const direction = game.active === data_1.COMMUNIST ? -1 : 1; - const count = direction * get_icon_count_in_tableau('government'); - if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) { - insert_use_organization_medallion_node(data_1.GOVERNMENT, count); - } - else { - move_track(data_1.GOVERNMENT, count); - } - resolve_active_and_proceed(); - }, - government_to_center() { - const direction = game.tracks[data_1.GOVERNMENT] >= 6 ? -1 : 1; - move_track(data_1.GOVERNMENT, direction * get_icon_count_in_tableau('government_to_center')); - resolve_active_and_proceed(); - }, - liberty() { - const count = get_icon_count_in_tableau('liberty'); - if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) { - insert_use_organization_medallion_node(data_1.LIBERTY, count); - } - else { - move_track(data_1.LIBERTY, count); - } - resolve_active_and_proceed(); - }, - soviet_support() { - const count = get_icon_count_in_tableau('soviet_support'); - if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) { - insert_use_organization_medallion_node(data_1.SOVIET_SUPPORT, count); - } - else { - move_track(data_1.SOVIET_SUPPORT, count); - } - resolve_active_and_proceed(); - }, - teamwork_on() { - game.bonuses[data_1.TEAMWORK_BONUS] = data_1.ON; + bonus(b) { + update_bonus(b, data_1.ON); resolve_active_and_proceed(); }, }; @@ -857,8 +840,9 @@ states.choose_area_ap = { prompt() { gen_spend_hero_points(); view.prompt = 'Use Action Points.'; + const strength = get_active_node_args().strength; for (const track of tracks) { - gen_action_standee(track.id); + gen_move_track_change(track.id, strength); } const fronts = get_fronts_to_add_to(data_1.ANY); for (const front of fronts) { @@ -887,11 +871,24 @@ states.choose_area_ap = { update_front(f, s, get_active_faction()); resolve_active_and_proceed(); }, - standee(track_id) { - insert_after_active_node(create_state_node('move_track_up_or_down', get_active_faction(), { - track_id, - strength: get_active_node()?.a.strength, - })); + tr0(x) { + move_track_to(0, x); + resolve_active_and_proceed(); + }, + tr1(x) { + move_track_to(1, x); + resolve_active_and_proceed(); + }, + tr2(x) { + move_track_to(2, x); + resolve_active_and_proceed(); + }, + tr3(x) { + move_track_to(3, x); + resolve_active_and_proceed(); + }, + tr4(x) { + move_track_to(4, x); resolve_active_and_proceed(); }, }; @@ -1664,13 +1661,22 @@ states.return_card = { resolve_active_and_proceed(); }, }; +function gen_spend_hero_points_move_track(track_id, change) { + for (let i = 1; i <= change; ++i) { + gen_move_track_change(track_id, i); + } +} +function pay_hero_points_to_move_track(track_id, new_value) { + const cost_per_step = [3, 3, 4, 2, 2]; + const change = Math.abs(game.tracks[track_id] - new_value); + pay_hero_points(get_active_faction(), cost_per_step[track_id] * change); +} states.spend_hero_points = { inactive: 'spend Hero points', prompt() { const hero_points = game.hero_points[get_active_faction()]; view.prompt = `Spend up to ${hero_points} Hero Points.`; const faction = get_active_faction(); - gen_action('done'); if (hero_points === 0) { return; } @@ -1689,17 +1695,17 @@ states.spend_hero_points = { gen_action_bonus(bonus); } } - gen_action_standee(data_1.FOREIGN_AID); - gen_action_standee(data_1.SOVIET_SUPPORT); + gen_spend_hero_points_move_track(data_1.FOREIGN_AID, Math.floor(hero_points / 2)); + gen_spend_hero_points_move_track(data_1.SOVIET_SUPPORT, Math.floor(hero_points / 2)); if (hero_points < 3) { return; } - gen_action_standee(data_1.COLLECTIVIZATION); - gen_action_standee(data_1.LIBERTY); + gen_spend_hero_points_move_track(data_1.COLLECTIVIZATION, Math.floor(hero_points / 3)); + gen_spend_hero_points_move_track(data_1.LIBERTY, Math.floor(hero_points / 3)); if (hero_points < 4) { return; } - gen_action_standee(data_1.GOVERNMENT); + gen_spend_hero_points_move_track(data_1.GOVERNMENT, Math.floor(hero_points / 4)); }, add_to_front() { const faction = get_active_faction(); @@ -1710,9 +1716,6 @@ states.spend_hero_points = { })); resolve_active_and_proceed(); }, - done() { - resolve_active_and_proceed(); - }, bonus(b) { update_active_node_args({ turn_on_bonus: false, @@ -1738,23 +1741,29 @@ states.spend_hero_points = { insert_after_active_node(create_state_node('remove_blank_marker', faction)); resolve_active_and_proceed(); }, - standee(track_id) { - update_active_node_args({ - move_track: false, - }); - let amount = 2; - if (track_id === data_1.LIBERTY || track_id === data_1.COLLECTIVIZATION) { - amount = 3; - } - else if (track_id === data_1.GOVERNMENT) { - amount = 4; - } - const faction = get_active_faction(); - pay_hero_points(faction, amount); - insert_after_active_node(create_state_node('move_track_up_or_down', faction, { - track_id, - strength: 1, - })); + tr0(x) { + pay_hero_points_to_move_track(data_1.LIBERTY, x); + move_track_to(0, x); + resolve_active_and_proceed(); + }, + tr1(x) { + pay_hero_points_to_move_track(data_1.COLLECTIVIZATION, x); + move_track_to(1, x); + resolve_active_and_proceed(); + }, + tr2(x) { + pay_hero_points_to_move_track(data_1.GOVERNMENT, x); + move_track_to(2, x); + resolve_active_and_proceed(); + }, + tr3(x) { + pay_hero_points_to_move_track(data_1.SOVIET_SUPPORT, x); + move_track_to(3, x); + resolve_active_and_proceed(); + }, + tr4(x) { + pay_hero_points_to_move_track(data_1.FOREIGN_AID, x); + move_track_to(4, x); resolve_active_and_proceed(); }, }; @@ -1892,7 +1901,7 @@ states.use_organization_medallion = { pay_hero_points(faction, 1); game.used_medallions.push(data_1.ORGANIZATION_MEDALLION_ID); let { t, v } = get_active_node_args(); - if (v > 0) { + if (v > game.tracks[t]) { v++; } else { @@ -2343,13 +2352,20 @@ function get_government_track_direction(direction) { } } const track_action_name = ['tr0', 'tr1', 'tr2', 'tr3', 'tr4']; -function gen_move_track(track_id, change) { - const current_value = game.tracks[track_id]; - let new_value = current_value + change; +function gen_move_track(track_id, new_value) { new_value = Math.max(new_value, get_min_value_for_track(track_id)); new_value = Math.min(new_value, get_max_value_for_track(track_id)); gen_action(track_action_name[track_id], new_value); } +function gen_move_track_change(track_id, change) { + const current_value = game.tracks[track_id]; + if (can_move_track_up(track_id)) { + gen_move_track(track_id, current_value + change); + } + if (can_move_track_down(track_id)) { + gen_move_track(track_id, current_value - change); + } +} function move_track(track_id, change) { const current_value = game.tracks[track_id]; let new_value = current_value + change; |