summaryrefslogtreecommitdiff
path: root/rules.js
diff options
context:
space:
mode:
Diffstat (limited to 'rules.js')
-rw-r--r--rules.js39
1 files changed, 20 insertions, 19 deletions
diff --git a/rules.js b/rules.js
index b371266..386eb1e 100644
--- a/rules.js
+++ b/rules.js
@@ -148,6 +148,7 @@ function setup_final_bid() {
}
function setup_player_turn() {
game.fascist = 0;
+ game.card_played = 0;
const next_faction = game.first_player === null
? get_player_order()[0]
: get_next_faction_in_player_order(get_active_faction());
@@ -224,6 +225,7 @@ const engine_functions = {
card53_event2,
card54_event1,
setup_return_card_from_trash,
+ trash_card,
};
function get_active(engine) {
for (let i of engine) {
@@ -475,6 +477,7 @@ function setup(seed, _scenario, _options) {
year: 0,
glory_current_year: null,
fascist: 0,
+ card_played: 0,
};
game.player_order.push(exports.roles[random(2)]);
game.player_order.push(game.player_order[1] === data_1.ANARCHIST ? data_1.COMMUNIST : data_1.ANARCHIST);
@@ -945,7 +948,8 @@ states.play_card = {
},
card(c) {
const faction = get_active_faction();
- game.selected_cards[faction].push(c);
+ game.selected_cards[faction] = [c];
+ game.card_played = 0;
game.played_card = game.selected_cards[faction][0];
resolve_active_and_proceed();
},
@@ -975,7 +979,7 @@ states.choose_card = {
},
card(c, player) {
const faction = player_faction_map[player];
- game.selected_cards[faction].push(c);
+ game.selected_cards[faction] = [c];
},
undo(_, player) {
const faction = player_faction_map[player];
@@ -1024,7 +1028,7 @@ function setup_momentum() {
return;
}
const node = get_nodes_for_state('player_turn')[0];
- const player_needs_to_play_card = game.selected_cards[faction].length > 0;
+ const player_needs_to_play_card = !game.card_played;
const { use_ap, use_morale_bonus, resolving_event } = node.a ?? {};
if (player_needs_to_play_card ||
use_ap ||
@@ -1483,7 +1487,7 @@ states.player_turn = {
let { use_ap, use_morale_bonus, use_momentum } = get_active_node_args();
use_morale_bonus = use_morale_bonus && game.bonuses[data_1.MORALE_BONUS] === data_1.ON;
const can_spend_hp = game.faction_turn === faction_id && game.hero_points[faction_id] > 0;
- const can_play_card = game.selected_cards[faction_id].length > 0;
+ const can_play_card = !game.card_played;
if (use_momentum) {
gen_action('use_momentum');
if (use_ap || use_morale_bonus || can_play_card) {
@@ -1517,9 +1521,11 @@ states.player_turn = {
end_turn() {
game.faction_turn = null;
game.played_card = null;
+ game.selected_cards[get_active_faction()] = [];
resolve_active_and_proceed(true);
},
play_to_tableau() {
+ game.card_played = 1;
const faction = get_active_faction();
const { strength } = play_card_to_tableau(faction);
update_active_node_args({
@@ -1530,13 +1536,14 @@ states.player_turn = {
next();
},
play_for_event() {
+ game.card_played = 1;
const faction = get_active_faction();
const { effects } = play_card_for_event(faction);
update_active_node_args({
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('trash_card', faction));
node.c.push(create_function_node('end_resolving_event_effects'));
insert_before_active_node(node);
next();
@@ -1553,11 +1560,16 @@ states.player_turn = {
next();
},
use_momentum() {
+ const faction = get_active_faction();
+ game.card_played = 0;
+ game.selected_cards[faction] = [];
update_active_node_args({
use_morale_bonus: false,
use_momentum: false,
});
- setup_momentum();
+ insert_before_active_node(create_state_node('play_card', faction, {
+ src: 'momentum',
+ }));
next();
},
use_morale_bonus() {
@@ -1896,18 +1908,8 @@ function trash_card() {
array_remove(game.hands[faction], game.hands[faction].indexOf(card_id));
array_remove(game.selected_cards[faction], index);
game.trash[faction].push(card_id);
+ resolve_active_and_proceed();
}
-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() {
@@ -1930,7 +1932,7 @@ states.use_organization_medallion = {
else {
v--;
}
- move_track(t, v);
+ move_track(t, v - game.tracks[t]);
resolve_active_and_proceed();
},
no() {
@@ -2250,7 +2252,6 @@ function play_card_to_tableau(faction) {
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 to Tableau:');
game.tableaus[faction].push(card_id);
return card;