summaryrefslogtreecommitdiff
path: root/rules.js
diff options
context:
space:
mode:
authorFrans Bongers <fransbongers@franss-mbp.home>2025-03-09 16:04:43 +0100
committerFrans Bongers <fransbongers@franss-mbp.home>2025-03-09 16:04:43 +0100
commit434ddb6b7857529559e68b2f86ca02e0f14a9734 (patch)
treeff534e5d1542b12ac5bb53412436889b17a2a4c9 /rules.js
parent881b4951063b5e1e6cc9a91b85084bd21396149b (diff)
downloadland-and-freedom-434ddb6b7857529559e68b2f86ca02e0f14a9734.tar.gz
replace buttons for activate icon state
Diffstat (limited to 'rules.js')
-rw-r--r--rules.js256
1 files changed, 136 insertions, 120 deletions
diff --git a/rules.js b/rules.js
index c58c751..b0a9662 100644
--- a/rules.js
+++ b/rules.js
@@ -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;