diff --git a/client/battle/CBattleAnimations.cpp b/client/battle/CBattleAnimations.cpp index 37b9d722f..911b9caad 100644 --- a/client/battle/CBattleAnimations.cpp +++ b/client/battle/CBattleAnimations.cpp @@ -233,7 +233,7 @@ std::string CDefenceAnimation::getMySound() if(killed) return battle_sound(stack->getCreature(), killed); - if (stack->valOfBonuses(Bonus::UntilGetsTurn)) + if (vstd::contains(stack->state, EBattleStackState::DEFENDING_ANI)) return battle_sound(stack->getCreature(), defend); return battle_sound(stack->getCreature(), wince); } @@ -243,9 +243,7 @@ CCreatureAnim::EAnimType CDefenceAnimation::getMyAnimType() if(killed) return CCreatureAnim::DEATH; - auto selector = CSelector(Bonus::UntilGetsTurn).And(Selector::typeSubtype(Bonus::PRIMARY_SKILL, PrimarySkill::DEFENSE)); - - if(stack->valOfBonuses(selector)) + if (vstd::contains(stack->state, EBattleStackState::DEFENDING_ANI)) return CCreatureAnim::DEFENCE; return CCreatureAnim::HITTED; } diff --git a/lib/GameConstants.h b/lib/GameConstants.h index 0a1f74945..8e12ccc34 100644 --- a/lib/GameConstants.h +++ b/lib/GameConstants.h @@ -433,7 +433,7 @@ namespace EMarketMode namespace EBattleStackState { enum EBattleStackState{ALIVE = 180, SUMMONED, CLONED, DEAD_CLONE, HAD_MORALE, WAITING, MOVED, DEFENDING, FEAR, - DRAINED_MANA /*remember to drain mana only once per turn*/}; + DRAINED_MANA /*remember to drain mana only once per turn*/, DEFENDING_ANI/*only for animation*/}; } namespace ECommander diff --git a/lib/NetPacksLib.cpp b/lib/NetPacksLib.cpp index ede41bd8b..742663b79 100644 --- a/lib/NetPacksLib.cpp +++ b/lib/NetPacksLib.cpp @@ -1304,6 +1304,9 @@ DLL_LINKAGE void StartAction::applyGs( CGameState *gs ) { CStack *st = gs->curB->getStack(ba.stackNumber); + if(vstd::contains(st->state, EBattleStackState::DEFENDING_ANI)) + st->state -= EBattleStackState::DEFENDING_ANI; + if(ba.actionType == Battle::END_TACTIC_PHASE) { gs->curB->tacticDistance = 0; @@ -1329,7 +1332,8 @@ DLL_LINKAGE void StartAction::applyGs( CGameState *gs ) switch(ba.actionType) { case Battle::DEFEND: - st->state.insert(EBattleStackState::DEFENDING); + st->state.insert(EBattleStackState::DEFENDING); + st->state.insert(EBattleStackState::DEFENDING_ANI); break; case Battle::WAIT: st->state.insert(EBattleStackState::WAITING);