| 
					
				 | 
			
			
				@@ -670,7 +670,7 @@ CMarketplaceWindow::CMarketplaceWindow(const IMarket * Market, const CGHeroInsta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	std::string title; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if(market->o->ID == Obj::TOWN) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if(auto * o = dynamic_cast<const CGTownInstance *>(market)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		switch (mode) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		{ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -678,11 +678,11 @@ CMarketplaceWindow::CMarketplaceWindow(const IMarket * Market, const CGHeroInsta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			title = (*CGI->townh)[ETownType::STRONGHOLD]->town->buildings[BuildingID::FREELANCERS_GUILD]->getNameTranslated(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		case EMarketMode::RESOURCE_ARTIFACT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			title = (*CGI->townh)[market->o->subID]->town->buildings[BuildingID::ARTIFACT_MERCHANT]->getNameTranslated(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			title = (*CGI->townh)[o->subID]->town->buildings[BuildingID::ARTIFACT_MERCHANT]->getNameTranslated(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			sliderNeeded = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		case EMarketMode::ARTIFACT_RESOURCE: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			title = (*CGI->townh)[market->o->subID]->town->buildings[BuildingID::ARTIFACT_MERCHANT]->getNameTranslated(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			title = (*CGI->townh)[o->subID]->town->buildings[BuildingID::ARTIFACT_MERCHANT]->getNameTranslated(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// create image that copies part of background containing slot MISC_1 into position of slot MISC_5 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// this is workaround for bug in H3 files where this slot for ragdoll on this screen is missing 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -696,21 +696,24 @@ CMarketplaceWindow::CMarketplaceWindow(const IMarket * Market, const CGHeroInsta 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		switch(market->o->ID) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(auto * o = dynamic_cast<const CGObjectInstance *>(market)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		case Obj::BLACK_MARKET: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			title = CGI->generaltexth->allTexts[349]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sliderNeeded = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		case Obj::TRADING_POST: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			title = CGI->generaltexth->allTexts[159]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		case Obj::TRADING_POST_SNOW: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			title = CGI->generaltexth->allTexts[159]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			title = market->o->getObjectName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			switch(o->ID) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			case Obj::BLACK_MARKET: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				title = CGI->generaltexth->allTexts[349]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sliderNeeded = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			case Obj::TRADING_POST: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				title = CGI->generaltexth->allTexts[159]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			case Obj::TRADING_POST_SNOW: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				title = CGI->generaltexth->allTexts[159]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				title = o->getObjectName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -829,14 +832,15 @@ void CMarketplaceWindow::makeDeal() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if(allowDeal) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const auto * o = dynamic_cast<const CGObjectInstance *>(market); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(slider) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			LOCPLINT->cb->trade(market->o, mode, leftIdToSend, hRight->id, slider->getValue() * r1, hero); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LOCPLINT->cb->trade(o, mode, leftIdToSend, hRight->id, slider->getValue() * r1, hero); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			slider->moveTo(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			LOCPLINT->cb->trade(market->o, mode, leftIdToSend, hRight->id, r2, hero); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LOCPLINT->cb->trade(o, mode, leftIdToSend, hRight->id, r2, hero); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1236,7 +1240,7 @@ void CAltarWindow::makeDeal() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		LOCPLINT->cb->trade(market->o, mode, ids, {}, toSacrifice, hero); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LOCPLINT->cb->trade(dynamic_cast<const CGObjectInstance *>(market), mode, ids, {}, toSacrifice, hero); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		for(int& val : sacrificedUnits) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			val = 0; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1255,7 +1259,7 @@ void CAltarWindow::makeDeal() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			positions.push_back(hero->getArtPos(art)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		LOCPLINT->cb->trade(market->o, mode, positions, {}, {}, hero); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LOCPLINT->cb->trade(dynamic_cast<const CGObjectInstance *>(market), mode, positions, {}, {}, hero); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		arts->artifactsOnAltar.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		for(auto item : items[0]) 
			 |