summaryrefslogtreecommitdiff
path: root/rules.js
diff options
context:
space:
mode:
authorFrans Bongers <fransbongers@franss-mbp.home>2025-03-09 13:51:20 +0100
committerFrans Bongers <fransbongers@franss-mbp.home>2025-03-09 13:51:20 +0100
commit53ca3a6117265098a9ed1911b536962d97a4f4cf (patch)
tree642e34a64f728f5dfa6f6a5834730d1546a308ed /rules.js
parentb42c19db211dfb9dce41afd39be576f0a8d80222 (diff)
downloadland-and-freedom-53ca3a6117265098a9ed1911b536962d97a4f4cf.tar.gz
move event card to trash after resolving action
Diffstat (limited to 'rules.js')
-rw-r--r--rules.js89
1 files changed, 61 insertions, 28 deletions
diff --git a/rules.js b/rules.js
index abe0d7c..69c3e8c 100644
--- a/rules.js
+++ b/rules.js
@@ -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 '???';
}