Bazaar developer reference

CvGame::InitMap(CvGameInitialItemsOverrides &)

Defined in
CvGame.cpp, line 451
Class
CvGame
Hook name
CivHooks::CvGame_InitMap

Hooks

static bool BeforeCvGame_InitMap(CvGame* self, CvGameInitialItemsOverrides& kGameInitialItemsOverrides, bool& result);static void AfterCvGame_InitMap(CvGame* self, CvGameInitialItemsOverrides& kGameInitialItemsOverrides, bool& result);static bool ReplaceCvGame_InitMap(bool (*original)(CvGame*, CvGameInitialItemsOverrides&), CvGame* self, CvGameInitialItemsOverrides& kGameInitialItemsOverrides);CivRegisterBefore<CivHooks::CvGame_InitMap>(host, &BeforeCvGame_InitMap);CivRegisterAfter<CivHooks::CvGame_InitMap>(host, &AfterCvGame_InitMap);CivRegisterReplace<CivHooks::CvGame_InitMap>(host, &ReplaceCvGame_InitMap);

Code

451bool CvGame::InitMap(CvGameInitialItemsOverrides& kGameInitialItemsOverrides)452{453	CvMap& kMap = GC.getMap();454	const bool bWBSave = CvPreGame::isWBMapScript();455	if(bWBSave)456	{457		const CvWorldBuilderMapLoaderMapInfo& kWBMapInfo =458		    CvWorldBuilderMapLoader::GetCurrentMapInfo();459460		if(kWBMapInfo.uiWidth * kWBMapInfo.uiHeight != 0)461		{462			CvMapInitData kMapInitData;463			kMapInitData.m_bWrapX = kWBMapInfo.bWorldWrap;464			kMapInitData.m_bWrapY = false;465			kMapInitData.m_iGridW = kWBMapInfo.uiWidth;466			kMapInitData.m_iGridH = kWBMapInfo.uiHeight;467			kMap.init(&kMapInitData);468469			CvBarbarians::MapInit(kMap.numPlots());470471			CvWorldBuilderMapLoader::InitMap();472			CvWorldBuilderMapLoader::ValidateTerrain();473474			ICvEngineScriptSystem1* pkScriptSystem = gDLL->GetScriptSystem();475			if(pkScriptSystem != NULL)476			{477				lua_State* L = pkScriptSystem->CreateLuaThread("WorldBuilderMapLoader");478				if(L != NULL)479				{480					lua_cpcall(L, &WorldBuilderMapLoaderAddRandomItems, 0);481					lua_cpcall(L, &WorldBuilderMapLoaderLoadModData, 0);482					lua_cpcall(L, &WorldBuilderMapLoaderRunPostProcessScript, 0);483484					pkScriptSystem->FreeLuaThread(L);485				}486			}487		}488		else489		{490			// Empty map...491			FAssertMsg(0, "Empty World Builder Map!");492493			// Make the map at least 1 x 1 to avoid crashes494			CvMapInitData kMapInitData;495			kMapInitData.m_bWrapX = false;496			kMapInitData.m_bWrapY = false;497			kMapInitData.m_iGridW = 1;498			kMapInitData.m_iGridH = 1;499			kMap.init(&kMapInitData);500501			CvBarbarians::MapInit(kMap.numPlots());502503			CvWorldBuilderMapLoader::ValidateTerrain();504		}505	}506	else507	{508		const CvString& strMapName = CvPreGame::mapScriptName();509510		CvMapGenerator* pGenerator = FNEW(CvMapGenerator(strMapName.c_str()), c_eMPoolTypeGame, 0);511512		CvMapInitData kData;513		if(pGenerator->GetMapInitData(kData, CvPreGame::worldSize()))514			kMap.init(&kData);515		else516			kMap.init();517518		CvBarbarians::MapInit(kMap.numPlots());519520		pGenerator->GenerateRandomMap();521		pGenerator->GetGameInitialItemsOverrides(kGameInitialItemsOverrides);522523		delete pGenerator;524	}525526	CvBarbarians::MapInit(GC.getMap().numPlots());527528	// Run this for all maps because a map should never crash the game on529	// load regardless of where that map came from.  (The map scripts are mod-able after all!!!)530	CvWorldBuilderMapLoader::ValidateCoast();531532	// Update some cached values533	GC.getMap().updateAdjacency();534535	// Set all the observer teams to be able to see all the plots536	for(int iI = 0; iI < MAX_PLAYERS; iI++)537	{538		if (CvPreGame::slotStatus((PlayerTypes)iI) == SS_OBSERVER)539		{540			CvPlayer& kPlayer = GET_PLAYER((PlayerTypes)iI);541			TeamTypes eTeam = kPlayer.getTeam();542543			if (eTeam != NO_TEAM)544			{545				const int iNumInvisibleInfos = NUM_INVISIBLE_TYPES;546				for(int plotID = 0; plotID < GC.getMap().numPlots(); plotID++)547				{548					CvPlot* pLoopPlot = GC.getMap().plotByIndexUnchecked(plotID);549550					pLoopPlot->changeVisibilityCount(eTeam, 1, NO_INVISIBLE, true, false);551552					for(int iJ = 0; iJ < iNumInvisibleInfos; iJ++)553					{554						pLoopPlot->changeInvisibleVisibilityCount(eTeam, ((InvisibleTypes)iJ), 1);555					}556557					pLoopPlot->setRevealed(eTeam, true, false);558				}559			}560		}561	}562563	return true;564}

Calls

Called by