diff options
author | Frans Bongers <fransbongers@franss-mbp.home> | 2025-03-09 13:51:20 +0100 |
---|---|---|
committer | Frans Bongers <fransbongers@franss-mbp.home> | 2025-03-09 13:51:20 +0100 |
commit | 53ca3a6117265098a9ed1911b536962d97a4f4cf (patch) | |
tree | 642e34a64f728f5dfa6f6a5834730d1546a308ed /rules.js | |
parent | b42c19db211dfb9dce41afd39be576f0a8d80222 (diff) | |
download | land-and-freedom-53ca3a6117265098a9ed1911b536962d97a4f4cf.tar.gz |
move event card to trash after resolving action
Diffstat (limited to 'rules.js')
-rw-r--r-- | rules.js | 89 |
1 files changed, 61 insertions, 28 deletions
@@ -361,7 +361,9 @@ function game_view(state, current) { initiative: game.initiative, medallions: game.medallions, played_card: game.played_card, - player_order: current === OBSERVER ? get_player_order() : get_player_order_in_game(faction), + player_order: current === OBSERVER + ? get_player_order() + : get_player_order_in_game(faction), selected_cards: current === OBSERVER ? [] : game.selected_cards[faction], tableaus: game.tableaus, tracks: game.tracks, @@ -377,7 +379,7 @@ function game_view(state, current) { !game.active.includes(current)) { let inactive = states[game.state].inactive || game.state; view.prompt = Array.isArray(game.active) - ? `Waiting for ${game.active.join(" and ")} to ${inactive}.` + ? `Waiting for ${game.active.join(' and ')} to ${inactive}.` : `Waiting for ${game.active} to ${inactive}.`; } else { @@ -1368,11 +1370,26 @@ states.move_track_up_or_down = { spend_hp() { resolve_spend_hp(); }, - 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(); }, + 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(); + }, }; states.peek_fascist_cards = { inactive: 'peek at Fascist cards', @@ -1498,6 +1515,7 @@ states.player_turn = { resolving_event: true, }); const node = create_effects_node(effects, 'player_event'); + node.c.push(create_state_node('trash_card_played_for_event', faction)); node.c.push(create_function_node('end_resolving_event_effects')); insert_before_active_node(node); next(); @@ -1613,11 +1631,11 @@ states.remove_attack_from_fronts = { }, }; states.return_card = { - inactive: "return a card to their hand", + inactive: 'return a card to their hand', prompt() { const faction = get_active_faction(); gen_spend_hero_points(); - view.prompt = "Choose a card to return to your hand"; + view.prompt = 'Choose a card to return to your hand'; view.trash = game.trash[faction]; let possible = false; for (let c of game.trash[faction]) { @@ -1627,8 +1645,8 @@ states.return_card = { } } if (!possible) { - view.prompt = "No card in trash to return. You must skip"; - gen_action("skip"); + view.prompt = 'No card in trash to return. You must skip'; + gen_action('skip'); } }, spend_hp() { @@ -1854,6 +1872,25 @@ states.take_hero_points = { resolve_active_and_proceed(); }, }; +function trash_card() { + const faction = get_active_faction(); + const index = game.selected_cards[faction].length - 1; + const card_id = game.selected_cards[faction][index]; + array_remove(game.hands[faction], game.hands[faction].indexOf(card_id)); + array_remove(game.selected_cards[faction], index); + game.trash[faction].push(card_id); +} +states.trash_card_played_for_event = { + inactive: 'trash their card', + prompt() { + view.prompt = 'Trash your card'; + gen_action('trash_card'); + }, + trash_card() { + trash_card(); + resolve_active_and_proceed(); + }, +}; states.use_organization_medallion = { inactive: 'use Organization Medallion', prompt() { @@ -2187,10 +2224,7 @@ function play_card_for_event(faction) { const card_id = game.selected_cards[faction][index]; const card = cards[card_id]; game.played_card = card_id; - array_remove(game.hands[faction], game.hands[faction].indexOf(card_id)); - array_remove(game.selected_cards[faction], index); - log("Played for Event:"); - game.trash[faction].push(card_id); + log('Played for Event:'); return card; } function play_card_to_tableau(faction) { @@ -2200,7 +2234,7 @@ function play_card_to_tableau(faction) { game.played_card = card_id; array_remove(game.hands[faction], game.hands[faction].indexOf(card_id)); array_remove(game.selected_cards[faction], index); - log("Played to Tableau:"); + log('Played to Tableau:'); game.tableaus[faction].push(card_id); return card; } @@ -2323,13 +2357,7 @@ function get_government_track_direction(direction) { return 1; } } -const track_action_name = [ - "tr0", - "tr1", - "tr2", - "tr3", - "tr4" -]; +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; @@ -2741,11 +2769,16 @@ function get_player_order_in_game(first_player = game.initiative) { } function get_source_name(source) { switch (source) { - case 'player_event': return cards[game.played_card].title; - case 'fascist_event': return cards[game.current_events[game.current_events.length - 1]].title; - case 'fascist_test': return 'Fascist Test'; - case 'track_icon': return 'Track Trigger'; - case 'momentum': return 'Momentum'; + case 'player_event': + return cards[game.played_card].title; + case 'fascist_event': + return cards[game.current_events[game.current_events.length - 1]].title; + case 'fascist_test': + return 'Fascist Test'; + case 'track_icon': + return 'Track Trigger'; + case 'momentum': + return 'Momentum'; } return '???'; } |