|
@@ -1,3 +1,13 @@
|
|
|
|
|
+/*
|
|
|
|
|
+ * ResourceConverter.h, part of VCMI engine
|
|
|
|
|
+ *
|
|
|
|
|
+ * Authors: listed in file AUTHORS in main folder
|
|
|
|
|
+ *
|
|
|
|
|
+ * License: GNU General Public License v2.0 or later
|
|
|
|
|
+ * Full text of license available in license.txt file, in main folder
|
|
|
|
|
+ *
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
#include "StdInc.h"
|
|
#include "StdInc.h"
|
|
|
|
|
|
|
|
#include "ResourceConverter.h"
|
|
#include "ResourceConverter.h"
|
|
@@ -15,12 +25,14 @@
|
|
|
namespace bfs = boost::filesystem;
|
|
namespace bfs = boost::filesystem;
|
|
|
|
|
|
|
|
// converts all pcx files from /Images into PNG
|
|
// converts all pcx files from /Images into PNG
|
|
|
-void ConvertPcxToPng(bool deleteOriginals)
|
|
|
|
|
|
|
+void doConvertPcxToPng(bool deleteOriginals)
|
|
|
{
|
|
{
|
|
|
- bfs::path imagesPath = VCMIDirs::get().userCachePath() / "extracted" / "Images";
|
|
|
|
|
|
|
+ std::string filename;
|
|
|
|
|
+
|
|
|
|
|
+ bfs::path imagesPath = VCMIDirs::get().userCachePath() / "extracted" / "IMAGES";
|
|
|
bfs::directory_iterator end_iter;
|
|
bfs::directory_iterator end_iter;
|
|
|
|
|
|
|
|
- for ( bfs::directory_iterator dir_itr(imagesPath); dir_itr != end_iter; ++dir_itr )
|
|
|
|
|
|
|
+ for(bfs::directory_iterator dir_itr(imagesPath); dir_itr != end_iter; ++dir_itr)
|
|
|
{
|
|
{
|
|
|
try
|
|
try
|
|
|
{
|
|
{
|
|
@@ -29,33 +41,32 @@ void ConvertPcxToPng(bool deleteOriginals)
|
|
|
|
|
|
|
|
std::string filePath = dir_itr->path().string();
|
|
std::string filePath = dir_itr->path().string();
|
|
|
std::string fileStem = dir_itr->path().stem().string();
|
|
std::string fileStem = dir_itr->path().stem().string();
|
|
|
- std::string filename = dir_itr->path().filename().string();
|
|
|
|
|
- filename = boost::locale::to_lower(filename);
|
|
|
|
|
|
|
+ filename = dir_itr->path().filename().string();
|
|
|
|
|
+ std::string filenameLowerCase = boost::locale::to_lower(filename);
|
|
|
|
|
|
|
|
- if(filename.find(".pcx") != std::string::npos)
|
|
|
|
|
|
|
+ if(bfs::extension(filenameLowerCase) == ".pcx")
|
|
|
{
|
|
{
|
|
|
- auto img = BitmapHandler::loadBitmap(filename);
|
|
|
|
|
|
|
+ auto img = BitmapHandler::loadBitmap(filenameLowerCase);
|
|
|
bfs::path pngFilePath = imagesPath / (fileStem + ".png");
|
|
bfs::path pngFilePath = imagesPath / (fileStem + ".png");
|
|
|
- img.save(QStringFromPath(pngFilePath), "PNG");
|
|
|
|
|
|
|
+ img.save(pathToQString(pngFilePath), "PNG");
|
|
|
|
|
|
|
|
- if (deleteOriginals)
|
|
|
|
|
|
|
+ if(deleteOriginals)
|
|
|
bfs::remove(filePath);
|
|
bfs::remove(filePath);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- catch ( const std::exception & ex )
|
|
|
|
|
|
|
+ catch(const std::exception & ex)
|
|
|
{
|
|
{
|
|
|
- logGlobal->info(dir_itr->path().filename().string() + " " + ex.what() + "\n");
|
|
|
|
|
|
|
+ logGlobal->info(filename + " " + ex.what() + "\n");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// splits a def file into individual parts and converts the output to PNG format
|
|
// splits a def file into individual parts and converts the output to PNG format
|
|
|
-void SplitDefFile(std::string fileName, bfs::path spritesPath, bool deleteOriginals)
|
|
|
|
|
|
|
+void splitDefFile(const std::string & fileName, const bfs::path & spritesPath, bool deleteOriginals)
|
|
|
{
|
|
{
|
|
|
- if (CResourceHandler::get()->existsResource(ResourceID("SPRITES/" + fileName)))
|
|
|
|
|
|
|
+ if(CResourceHandler::get()->existsResource(ResourceID("SPRITES/" + fileName)))
|
|
|
{
|
|
{
|
|
|
- std::string URI = fileName;
|
|
|
|
|
- std::unique_ptr<Animation> anim = make_unique<Animation>(URI);
|
|
|
|
|
|
|
+ std::unique_ptr<Animation> anim = make_unique<Animation>(fileName);
|
|
|
anim->preload();
|
|
anim->preload();
|
|
|
anim->exportBitmaps(VCMIDirs::get().userCachePath() / "extracted", true);
|
|
anim->exportBitmaps(VCMIDirs::get().userCachePath() / "extracted", true);
|
|
|
|
|
|
|
@@ -66,26 +77,23 @@ void SplitDefFile(std::string fileName, bfs::path spritesPath, bool deleteOrigin
|
|
|
logGlobal->error("Def File Split error! " + fileName);
|
|
logGlobal->error("Def File Split error! " + fileName);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// splits def files (TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44), this way faction resources are independent
|
|
|
|
|
|
|
+// splits def files (TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44) so that faction resources are independent
|
|
|
|
|
+// (town creature portraits, hero army creature portraits, adventure map dwellings, small town icons, big town icons,
|
|
|
|
|
+// hero speciality small icons, hero speciality large icons)
|
|
|
void splitDefFiles(bool deleteOriginals)
|
|
void splitDefFiles(bool deleteOriginals)
|
|
|
{
|
|
{
|
|
|
bfs::path extractedPath = VCMIDirs::get().userDataPath() / "extracted";
|
|
bfs::path extractedPath = VCMIDirs::get().userDataPath() / "extracted";
|
|
|
- bfs::path spritesPath = extractedPath / "Sprites";
|
|
|
|
|
-
|
|
|
|
|
- SplitDefFile("TwCrPort.def", spritesPath, deleteOriginals); // split town creature portraits
|
|
|
|
|
- SplitDefFile("CPRSMALL.def", spritesPath, deleteOriginals); // split hero army creature portraits
|
|
|
|
|
- SplitDefFile("FlagPort.def", spritesPath, deleteOriginals); // adventure map dwellings
|
|
|
|
|
- SplitDefFile("ITPA.def", spritesPath, deleteOriginals); // small town icons
|
|
|
|
|
- SplitDefFile("ITPt.def", spritesPath, deleteOriginals); // big town icons
|
|
|
|
|
- SplitDefFile("Un32.def", spritesPath, deleteOriginals); // big town icons
|
|
|
|
|
- SplitDefFile("Un44.def", spritesPath, deleteOriginals); // big town icons
|
|
|
|
|
|
|
+ bfs::path spritesPath = extractedPath / "SPRITES";
|
|
|
|
|
+
|
|
|
|
|
+ for(std::string defFilename : {"TwCrPort.def", "CPRSMALL.def", "FlagPort.def", "ITPA.def", "ITPt.def", "Un32.def", "Un44.def"})
|
|
|
|
|
+ splitDefFile(defFilename, spritesPath, deleteOriginals);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void ConvertExtractedResourceFiles(bool splitDefs, bool convertPcxToPng, bool deleteOriginals)
|
|
|
|
|
|
|
+void convertExtractedResourceFiles(bool splitDefs, bool convertPcxToPng, bool deleteOriginals)
|
|
|
{
|
|
{
|
|
|
- if (splitDefs)
|
|
|
|
|
|
|
+ if(splitDefs)
|
|
|
splitDefFiles(deleteOriginals);
|
|
splitDefFiles(deleteOriginals);
|
|
|
|
|
|
|
|
- if (convertPcxToPng)
|
|
|
|
|
- ConvertPcxToPng(deleteOriginals);
|
|
|
|
|
|
|
+ if(convertPcxToPng)
|
|
|
|
|
+ doConvertPcxToPng(deleteOriginals);
|
|
|
}
|
|
}
|