diff options
Diffstat (limited to 'rules.ts')
-rw-r--r-- | rules.ts | 71 |
1 files changed, 40 insertions, 31 deletions
@@ -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 |