summaryrefslogtreecommitdiff
path: root/rules.ts
diff options
context:
space:
mode:
Diffstat (limited to 'rules.ts')
-rw-r--r--rules.ts71
1 files changed, 40 insertions, 31 deletions
diff --git a/rules.ts b/rules.ts
index e509a17..938c4ac 100644
--- a/rules.ts
+++ b/rules.ts
@@ -316,9 +316,9 @@ function end_of_player_turn() {
function start_of_player_turn() {
const args = get_active_node_args();
const player = faction_player_map[args.f];
- log_h2(player, player);
game.faction_turn = args.f;
game.played_card = game.selected_cards[args.f][0];
+ log_h2(cards[game.played_card].title, player);
resolve_active_and_proceed();
}
@@ -726,8 +726,7 @@ function start_turn() {
game.current_events.push(cardId);
const card = cards[cardId] as EventCard;
- log_h2('Fascist Event', 'fascist');
- log(card.title);
+ log_h2(card.title, 'fascist');
game.fascist = 1;
game.engine = card.effects.map((effect) =>
@@ -1844,7 +1843,7 @@ states.player_turn = {
},
play_to_tableau() {
const faction = get_active_faction();
- const { strength } = play_card(faction, 'play_to_tableau');
+ const { strength } = play_card_to_tableau(faction);
update_active_node_args<PlayerTurnArgs>({
use_morale_bonus: true,
use_ap: true,
@@ -1854,12 +1853,12 @@ states.player_turn = {
},
play_for_event() {
const faction = get_active_faction();
- const { effects } = play_card(faction, 'play_for_event');
+ const { effects } = play_card_for_event(faction);
update_active_node_args<PlayerTurnArgs>({
resolving_event: true,
});
- const node = create_effects_node(effects);
+ const node = create_effects_node(effects, 'player_event');
node.c.push(create_function_node('end_resolving_event_effects'));
insert_before_active_node(node);
@@ -2761,9 +2760,8 @@ function get_hand_limit(faction: FactionId) {
return hand_limit;
}
-function play_card(
- faction: FactionId,
- type: 'play_for_event' | 'play_to_tableau'
+function play_card_for_event(
+ faction: FactionId
): PlayerCard {
const index = game.selected_cards[faction].length - 1;
const card_id = game.selected_cards[faction][index];
@@ -2771,14 +2769,27 @@ function play_card(
game.played_card = card_id;
array_remove(game.hands[faction], game.hands[faction].indexOf(card_id));
+ // TODO: keep card selected during resolution
array_remove(game.selected_cards[faction], index);
- if (type === 'play_for_event') {
- log_h3(`${game.active} plays ${card.title} for the Event`);
- game.trash[faction].push(card_id);
- } else {
- log_h3(`${game.active} plays ${card.title} to their Tableau`);
- game.tableaus[faction].push(card_id);
- }
+ log("Played for Event:")
+ // TODO: trash card at end of event resolution!
+ game.trash[faction].push(card_id);
+ return card as PlayerCard;
+}
+
+function play_card_to_tableau(
+ faction: FactionId
+): PlayerCard {
+ const index = game.selected_cards[faction].length - 1;
+ 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));
+ // TODO: keep card selected during resolution
+ array_remove(game.selected_cards[faction], index);
+ log("Played to Tableau:")
+ game.tableaus[faction].push(card_id);
return card as PlayerCard;
}
@@ -3084,9 +3095,9 @@ function victory_on_a_front(front_id: FrontId) {
gain_hero_points_in_player_order(game.fronts[front_id].contributions, 3);
}
-function create_effects_node(effects: Effect[]): SeqNode {
+function create_effects_node(effects: Effect[], source?: EffectSource): SeqNode {
const nodes = effects.reduce((accrued: EngineNode[], current: Effect) => {
- const node = resolve_effect(current);
+ const node = resolve_effect(current, source);
if (node !== null) {
accrued.push(node);
}
@@ -3357,7 +3368,7 @@ function logi(msg: string) {
function log_h1(msg: string) {
log_br();
- log('.h1 ' + msg);
+ log('#t ' + msg);
log_br();
}
@@ -3393,12 +3404,8 @@ function log_h3(msg: string) {
// #region UTILITY
-function lowerCaseFirstLetter(val: string) {
- return String(val).charAt(0).toLowerCase() + String(val).slice(1);
-}
-
function add_prompt_prefix(prompt: string, prefix: string) {
- return `${prefix}: ${lowerCaseFirstLetter(prompt)}`;
+ return `${prefix}: ${prompt}`;
}
function get_active_faction(): FactionId {
@@ -3503,13 +3510,14 @@ function get_player_order_in_game(
}
function get_source_name(source: EffectSource): string {
- const prefix_map: Record<EffectSource, string> = {
- fascist_event: 'Fascist Event',
- fascist_test: 'Fascist Test',
- track_icon: 'Track Trigger',
- momentum: 'Momentum',
- };
- return prefix_map[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';
+ }
+ return '???'
}
function get_factions_with_most_hero_poins(): FactionId[] {
@@ -3734,3 +3742,4 @@ function set_delete<T>(set: T[], item: T) {
}
// #endregion
+// vim: sts=2:sw=2:et