Răsfoiți Sursa

Add workaround for strange/unknown hota h3m quirk

Ivan Savenko 6 luni în urmă
părinte
comite
ae2e6f0357

+ 2 - 2
lib/campaign/CampaignHandler.cpp

@@ -371,7 +371,7 @@ void CampaignHandler::readHeaderFromMemory( CampaignHeader & ret, CBinaryReader
 		ret.difficultyChosenByPlayer = false;
 
 	ret.music = mapping.remapCampaignMusic(reader.readUInt8());
-	logGlobal->info("Campaign %s: map %d (%d scenarios), music theme: %s", filename, campaignMapId.getNum(), ret.numberOfScenarios, ret.music.getOriginalName());
+	logGlobal->trace("Campaign %s: map %d (%d scenarios), music theme: %s", filename, campaignMapId.getNum(), ret.numberOfScenarios, ret.music.getOriginalName());
 	ret.filename = filename;
 	ret.modName = modName;
 	ret.encoding = encoding;
@@ -389,7 +389,7 @@ CampaignScenario CampaignHandler::readScenarioFromMemory( CBinaryReader & reader
 		{
 			ret.prologVideo = mapping.remapCampaignVideo(reader.readUInt8());
 			ret.prologMusic = mapping.remapCampaignMusic(reader.readUInt8());
-			logGlobal->info("Campaign %s, scenario %s: music theme: %s, video: %s", header.filename, identifier, ret.prologMusic.getOriginalName(), ret.prologVideo.getOriginalName());
+			logGlobal->trace("Campaign %s, scenario %s: music theme: %s, video: %s", header.filename, identifier, ret.prologMusic.getOriginalName(), ret.prologVideo.getOriginalName());
 			ret.prologText.appendTextID(readLocalizedString(header, reader, header.filename, header.modName, header.encoding, identifier));
 		}
 		return ret;

+ 1 - 0
lib/mapping/CMapHeader.cpp

@@ -39,6 +39,7 @@ FactionID PlayerInfo::defaultCastle() const
 	if(isFactionRandom)
 		return FactionID::RANDOM;
 
+	assert(!allowedFactions.empty());
 	if(!allowedFactions.empty())
 		return *allowedFactions.begin();
 

+ 6 - 1
lib/mapping/MapFormatH3M.cpp

@@ -252,7 +252,12 @@ void CMapLoaderH3M::readPlayerInfo()
 		const bool allFactionsAllowed = playerInfo.isFactionRandom && allowedFactions.size() == features.factionsCount;
 
 		if(!allFactionsAllowed)
-			playerInfo.allowedFactions = allowedFactions;
+		{
+			if (!allowedFactions.empty())
+				playerInfo.allowedFactions = allowedFactions;
+			else
+				logGlobal->warn("Map '%s': Player %d has no allowed factions to play! Ignoring.", mapName, i);
+		}
 
 		playerInfo.hasMainTown = reader->readBool();
 		if(playerInfo.hasMainTown)