|  | @@ -90,7 +90,7 @@ public:
 | 
	
		
			
				|  |  |  	void draw(SDL_Surface * where, int posX=0, int posY=0, Rect *src=nullptr, ui8 alpha=255) const override;
 | 
	
		
			
				|  |  |  	void draw(SDL_Surface * where, SDL_Rect * dest, SDL_Rect * src, ui8 alpha=255) const override;
 | 
	
		
			
				|  |  |  	std::unique_ptr<IImage> scaleFast(float scale) const override;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +	void exportBitmap(const boost::filesystem::path & path) const override;
 | 
	
		
			
				|  |  |  	void playerColored(PlayerColor player) override;
 | 
	
		
			
				|  |  |  	void setFlagColor(PlayerColor player) override;
 | 
	
		
			
				|  |  |  	int width() const override;
 | 
	
	
		
			
				|  | @@ -147,6 +147,8 @@ public:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	std::unique_ptr<IImage> scaleFast(float scale) const override;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	void exportBitmap(const boost::filesystem::path & path) const override;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	void playerColored(PlayerColor player) override;
 | 
	
		
			
				|  |  |  	void setFlagColor(PlayerColor player) override;
 | 
	
		
			
				|  |  |  	int width() const override;
 | 
	
	
		
			
				|  | @@ -838,6 +840,11 @@ std::unique_ptr<IImage> SDLImage::scaleFast(float scale) const
 | 
	
		
			
				|  |  |  	return std::unique_ptr<IImage>(ret);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +void SDLImage::exportBitmap(const boost::filesystem::path& path) const
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	SDL_SaveBMP(surf, path.string().c_str());
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  void SDLImage::playerColored(PlayerColor player)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	graphics->blueToPlayersAdv(surf, player);
 | 
	
	
		
			
				|  | @@ -1162,6 +1169,11 @@ void CompImage::shiftPalette(int from, int howMany)
 | 
	
		
			
				|  |  |  	logAnim->error("CompImage::shiftPalette is not implemented");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +void CompImage::exportBitmap(const boost::filesystem::path& path) const
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	logAnim->error("CompImage::exportBitmap is not implemented");
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /*************************************************************************
 | 
	
		
			
				|  |  |   *  CAnimation for animations handling, can load part of file if needed  *
 | 
	
	
		
			
				|  | @@ -1289,6 +1301,39 @@ void CAnimation::initFromJson(const JsonNode & config)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +void CAnimation::exportBitmaps(const boost::filesystem::path& path) const
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	if(images.empty())
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		logGlobal->error("Nothing to export, animation is empty");
 | 
	
		
			
				|  |  | +		return;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	boost::filesystem::path actualPath = path / "SPRITES" / name;
 | 
	
		
			
				|  |  | +	boost::filesystem::create_directories(actualPath);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	size_t counter = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	for(const auto & groupPair : images)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		size_t group = groupPair.first;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		for(const auto & imagePair : groupPair.second)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			size_t frame = imagePair.first;
 | 
	
		
			
				|  |  | +			const IImage * img = imagePair.second;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			boost::format fmt("%d_%d.bmp");
 | 
	
		
			
				|  |  | +			fmt % group % frame;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			img->exportBitmap(actualPath / fmt.str());
 | 
	
		
			
				|  |  | +			counter++;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	logGlobal->info("Exported %d frames to %s", counter, actualPath.string());
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  void CAnimation::init(CDefFile * file)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	if (file)
 |