|  | @@ -18,6 +18,7 @@
 | 
	
		
			
				|  |  |  #include "../CPlayerInterface.h"
 | 
	
		
			
				|  |  |  #include "../CGameInfo.h"
 | 
	
		
			
				|  |  |  #include "../widgets/TextControls.h"
 | 
	
		
			
				|  |  | +#include "../widgets/CGarrisonInt.h"
 | 
	
		
			
				|  |  |  #include "../windows/CCastleInterface.h"
 | 
	
		
			
				|  |  |  #include "../windows/InfoWindows.h"
 | 
	
		
			
				|  |  |  #include "../render/Canvas.h"
 | 
	
	
		
			
				|  | @@ -303,28 +304,30 @@ CHeroTooltip::CHeroTooltip(Point pos, const CGHeroInstance * hero):
 | 
	
		
			
				|  |  |  	init(InfoAboutHero(hero, InfoAboutHero::EInfoLevel::DETAILED));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -CInteractableHeroTooltip::CInteractableHeroTooltip(Point pos, const CGHeroInstance * hero):
 | 
	
		
			
				|  |  | -		CGarrisonInt(pos + Point(0, 73), 4, Point(0, 0), hero, nullptr, true, true, CGarrisonInt::ESlotsLayout::REVERSED_TWO_ROWS)
 | 
	
		
			
				|  |  | +CInteractableHeroTooltip::CInteractableHeroTooltip(Point pos, const CGHeroInstance * hero)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	init(InfoAboutHero(hero, InfoAboutHero::EInfoLevel::DETAILED));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	OBJECT_CONSTRUCTION_CAPTURING(255-DISPOSE);
 | 
	
		
			
				|  |  | +	garrison = std::make_shared<CGarrisonInt>(pos + Point(0, 73), 4, Point(0, 0), hero, nullptr, true, true, CGarrisonInt::ESlotsLayout::REVERSED_TWO_ROWS);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CInteractableHeroTooltip::init(const InfoAboutHero & hero)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	OBJECT_CONSTRUCTION_CAPTURING(255-DISPOSE);
 | 
	
		
			
				|  |  | -	portrait = std::make_shared<CAnimImage>("PortraitsLarge", hero.portrait, 0, 3, 2-73);
 | 
	
		
			
				|  |  | -	title = std::make_shared<CLabel>(66, 2-73, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE, hero.name);
 | 
	
		
			
				|  |  | +	portrait = std::make_shared<CAnimImage>("PortraitsLarge", hero.portrait, 0, 3, 2);
 | 
	
		
			
				|  |  | +	title = std::make_shared<CLabel>(66, 2, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE, hero.name);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if(hero.details)
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  |  		for(size_t i = 0; i < hero.details->primskills.size(); i++)
 | 
	
		
			
				|  |  | -			labels.push_back(std::make_shared<CLabel>(75 + 28 * (int)i, 58-73, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE,
 | 
	
		
			
				|  |  | +			labels.push_back(std::make_shared<CLabel>(75 + 28 * (int)i, 58, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE,
 | 
	
		
			
				|  |  |  													  std::to_string(hero.details->primskills[i])));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		labels.push_back(std::make_shared<CLabel>(158, 98-73, FONT_TINY, ETextAlignment::CENTER, Colors::WHITE, std::to_string(hero.details->mana)));
 | 
	
		
			
				|  |  | +		labels.push_back(std::make_shared<CLabel>(158, 98, FONT_TINY, ETextAlignment::CENTER, Colors::WHITE, std::to_string(hero.details->mana)));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		morale = std::make_shared<CAnimImage>("IMRL22", hero.details->morale + 3, 0, 5, 74-73);
 | 
	
		
			
				|  |  | -		luck = std::make_shared<CAnimImage>("ILCK22", hero.details->luck + 3, 0, 5, 91-73);
 | 
	
		
			
				|  |  | +		morale = std::make_shared<CAnimImage>("IMRL22", hero.details->morale + 3, 0, 5, 74);
 | 
	
		
			
				|  |  | +		luck = std::make_shared<CAnimImage>("ILCK22", hero.details->luck + 3, 0, 5, 91);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -383,9 +386,11 @@ CTownTooltip::CTownTooltip(Point pos, const CGTownInstance * town)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  CInteractableTownTooltip::CInteractableTownTooltip(Point pos, const CGTownInstance * town)
 | 
	
		
			
				|  |  | -		: CGarrisonInt(pos + Point(0, 73), 4, Point(0, 0), town->getUpperArmy(), nullptr, true, true, CGarrisonInt::ESlotsLayout::REVERSED_TWO_ROWS)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	init(InfoAboutTown(town, true));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	OBJECT_CONSTRUCTION_CAPTURING(255-DISPOSE);
 | 
	
		
			
				|  |  | +	garrison = std::make_shared<CGarrisonInt>(pos + Point(0, 73), 4, Point(0, 0), town->getUpperArmy(), nullptr, true, true, CGarrisonInt::ESlotsLayout::REVERSED_TWO_ROWS);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CInteractableTownTooltip::init(const InfoAboutTown & town)
 | 
	
	
		
			
				|  | @@ -395,37 +400,37 @@ void CInteractableTownTooltip::init(const InfoAboutTown & town)
 | 
	
		
			
				|  |  |  	//order of icons in def: fort, citadel, castle, no fort
 | 
	
		
			
				|  |  |  	size_t fortIndex = town.fortLevel ? town.fortLevel - 1 : 3;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	fort = std::make_shared<CAnimImage>("ITMCLS", fortIndex, 0, 105, 31-73);
 | 
	
		
			
				|  |  | +	fort = std::make_shared<CAnimImage>("ITMCLS", fortIndex, 0, 105, 31);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	assert(town.tType);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	size_t iconIndex = town.tType->clientInfo.icons[town.fortLevel > 0][town.built >= CGI->settings()->getInteger(EGameSettings::TOWNS_BUILDINGS_PER_TURN_CAP)];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	build = std::make_shared<CAnimImage>("itpt", iconIndex, 0, 3, 2-73);
 | 
	
		
			
				|  |  | -	title = std::make_shared<CLabel>(66, 2-73, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE, town.name);
 | 
	
		
			
				|  |  | +	build = std::make_shared<CAnimImage>("itpt", iconIndex, 0, 3, 2);
 | 
	
		
			
				|  |  | +	title = std::make_shared<CLabel>(66, 2, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE, town.name);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if(town.details)
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  | -		hall = std::make_shared<CAnimImage>("ITMTLS", town.details->hallLevel, 0, 67, 31-73);
 | 
	
		
			
				|  |  | +		hall = std::make_shared<CAnimImage>("ITMTLS", town.details->hallLevel, 0, 67, 31);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		if(town.details->goldIncome)
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  | -			income = std::make_shared<CLabel>(157, 58-73, FONT_TINY, ETextAlignment::CENTER, Colors::WHITE,
 | 
	
		
			
				|  |  | +			income = std::make_shared<CLabel>(157, 58, FONT_TINY, ETextAlignment::CENTER, Colors::WHITE,
 | 
	
		
			
				|  |  |  											  std::to_string(town.details->goldIncome));
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		if(town.details->garrisonedHero) //garrisoned hero icon
 | 
	
		
			
				|  |  | -			garrisonedHero = std::make_shared<CPicture>("TOWNQKGH", 149, 76-73);
 | 
	
		
			
				|  |  | +			garrisonedHero = std::make_shared<CPicture>("TOWNQKGH", 149, 76);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		if(town.details->customRes)//silo is built
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  |  			if(town.tType->primaryRes == EGameResID::WOOD_AND_ORE )// wood & ore
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  | -				res1 = std::make_shared<CAnimImage>("SMALRES", GameResID(EGameResID::WOOD), 0, 7, 75-73);
 | 
	
		
			
				|  |  | -				res2 = std::make_shared<CAnimImage>("SMALRES", GameResID(EGameResID::ORE), 0, 7, 88-73);
 | 
	
		
			
				|  |  | +				res1 = std::make_shared<CAnimImage>("SMALRES", GameResID(EGameResID::WOOD), 0, 7, 75);
 | 
	
		
			
				|  |  | +				res2 = std::make_shared<CAnimImage>("SMALRES", GameResID(EGameResID::ORE), 0, 7, 88);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			else
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  | -				res1 = std::make_shared<CAnimImage>("SMALRES", town.tType->primaryRes, 0, 7, 81-73);
 | 
	
		
			
				|  |  | +				res1 = std::make_shared<CAnimImage>("SMALRES", town.tType->primaryRes, 0, 7, 81);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 |