|  | @@ -912,17 +912,28 @@ void CBattleInterface::stackMoved(int number, int destHex, bool endMoving)
 | 
	
		
			
				|  |  |  	creAnims[number]->pos.y = coords.second;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void CBattleInterface::stackIsAttacked(int ID, int dmg, int killed, int IDby, bool byShooting)
 | 
	
		
			
				|  |  | +void CBattleInterface::stacksAreAttacked(std::vector<CBattleInterface::SStackAttackedInfo> attackedInfos)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -	while(creAnims[ID]->getType() != 2 || (attackingInfo && attackingInfo->IDby == IDby))
 | 
	
		
			
				|  |  | +	while(true)
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  |  		show();
 | 
	
		
			
				|  |  |  		CSDL_Ext::update();
 | 
	
		
			
				|  |  |  		SDL_framerateDelay(LOCPLINT->mainFPSmng);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		//checking break conditions
 | 
	
		
			
				|  |  | +		bool break_loop = true;
 | 
	
		
			
				|  |  | +		for(int g=0; g<attackedInfos.size(); ++g)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			if(creAnims[attackedInfos[g].ID]->getType() != 2)
 | 
	
		
			
				|  |  | +				break_loop = false;
 | 
	
		
			
				|  |  | +			if(attackingInfo && attackingInfo->IDby == attackedInfos[g].IDby)
 | 
	
		
			
				|  |  | +				break_loop = false;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		if(break_loop) break;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	if(byShooting) //delay hit animation
 | 
	
		
			
				|  |  | +	if(attackedInfos.size() == 1 && attackedInfos[0].byShooting) //delay hit animation
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  | -		CStack attacker = *LOCPLINT->cb->battleGetStackByID(IDby);
 | 
	
		
			
				|  |  | +		CStack attacker = *LOCPLINT->cb->battleGetStackByID(attackedInfos[0].IDby);
 | 
	
		
			
				|  |  |  		while(true)
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  |  			bool found = false;
 | 
	
	
		
			
				|  | @@ -944,20 +955,41 @@ void CBattleInterface::stackIsAttacked(int ID, int dmg, int killed, int IDby, bo
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	creAnims[ID]->setType(3); //getting hit
 | 
	
		
			
				|  |  | -	int firstFrame = creAnims[ID]->getFrame();
 | 
	
		
			
				|  |  | -	for(int i=0; creAnims[ID]->getFrame() != creAnims[ID]->framesInGroup(3) + firstFrame - 1; ++i)
 | 
	
		
			
				|  |  | +	std::vector<int> animLengths;
 | 
	
		
			
				|  |  | +	int maxLen = 0;
 | 
	
		
			
				|  |  | +	for(int g=0; g<attackedInfos.size(); ++g)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		creAnims[attackedInfos[g].ID]->setType(3); //getting hit
 | 
	
		
			
				|  |  | +		animLengths.push_back( creAnims[attackedInfos[g].ID]->framesInGroup(3) );
 | 
	
		
			
				|  |  | +		if(creAnims[attackedInfos[g].ID]->framesInGroup(3) > maxLen)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			maxLen = creAnims[attackedInfos[g].ID]->framesInGroup(3);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	for(int i=0; i<maxLen; ++i)
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  |  		show();
 | 
	
		
			
				|  |  |  		CSDL_Ext::update();
 | 
	
		
			
				|  |  |  		SDL_framerateDelay(LOCPLINT->mainFPSmng);
 | 
	
		
			
				|  |  |  		/*if((animCount+1)%(4/animSpeed)==0)
 | 
	
		
			
				|  |  |  			creAnims[ID]->incrementFrame();*/
 | 
	
		
			
				|  |  | +		for(int g=0; g<attackedInfos.size(); ++g)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			if(i>=animLengths[g] && creAnims[attackedInfos[g].ID]->getType() == 3)
 | 
	
		
			
				|  |  | +				creAnims[attackedInfos[g].ID]->setType(2);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	for(int g=0; g<attackedInfos.size(); ++g)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		if(creAnims[attackedInfos[g].ID]->getType() == 3)
 | 
	
		
			
				|  |  | +			creAnims[attackedInfos[g].ID]->setType(2);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	creAnims[ID]->setType(2);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	if(IDby!=-1)
 | 
	
		
			
				|  |  | -		printConsoleAttacked(ID, dmg, killed, IDby);
 | 
	
		
			
				|  |  | +	for(int g=0; g<attackedInfos.size(); ++g)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		if(attackedInfos[g].IDby!=-1)
 | 
	
		
			
				|  |  | +			printConsoleAttacked(attackedInfos[g].ID, attackedInfos[g].dmg, attackedInfos[g].killed, attackedInfos[g].IDby);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CBattleInterface::stackAttacking(int ID, int dest)
 | 
	
	
		
			
				|  | @@ -1392,6 +1424,11 @@ void CBattleInterface::spellCasted(SpellCasted * sc)
 | 
	
		
			
				|  |  |  			displayEffect(19, sc->tile);
 | 
	
		
			
				|  |  |  			break;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | +	case 61: //forgetfulness
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			displayEffect(42, sc->tile);
 | 
	
		
			
				|  |  | +			break;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 |