Bazaar developer reference

CvWorldBuilderMapLoader::Preload(const wchar_t *, bool)

Defined in
CvWorldBuilderMapLoader.cpp, line 180
Class
CvWorldBuilderMapLoader
Hook name
CivHooks::CvWorldBuilderMapLoader_Preload

Hooks

static bool BeforeCvWorldBuilderMapLoader_Preload(const wchar_t* wszFilename, bool bScenario, bool& result);static void AfterCvWorldBuilderMapLoader_Preload(const wchar_t* wszFilename, bool bScenario, bool& result);static bool ReplaceCvWorldBuilderMapLoader_Preload(bool (*original)(const wchar_t*, bool), const wchar_t* wszFilename, bool bScenario);CivRegisterBefore<CivHooks::CvWorldBuilderMapLoader_Preload>(host, &BeforeCvWorldBuilderMapLoader_Preload);CivRegisterAfter<CivHooks::CvWorldBuilderMapLoader_Preload>(host, &AfterCvWorldBuilderMapLoader_Preload);CivRegisterReplace<CivHooks::CvWorldBuilderMapLoader_Preload>(host, &ReplaceCvWorldBuilderMapLoader_Preload);

Code

180bool CvWorldBuilderMapLoader::Preload(const wchar_t* wszFilename, bool bScenario)181{182	InitTypeDesc();183184	// Re-initialize map info185	new(&sg_kMapInfo)CvWorldBuilderMapLoaderMapInfo();186187	if(sg_kSave.Load(wszFilename, sg_kMapTypeDesc))188	{189		const uint uiPlotCount = sg_kSave.GetPlotCount();190191		if(!bScenario)192		{193			// Clear out all of the scenario data (except improvements)194			sg_kSave.ClearScenarioData(true);195196			// Remove all improvements that aren't goodies197			for(uint i = 0; i < uiPlotCount; ++i)198			{199				CvWorldBuilderMap::PlotScenarioData& kPlot = sg_kSave.GetPlotScenarioData(i);200				if(kPlot.m_byImprovement != CvWorldBuilderMap::PlotScenarioData::InvalidImprovement)201				{202					ImprovementTypes eType = (ImprovementTypes)kPlot.m_byImprovement;203					const CvImprovementEntry* pkImprovement = GC.getImprovementInfo(eType);204					if(pkImprovement == NULL || !pkImprovement->IsGoody())205						kPlot.m_byImprovement = CvWorldBuilderMap::PlotScenarioData::InvalidImprovement;206				}207			}208		}209210		sg_kMapInfo.uiWidth = sg_kSave.GetWidth();211		sg_kMapInfo.uiHeight = sg_kSave.GetHeight();212213		sg_kMapInfo.uiPlayers = sg_kSave.GetPlayerCount();214		sg_kMapInfo.uiCityStates = sg_kSave.GetCityStateCount();215216		sg_kMapInfo.uiMajorCivStartingPositions = 0;217		sg_kMapInfo.uiMinorCivStartingPositions = 0;218219		sg_kMapInfo.bWorldWrap = sg_kSave.GetFlag(CvWorldBuilderMap::FLAG_WORLD_WRAP);220		sg_kMapInfo.bRandomResources = sg_kSave.GetFlag(CvWorldBuilderMap::FLAG_RANDOM_RECOURCES);221222		for(uint i = 0; i < uiPlotCount; ++i)223		{224			const CvWorldBuilderMap::PlotMapData& kPlotData = sg_kSave.GetPlotData(i);225			if(kPlotData.GetFlag(CvWorldBuilderMap::PlotMapData::START_POS_MAJOR))226				sg_kMapInfo.uiMajorCivStartingPositions++;227			else if(kPlotData.GetFlag(CvWorldBuilderMap::PlotMapData::START_POS_MINOR))228				sg_kMapInfo.uiMinorCivStartingPositions++;229		}230231		const uint uiPlayerCount = sg_kSave.GetPlayerCount();232		if(uiPlayerCount > 0)233		{234			for(uint i = 0; i < uiPlayerCount; ++i)235			{236				const uint uiNew = sg_auiPlayerSlots[i];237				if(uiNew != i)238				{239					if(uiNew < uiPlayerCount)240					{241						sg_kSave.SwapPlayers(uiNew, i);242243						for(uint j = i + 1; j < uiPlayerCount; ++j)244						{245							if(sg_auiPlayerSlots[j] == i)246							{247								sg_auiPlayerSlots[j] = uiNew;248								break;249							}250						}251					}252				}253			}254		}255256		//ResetPlayerSlots();257258		return true;259	}260	else261	{262		return false;263	}264}

Calls

Called by