1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-10 22:31:40 +02:00

code review (first part)

This commit is contained in:
Laserlicht
2024-09-02 22:51:30 +02:00
parent 79d549951b
commit 609906f015
5 changed files with 129 additions and 136 deletions

View File

@@ -2,8 +2,8 @@
"MAPS/HC1_MAIN" : { // Heroes Chronicles 1
"regions":
{
"background": "Hc1_CamBkHc",
"prefix": "Hc1_HcSc",
"background": "chronicles_1/CamBkHc",
"prefix": "chronicles_1/HcSc",
"suffix": ["1", "2", "3"],
"color_suffix_length": 0,
"desc": [
@@ -19,24 +19,24 @@
},
"scenarioCount": 8,
"scenarios": [
{ "voiceProlog": "Hc1_ABVOFL4" },
{ "voiceProlog": "Hc1_H3X2UAE" },
{ "voiceProlog": "Hc1_H3X2BBA" },
{ "voiceProlog": "Hc1_H3X2RND" },
{ "voiceProlog": "Hc1_G1C" },
{ "voiceProlog": "Hc1_G2C" },
{ "voiceProlog": "Hc1_ABVOFL3" },
{ "voiceProlog": "Hc1_H3X2BBF", "voiceEpilog": "Hc1_N1C_D" }
{ "voiceProlog": "chronicles_1/ABVOFL4" },
{ "voiceProlog": "chronicles_1/H3X2UAE" },
{ "voiceProlog": "chronicles_1/H3X2BBA" },
{ "voiceProlog": "chronicles_1/H3X2RND" },
{ "voiceProlog": "chronicles_1/G1C" },
{ "voiceProlog": "chronicles_1/G2C" },
{ "voiceProlog": "chronicles_1/ABVOFL3" },
{ "voiceProlog": "chronicles_1/H3X2BBF", "voiceEpilog": "chronicles_1/N1C_D" }
],
"loadingBackground": "Hc1_LoadBar",
"introVideoRim": "Hc1_INTRORIM",
"introVideo": "Hc1_Intro"
"loadingBackground": "chronicles_1/LoadBar",
"introVideoRim": "chronicles_1/INTRORIM",
"introVideo": "chronicles_1/Intro"
},
"MAPS/HC2_MAIN" : { // Heroes Chronicles 2
"regions":
{
"background": "Hc2_CamBkHc",
"prefix": "Hc2_HcSc",
"background": "chronicles_2/CamBkHc",
"prefix": "chronicles_2/HcSc",
"suffix": ["1", "2", "3"],
"color_suffix_length": 0,
"desc": [
@@ -52,24 +52,24 @@
},
"scenarioCount": 8,
"scenarios": [
{ "voiceProlog": "Hc2_H3X2ELB" },
{ "voiceProlog": "Hc2_H3X2NBA" },
{ "voiceProlog": "Hc2_H3X2RNA" },
{ "voiceProlog": "Hc2_ABVOAB8" },
{ "voiceProlog": "Hc2_H3X2UAL" },
{ "voiceProlog": "Hc2_E1A" },
{ "voiceProlog": "Hc2_ABVOAB2" },
{ "voiceProlog": "Hc2_G1A", "voiceEpilog": "Hc2_S1C" }
{ "voiceProlog": "chronicles_2/H3X2ELB" },
{ "voiceProlog": "chronicles_2/H3X2NBA" },
{ "voiceProlog": "chronicles_2/H3X2RNA" },
{ "voiceProlog": "chronicles_2/ABVOAB8" },
{ "voiceProlog": "chronicles_2/H3X2UAL" },
{ "voiceProlog": "chronicles_2/E1A" },
{ "voiceProlog": "chronicles_2/ABVOAB2" },
{ "voiceProlog": "chronicles_2/G1A", "voiceEpilog": "chronicles_2/S1C" }
],
"loadingBackground": "Hc2_LoadBar",
"introVideoRim": "Hc2_INTRORIM",
"introVideo": "Hc2_Intro"
"loadingBackground": "chronicles_2/LoadBar",
"introVideoRim": "chronicles_2/INTRORIM",
"introVideo": "chronicles_2/Intro"
},
"MAPS/HC3_MAIN" : { // Heroes Chronicles 3
"regions":
{
"background": "Hc3_CamBkHc",
"prefix": "Hc3_HcSc",
"background": "chronicles_3/CamBkHc",
"prefix": "chronicles_3/HcSc",
"suffix": ["1", "2", "3"],
"color_suffix_length": 0,
"desc": [
@@ -85,24 +85,24 @@
},
"scenarioCount": 8,
"scenarios": [
{ "voiceProlog": "Hc3_G2C" },
{ "voiceProlog": "Hc3_ABVOAB1" },
{ "voiceProlog": "Hc3_G2D" },
{ "voiceProlog": "Hc3_E1B" },
{ "voiceProlog": "Hc3_ABVOAB2" },
{ "voiceProlog": "Hc3_ABVOAB4" },
{ "voiceProlog": "Hc3_ABVOAB6" },
{ "voiceProlog": "Hc3_G3B", "voiceEpilog": "Hc3_ABVOFL2" }
{ "voiceProlog": "chronicles_3/G2C" },
{ "voiceProlog": "chronicles_3/ABVOAB1" },
{ "voiceProlog": "chronicles_3/G2D" },
{ "voiceProlog": "chronicles_3/E1B" },
{ "voiceProlog": "chronicles_3/ABVOAB2" },
{ "voiceProlog": "chronicles_3/ABVOAB4" },
{ "voiceProlog": "chronicles_3/ABVOAB6" },
{ "voiceProlog": "chronicles_3/G3B", "voiceEpilog": "chronicles_3/ABVOFL2" }
],
"loadingBackground": "Hc3_LoadBar",
"introVideoRim": "Hc3_INTRORIM",
"introVideo": "Hc3_Intro"
"loadingBackground": "chronicles_3/LoadBar",
"introVideoRim": "chronicles_3/INTRORIM",
"introVideo": "chronicles_3/Intro"
},
"MAPS/HC4_MAIN" : { // Heroes Chronicles 4
"regions":
{
"background": "Hc4_CamBkHc",
"prefix": "Hc4_HcSc",
"background": "chronicles_4/CamBkHc",
"prefix": "chronicles_4/HcSc",
"suffix": ["1", "2", "3"],
"color_suffix_length": 0,
"desc": [
@@ -118,24 +118,24 @@
},
"scenarioCount": 8,
"scenarios": [
{ "voiceProlog": "Hc4_ABVOAB1" },
{ "voiceProlog": "Hc4_ABVODB4" },
{ "voiceProlog": "Hc4_H3X2ELC" },
{ "voiceProlog": "Hc4_ABVODS2" },
{ "voiceProlog": "Hc4_ABVODS1" },
{ "voiceProlog": "Hc4_ABVODS3" },
{ "voiceProlog": "Hc4_ABVODS4" },
{ "voiceProlog": "Hc4_H3X2NBD", "voiceEpilog": "Hc4_S1C" }
{ "voiceProlog": "chronicles_4/ABVOAB1" },
{ "voiceProlog": "chronicles_4/ABVODB4" },
{ "voiceProlog": "chronicles_4/H3X2ELC" },
{ "voiceProlog": "chronicles_4/ABVODS2" },
{ "voiceProlog": "chronicles_4/ABVODS1" },
{ "voiceProlog": "chronicles_4/ABVODS3" },
{ "voiceProlog": "chronicles_4/ABVODS4" },
{ "voiceProlog": "chronicles_4/H3X2NBD", "voiceEpilog": "chronicles_4/S1C" }
],
"loadingBackground": "Hc4_LoadBar",
"introVideoRim": "Hc4_INTRORIM",
"introVideo": "Hc4_Intro"
"loadingBackground": "chronicles_4/LoadBar",
"introVideoRim": "chronicles_4/INTRORIM",
"introVideo": "chronicles_4/Intro"
},
"MAPS/HC5_MAIN" : { // Heroes Chronicles 5
"regions":
{
"background": "Hc5_CamBkHc",
"prefix": "Hc5_HcSc",
"background": "chronicles_5/CamBkHc",
"prefix": "chronicles_5/HcSc",
"suffix": ["1", "2", "3"],
"color_suffix_length": 0,
"desc": [
@@ -148,21 +148,21 @@
},
"scenarioCount": 5,
"scenarios": [
{ "voiceProlog": "Hc5_ABVOAB1" },
{ "voiceProlog": "Hc5_H3X2RNA" },
{ "voiceProlog": "Hc5_ABVOFL2" },
{ "voiceProlog": "Hc5_ABVOFL4" },
{ "voiceProlog": "Hc5_H3X2UAH", "voiceEpilog": "Hc5_N1C_D" }
{ "voiceProlog": "chronicles_5/ABVOAB1" },
{ "voiceProlog": "chronicles_5/H3X2RNA" },
{ "voiceProlog": "chronicles_5/ABVOFL2" },
{ "voiceProlog": "chronicles_5/ABVOFL4" },
{ "voiceProlog": "chronicles_5/H3X2UAH", "voiceEpilog": "chronicles_5/N1C_D" }
],
"loadingBackground": "Hc5_LoadBar",
"introVideoRim": "Hc5_INTRORIM",
"introVideo": "Hc5_Intro"
"loadingBackground": "chronicles_5/LoadBar",
"introVideoRim": "chronicles_5/INTRORIM",
"introVideo": "chronicles_5/Intro"
},
"MAPS/HC6_MAIN" : { // Heroes Chronicles 6
"regions":
{
"background": "Hc6_CamBkHc",
"prefix": "Hc6_HcSc",
"background": "chronicles_6/CamBkHc",
"prefix": "chronicles_6/HcSc",
"suffix": ["1", "2", "3"],
"color_suffix_length": 0,
"desc": [
@@ -175,21 +175,21 @@
},
"scenarioCount": 5,
"scenarios": [
{ "voiceProlog": "Hc6_H3X2ELB" },
{ "voiceProlog": "Hc6_E1A" },
{ "voiceProlog": "Hc6_H3X2BBA" },
{ "voiceProlog": "Hc6_ABVOAB2" },
{ "voiceProlog": "Hc6_ABVOAB5", "voiceEpilog": "Hc6_ABVODB2" }
{ "voiceProlog": "chronicles_6/H3X2ELB" },
{ "voiceProlog": "chronicles_6/E1A" },
{ "voiceProlog": "chronicles_6/H3X2BBA" },
{ "voiceProlog": "chronicles_6/ABVOAB2" },
{ "voiceProlog": "chronicles_6/ABVOAB5", "voiceEpilog": "chronicles_6/ABVODB2" }
],
"loadingBackground": "Hc6_LoadBar",
"introVideoRim": "Hc6_INTRORIM",
"introVideo": "Hc6_Intro"
"loadingBackground": "chronicles_6/LoadBar",
"introVideoRim": "chronicles_6/INTRORIM",
"introVideo": "chronicles_6/Intro"
},
"MAPS/HC7_MAIN" : { // Heroes Chronicles 7
"regions":
{
"background": "Hc7_CamBkHc",
"prefix": "Hc7_HcSc",
"background": "chronicles_7/CamBkHc",
"prefix": "chronicles_7/HcSc",
"suffix": ["1", "2", "3"],
"color_suffix_length": 0,
"desc": [
@@ -205,24 +205,24 @@
},
"scenarioCount": 8,
"scenarios": [
{ "voiceProlog": "Hc7_ABVOFL2" },
{ "voiceProlog": "Hc7_ABVOFL3" },
{ "voiceProlog": "Hc7_N1C_D" },
{ "voiceProlog": "Hc7_S1C" },
{ "voiceProlog": "Hc7_H3X2UAB" },
{ "voiceProlog": "Hc7_E2C" },
{ "voiceProlog": "Hc7_H3X2NBE" },
{ "voiceProlog": "Hc7_ABVOFW4", "voiceEpilog": "Hc7_ABVOAB1" }
{ "voiceProlog": "chronicles_7/ABVOFL2" },
{ "voiceProlog": "chronicles_7/ABVOFL3" },
{ "voiceProlog": "chronicles_7/N1C_D" },
{ "voiceProlog": "chronicles_7/S1C" },
{ "voiceProlog": "chronicles_7/H3X2UAB" },
{ "voiceProlog": "chronicles_7/E2C" },
{ "voiceProlog": "chronicles_7/H3X2NBE" },
{ "voiceProlog": "chronicles_7/ABVOFW4", "voiceEpilog": "chronicles_7/ABVOAB1" }
],
"loadingBackground": "Hc7_LoadBar",
"introVideoRim": "Hc7_INTRORIM",
"introVideo": "Hc7_Intro5"
"loadingBackground": "chronicles_7/LoadBar",
"introVideoRim": "chronicles_7/INTRORIM",
"introVideo": "chronicles_7/Intro5"
},
"MAPS/HC8_MAIN" : { // Heroes Chronicles 8
"regions":
{
"background": "Hc8_CamBkHc",
"prefix": "Hc8_HcSc",
"background": "chronicles_8/CamBkHc",
"prefix": "chronicles_8/HcSc",
"suffix": ["1", "2", "3"],
"color_suffix_length": 0,
"desc": [
@@ -238,17 +238,17 @@
},
"scenarioCount": 8,
"scenarios": [
{ "voiceProlog": "Hc8_H3X2RNB" },
{ "voiceProlog": "Hc8_ABVOAB9" },
{ "voiceProlog": "Hc8_H3X2BBB" },
{ "voiceProlog": "Hc8_ABVODS1" },
{ "voiceProlog": "Hc8_H3X2ELA" },
{ "voiceProlog": "Hc8_E1B" },
{ "voiceProlog": "Hc8_H3X2BBD" },
{ "voiceProlog": "Hc8_H3X2ELE", "voiceEpilog": "Hc8_ABVOAB7" }
{ "voiceProlog": "chronicles_8/H3X2RNB" },
{ "voiceProlog": "chronicles_8/ABVOAB9" },
{ "voiceProlog": "chronicles_8/H3X2BBB" },
{ "voiceProlog": "chronicles_8/ABVODS1" },
{ "voiceProlog": "chronicles_8/H3X2ELA" },
{ "voiceProlog": "chronicles_8/E1B" },
{ "voiceProlog": "chronicles_8/H3X2BBD" },
{ "voiceProlog": "chronicles_8/H3X2ELE", "voiceEpilog": "chronicles_8/ABVOAB7" }
],
"loadingBackground": "Hc8_LoadBar",
"introVideoRim": "Hc8_INTRORIM",
"introVideo": "Hc8_Intro6"
"loadingBackground": "chronicles_8/LoadBar",
"introVideoRim": "chronicles_8/INTRORIM",
"introVideo": "chronicles_8/Intro6"
}
}

View File

@@ -208,8 +208,8 @@
"class" : "barbarian",
"special" : true,
"images": {
"large" : "Hc_HPL137",
"small" : "Hc_HPS137",
"large" : "HPL137",
"small" : "HPS137",
"specialtySmall" : "default",
"specialtyLarge" : "default"
},
@@ -237,8 +237,8 @@
"class" : "knight",
"special" : true,
"images": {
"large" : "Hc_HPL138",
"small" : "Hc_HPS138",
"large" : "HPL138",
"small" : "HPS138",
"specialtySmall" : "default",
"specialtyLarge" : "default"
},
@@ -266,8 +266,8 @@
"class" : "wizard",
"special" : true,
"images": {
"large" : "Hc_HPL139",
"small" : "Hc_HPS139",
"large" : "HPL139",
"small" : "HPS139",
"specialtySmall" : "default",
"specialtyLarge" : "default"
},
@@ -295,8 +295,8 @@
"class" : "ranger",
"special" : true,
"images": {
"large" : "Hc_HPL140",
"small" : "Hc_HPS140",
"large" : "HPL140",
"small" : "HPS140",
"specialtySmall" : "default",
"specialtyLarge" : "default"
},
@@ -324,8 +324,8 @@
"class" : "overlord",
"special" : true,
"images": {
"large" : "Hc_HPL141",
"small" : "Hc_HPS141",
"large" : "HPL141",
"small" : "HPS141",
"specialtySmall" : "default",
"specialtyLarge" : "default"
},
@@ -353,8 +353,8 @@
"class" : "beastmaster",
"special" : true,
"images": {
"large" : "Hc_HPL142",
"small" : "Hc_HPS142",
"large" : "HPL142",
"small" : "HPS142",
"specialtySmall" : "default",
"specialtyLarge" : "default"
},

View File

@@ -185,14 +185,16 @@ void ChroniclesExtractor::extractFiles(int no) const
QByteArray tmpChronicles = chronicles.at(no);
tmpChronicles.replace('\0', "");
std::string chroniclesDir = "chronicles_" + std::to_string(no);
QDir tmpDir = tempDir.filePath(tempDir.entryList({"app"}, QDir::Filter::Dirs).front());
tmpDir.setPath(tmpDir.filePath(tmpDir.entryList({QString(tmpChronicles)}, QDir::Filter::Dirs).front()));
tmpDir.setPath(tmpDir.filePath(tmpDir.entryList({"data"}, QDir::Filter::Dirs).front()));
auto basePath = VCMIDirs::get().userDataPath() / "Mods" / "chronicles" / "Mods" / ("chronicles_" + std::to_string(no)) / "content";
QDir outDirData(pathToQString(basePath / "Data"));
QDir outDirSprites(pathToQString(basePath / "Sprites"));
QDir outDirVideo(pathToQString(basePath / "Video"));
QDir outDirSounds(pathToQString(basePath / "Sounds"));
auto basePath = VCMIDirs::get().userDataPath() / "Mods" / "chronicles" / "Mods" / chroniclesDir / "content";
QDir outDirDataPortraits(pathToQString(VCMIDirs::get().userDataPath() / "Mods" / "chronicles" / "content" / "Data"));
QDir outDirData(pathToQString(basePath / "Data" / chroniclesDir));
QDir outDirSprites(pathToQString(basePath / "Sprites" / chroniclesDir));
QDir outDirVideo(pathToQString(basePath / "Video" / chroniclesDir));
QDir outDirSounds(pathToQString(basePath / "Sounds" / chroniclesDir));
QDir outDirMaps(pathToQString(basePath / "Maps"));
auto extract = [](QDir scrDir, QDir dest, QString file, std::vector<std::string> files = {}){
@@ -203,20 +205,10 @@ void ChroniclesExtractor::extractFiles(int no) const
else
{
for(const auto & item : files)
if(!boost::algorithm::to_lower_copy(entry.second.name).find(boost::algorithm::to_lower_copy(item)))
if(boost::algorithm::to_lower_copy(entry.second.name).find(boost::algorithm::to_lower_copy(item)) != std::string::npos)
archive.extractToFolder(dest.absolutePath().toStdString(), "", entry.second, true);
}
};
auto rename = [no](QDir dest){
dest.refresh();
for(const auto & entry : dest.entryList())
{
if(entry.toUpper().startsWith("HPS") || entry.toUpper().startsWith("HPL"))
dest.rename(entry, "Hc_" + entry);
if(!entry.startsWith("Hc" + QString::number(no) + "_"))
dest.rename(entry, "Hc" + QString::number(no) + "_" + entry);
}
};
extract(tmpDir, outDirData, "xBitmap.lod");
extract(tmpDir, outDirData, "xlBitmap.lod");
@@ -226,7 +218,7 @@ void ChroniclesExtractor::extractFiles(int no) const
extract(tmpDir, outDirSounds, "xSound.snd");
tmpDir.cdUp();
if(tmpDir.entryList({"maps"}, QDir::Filter::Dirs).size())
if(tmpDir.entryList({"maps"}, QDir::Filter::Dirs).size()) // special case for "The World Tree": the map is in the "Maps" folder instead of inside the lod
{
QDir tmpDirMaps = tmpDir.filePath(tmpDir.entryList({"maps"}, QDir::Filter::Dirs).front());
for(const auto & entry : tmpDirMaps.entryList())
@@ -235,18 +227,14 @@ void ChroniclesExtractor::extractFiles(int no) const
tmpDir.cdUp();
QDir tmpDirData = tmpDir.filePath(tmpDir.entryList({"data"}, QDir::Filter::Dirs).front());
extract(tmpDirData, outDirData, "bitmap.lod", std::vector<std::string>{"HPS137", "HPS138", "HPS139", "HPS140", "HPS141", "HPS142", "HPL137", "HPL138", "HPL139", "HPL140", "HPL141", "HPL142"});
auto tarnumPortraits = std::vector<std::string>{"HPS137", "HPS138", "HPS139", "HPS140", "HPS141", "HPS142", "HPL137", "HPL138", "HPL139", "HPL140", "HPL141", "HPL142"};
extract(tmpDirData, outDirDataPortraits, "bitmap.lod", tarnumPortraits);
extract(tmpDirData, outDirData, "lbitmap.lod", std::vector<std::string>{"INTRORIM"});
rename(outDirData);
rename(outDirSprites);
rename(outDirVideo);
rename(outDirSounds);
if(!outDirMaps.exists())
outDirMaps.mkpath(".");
QString campaignFileName = "Hc" + QString::number(no) + "_Main.h3c";
QFile(outDirData.filePath(outDirData.entryList({campaignFileName}).front())).copy(outDirMaps.filePath(campaignFileName));
QFile(outDirData.filePath(outDirData.entryList({"Main.h3c"}).front())).copy(outDirMaps.filePath(campaignFileName));
}
void ChroniclesExtractor::installChronicles(QStringList exe)

View File

@@ -640,7 +640,12 @@ void CModListView::on_installFromFileButton_clicked()
// https://bugreports.qt.io/browse/QTBUG-98651
QTimer::singleShot(0, this, [this]
{
QString filter = tr("All supported files") + " (*.h3m *.vmap *.h3c *.vcmp *.zip *.json *.exe);;" + tr("Maps") + " (*.h3m *.vmap);;" + tr("Campaigns") + " (*.h3c *.vcmp);;" + tr("Configs") + " (*.json);;" + tr("Mods") + " (*.zip);;" + tr("Gog files") + " (*.exe)";
QString filter = tr("All supported files") + " (*.h3m *.vmap *.h3c *.vcmp *.zip *.json *.exe);;" +
tr("Maps") + " (*.h3m *.vmap);;" +
tr("Campaigns") + " (*.h3c *.vcmp);;" +
tr("Configs") + " (*.json);;" +
tr("Mods") + " (*.zip);;" +
tr("Gog files") + " (*.exe)";
#if defined(VCMI_MOBILE)
filter = tr("All files (*.*)"); //Workaround for sometimes incorrect mime for some extensions (e.g. for exe)
#endif

View File

@@ -222,7 +222,7 @@ void CArchiveLoader::extractToFolder(const std::string & outputSubFolder, CInput
fileStream.seek(entry.offset);
fileStream.read(data.data(), entry.fullSize);
boost::filesystem::path extractedFilePath = createExtractedFilePath(outputSubFolder, entry.name , absolute);
boost::filesystem::path extractedFilePath = createExtractedFilePath(outputSubFolder, entry.name, absolute);
// writeToOutputFile
std::ofstream out(extractedFilePath.string(), std::ofstream::binary);