@@ -291,7 +291,7 @@ void prepend_on_death(Field* fd)
291291 }
292292 }
293293 // Virulence
294- if (fd->bg_effects [ opponent (status-> m_player )] .count (virulence))
294+ if (fd->bg_effects .count (virulence))
295295 {
296296 if (status->m_index != last_index + 1 )
297297 {
@@ -329,10 +329,10 @@ void prepend_on_death(Field* fd)
329329 }
330330 }
331331 // Revenge
332- if (fd->bg_effects [status-> m_player ] .count (revenge))
332+ if (fd->bg_effects .count (revenge))
333333 {
334- SkillSpec ss_heal{heal, fd->bg_effects [status-> m_player ] .at (revenge), allfactions, 0 , 0 , no_skill, no_skill, true ,};
335- SkillSpec ss_rally{rally, fd->bg_effects [status-> m_player ] .at (revenge), allfactions, 0 , 0 , no_skill, no_skill, true ,};
334+ SkillSpec ss_heal{heal, fd->bg_effects .at (revenge), allfactions, 0 , 0 , no_skill, no_skill, true ,};
335+ SkillSpec ss_rally{rally, fd->bg_effects .at (revenge), allfactions, 0 , 0 , no_skill, no_skill, true ,};
336336 CardStatus * commander = &fd->players [status->m_player ]->commander ;
337337 _DEBUG_MSG (2 , " Revenge: Preparing skill %s and %s\n " , skill_description (fd->cards , ss_heal).c_str (), skill_description (fd->cards , ss_rally).c_str ());
338338 od_skills.emplace_back (commander, ss_heal);
@@ -842,9 +842,9 @@ struct PerformAttack
842842 remove_hp (fd, att_status, counter_dmg);
843843 prepend_on_death (fd);
844844 resolve_skill (fd);
845- if (def_cardtype == CardType::assault && def_status->m_hp > 0 && fd->bg_effects [def_status-> m_player ] .count (counterflux))
845+ if (def_cardtype == CardType::assault && def_status->m_hp > 0 && fd->bg_effects .count (counterflux))
846846 {
847- unsigned flux_denominator = fd->bg_effects [def_status-> m_player ] .at (counterflux) ? fd->bg_effects [def_status-> m_player ] .at (counterflux) : 4 ;
847+ unsigned flux_denominator = fd->bg_effects .at (counterflux) ? fd->bg_effects .at (counterflux) : 4 ;
848848 unsigned flux_value = (def_status->skill (counter) - 1 ) / flux_denominator + 1 ;
849849 _DEBUG_MSG (1 , " Counterflux: %s heals itself and berserks for %u\n " , status_description (def_status).c_str (), flux_value);
850850 add_hp (fd, def_status, flux_value);
@@ -868,9 +868,9 @@ struct PerformAttack
868868 {
869869 fd->inc_counter (QuestType::skill_use, berserk);
870870 }
871- if (fd->bg_effects [att_status-> m_player ] .count (enduringrage))
871+ if (fd->bg_effects .count (enduringrage))
872872 {
873- unsigned bge_denominator = fd->bg_effects [att_status-> m_player ] .at (enduringrage) ? fd->bg_effects [att_status-> m_player ] .at (enduringrage) : 2 ;
873+ unsigned bge_denominator = fd->bg_effects .at (enduringrage) ? fd->bg_effects .at (enduringrage) : 2 ;
874874 unsigned bge_value = (berserk_value - 1 ) / bge_denominator + 1 ;
875875 _DEBUG_MSG (1 , " EnduringRage: %s heals and protects itself for %u\n " , status_description (att_status).c_str (), bge_value);
876876 add_hp (fd, att_status, bge_value);
@@ -879,7 +879,7 @@ struct PerformAttack
879879 }
880880 do_leech<def_cardtype>();
881881 unsigned valor_value = att_status->skill (valor);
882- if (valor_value > 0 && ! att_status->m_sundered && fd->bg_effects [att_status-> m_player ] .count (heroism) && def_cardtype == CardType::assault && def_status->m_hp <= 0 )
882+ if (valor_value > 0 && ! att_status->m_sundered && fd->bg_effects .count (heroism) && def_cardtype == CardType::assault && def_status->m_hp <= 0 )
883883 {
884884 _DEBUG_MSG (1 , " Heroism: %s gain %u attack\n " , status_description (att_status).c_str (), valor_value);
885885 att_status->m_attack += valor_value;
@@ -939,7 +939,7 @@ struct PerformAttack
939939 std::string reduced_desc;
940940 unsigned reduced_dmg (0 );
941941 unsigned armor_value = def_status->skill (armor);
942- if (def_status->m_card ->m_type == CardType::assault && fd->bg_effects [def_status-> m_player ] .count (fortification))
942+ if (def_status->m_card ->m_type == CardType::assault && fd->bg_effects .count (fortification))
943943 {
944944 for (auto && adj_status: fd->adjacent_assaults (def_status))
945945 {
@@ -969,7 +969,7 @@ struct PerformAttack
969969 if (!desc.empty ()) { desc += " =" + to_string (att_dmg); }
970970 _DEBUG_MSG (1 , " %s attacks %s for %u%s damage\n " , status_description (att_status).c_str (), status_description (def_status).c_str (), pre_modifier_dmg, desc.c_str ());
971971 }
972- if (legion_value > 0 && can_be_healed (att_status) && fd->bg_effects [att_status-> m_player ] .count (brigade))
972+ if (legion_value > 0 && can_be_healed (att_status) && fd->bg_effects .count (brigade))
973973 {
974974 _DEBUG_MSG (1 , " Brigade: %s heals itself for %u\n " , status_description (att_status).c_str (), legion_value);
975975 add_hp (fd, att_status, legion_value);
@@ -1098,9 +1098,9 @@ bool attack_phase(Field* fd)
10981098 att_dmg = attack_commander (fd, att_status);
10991099 }
11001100
1101- if (att_dmg > 0 && !fd->assault_bloodlusted && fd->bg_effects [fd-> tapi ] .count (bloodlust))
1101+ if (att_dmg > 0 && !fd->assault_bloodlusted && fd->bg_effects .count (bloodlust))
11021102 {
1103- fd->bloodlust_value += fd->bg_effects [fd-> tapi ] .at (bloodlust);
1103+ fd->bloodlust_value += fd->bg_effects .at (bloodlust);
11041104 fd->assault_bloodlusted = true ;
11051105 }
11061106
@@ -1336,7 +1336,7 @@ inline void perform_skill<weaken>(Field* fd, CardStatus* src, CardStatus* dst, c
13361336template <unsigned skill_id>
13371337inline unsigned select_fast (Field* fd, CardStatus* src, const std::vector<CardStatus*>& cards, const SkillSpec& s)
13381338{
1339- if (s.y == allfactions || fd->bg_effects [src-> m_player ] .count (metamorphosis))
1339+ if (s.y == allfactions || fd->bg_effects .count (metamorphosis))
13401340 {
13411341 return (fd->make_selection_array (cards.begin (), cards.end (), [fd, src, s](CardStatus* c){return (skill_predicate<skill_id>(fd, src, c, s));}));
13421342 }
@@ -1563,7 +1563,7 @@ void perform_targetted_allied_fast(Field* fd, CardStatus* src, const SkillSpec&
15631563 }
15641564 check_and_perform_skill<skill_id>(fd, src, dst, s, false , has_counted_quest);
15651565 }
1566- if (num_inhibited > 0 && fd->bg_effects [ opponent (src-> m_player )] .count (divert))
1566+ if (num_inhibited > 0 && fd->bg_effects .count (divert))
15671567 {
15681568 SkillSpec diverted_ss = s;
15691569 diverted_ss.y = allfactions;
@@ -1589,6 +1589,11 @@ void perform_targetted_allied_fast(Field* fd, CardStatus* src, const SkillSpec&
15891589
15901590void perform_targetted_allied_fast_rush (Field* fd, CardStatus* src, const SkillSpec& s)
15911591{
1592+ if (src->m_card ->m_type == CardType::commander)
1593+ { // BGE skills are casted as by commander
1594+ perform_targetted_allied_fast<rush>(fd, src, s);
1595+ return ;
1596+ }
15921597 if (src->m_rush_attempted )
15931598 {
15941599 _DEBUG_MSG (2 , " %s does not check Rush again.\n " , status_description (src).c_str ());
@@ -1605,7 +1610,7 @@ void perform_targetted_hostile_fast(Field* fd, CardStatus* src, const SkillSpec&
16051610 select_targets<skill_id>(fd, src, s);
16061611 bool has_counted_quest = false ;
16071612 std::vector<CardStatus *> paybackers;
1608- if (fd->bg_effects [src-> m_player ] .count (turningtides) && skill_id == weaken)
1613+ if (fd->bg_effects .count (turningtides) && skill_id == weaken)
16091614 {
16101615 unsigned turningtides_value = 0 ;
16111616 for (CardStatus * dst: fd->selection_array )
@@ -1717,8 +1722,8 @@ Results<uint64_t> play(Field* fd)
17171722 }
17181723 if (__builtin_expect (fd->end , false )) { break ; }
17191724
1720- // Evaluate Heroism Battleground skills
1721- if (fd->bg_effects [fd-> tapi ] .count (heroism))
1725+ // Evaluate Heroism BGE skills
1726+ if (fd->bg_effects .count (heroism))
17221727 {
17231728 for (CardStatus * dst: fd->tap ->assaults .m_indirect )
17241729 {
@@ -1730,7 +1735,7 @@ Results<uint64_t> play(Field* fd)
17301735 {
17311736 _DEBUG_MSG (1 , " Heroism: %s on %s but it is inhibited\n " , skill_short_description (ss_protect).c_str (), status_description (dst).c_str ());
17321737 -- dst->m_inhibited ;
1733- if (fd->bg_effects [fd-> tipi ] .count (divert))
1738+ if (fd->bg_effects .count (divert))
17341739 {
17351740 SkillSpec diverted_ss = ss_protect;
17361741 diverted_ss.y = allfactions;
@@ -1759,7 +1764,7 @@ Results<uint64_t> play(Field* fd)
17591764 }
17601765 }
17611766
1762- // Evaluate activation Battleground skills
1767+ // Evaluate activation BGE skills
17631768 for (const auto & bg_skill: fd->bg_skills [fd->tapi ])
17641769 {
17651770 _DEBUG_MSG (2 , " Evaluating BG skill %s\n " , skill_description (fd->cards , bg_skill).c_str ());
0 commit comments