diff options
-rw-r--r-- | rules.js | 57 | ||||
-rw-r--r-- | rules.ts | 57 |
2 files changed, 101 insertions, 13 deletions
@@ -566,6 +566,7 @@ states.activate_icon = { view.prompt = 'Morale Bonus: '; view.prompt += join_oxford_comma(c.icons.map(get_icon_name), "or"); view.prompt += '.'; + let can_activate_icon = false; for (const i of c.icons) { const count = get_icon_count_in_tableau(i); let direction = 0; @@ -575,30 +576,43 @@ states.activate_icon = { for (let f of possible_fronts) { gen_action_front(f); } + if (possible_fronts.length > 0) { + can_activate_icon = true; + } 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); + const can_move_ss = gen_move_track(track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] + count); + can_activate_icon = can_activate_icon || can_move_ss; 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); + const can_move_g = gen_move_track(track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] + direction * count); + can_activate_icon = can_activate_icon || can_move_g; 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); + const can_move_t = gen_move_track(track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] - count); + can_activate_icon = can_activate_icon || can_move_t; 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); + const can_move_gtoc = gen_move_track(track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] + direction * count); + can_activate_icon = can_activate_icon || can_move_gtoc; break; case 'teamwork_on': - gen_action_bonus(data_1.TEAMWORK_BONUS); + if (game.bonuses[data_1.TEAMWORK_BONUS] === data_1.OFF) { + gen_action_bonus(data_1.TEAMWORK_BONUS); + can_activate_icon = true; + } + else { + can_activate_icon = false; + } break; default: gen_action(i); @@ -606,6 +620,9 @@ states.activate_icon = { if (!player_can_resolve_icon(i)) { view.actions[i] = 0; } + if (!can_activate_icon) { + gen_action('skip'); + } } }, spend_hp() { @@ -668,6 +685,9 @@ states.activate_icon = { update_bonus(b, data_1.ON); resolve_active_and_proceed(); }, + skip() { + resolve_active_and_proceed(); + }, }; states.add_card_to_tableau = { inactive: 'add a card to their tableau', @@ -1105,6 +1125,14 @@ states.confirm_fascist_turn = { }; states.draw_card = { inactive: 'draw a card', + auto_resolve() { + const { src, v } = get_active_node_args(); + if (src !== 'fascist_test') { + return false; + } + draw_hand_cards(get_active_faction(), v); + return true; + }, prompt() { gen_spend_hero_points(); const { v } = get_active_node_args(); @@ -1194,6 +1222,19 @@ states.end_of_year_discard = { }; states.hero_points = { inactive: 'gain Hero Points', + auto_resolve() { + const { src, v } = get_active_node_args(); + if (src !== 'fascist_test') { + return false; + } + if (v < 0) { + lose_hero_points(get_active_faction(), v); + } + else { + gain_hero_points(get_active_faction(), v); + } + return true; + }, prompt() { gen_spend_hero_points(); const value = get_active_node_args().v; @@ -2257,7 +2298,7 @@ function resolve_fascist_test() { hero_points_gain += 2; } if (hero_points_gain > 0) { - const node = resolve_effect((0, data_1.create_effect)('hero_points', faction, hero_points_gain)); + const node = resolve_effect((0, data_1.create_effect)('hero_points', faction, hero_points_gain), 'fascist_test'); hero_point_actions.push(node); } } @@ -2362,7 +2403,11 @@ const track_action_name = ['tr0', 'tr1', 'tr2', 'tr3', 'tr4']; 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)); + if (new_value === game.tracks[track_id]) { + return false; + } gen_action(track_action_name[track_id], new_value); + return true; } function gen_move_track_change(track_id, change) { const current_value = game.tracks[track_id]; @@ -777,7 +777,7 @@ states.activate_icon = { view.prompt = 'Morale Bonus: '; view.prompt += join_oxford_comma(c.icons.map(get_icon_name), "or"); view.prompt += '.'; - + let can_activate_icon = false; for (const i of c.icons) { const count = get_icon_count_in_tableau(i); let direction = 0; @@ -787,42 +787,54 @@ states.activate_icon = { for (let f of possible_fronts) { gen_action_front(f); } + if (possible_fronts.length > 0) { + can_activate_icon = true; + } break; case 'collectivization': case 'foreign_aid': case 'liberty': case 'soviet_support': - gen_move_track( + const can_move_ss = gen_move_track( track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] + count ); + can_activate_icon = can_activate_icon || can_move_ss; break; case 'government': direction = game.active === COMMUNIST ? -1 : 1; - gen_move_track( + const can_move_g = gen_move_track( track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] + direction * count ); + can_activate_icon = can_activate_icon || can_move_g; break; case 'd_collectivization': case 'd_foreign_aid': case 'd_government': case 'd_liberty': case 'd_soviet_support': - gen_move_track( + const can_move_t = gen_move_track( track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] - count ); + can_activate_icon = can_activate_icon || can_move_t; break; case 'government_to_center': direction = game.tracks[GOVERNMENT] >= 6 ? -1 : 1; - gen_move_track( + const can_move_gtoc = gen_move_track( track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] + direction * count ); + can_activate_icon = can_activate_icon || can_move_gtoc; break; case 'teamwork_on': - gen_action_bonus(TEAMWORK_BONUS); + if (game.bonuses[TEAMWORK_BONUS] === OFF) { + gen_action_bonus(TEAMWORK_BONUS); + can_activate_icon = true; + } else { + can_activate_icon = false; + } break; default: gen_action(i); @@ -831,6 +843,9 @@ states.activate_icon = { if (!player_can_resolve_icon(i)) { view.actions[i] = 0; } + if (!can_activate_icon) { + gen_action('skip'); + } } }, spend_hp() { @@ -895,6 +910,9 @@ states.activate_icon = { update_bonus(b, ON); resolve_active_and_proceed(); }, + skip() { + resolve_active_and_proceed(); + }, }; states.add_card_to_tableau = { @@ -1397,6 +1415,14 @@ states.confirm_fascist_turn = { states.draw_card = { inactive: 'draw a card', + auto_resolve() { + const { src, v } = get_active_node_args(); + if (src !== 'fascist_test') { + return false; + } + draw_hand_cards(get_active_faction(), v); + return true; + }, prompt() { gen_spend_hero_points(); const { v } = get_active_node_args(); @@ -1502,6 +1528,18 @@ states.end_of_year_discard = { states.hero_points = { inactive: 'gain Hero Points', + auto_resolve() { + const { src, v } = get_active_node_args(); + if (src !== 'fascist_test') { + return false; + } + if (v < 0) { + lose_hero_points(get_active_faction(), v); + } else { + gain_hero_points(get_active_faction(), v); + } + return true; + }, prompt() { gen_spend_hero_points(); const value = get_active_node_args().v; @@ -2833,7 +2871,8 @@ function resolve_fascist_test() { } if (hero_points_gain > 0) { const node = resolve_effect( - create_effect('hero_points', faction, hero_points_gain) + create_effect('hero_points', faction, hero_points_gain), + 'fascist_test' ); hero_point_actions.push(node); } @@ -2954,7 +2993,11 @@ const track_action_name = ['tr0', 'tr1', 'tr2', 'tr3', 'tr4']; function gen_move_track(track_id: number, new_value: number) { 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)); + if (new_value === game.tracks[track_id]) { + return false; + } gen_action(track_action_name[track_id], new_value); + return true; } function gen_move_track_change(track_id: number, change: number) { |