Skip to content

Commit

Permalink
Fix Allegiance Summmon Bug
Browse files Browse the repository at this point in the history
  • Loading branch information
APN-Pucky committed Apr 4, 2018
1 parent c559da2 commit c6fd2a2
Showing 1 changed file with 53 additions and 48 deletions.
101 changes: 53 additions & 48 deletions sim.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -695,72 +695,79 @@ struct PlayCard

template <enum CardType::CardType type>
CardStatus* op()
{
return op<type>(false);
}

template <enum CardType::CardType type>
CardStatus* op(bool summoned)
{
setStorage<type>();
placeCard<type>();

status->m_summoned = summoned;

unsigned played_faction_mask(0);
unsigned same_faction_cards_count(0);
bool bge_megamorphosis = fd->bg_effects[fd->tapi][PassiveBGE::megamorphosis];
//played_status = status;
//played_card = card;
bool bge_megamorphosis = fd->bg_effects[fd->tapi][PassiveBGE::megamorphosis];
//played_status = status;
//played_card = card;

check_and_perform_bravery(fd,status);
check_and_perform_bravery(fd,status);
if (status->m_delay == 0)
{
check_and_perform_valor(fd, status);
}

//refresh/init absorb
if(status->has_skill(Skill::absorb))
{
status->m_absorption = status->skill_base_value(Skill::absorb);
}
//refresh/init absorb
if(status->has_skill(Skill::absorb))
{
status->m_absorption = status->skill_base_value(Skill::absorb);
}


// 1. Evaluate skill Allegiance & count assaults with same faction (structures will be counted later)
// 2. Passive BGE Cold Sleep
for (CardStatus* status_i : fd->tap->assaults.m_indirect)
// 1. Evaluate skill Allegiance & count assaults with same faction (structures will be counted later)
// 2. Passive BGE Cold Sleep
for (CardStatus* status_i : fd->tap->assaults.m_indirect)
{
if (status_i == status || !is_alive(status_i)) { continue; } // except itself
//std::cout << status_description(status_i).c_str();
_DEBUG_ASSERT(is_alive(status_i));
if (bge_megamorphosis || (status_i->m_card->m_faction == card->m_faction))
{
if (status_i == status || !is_alive(status_i)) { continue; } // except itself
//std::cout << status_description(status_i).c_str();
_DEBUG_ASSERT(is_alive(status_i));
if (bge_megamorphosis || (status_i->m_card->m_faction == card->m_faction))
{
++ same_faction_cards_count;
unsigned allegiance_value = status_i->skill(Skill::allegiance);
if (__builtin_expect(allegiance_value, false) && !status->m_summoned)
{
_DEBUG_MSG(1, "%s activates Allegiance %u\n", status_description(status_i).c_str(), allegiance_value);
if (! status_i->m_sundered)
{ status_i->m_perm_attack_buff += allegiance_value; }
status_i->ext_hp(allegiance_value);
}
}
if (__builtin_expect(fd->bg_effects[fd->tapi][PassiveBGE::coldsleep], false)
&& status_i->m_protected_stasis && can_be_healed(status_i))
++ same_faction_cards_count;
unsigned allegiance_value = status_i->skill(Skill::allegiance);
if (__builtin_expect(allegiance_value, false) && !status->m_summoned)
{
unsigned bge_value = (status_i->m_protected_stasis + 1) / 2;
_DEBUG_MSG(1, "Cold Sleep: %s heals itself for %u\n", status_description(status_i).c_str(), bge_value);
status_i->add_hp(bge_value);
_DEBUG_MSG(1, "%s activates Allegiance %u\n", status_description(status_i).c_str(), allegiance_value);
if (! status_i->m_sundered)
{ status_i->m_perm_attack_buff += allegiance_value; }
status_i->ext_hp(allegiance_value);
}
}
if (__builtin_expect(fd->bg_effects[fd->tapi][PassiveBGE::coldsleep], false)
&& status_i->m_protected_stasis && can_be_healed(status_i))
{
unsigned bge_value = (status_i->m_protected_stasis + 1) / 2;
_DEBUG_MSG(1, "Cold Sleep: %s heals itself for %u\n", status_description(status_i).c_str(), bge_value);
status_i->add_hp(bge_value);
}
}

// Setup faction marks (bitmap) for stasis (skill Stasis / Passive BGE TemporalBacklash)
// unless Passive BGE Megamorphosis is enabled
if (__builtin_expect(!bge_megamorphosis, true))
// Setup faction marks (bitmap) for stasis (skill Stasis / Passive BGE TemporalBacklash)
// unless Passive BGE Megamorphosis is enabled
if (__builtin_expect(!bge_megamorphosis, true))
{
played_faction_mask = (1u << card->m_faction);
// do played card have stasis? mark this faction for stasis check
if (__builtin_expect(status->skill(Skill::stasis), false)
|| __builtin_expect(fd->bg_effects[fd->tapi][PassiveBGE::temporalbacklash] && status->skill(Skill::counter), false))
{
played_faction_mask = (1u << card->m_faction);
// do played card have stasis? mark this faction for stasis check
if (__builtin_expect(status->skill(Skill::stasis), false)
|| __builtin_expect(fd->bg_effects[fd->tapi][PassiveBGE::temporalbacklash] && status->skill(Skill::counter), false))
{
fd->tap->stasis_faction_bitmap |= played_faction_mask;
}
fd->tap->stasis_faction_bitmap |= played_faction_mask;
}
}

// Evaluate Passive BGE Oath-of-Loyalty
unsigned allegiance_value;
unsigned allegiance_value;
if (__builtin_expect(fd->bg_effects[fd->tapi][PassiveBGE::oath_of_loyalty], false)
&& ((allegiance_value = status->skill(Skill::allegiance)) > 0))
{
Expand Down Expand Up @@ -2479,12 +2486,10 @@ CardStatus* check_and_perform_summon(Field* fd, CardStatus* src)
switch (summoned_card->m_type)
{
case CardType::assault:
summoned_status = PlayCard(summoned_card, fd, src->m_player, src).op<CardType::assault>();
summoned_status->m_summoned=true;
summoned_status = PlayCard(summoned_card, fd, src->m_player, src).op<CardType::assault>(true);
return summoned_status;
case CardType::structure:
summoned_status = PlayCard(summoned_card, fd, src->m_player, src).op<CardType::structure>();
summoned_status->m_summoned=true;
summoned_status = PlayCard(summoned_card, fd, src->m_player, src).op<CardType::structure>(true);
return summoned_status;
default:
_DEBUG_MSG(0, "Unknown card type: #%u %s: %u\n",
Expand Down

0 comments on commit c6fd2a2

Please sign in to comment.