1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-25 22:42:04 +02:00

Support for defining new campaign regions in mods, for hota h3c

This commit is contained in:
Ivan Savenko
2025-05-30 18:27:54 +03:00
parent 1ea2ce7959
commit a842dfb3c4
27 changed files with 677 additions and 477 deletions

View File

@@ -11,6 +11,7 @@
#include "CampaignHandler.h"
#include "CampaignState.h"
#include "CampaignRegionsHandler.h"
#include "../filesystem/Filesystem.h"
#include "../filesystem/CCompressedStream.h"
@@ -152,7 +153,7 @@ void CampaignHandler::readHeaderFromJson(CampaignHeader & ret, JsonNode & reader
}
ret.version = CampaignVersion::VCMI;
ret.campaignRegions = CampaignRegions::fromJson(reader["regions"]);
ret.campaignRegions = CampaignRegions(reader["regions"]);
ret.numberOfScenarios = reader["scenarios"].Vector().size();
ret.name.appendTextID(readLocalizedString(ret, reader["name"].String(), filename, modName, "name"));
ret.description.appendTextID(readLocalizedString(ret, reader["description"].String(), filename, modName, "description"));
@@ -350,14 +351,14 @@ void CampaignHandler::readHeaderFromMemory( CampaignHeader & ret, CBinaryReader
assert(unknownB == 1);
assert(unknownC == 0);
assert(ret.numberOfScenarios <= 8);
// TODO. Or they are hardcoded in this hota version?
// ret.campaignRegions = ???;
}
ui8 campId = reader.readUInt8() - 1;//change range of it from [1, 20] to [0, 19]
if(ret.version < CampaignVersion::Chr) // For chronicles: Will be overridden later; Chronicles uses own logic (reusing OH3 ID's)
ret.loadLegacyData(campId);
const auto & mapping = LIBRARY->mapFormat->getMapping(ret.version);
CampaignRegionID campaignMapId(reader.readUInt8());
ret.campaignRegions = *LIBRARY->campaignRegions->getByIndex(mapping.remap(campaignMapId));
if(ret.version != CampaignVersion::HotA)
ret.numberOfScenarios = ret.campaignRegions.regionsCount();
ret.name.appendTextID(readLocalizedString(ret, reader, filename, modName, encoding, "name"));
ret.description.appendTextID(readLocalizedString(ret, reader, filename, modName, encoding, "description"));
ret.author.appendRawString("");