diff options
Diffstat (limited to 'rules.ts')
-rw-r--r-- | rules.ts | 92 |
1 files changed, 57 insertions, 35 deletions
@@ -657,6 +657,8 @@ export function setup(seed: number, _scenario: string, options: Record<string,bo glory_current_year: null, fascist: 0, card_played: 0, + can_use_ap: 0, + can_use_mb: 0, }; log_header('Land and Freedom', 't') @@ -1096,8 +1098,20 @@ states.choose_area_ap = { inactive: 'choose area to use Action Points', prompt() { gen_spend_hero_points(); - view.prompt = 'Use Action Points.'; + const use_morale_bonus = game.can_use_mb === 1 && game.bonuses[MORALE_BONUS] === ON; + + if (use_morale_bonus) { + view.prompt = "Use Action Points and Morale Bonus." + } else { + view.prompt = 'Use Action Points.'; + } + const strength: number = get_active_node_args().strength; + + if (use_morale_bonus) { + gen_action('use_morale_bonus'); + } + let can_use_ap = false; for (const track of tracks) { can_use_ap = gen_move_track_change(track.id, strength) || can_use_ap; @@ -1123,6 +1137,8 @@ states.choose_area_ap = { resolve_spend_hp(); }, bonus(b: number) { + log("Action Points:"); + game.can_use_ap = 0; // Turn on bonus update_bonus(b, ON); const s: number = get_active_node_args().strength; @@ -1137,33 +1153,54 @@ states.choose_area_ap = { resolve_active_and_proceed(); }, front(f: FrontId) { + log("Action Points:"); + game.can_use_ap = 0; const s: number = get_active_node_args().strength; update_front(f, s, get_active_faction()); resolve_active_and_proceed(); }, tr0(x: number) { + log("Action Points:"); + game.can_use_ap = 0; move_track_to(0, x); resolve_active_and_proceed(); }, tr1(x: number) { + log("Action Points:"); + game.can_use_ap = 0; move_track_to(1, x); resolve_active_and_proceed(); }, tr2(x: number) { + log("Action Points:"); + game.can_use_ap = 0; move_track_to(2, x); resolve_active_and_proceed(); }, tr3(x: number) { + log("Action Points:"); + game.can_use_ap = 0; move_track_to(3, x); resolve_active_and_proceed(); }, tr4(x: number) { + log("Action Points:"); + game.can_use_ap = 0; move_track_to(4, x); resolve_active_and_proceed(); }, skip() { + game.can_use_ap = 0; resolve_active_and_proceed(); }, + use_morale_bonus() { + log(`Morale Bonus:`) + game.can_use_mb = 0; + insert_before_active_node( + create_state_node('activate_icon', get_active_faction()) + ); + next(); + }, }; states.change_bonus = { @@ -1817,7 +1854,7 @@ function set_player_turn_prompt({ use_ap, use_momentum, use_morale_bonus, -}: PlayerTurnArgs & { can_spend_hp: boolean; can_play_card: boolean }) { +}: { can_spend_hp: boolean; can_play_card: boolean; use_ap: boolean; use_momentum: boolean; use_morale_bonus: boolean }) { if (can_play_card) view.prompt = "Play card for Action Points or for the Event." else if (use_momentum) @@ -1837,10 +1874,10 @@ states.player_turn = { prompt() { gen_spend_hero_points(); const faction_id = get_active_faction(); - let { use_ap, use_morale_bonus, src } = + let { src } = get_active_node_args<PlayerTurnArgs>(); - use_morale_bonus = use_morale_bonus && game.bonuses[MORALE_BONUS] === ON; + const use_morale_bonus = game.can_use_mb === 1 && game.bonuses[MORALE_BONUS] === ON; const can_spend_hp = game.faction_turn === faction_id && game.hero_points[faction_id] > 0; @@ -1849,7 +1886,7 @@ states.player_turn = { const use_momentum = game.momentum === faction_id && src !== MOMENTUM; if (use_momentum) { gen_action('use_momentum'); - if (use_ap || use_morale_bonus || can_play_card) { + if (use_morale_bonus || can_play_card) { view.actions['use_momentum'] = 0; } } @@ -1857,7 +1894,7 @@ states.player_turn = { set_player_turn_prompt({ can_play_card, can_spend_hp, - use_ap, + use_ap: game.can_use_ap === 1, // Will not happen in this state anymore use_momentum, use_morale_bonus, }); @@ -1866,13 +1903,10 @@ states.player_turn = { gen_action('play_to_tableau'); gen_action('play_for_event'); } - if (use_ap) { - gen_action('use_ap'); - } - if (use_morale_bonus && game.bonuses[MORALE_BONUS] === ON) { + if (use_morale_bonus) { gen_action('use_morale_bonus'); } - if (!(can_play_card || use_ap || use_morale_bonus || use_momentum)) { + if (!(can_play_card || use_morale_bonus || use_momentum)) { gen_action('end_turn'); } }, @@ -1885,6 +1919,8 @@ states.player_turn = { if (game.faction_turn === faction_id) { game.faction_turn = null; game.played_card = null; + game.can_use_ap = 0; + game.can_use_mb = 0; game.engine.push(create_function_node('end_of_player_turn', { f: faction_id })); } game.selected_cards[faction_id].pop(); @@ -1897,11 +1933,13 @@ states.player_turn = { game.card_played = 1; const faction = get_active_faction(); const { strength } = play_card_to_tableau(faction); - update_active_node_args<PlayerTurnArgs>({ - use_morale_bonus: true, - use_ap: true, - strength, - }); + game.can_use_ap = 1; + game.can_use_mb = 1; + insert_before_active_node( + create_state_node('choose_area_ap', faction, { + strength, + }) + ); next(); }, play_for_event() { @@ -1916,33 +1954,17 @@ states.player_turn = { next(); }, - use_ap() { - log("Action Points:"); - const faction = get_active_faction(); - const { strength } = get_active_node_args(); - update_active_node_args({ - use_ap: false, - }); - insert_before_active_node( - create_state_node('choose_area_ap', faction, { - strength, - }) - ); - next(); - }, use_momentum() { const faction_id = get_active_faction(); game.selected_cards[faction_id].pop(); game.momentum = null; + game.can_use_ap = 0; + game.can_use_mb = 0; resolve_active_and_proceed(); }, use_morale_bonus() { log(`Morale Bonus:`) - // Update args before inserting node before current node, - // otherwise it will update args of inserted node - update_active_node_args({ - use_morale_bonus: false, - }); + game.can_use_mb = 0; insert_before_active_node( create_state_node('activate_icon', get_active_faction()) ); |